Happy Addons for Elementor (Mega Menu, Post Grid, Woocommerce Product Grid, Table, Event Calendar, Slider Elementor Widget) - Version 2.8.0

Version Description

  • 1 April 2020 =

  • New: Post Tab widget

  • New: Post List widget

Download this release

Release Info

Developer thehappymonster
Plugin Icon 128x128 Happy Addons for Elementor (Mega Menu, Post Grid, Woocommerce Product Grid, Table, Event Calendar, Slider Elementor Widget)
Version 2.8.0
Comparing to
See all releases

Code changes from version 2.7.3 to 2.8.0

assets/admin/js/select2.js ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function ($) {
2
+ "use strict";
3
+ jQuery(window).on('elementor:init', function () {
4
+ var ControlQueryPostSearch = elementor.modules.controls.BaseData.extend({
5
+
6
+ isPostSearchReady: false,
7
+ dataQueryOption: function(){
8
+ var self = this;
9
+ var data_options = self.model.get('data_options');
10
+ if( !data_options && typeof data_options !== "object"){
11
+ return false;
12
+ }else{
13
+ return data_options;
14
+ }
15
+ },
16
+ getPostTitlesbyID: function () {
17
+ var self = this,
18
+ dataQueryOption = this.dataQueryOption(),
19
+ ids = this.getControlValue();
20
+
21
+ if (!ids || 0 === ids.length) {
22
+ return;
23
+ }
24
+
25
+ if (!_.isArray(ids)) {
26
+ ids = [ids];
27
+ }
28
+ var default_value = {
29
+ security: HappyAddonsEditor.select2Secret,
30
+ select_type: 'selected',
31
+ id: ids
32
+ };
33
+ $.ajax({
34
+ url: ajaxurl,
35
+ type: 'POST',
36
+ data: $.extend( {}, default_value, dataQueryOption ),
37
+ before: self.addControlSpinner(),
38
+ success: function (results) {
39
+
40
+ self.isPostSearchReady = true;
41
+ self.model.set('options', results);
42
+ self.render();
43
+ }
44
+ });
45
+ },
46
+ addControlSpinner: function () {
47
+ this.ui.select.prop('disabled', true);
48
+ this.$el.find('.elementor-control-title').after('<span class="elementor-control-spinner">&nbsp;<i class="eicon-spinner eicon-animation-spin"></i>&nbsp;</span>');
49
+ },
50
+ onReady: function () {
51
+ var self = this,
52
+ dataQueryOption = this.dataQueryOption();
53
+
54
+ if( !dataQueryOption ){
55
+ return;
56
+ }
57
+ this.ui.select.select2({
58
+ placeholder: self.model.get('placeholder') ? self.model.get('placeholder') : 'Search',
59
+ minimumInputLength: self.model.get('mininput') ? self.model.get('mininput') : 0,
60
+ allowClear: true,
61
+ ajax: {
62
+ url: ajaxurl,
63
+ dataType: 'json',
64
+ method: 'post',
65
+ delay: 250,
66
+ data: function (params) {
67
+ var default_value = {
68
+ security: HappyAddonsEditor.select2Secret,
69
+ select_type: 'choose',
70
+ q: params.term,
71
+ };
72
+ var data_options = self.model.get('data_options');
73
+ return $.extend( {}, default_value, data_options );
74
+ },
75
+ processResults: function (data) {
76
+ // parse the results into the format expected by Select2.
77
+ // since we are using custom formatting functions we do not need to
78
+ // alter the remote JSON data
79
+ var notFound = [{
80
+ "id": -1,
81
+ "text": "No results found",
82
+ "disabled": true
83
+ }];
84
+ return {
85
+ results: data !== null ? data : notFound
86
+ }
87
+ },
88
+ cache: true
89
+ }
90
+ });
91
+ if (!this.isPostSearchReady) {
92
+ this.getPostTitlesbyID();
93
+ }
94
+ },
95
+ onBeforeDestroy: function () {
96
+ if (this.ui.select.data('select2')) {
97
+ this.ui.select.select2('destroy');
98
+ }
99
+ this.$el.remove();
100
+ }
101
+ });
102
+ elementor.addControlView('ha-select2', ControlQueryPostSearch);
103
+ });
104
+ })(jQuery);
assets/admin/js/select2.min.js ADDED
@@ -0,0 +1 @@
 
1
+ !function(e){"use strict";jQuery(window).on("elementor:init",function(){var t=elementor.modules.controls.BaseData.extend({isPostSearchReady:!1,dataQueryOption:function(){var e=this,t=e.model.get("data_options");return!(!t&&"object"!=typeof t)&&t},getPostTitlesbyID:function(){var t=this,o=this.dataQueryOption(),n=this.getControlValue();if(n&&0!==n.length){_.isArray(n)||(n=[n]);var s={security:HappyAddonsEditor.select2Secret,select_type:"selected",id:n};e.ajax({url:ajaxurl,type:"POST",data:e.extend({},s,o),before:t.addControlSpinner(),success:function(e){t.isPostSearchReady=!0,t.model.set("options",e),t.render()}})}},addControlSpinner:function(){this.ui.select.prop("disabled",!0),this.$el.find(".elementor-control-title").after('<span class="elementor-control-spinner">&nbsp;<i class="eicon-spinner eicon-animation-spin"></i>&nbsp;</span>')},onReady:function(){var t=this;this.dataQueryOption()&&(this.ui.select.select2({placeholder:t.model.get("placeholder")?t.model.get("placeholder"):"Search",minimumInputLength:t.model.get("mininput")?t.model.get("mininput"):0,allowClear:!0,ajax:{url:ajaxurl,dataType:"json",method:"post",delay:250,data:function(o){var n={security:HappyAddonsEditor.select2Secret,select_type:"choose",q:o.term},s=t.model.get("data_options");return e.extend({},n,s)},processResults:function(e){var t=[{id:-1,text:"No results found",disabled:!0}];return{results:null!==e?e:t}},cache:!0}}),this.isPostSearchReady||this.getPostTitlesbyID())},onBeforeDestroy:function(){this.ui.select.data("select2")&&this.ui.select.select2("destroy"),this.$el.remove()}});elementor.addControlView("ha-select2",t)})}(jQuery);
assets/css/main.css CHANGED
@@ -3160,3 +3160,341 @@ a.ha-social-icon:after {
3160
  -webkit-backdrop-filter: blur(10px);
3161
  backdrop-filter: blur(10px);
3162
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3160
  -webkit-backdrop-filter: blur(10px);
3161
  backdrop-filter: blur(10px);
3162
  }
3163
+
3164
+ .ha-post-list {
3165
+ margin: 0;
3166
+ padding: 0;
3167
+ list-style: none;
3168
+ }
3169
+
3170
+ .ha-post-list.ha-post-list-inline {
3171
+ display: -webkit-box;
3172
+ display: -webkit-flex;
3173
+ display: -ms-flexbox;
3174
+ display: flex;
3175
+ -webkit-flex-wrap: wrap;
3176
+ -ms-flex-wrap: wrap;
3177
+ flex-wrap: wrap;
3178
+ }
3179
+
3180
+ .ha-post-list .ha-post-list-item {
3181
+ display: -webkit-box;
3182
+ display: -webkit-flex;
3183
+ display: -ms-flexbox;
3184
+ display: flex;
3185
+ margin: 0;
3186
+ margin-bottom: 10px;
3187
+ padding: 0;
3188
+ }
3189
+
3190
+ .ha-post-list.ha-post-list-inline .ha-post-list-item {
3191
+ margin-right: 21px;
3192
+ }
3193
+
3194
+ .ha-post-list .ha-post-list-item:last-child,
3195
+ .ha-post-list.ha-post-list-inline .ha-post-list-item:last-child {
3196
+ margin-right: 0;
3197
+ margin-bottom: 0;
3198
+ }
3199
+
3200
+ .ha-post-list .ha-post-list-item a {
3201
+ display: -webkit-box;
3202
+ display: -webkit-flex;
3203
+ display: -ms-flexbox;
3204
+ display: flex;
3205
+ width: 100%;
3206
+ }
3207
+
3208
+ .ha-post-list-title {
3209
+ display: block;
3210
+ margin-top: 0;
3211
+ margin-bottom: 0;
3212
+ color: #242424;
3213
+ font-size: 1rem;
3214
+ -webkit-transition: all .4s;
3215
+ transition: all .4s;
3216
+ }
3217
+
3218
+ .ha-post-list .ha-post-list-item a:hover .ha-post-list-title {
3219
+ color: #e04d8b;
3220
+ }
3221
+
3222
+ .ha-post-list-item a img {
3223
+ margin-right: 15px;
3224
+ }
3225
+
3226
+ span.ha-post-list-icon {
3227
+ margin-right: 8px;
3228
+ color: #242424;
3229
+ font-size: 14px;
3230
+ }
3231
+
3232
+ .ha-post-list-meta-wrap {
3233
+ display: -webkit-box;
3234
+ display: -webkit-flex;
3235
+ display: -ms-flexbox;
3236
+ display: flex;
3237
+ margin-top: 3px;
3238
+ }
3239
+
3240
+ .ha-post-list-meta-wrap span {
3241
+ margin-right: 10px;
3242
+ color: #8c8c8c;
3243
+ font-size: 13px;
3244
+ }
3245
+
3246
+ .ha-post-list-meta-wrap span:last-child {
3247
+ margin-right: 0;
3248
+ }
3249
+
3250
+ .ha-post-list-meta-wrap span i {
3251
+ margin-right: 3px;
3252
+ }
3253
+
3254
+ .ha-post-tab .ha-post-tab-filter {
3255
+ padding: 0;
3256
+ border-bottom: 1px solid #ddd;
3257
+ list-style: none;
3258
+ }
3259
+
3260
+ .ha-post-tab .ha-post-tab-filter li {
3261
+ display: inline-block;
3262
+ margin: 0 5px 0 0;
3263
+ padding: 15px 25px;
3264
+ background: #fff;
3265
+ color: #333;
3266
+ text-decoration: none;
3267
+ -webkit-transition: all .3s;
3268
+ transition: all .3s;
3269
+ }
3270
+
3271
+ .ha-post-tab .ha-post-tab-filter li:hover,
3272
+ .ha-post-tab.ha-post-tab-left .ha-post-tab-filter li:hover,
3273
+ .ha-post-tab .ha-post-tab-filter li.active,
3274
+ .ha-post-tab.ha-post-tab-left .ha-post-tab-filter li.active {
3275
+ background: #6d39ef;
3276
+ color: #fff;
3277
+ }
3278
+
3279
+ .ha-post-tab .ha-post-tab-item-wrapper {
3280
+ display: -webkit-box;
3281
+ display: -webkit-flex;
3282
+ display: -ms-flexbox;
3283
+ display: flex;
3284
+ visibility: hidden;
3285
+ overflow: hidden;
3286
+ -webkit-flex-wrap: wrap;
3287
+ -ms-flex-wrap: wrap;
3288
+ flex-wrap: wrap;
3289
+ height: 0;
3290
+ opacity: 0;
3291
+ }
3292
+
3293
+ .ha-post-tab span.ha-post-tab-loading {
3294
+ display: -webkit-box;
3295
+ display: -webkit-flex;
3296
+ display: -ms-flexbox;
3297
+ display: flex;
3298
+ -webkit-box-align: center;
3299
+ -webkit-align-items: center;
3300
+ align-items: center;
3301
+ -ms-flex-align: center;
3302
+ -webkit-box-pack: center;
3303
+ -ms-flex-pack: center;
3304
+ -webkit-justify-content: center;
3305
+ justify-content: center;
3306
+ width: 100%;
3307
+ height: 100%;
3308
+ text-align: center;
3309
+ font-size: 60px;
3310
+ opacity: .5;
3311
+ }
3312
+
3313
+ .ha-post-tab .ha-post-tab-item-wrapper.active {
3314
+ visibility: visible;
3315
+ height: auto;
3316
+ opacity: 1;
3317
+ }
3318
+
3319
+ .ha-post-tab .ha-post-tab-item {
3320
+ margin-bottom: 30px;
3321
+ padding-right: 15px;
3322
+ padding-left: 15px;
3323
+ }
3324
+
3325
+ .ha-post-tab .ha-post-tab-item-inner {
3326
+ box-sizing: border-box;
3327
+ padding: 20px;
3328
+ height: 100%;
3329
+ border-radius: 5px;
3330
+ background: #fff;
3331
+ box-shadow: 0 1px 20px rgba(0, 0, 0, .09);
3332
+ }
3333
+
3334
+ .ha-post-tab .ha-post-tab-item-inner .ha-post-tab-thumb {
3335
+ position: relative;
3336
+ display: block;
3337
+ overflow: hidden;
3338
+ margin-bottom: 15px;
3339
+ padding-right: 0;
3340
+ padding-left: 0;
3341
+ }
3342
+
3343
+ .ha-post-tab .ha-post-tab-item-inner .ha-post-tab-thumb img {
3344
+ max-width: 100%;
3345
+ height: auto;
3346
+ }
3347
+
3348
+ .ha-post-tab .ha-post-tab-item-inner .ha-post-tab-title {
3349
+ margin-top: 0;
3350
+ margin-bottom: 10px;
3351
+ font-size: 16px;
3352
+ }
3353
+
3354
+ .ha-post-tab .ha-post-tab-item-inner .ha-post-tab-title a {
3355
+ color: #333;
3356
+ text-decoration: none;
3357
+ -webkit-transition: all .4s;
3358
+ transition: all .4s;
3359
+ }
3360
+
3361
+ .ha-post-tab .ha-post-tab-meta span a:hover,
3362
+ .ha-post-tab .ha-post-tab-title a:hover {
3363
+ color: #6d39ef;
3364
+ }
3365
+
3366
+ .ha-post-tab .ha-post-tab-meta {
3367
+ font-size: 14px;
3368
+ }
3369
+
3370
+ .ha-post-tab .ha-post-tab-meta span {
3371
+ display: inline-block;
3372
+ margin-top: 10px;
3373
+ margin-right: 15px;
3374
+ color: #9b9b9b;
3375
+ -webkit-transition: all .4s;
3376
+ transition: all .4s;
3377
+ }
3378
+
3379
+ .ha-post-tab .ha-post-tab-meta span i {
3380
+ padding-right: 5px;
3381
+ }
3382
+
3383
+ .ha-post-tab .ha-post-tab-meta span a {
3384
+ color: #9b9b9b;
3385
+ text-decoration: none;
3386
+ -webkit-transition: all .4s;
3387
+ transition: all .4s;
3388
+ }
3389
+
3390
+ .ha-post-tab .ha-post-tab-excerpt p {
3391
+ margin: 0;
3392
+ }
3393
+
3394
+ .ha-post-tab.ha-post-tab-left,
3395
+ .ha-post-tab.ha-post-tab-right {
3396
+ display: -webkit-box;
3397
+ display: -webkit-flex;
3398
+ display: -ms-flexbox;
3399
+ display: flex;
3400
+ -webkit-flex-wrap: wrap;
3401
+ -ms-flex-wrap: wrap;
3402
+ flex-wrap: wrap;
3403
+ }
3404
+
3405
+ .ha-post-tab.ha-post-tab-left .ha-post-tab-filter {
3406
+ -webkit-box-flex: 0;
3407
+ -webkit-flex: 0 0 200px;
3408
+ -ms-flex: 0 0 200px;
3409
+ flex: 0 0 200px;
3410
+ min-width: 200px;
3411
+ border-right: 1px solid #f1f1f1;
3412
+ border-bottom: none;
3413
+ }
3414
+
3415
+ .ha-post-tab.ha-post-tab-left .ha-post-tab-filter li {
3416
+ text-align: left;
3417
+ }
3418
+
3419
+ .ha-post-tab.ha-post-tab-left .ha-post-tab-filter li,
3420
+ .ha-post-tab.ha-post-tab-right .ha-post-tab-filter li {
3421
+ display: block;
3422
+ margin: 0;
3423
+ text-decoration: none;
3424
+ -webkit-transition: all .3s;
3425
+ transition: all .3s;
3426
+ }
3427
+
3428
+ .ha-post-tab.ha-post-tab-left .ha-post-tab-content {
3429
+ -webkit-box-flex: 0;
3430
+ -webkit-flex: 0 0 calc(100% - 200px);
3431
+ -ms-flex: 0 0 calc(100% - 200px);
3432
+ flex: 0 0 calc(100% - 200px);
3433
+ min-width: calc(100% - 200px);
3434
+ min-height: 100%;
3435
+ }
3436
+
3437
+ .ha-post-tab.ha-post-tab-right {
3438
+ -webkit-box-orient: horizontal;
3439
+ -webkit-box-direction: reverse;
3440
+ -webkit-flex-direction: row-reverse;
3441
+ -ms-flex-direction: row-reverse;
3442
+ flex-direction: row-reverse;
3443
+ }
3444
+
3445
+ .ha-post-tab.ha-post-tab-right .ha-post-tab-filter {
3446
+ -webkit-box-flex: 0;
3447
+ -webkit-flex: 0 0 200px;
3448
+ -ms-flex: 0 0 200px;
3449
+ flex: 0 0 200px;
3450
+ min-width: 200px;
3451
+ border-bottom: none;
3452
+ border-left: 1px solid #f1f1f1;
3453
+ }
3454
+
3455
+ .ha-post-tab.ha-post-tab-right .ha-post-tab-filter li {
3456
+ text-align: right;
3457
+ }
3458
+
3459
+ .ha-post-tab.ha-post-tab-right .ha-post-tab-content {
3460
+ -webkit-box-flex: 0;
3461
+ -webkit-flex: 0 0 calc(100% - 200px);
3462
+ -ms-flex: 0 0 calc(100% - 200px);
3463
+ flex: 0 0 calc(100% - 200px);
3464
+ min-width: calc(100% - 200px);
3465
+ min-height: 100%;
3466
+ }
3467
+
3468
+ @media (max-width: 767px) {
3469
+ .ha-post-tab.ha-post-tab-right {
3470
+ -webkit-box-orient: horizontal;
3471
+ -webkit-box-direction: reverse;
3472
+ -webkit-flex-direction: row-reverse;
3473
+ -ms-flex-direction: row-reverse;
3474
+ flex-direction: row-reverse;
3475
+ }
3476
+ .ha-post-tab.ha-post-tab-left .ha-post-tab-filter,
3477
+ .ha-post-tab.ha-post-tab-right .ha-post-tab-filter {
3478
+ -webkit-box-flex: 0;
3479
+ -webkit-flex: 0 0 100%;
3480
+ -ms-flex: 0 0 100%;
3481
+ flex: 0 0 100%;
3482
+ min-width: 100%;
3483
+ border-right: 0;
3484
+ border-bottom: 1px solid #f1f1f1;
3485
+ border-left: 0;
3486
+ }
3487
+ .ha-post-tab.ha-post-tab-left .ha-post-tab-content,
3488
+ .ha-post-tab.ha-post-tab-right .ha-post-tab-content {
3489
+ -webkit-box-flex: 0;
3490
+ -webkit-flex: 0 0 100%;
3491
+ -ms-flex: 0 0 100%;
3492
+ flex: 0 0 100%;
3493
+ min-width: 100%;
3494
+ min-height: 100%;
3495
+ }
3496
+ .ha-post-tab.ha-post-tab-left .ha-post-tab-filter li,
3497
+ .ha-post-tab.ha-post-tab-right .ha-post-tab-filter li {
3498
+ display: inline-block;
3499
+ }
3500
+ }
assets/css/main.min.css CHANGED
@@ -1 +1 @@
1
- .happy-addon>.elementor-widget-container{word-wrap:break-word;overflow-wrap:break-word;box-sizing:border-box}.happy-addon>.elementor-widget-container *{box-sizing:border-box}.happy-addon img{max-width:100%;height:auto;-o-object-fit:cover;object-fit:cover}.happy-addon p:empty{display:none}.ha-screen-reader-text{position:absolute;overflow:hidden;clip:rect(1px,1px,1px,1px);margin:-1px;padding:0;width:1px;height:1px;border:0;word-wrap:normal!important;-webkit-clip-path:inset(50%);clip-path:inset(50%)}.ha-has-background-overlay>.elementor-widget-container{position:relative;z-index:1}.ha-has-background-overlay>.elementor-widget-container:before{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%;content:""}.ha-popup--is-enabled .ha-js-popup,.ha-popup--is-enabled .ha-js-popup img{cursor:-webkit-zoom-in!important;cursor:zoom-in!important}.mfp-wrap .mfp-arrow,.mfp-wrap .mfp-close{background-color:transparent}.mfp-wrap .mfp-arrow:focus,.mfp-wrap .mfp-close:focus{outline-width:thin}.ha-btn{display:inline-block;max-width:100%;vertical-align:middle;text-align:center;text-decoration:none;font-size:14px;line-height:1;-webkit-transition:all .3s;transition:all .3s}.ha-btn:not(.ha-btn--link){padding:15px 25px;border-radius:.25rem;background-color:#562dd4;color:#fff}.ha-btn:not(.ha-btn--link):focus,.ha-btn:not(.ha-btn--link):hover{background-color:#e2498a}.ha-btn.ha-btn--link{color:#562dd4}.ha-btn.ha-btn--link:focus,.ha-btn.ha-btn--link:hover{color:#e2498a}.ha-btn-icon+.ha-btn-text,.ha-btn-text+.ha-btn-icon{margin-left:5px}.ha-badge{padding:.475rem 1.1rem;max-width:100%;border-radius:50px;background-color:#fff;font-size:12px}.ha-badge--top-left{top:1rem;left:1rem}.ha-badge--top-center{top:1rem;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-badge--top-right{top:1rem;right:1rem}.ha-badge--middle-left{top:50%;left:1rem;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.ha-badge--middle-center{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.ha-badge--middle-right{top:50%;right:1rem;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.ha-badge--bottom-left{bottom:1rem;left:1rem}.ha-badge--bottom-center{bottom:1rem;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-badge--bottom-right{right:1rem;bottom:1rem}.ha-card-figure{position:relative;height:250px}.ha-card-figure img{border-top-left-radius:calc(.5rem - 1px);border-top-right-radius:calc(.5rem - 1px)}.ha-card-body{padding:1.5rem}.ha-card-title{margin-top:0;margin-bottom:.75rem;color:#151515;font-weight:700;font-size:22px}.ha-card-text{margin-bottom:2rem;color:#616161;font-size:16px;line-height:1.7}.ha-card-text>p,.ha-infobox-text>p{margin-top:0;margin-bottom:0}.ha-card--top .ha-card-figure{display:inline-block;width:100%}.ha-card--left>.elementor-widget-container,.ha-card--right>.elementor-widget-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center}.ha-card--left>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-card--left .ha-card-body,.ha-card--left .ha-card-figure,.ha-card--right .ha-card-body,.ha-card--right .ha-card-figure{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.ha-card--left .ha-card-body,.ha-card--right .ha-card-body{padding:2.5rem}.ha-card--left .ha-card-figure img{border-radius:calc(.5rem - 1px) 0 0 calc(.5rem - 1px)}.ha-card--right>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;text-align:right}.ha-card--right .ha-card-figure img{border-radius:0 calc(.5rem - 1px) calc(.5rem - 1px) 0}.ha-card .ha-badge{position:absolute}.ha-infobox>.elementor-widget-container{padding:1.5rem}.ha-infobox-title{margin-top:0;margin-bottom:1rem;color:#151515;font-size:24px}.ha-infobox-figure{display:inline-block;margin:0 0 1.5rem!important}.ha-infobox-figure--icon{text-align:center;font-size:3rem}.ha-icon-box-icon>i,.ha-infobox-figure>i{position:relative;display:block;width:1em;height:1em}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-icon i:before,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon i:before,.ha-icon-box-icon>i:before,.ha-infobox-figure>i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-card-figure img,.ha-infobox-figure img,.ha-member-figure img{width:100%;height:100%;vertical-align:bottom}.ha-infobox-text+.ha-btn--link{margin-top:1rem}.ha-icon-box>.elementor-widget-container{position:relative;padding:1.25rem}.ha-icon-box-title{margin-top:0;margin-bottom:0;color:#151515;font-size:24px;-webkit-transition:color .3s;transition:color .3s}.ha-icon-box-icon{display:inline-block;margin-bottom:1rem;color:#151515;text-align:center;font-size:3rem;-webkit-transition:border .3s,background .3s,color .3s,-webkit-transform .3s;transition:transform .3s,border .3s,background .3s,color .3s;transition:transform .3s,border .3s,background .3s,color .3s,-webkit-transform .3s}.ha-icon-box-icon>i{-webkit-transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.ha-icon-box-link{display:block;color:transparent;text-decoration:none}.ha-icon-box .ha-badge{position:absolute;z-index:9999;background-color:#e2498a;color:#fff}.ha-member>.elementor-widget-container{padding:1.25rem}.ha-member-figure{display:inline-block;margin:0 0 1.5rem!important}.ha-member-name{margin-top:0;margin-bottom:.5rem;color:#151515;font-size:18px}.ha-member-position{margin-bottom:1.5rem;color:#7f7f7f;font-size:14px}.ha-member-bio{margin-bottom:1.5rem;font-size:14px;line-height:1.6}.ha-member-links>a{display:inline-block;color:#9895ad;text-align:center;line-height:1;-webkit-transition:all .2s;transition:all .2s}.ha-member-links>a:focus,.ha-member-links>a:hover{color:#222}.ha-member-links>a>i{width:1em;height:1em}.ha-member-links>a:not(:last-child){margin-right:.3rem}.ha-review-header{margin-top:1.5rem}.ha-review-desc p,.ha-review-figure{margin:0}.ha-review-figure img{width:100%;height:100%;border-radius:50%;vertical-align:bottom}.ha-review-reviewer{margin-top:0;margin-bottom:.3rem;color:#151515;font-size:18px}.ha-review-position{margin-bottom:.5rem;color:#7f7f7f;font-size:15px}.ha-review-ratting{display:inline-block;font-size:12px;line-height:1}.ha-review-ratting--num{padding:.25em .66em;border-radius:2.5em;background-color:#562dd4;color:#fff}.ha-review-ratting--star{color:#ffbf36}.ha-review-desc{margin-top:1.5rem;font-size:16px;line-height:1.6}.ha-review--top>.elementor-widget-container{padding:2rem}.ha-review--top .ha-review-figure{display:inline-block;max-width:70px;height:70px}.ha-review--left>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-review--left>.elementor-widget-container,.ha-review--right>.elementor-widget-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;padding-left:2rem}.ha-review--left .ha-review-figure,.ha-review--right .ha-review-figure{-webkit-box-flex:0;-webkit-flex:0 0 150px;-ms-flex:0 0 150px;flex:0 0 150px;max-width:150px;height:150px}.ha-review--left .ha-review-body,.ha-review--right .ha-review-body{-webkit-box-flex:0;-webkit-flex:0 0 calc(100% - 150px);-ms-flex:0 0 calc(100% - 150px);flex:0 0 calc(100% - 150px);padding:2rem;max-width:calc(100% - 150px)}.ha-review--left .ha-review-body>:first-child,.ha-review--right .ha-review-body>:first-child{margin-top:0}.ha-review--right>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;padding-right:2rem;padding-left:0;text-align:right}.ha-image-compare .twentytwenty-container,.ha-image-compare .twentytwenty-wrapper,a.ha-social-icon:after,a.ha-social-icon:before{border-radius:inherit}.ha-gallery-filter{margin:0 10px 2rem;padding:0;list-style:none}.ha-gallery-filter>li{display:inline-block;margin-bottom:10px;max-width:100%}.ha-gallery-filter>li:not(:last-child){margin-right:10px}.ha-gallery-filter>li>button{display:block;overflow:hidden;padding:10px 25px;max-width:100%;border:2px solid #562dd4;border-radius:.25rem;background-color:transparent;color:#562dd4;text-transform:uppercase;text-overflow:ellipsis;font-size:14px;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ha-gallery-filter>li>button:focus,.ha-gallery-filter>li>button:hover{outline:0;background-color:#562dd4;color:#fff}.ha-gallery-filter>.ha-filter-active>button{background-color:#562dd4;color:#fff}.ha-image-grid-item{float:left}.ha-image-grid-inner{position:relative;display:block;overflow:hidden;margin:10px;text-decoration:none}.ha-image-grid-inner img{display:block;width:100%;-webkit-transition:all .25s;transition:all .25s}.ha-image-grid--layout-even .ha-image-grid-inner{height:250px}.ha-image-grid--layout-even .ha-image-grid-inner img{height:100%}.ha-justified-gallery-item,.ha-justified-gallery-item>img{border-radius:6px}.ha-justified-gallery .justified-gallery>.ha-justified-gallery-item>.caption{bottom:-100px!important;padding:10px;-webkit-transition:all .25s!important;transition:all .25s!important;-webkit-animation:haSmoothReveal .3s forwards;animation:haSmoothReveal .3s forwards}.ha-justified-gallery .justified-gallery>.ha-justified-gallery-item>.caption.caption-visible{bottom:0!important}.ha-justified-gallery .justified-gallery>.entry-visible>a>img,.ha-justified-gallery .justified-gallery>.entry-visible>img{-webkit-transition:all 300ms,opacity 500ms ease-in;transition:all 300ms,opacity 500ms ease-in}@-webkit-keyframes haSmoothReveal{0%{-webkit-transform:translateY(100px);transform:translateY(100px)}to{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes haSmoothReveal{0%{-webkit-transform:translateY(100px);transform:translateY(100px)}to{-webkit-transform:translateY(0);transform:translateY(0)}}.ha-carousel .slick-vertical .slick-slide,.ha-slider .slick-vertical .slick-slide{border:0}.ha-carousel .slick-next,.ha-carousel .slick-prev,.ha-slider .slick-next,.ha-slider .slick-prev{z-index:999;padding:0;border:1px solid rgba(255,255,255,.8);border-radius:50%;background-color:rgba(255,255,255,.8);color:#8c8c8c;text-align:center;font-size:12px;opacity:1}.ha-carousel .slick-next:focus,.ha-carousel .slick-next:hover,.ha-carousel .slick-prev:focus,.ha-carousel .slick-prev:hover,.ha-slider .slick-next:focus,.ha-slider .slick-next:hover,.ha-slider .slick-prev:focus,.ha-slider .slick-prev:hover{background-color:#fff}.ha-carousel .slick-next:before,.ha-carousel .slick-prev:before,.ha-slider .slick-next:before,.ha-slider .slick-prev:before{content:""}.ha-carousel .slick-disabled,.ha-slider .slick-disabled{opacity:.7}.ha-carousel .slick-prev,.ha-slider .slick-prev{left:25px}.ha-carousel .slick-next,.ha-slider .slick-next{right:25px}.ha-carousel .slick-dots,.ha-slider .slick-dots{bottom:-40px}.ha-carousel .slick-dots li,.ha-slider .slick-dots li{margin-right:2px;margin-left:2px}.ha-carousel .slick-dots li button:focus,.ha-carousel .slick-dots li button:hover,.ha-slider .slick-dots li button:focus,.ha-slider .slick-dots li button:hover{background-color:transparent}.ha-carousel .slick-dots li button:before,.ha-slider .slick-dots li button:before{color:#1b1b1b;opacity:1}.ha-carousel .slick-dots .slick-active button:before,.ha-carousel .slick-dots li button:hover:before,.ha-slider .slick-dots .slick-active button:before,.ha-slider .slick-dots li button:hover:before{-webkit-transform:scale(1.5);-ms-transform:scale(1.5);transform:scale(1.5)}.ha-carousel .slick-next,.ha-carousel .slick-prev{width:40px;height:40px;line-height:40px}.ha-slider .slick-next,.ha-slider .slick-prev{width:50px;height:50px;line-height:50px}.ha-carousel .slick-slider:not(.slick-vertical) .slick-slide{padding-right:5px;padding-left:5px}.ha-carousel .slick-slider.slick-vertical .slick-slide{padding-top:5px;padding-bottom:5px}.ha-slick-item{position:relative;overflow:hidden;vertical-align:bottom}.ha-slick-content{position:absolute;bottom:0;padding:1.5rem;width:100%;background:-webkit-linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.3));background:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.3))}.ha-slick-title{margin-top:0;margin-bottom:.2rem;color:#fff;font-size:20px}.ha-slick-subtitle{margin:0;color:#fff}.ha-skills>.elementor-widget-container{padding-top:1px}.ha-skill{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border-radius:15px;background-color:#e9ecef;font-size:.75rem}.ha-skill--inside .ha-skill-info,.ha-skill--outside .ha-skill-info{text-align:left;font-size:14px;line-height:1}.ha-skill--inside .ha-skill-level-text,.ha-skill--outside .ha-skill-level-text{float:right}.ha-skill--outside{height:2px}.ha-skill--outside .ha-skill-level{position:relative}.ha-skill--outside .ha-skill-info{position:absolute;top:-25px;width:100%;color:#242424}.ha-skill--inside{height:30px}.ha-skill--inside .ha-skill-info{padding-right:1rem;padding-left:1rem;color:#fff}.ha-skill-level{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;width:10%;border-radius:inherit;background-color:#562dd4;color:#fff;text-align:center;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.ha-skill--outside{margin-top:40px}.ha-skill--inside:not(:first-child){margin-top:20px}.ha-skill-name{display:inline-block;overflow:hidden;max-width:70%;text-overflow:ellipsis}.ha-gradient-heading{margin-top:0;margin-bottom:0}.ha-gradient-heading>a{color:inherit;text-decoration:none}.ha-logo-grid-item{float:left;overflow:hidden;height:180px;border-color:#e7e7e7}.ha-logo-grid-figure{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;margin:0;padding:30px;width:100%;height:100%}.ha-logo-grid-img{max-height:100%}@media (min-width:1025px){.ha-logo-grid--col-2 .ha-logo-grid-item{width:calc(100%/2)}.ha-logo-grid--col-3 .ha-logo-grid-item{width:calc(100%/3)}.ha-logo-grid--col-4 .ha-logo-grid-item{width:calc(100%/4)}.ha-logo-grid--col-5 .ha-logo-grid-item{width:calc(100%/5)}.ha-logo-grid--col-6 .ha-logo-grid-item{width:calc(100%/6)}}@media (max-width:1024px) and (min-width:768px){.ha-logo-grid--col--tablet2 .ha-logo-grid-item{width:calc(100%/2)}.ha-logo-grid--col--tablet3 .ha-logo-grid-item{width:calc(100%/3)}.ha-logo-grid--col--tablet4 .ha-logo-grid-item{width:calc(100%/4)}.ha-logo-grid--col--tablet5 .ha-logo-grid-item{width:calc(100%/5)}.ha-logo-grid--col--tablet6 .ha-logo-grid-item{width:calc(100%/6)}}@media (max-width:767px){.ha-logo-grid--col--mobile2 .ha-logo-grid-item{width:calc(100%/2)}.ha-logo-grid--col--mobile3 .ha-logo-grid-item{width:calc(100%/3)}.ha-logo-grid--col--mobile4 .ha-logo-grid-item{width:calc(100%/4)}.ha-logo-grid--col--mobile5 .ha-logo-grid-item{width:calc(100%/5)}.ha-logo-grid--col--mobile6 .ha-logo-grid-item{width:calc(100%/6)}}.ha-logo-grid--tictactoe .ha-logo-grid-item{border-width:2px 2px 0 0;border-style:solid}@media (min-width:1025px){.ha-logo-grid--tictactoe.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:0!important}}@media (max-width:1024px) and (min-width:768px){.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(2n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(3n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(4n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(5n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(6n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:0!important}}@media (max-width:767px){.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(2n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(3n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(4n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(5n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(6n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:0!important}}.ha-logo-grid--border .ha-logo-grid-item{border-width:0 2px 2px 0;border-style:solid}.ha-logo-grid--border .ha-logo-grid-item:first-child{border-top-left-radius:10px}.ha-logo-grid--border .ha-logo-grid-item:last-child{border-bottom-right-radius:10px}@media (min-width:1025px){.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-last-child(2){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-last-child(3){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-last-child(4){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-last-child(5){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-last-child(6){border-bottom-left-radius:10px}}@media (max-width:1024px) and (min-width:768px){.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(2n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(2){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-last-child(2){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(3n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(3){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-last-child(3){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(4n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(4){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-last-child(4){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(5n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(5){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-last-child(5){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(6n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(6){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-last-child(6){border-bottom-left-radius:10px}}@media (max-width:767px){.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(2n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(2){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-last-child(2){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(3n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(3){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-last-child(3){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(4n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(4){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-last-child(4){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(5n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(5){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-last-child(5){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(6n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(6){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-last-child(6){border-bottom-left-radius:10px}}.ha-logo-grid--box .ha-logo-grid-wrapper{margin:-.5rem}.ha-logo-grid--box .ha-logo-grid-item{margin:.5rem;border-width:2px;border-style:solid;border-radius:.5rem}@media (min-width:1025px){.ha-logo-grid--box.ha-logo-grid--col-2 .ha-logo-grid-item{width:calc((100%/2) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col-3 .ha-logo-grid-item{width:calc((100%/3) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col-4 .ha-logo-grid-item{width:calc((100%/4) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col-5 .ha-logo-grid-item{width:calc((100%/5) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col-6 .ha-logo-grid-item{width:calc((100%/6) - 1rem)}}@media (max-width:1024px) and (min-width:768px){.ha-logo-grid--box.ha-logo-grid--col--tablet2 .ha-logo-grid-item{width:calc((100%/2) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--tablet3 .ha-logo-grid-item{width:calc((100%/3) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--tablet4 .ha-logo-grid-item{width:calc((100%/4) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--tablet5 .ha-logo-grid-item{width:calc((100%/5) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--tablet6 .ha-logo-grid-item{width:calc((100%/6) - 1rem)}}@media (max-width:767px){.ha-logo-grid--box.ha-logo-grid--col--mobile2 .ha-logo-grid-item{width:calc((100%/2) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--mobile3 .ha-logo-grid-item{width:calc((100%/3) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--mobile4 .ha-logo-grid-item{width:calc((100%/4) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--mobile5 .ha-logo-grid-item{width:calc((100%/5) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--mobile6 .ha-logo-grid-item{width:calc((100%/6) - 1rem)}}.ha-dual-btn,.ha-dual-btn-connector{display:inline-block}.ha-dual-btn-wrapper{position:relative;text-align:center;font-weight:400}.ha-dual-btn{padding:1.2rem 3rem;max-width:100%;color:#fff;text-decoration:none;font-size:14px}.ha-dual-btn--left{background-color:#562dd4}.ha-dual-btn--left:focus,.ha-dual-btn--left:hover{background-color:#4423ab;color:#fff}.ha-dual-btn--right{background-color:#e2498a}.ha-dual-btn--right:focus,.ha-dual-btn--right:hover{background-color:#d6226e;color:#fff}.ha-dual-btn-connector{position:absolute!important;z-index:9;overflow:hidden;width:30px;height:30px;border-radius:100%;background-color:#fff;box-shadow:0 0 0 5px rgba(255,255,255,.3);color:#27374c;text-transform:uppercase;font-size:12px;line-height:30px;-webkit-transform:translate(50%,-50%);-ms-transform:translate(50%,-50%);transform:translate(50%,-50%)}.ha-dual-btn-icon>svg{width:1em;height:auto}.ha-dual-btn-icon>i{font-size:1em}.ha-dual-btn-icon--before{margin-right:5px}.ha-dual-btn-icon--after{margin-left:5px}.ha-dual-button>.elementor-widget-container,.ha-news-ticker-wrapper ul.ha-news-ticker-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.ha-dual-button--mobile-layout-stack>.elementor-widget-container{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-dual-button--mobile-layout-stack .ha-dual-btn-wrapper{max-width:100%}.ha-dual-button--mobile-layout-stack .ha-dual-btn-connector{top:100%;right:50%}.ha-dual-button--mobile-layout-stack .ha-dual-btn--left{border-radius:30px 30px 0 0}.ha-dual-button--mobile-layout-stack .ha-dual-btn--right{border-radius:0 0 30px 30px}.ha-dual-button--mobile-layout-stack.ha-dual-button--mobile-align-left>.elementor-widget-container{-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start;-ms-flex-align:start}.ha-dual-button--mobile-layout-stack.ha-dual-button--mobile-align-center>.elementor-widget-container,.ha-testimonial__reviewer{-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center}.ha-dual-button--mobile-layout-stack.ha-dual-button--mobile-align-right>.elementor-widget-container{-webkit-box-align:end;-webkit-align-items:flex-end;align-items:flex-end;-ms-flex-align:end}.ha-dual-button--mobile-layout-queue.ha-dual-button--mobile-align-left>.elementor-widget-container{-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.ha-dual-button--mobile-layout-queue.ha-dual-button--mobile-align-center>.elementor-widget-container{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.ha-dual-button--mobile-layout-queue.ha-dual-button--mobile-align-right>.elementor-widget-container{-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.ha-dual-button--mobile-layout-queue>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-dual-button--mobile-layout-queue .ha-dual-btn-wrapper{max-width:50%}.ha-dual-button--mobile-layout-queue .ha-dual-btn-connector{top:50%;right:0}.ha-dual-button--mobile-layout-queue .ha-dual-btn--left{border-radius:50px 0 0 50px}.ha-dual-button--mobile-layout-queue .ha-dual-btn--right{border-radius:0 50px 50px 0}@media (min-width:768px){.ha-dual-button--tablet-layout-stack.ha-dual-button--tablet-align-left>.elementor-widget-container{-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start;-ms-flex-align:start}.ha-dual-button--tablet-layout-stack.ha-dual-button--tablet-align-center>.elementor-widget-container{-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center}.ha-dual-button--tablet-layout-stack.ha-dual-button--tablet-align-right>.elementor-widget-container{-webkit-box-align:end;-webkit-align-items:flex-end;align-items:flex-end;-ms-flex-align:end}.ha-dual-button--tablet-layout-queue.ha-dual-button--tablet-align-left>.elementor-widget-container{-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.ha-dual-button--tablet-layout-queue.ha-dual-button--tablet-align-center>.elementor-widget-container{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.ha-dual-button--tablet-layout-queue.ha-dual-button--tablet-align-right>.elementor-widget-container{-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.ha-dual-button--tablet-layout-stack>.elementor-widget-container{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-dual-button--tablet-layout-stack .ha-dual-btn-wrapper{max-width:100%}.ha-dual-button--tablet-layout-stack .ha-dual-btn-connector{top:100%;right:50%}.ha-dual-button--tablet-layout-stack .ha-dual-btn--left{border-radius:30px 30px 0 0}.ha-dual-button--tablet-layout-stack .ha-dual-btn--right{border-radius:0 0 30px 30px}.ha-dual-button--tablet-layout-queue>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-dual-button--tablet-layout-queue .ha-dual-btn-wrapper{max-width:50%}.ha-dual-button--tablet-layout-queue .ha-dual-btn-connector{top:50%;right:0}.ha-dual-button--tablet-layout-queue .ha-dual-btn--left{border-radius:50px 0 0 50px}.ha-dual-button--tablet-layout-queue .ha-dual-btn--right{border-radius:0 50px 50px 0}}@media (min-width:1025px){.ha-dual-button--layout-stack.ha-dual-button--align-left>.elementor-widget-container{-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start;-ms-flex-align:start}.ha-dual-button--layout-stack.ha-dual-button--align-center>.elementor-widget-container{-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center}.ha-dual-button--layout-stack.ha-dual-button--align-right>.elementor-widget-container{-webkit-box-align:end;-webkit-align-items:flex-end;align-items:flex-end;-ms-flex-align:end}.ha-dual-button--layout-queue.ha-dual-button--align-left>.elementor-widget-container{-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.ha-dual-button--layout-queue.ha-dual-button--align-center>.elementor-widget-container{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.ha-dual-button--layout-queue.ha-dual-button--align-right>.elementor-widget-container{-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.ha-dual-button--layout-stack>.elementor-widget-container{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-dual-button--layout-stack .ha-dual-btn-wrapper{max-width:100%}.ha-dual-button--layout-stack .ha-dual-btn-connector{top:100%;right:50%}.ha-dual-button--layout-stack .ha-dual-btn--left{border-radius:30px 30px 0 0}.ha-dual-button--layout-stack .ha-dual-btn--right{border-radius:0 0 30px 30px}.ha-dual-button--layout-queue>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-dual-button--layout-queue .ha-dual-btn-wrapper{max-width:50%}.ha-dual-button--layout-queue .ha-dual-btn-connector{top:50%;right:0}.ha-dual-button--layout-queue .ha-dual-btn--left{border-radius:50px 0 0 50px}.ha-dual-button--layout-queue .ha-dual-btn--right{border-radius:0 50px 50px 0}}.ha-testimonial--basic>.elementor-widget-container{padding:2rem;border:1px solid #ececec;border-radius:.5rem}.ha-testimonial--basic .ha-testimonial__content{margin-bottom:2.5em}.ha-testimonial--bubble .ha-testimonial__content{position:relative;margin-bottom:1.5rem;padding:2rem;border-radius:6px;background-color:#fff;box-shadow:0 .2rem 2.8rem rgba(36,36,36,.1);line-height:1.6rem}.ha-testimonial--bubble .ha-testimonial__content:after{position:absolute;bottom:-14px;color:#fff;content:"\e911";font-style:normal;font-size:36px;font-family:"Happy Icons";-webkit-transform:rotate(-180deg);-ms-transform:rotate(-180deg);transform:rotate(-180deg)}.ha-testimonial--left.ha-testimonial--bubble .ha-testimonial__content:after{left:15px}.ha-testimonial--center.ha-testimonial--bubble .ha-testimonial__content:after{left:50%;-webkit-transform:translateX(-50%) rotate(-180deg);-ms-transform:translateX(-50%) rotate(-180deg);transform:translateX(-50%) rotate(-180deg)}.ha-testimonial--right.ha-testimonial--bubble .ha-testimonial__content:after{right:15px}.ha-testimonial__reviewer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.ha-testimonial__reviewer-thumb{-webkit-box-flex:0;-webkit-flex:0 0 65px;-ms-flex:0 0 65px;flex:0 0 65px;max-width:65px;height:65px}.ha-testimonial__reviewer-thumb img{width:100%;height:100%;border-radius:50%;-o-object-fit:cover;object-fit:cover}.ha-testimonial__reviewer-name{margin-bottom:.3rem;color:#562dd4;font-weight:700;font-size:18px}.ha-testimonial__reviewer-title{color:#8c8c8c;font-size:16px}.ha-testimonial--left .ha-testimonial__reviewer-meta{padding-left:1em}.ha-testimonial--center .ha-testimonial__reviewer{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-testimonial--center .ha-testimonial__reviewer-meta{padding-top:1em;max-width:100%}.ha-testimonial--left .ha-testimonial__reviewer-meta,.ha-testimonial--right .ha-testimonial__reviewer-meta{-webkit-box-flex:0;-webkit-flex:0 0 calc(100% - 65px);-ms-flex:0 0 calc(100% - 65px);flex:0 0 calc(100% - 65px);max-width:calc(100% - 65px)}.ha-testimonial--right .ha-testimonial__reviewer{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.ha-testimonial--right .ha-testimonial__reviewer-meta{padding-right:1em}.ha-testimonial--left{text-align:left}.ha-testimonial--right{text-align:right}.ha-number-body,.ha-testimonial--center{text-align:center}.ha-number-body{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;padding:6px;width:50px;height:50px;border-radius:100%;background-color:#562dd4;color:#fff;font-size:20px}.ha-number-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.ha-number-text{position:relative;z-index:1;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.ha-flip-box-container:after{display:block;visibility:hidden;clear:both;height:0;content:" ";font-size:0}.ha-flip-box-container .ha-flip-box-inner{position:relative;z-index:1;margin:0;padding:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.ha-flip-box-container .ha-flip-box-inner:hover .ha-flip-box-back{z-index:1}.ha-flip-box-container .ha-flip-box-inner:hover .ha-flip-box-front{z-index:-1}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-inner-wrapper{position:relative;-webkit-transform:translateZ(0);-webkit-perspective:1000px;perspective:1000px}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front{top:0;right:0;left:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;height:250px;background-position:center;background-clip:padding-box;background-size:cover;background-repeat:no-repeat;text-align:center;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front{background-color:transparent;position:relative;bottom:0;z-index:10;padding:30px;border:1px solid #ddd;border-radius:.3rem}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back:before,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front:before{position:absolute;top:0;left:0;z-index:-9;width:100%;height:100%;background-color:transparent;content:""}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back{position:absolute;z-index:-1;padding:46px;border-radius:.3rem;background-color:#562dd4;color:#fff}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-text,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-text{text-align:center}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-text p,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-text p{margin-top:10px;margin-bottom:0}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon.icon{padding:20px;border-radius:50%;background-color:#f1f4f8;color:#242424}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon{display:inline-block;margin-bottom:20px;text-align:center}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon i{position:relative;display:block;width:1em;height:1em;font-size:28px}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-icon img,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon img{width:60px;height:60px;vertical-align:middle}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-box-heading{margin:0;font-weight:700;font-size:20px}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner p{margin-bottom:0;font-size:16px}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-box-heading-back{margin:0;color:#fff;font-size:18px}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-icon{display:inline-block;margin-bottom:20px;text-align:center}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-icon i{position:relative;display:block;width:1em;height:1em;color:#fff;font-size:20px}.ha-flip-box-container .ha-flip-box-inner.ha-flip-right .ha-flip-box-front,.ha-flip-box-container .ha-flip-box-inner.ha-flip-right:hover .ha-flip-box-back{-webkit-transform:rotateY(0);transform:rotateY(0)}.ha-flip-box-container .ha-flip-box-inner.ha-flip-right .ha-flip-box-back{-webkit-transform:rotateY(-180deg);transform:rotateY(-180deg)}.ha-flip-box-container .ha-flip-box-inner.ha-flip-right:hover .ha-flip-box-front{-webkit-transform:rotateY(180deg);transform:rotateY(180deg)}.ha-flip-box-container .ha-flip-box-inner.ha-flip-up .ha-flip-box-front,.ha-flip-box-container .ha-flip-box-inner.ha-flip-up:hover .ha-flip-box-back{-webkit-transform:rotateX(0);transform:rotateX(0)}.ha-flip-box-container .ha-flip-box-inner.ha-flip-up .ha-flip-box-back{-webkit-transform:rotateX(-180deg);transform:rotateX(-180deg)}.ha-flip-box-container .ha-flip-box-inner.ha-flip-up:hover .ha-flip-box-front{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}.ha-flip-box-container.ha-flip-effect-classic .ha-flip-box-back,.ha-flip-box-container.ha-flip-effect-classic .ha-flip-box-front{-webkit-transition:-webkit-transform .6s cubic-bezier(.2,.85,.4,1.275);transition:transform .6s cubic-bezier(.2,.85,.4,1.275);transition:transform .6s cubic-bezier(.2,.85,.4,1.275),-webkit-transform .6s cubic-bezier(.2,.85,.4,1.275)}.ha-logo-grid-wrapper:after{display:block;clear:both;content:""}.ha-pricing-table>.elementor-widget-container{position:relative;overflow:hidden;padding:3em 4em}.ha-pricing-table-badge{position:absolute;top:-1px;padding:.8rem 1rem;background-color:#e2498a;color:#fff;line-height:1}.ha-pricing-table-badge--left{left:0;-webkit-transform:rotate(-90deg) translateX(-100%);-ms-transform:rotate(-90deg) translateX(-100%);transform:rotate(-90deg) translateX(-100%);-webkit-transform-origin:left top;-ms-transform-origin:left top;transform-origin:left top}.ha-pricing-table-badge--right{right:0;-webkit-transform:rotate(-90deg) translateY(-100%);-ms-transform:rotate(-90deg) translateY(-100%);transform:rotate(-90deg) translateY(-100%);-webkit-transform-origin:right top;-ms-transform-origin:right top;transform-origin:right top}.ha-pricing-table-title{margin-top:0;margin-bottom:.5rem;color:#242424;font-weight:400;font-size:24px}.ha-pricing-table-price{margin-bottom:3rem}.ha-pricing-table-price-tag{margin-bottom:.5rem;color:#242424;font-weight:700;font-size:60px;line-height:normal}.ha-pricing-table-currency{font-size:24px}.ha-pricing-table-period{color:#8c8c8c;font-size:16px}.ha-pricing-table-body{margin-bottom:3rem}.ha-pricing-table-features-title{margin-top:0;margin-bottom:1rem;font-weight:700;font-size:16px}.ha-pricing-table-features-list{margin:0;padding:0;list-style:none}.ha-pricing-table-features-list li{margin-bottom:1rem;font-size:16px}.ha-pricing-table-features-list i{margin-right:.5rem;min-width:15px;font-size:.8em}.ha-pricing-table-feature-text{display:inline-block}.ha-pricing-table-btn{display:inline-block;padding:.8rem 2rem;border-radius:40px;background-color:#e2498a;color:#fff;text-decoration:none;text-transform:uppercase;font-size:12px;-webkit-transition:all .3s;transition:all .3s}.ha-pricing-table-btn:hover{background-color:#562dd4;color:#fff}.ha-card>.elementor-widget-container,.ha-icon-box>.elementor-widget-container,.ha-image-compare>.elementor-widget-container,.ha-infobox>.elementor-widget-container,.ha-member>.elementor-widget-container,.ha-pricing-table>.elementor-widget-container,.ha-review>.elementor-widget-container{border-radius:.5rem;background-color:#fff;box-shadow:0 .2rem 2.8rem rgba(36,36,36,.1)}.ha-step-flow>.elementor-widget-container{padding:30px;text-align:center}.ha-step-arrow,.ha-step-arrow:after{position:absolute;display:inline-block;border-top:1px solid #ddd}.ha-step-arrow{left:calc(100% + 20px);top:49%;width:100px}.ha-step-arrow:after{top:-2px;right:5px;width:12px;height:12px;border-right:1px solid #ddd;color:#ddd;content:"";-webkit-transform:rotate(45deg) translateY(-50%);-ms-transform:rotate(45deg) translateY(-50%);transform:rotate(45deg) translateY(-50%)}.ha-steps-icon{position:relative;display:inline-block;margin-bottom:2rem;padding:40px;border-radius:50%;background-color:#e9ecf0;box-shadow:0 2px 6px -2px #989898;color:#8056ee;text-align:center;font-size:46px}.ha-steps-icon i{position:relative;display:block;width:1em;height:1em}.ha-steps-icon i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-steps-icon .ha-steps-label{position:absolute;top:5px;right:0;overflow:hidden;padding:12px 8px;max-width:200%;border:3px solid #fff;border-radius:20px;background-color:#8056ee;color:#fff;text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:1}.ha-steps-title{margin-top:0;margin-bottom:30px;font-weight:700;font-size:16px}.ha-steps-title a{display:block;color:#562dd4}.ha-news-ticker-wrapper li.ha-news-ticker-item a,.ha-steps-title a:hover{color:#242424}.ha-step-description{margin:0;color:#616161;font-weight:400;font-size:16px;line-height:1.5}.ha-news-ticker-wrapper{position:relative;overflow:hidden;padding:20px 0;border:1px solid #d2d2d2;border-radius:5px}.ha-news-ticker-wrapper ul.ha-news-ticker-container{margin:0;padding:0;list-style:none}.ha-news-ticker-wrapper ul.ha-news-ticker-container:focus,.ha-news-ticker-wrapper ul.ha-news-ticker-container:hover{-webkit-animation-play-state:paused!important;animation-play-state:paused!important}.ha-news-ticker-wrapper span.ha-news-ticker-sticky-title{position:absolute;top:50%;left:auto;z-index:1;padding:20px;background:#333;color:#fff;font-size:1rem;line-height:1;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.ha-news-ticker-wrapper li.ha-news-ticker-item{margin-right:20px;white-space:nowrap}.ha-news-ticker-wrapper li.ha-news-ticker-item:last-child{margin-right:0}.ha-news-ticker-wrapper .ha-news-ticker-title{margin:0;font-size:1rem;line-height:1}.ha-news-ticker-wrapper li.ha-news-ticker-item a:hover{color:#e04c8a}.ha-fun-factor-icon{font-size:3em}.ha-fun-factor-content .ha-fun-factor-content-number,.ha-fun-factor-content .ha-fun-factor-content-text{margin-top:0;margin-bottom:15px;font-size:24px}.ha-ff-icon--left .ha-fun-factor-content{padding-left:20px}.ha-ff-icon--right .ha-fun-factor-content{padding-right:20px}.ha-fun-factor-divider{display:block;margin-bottom:15px;height:1px;background-color:#ccc}.ha-ff-icon--top .ha-fun-factor-icon-section,.ha-ff-icon--top .ha-fun-factor-image-section{display:inline-block;margin-top:10px;margin-bottom:10px;width:auto;height:auto}.ha-fun-factor-image-section img{width:200px;height:100px}.ha-ff-container{padding:10px;word-wrap:break-word;overflow-wrap:break-word}.ha-ff-icon--left>.elementor-widget-container .ha-ff-container,.ha-ff-icon--right>.elementor-widget-container .ha-ff-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center}.ha-ff-icon--left>.elementor-widget-container .ha-ff-container{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-ff-icon--right>.elementor-widget-container .ha-ff-container{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;text-align:right}.ha-ff-icon--left>.elementor-widget-container .ha-ff-container .ha-fun-factor-divider,.ha-ff-icon--right>.elementor-widget-container .ha-ff-container .ha-fun-factor-divider{display:block;margin-right:auto;margin-left:auto}.ha-ff-icon--top>.elementor-widget-container .ha-ff-container .ha-fun-factor-divider{display:block;margin-right:auto;margin-left:auto;width:100px}.ha-ff-icon--left>.elementor-widget-container .ha-ff-container .ha-fun-factor-divider,.ha-ff-icon--right>.elementor-widget-container .ha-ff-container .ha-fun-factor-divider{width:100%!important}.ha-fun-factor-divider-align-left{margin-left:0!important;text-align:left}.ha-fun-factor-divider-align-right{margin-right:0!important;text-align:right}.ha-fun-factor-divider-align-center{margin-right:auto!important;margin-left:auto!important;text-align:center}.ha-social-icons-wrapper,.ha-social-icons-wrapper a{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center}.ha-social-icons-wrapper a{padding:15px;border-radius:4px;color:#fff;font-size:30px;-webkit-transition:all .3s;transition:all .3s}a.ha-social-icon:hover{position:relative;z-index:1;background:#e2498a}.ha-social-icons-wrapper a.elementor-social-icon-label{color:#d30c5c}.ha-social-icon:not(:last-child){margin-right:2px}.ha-social-icon i,.ha-social-icon svg{position:relative;display:initial}.ha-social-icon svg,.ha-social-icon-label{width:100%;height:100%}.ha-social-icon i{width:1em;height:1em}.ha-social-icon-label{margin:0 0 0 10px;font-size:18px;font-family:Roboto,sans-serif;line-height:1}.elementor-social-icon-label .ha-social-icon-label{margin-left:0}.elementor-element-edit-mode .ha-social-icon-sticky{z-index:9999}.ha-social-icons:not(.elementor-element-edit-mode) .ha-social-icon-sticky{position:fixed}.ha-social-icon-separator{margin-right:10px}.ha-separator--stroke .ha-social-icon-separator{width:1px;height:1em;background:#d30c5c}.ha-separator--custom .ha-social-icon-separator{color:#d30c5c;font-size:24px}.ha-social-icon-separator:last-child{display:none}.ha-twitter-feed .ha-tweeter-feed-icon i{position:absolute;top:15px;right:15px;color:#1da1f2;font-size:22px}.ha-twitter-feed .ha-tweet-items{display:-ms-grid;display:grid;grid-gap:30px}.ha-twitter-feed .ha-tweet-item{position:relative;z-index:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;box-shadow:1px 1px 8px 1px rgba(0,0,0,.1)}.ha-twitter-feed .ha-tweet-content:before,.ha-twitter-feed .ha-tweet-item:before{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%;content:""}.ha-twitter-feed .ha-tweet-inner-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding:30px 10px}.ha-twitter-feed .ha-tweet-author,.ha-twitter-feed .ha-tweet-inner-wrapper,.ha-twitter-feed .ha-tweet-user{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.ha-twitter-feed .ha-tweet-author{-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;margin-bottom:10px}.ha-twitter-feed .ha-tweet-avatar{width:45px;border-radius:50%}.ha-twitter-feed .ha-tweet-user{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-twitter-feed .ha-tweet-author-name,.ha-twitter-feed .ha-tweet-content p a:hover{color:#e2498a}.ha-twitter-feed .ha-tweet-author-name:hover,.ha-twitter-feed .ha-tweet-content p a{color:#562dd4}.ha-twitter-feed .ha-tweet-username{color:#a7a7a7}.ha-twitter-feed .ha-tweet-username:hover{color:#818181}.ha-twitter-feed .ha-tweet-content{position:relative;color:#222}.ha-twitter-feed .ha-tweet-content p{margin-bottom:5px}.ha-twitter-feed .ha-tweet-footer{position:absolute;bottom:15px;left:0;padding:0 15px;width:100%;text-align:right}.ha-twitter-feed .ha-tweet-date{color:#a7a7a7}.ha-twitter-feed .ha-tweet-meta{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;-webkit-justify-content:space-around;justify-content:space-around;padding:15px}.ha-twitter-feed .ha-tweet-favorite,.ha-twitter-feed .ha-tweet-retweet{display:inline-block;color:#a7a7a7}.ha-twitter-feed .ha-tweet-favorite{margin-right:12px}.ha-twitter-feed .ha-twitter-load-more-wrapper{margin-top:30px;text-align:center}.ha-twitter-feed .ha-twitter-load-more{display:inline-block;padding:10px 25px;outline:none;border:none;border-radius:50px;background-color:#302a8c;color:#fff;text-align:center;font-weight:400;font-size:16px;-webkit-transition:all .3s;transition:all .3s}.ha-twitter-feed .ha-twitter-load-more:hover{background-color:#e2498a}.ha-twitter-feed .ha-tweet-error-message{padding:20px;border-left:4px solid #ff7726;background-color:#fff9f5}.ha-twitter-feed.ha-twitter-left .ha-tweet-avatar{margin-right:15px}.ha-twitter-feed.ha-twitter-left .ha-tweet-content{text-align:left}.ha-twitter-feed.ha-twitter-center .ha-tweet-author{-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-twitter-feed.ha-twitter-center .ha-tweet-content{text-align:center}.ha-twitter-feed.ha-twitter-right .ha-tweeter-feed-icon i{right:auto;left:5px;-webkit-transform:rotateY(-180deg);transform:rotateY(-180deg)}.ha-twitter-feed.ha-twitter-right .ha-tweet-author{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.ha-twitter-feed.ha-twitter-right .ha-tweet-content{text-align:right}.ha-twitter-feed.ha-twitter-user-bottom .ha-tweet-inner-wrapper{-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.ha-twitter-feed.ha-twitter-user-bottom .ha-tweet-author{margin-top:10px;margin-bottom:0}.ha-twitter-feed.ha-tweet-glassy-yes .ha-tweet-content:before{background-color:rgba(255,255,255,.4);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}
1
+ .happy-addon>.elementor-widget-container{word-wrap:break-word;overflow-wrap:break-word;box-sizing:border-box}.happy-addon>.elementor-widget-container *{box-sizing:border-box}.happy-addon img{max-width:100%;height:auto;-o-object-fit:cover;object-fit:cover}.happy-addon p:empty{display:none}.ha-screen-reader-text{position:absolute;overflow:hidden;clip:rect(1px,1px,1px,1px);margin:-1px;padding:0;width:1px;height:1px;border:0;word-wrap:normal!important;-webkit-clip-path:inset(50%);clip-path:inset(50%)}.ha-has-background-overlay>.elementor-widget-container{position:relative;z-index:1}.ha-has-background-overlay>.elementor-widget-container:before{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%;content:""}.ha-popup--is-enabled .ha-js-popup,.ha-popup--is-enabled .ha-js-popup img{cursor:-webkit-zoom-in!important;cursor:zoom-in!important}.mfp-wrap .mfp-arrow,.mfp-wrap .mfp-close{background-color:transparent}.mfp-wrap .mfp-arrow:focus,.mfp-wrap .mfp-close:focus{outline-width:thin}.ha-btn{display:inline-block;max-width:100%;vertical-align:middle;text-align:center;text-decoration:none;font-size:14px;line-height:1;-webkit-transition:all .3s;transition:all .3s}.ha-btn:not(.ha-btn--link){padding:15px 25px;border-radius:.25rem;background-color:#562dd4;color:#fff}.ha-btn:not(.ha-btn--link):focus,.ha-btn:not(.ha-btn--link):hover{background-color:#e2498a}.ha-btn.ha-btn--link{color:#562dd4}.ha-btn.ha-btn--link:focus,.ha-btn.ha-btn--link:hover{color:#e2498a}.ha-btn-icon+.ha-btn-text,.ha-btn-text+.ha-btn-icon{margin-left:5px}.ha-badge{padding:.475rem 1.1rem;max-width:100%;border-radius:50px;background-color:#fff;font-size:12px}.ha-badge--top-left{top:1rem;left:1rem}.ha-badge--top-center{top:1rem;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-badge--top-right{top:1rem;right:1rem}.ha-badge--middle-left{top:50%;left:1rem;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.ha-badge--middle-center{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.ha-badge--middle-right{top:50%;right:1rem;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.ha-badge--bottom-left{bottom:1rem;left:1rem}.ha-badge--bottom-center{bottom:1rem;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-badge--bottom-right{right:1rem;bottom:1rem}.ha-card-figure{position:relative;height:250px}.ha-card-figure img{border-top-left-radius:calc(.5rem - 1px);border-top-right-radius:calc(.5rem - 1px)}.ha-card-body{padding:1.5rem}.ha-card-title{margin-top:0;margin-bottom:.75rem;color:#151515;font-weight:700;font-size:22px}.ha-card-text{margin-bottom:2rem;color:#616161;font-size:16px;line-height:1.7}.ha-card-text>p,.ha-infobox-text>p{margin-top:0;margin-bottom:0}.ha-card--top .ha-card-figure{display:inline-block;width:100%}.ha-card--left>.elementor-widget-container,.ha-card--right>.elementor-widget-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center}.ha-card--left>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-card--left .ha-card-body,.ha-card--left .ha-card-figure,.ha-card--right .ha-card-body,.ha-card--right .ha-card-figure{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.ha-card--left .ha-card-body,.ha-card--right .ha-card-body{padding:2.5rem}.ha-card--left .ha-card-figure img{border-radius:calc(.5rem - 1px) 0 0 calc(.5rem - 1px)}.ha-card--right>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;text-align:right}.ha-card--right .ha-card-figure img{border-radius:0 calc(.5rem - 1px) calc(.5rem - 1px) 0}.ha-card .ha-badge{position:absolute}.ha-infobox>.elementor-widget-container{padding:1.5rem}.ha-infobox-title{margin-top:0;margin-bottom:1rem;color:#151515;font-size:24px}.ha-infobox-figure{display:inline-block;margin:0 0 1.5rem!important}.ha-infobox-figure--icon{text-align:center;font-size:3rem}.ha-icon-box-icon>i,.ha-infobox-figure>i{position:relative;display:block;width:1em;height:1em}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-icon i:before,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon i:before,.ha-icon-box-icon>i:before,.ha-infobox-figure>i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-card-figure img,.ha-infobox-figure img,.ha-member-figure img{width:100%;height:100%;vertical-align:bottom}.ha-infobox-text+.ha-btn--link{margin-top:1rem}.ha-icon-box>.elementor-widget-container{position:relative;padding:1.25rem}.ha-icon-box-title{margin-top:0;margin-bottom:0;color:#151515;font-size:24px;-webkit-transition:color .3s;transition:color .3s}.ha-icon-box-icon{display:inline-block;margin-bottom:1rem;color:#151515;text-align:center;font-size:3rem;-webkit-transition:border .3s,background .3s,color .3s,-webkit-transform .3s;transition:transform .3s,border .3s,background .3s,color .3s;transition:transform .3s,border .3s,background .3s,color .3s,-webkit-transform .3s}.ha-icon-box-icon>i{-webkit-transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.ha-icon-box-link{display:block;color:transparent;text-decoration:none}.ha-icon-box .ha-badge{position:absolute;z-index:9999;background-color:#e2498a;color:#fff}.ha-member>.elementor-widget-container{padding:1.25rem}.ha-member-figure{display:inline-block;margin:0 0 1.5rem!important}.ha-member-name{margin-top:0;margin-bottom:.5rem;color:#151515;font-size:18px}.ha-member-position{margin-bottom:1.5rem;color:#7f7f7f;font-size:14px}.ha-member-bio{margin-bottom:1.5rem;font-size:14px;line-height:1.6}.ha-member-links>a{display:inline-block;color:#9895ad;text-align:center;line-height:1;-webkit-transition:all .2s;transition:all .2s}.ha-member-links>a:focus,.ha-member-links>a:hover{color:#222}.ha-member-links>a>i{width:1em;height:1em}.ha-member-links>a:not(:last-child){margin-right:.3rem}.ha-review-header{margin-top:1.5rem}.ha-review-desc p,.ha-review-figure{margin:0}.ha-review-figure img{width:100%;height:100%;border-radius:50%;vertical-align:bottom}.ha-review-reviewer{margin-top:0;margin-bottom:.3rem;color:#151515;font-size:18px}.ha-review-position{margin-bottom:.5rem;color:#7f7f7f;font-size:15px}.ha-review-ratting{display:inline-block;font-size:12px;line-height:1}.ha-review-ratting--num{padding:.25em .66em;border-radius:2.5em;background-color:#562dd4;color:#fff}.ha-review-ratting--star{color:#ffbf36}.ha-review-desc{margin-top:1.5rem;font-size:16px;line-height:1.6}.ha-review--top>.elementor-widget-container{padding:2rem}.ha-review--top .ha-review-figure{display:inline-block;max-width:70px;height:70px}.ha-review--left>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-review--left>.elementor-widget-container,.ha-review--right>.elementor-widget-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;padding-left:2rem}.ha-review--left .ha-review-figure,.ha-review--right .ha-review-figure{-webkit-box-flex:0;-webkit-flex:0 0 150px;-ms-flex:0 0 150px;flex:0 0 150px;max-width:150px;height:150px}.ha-review--left .ha-review-body,.ha-review--right .ha-review-body{-webkit-box-flex:0;-webkit-flex:0 0 calc(100% - 150px);-ms-flex:0 0 calc(100% - 150px);flex:0 0 calc(100% - 150px);padding:2rem;max-width:calc(100% - 150px)}.ha-review--left .ha-review-body>:first-child,.ha-review--right .ha-review-body>:first-child{margin-top:0}.ha-review--right>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;padding-right:2rem;padding-left:0;text-align:right}.ha-image-compare .twentytwenty-container,.ha-image-compare .twentytwenty-wrapper,a.ha-social-icon:after,a.ha-social-icon:before{border-radius:inherit}.ha-gallery-filter{margin:0 10px 2rem;padding:0;list-style:none}.ha-gallery-filter>li{display:inline-block;margin-bottom:10px;max-width:100%}.ha-gallery-filter>li:not(:last-child){margin-right:10px}.ha-gallery-filter>li>button{display:block;overflow:hidden;padding:10px 25px;max-width:100%;border:2px solid #562dd4;border-radius:.25rem;background-color:transparent;color:#562dd4;text-transform:uppercase;text-overflow:ellipsis;font-size:14px;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ha-gallery-filter>li>button:focus,.ha-gallery-filter>li>button:hover{outline:0;background-color:#562dd4;color:#fff}.ha-gallery-filter>.ha-filter-active>button{background-color:#562dd4;color:#fff}.ha-image-grid-item{float:left}.ha-image-grid-inner{position:relative;display:block;overflow:hidden;margin:10px;text-decoration:none}.ha-image-grid-inner img{display:block;width:100%;-webkit-transition:all .25s;transition:all .25s}.ha-image-grid--layout-even .ha-image-grid-inner{height:250px}.ha-image-grid--layout-even .ha-image-grid-inner img{height:100%}.ha-justified-gallery-item,.ha-justified-gallery-item>img{border-radius:6px}.ha-justified-gallery .justified-gallery>.ha-justified-gallery-item>.caption{bottom:-100px!important;padding:10px;-webkit-transition:all .25s!important;transition:all .25s!important;-webkit-animation:haSmoothReveal .3s forwards;animation:haSmoothReveal .3s forwards}.ha-justified-gallery .justified-gallery>.ha-justified-gallery-item>.caption.caption-visible{bottom:0!important}.ha-justified-gallery .justified-gallery>.entry-visible>a>img,.ha-justified-gallery .justified-gallery>.entry-visible>img{-webkit-transition:all 300ms,opacity 500ms ease-in;transition:all 300ms,opacity 500ms ease-in}@-webkit-keyframes haSmoothReveal{0%{-webkit-transform:translateY(100px);transform:translateY(100px)}to{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes haSmoothReveal{0%{-webkit-transform:translateY(100px);transform:translateY(100px)}to{-webkit-transform:translateY(0);transform:translateY(0)}}.ha-carousel .slick-vertical .slick-slide,.ha-slider .slick-vertical .slick-slide{border:0}.ha-carousel .slick-next,.ha-carousel .slick-prev,.ha-slider .slick-next,.ha-slider .slick-prev{z-index:999;padding:0;border:1px solid rgba(255,255,255,.8);border-radius:50%;background-color:rgba(255,255,255,.8);color:#8c8c8c;text-align:center;font-size:12px;opacity:1}.ha-carousel .slick-next:focus,.ha-carousel .slick-next:hover,.ha-carousel .slick-prev:focus,.ha-carousel .slick-prev:hover,.ha-slider .slick-next:focus,.ha-slider .slick-next:hover,.ha-slider .slick-prev:focus,.ha-slider .slick-prev:hover{background-color:#fff}.ha-carousel .slick-next:before,.ha-carousel .slick-prev:before,.ha-slider .slick-next:before,.ha-slider .slick-prev:before{content:""}.ha-carousel .slick-disabled,.ha-slider .slick-disabled{opacity:.7}.ha-carousel .slick-prev,.ha-slider .slick-prev{left:25px}.ha-carousel .slick-next,.ha-slider .slick-next{right:25px}.ha-carousel .slick-dots,.ha-slider .slick-dots{bottom:-40px}.ha-carousel .slick-dots li,.ha-slider .slick-dots li{margin-right:2px;margin-left:2px}.ha-carousel .slick-dots li button:focus,.ha-carousel .slick-dots li button:hover,.ha-slider .slick-dots li button:focus,.ha-slider .slick-dots li button:hover{background-color:transparent}.ha-carousel .slick-dots li button:before,.ha-slider .slick-dots li button:before{color:#1b1b1b;opacity:1}.ha-carousel .slick-dots .slick-active button:before,.ha-carousel .slick-dots li button:hover:before,.ha-slider .slick-dots .slick-active button:before,.ha-slider .slick-dots li button:hover:before{-webkit-transform:scale(1.5);-ms-transform:scale(1.5);transform:scale(1.5)}.ha-carousel .slick-next,.ha-carousel .slick-prev{width:40px;height:40px;line-height:40px}.ha-slider .slick-next,.ha-slider .slick-prev{width:50px;height:50px;line-height:50px}.ha-carousel .slick-slider:not(.slick-vertical) .slick-slide{padding-right:5px;padding-left:5px}.ha-carousel .slick-slider.slick-vertical .slick-slide{padding-top:5px;padding-bottom:5px}.ha-slick-item{position:relative;overflow:hidden;vertical-align:bottom}.ha-slick-content{position:absolute;bottom:0;padding:1.5rem;width:100%;background:-webkit-linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.3));background:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.3))}.ha-slick-title{margin-top:0;margin-bottom:.2rem;color:#fff;font-size:20px}.ha-slick-subtitle{margin:0;color:#fff}.ha-skills>.elementor-widget-container{padding-top:1px}.ha-skill{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border-radius:15px;background-color:#e9ecef;font-size:.75rem}.ha-skill--inside .ha-skill-info,.ha-skill--outside .ha-skill-info{text-align:left;font-size:14px;line-height:1}.ha-skill--inside .ha-skill-level-text,.ha-skill--outside .ha-skill-level-text{float:right}.ha-skill--outside{height:2px}.ha-skill--outside .ha-skill-level{position:relative}.ha-skill--outside .ha-skill-info{position:absolute;top:-25px;width:100%;color:#242424}.ha-skill--inside{height:30px}.ha-skill--inside .ha-skill-info{padding-right:1rem;padding-left:1rem;color:#fff}.ha-skill-level{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;width:10%;border-radius:inherit;background-color:#562dd4;color:#fff;text-align:center;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.ha-skill--outside{margin-top:40px}.ha-skill--inside:not(:first-child){margin-top:20px}.ha-skill-name{display:inline-block;overflow:hidden;max-width:70%;text-overflow:ellipsis}.ha-gradient-heading{margin-top:0;margin-bottom:0}.ha-gradient-heading>a{color:inherit;text-decoration:none}.ha-logo-grid-item{float:left;overflow:hidden;height:180px;border-color:#e7e7e7}.ha-logo-grid-figure{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;margin:0;padding:30px;width:100%;height:100%}.ha-logo-grid-img{max-height:100%}@media (min-width:1025px){.ha-logo-grid--col-2 .ha-logo-grid-item{width:calc(100%/2)}.ha-logo-grid--col-3 .ha-logo-grid-item{width:calc(100%/3)}.ha-logo-grid--col-4 .ha-logo-grid-item{width:calc(100%/4)}.ha-logo-grid--col-5 .ha-logo-grid-item{width:calc(100%/5)}.ha-logo-grid--col-6 .ha-logo-grid-item{width:calc(100%/6)}}@media (max-width:1024px) and (min-width:768px){.ha-logo-grid--col--tablet2 .ha-logo-grid-item{width:calc(100%/2)}.ha-logo-grid--col--tablet3 .ha-logo-grid-item{width:calc(100%/3)}.ha-logo-grid--col--tablet4 .ha-logo-grid-item{width:calc(100%/4)}.ha-logo-grid--col--tablet5 .ha-logo-grid-item{width:calc(100%/5)}.ha-logo-grid--col--tablet6 .ha-logo-grid-item{width:calc(100%/6)}}@media (max-width:767px){.ha-logo-grid--col--mobile2 .ha-logo-grid-item{width:calc(100%/2)}.ha-logo-grid--col--mobile3 .ha-logo-grid-item{width:calc(100%/3)}.ha-logo-grid--col--mobile4 .ha-logo-grid-item{width:calc(100%/4)}.ha-logo-grid--col--mobile5 .ha-logo-grid-item{width:calc(100%/5)}.ha-logo-grid--col--mobile6 .ha-logo-grid-item{width:calc(100%/6)}}.ha-logo-grid--tictactoe .ha-logo-grid-item{border-width:2px 2px 0 0;border-style:solid}@media (min-width:1025px){.ha-logo-grid--tictactoe.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:0!important}}@media (max-width:1024px) and (min-width:768px){.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(2n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(3n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(4n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(5n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(6n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:0!important}}@media (max-width:767px){.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(2n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(3n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(4n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(5n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(6n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:0!important}}.ha-logo-grid--border .ha-logo-grid-item{border-width:0 2px 2px 0;border-style:solid}.ha-logo-grid--border .ha-logo-grid-item:first-child{border-top-left-radius:10px}.ha-logo-grid--border .ha-logo-grid-item:last-child{border-bottom-right-radius:10px}@media (min-width:1025px){.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-last-child(2){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-last-child(3){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-last-child(4){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-last-child(5){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-last-child(6){border-bottom-left-radius:10px}}@media (max-width:1024px) and (min-width:768px){.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(2n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(2){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-last-child(2){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(3n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(3){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-last-child(3){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(4n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(4){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-last-child(4){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(5n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(5){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-last-child(5){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(6n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(6){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-last-child(6){border-bottom-left-radius:10px}}@media (max-width:767px){.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(2n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(2){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-last-child(2){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(3n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(3){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-last-child(3){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(4n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(4){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-last-child(4){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(5n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(5){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-last-child(5){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(6n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(6){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-last-child(6){border-bottom-left-radius:10px}}.ha-logo-grid--box .ha-logo-grid-wrapper{margin:-.5rem}.ha-logo-grid--box .ha-logo-grid-item{margin:.5rem;border-width:2px;border-style:solid;border-radius:.5rem}@media (min-width:1025px){.ha-logo-grid--box.ha-logo-grid--col-2 .ha-logo-grid-item{width:calc((100%/2) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col-3 .ha-logo-grid-item{width:calc((100%/3) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col-4 .ha-logo-grid-item{width:calc((100%/4) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col-5 .ha-logo-grid-item{width:calc((100%/5) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col-6 .ha-logo-grid-item{width:calc((100%/6) - 1rem)}}@media (max-width:1024px) and (min-width:768px){.ha-logo-grid--box.ha-logo-grid--col--tablet2 .ha-logo-grid-item{width:calc((100%/2) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--tablet3 .ha-logo-grid-item{width:calc((100%/3) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--tablet4 .ha-logo-grid-item{width:calc((100%/4) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--tablet5 .ha-logo-grid-item{width:calc((100%/5) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--tablet6 .ha-logo-grid-item{width:calc((100%/6) - 1rem)}}@media (max-width:767px){.ha-logo-grid--box.ha-logo-grid--col--mobile2 .ha-logo-grid-item{width:calc((100%/2) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--mobile3 .ha-logo-grid-item{width:calc((100%/3) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--mobile4 .ha-logo-grid-item{width:calc((100%/4) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--mobile5 .ha-logo-grid-item{width:calc((100%/5) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--mobile6 .ha-logo-grid-item{width:calc((100%/6) - 1rem)}}.ha-dual-btn,.ha-dual-btn-connector{display:inline-block}.ha-dual-btn-wrapper{position:relative;text-align:center;font-weight:400}.ha-dual-btn{padding:1.2rem 3rem;max-width:100%;color:#fff;text-decoration:none;font-size:14px}.ha-dual-btn--left{background-color:#562dd4}.ha-dual-btn--left:focus,.ha-dual-btn--left:hover{background-color:#4423ab;color:#fff}.ha-dual-btn--right{background-color:#e2498a}.ha-dual-btn--right:focus,.ha-dual-btn--right:hover{background-color:#d6226e;color:#fff}.ha-dual-btn-connector{position:absolute!important;z-index:9;overflow:hidden;width:30px;height:30px;border-radius:100%;background-color:#fff;box-shadow:0 0 0 5px rgba(255,255,255,.3);color:#27374c;text-transform:uppercase;font-size:12px;line-height:30px;-webkit-transform:translate(50%,-50%);-ms-transform:translate(50%,-50%);transform:translate(50%,-50%)}.ha-dual-btn-icon>svg{width:1em;height:auto}.ha-dual-btn-icon>i{font-size:1em}.ha-dual-btn-icon--before{margin-right:5px}.ha-dual-btn-icon--after{margin-left:5px}.ha-dual-button>.elementor-widget-container,.ha-news-ticker-wrapper ul.ha-news-ticker-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.ha-dual-button--mobile-layout-stack>.elementor-widget-container{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-dual-button--mobile-layout-stack .ha-dual-btn-wrapper{max-width:100%}.ha-dual-button--mobile-layout-stack .ha-dual-btn-connector{top:100%;right:50%}.ha-dual-button--mobile-layout-stack .ha-dual-btn--left{border-radius:30px 30px 0 0}.ha-dual-button--mobile-layout-stack .ha-dual-btn--right{border-radius:0 0 30px 30px}.ha-dual-button--mobile-layout-stack.ha-dual-button--mobile-align-left>.elementor-widget-container{-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start;-ms-flex-align:start}.ha-dual-button--mobile-layout-stack.ha-dual-button--mobile-align-center>.elementor-widget-container,.ha-testimonial__reviewer{-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center}.ha-dual-button--mobile-layout-stack.ha-dual-button--mobile-align-right>.elementor-widget-container{-webkit-box-align:end;-webkit-align-items:flex-end;align-items:flex-end;-ms-flex-align:end}.ha-dual-button--mobile-layout-queue.ha-dual-button--mobile-align-left>.elementor-widget-container{-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.ha-dual-button--mobile-layout-queue.ha-dual-button--mobile-align-center>.elementor-widget-container{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.ha-dual-button--mobile-layout-queue.ha-dual-button--mobile-align-right>.elementor-widget-container{-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.ha-dual-button--mobile-layout-queue>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-dual-button--mobile-layout-queue .ha-dual-btn-wrapper{max-width:50%}.ha-dual-button--mobile-layout-queue .ha-dual-btn-connector{top:50%;right:0}.ha-dual-button--mobile-layout-queue .ha-dual-btn--left{border-radius:50px 0 0 50px}.ha-dual-button--mobile-layout-queue .ha-dual-btn--right{border-radius:0 50px 50px 0}@media (min-width:768px){.ha-dual-button--tablet-layout-stack.ha-dual-button--tablet-align-left>.elementor-widget-container{-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start;-ms-flex-align:start}.ha-dual-button--tablet-layout-stack.ha-dual-button--tablet-align-center>.elementor-widget-container{-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center}.ha-dual-button--tablet-layout-stack.ha-dual-button--tablet-align-right>.elementor-widget-container{-webkit-box-align:end;-webkit-align-items:flex-end;align-items:flex-end;-ms-flex-align:end}.ha-dual-button--tablet-layout-queue.ha-dual-button--tablet-align-left>.elementor-widget-container{-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.ha-dual-button--tablet-layout-queue.ha-dual-button--tablet-align-center>.elementor-widget-container{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.ha-dual-button--tablet-layout-queue.ha-dual-button--tablet-align-right>.elementor-widget-container{-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.ha-dual-button--tablet-layout-stack>.elementor-widget-container{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-dual-button--tablet-layout-stack .ha-dual-btn-wrapper{max-width:100%}.ha-dual-button--tablet-layout-stack .ha-dual-btn-connector{top:100%;right:50%}.ha-dual-button--tablet-layout-stack .ha-dual-btn--left{border-radius:30px 30px 0 0}.ha-dual-button--tablet-layout-stack .ha-dual-btn--right{border-radius:0 0 30px 30px}.ha-dual-button--tablet-layout-queue>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-dual-button--tablet-layout-queue .ha-dual-btn-wrapper{max-width:50%}.ha-dual-button--tablet-layout-queue .ha-dual-btn-connector{top:50%;right:0}.ha-dual-button--tablet-layout-queue .ha-dual-btn--left{border-radius:50px 0 0 50px}.ha-dual-button--tablet-layout-queue .ha-dual-btn--right{border-radius:0 50px 50px 0}}@media (min-width:1025px){.ha-dual-button--layout-stack.ha-dual-button--align-left>.elementor-widget-container{-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start;-ms-flex-align:start}.ha-dual-button--layout-stack.ha-dual-button--align-center>.elementor-widget-container{-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center}.ha-dual-button--layout-stack.ha-dual-button--align-right>.elementor-widget-container{-webkit-box-align:end;-webkit-align-items:flex-end;align-items:flex-end;-ms-flex-align:end}.ha-dual-button--layout-queue.ha-dual-button--align-left>.elementor-widget-container{-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.ha-dual-button--layout-queue.ha-dual-button--align-center>.elementor-widget-container{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.ha-dual-button--layout-queue.ha-dual-button--align-right>.elementor-widget-container{-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.ha-dual-button--layout-stack>.elementor-widget-container{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-dual-button--layout-stack .ha-dual-btn-wrapper{max-width:100%}.ha-dual-button--layout-stack .ha-dual-btn-connector{top:100%;right:50%}.ha-dual-button--layout-stack .ha-dual-btn--left{border-radius:30px 30px 0 0}.ha-dual-button--layout-stack .ha-dual-btn--right{border-radius:0 0 30px 30px}.ha-dual-button--layout-queue>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-dual-button--layout-queue .ha-dual-btn-wrapper{max-width:50%}.ha-dual-button--layout-queue .ha-dual-btn-connector{top:50%;right:0}.ha-dual-button--layout-queue .ha-dual-btn--left{border-radius:50px 0 0 50px}.ha-dual-button--layout-queue .ha-dual-btn--right{border-radius:0 50px 50px 0}}.ha-testimonial--basic>.elementor-widget-container{padding:2rem;border:1px solid #ececec;border-radius:.5rem}.ha-testimonial--basic .ha-testimonial__content{margin-bottom:2.5em}.ha-testimonial--bubble .ha-testimonial__content{position:relative;margin-bottom:1.5rem;padding:2rem;border-radius:6px;background-color:#fff;box-shadow:0 .2rem 2.8rem rgba(36,36,36,.1);line-height:1.6rem}.ha-testimonial--bubble .ha-testimonial__content:after{position:absolute;bottom:-14px;color:#fff;content:"\e911";font-style:normal;font-size:36px;font-family:"Happy Icons";-webkit-transform:rotate(-180deg);-ms-transform:rotate(-180deg);transform:rotate(-180deg)}.ha-testimonial--left.ha-testimonial--bubble .ha-testimonial__content:after{left:15px}.ha-testimonial--center.ha-testimonial--bubble .ha-testimonial__content:after{left:50%;-webkit-transform:translateX(-50%) rotate(-180deg);-ms-transform:translateX(-50%) rotate(-180deg);transform:translateX(-50%) rotate(-180deg)}.ha-testimonial--right.ha-testimonial--bubble .ha-testimonial__content:after{right:15px}.ha-testimonial__reviewer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.ha-testimonial__reviewer-thumb{-webkit-box-flex:0;-webkit-flex:0 0 65px;-ms-flex:0 0 65px;flex:0 0 65px;max-width:65px;height:65px}.ha-testimonial__reviewer-thumb img{width:100%;height:100%;border-radius:50%;-o-object-fit:cover;object-fit:cover}.ha-testimonial__reviewer-name{margin-bottom:.3rem;color:#562dd4;font-weight:700;font-size:18px}.ha-testimonial__reviewer-title{color:#8c8c8c;font-size:16px}.ha-testimonial--left .ha-testimonial__reviewer-meta{padding-left:1em}.ha-testimonial--center .ha-testimonial__reviewer{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-testimonial--center .ha-testimonial__reviewer-meta{padding-top:1em;max-width:100%}.ha-testimonial--left .ha-testimonial__reviewer-meta,.ha-testimonial--right .ha-testimonial__reviewer-meta{-webkit-box-flex:0;-webkit-flex:0 0 calc(100% - 65px);-ms-flex:0 0 calc(100% - 65px);flex:0 0 calc(100% - 65px);max-width:calc(100% - 65px)}.ha-testimonial--right .ha-testimonial__reviewer{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.ha-testimonial--right .ha-testimonial__reviewer-meta{padding-right:1em}.ha-testimonial--left{text-align:left}.ha-testimonial--right{text-align:right}.ha-number-body,.ha-testimonial--center{text-align:center}.ha-number-body{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;padding:6px;width:50px;height:50px;border-radius:100%;background-color:#562dd4;color:#fff;font-size:20px}.ha-number-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.ha-number-text{position:relative;z-index:1;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.ha-flip-box-container:after{display:block;visibility:hidden;clear:both;height:0;content:" ";font-size:0}.ha-flip-box-container .ha-flip-box-inner{position:relative;z-index:1;margin:0;padding:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.ha-flip-box-container .ha-flip-box-inner:hover .ha-flip-box-back{z-index:1}.ha-flip-box-container .ha-flip-box-inner:hover .ha-flip-box-front{z-index:-1}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-inner-wrapper{position:relative;-webkit-transform:translateZ(0);-webkit-perspective:1000px;perspective:1000px}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front{top:0;right:0;left:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;height:250px;background-position:center;background-clip:padding-box;background-size:cover;background-repeat:no-repeat;text-align:center;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front{background-color:transparent;position:relative;bottom:0;z-index:10;padding:30px;border:1px solid #ddd;border-radius:.3rem}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back:before,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front:before{position:absolute;top:0;left:0;z-index:-9;width:100%;height:100%;background-color:transparent;content:""}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back{position:absolute;z-index:-1;padding:46px;border-radius:.3rem;background-color:#562dd4;color:#fff}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-text,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-text{text-align:center}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-text p,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-text p{margin-top:10px;margin-bottom:0}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon.icon{padding:20px;border-radius:50%;background-color:#f1f4f8;color:#242424}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon{display:inline-block;margin-bottom:20px;text-align:center}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon i{position:relative;display:block;width:1em;height:1em;font-size:28px}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-icon img,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon img{width:60px;height:60px;vertical-align:middle}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-box-heading{margin:0;font-weight:700;font-size:20px}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner p{margin-bottom:0;font-size:16px}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-box-heading-back{margin:0;color:#fff;font-size:18px}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-icon{display:inline-block;margin-bottom:20px;text-align:center}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-icon i{position:relative;display:block;width:1em;height:1em;color:#fff;font-size:20px}.ha-flip-box-container .ha-flip-box-inner.ha-flip-right .ha-flip-box-front,.ha-flip-box-container .ha-flip-box-inner.ha-flip-right:hover .ha-flip-box-back{-webkit-transform:rotateY(0);transform:rotateY(0)}.ha-flip-box-container .ha-flip-box-inner.ha-flip-right .ha-flip-box-back{-webkit-transform:rotateY(-180deg);transform:rotateY(-180deg)}.ha-flip-box-container .ha-flip-box-inner.ha-flip-right:hover .ha-flip-box-front{-webkit-transform:rotateY(180deg);transform:rotateY(180deg)}.ha-flip-box-container .ha-flip-box-inner.ha-flip-up .ha-flip-box-front,.ha-flip-box-container .ha-flip-box-inner.ha-flip-up:hover .ha-flip-box-back{-webkit-transform:rotateX(0);transform:rotateX(0)}.ha-flip-box-container .ha-flip-box-inner.ha-flip-up .ha-flip-box-back{-webkit-transform:rotateX(-180deg);transform:rotateX(-180deg)}.ha-flip-box-container .ha-flip-box-inner.ha-flip-up:hover .ha-flip-box-front{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}.ha-flip-box-container.ha-flip-effect-classic .ha-flip-box-back,.ha-flip-box-container.ha-flip-effect-classic .ha-flip-box-front{-webkit-transition:-webkit-transform .6s cubic-bezier(.2,.85,.4,1.275);transition:transform .6s cubic-bezier(.2,.85,.4,1.275);transition:transform .6s cubic-bezier(.2,.85,.4,1.275),-webkit-transform .6s cubic-bezier(.2,.85,.4,1.275)}.ha-logo-grid-wrapper:after{display:block;clear:both;content:""}.ha-pricing-table>.elementor-widget-container{position:relative;overflow:hidden;padding:3em 4em}.ha-pricing-table-badge{position:absolute;top:-1px;padding:.8rem 1rem;background-color:#e2498a;color:#fff;line-height:1}.ha-pricing-table-badge--left{left:0;-webkit-transform:rotate(-90deg) translateX(-100%);-ms-transform:rotate(-90deg) translateX(-100%);transform:rotate(-90deg) translateX(-100%);-webkit-transform-origin:left top;-ms-transform-origin:left top;transform-origin:left top}.ha-pricing-table-badge--right{right:0;-webkit-transform:rotate(-90deg) translateY(-100%);-ms-transform:rotate(-90deg) translateY(-100%);transform:rotate(-90deg) translateY(-100%);-webkit-transform-origin:right top;-ms-transform-origin:right top;transform-origin:right top}.ha-pricing-table-title{margin-top:0;margin-bottom:.5rem;color:#242424;font-weight:400;font-size:24px}.ha-pricing-table-price{margin-bottom:3rem}.ha-pricing-table-price-tag{margin-bottom:.5rem;color:#242424;font-weight:700;font-size:60px;line-height:normal}.ha-pricing-table-currency{font-size:24px}.ha-pricing-table-period{color:#8c8c8c;font-size:16px}.ha-pricing-table-body{margin-bottom:3rem}.ha-pricing-table-features-title{margin-top:0;margin-bottom:1rem;font-weight:700;font-size:16px}.ha-pricing-table-features-list{margin:0;padding:0;list-style:none}.ha-pricing-table-features-list li{margin-bottom:1rem;font-size:16px}.ha-pricing-table-features-list i{margin-right:.5rem;min-width:15px;font-size:.8em}.ha-pricing-table-feature-text{display:inline-block}.ha-pricing-table-btn{display:inline-block;padding:.8rem 2rem;border-radius:40px;background-color:#e2498a;color:#fff;text-decoration:none;text-transform:uppercase;font-size:12px;-webkit-transition:all .3s;transition:all .3s}.ha-pricing-table-btn:hover{background-color:#562dd4;color:#fff}.ha-card>.elementor-widget-container,.ha-icon-box>.elementor-widget-container,.ha-image-compare>.elementor-widget-container,.ha-infobox>.elementor-widget-container,.ha-member>.elementor-widget-container,.ha-pricing-table>.elementor-widget-container,.ha-review>.elementor-widget-container{border-radius:.5rem;background-color:#fff;box-shadow:0 .2rem 2.8rem rgba(36,36,36,.1)}.ha-step-flow>.elementor-widget-container{padding:30px;text-align:center}.ha-step-arrow,.ha-step-arrow:after{position:absolute;display:inline-block;border-top:1px solid #ddd}.ha-step-arrow{left:calc(100% + 20px);top:49%;width:100px}.ha-step-arrow:after{top:-2px;right:5px;width:12px;height:12px;border-right:1px solid #ddd;color:#ddd;content:"";-webkit-transform:rotate(45deg) translateY(-50%);-ms-transform:rotate(45deg) translateY(-50%);transform:rotate(45deg) translateY(-50%)}.ha-steps-icon{position:relative;display:inline-block;margin-bottom:2rem;padding:40px;border-radius:50%;background-color:#e9ecf0;box-shadow:0 2px 6px -2px #989898;color:#8056ee;text-align:center;font-size:46px}.ha-steps-icon i{position:relative;display:block;width:1em;height:1em}.ha-steps-icon i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-steps-icon .ha-steps-label{position:absolute;top:5px;right:0;overflow:hidden;padding:12px 8px;max-width:200%;border:3px solid #fff;border-radius:20px;background-color:#8056ee;color:#fff;text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:1}.ha-steps-title{margin-top:0;margin-bottom:30px;font-weight:700;font-size:16px}.ha-steps-title a{display:block;color:#562dd4}.ha-news-ticker-wrapper li.ha-news-ticker-item a,.ha-steps-title a:hover{color:#242424}.ha-step-description{margin:0;color:#616161;font-weight:400;font-size:16px;line-height:1.5}.ha-news-ticker-wrapper{position:relative;overflow:hidden;padding:20px 0;border:1px solid #d2d2d2;border-radius:5px}.ha-news-ticker-wrapper ul.ha-news-ticker-container{margin:0;padding:0;list-style:none}.ha-news-ticker-wrapper ul.ha-news-ticker-container:focus,.ha-news-ticker-wrapper ul.ha-news-ticker-container:hover{-webkit-animation-play-state:paused!important;animation-play-state:paused!important}.ha-news-ticker-wrapper span.ha-news-ticker-sticky-title{position:absolute;top:50%;left:auto;z-index:1;padding:20px;background:#333;color:#fff;font-size:1rem;line-height:1;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.ha-news-ticker-wrapper li.ha-news-ticker-item{margin-right:20px;white-space:nowrap}.ha-news-ticker-wrapper li.ha-news-ticker-item:last-child,.ha-post-list-meta-wrap span:last-child{margin-right:0}.ha-news-ticker-wrapper .ha-news-ticker-title{margin:0;font-size:1rem;line-height:1}.ha-news-ticker-wrapper li.ha-news-ticker-item a:hover{color:#e04c8a}.ha-fun-factor-icon{font-size:3em}.ha-fun-factor-content .ha-fun-factor-content-number,.ha-fun-factor-content .ha-fun-factor-content-text{margin-top:0;margin-bottom:15px;font-size:24px}.ha-ff-icon--left .ha-fun-factor-content{padding-left:20px}.ha-ff-icon--right .ha-fun-factor-content{padding-right:20px}.ha-fun-factor-divider{display:block;margin-bottom:15px;height:1px;background-color:#ccc}.ha-ff-icon--top .ha-fun-factor-icon-section,.ha-ff-icon--top .ha-fun-factor-image-section{display:inline-block;margin-top:10px;margin-bottom:10px;width:auto;height:auto}.ha-fun-factor-image-section img{width:200px;height:100px}.ha-ff-container{padding:10px;word-wrap:break-word;overflow-wrap:break-word}.ha-ff-icon--left>.elementor-widget-container .ha-ff-container,.ha-ff-icon--right>.elementor-widget-container .ha-ff-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center}.ha-ff-icon--left>.elementor-widget-container .ha-ff-container{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-ff-icon--right>.elementor-widget-container .ha-ff-container{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;text-align:right}.ha-ff-icon--left>.elementor-widget-container .ha-ff-container .ha-fun-factor-divider,.ha-ff-icon--right>.elementor-widget-container .ha-ff-container .ha-fun-factor-divider{display:block;margin-right:auto;margin-left:auto}.ha-ff-icon--top>.elementor-widget-container .ha-ff-container .ha-fun-factor-divider{display:block;margin-right:auto;margin-left:auto;width:100px}.ha-ff-icon--left>.elementor-widget-container .ha-ff-container .ha-fun-factor-divider,.ha-ff-icon--right>.elementor-widget-container .ha-ff-container .ha-fun-factor-divider{width:100%!important}.ha-fun-factor-divider-align-left{margin-left:0!important;text-align:left}.ha-fun-factor-divider-align-right{margin-right:0!important;text-align:right}.ha-fun-factor-divider-align-center{margin-right:auto!important;margin-left:auto!important;text-align:center}.ha-social-icons-wrapper,.ha-social-icons-wrapper a{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center}.ha-social-icons-wrapper a{padding:15px;border-radius:4px;color:#fff;font-size:30px;-webkit-transition:all .3s;transition:all .3s}a.ha-social-icon:hover{position:relative;z-index:1;background:#e2498a}.ha-social-icons-wrapper a.elementor-social-icon-label{color:#d30c5c}.ha-social-icon:not(:last-child){margin-right:2px}.ha-social-icon i,.ha-social-icon svg{position:relative;display:initial}.ha-social-icon svg,.ha-social-icon-label{width:100%;height:100%}.ha-social-icon i{width:1em;height:1em}.ha-social-icon-label{margin:0 0 0 10px;font-size:18px;font-family:Roboto,sans-serif;line-height:1}.elementor-social-icon-label .ha-social-icon-label{margin-left:0}.elementor-element-edit-mode .ha-social-icon-sticky{z-index:9999}.ha-social-icons:not(.elementor-element-edit-mode) .ha-social-icon-sticky{position:fixed}.ha-social-icon-separator{margin-right:10px}.ha-separator--stroke .ha-social-icon-separator{width:1px;height:1em;background:#d30c5c}.ha-separator--custom .ha-social-icon-separator{color:#d30c5c;font-size:24px}.ha-social-icon-separator:last-child{display:none}.ha-twitter-feed .ha-tweeter-feed-icon i{position:absolute;top:15px;right:15px;color:#1da1f2;font-size:22px}.ha-twitter-feed .ha-tweet-items{display:-ms-grid;display:grid;grid-gap:30px}.ha-twitter-feed .ha-tweet-item{position:relative;z-index:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;box-shadow:1px 1px 8px 1px rgba(0,0,0,.1)}.ha-twitter-feed .ha-tweet-content:before,.ha-twitter-feed .ha-tweet-item:before{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%;content:""}.ha-twitter-feed .ha-tweet-inner-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding:30px 10px}.ha-twitter-feed .ha-tweet-author,.ha-twitter-feed .ha-tweet-inner-wrapper,.ha-twitter-feed .ha-tweet-user{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.ha-twitter-feed .ha-tweet-author{-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;margin-bottom:10px}.ha-twitter-feed .ha-tweet-avatar{width:45px;border-radius:50%}.ha-twitter-feed .ha-tweet-user{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-twitter-feed .ha-tweet-author-name,.ha-twitter-feed .ha-tweet-content p a:hover{color:#e2498a}.ha-twitter-feed .ha-tweet-author-name:hover,.ha-twitter-feed .ha-tweet-content p a{color:#562dd4}.ha-twitter-feed .ha-tweet-username{color:#a7a7a7}.ha-twitter-feed .ha-tweet-username:hover{color:#818181}.ha-twitter-feed .ha-tweet-content{position:relative;color:#222}.ha-twitter-feed .ha-tweet-content p{margin-bottom:5px}.ha-twitter-feed .ha-tweet-footer{position:absolute;bottom:15px;left:0;padding:0 15px;width:100%;text-align:right}.ha-twitter-feed .ha-tweet-date{color:#a7a7a7}.ha-twitter-feed .ha-tweet-meta{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;-webkit-justify-content:space-around;justify-content:space-around;padding:15px}.ha-twitter-feed .ha-tweet-favorite,.ha-twitter-feed .ha-tweet-retweet{display:inline-block;color:#a7a7a7}.ha-twitter-feed .ha-tweet-favorite{margin-right:12px}.ha-twitter-feed .ha-twitter-load-more-wrapper{margin-top:30px;text-align:center}.ha-twitter-feed .ha-twitter-load-more{display:inline-block;padding:10px 25px;outline:none;border:none;border-radius:50px;background-color:#302a8c;color:#fff;text-align:center;font-weight:400;font-size:16px;-webkit-transition:all .3s;transition:all .3s}.ha-twitter-feed .ha-twitter-load-more:hover{background-color:#e2498a}.ha-twitter-feed .ha-tweet-error-message{padding:20px;border-left:4px solid #ff7726;background-color:#fff9f5}.ha-post-list-item a img,.ha-twitter-feed.ha-twitter-left .ha-tweet-avatar{margin-right:15px}.ha-twitter-feed.ha-twitter-left .ha-tweet-content{text-align:left}.ha-twitter-feed.ha-twitter-center .ha-tweet-author{-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-twitter-feed.ha-twitter-center .ha-tweet-content{text-align:center}.ha-twitter-feed.ha-twitter-right .ha-tweeter-feed-icon i{right:auto;left:5px;-webkit-transform:rotateY(-180deg);transform:rotateY(-180deg)}.ha-twitter-feed.ha-twitter-right .ha-tweet-author{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.ha-twitter-feed.ha-twitter-right .ha-tweet-content{text-align:right}.ha-twitter-feed.ha-twitter-user-bottom .ha-tweet-inner-wrapper{-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.ha-twitter-feed.ha-twitter-user-bottom .ha-tweet-author{margin-top:10px;margin-bottom:0}.ha-twitter-feed.ha-tweet-glassy-yes .ha-tweet-content:before{background-color:rgba(255,255,255,.4);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.ha-post-list{margin:0;padding:0;list-style:none}.ha-post-list .ha-post-list-item,.ha-post-list.ha-post-list-inline{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.ha-post-list.ha-post-list-inline{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.ha-post-list .ha-post-list-item{margin:0 0 10px;padding:0}.ha-post-list.ha-post-list-inline .ha-post-list-item{margin-right:21px}.ha-post-list .ha-post-list-item:last-child,.ha-post-list.ha-post-list-inline .ha-post-list-item:last-child{margin-right:0;margin-bottom:0}.ha-post-list .ha-post-list-item a{width:100%}.ha-post-list-title{display:block;margin-top:0;margin-bottom:0;color:#242424;font-size:1rem;-webkit-transition:all .4s;transition:all .4s}.ha-post-list .ha-post-list-item a:hover .ha-post-list-title{color:#e04d8b}span.ha-post-list-icon{margin-right:8px;color:#242424;font-size:14px}.ha-post-list .ha-post-list-item a,.ha-post-list-meta-wrap,.ha-post-tab span.ha-post-tab-loading{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.ha-post-list-meta-wrap{margin-top:3px}.ha-post-list-meta-wrap span{margin-right:10px;color:#8c8c8c;font-size:13px}.ha-post-list-meta-wrap span i{margin-right:3px}.ha-post-tab .ha-post-tab-filter{padding:0;border-bottom:1px solid #ddd;list-style:none}.ha-post-tab .ha-post-tab-filter li{display:inline-block;margin:0 5px 0 0;padding:15px 25px;background:#fff;color:#333;text-decoration:none;-webkit-transition:all .3s;transition:all .3s}.ha-post-tab .ha-post-tab-filter li.active,.ha-post-tab .ha-post-tab-filter li:hover,.ha-post-tab.ha-post-tab-left .ha-post-tab-filter li.active,.ha-post-tab.ha-post-tab-left .ha-post-tab-filter li:hover{background:#6d39ef;color:#fff}.ha-post-tab .ha-post-tab-item-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;visibility:hidden;overflow:hidden;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;height:0;opacity:0}.ha-post-tab span.ha-post-tab-loading{-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;width:100%;height:100%;text-align:center;font-size:60px;opacity:.5}.ha-post-tab .ha-post-tab-item-wrapper.active{visibility:visible;height:auto;opacity:1}.ha-post-tab .ha-post-tab-item{margin-bottom:30px;padding-right:15px;padding-left:15px}.ha-post-tab .ha-post-tab-item-inner{box-sizing:border-box;padding:20px;height:100%;border-radius:5px;background:#fff;box-shadow:0 1px 20px rgba(0,0,0,.09)}.ha-post-tab .ha-post-tab-item-inner .ha-post-tab-thumb{position:relative;display:block;overflow:hidden;margin-bottom:15px;padding-right:0;padding-left:0}.ha-post-tab .ha-post-tab-item-inner .ha-post-tab-thumb img{max-width:100%;height:auto}.ha-post-tab .ha-post-tab-item-inner .ha-post-tab-title{margin-top:0;margin-bottom:10px;font-size:16px}.ha-post-tab .ha-post-tab-item-inner .ha-post-tab-title a,.ha-post-tab .ha-post-tab-meta span a{color:#333;text-decoration:none;-webkit-transition:all .4s;transition:all .4s}.ha-post-tab .ha-post-tab-meta span a:hover,.ha-post-tab .ha-post-tab-title a:hover{color:#6d39ef}.ha-post-tab .ha-post-tab-meta{font-size:14px}.ha-post-tab .ha-post-tab-meta span{display:inline-block;margin-top:10px;margin-right:15px;color:#9b9b9b;-webkit-transition:all .4s;transition:all .4s}.ha-post-tab .ha-post-tab-meta span i{padding-right:5px}.ha-post-tab .ha-post-tab-meta span a{color:#9b9b9b}.ha-post-tab .ha-post-tab-excerpt p{margin:0}.ha-post-tab.ha-post-tab-left,.ha-post-tab.ha-post-tab-right{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.ha-post-tab.ha-post-tab-left .ha-post-tab-filter{-webkit-box-flex:0;-webkit-flex:0 0 200px;-ms-flex:0 0 200px;flex:0 0 200px;min-width:200px;border-right:1px solid #f1f1f1;border-bottom:none}.ha-post-tab.ha-post-tab-left .ha-post-tab-filter li,.ha-post-tab.ha-post-tab-right .ha-post-tab-filter li{text-align:left;display:block;margin:0;text-decoration:none;-webkit-transition:all .3s;transition:all .3s}.ha-post-tab.ha-post-tab-right .ha-post-tab-filter li{text-align:right}.ha-post-tab.ha-post-tab-left .ha-post-tab-content{-webkit-box-flex:0;-webkit-flex:0 0 calc(100% - 200px);-ms-flex:0 0 calc(100% - 200px);flex:0 0 calc(100% - 200px);min-width:calc(100% - 200px);min-height:100%}.ha-post-tab.ha-post-tab-right{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.ha-post-tab.ha-post-tab-right .ha-post-tab-filter{-webkit-box-flex:0;-webkit-flex:0 0 200px;-ms-flex:0 0 200px;flex:0 0 200px;min-width:200px;border-bottom:none;border-left:1px solid #f1f1f1}.ha-post-tab.ha-post-tab-right .ha-post-tab-content{-webkit-box-flex:0;-webkit-flex:0 0 calc(100% - 200px);-ms-flex:0 0 calc(100% - 200px);flex:0 0 calc(100% - 200px);min-width:calc(100% - 200px);min-height:100%}@media (max-width:767px){.ha-post-tab.ha-post-tab-right{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.ha-post-tab.ha-post-tab-left .ha-post-tab-filter,.ha-post-tab.ha-post-tab-right .ha-post-tab-filter{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;min-width:100%;border-right:0;border-bottom:1px solid #f1f1f1;border-left:0}.ha-post-tab.ha-post-tab-left .ha-post-tab-content,.ha-post-tab.ha-post-tab-right .ha-post-tab-content{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;min-width:100%;min-height:100%}.ha-post-tab.ha-post-tab-left .ha-post-tab-filter li,.ha-post-tab.ha-post-tab-right .ha-post-tab-filter li{display:inline-block}}
assets/css/widgets/post-list.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .ha-post-list{margin:0;padding:0;list-style:none}.ha-post-list .ha-post-list-item,.ha-post-list.ha-post-list-inline{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.ha-post-list.ha-post-list-inline{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.ha-post-list .ha-post-list-item{margin:0 0 10px;padding:0}.ha-post-list.ha-post-list-inline .ha-post-list-item{margin-right:21px}.ha-post-list .ha-post-list-item:last-child,.ha-post-list.ha-post-list-inline .ha-post-list-item:last-child{margin-right:0;margin-bottom:0}.ha-post-list .ha-post-list-item a,.ha-post-list-meta-wrap{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.ha-post-list .ha-post-list-item a{width:100%}.ha-post-list-title{display:block;margin-top:0;margin-bottom:0;color:#242424;font-size:1rem;-webkit-transition:all .4s;transition:all .4s}.ha-post-list .ha-post-list-item a:hover .ha-post-list-title{color:#e04d8b}.ha-post-list-item a img{margin-right:15px}span.ha-post-list-icon{margin-right:8px;color:#242424;font-size:14px}.ha-post-list-meta-wrap{margin-top:3px}.ha-post-list-meta-wrap span{margin-right:10px;color:#8c8c8c;font-size:13px}.ha-post-list-meta-wrap span:last-child{margin-right:0}.ha-post-list-meta-wrap span i{margin-right:3px}
assets/css/widgets/post-tab.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .ha-post-tab .ha-post-tab-filter{padding:0;border-bottom:1px solid #ddd;list-style:none}.ha-post-tab .ha-post-tab-filter li{display:inline-block;margin:0 5px 0 0;padding:15px 25px;background:#fff;color:#333;text-decoration:none;-webkit-transition:all .3s;transition:all .3s}.ha-post-tab .ha-post-tab-filter li.active,.ha-post-tab .ha-post-tab-filter li:hover,.ha-post-tab.ha-post-tab-left .ha-post-tab-filter li.active,.ha-post-tab.ha-post-tab-left .ha-post-tab-filter li:hover{background:#6d39ef;color:#fff}.ha-post-tab .ha-post-tab-item-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;visibility:hidden;overflow:hidden;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;height:0;opacity:0}.ha-post-tab span.ha-post-tab-loading{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;width:100%;height:100%;text-align:center;font-size:60px;opacity:.5}.ha-post-tab .ha-post-tab-item-wrapper.active{visibility:visible;height:auto;opacity:1}.ha-post-tab .ha-post-tab-item{margin-bottom:30px;padding-right:15px;padding-left:15px}.ha-post-tab .ha-post-tab-item-inner{box-sizing:border-box;padding:20px;height:100%;border-radius:5px;background:#fff;box-shadow:0 1px 20px rgba(0,0,0,.09)}.ha-post-tab .ha-post-tab-item-inner .ha-post-tab-thumb{position:relative;display:block;overflow:hidden;margin-bottom:15px;padding-right:0;padding-left:0}.ha-post-tab .ha-post-tab-item-inner .ha-post-tab-thumb img{max-width:100%;height:auto}.ha-post-tab .ha-post-tab-item-inner .ha-post-tab-title{margin-top:0;margin-bottom:10px;font-size:16px}.ha-post-tab .ha-post-tab-item-inner .ha-post-tab-title a,.ha-post-tab .ha-post-tab-meta span a{color:#333;text-decoration:none;-webkit-transition:all .4s;transition:all .4s}.ha-post-tab .ha-post-tab-meta span a:hover,.ha-post-tab .ha-post-tab-title a:hover{color:#6d39ef}.ha-post-tab .ha-post-tab-meta{font-size:14px}.ha-post-tab .ha-post-tab-meta span{display:inline-block;margin-top:10px;margin-right:15px;color:#9b9b9b;-webkit-transition:all .4s;transition:all .4s}.ha-post-tab .ha-post-tab-meta span i{padding-right:5px}.ha-post-tab .ha-post-tab-meta span a{color:#9b9b9b}.ha-post-tab .ha-post-tab-excerpt p{margin:0}.ha-post-tab.ha-post-tab-left,.ha-post-tab.ha-post-tab-right{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.ha-post-tab.ha-post-tab-left .ha-post-tab-filter{-webkit-box-flex:0;-webkit-flex:0 0 200px;-ms-flex:0 0 200px;flex:0 0 200px;min-width:200px;border-right:1px solid #f1f1f1;border-bottom:none}.ha-post-tab.ha-post-tab-left .ha-post-tab-filter li,.ha-post-tab.ha-post-tab-right .ha-post-tab-filter li{text-align:left;display:block;margin:0;text-decoration:none;-webkit-transition:all .3s;transition:all .3s}.ha-post-tab.ha-post-tab-right .ha-post-tab-filter li{text-align:right}.ha-post-tab.ha-post-tab-left .ha-post-tab-content{-webkit-box-flex:0;-webkit-flex:0 0 calc(100% - 200px);-ms-flex:0 0 calc(100% - 200px);flex:0 0 calc(100% - 200px);min-width:calc(100% - 200px);min-height:100%}.ha-post-tab.ha-post-tab-right{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.ha-post-tab.ha-post-tab-right .ha-post-tab-filter{-webkit-box-flex:0;-webkit-flex:0 0 200px;-ms-flex:0 0 200px;flex:0 0 200px;min-width:200px;border-bottom:none;border-left:1px solid #f1f1f1}.ha-post-tab.ha-post-tab-right .ha-post-tab-content{-webkit-box-flex:0;-webkit-flex:0 0 calc(100% - 200px);-ms-flex:0 0 calc(100% - 200px);flex:0 0 calc(100% - 200px);min-width:calc(100% - 200px);min-height:100%}@media (max-width:767px){.ha-post-tab.ha-post-tab-right{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.ha-post-tab.ha-post-tab-left .ha-post-tab-filter,.ha-post-tab.ha-post-tab-right .ha-post-tab-filter{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;min-width:100%;border-right:0;border-bottom:1px solid #f1f1f1;border-left:0}.ha-post-tab.ha-post-tab-left .ha-post-tab-content,.ha-post-tab.ha-post-tab-right .ha-post-tab-content{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;min-width:100%;min-height:100%}.ha-post-tab.ha-post-tab-left .ha-post-tab-filter li,.ha-post-tab.ha-post-tab-right .ha-post-tab-filter li{display:inline-block}}
assets/js/happy-addons.js CHANGED
@@ -498,6 +498,73 @@
498
  });
499
  };
500
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
501
  $('[data-ha-element-link]').each(function() {
502
  var link = $(this).data('ha-element-link');
503
  $(this).on('click.haElementOnClick', function() {
@@ -528,6 +595,7 @@
528
  'ha-carousel.default': Slick,
529
  'ha-image-grid.default': Isotope,
530
  'ha-news-ticker.default': NewsTicker,
 
531
  'widget': ExtensionHandler
532
  };
533
 
498
  });
499
  };
500
 
501
+ //PostTab
502
+ var PostTab = EM.frontend.handlers.Base.extend({
503
+
504
+ onInit: function () {
505
+ EM.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
506
+ this.wrapper = this.$element.find('.ha-post-tab');
507
+ this.run();
508
+ },
509
+ run: function () {
510
+ var filter_wrap = this.wrapper.find('.ha-post-tab-filter'),
511
+ filter = filter_wrap.find('li'),
512
+ event = this.wrapper.data('event'),
513
+ args = this.wrapper.data('query-args');
514
+
515
+ filter.on(event, debounce(function (e) {
516
+ e.preventDefault();
517
+
518
+ var $self = $(this),
519
+ term_id = $self.data("term"),
520
+ $wrapper = $self.closest(".ha-post-tab"),
521
+ content = $wrapper.find('.ha-post-tab-content'),
522
+ loading = content.find('.ha-post-tab-loading'),
523
+ tab_item = content.find('.ha-post-tab-item-wrapper'),
524
+ $content_exist = false;
525
+
526
+ if (0 === loading.length) {
527
+ filter.removeClass('active');
528
+ tab_item.removeClass('active');
529
+ $self.addClass('active');
530
+
531
+ tab_item.each(function () {
532
+ var $self = $(this),
533
+ $content_id = $self.data("term");
534
+ if (term_id === $content_id) {
535
+ $self.addClass('active');
536
+ $content_exist = true;
537
+ }
538
+ });
539
+
540
+ if (false === $content_exist) {
541
+ $.ajax({
542
+ url: HappyLocalize.ajax_url,
543
+ type: 'POST',
544
+ data: {
545
+ action: "ha_post_tab_action",
546
+ security: HappyLocalize.nonce,
547
+ post_tab_query: args,
548
+ term_id: term_id,
549
+ },
550
+ beforeSend: function () {
551
+ content.append('<span class="ha-post-tab-loading"><i class="eicon-spinner eicon-animation-spin"></i></span>');
552
+ },
553
+ success: function (response) {
554
+ content.find('.ha-post-tab-loading').remove();
555
+ content.append(response);
556
+ },
557
+ error: function (error) {
558
+ }
559
+ });
560
+
561
+ }
562
+ }
563
+
564
+ }, 200));
565
+ }
566
+ });
567
+
568
  $('[data-ha-element-link]').each(function() {
569
  var link = $(this).data('ha-element-link');
570
  $(this).on('click.haElementOnClick', function() {
595
  'ha-carousel.default': Slick,
596
  'ha-image-grid.default': Isotope,
597
  'ha-news-ticker.default': NewsTicker,
598
+ 'ha-post-tab.default': PostTab,
599
  'widget': ExtensionHandler
600
  };
601
 
assets/js/happy-addons.min.js CHANGED
@@ -1 +1 @@
1
- "use strict";!function(t,e){function i(t,e,i){var n;return function(){var a=this,s=arguments,o=function(){n=null,i||t.apply(a,s)},r=i&&!n;clearTimeout(n),n=setTimeout(o,e),r&&t.apply(a,s)}}function n(e,i){var n=e.find(".hajs-gallery-filter");n.length&&n.on("click","button",function(e){e.stopPropagation();var n=t(this);n.parent().addClass("ha-filter-active").siblings().removeClass("ha-filter-active"),i(n.data("filter"))})}function a(e,i,n,a){if(t.fn.magnificPopup){if(!n)return void t.magnificPopup.close();e.on("click",i,function(t){t.stopPropagation()}),e.find(i).magnificPopup({key:a,type:"image",image:{titleSrc:function(t){return t.el.attr("title")?t.el.attr("title"):t.el.find("img").attr("alt")}},gallery:{enabled:!0,preload:[1,2]},zoom:{enabled:!0,duration:300,easing:"ease-in-out",opener:function(t){return t.is("img")?t:t.find("img")}}})}}var s=t(e);t.fn.getHappySettings=function(){return this.data("happy-settings")};var o=function(t){var e=t.find(".hajs-image-comparison"),i=e.getHappySettings();i[{on_hover:"move_slider_on_hover",on_swipe:"move_with_handle_only",on_click:"click_to_move"}[i.move_handle||"on_swipe"]]=!0,delete i.move_handle,e.imagesLoaded().done(function(){e.twentytwenty(i);var t=setTimeout(function(){s.trigger("resize.twentytwenty"),clearTimeout(t)},400)})},r=function(e){var i=e.find(".hajs-justified-gallery"),s=i.getHappySettings(),o=s.enable_popup;i.justifiedGallery(t.extend({},{rowHeight:150,lastRow:"justify",margins:10},s)),a(e,".ha-js-popup",o,"justifiedgallery"),n(e,function(t){i.justifiedGallery({lastRow:"*"===t?s.lastRow:"nojustify",filter:t}),a(e,"*"!==t?t:".ha-js-popup",o,"justifiedgallery")})};s.on("elementor/frontend/init",function(){var e=elementorFrontend,s=elementorModules,l=s.frontend.handlers.Base.extend({onInit:function(){s.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.widgetContainer=this.$element.find(".elementor-widget-container")[0],this.initFloatingEffects(),this.initBackgroundOverlay()},initBackgroundOverlay:function(){this.isEdit&&this.$element.addClass("ha-has-background-overlay")},getDefaultSettings:function(){return{targets:this.widgetContainer,loop:!0,direction:"alternate",easing:"easeInOutSine"}},onElementChange:function(t){-1!==t.indexOf("ha_floating")&&this.runOnElementChange()},runOnElementChange:i(function(){this.animation&&this.animation.restart(),this.initFloatingEffects()},200),getConfig:function(t){return this.getElementSettings("ha_floating_fx_"+t)},initFloatingEffects:function(){var t=this.getDefaultSettings();this.getConfig("translate_toggle")&&((this.getConfig("translate_x.size")||this.getConfig("translate_x.sizes.to"))&&(t.translateX={value:[this.getConfig("translate_x.sizes.from")||0,this.getConfig("translate_x.size")||this.getConfig("translate_x.sizes.to")],duration:this.getConfig("translate_duration.size"),delay:this.getConfig("translate_delay.size")||0}),(this.getConfig("translate_y.size")||this.getConfig("translate_y.sizes.to"))&&(t.translateY={value:[this.getConfig("translate_y.sizes.from")||0,this.getConfig("translate_y.size")||this.getConfig("translate_y.sizes.to")],duration:this.getConfig("translate_duration.size"),delay:this.getConfig("translate_delay.size")||0})),this.getConfig("rotate_toggle")&&((this.getConfig("rotate_x.size")||this.getConfig("rotate_x.sizes.to"))&&(t.rotateX={value:[this.getConfig("rotate_x.sizes.from")||0,this.getConfig("rotate_x.size")||this.getConfig("rotate_x.sizes.to")],duration:this.getConfig("rotate_duration.size"),delay:this.getConfig("rotate_delay.size")||0}),(this.getConfig("rotate_y.size")||this.getConfig("rotate_y.sizes.to"))&&(t.rotateY={value:[this.getConfig("rotate_y.sizes.from")||0,this.getConfig("rotate_y.size")||this.getConfig("rotate_y.sizes.to")],duration:this.getConfig("rotate_duration.size"),delay:this.getConfig("rotate_delay.size")||0}),(this.getConfig("rotate_z.size")||this.getConfig("rotate_z.sizes.to"))&&(t.rotateZ={value:[this.getConfig("rotate_z.sizes.from")||0,this.getConfig("rotate_z.size")||this.getConfig("rotate_z.sizes.to")],duration:this.getConfig("rotate_duration.size"),delay:this.getConfig("rotate_delay.size")||0})),this.getConfig("scale_toggle")&&((this.getConfig("scale_x.size")||this.getConfig("scale_x.sizes.to"))&&(t.scaleX={value:[this.getConfig("scale_x.sizes.from")||0,this.getConfig("scale_x.size")||this.getConfig("scale_x.sizes.to")],duration:this.getConfig("scale_duration.size"),delay:this.getConfig("scale_delay.size")||0}),(this.getConfig("scale_y.size")||this.getConfig("scale_y.sizes.to"))&&(t.scaleY={value:[this.getConfig("scale_y.sizes.from")||0,this.getConfig("scale_y.size")||this.getConfig("scale_y.sizes.to")],duration:this.getConfig("scale_duration.size"),delay:this.getConfig("scale_delay.size")||0})),(this.getConfig("translate_toggle")||this.getConfig("rotate_toggle")||this.getConfig("scale_toggle"))&&(this.widgetContainer.style.setProperty("will-change","transform"),this.animation=anime(t))}}),g=s.frontend.handlers.Base.extend({onInit:function(){s.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.$container=this.$element.find(".hajs-slick"),this.run()},isCarousel:function(){return this.$element.hasClass("ha-carousel")},getDefaultSettings:function(){return{arrows:!1,dots:!1,checkVisible:!1,infinite:!0,slidesToShow:this.isCarousel()?3:1,rows:0,prevArrow:'<button type="button" class="slick-prev"><i class="fa fa-chevron-left"></i></button>',nextArrow:'<button type="button" class="slick-next"><i class="fa fa-chevron-right"></i></button>'}},onElementChange:function(){this.$container.slick("unslick"),this.run()},getReadySettings:function(){var i={infinite:!!this.getElementSettings("loop"),autoplay:!!this.getElementSettings("autoplay"),autoplaySpeed:this.getElementSettings("autoplay_speed"),speed:this.getElementSettings("animation_speed"),centerMode:!!this.getElementSettings("center"),vertical:!!this.getElementSettings("vertical"),slidesToScroll:1};switch(this.getElementSettings("navigation")){case"arrow":i.arrows=!0;break;case"dots":i.dots=!0;break;case"both":i.arrows=!0,i.dots=!0}return this.isCarousel()&&(i.slidesToShow=this.getElementSettings("slides_to_show")||3,i.responsive=[{breakpoint:e.config.breakpoints.lg,settings:{slidesToShow:this.getElementSettings("slides_to_show_tablet")||i.slidesToShow}},{breakpoint:e.config.breakpoints.md,settings:{slidesToShow:this.getElementSettings("slides_to_show_mobile")||this.getElementSettings("slides_to_show_tablet")||i.slidesToShow}}]),t.extend({},this.getDefaultSettings(),i)},run:function(){this.$container.slick(this.getReadySettings())}}),h=function(t){e.waypoint(t,function(){var e=t.find(".ha-number-text");e.numerator(e.data("animation"))})},f=function(i){e.waypoint(i,function(){i.find(".ha-skill-level").each(function(){var e=t(this),i=e.find(".ha-skill-level-text"),n=e.data("level");e.animate({width:n+"%"},500),i.numerator({toValue:n+"%",duration:1300,onStep:function(){i.append("%")}})})})},d=s.frontend.handlers.Base.extend({onInit:function(){s.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.$container=this.$element.find(".hajs-isotope"),this.run(),this.runFilter()},getLayoutMode:function(){var t=this.getElementSettings("layout");return"even"===t?"masonry":t},getDefaultSettings:function(){return{itemSelector:".ha-image-grid-item",percentPosition:!0,layoutMode:this.getLayoutMode()}},runFilter:function(){var t=this;n(this.$element,function(e){t.$container.isotope({filter:e});var i="*"!==e?e:".ha-js-popup";a(t.$element,i,t.getElementSettings("enable_popup"),"imagegrid")})},onElementChange:function(t){-1!==["layout","image_height","columns","image_margin","enable_popup"].indexOf(t)&&this.run()},run:function(){var t=this;this.$container.isotope(t.getDefaultSettings()),this.$container.imagesLoaded().progress(function(){t.$container.isotope("layout")}),a(this.$element,".ha-js-popup",this.getElementSettings("enable_popup"),"imagegrid")}}),u=s.frontend.handlers.Base.extend({onInit:function(){s.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.wrapper=this.$element.find(".ha-news-ticker-wrapper"),this.run()},onElementChange:function(t){"item_space"!==t&&"title_typography_font_size"!==t||this.run()},run:function(){var e=this.wrapper.innerHeight(),i=this.wrapper.innerWidth(),n=this.wrapper.find(".ha-news-ticker-container"),a=n.find(".ha-news-ticker-item"),s=this.wrapper.data("scroll-direction"),o="scroll"+s+e+i,r=this.wrapper.data("duration"),l="normal",g=10,h={transform:"translateX(0"+i+"px)"},f={transform:"translateX(-101%)"};"right"===s&&(l="reverse"),a.each(function(){g+=t(this).outerWidth(!0)}),n.css({width:g,display:"flex"}),t.keyframe.define([{name:o,"0%":h,"100%":f}]),n.playKeyframe({name:o,duration:r+"ms",timingFunction:"linear",delay:"0s",iterationCount:"infinite",direction:l,fillMode:"none",complete:function(){}})}}),c=function(t){e.waypoint(t,function(){var e=t.find(".ha-fun-factor-content-number");e.numerator(e.data("animation"))})},p=function(i){e.waypoint(i,function(){var e=t(this),i=e.find(".ha-bar-chart-container"),n=e.find("#ha-bar-chart"),a=i.data("settings");i.length&&new Chart(n,a)})},m=function(e){var i=e.find(".ha-twitter-load-more"),n=e.find(".ha-tweet-items");i.on("click",function(i){i.preventDefault();var a=t(this),s=a.data("settings"),o=a.data("total"),r=e.find(".ha-tweet-item").length;t.ajax({url:HappyLocalize.ajax_url,type:"POST",data:{action:"ha_twitter_feed_action",security:HappyLocalize.nonce,query_settings:s,loaded_item:r},success:function(e){o>r?t(e).appendTo(n):(a.text("All Loaded").addClass("loaded"),setTimeout(function(){a.css({display:"none"})},800))},error:function(t){}})})};t("[data-ha-element-link]").each(function(){var e=t(this).data("ha-element-link");t(this).on("click.haElementOnClick",function(){e.is_external?window.open(e.url):location.href=e.url})});var _={"ha-image-compare.default":o,"ha-justified-gallery.default":r,"ha-number.default":h,"ha-skills.default":f,"ha-fun-factor.default":c,"ha-bar-chart.default":p,"ha-twitter-feed.default":m};t.each(_,function(t,i){e.hooks.addAction("frontend/element_ready/"+t,i)});var y={"ha-slider.default":g,"ha-carousel.default":g,"ha-image-grid.default":d,"ha-news-ticker.default":u,widget:l};t.each(y,function(t,i){e.hooks.addAction("frontend/element_ready/"+t,function(t){e.elementsHandler.addHandler(i,{$element:t})})})})}(jQuery,window);
1
+ "use strict";!function(t,e){function i(t,e,i){var n;return function(){var a=this,s=arguments,o=function(){n=null,i||t.apply(a,s)},r=i&&!n;clearTimeout(n),n=setTimeout(o,e),r&&t.apply(a,s)}}function n(e,i){var n=e.find(".hajs-gallery-filter");n.length&&n.on("click","button",function(e){e.stopPropagation();var n=t(this);n.parent().addClass("ha-filter-active").siblings().removeClass("ha-filter-active"),i(n.data("filter"))})}function a(e,i,n,a){if(t.fn.magnificPopup){if(!n)return void t.magnificPopup.close();e.on("click",i,function(t){t.stopPropagation()}),e.find(i).magnificPopup({key:a,type:"image",image:{titleSrc:function(t){return t.el.attr("title")?t.el.attr("title"):t.el.find("img").attr("alt")}},gallery:{enabled:!0,preload:[1,2]},zoom:{enabled:!0,duration:300,easing:"ease-in-out",opener:function(t){return t.is("img")?t:t.find("img")}}})}}var s=t(e);t.fn.getHappySettings=function(){return this.data("happy-settings")};var o=function(t){var e=t.find(".hajs-image-comparison"),i=e.getHappySettings();i[{on_hover:"move_slider_on_hover",on_swipe:"move_with_handle_only",on_click:"click_to_move"}[i.move_handle||"on_swipe"]]=!0,delete i.move_handle,e.imagesLoaded().done(function(){e.twentytwenty(i);var t=setTimeout(function(){s.trigger("resize.twentytwenty"),clearTimeout(t)},400)})},r=function(e){var i=e.find(".hajs-justified-gallery"),s=i.getHappySettings(),o=s.enable_popup;i.justifiedGallery(t.extend({},{rowHeight:150,lastRow:"justify",margins:10},s)),a(e,".ha-js-popup",o,"justifiedgallery"),n(e,function(t){i.justifiedGallery({lastRow:"*"===t?s.lastRow:"nojustify",filter:t}),a(e,"*"!==t?t:".ha-js-popup",o,"justifiedgallery")})};s.on("elementor/frontend/init",function(){var e=elementorFrontend,s=elementorModules,l=s.frontend.handlers.Base.extend({onInit:function(){s.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.widgetContainer=this.$element.find(".elementor-widget-container")[0],this.initFloatingEffects(),this.initBackgroundOverlay()},initBackgroundOverlay:function(){this.isEdit&&this.$element.addClass("ha-has-background-overlay")},getDefaultSettings:function(){return{targets:this.widgetContainer,loop:!0,direction:"alternate",easing:"easeInOutSine"}},onElementChange:function(t){-1!==t.indexOf("ha_floating")&&this.runOnElementChange()},runOnElementChange:i(function(){this.animation&&this.animation.restart(),this.initFloatingEffects()},200),getConfig:function(t){return this.getElementSettings("ha_floating_fx_"+t)},initFloatingEffects:function(){var t=this.getDefaultSettings();this.getConfig("translate_toggle")&&((this.getConfig("translate_x.size")||this.getConfig("translate_x.sizes.to"))&&(t.translateX={value:[this.getConfig("translate_x.sizes.from")||0,this.getConfig("translate_x.size")||this.getConfig("translate_x.sizes.to")],duration:this.getConfig("translate_duration.size"),delay:this.getConfig("translate_delay.size")||0}),(this.getConfig("translate_y.size")||this.getConfig("translate_y.sizes.to"))&&(t.translateY={value:[this.getConfig("translate_y.sizes.from")||0,this.getConfig("translate_y.size")||this.getConfig("translate_y.sizes.to")],duration:this.getConfig("translate_duration.size"),delay:this.getConfig("translate_delay.size")||0})),this.getConfig("rotate_toggle")&&((this.getConfig("rotate_x.size")||this.getConfig("rotate_x.sizes.to"))&&(t.rotateX={value:[this.getConfig("rotate_x.sizes.from")||0,this.getConfig("rotate_x.size")||this.getConfig("rotate_x.sizes.to")],duration:this.getConfig("rotate_duration.size"),delay:this.getConfig("rotate_delay.size")||0}),(this.getConfig("rotate_y.size")||this.getConfig("rotate_y.sizes.to"))&&(t.rotateY={value:[this.getConfig("rotate_y.sizes.from")||0,this.getConfig("rotate_y.size")||this.getConfig("rotate_y.sizes.to")],duration:this.getConfig("rotate_duration.size"),delay:this.getConfig("rotate_delay.size")||0}),(this.getConfig("rotate_z.size")||this.getConfig("rotate_z.sizes.to"))&&(t.rotateZ={value:[this.getConfig("rotate_z.sizes.from")||0,this.getConfig("rotate_z.size")||this.getConfig("rotate_z.sizes.to")],duration:this.getConfig("rotate_duration.size"),delay:this.getConfig("rotate_delay.size")||0})),this.getConfig("scale_toggle")&&((this.getConfig("scale_x.size")||this.getConfig("scale_x.sizes.to"))&&(t.scaleX={value:[this.getConfig("scale_x.sizes.from")||0,this.getConfig("scale_x.size")||this.getConfig("scale_x.sizes.to")],duration:this.getConfig("scale_duration.size"),delay:this.getConfig("scale_delay.size")||0}),(this.getConfig("scale_y.size")||this.getConfig("scale_y.sizes.to"))&&(t.scaleY={value:[this.getConfig("scale_y.sizes.from")||0,this.getConfig("scale_y.size")||this.getConfig("scale_y.sizes.to")],duration:this.getConfig("scale_duration.size"),delay:this.getConfig("scale_delay.size")||0})),(this.getConfig("translate_toggle")||this.getConfig("rotate_toggle")||this.getConfig("scale_toggle"))&&(this.widgetContainer.style.setProperty("will-change","transform"),this.animation=anime(t))}}),g=s.frontend.handlers.Base.extend({onInit:function(){s.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.$container=this.$element.find(".hajs-slick"),this.run()},isCarousel:function(){return this.$element.hasClass("ha-carousel")},getDefaultSettings:function(){return{arrows:!1,dots:!1,checkVisible:!1,infinite:!0,slidesToShow:this.isCarousel()?3:1,rows:0,prevArrow:'<button type="button" class="slick-prev"><i class="fa fa-chevron-left"></i></button>',nextArrow:'<button type="button" class="slick-next"><i class="fa fa-chevron-right"></i></button>'}},onElementChange:function(){this.$container.slick("unslick"),this.run()},getReadySettings:function(){var i={infinite:!!this.getElementSettings("loop"),autoplay:!!this.getElementSettings("autoplay"),autoplaySpeed:this.getElementSettings("autoplay_speed"),speed:this.getElementSettings("animation_speed"),centerMode:!!this.getElementSettings("center"),vertical:!!this.getElementSettings("vertical"),slidesToScroll:1};switch(this.getElementSettings("navigation")){case"arrow":i.arrows=!0;break;case"dots":i.dots=!0;break;case"both":i.arrows=!0,i.dots=!0}return this.isCarousel()&&(i.slidesToShow=this.getElementSettings("slides_to_show")||3,i.responsive=[{breakpoint:e.config.breakpoints.lg,settings:{slidesToShow:this.getElementSettings("slides_to_show_tablet")||i.slidesToShow}},{breakpoint:e.config.breakpoints.md,settings:{slidesToShow:this.getElementSettings("slides_to_show_mobile")||this.getElementSettings("slides_to_show_tablet")||i.slidesToShow}}]),t.extend({},this.getDefaultSettings(),i)},run:function(){this.$container.slick(this.getReadySettings())}}),h=function(t){e.waypoint(t,function(){var e=t.find(".ha-number-text");e.numerator(e.data("animation"))})},f=function(i){e.waypoint(i,function(){i.find(".ha-skill-level").each(function(){var e=t(this),i=e.find(".ha-skill-level-text"),n=e.data("level");e.animate({width:n+"%"},500),i.numerator({toValue:n+"%",duration:1300,onStep:function(){i.append("%")}})})})},d=s.frontend.handlers.Base.extend({onInit:function(){s.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.$container=this.$element.find(".hajs-isotope"),this.run(),this.runFilter()},getLayoutMode:function(){var t=this.getElementSettings("layout");return"even"===t?"masonry":t},getDefaultSettings:function(){return{itemSelector:".ha-image-grid-item",percentPosition:!0,layoutMode:this.getLayoutMode()}},runFilter:function(){var t=this;n(this.$element,function(e){t.$container.isotope({filter:e});var i="*"!==e?e:".ha-js-popup";a(t.$element,i,t.getElementSettings("enable_popup"),"imagegrid")})},onElementChange:function(t){-1!==["layout","image_height","columns","image_margin","enable_popup"].indexOf(t)&&this.run()},run:function(){var t=this;this.$container.isotope(t.getDefaultSettings()),this.$container.imagesLoaded().progress(function(){t.$container.isotope("layout")}),a(this.$element,".ha-js-popup",this.getElementSettings("enable_popup"),"imagegrid")}}),u=s.frontend.handlers.Base.extend({onInit:function(){s.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.wrapper=this.$element.find(".ha-news-ticker-wrapper"),this.run()},onElementChange:function(t){"item_space"!==t&&"title_typography_font_size"!==t||this.run()},run:function(){var e=this.wrapper.innerHeight(),i=this.wrapper.innerWidth(),n=this.wrapper.find(".ha-news-ticker-container"),a=n.find(".ha-news-ticker-item"),s=this.wrapper.data("scroll-direction"),o="scroll"+s+e+i,r=this.wrapper.data("duration"),l="normal",g=10,h={transform:"translateX(0"+i+"px)"},f={transform:"translateX(-101%)"};"right"===s&&(l="reverse"),a.each(function(){g+=t(this).outerWidth(!0)}),n.css({width:g,display:"flex"}),t.keyframe.define([{name:o,"0%":h,"100%":f}]),n.playKeyframe({name:o,duration:r+"ms",timingFunction:"linear",delay:"0s",iterationCount:"infinite",direction:l,fillMode:"none",complete:function(){}})}}),c=function(t){e.waypoint(t,function(){var e=t.find(".ha-fun-factor-content-number");e.numerator(e.data("animation"))})},p=function(i){e.waypoint(i,function(){var e=t(this),i=e.find(".ha-bar-chart-container"),n=e.find("#ha-bar-chart"),a=i.data("settings");i.length&&new Chart(n,a)})},m=function(e){var i=e.find(".ha-twitter-load-more"),n=e.find(".ha-tweet-items");i.on("click",function(i){i.preventDefault();var a=t(this),s=a.data("settings"),o=a.data("total"),r=e.find(".ha-tweet-item").length;t.ajax({url:HappyLocalize.ajax_url,type:"POST",data:{action:"ha_twitter_feed_action",security:HappyLocalize.nonce,query_settings:s,loaded_item:r},success:function(e){o>r?t(e).appendTo(n):(a.text("All Loaded").addClass("loaded"),setTimeout(function(){a.css({display:"none"})},800))},error:function(t){}})})},_=s.frontend.handlers.Base.extend({onInit:function(){s.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.wrapper=this.$element.find(".ha-post-tab"),this.run()},run:function(){var e=this.wrapper.find(".ha-post-tab-filter"),n=e.find("li"),a=this.wrapper.data("event"),s=this.wrapper.data("query-args");n.on(a,i(function(e){e.preventDefault();var i=t(this),a=i.data("term"),o=i.closest(".ha-post-tab"),r=o.find(".ha-post-tab-content"),l=r.find(".ha-post-tab-loading"),g=r.find(".ha-post-tab-item-wrapper"),h=!1;0===l.length&&(n.removeClass("active"),g.removeClass("active"),i.addClass("active"),g.each(function(){var e=t(this),i=e.data("term");a===i&&(e.addClass("active"),h=!0)}),!1===h&&t.ajax({url:HappyLocalize.ajax_url,type:"POST",data:{action:"ha_post_tab_action",security:HappyLocalize.nonce,post_tab_query:s,term_id:a},beforeSend:function(){r.append('<span class="ha-post-tab-loading"><i class="eicon-spinner eicon-animation-spin"></i></span>')},success:function(t){r.find(".ha-post-tab-loading").remove(),r.append(t)},error:function(t){}}))},200))}});t("[data-ha-element-link]").each(function(){var e=t(this).data("ha-element-link");t(this).on("click.haElementOnClick",function(){e.is_external?window.open(e.url):location.href=e.url})});var y={"ha-image-compare.default":o,"ha-justified-gallery.default":r,"ha-number.default":h,"ha-skills.default":f,"ha-fun-factor.default":c,"ha-bar-chart.default":p,"ha-twitter-feed.default":m};t.each(y,function(t,i){e.hooks.addAction("frontend/element_ready/"+t,i)});var C={"ha-slider.default":g,"ha-carousel.default":g,"ha-image-grid.default":d,"ha-news-ticker.default":u,"ha-post-tab.default":_,widget:l};t.each(C,function(t,i){e.hooks.addAction("frontend/element_ready/"+t,function(t){e.elementsHandler.addHandler(i,{$element:t})})})})}(jQuery,window);
base.php CHANGED
@@ -51,6 +51,7 @@ class Base {
51
  Cache_Manager::init();
52
  Icons_Manager::init();
53
  Extensions_Manager::init();
 
54
 
55
  $this->init_appsero_tracking();
56
 
@@ -103,6 +104,7 @@ class Base {
103
  include_once( HAPPY_ADDONS_DIR_PATH . 'classes/widgets-cache.php' );
104
  include_once( HAPPY_ADDONS_DIR_PATH . 'classes/assets-cache.php' );
105
  include_once( HAPPY_ADDONS_DIR_PATH . 'classes/extensions-manager.php' );
 
106
 
107
  if ( is_admin() ) {
108
  include_once( HAPPY_ADDONS_DIR_PATH . 'classes/updater.php' );
@@ -138,9 +140,12 @@ class Base {
138
  */
139
  public function register_controls( Controls_Manager $controls_Manager ) {
140
  include_once( HAPPY_ADDONS_DIR_PATH . 'controls/foreground.php' );
 
141
  $foreground = __NAMESPACE__ . '\Controls\Group_Control_Foreground';
 
142
 
143
  $controls_Manager->add_group_control( $foreground::get_type(), new $foreground() );
 
144
  }
145
 
146
  /**
51
  Cache_Manager::init();
52
  Icons_Manager::init();
53
  Extensions_Manager::init();
54
+ Select2_Handler::init();
55
 
56
  $this->init_appsero_tracking();
57
 
104
  include_once( HAPPY_ADDONS_DIR_PATH . 'classes/widgets-cache.php' );
105
  include_once( HAPPY_ADDONS_DIR_PATH . 'classes/assets-cache.php' );
106
  include_once( HAPPY_ADDONS_DIR_PATH . 'classes/extensions-manager.php' );
107
+ include_once( HAPPY_ADDONS_DIR_PATH . 'classes/select2-handler.php' );
108
 
109
  if ( is_admin() ) {
110
  include_once( HAPPY_ADDONS_DIR_PATH . 'classes/updater.php' );
140
  */
141
  public function register_controls( Controls_Manager $controls_Manager ) {
142
  include_once( HAPPY_ADDONS_DIR_PATH . 'controls/foreground.php' );
143
+ include_once( HAPPY_ADDONS_DIR_PATH . 'controls/select2.php' );
144
  $foreground = __NAMESPACE__ . '\Controls\Group_Control_Foreground';
145
+ $select2 = __NAMESPACE__ . '\Controls\Select2';
146
 
147
  $controls_Manager->add_group_control( $foreground::get_type(), new $foreground() );
148
+ ha_elementor()->controls_manager->register_control( $select2::TYPE, new $select2() );
149
  }
150
 
151
  /**
classes/assets-manager.php CHANGED
@@ -240,7 +240,7 @@ class Assets_Manager {
240
  //Localize scripts
241
  wp_localize_script('happy-elementor-addons', 'HappyLocalize', [
242
  'ajax_url' => admin_url('admin-ajax.php'),
243
- 'nonce' => wp_create_nonce('happy_addons_nonce'),
244
  ]);
245
  }
246
 
@@ -305,6 +305,7 @@ class Assets_Manager {
305
  ],
306
  'proWidgets' => [],
307
  'hasPro' => ha_has_pro(),
 
308
  ];
309
 
310
  if ( ! ha_has_pro() && ha_is_elementor_version( '>=', '2.9.0' ) ) {
240
  //Localize scripts
241
  wp_localize_script('happy-elementor-addons', 'HappyLocalize', [
242
  'ajax_url' => admin_url('admin-ajax.php'),
243
+ 'nonce' => wp_create_nonce('happy_addons_nonce'),
244
  ]);
245
  }
246
 
305
  ],
306
  'proWidgets' => [],
307
  'hasPro' => ha_has_pro(),
308
+ 'select2Secret' => wp_create_nonce( 'HappyAddons_Select2_Secret' ),
309
  ];
310
 
311
  if ( ! ha_has_pro() && ha_is_elementor_version( '>=', '2.9.0' ) ) {
classes/select2-handler.php ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Happy_Addons\Elementor;
4
+
5
+ defined( 'ABSPATH' ) || die();
6
+
7
+ /**
8
+ * Class Select2_Handler
9
+ * @package Happy_Addons\Elementor
10
+ */
11
+ class Select2_Handler {
12
+
13
+ public static function init () {
14
+ add_action( 'wp_ajax_ha_post_list_query', [ __CLASS__, 'ha_post_list_query' ] );
15
+ add_action( 'wp_ajax_ha_post_tab_select_query', [ __CLASS__, 'post_tab_query' ] );
16
+ }
17
+
18
+ /**
19
+ * Return Post list based on post type
20
+ */
21
+ public static function ha_post_list_query () {
22
+ $security = check_ajax_referer( 'HappyAddons_Select2_Secret', 'security' );
23
+ if ( ! $security ) return;
24
+ $post_type = isset( $_POST['post_type'] ) ? sanitize_text_field( $_POST['post_type'] ) : '';
25
+ if ( ! $post_type ) return;
26
+
27
+ $select_type = isset( $_POST['select_type'] ) ? $_POST['select_type'] : false;
28
+ $search_string = isset( $_POST['q'] ) ? sanitize_text_field( $_POST['q'] ) : '';
29
+ $ids = isset( $_POST['id'] ) ? $_POST['id'] : array();
30
+
31
+ $data = [];
32
+ $arg = [
33
+ 'post_status' => 'publish',
34
+ 'post_type' => $post_type,
35
+ 'posts_per_page' => -1,
36
+ ];
37
+ $arg['s'] = $search_string;
38
+ $arg['post__in'] = $ids;
39
+ $query = new \WP_Query( $arg );
40
+ if ( $select_type === 'choose' && $query->have_posts() ) {
41
+ while ( $query->have_posts() ) {
42
+ $query->the_post();
43
+ $data[] = [
44
+ 'id' => get_the_id(),
45
+ 'text' => get_the_title(),
46
+ ];
47
+ }
48
+ wp_reset_postdata();
49
+ }
50
+ if ( $select_type === 'selected' && $query->have_posts() ) {
51
+ while ( $query->have_posts() ) {
52
+ $query->the_post();
53
+ $data[get_the_id()] = get_the_title();
54
+ }
55
+ wp_reset_postdata();
56
+ }
57
+ // return the results in json.
58
+ wp_send_json( $data );
59
+
60
+ }
61
+
62
+ /**
63
+ * Return Post tab query value
64
+ */
65
+ public static function post_tab_query () {
66
+ $security = check_ajax_referer( 'HappyAddons_Select2_Secret', 'security' );
67
+ if ( ! $security ) return;
68
+ $tax_id = isset( $_POST['tax_id'] ) ? sanitize_text_field( $_POST['tax_id'] ) : '';
69
+ if ( ! $tax_id ) return;
70
+
71
+ $select_type = isset( $_POST['select_type'] ) ? $_POST['select_type'] : false;
72
+ $search = isset( $_POST['q'] ) ? sanitize_text_field( $_POST['q'] ) : '';
73
+ $ids = isset( $_POST['id'] ) ? $_POST['id'] : array();
74
+
75
+ $arg = [
76
+ 'taxonomy' => $tax_id,
77
+ 'hide_empty' => true,
78
+ 'include' => $ids,
79
+ ];
80
+ if($search)
81
+ $arg['search'] = $search;
82
+ $terms = get_terms( $arg );
83
+
84
+ $data = [];
85
+ if ( $select_type === 'choose' ) {
86
+ foreach ($terms as $value){
87
+ $data[] = [
88
+ 'id' => $value->term_id,
89
+ 'text' => $value->name . ' ('. $value->count.')',
90
+ ];
91
+ }
92
+ }
93
+ if ( $select_type === 'selected' ) {
94
+ foreach ($terms as $value){
95
+ $data[ $value->term_id ] = $value->name;
96
+ }
97
+ }
98
+ // return the results in json.
99
+ wp_send_json( $data );
100
+
101
+ }
102
+
103
+ }
classes/widgets-manager.php CHANGED
@@ -509,6 +509,26 @@ class Widgets_Manager {
509
  'js' => [],
510
  ],
511
  ],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
512
  ];
513
  }
514
 
509
  'js' => [],
510
  ],
511
  ],
512
+ 'post-list' => [
513
+ 'title' => __( 'Post List', 'happy-elementor-addons' ),
514
+ 'icon' => 'hm hm-post-list',
515
+ 'css' => ['post-list'],
516
+ 'js' => [],
517
+ 'vendor' => [
518
+ 'css' => [],
519
+ 'js' => [],
520
+ ],
521
+ ],
522
+ 'post-tab' => [
523
+ 'title' => __( 'Post Tab', 'happy-elementor-addons' ),
524
+ 'icon' => 'hm hm-post-tab',
525
+ 'css' => ['post-tab'],
526
+ 'js' => [],
527
+ 'vendor' => [
528
+ 'css' => [],
529
+ 'js' => [],
530
+ ],
531
+ ],
532
  ];
533
  }
534
 
controls/select2.php ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Select2 Update control class
4
+ *
5
+ * @package Happy_Addons
6
+ */
7
+ namespace Happy_Addons\Elementor\Controls;
8
+
9
+ use Elementor\Base_Data_Control;
10
+
11
+ defined( 'ABSPATH' ) || die();
12
+
13
+ class Select2 extends Base_Data_Control {
14
+
15
+ /**
16
+ * Control identifier
17
+ */
18
+ const TYPE = 'ha-select2';
19
+
20
+ /**
21
+ * Set control type.
22
+ */
23
+ public function get_type() {
24
+ return self::TYPE;
25
+ }
26
+
27
+ /**
28
+ * Enqueue control scripts and styles.
29
+ */
30
+ public function enqueue() {
31
+ wp_enqueue_script(
32
+ 'ha-select2',
33
+ HAPPY_ADDONS_ASSETS.'/admin/js/select2.js',
34
+ ['jquery'],
35
+ HAPPY_ADDONS_VERSION
36
+ );
37
+ }
38
+
39
+ /**
40
+ * Get select2 control default settings.
41
+ *
42
+ * Retrieve the default settings of the select2 control. Used to return the
43
+ * default settings while initializing the select2 control.
44
+ *
45
+ * @access protected
46
+ *
47
+ * @return array Control default settings.
48
+ */
49
+ protected function get_default_settings() {
50
+ return [
51
+ 'options' => [],
52
+ 'multiple' => false,
53
+ 'select2options' => [],
54
+ ];
55
+ }
56
+
57
+ /**
58
+ * Render select2 control output in the editor.
59
+ *
60
+ * Used to generate the control HTML in the editor using Underscore JS
61
+ * template. The variables for the class are available using `data` JS
62
+ * object.
63
+ *
64
+ * @access public
65
+ */
66
+ public function content_template() {
67
+ $control_uid = $this->get_control_uid();
68
+ ?>
69
+ <div class="elementor-control-field">
70
+ <# if ( data.label ) {#>
71
+ <label for="<?php echo $control_uid; ?>" class="elementor-control-title">{{{ data.label }}}</label>
72
+ <# } #>
73
+ <div class="elementor-control-input-wrapper">
74
+ <# var multiple = ( data.multiple ) ? 'multiple' : ''; #>
75
+ <select id="<?php echo $control_uid; ?>" class="elementor-select2" type="select2" {{ multiple }} data-setting="{{ data.name }}">
76
+ <# _.each( data.options, function( option_title, option_value ) {
77
+ var value = data.controlValue;
78
+ if ( typeof value == 'string' ) {
79
+ var selected = ( option_value === value ) ? 'selected' : '';
80
+ } else if ( null !== value ) {
81
+ var value = _.values( value );
82
+ var selected = ( -1 !== value.indexOf( option_value ) ) ? 'selected' : '';
83
+ }
84
+ #>
85
+ <option {{ selected }} value="{{ option_value }}">{{{ option_title }}}</option>
86
+ <# } ); #>
87
+ </select>
88
+ </div>
89
+ </div>
90
+ <# if ( data.description ) { #>
91
+ <div class="elementor-control-field-description">{{{ data.description }}}</div>
92
+ <# } #>
93
+ <?php
94
+ }
95
+ }
inc/functions.php CHANGED
@@ -475,3 +475,124 @@ add_action( 'wp_ajax_nopriv_ha_twitter_feed_action', 'ha_twitter_feed_ajax' );
475
  function ha_get_icon_for_label() {
476
  return '<i style="position: relative; top: 1px" class="hm hm-happyaddons"></i> ';
477
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
475
  function ha_get_icon_for_label() {
476
  return '<i style="position: relative; top: 1px" class="hm hm-happyaddons"></i> ';
477
  }
478
+
479
+ /**
480
+ * Get All Post Types
481
+ * @param array $args
482
+ * @param array $diff_key
483
+ * @return array|string[]|WP_Post_Type[]
484
+ */
485
+ function ha_get_post_types ( $args = array(), $diff_key = array() ) {
486
+ $default = [
487
+ 'public' => true,
488
+ 'show_in_nav_menus' => true
489
+ ];
490
+ $args = array_merge( $default, $args );
491
+ $post_types = get_post_types( $args , 'objects' );
492
+ $post_types = wp_list_pluck( $post_types, 'label', 'name' );
493
+
494
+ if( !empty( $diff_key ) ){
495
+ $post_types = array_diff_key( $post_types, $diff_key );
496
+ }
497
+ return $post_types;
498
+ }
499
+
500
+ /**
501
+ * Get All Taxonomies
502
+ * @param array $args
503
+ * @param string $output
504
+ * @param bool $list
505
+ * @param array $diff_key
506
+ * @return array|string[]|WP_Taxonomy[]
507
+ */
508
+ function ha_get_taxonomies ( $args = array(), $output = 'object', $list = true, $diff_key = array() ) {
509
+
510
+ $taxonomies = get_taxonomies( $args , $output );
511
+ if( 'object' === $output && $list ){
512
+ $taxonomies = wp_list_pluck( $taxonomies, 'label', 'name' );
513
+ }
514
+
515
+ if( !empty( $diff_key ) ){
516
+ $taxonomies = array_diff_key( $taxonomies, $diff_key );
517
+ }
518
+
519
+ return $taxonomies;
520
+ }
521
+
522
+ /**
523
+ * Post Tab Ajax call
524
+ */
525
+ function ha_post_tab () {
526
+
527
+ $security = check_ajax_referer( 'happy_addons_nonce', 'security' );
528
+
529
+ if ( true == $security ) :
530
+ $settings = $_POST['post_tab_query'];
531
+ $post_type = $settings['post_type'];
532
+ $taxonomy = $settings['taxonomy'];
533
+ $item_limit = $settings['item_limit'];
534
+ $excerpt = $settings['excerpt'];
535
+ $term_id = $_POST['term_id'];
536
+
537
+ $args = [
538
+ 'post_status' => 'publish',
539
+ 'post_type' => $post_type,
540
+ 'posts_per_page' => $item_limit,
541
+ 'tax_query' => array(
542
+ array(
543
+ 'taxonomy' => $taxonomy,
544
+ 'field' => 'term_id',
545
+ 'terms' => $term_id,
546
+ ),
547
+ ),
548
+ ];
549
+ $posts = get_posts( $args );
550
+ if ( count( $posts ) !== 0 ):
551
+ ?>
552
+ <div class="ha-post-tab-item-wrapper active" data-term="<?php echo esc_attr( $term_id ); ?>">
553
+ <?php foreach ( $posts as $post ): ?>
554
+ <div class="ha-post-tab-item">
555
+ <div class="ha-post-tab-item-inner">
556
+ <?php if ( has_post_thumbnail( $post->ID ) ): ?>
557
+ <a href="<?php echo esc_url( get_the_permalink( $post->ID ) ); ?>"
558
+ class="ha-post-tab-thumb">
559
+ <?php echo get_the_post_thumbnail( $post->ID, 'full' ); ?>
560
+ </a>
561
+ <?php endif; ?>
562
+ <h2 class="ha-post-tab-title">
563
+ <a href="<?php echo esc_url( get_the_permalink( $post->ID ) ); ?>"> <?php echo esc_html( $post->post_title ); ?></a>
564
+ </h2>
565
+ <div class="ha-post-tab-meta">
566
+ <span class="ha-post-tab-meta-author">
567
+ <i class="fa fa-user-o"></i>
568
+ <a href="<?php echo esc_url( get_author_posts_url( $post->post_author ) ); ?>"><?php echo esc_html( get_the_author_meta( 'display_name', $post->post_author ) ); ?></a>
569
+ </span>
570
+ <?php
571
+ $archive_year = get_the_time( 'Y', $post->ID );
572
+ $archive_month = get_the_time( 'm', $post->ID );
573
+ $archive_day = get_the_time( 'd', $post->ID );
574
+ ?>
575
+ <span class="ha-post-tab-meta-date">
576
+ <i class="fa fa-calendar-o"></i>
577
+ <a href="<?php echo esc_url( get_day_link( $archive_year, $archive_month, $archive_day ) ); ?>"><?php echo get_the_date( "M d, Y", $post->ID ); ?></a>
578
+ </span>
579
+ </div>
580
+ <?php if( 'yes' === $excerpt && !empty($post->post_excerpt) ): ?>
581
+ <div class="ha-post-tab-excerpt">
582
+ <p><?php echo esc_html($post->post_excerpt);?></p>
583
+ </div>
584
+ <?php endif;?>
585
+ </div>
586
+ </div>
587
+ <?php endforeach; ?>
588
+ </div>
589
+ <?php
590
+
591
+ endif;
592
+ endif;
593
+ wp_die();
594
+
595
+ }
596
+ add_action( 'wp_ajax_ha_post_tab_action', 'ha_post_tab' );
597
+ add_action( 'wp_ajax_nopriv_ha_post_tab_action', 'ha_post_tab' );
598
+
plugin.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Happy Elementor Addons
4
  * Plugin URI: https://happyaddons.com/
5
  * Description: <a href="https://happyaddons.com/">HappyAddons</a> is a collection of slick, powerful widgets that works seamlessly with Elementor page builder. It’s trendy look with detail customization features allows to create extraordinary designs instantly. <a href="https://happyaddons.com/">HappyAddons</a> is free, rapidly growing and comes with great support.
6
- * Version: 2.7.3
7
  * Author: weDevs
8
  * Author URI: https://happyaddons.com/
9
  * License: GPLv2
@@ -34,7 +34,7 @@ Copyright 2019 HappyMonster <http://happymonster.me>
34
 
35
  defined( 'ABSPATH' ) || die();
36
 
37
- define( 'HAPPY_ADDONS_VERSION', '2.7.3' );
38
  define( 'HAPPY_ADDONS__FILE__', __FILE__ );
39
  define( 'HAPPY_ADDONS_DIR_PATH', plugin_dir_path( HAPPY_ADDONS__FILE__ ) );
40
  define( 'HAPPY_ADDONS_DIR_URL', plugin_dir_url( HAPPY_ADDONS__FILE__ ) );
3
  * Plugin Name: Happy Elementor Addons
4
  * Plugin URI: https://happyaddons.com/
5
  * Description: <a href="https://happyaddons.com/">HappyAddons</a> is a collection of slick, powerful widgets that works seamlessly with Elementor page builder. It’s trendy look with detail customization features allows to create extraordinary designs instantly. <a href="https://happyaddons.com/">HappyAddons</a> is free, rapidly growing and comes with great support.
6
+ * Version: 2.8.0
7
  * Author: weDevs
8
  * Author URI: https://happyaddons.com/
9
  * License: GPLv2
34
 
35
  defined( 'ABSPATH' ) || die();
36
 
37
+ define( 'HAPPY_ADDONS_VERSION', '2.8.0' );
38
  define( 'HAPPY_ADDONS__FILE__', __FILE__ );
39
  define( 'HAPPY_ADDONS_DIR_PATH', plugin_dir_path( HAPPY_ADDONS__FILE__ ) );
40
  define( 'HAPPY_ADDONS_DIR_URL', plugin_dir_url( HAPPY_ADDONS__FILE__ ) );
readme.txt CHANGED
@@ -1,6 +1,6 @@
1
  === Happy Elementor Addons ===
2
  Plugin Name: Happy Elementor Addons
3
- Version: 2.7.3
4
  Author: weDevs
5
  Author URI: https://happyaddons.com/
6
  Contributors: thehappymonster, happyaddons, hasinhayder, mosaddek73, tareq1988, sourav926, wedevs, iqbalrony, mrokon, obiplabon
@@ -27,7 +27,7 @@ _HappyAddons is a unique Elementor Addon. It might be the best addon package for
27
  _— **Adam Preiser, Founder of WP Crafter**_
28
 
29
 
30
- ### INCLUDED 30 FREE WIDGETS
31
 
32
  Unlike other Elementor addons, the Happy Elementor Addons comes with a host of free yet powerful widgets. The magical widgets will impress you so much that you will be confused whether they are premium or free:
33
 
@@ -61,6 +61,8 @@ Unlike other Elementor addons, the Happy Elementor Addons comes with a host of f
61
  28. **[Twitter Feed](https://demo.happyaddons.com/elementor-twitter-feed-widget-demo/)**
62
  29. **[Bar Chart](https://demo.happyaddons.com/elementor-bar-chart-widget-demo/)**
63
  30. **[Social Icons](https://demo.happyaddons.com/elementor-social-icon-widget-demo/)**
 
 
64
 
65
 
66
  ### Free Built-in Extensions to Give You an Awesome Experience
@@ -276,6 +278,11 @@ It's really easy and super simple to install **Happy Elementor Addons** plugin b
276
 
277
  == Changelog ==
278
 
 
 
 
 
 
279
  = 2.7.3 - 31 March 2020 =
280
 
281
  - Tweak: Custom attribute output support for all links
1
  === Happy Elementor Addons ===
2
  Plugin Name: Happy Elementor Addons
3
+ Version: 2.8.0
4
  Author: weDevs
5
  Author URI: https://happyaddons.com/
6
  Contributors: thehappymonster, happyaddons, hasinhayder, mosaddek73, tareq1988, sourav926, wedevs, iqbalrony, mrokon, obiplabon
27
  _— **Adam Preiser, Founder of WP Crafter**_
28
 
29
 
30
+ ### INCLUDED 32 FREE WIDGETS
31
 
32
  Unlike other Elementor addons, the Happy Elementor Addons comes with a host of free yet powerful widgets. The magical widgets will impress you so much that you will be confused whether they are premium or free:
33
 
61
  28. **[Twitter Feed](https://demo.happyaddons.com/elementor-twitter-feed-widget-demo/)**
62
  29. **[Bar Chart](https://demo.happyaddons.com/elementor-bar-chart-widget-demo/)**
63
  30. **[Social Icons](https://demo.happyaddons.com/elementor-social-icon-widget-demo/)**
64
+ 31. **[Post Tab](https://demo.happyaddons.com/elementor-post-tab-widget-demo/)**
65
+ 32. **[Post List](https://demo.happyaddons.com/elementor-post-list-widget-demo/)**
66
 
67
 
68
  ### Free Built-in Extensions to Give You an Awesome Experience
278
 
279
  == Changelog ==
280
 
281
+ = 2.8.0 - 1 April 2020 =
282
+
283
+ - New: Post Tab widget
284
+ - New: Post List widget
285
+
286
  = 2.7.3 - 31 March 2020 =
287
 
288
  - Tweak: Custom attribute output support for all links
widgets/post-list/widget.php ADDED
@@ -0,0 +1,1033 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Post List widget class
4
+ *
5
+ * @package Happy_Addons
6
+ */
7
+
8
+ namespace Happy_Addons\Elementor\Widget;
9
+
10
+ use Elementor\Controls_Manager;
11
+ use Elementor\Group_Control_Border;
12
+ use Elementor\Group_Control_Box_Shadow;
13
+ use Elementor\Group_Control_Image_Size;
14
+ use Elementor\Group_Control_Text_Shadow;
15
+ use Elementor\Group_Control_Typography;
16
+ use Elementor\Icons_Manager;
17
+ use Elementor\Repeater;
18
+ use Elementor\Core\Schemes;
19
+ use Elementor\Group_Control_Background;
20
+ use Happy_Addons\Elementor\Controls\Select2;
21
+
22
+ defined( 'ABSPATH' ) || die();
23
+
24
+ class Post_List extends Base {
25
+
26
+ /**
27
+ * Get widget title.
28
+ *
29
+ * @return string Widget title.
30
+ * @since 1.0.0
31
+ * @access public
32
+ *
33
+ */
34
+ public function get_title () {
35
+ return __( 'Post List', 'happy-elementor-addons' );
36
+ }
37
+
38
+ public function get_custom_help_url () {
39
+ return 'https://happyaddons.com/docs/happy-addons-for-elementor/widgets/post-list/';
40
+ }
41
+
42
+ /**
43
+ * Get widget icon.
44
+ *
45
+ * @return string Widget icon.
46
+ * @since 1.0.0
47
+ * @access public
48
+ *
49
+ */
50
+ public function get_icon () {
51
+ return 'hm hm-post-list';
52
+ }
53
+
54
+ public function get_keywords () {
55
+ return [ 'posts', 'post', 'post-list', 'list', 'news' ];
56
+ }
57
+
58
+ /**
59
+ * Get a list of All Post Types
60
+ *
61
+ * @return array
62
+ */
63
+ public function get_post_types () {
64
+ $post_types = ha_get_post_types( [],[ 'elementor_library', 'attachment' ] );
65
+ return $post_types;
66
+ }
67
+
68
+ protected function register_content_controls () {
69
+ $this->start_controls_section(
70
+ '_section_post_list',
71
+ [
72
+ 'label' => __( 'List', 'happy-elementor-addons' ),
73
+ 'tab' => Controls_Manager::TAB_CONTENT,
74
+ ]
75
+ );
76
+
77
+ $this->add_control(
78
+ 'post_type',
79
+ [
80
+ 'label' => __( 'Source', 'happy-elementor-addons' ),
81
+ 'type' => Controls_Manager::SELECT,
82
+ 'options' => $this->get_post_types(),
83
+ 'default' => key( $this->get_post_types() ),
84
+ ]
85
+ );
86
+
87
+ $this->add_control(
88
+ 'show_post_by',
89
+ [
90
+ 'label' => __( 'Show post by:', 'happy-elementor-addons' ),
91
+ 'type' => Controls_Manager::SELECT,
92
+ 'default' => 'recent',
93
+ 'options' => [
94
+ 'recent' => __( 'Recent Post', 'happy-elementor-addons' ),
95
+ 'selected' => __( 'Selected Post', 'happy-elementor-addons' ),
96
+ ],
97
+
98
+ ]
99
+ );
100
+
101
+ $this->add_control(
102
+ 'posts_per_page',
103
+ [
104
+ 'label' => __( 'Item Limit', 'happy-elementor-addons' ),
105
+ 'type' => Controls_Manager::NUMBER,
106
+ 'default' => 3,
107
+ 'dynamic' => [ 'active' => true ],
108
+ 'condition' => [
109
+ 'show_post_by' => [ 'recent' ]
110
+ ]
111
+ ]
112
+ );
113
+
114
+ $repeater = [];
115
+
116
+ foreach ( $this->get_post_types() as $key => $value ) {
117
+
118
+ $repeater[$key] = new Repeater();
119
+
120
+ $repeater[$key]->add_control(
121
+ 'title',
122
+ [
123
+ 'label' => __( 'Title', 'happy-elementor-addons' ),
124
+ 'type' => Controls_Manager::TEXT,
125
+ 'label_block' => true,
126
+ 'placeholder' => __( 'Customize Title', 'happy-elementor-addons' ),
127
+ 'dynamic' => [
128
+ 'active' => true,
129
+ ],
130
+ ]
131
+ );
132
+
133
+ $repeater[$key]->add_control(
134
+ 'post_id',
135
+ [
136
+ 'label' => __( 'Select ', 'happy-elementor-addons' ) . $value,
137
+ 'label_block' => true,
138
+ 'type' => Select2::TYPE,
139
+ 'multiple' => false,
140
+ 'placeholder' => 'Search ' . $value,
141
+ 'data_options' => [
142
+ 'post_type' => $key,
143
+ 'action' => 'ha_post_list_query'
144
+ ],
145
+ ]
146
+ );
147
+
148
+ $this->add_control(
149
+ 'selected_list_' . $key,
150
+ [
151
+ 'label' => '',
152
+ 'type' => Controls_Manager::REPEATER,
153
+ 'fields' => $repeater[$key]->get_controls(),
154
+ 'title_field' => '{{ title }}',
155
+ 'condition' => [
156
+ 'show_post_by' => 'selected',
157
+ 'post_type' => $key
158
+ ],
159
+ ]
160
+ );
161
+ }
162
+
163
+ $this->end_controls_section();
164
+
165
+ //Settings
166
+ $this->start_controls_section(
167
+ '_section_settings',
168
+ [
169
+ 'label' => __( 'Settings', 'happy-elementor-addons' ),
170
+ 'tab' => Controls_Manager::TAB_CONTENT,
171
+ ]
172
+ );
173
+
174
+ $this->add_control(
175
+ 'view',
176
+ [
177
+ 'label' => __( 'Layout', 'happy-elementor-addons' ),
178
+ 'label_block' => false,
179
+ 'type' => Controls_Manager::CHOOSE,
180
+ 'default' => 'list',
181
+ 'options' => [
182
+ 'list' => [
183
+ 'title' => __( 'List', 'happy-elementor-addons' ),
184
+ 'icon' => 'eicon-editor-list-ul',
185
+ ],
186
+ 'inline' => [
187
+ 'title' => __( 'Inline', 'happy-elementor-addons' ),
188
+ 'icon' => 'eicon-ellipsis-h',
189
+ ],
190
+ ],
191
+ 'style_transfer' => true,
192
+ ]
193
+ );
194
+
195
+ $this->add_control(
196
+ 'feature_image',
197
+ [
198
+ 'label' => __( 'Featured Image', 'happy-elementor-addons' ),
199
+ 'type' => Controls_Manager::SWITCHER,
200
+ 'label_on' => __( 'Show', 'happy-elementor-addons' ),
201
+ 'label_off' => __( 'Hide', 'happy-elementor-addons' ),
202
+ 'return_value' => 'yes',
203
+ 'default' => '',
204
+ ]
205
+ );
206
+
207
+ $this->add_group_control(
208
+ Group_Control_Image_Size::get_type(),
209
+ [
210
+ 'name' => 'post_image',
211
+ 'default' => 'thumbnail',
212
+ 'exclude' => [
213
+ 'custom'
214
+ ],
215
+ 'condition' => [
216
+ 'feature_image' => 'yes'
217
+ ]
218
+ ]
219
+ );
220
+
221
+ $this->add_control(
222
+ 'list_icon',
223
+ [
224
+ 'label' => __( 'List Icon', 'happy-elementor-addons' ),
225
+ 'type' => Controls_Manager::SWITCHER,
226
+ 'label_on' => __( 'Show', 'happy-elementor-addons' ),
227
+ 'label_off' => __( 'Hide', 'happy-elementor-addons' ),
228
+ 'return_value' => 'yes',
229
+ 'default' => 'yes',
230
+ 'condition' => [
231
+ 'feature_image!' => 'yes'
232
+ ]
233
+ ]
234
+ );
235
+
236
+ $this->add_control(
237
+ 'icon',
238
+ [
239
+ 'label' => __( 'Icon', 'happy-elementor-addons' ),
240
+ 'type' => Controls_Manager::ICONS,
241
+ 'label_block' => true,
242
+ 'default' => [
243
+ 'value' => 'far fa-check-circle',
244
+ 'library' => 'reguler'
245
+ ],
246
+ 'condition' => [
247
+ 'list_icon' => 'yes',
248
+ 'feature_image!' => 'yes'
249
+ ]
250
+ ]
251
+ );
252
+
253
+ $this->add_control(
254
+ 'meta',
255
+ [
256
+ 'label' => __( 'Show Meta', 'happy-elementor-addons' ),
257
+ 'type' => Controls_Manager::SWITCHER,
258
+ 'label_on' => __( 'Show', 'happy-elementor-addons' ),
259
+ 'label_off' => __( 'Hide', 'happy-elementor-addons' ),
260
+ 'return_value' => 'yes',
261
+ 'default' => '',
262
+ ]
263
+ );
264
+
265
+ $this->add_control(
266
+ 'author_meta',
267
+ [
268
+ 'label' => __( 'Author', 'happy-elementor-addons' ),
269
+ 'type' => Controls_Manager::SWITCHER,
270
+ 'label_on' => __( 'Show', 'happy-elementor-addons' ),
271
+ 'label_off' => __( 'Hide', 'happy-elementor-addons' ),
272
+ 'return_value' => 'yes',
273
+ 'default' => '',
274
+ 'condition' => [
275
+ 'meta' => 'yes',
276
+ ]
277
+ ]
278
+ );
279
+
280
+ $this->add_control(
281
+ 'author_icon',
282
+ [
283
+ 'label' => __( 'Author Icon', 'happy-elementor-addons' ),
284
+ 'type' => Controls_Manager::ICONS,
285
+ 'default' => [
286
+ 'value' => 'far fa-user',
287
+ 'library' => 'reguler',
288
+ ],
289
+ 'condition' => [
290
+ 'meta' => 'yes',
291
+ 'author_meta' => 'yes',
292
+ ]
293
+ ]
294
+ );
295
+
296
+ $this->add_control(
297
+ 'date_meta',
298
+ [
299
+ 'label' => __( 'Date', 'happy-elementor-addons' ),
300
+ 'type' => Controls_Manager::SWITCHER,
301
+ 'label_on' => __( 'Show', 'happy-elementor-addons' ),
302
+ 'label_off' => __( 'Hide', 'happy-elementor-addons' ),
303
+ 'return_value' => 'yes',
304
+ 'default' => '',
305
+ 'condition' => [
306
+ 'meta' => 'yes',
307
+ ]
308
+ ]
309
+ );
310
+
311
+ $this->add_control(
312
+ 'date_icon',
313
+ [
314
+ 'label' => __( 'Date Icon', 'happy-elementor-addons' ),
315
+ 'type' => Controls_Manager::ICONS,
316
+ 'default' => [
317
+ 'value' => 'far fa-calendar-check',
318
+ 'library' => 'reguler',
319
+ ],
320
+ 'condition' => [
321
+ 'meta' => 'yes',
322
+ 'date_meta' => 'yes',
323
+ ]
324
+ ]
325
+ );
326
+
327
+ $this->add_control(
328
+ 'category_meta',
329
+ [
330
+ 'label' => __( 'Category', 'happy-elementor-addons' ),
331
+ 'type' => Controls_Manager::SWITCHER,
332
+ 'label_on' => __( 'Show', 'happy-elementor-addons' ),
333
+ 'label_off' => __( 'Hide', 'happy-elementor-addons' ),
334
+ 'return_value' => 'yes',
335
+ 'default' => '',
336
+ 'condition' => [
337
+ 'meta' => 'yes',
338
+ 'post_type' => 'post',
339
+ ]
340
+ ]
341
+ );
342
+
343
+ $this->add_control(
344
+ 'category_icon',
345
+ [
346
+ 'label' => __( 'Category Icon', 'happy-elementor-addons' ),
347
+ 'type' => Controls_Manager::ICONS,
348
+ 'default' => [
349
+ 'value' => 'far fa-folder-open',
350
+ 'library' => 'reguler',
351
+ ],
352
+ 'condition' => [
353
+ 'meta' => 'yes',
354
+ 'category_meta' => 'yes',
355
+ 'post_type' => 'post',
356
+ ]
357
+ ]
358
+ );
359
+
360
+ $this->add_control(
361
+ 'meta_position',
362
+ [
363
+ 'label' => __( 'Meta Position', 'happy-elementor-addons' ),
364
+ 'type' => Controls_Manager::SELECT,
365
+ 'default' => 'bottom',
366
+ 'options' => [
367
+ 'top' => __( 'Top', 'happy-elementor-addons' ),
368
+ 'bottom' => __( 'Bottom', 'happy-elementor-addons' ),
369
+ ],
370
+ 'condition' => [
371
+ 'meta' => 'yes',
372
+ ]
373
+ ]
374
+ );
375
+
376
+ $this->add_control(
377
+ 'title_tag',
378
+ [
379
+ 'label' => __( 'Title HTML Tag', 'happy-elementor-addons' ),
380
+ 'type' => Controls_Manager::CHOOSE,
381
+ 'options' => [
382
+ 'h1' => [
383
+ 'title' => __( 'H1', 'happy-elementor-addons' ),
384
+ 'icon' => 'eicon-editor-h1'
385
+ ],
386
+ 'h2' => [
387
+ 'title' => __( 'H2', 'happy-elementor-addons' ),
388
+ 'icon' => 'eicon-editor-h2'
389
+ ],
390
+ 'h3' => [
391
+ 'title' => __( 'H3', 'happy-elementor-addons' ),
392
+ 'icon' => 'eicon-editor-h3'
393
+ ],
394
+ 'h4' => [
395
+ 'title' => __( 'H4', 'happy-elementor-addons' ),
396
+ 'icon' => 'eicon-editor-h4'
397
+ ],
398
+ 'h5' => [
399
+ 'title' => __( 'H5', 'happy-elementor-addons' ),
400
+ 'icon' => 'eicon-editor-h5'
401
+ ],
402
+ 'h6' => [
403
+ 'title' => __( 'H6', 'happy-elementor-addons' ),
404
+ 'icon' => 'eicon-editor-h6'
405
+ ]
406
+ ],
407
+ 'default' => 'h2',
408
+ 'toggle' => false,
409
+ ]
410
+ );
411
+
412
+ $this->add_control(
413
+ 'item_align',
414
+ [
415
+ 'label' => __( 'Alignment', 'happy-elementor-addons' ),
416
+ 'type' => Controls_Manager::CHOOSE,
417
+ 'options' => [
418
+ 'left' => [
419
+ 'title' => __( 'Left', 'happy-elementor-addons' ),
420
+ 'icon' => 'fa fa-align-left',
421
+ ],
422
+ 'center' => [
423
+ 'title' => __( 'Center', 'happy-elementor-addons' ),
424
+ 'icon' => 'fa fa-align-center',
425
+ ],
426
+ 'right' => [
427
+ 'title' => __( 'Right', 'happy-elementor-addons' ),
428
+ 'icon' => 'fa fa-align-right',
429
+ ],
430
+ ],
431
+ 'toggle' => true,
432
+ 'selectors_dictionary' => [
433
+ 'left' => 'justify-content: flex-start',
434
+ 'center' => 'justify-content: center',
435
+ 'right' => 'justify-content: flex-end',
436
+ ],
437
+ 'selectors' => [
438
+ '{{WRAPPER}} .ha-post-list .ha-post-list-item a' => '{{VALUE}};'
439
+ ],
440
+ 'condition' => [
441
+ 'view' => 'list',
442
+ ]
443
+ ]
444
+ );
445
+
446
+ $this->end_controls_section();
447
+ }
448
+
449
+ protected function register_style_controls () {
450
+
451
+ $this->start_controls_section(
452
+ '_section_post_list_style',
453
+ [
454
+ 'label' => __( 'List', 'happy-elementor-addons' ),
455
+ 'tab' => Controls_Manager::TAB_STYLE,
456
+ ]
457
+ );
458
+
459
+ $this->add_responsive_control(
460
+ 'list_item_common',
461
+ [
462
+ 'label' => __( 'Common', 'happy-elementor-addons' ),
463
+ 'type' => Controls_Manager::HEADING,
464
+ ]
465
+ );
466
+
467
+ $this->add_responsive_control(
468
+ 'list_item_margin',
469
+ [
470
+ 'label' => __( 'Margin', 'happy-elementor-addons' ),
471
+ 'type' => Controls_Manager::DIMENSIONS,
472
+ 'size_units' => [ 'px', '%' ],
473
+ 'selectors' => [
474
+ '{{WRAPPER}} .ha-post-list .ha-post-list-item' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
475
+ ]
476
+ ]
477
+ );
478
+
479
+ $this->add_responsive_control(
480
+ 'list_item_padding',
481
+ [
482
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
483
+ 'type' => Controls_Manager::DIMENSIONS,
484
+ 'size_units' => [ 'px', 'em', '%' ],
485
+ 'selectors' => [
486
+ '{{WRAPPER}} .ha-post-list .ha-post-list-item a' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
487
+ ]
488
+ ]
489
+ );
490
+
491
+ $this->add_group_control(
492
+ Group_Control_Background::get_type(),
493
+ [
494
+ 'name' => 'list_item_background',
495
+ 'label' => __( 'Background', 'happy-elementor-addons' ),
496
+ 'types' => [ 'classic', 'gradient' ],
497
+ 'selector' => '{{WRAPPER}} .ha-post-list .ha-post-list-item',
498
+ ]
499
+ );
500
+
501
+ $this->add_group_control(
502
+ Group_Control_Box_Shadow::get_type(),
503
+ [
504
+ 'name' => 'list_item_box_shadow',
505
+ 'label' => __( 'Box Shadow', 'happy-elementor-addons' ),
506
+ 'selector' => '{{WRAPPER}} .ha-post-list .ha-post-list-item',
507
+ ]
508
+ );
509
+
510
+ $this->add_group_control(
511
+ Group_Control_Border::get_type(),
512
+ [
513
+ 'name' => 'list_item_border',
514
+ 'label' => __( 'Border', 'happy-elementor-addons' ),
515
+ 'selector' => '{{WRAPPER}} .ha-post-list .ha-post-list-item',
516
+ ]
517
+ );
518
+
519
+ $this->add_responsive_control(
520
+ 'list_item_border_radius',
521
+ [
522
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
523
+ 'type' => Controls_Manager::DIMENSIONS,
524
+ 'size_units' => [ 'px', 'em', '%' ],
525
+ 'selectors' => [
526
+ '{{WRAPPER}} .ha-post-list .ha-post-list-item' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
527
+ ]
528
+ ]
529
+ );
530
+
531
+ $this->add_control(
532
+ 'advance_style',
533
+ [
534
+ 'label' => __( 'Advance Style', 'happy-elementor-addons' ),
535
+ 'type' => Controls_Manager::SWITCHER,
536
+ 'label_on' => __( 'On', 'happy-elementor-addons' ),
537
+ 'label_off' => __( 'Off', 'happy-elementor-addons' ),
538
+ 'return_value' => 'yes',
539
+ 'default' => '',
540
+ ]
541
+ );
542
+
543
+ $this->add_responsive_control(
544
+ 'list_item_first',
545
+ [
546
+ 'label' => __( 'First Item', 'happy-elementor-addons' ),
547
+ 'type' => Controls_Manager::HEADING,
548
+ 'separator' => 'before',
549
+ 'condition' => [
550
+ 'advance_style' => 'yes',
551
+ ]
552
+ ]
553
+ );
554
+
555
+ $this->add_responsive_control(
556
+ 'list_item_first_child_margin',
557
+ [
558
+ 'label' => __( 'Margin', 'happy-elementor-addons' ),
559
+ 'type' => Controls_Manager::DIMENSIONS,
560
+ 'size_units' => [ 'px', '%' ],
561
+ 'selectors' => [
562
+ '{{WRAPPER}} .ha-post-list .ha-post-list-item:first-child' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
563
+ ],
564
+ 'condition' => [
565
+ 'advance_style' => 'yes',
566
+ ]
567
+ ]
568
+ );
569
+
570
+ $this->add_group_control(
571
+ Group_Control_Border::get_type(),
572
+ [
573
+ 'name' => 'list_item_first_child_border',
574
+ 'label' => __( 'Border', 'happy-elementor-addons' ),
575
+ 'selector' => '{{WRAPPER}} .ha-post-list .ha-post-list-item:first-child',
576
+ 'condition' => [
577
+ 'advance_style' => 'yes',
578
+ ]
579
+ ]
580
+ );
581
+
582
+ $this->add_responsive_control(
583
+ 'list_item_last',
584
+ [
585
+ 'label' => __( 'Last Item', 'happy-elementor-addons' ),
586
+ 'type' => Controls_Manager::HEADING,
587
+ 'separator' => 'before',
588
+ 'condition' => [
589
+ 'advance_style' => 'yes',
590
+ ]
591
+ ]
592
+ );
593
+
594
+ $this->add_responsive_control(
595
+ 'list_item_last_child_margin',
596
+ [
597
+ 'label' => __( 'Margin', 'happy-elementor-addons' ),
598
+ 'type' => Controls_Manager::DIMENSIONS,
599
+ 'size_units' => [ 'px', '%' ],
600
+ 'selectors' => [
601
+ '{{WRAPPER}} .ha-post-list .ha-post-list-item:last-child' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
602
+ ],
603
+ 'condition' => [
604
+ 'advance_style' => 'yes',
605
+ ]
606
+ ]
607
+ );
608
+
609
+ $this->add_group_control(
610
+ Group_Control_Border::get_type(),
611
+ [
612
+ 'name' => 'list_item_last_child_border',
613
+ 'label' => __( 'Border', 'happy-elementor-addons' ),
614
+ 'selector' => '{{WRAPPER}} .ha-post-list .ha-post-list-item:last-child',
615
+ 'condition' => [
616
+ 'advance_style' => 'yes',
617
+ ]
618
+ ]
619
+ );
620
+
621
+ $this->end_controls_section();
622
+ //Title Style
623
+ $this->start_controls_section(
624
+ '_section_post_list_title_style',
625
+ [
626
+ 'label' => __( 'Title', 'happy-elementor-addons' ),
627
+ 'tab' => Controls_Manager::TAB_STYLE,
628
+ ]
629
+ );
630
+
631
+ $this->add_group_control(
632
+ Group_Control_Typography::get_type(),
633
+ [
634
+ 'name' => 'title_typography',
635
+ 'label' => __( 'Typography', 'happy-elementor-addons' ),
636
+ 'scheme' => Schemes\Typography::TYPOGRAPHY_2,
637
+ 'selector' => '{{WRAPPER}} .ha-post-list-title',
638
+ ]
639
+ );
640
+
641
+ $this->start_controls_tabs( 'title_tabs' );
642
+ $this->start_controls_tab(
643
+ 'title_normal_tab',
644
+ [
645
+ 'label' => __( 'Normal', 'happy-elementor-addons' ),
646
+ ]
647
+ );
648
+
649
+ $this->add_control(
650
+ 'title_color',
651
+ [
652
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
653
+ 'type' => Controls_Manager::COLOR,
654
+ 'selectors' => [
655
+ '{{WRAPPER}} .ha-post-list-title' => 'color: {{VALUE}}',
656
+ ],
657
+ ]
658
+ );
659
+ $this->end_controls_tab();
660
+
661
+ $this->start_controls_tab(
662
+ 'title_hover_tab',
663
+ [
664
+ 'label' => __( 'Hover', 'happy-elementor-addons' ),
665
+ ]
666
+ );
667
+
668
+ $this->add_control(
669
+ 'title_hvr_color',
670
+ [
671
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
672
+ 'type' => Controls_Manager::COLOR,
673
+ 'selectors' => [
674
+ '{{WRAPPER}} .ha-post-list .ha-post-list-item a:hover .ha-post-list-title' => 'color: {{VALUE}}',
675
+ ],
676
+ ]
677
+ );
678
+ $this->end_controls_tab();
679
+ $this->end_controls_tabs();
680
+
681
+ $this->end_controls_section();
682
+ //List Icon Style
683
+ $this->start_controls_section(
684
+ '_section_list_icon_feature_iamge_style',
685
+ [
686
+ 'label' => __( 'Icon & Feature Image', 'happy-elementor-addons' ),
687
+ 'tab' => Controls_Manager::TAB_STYLE,
688
+ 'conditions' => [
689
+ 'relation' => 'or',
690
+ 'terms' => [
691
+ [
692
+ 'name' => 'feature_image',
693
+ 'operator' => '==',
694
+ 'value' => 'yes',
695
+ ],
696
+ [
697
+ 'name' => 'list_icon',
698
+ 'operator' => '==',
699
+ 'value' => 'yes',
700
+ ],
701
+ ],
702
+ ],
703
+ ]
704
+ );
705
+
706
+ $this->add_control(
707
+ 'icon_color',
708
+ [
709
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
710
+ 'type' => Controls_Manager::COLOR,
711
+ 'default' => '',
712
+ 'selectors' => [
713
+ '{{WRAPPER}} span.ha-post-list-icon' => 'color: {{VALUE}};',
714
+ ],
715
+ 'condition' => [
716
+ 'feature_image!' => 'yes',
717
+ 'list_icon' => 'yes',
718
+ ]
719
+ ]
720
+ );
721
+
722
+ $this->add_responsive_control(
723
+ 'icon_size',
724
+ [
725
+ 'label' => __( 'Font Size', 'happy-elementor-addons' ),
726
+ 'type' => Controls_Manager::SLIDER,
727
+ 'selectors' => [
728
+ '{{WRAPPER}} span.ha-post-list-icon' => 'font-size: {{SIZE}}{{UNIT}};',
729
+ ],
730
+ 'condition' => [
731
+ 'feature_image!' => 'yes',
732
+ 'list_icon' => 'yes',
733
+ ]
734
+ ]
735
+ );
736
+
737
+ $this->add_responsive_control(
738
+ 'icon_line_height',
739
+ [
740
+ 'label' => __( 'Line Height', 'happy-elementor-addons' ),
741
+ 'type' => Controls_Manager::SLIDER,
742
+ 'selectors' => [
743
+ '{{WRAPPER}} span.ha-post-list-icon' => 'line-height: {{SIZE}}{{UNIT}};',
744
+ ],
745
+ 'condition' => [
746
+ 'feature_image!' => 'yes',
747
+ 'list_icon' => 'yes',
748
+ ]
749
+ ]
750
+ );
751
+
752
+ $this->add_responsive_control(
753
+ 'image_width',
754
+ [
755
+ 'label' => __( 'Image Width', 'happy-elementor-addons' ),
756
+ 'type' => Controls_Manager::SLIDER,
757
+ 'range' => [
758
+ 'px' => [
759
+ 'min' => 0,
760
+ 'max' => 1000,
761
+ 'step' => 1,
762
+ ],
763
+ ],
764
+ 'selectors' => [
765
+ '{{WRAPPER}} .ha-post-list-item a img' => 'width: {{SIZE}}{{UNIT}};',
766
+ ],
767
+ 'condition' => [
768
+ 'feature_image' => 'yes',
769
+ ]
770
+ ]
771
+ );
772
+
773
+ $this->add_group_control(
774
+ Group_Control_Border::get_type(),
775
+ [
776
+ 'name' => 'image_boder',
777
+ 'label' => __( 'Border', 'happy-elementor-addons' ),
778
+ 'selector' => '{{WRAPPER}} .ha-post-list-item a img',
779
+ 'condition' => [
780
+ 'feature_image' => 'yes',
781
+ ]
782
+ ]
783
+ );
784
+
785
+ $this->add_responsive_control(
786
+ 'image_boder_radius',
787
+ [
788
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
789
+ 'type' => Controls_Manager::DIMENSIONS,
790
+ 'size_units' => [ 'px', '%' ],
791
+ 'selectors' => [
792
+ '{{WRAPPER}} .ha-post-list-item a img' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
793
+ ],
794
+ 'condition' => [
795
+ 'feature_image' => 'yes',
796
+ ]
797
+ ]
798
+ );
799
+
800
+ $this->add_responsive_control(
801
+ 'icon_margin_right',
802
+ [
803
+ 'label' => __( 'Margin Right', 'happy-elementor-addons' ),
804
+ 'type' => Controls_Manager::SLIDER,
805
+ 'selectors' => [
806
+ '{{WRAPPER}} span.ha-post-list-icon' => 'margin-right: {{SIZE}}{{UNIT}};',
807
+ '{{WRAPPER}} .ha-post-list-item a img' => 'margin-right: {{SIZE}}{{UNIT}};',
808
+ ],
809
+ ]
810
+ );
811
+
812
+ $this->end_controls_section();
813
+ //List Meta Style
814
+ $this->start_controls_section(
815
+ '_section_list_meta_style',
816
+ [
817
+ 'label' => __( 'Meta', 'happy-elementor-addons' ),
818
+ 'tab' => Controls_Manager::TAB_STYLE,
819
+ 'condition' => [
820
+ 'meta' => 'yes',
821
+ ]
822
+ ]
823
+ );
824
+
825
+ $this->add_group_control(
826
+ Group_Control_Typography::get_type(),
827
+ [
828
+ 'name' => 'meta_typography',
829
+ 'label' => __( 'Typography', 'happy-elementor-addons' ),
830
+ 'scheme' => Schemes\Typography::TYPOGRAPHY_3,
831
+ 'selector' => '{{WRAPPER}} .ha-post-list-meta-wrap span',
832
+ ]
833
+ );
834
+
835
+ $this->add_control(
836
+ 'meta_color',
837
+ [
838
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
839
+ 'type' => Controls_Manager::COLOR,
840
+ 'default' => '',
841
+ 'selectors' => [
842
+ '{{WRAPPER}} .ha-post-list-meta-wrap span' => 'color: {{VALUE}};',
843
+ ],
844
+ ]
845
+ );
846
+
847
+ $this->add_responsive_control(
848
+ 'meta_space',
849
+ [
850
+ 'label' => __( 'Space Between', 'happy-elementor-addons' ),
851
+ 'type' => Controls_Manager::SLIDER,
852
+ 'selectors' => [
853
+ '{{WRAPPER}} .ha-post-list-meta-wrap span' => 'margin-right: {{SIZE}}{{UNIT}};',
854
+ '{{WRAPPER}} .ha-post-list-meta-wrap span:last-child' => 'margin-right: 0;',
855
+ ],
856
+ ]
857
+ );
858
+
859
+ $this->add_responsive_control(
860
+ 'meta_box_margin',
861
+ [
862
+ 'label' => __( 'Margin', 'happy-elementor-addons' ),
863
+ 'type' => Controls_Manager::DIMENSIONS,
864
+ 'size_units' => [ 'px', '%' ],
865
+ 'selectors' => [
866
+ '{{WRAPPER}} .ha-post-list-meta-wrap' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
867
+ ]
868
+ ]
869
+ );
870
+
871
+ $this->add_responsive_control(
872
+ 'meta_icon_heading',
873
+ [
874
+ 'label' => __( 'Meta Icon', 'happy-elementor-addons' ),
875
+ 'type' => Controls_Manager::HEADING,
876
+ 'separator' => 'before',
877
+ ]
878
+ );
879
+
880
+ $this->add_control(
881
+ 'meta_icon_color',
882
+ [
883
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
884
+ 'type' => Controls_Manager::COLOR,
885
+ 'default' => '',
886
+ 'selectors' => [
887
+ '{{WRAPPER}} .ha-post-list-meta-wrap span i' => 'color: {{VALUE}};',
888
+ ],
889
+ ]
890
+ );
891
+
892
+ $this->add_responsive_control(
893
+ 'meta_icon_space',
894
+ [
895
+ 'label' => __( 'Space Between', 'happy-elementor-addons' ),
896
+ 'type' => Controls_Manager::SLIDER,
897
+ 'selectors' => [
898
+ '{{WRAPPER}} .ha-post-list-meta-wrap span i' => 'margin-right: {{SIZE}}{{UNIT}};',
899
+ ],
900
+ ]
901
+ );
902
+
903
+ $this->end_controls_section();
904
+ }
905
+
906
+ protected function render () {
907
+
908
+ $settings = $this->get_settings_for_display();
909
+ if ( ! $settings['post_type'] ) return;
910
+ $args = [
911
+ 'post_status' => 'publish',
912
+ 'post_type' => $settings['post_type'],
913
+ ];
914
+ if ( 'recent' === $settings['show_post_by'] ) {
915
+ $args['posts_per_page'] = $settings['posts_per_page'];
916
+ }
917
+
918
+ $customize_title = [];
919
+ $ids = [];
920
+ if ( 'selected' === $settings['show_post_by'] ) {
921
+ $args['posts_per_page'] = -1;
922
+ $lists = $settings['selected_list_' . $settings['post_type']];
923
+ if ( ! empty( $lists ) ) {
924
+ foreach ( $lists as $index => $value ) {
925
+ $ids[] = $value['post_id'];
926
+ if ( $value['title'] ) $customize_title[$value['post_id']] = $value['title'];
927
+ }
928
+ }
929
+ $args['post__in'] = (array) $ids;
930
+ $args['orderby'] = 'post__in';
931
+ }
932
+
933
+ if ( 'selected' === $settings['show_post_by'] && empty( $ids ) ) {
934
+ $posts = [];
935
+ } else {
936
+ $posts = get_posts( $args );
937
+ }
938
+
939
+ $this->add_render_attribute( 'wrapper', 'class', [ 'ha-post-list-wrapper' ] );
940
+ $this->add_render_attribute( 'wrapper-inner', 'class', [ 'ha-post-list' ] );
941
+ if ( 'inline' === $settings['view'] ) {
942
+ $this->add_render_attribute( 'wrapper-inner', 'class', [ 'ha-post-list-inline' ] );
943
+ }
944
+ $this->add_render_attribute( 'item', 'class', [ 'ha-post-list-item' ] );
945
+
946
+ if ( count( $posts ) !== 0 ) :?>
947
+ <div <?php $this->print_render_attribute_string( 'wrapper' ); ?>>
948
+ <ul <?php $this->print_render_attribute_string( 'wrapper-inner' ); ?> >
949
+ <?php foreach ( $posts as $post ): ?>
950
+ <li <?php $this->print_render_attribute_string( 'item' ); ?>>
951
+ <a href="<?php echo esc_url( get_the_permalink( $post->ID ) ); ?>">
952
+ <?php if ( 'yes' === $settings['feature_image'] ):
953
+ echo get_the_post_thumbnail( $post->ID, $settings['post_image_size'] );
954
+ elseif ( 'yes' === $settings['list_icon'] && $settings['icon'] ) :
955
+ echo '<span class="ha-post-list-icon">';
956
+ Icons_Manager::render_icon( $settings['icon'], [ 'aria-hidden' => 'true' ] );
957
+ echo '</span>';
958
+ endif; ?>
959
+ <div class="ha-post-list-content">
960
+ <?php
961
+ $title = $post->post_title;
962
+ if ( 'selected' === $settings['show_post_by'] && array_key_exists( $post->ID, $customize_title ) ) {
963
+ $title = $customize_title[$post->ID];
964
+ }
965
+ if ( 'top' !== $settings['meta_position'] && $title ) {
966
+ printf( '<%1$s %2$s>%3$s</%1$s>',
967
+ tag_escape( $settings['title_tag'] ),
968
+ 'class="ha-post-list-title"',
969
+ esc_html( $title )
970
+ );
971
+ }
972
+ ?>
973
+ <?php if ( 'yes' === $settings['meta'] ): ?>
974
+ <div class="ha-post-list-meta-wrap">
975
+
976
+ <?php if ( 'yes' === $settings['author_meta'] ):
977
+ ?>
978
+ <span class="ha-post-list-author">
979
+ <?php if ( $settings['author_icon'] ):
980
+ Icons_Manager::render_icon( $settings['author_icon'], [ 'aria-hidden' => 'true' ] );
981
+ endif;
982
+ echo esc_html( get_the_author_meta( 'display_name', $post->post_author ) ); ?>
983
+ </span>
984
+ <?php endif; ?>
985
+
986
+ <?php if ( 'yes' === $settings['date_meta'] ): ?>
987
+ <span class="ha-post-list-date">
988
+ <?php if ( $settings['date_icon'] ):
989
+ Icons_Manager::render_icon( $settings['date_icon'], [ 'aria-hidden' => 'true' ] );
990
+ endif;
991
+ echo get_the_date( "M d, Y" );
992
+ ?>
993
+ </span>
994
+ <?php endif; ?>
995
+
996
+ <?php if ( 'post' === $settings['post_type'] && 'yes' === $settings['category_meta'] ):
997
+ $categories = get_the_category( $post->ID );
998
+ ?>
999
+ <span class="ha-post-list-category">
1000
+ <?php if ( $settings['category_icon'] ):
1001
+ Icons_Manager::render_icon( $settings['category_icon'], [ 'aria-hidden' => 'true' ] );
1002
+ endif;
1003
+ echo esc_html( $categories[0]->name ); ?>
1004
+ </span>
1005
+ <?php endif; ?>
1006
+
1007
+ </div>
1008
+ <?php endif; ?>
1009
+ <?php
1010
+ if ( 'top' === $settings['meta_position'] && $title ) {
1011
+ printf( '<%1$s %2$s>%3$s</%1$s>',
1012
+ tag_escape( $settings['title_tag'] ),
1013
+ 'class="ha-post-list-title"',
1014
+ esc_html( $title )
1015
+ );
1016
+ }
1017
+ ?>
1018
+ </div>
1019
+ </a>
1020
+ </li>
1021
+ <?php endforeach; ?>
1022
+ </ul>
1023
+ </div>
1024
+ <?php
1025
+ else:
1026
+ printf( '%1$s %2$s %3$s',
1027
+ __( 'No ', 'happy-elementor-addons' ),
1028
+ esc_html( $settings['post_type'] ),
1029
+ __( 'Found', 'happy-elementor-addons' )
1030
+ );
1031
+ endif;
1032
+ }
1033
+ }
widgets/post-tab/widget.php ADDED
@@ -0,0 +1,935 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Post Tab widget class
4
+ *
5
+ * @package Happy_Addons
6
+ */
7
+
8
+ namespace Happy_Addons\Elementor\Widget;
9
+
10
+ use Elementor\Controls_Manager;
11
+ use Elementor\Group_Control_Border;
12
+ use Elementor\Group_Control_Box_Shadow;
13
+ use Elementor\Group_Control_Typography;
14
+ use Elementor\Scheme_Typography;
15
+ use Elementor\Group_Control_Background;
16
+ use Happy_Addons\Elementor\Controls\Select2;
17
+
18
+ defined( 'ABSPATH' ) || die();
19
+
20
+ class Post_Tab extends Base {
21
+
22
+ /**
23
+ * Get widget title.
24
+ *
25
+ * @return string Widget title.
26
+ * @since 1.0.0
27
+ * @access public
28
+ *
29
+ */
30
+ public function get_title () {
31
+ return __( 'Post Tab', 'happy-elementor-addons' );
32
+ }
33
+
34
+ public function get_custom_help_url () {
35
+ return 'https://happyaddons.com/docs/happy-addons-for-elementor/widgets/post-tab/';
36
+ }
37
+
38
+ /**
39
+ * Get widget icon.
40
+ *
41
+ * @return string Widget icon.
42
+ * @since 1.0.0
43
+ * @access public
44
+ *
45
+ */
46
+ public function get_icon () {
47
+ return 'hm hm-post-tab';
48
+ }
49
+
50
+ public function get_keywords () {
51
+ return [ 'posts', 'post', 'post-tab', 'tab', 'news' ];
52
+ }
53
+
54
+ /**
55
+ * Get a list of All Post Types
56
+ *
57
+ * @return array
58
+ */
59
+ public static function get_post_types () {
60
+ $diff_key = [
61
+ 'elementor_library' => '',
62
+ 'attachment' => '',
63
+ 'page' => ''
64
+ ];
65
+ $post_types = ha_get_post_types( [], $diff_key );
66
+ return $post_types;
67
+ }
68
+
69
+ /**
70
+ * Get a list of Taxonomy
71
+ *
72
+ * @return array
73
+ */
74
+ public static function get_taxonomies ( $post_type = '' ) {
75
+ $list = [];
76
+ if ( $post_type ) {
77
+ $tax = ha_get_taxonomies( [ 'public' => true, "object_type" => [ $post_type ] ], 'object', true );
78
+ $list[$post_type] = count( $tax ) !== 0 ? $tax : '';
79
+ } else {
80
+ $list = ha_get_taxonomies( [ 'public' => true ], 'object', true );
81
+ }
82
+ return $list;
83
+ }
84
+
85
+ protected function register_content_controls () {
86
+ $this->start_controls_section(
87
+ '_section_post_tab_query',
88
+ [
89
+ 'label' => __( 'Query', 'happy-elementor-addons' ),
90
+ 'tab' => Controls_Manager::TAB_CONTENT,
91
+ ]
92
+ );
93
+
94
+ $this->add_control(
95
+ 'post_type',
96
+ [
97
+ 'label' => __( 'Source', 'happy-elementor-addons' ),
98
+ 'type' => Controls_Manager::SELECT,
99
+ 'options' => $this->get_post_types(),
100
+ 'default' => key( $this->get_post_types() ),
101
+ ]
102
+ );
103
+
104
+ foreach ( self::get_post_types() as $key => $value ) {
105
+ $taxonomy = self::get_taxonomies( $key );
106
+ if ( ! $taxonomy[$key] )
107
+ continue;
108
+ $this->add_control(
109
+ 'tax_type_' . $key,
110
+ [
111
+ 'label' => __( 'Taxonomies', 'happy-elementor-addons' ),
112
+ 'type' => Controls_Manager::SELECT,
113
+ 'options' => $taxonomy[$key],
114
+ 'default' => key( $taxonomy[$key] ),
115
+ 'condition' => [
116
+ 'post_type' => $key
117
+ ],
118
+ ]
119
+ );
120
+
121
+ foreach ( $taxonomy[$key] as $tax_key => $tax_value ) {
122
+
123
+ $this->add_control(
124
+ 'tax_ids_' . $tax_key,
125
+ [
126
+ 'label' => __( 'Select ', 'happy-elementor-addons' ) . $tax_value,
127
+ 'label_block' => true,
128
+ 'type' => Select2::TYPE,
129
+ 'multiple' => true,
130
+ 'placeholder' => 'Search ' . $tax_value,
131
+ 'data_options' => [
132
+ 'tax_id' => $tax_key,
133
+ 'action' => 'ha_post_tab_select_query'
134
+ ],
135
+ 'condition' => [
136
+ 'post_type' => $key,
137
+ 'tax_type_' . $key => $tax_key
138
+ ],
139
+ 'render_type' => 'template',
140
+ ]
141
+ );
142
+ }
143
+ }
144
+
145
+ $this->add_control(
146
+ 'item_limit',
147
+ [
148
+ 'label' => __( 'Item Limit', 'happy-elementor-addons' ),
149
+ 'type' => Controls_Manager::NUMBER,
150
+ 'default' => 3,
151
+ 'dynamic' => [ 'active' => true ],
152
+ ]
153
+ );
154
+
155
+ $this->end_controls_section();
156
+
157
+ //Settings
158
+ $this->start_controls_section(
159
+ '_section_settings',
160
+ [
161
+ 'label' => __( 'Settings', 'happy-elementor-addons' ),
162
+ 'tab' => Controls_Manager::TAB_CONTENT,
163
+ ]
164
+ );
165
+
166
+ $this->add_responsive_control(
167
+ 'column',
168
+ [
169
+ 'label' => __( 'Column', 'happy-elementor-addons' ),
170
+ 'type' => Controls_Manager::SELECT,
171
+ 'options' => [
172
+ '1' => __( '1 Column', 'happy-elementor-addons' ),
173
+ '2' => __( '2 Column', 'happy-elementor-addons' ),
174
+ '3' => __( '3 Column', 'happy-elementor-addons' ),
175
+ '4' => __( '4 Column', 'happy-elementor-addons' ),
176
+ '5' => __( '5 Column', 'happy-elementor-addons' ),
177
+ '6' => __( '6 Column', 'happy-elementor-addons' ),
178
+ ],
179
+ 'desktop_default' => '4',
180
+ 'tablet_default' => '3',
181
+ 'mobile_default' => '1',
182
+ 'selectors' => [
183
+ '(desktop){{WRAPPER}} .ha-post-tab .ha-post-tab-item' => 'flex-basis: calc(100% / {{VALUE}});',
184
+ '(tablet){{WRAPPER}} .ha-post-tab .ha-post-tab-item' => 'flex-basis: calc(100% / {{column_tablet.VALUE}});',
185
+ '(mobile){{WRAPPER}} .ha-post-tab .ha-post-tab-item' => 'flex-basis: calc(100% / {{column_mobile.VALUE}});'
186
+ ],
187
+ 'render_type' => 'template',
188
+ 'style_transfer' => true,
189
+ ]
190
+ );
191
+
192
+ $this->add_control(
193
+ 'excerpt',
194
+ [
195
+ 'label' => __( 'Show Excerpt', 'happy-elementor-addons' ),
196
+ 'type' => Controls_Manager::SWITCHER,
197
+ 'label_on' => __( 'Show', 'happy-elementor-addons' ),
198
+ 'label_off' => __( 'Hide', 'happy-elementor-addons' ),
199
+ 'return_value' => 'yes',
200
+ 'default' => '',
201
+ ]
202
+ );
203
+
204
+ $this->add_control(
205
+ 'filter_pos',
206
+ [
207
+ 'label' => __( 'Filter Position', 'happy-elementor-addons' ),
208
+ 'label_block' => false,
209
+ 'type' => Controls_Manager::CHOOSE,
210
+ 'default' => 'top',
211
+ 'options' => [
212
+ 'left' => [
213
+ 'title' => __( 'Left', 'happy-elementor-addons' ),
214
+ 'icon' => 'eicon-h-align-left',
215
+ ],
216
+ 'top' => [
217
+ 'title' => __( 'Top', 'happy-elementor-addons' ),
218
+ 'icon' => 'eicon-v-align-top',
219
+ ],
220
+ 'right' => [
221
+ 'title' => __( 'Right', 'happy-elementor-addons' ),
222
+ 'icon' => 'eicon-h-align-right',
223
+ ],
224
+ ],
225
+ 'style_transfer' => true,
226
+ ]
227
+ );
228
+
229
+ $this->add_control(
230
+ 'filter_align',
231
+ [
232
+ 'label' => __( 'Filter Align', 'happy-elementor-addons' ),
233
+ 'label_block' => false,
234
+ 'type' => Controls_Manager::CHOOSE,
235
+ 'default' => 'left',
236
+ 'options' => [
237
+ 'left' => [
238
+ 'title' => __( 'Left', 'happy-elementor-addons' ),
239
+ 'icon' => 'fa fa-align-left',
240
+ ],
241
+ 'center' => [
242
+ 'title' => __( 'Center', 'happy-elementor-addons' ),
243
+ 'icon' => 'fa fa-align-center',
244
+ ],
245
+ 'right' => [
246
+ 'title' => __( 'Right', 'happy-elementor-addons' ),
247
+ 'icon' => 'fa fa-align-right',
248
+ ],
249
+ ],
250
+ 'condition' => [
251
+ 'filter_pos' => 'top',
252
+ ],
253
+ 'selectors' => [
254
+ '{{WRAPPER}} .ha-post-tab .ha-post-tab-filter' => 'text-align: {{VALUE}};',
255
+ ],
256
+ 'style_transfer' => true,
257
+ ]
258
+ );
259
+
260
+
261
+ $this->add_responsive_control(
262
+ 'event',
263
+ [
264
+ 'label' => __( 'Tab action', 'happy-elementor-addons' ),
265
+ 'type' => Controls_Manager::SELECT,
266
+ 'options' => [
267
+ 'click' => __( 'On Click', 'happy-elementor-addons' ),
268
+ 'hover' => __( 'On Hover', 'happy-elementor-addons' ),
269
+ ],
270
+ 'default' => 'click',
271
+ 'render_type' => 'template',
272
+ 'style_transfer' => true,
273
+ ]
274
+ );
275
+
276
+ $this->end_controls_section();
277
+ }
278
+
279
+ protected function register_style_controls () {
280
+
281
+ $this->start_controls_section(
282
+ '_section_post_tab_filter',
283
+ [
284
+ 'label' => __( 'Tab', 'happy-elementor-addons' ),
285
+ 'tab' => Controls_Manager::TAB_STYLE,
286
+ ]
287
+ );
288
+
289
+ $this->add_responsive_control(
290
+ 'tab_margin_btm',
291
+ [
292
+ 'label' => __( 'Margin Bottom', 'happy-elementor-addons' ),
293
+ 'type' => Controls_Manager::SLIDER,
294
+ 'default' => [
295
+ 'unit' => 'px',
296
+ 'size' => 30,
297
+ ],
298
+ 'selectors' => [
299
+ '{{WRAPPER}} .ha-post-tab .ha-post-tab-filter' => 'margin-bottom: {{SIZE}}{{UNIT}};',
300
+ ],
301
+ 'condition' => [
302
+ 'filter_pos' => 'top',
303
+ ],
304
+ ]
305
+ );
306
+
307
+ $this->add_responsive_control(
308
+ 'tab_padding',
309
+ [
310
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
311
+ 'type' => Controls_Manager::DIMENSIONS,
312
+ 'size_units' => [ 'px', 'em', '%' ],
313
+ 'selectors' => [
314
+ '{{WRAPPER}} .ha-post-tab .ha-post-tab-filter' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
315
+ ]
316
+ ]
317
+ );
318
+
319
+ $this->add_group_control(
320
+ Group_Control_Box_Shadow::get_type(),
321
+ [
322
+ 'name' => 'tab_shadow',
323
+ 'label' => __( 'Box Shadow', 'happy-elementor-addons' ),
324
+ 'selector' => '{{WRAPPER}} .ha-post-tab .ha-post-tab-filter',
325
+ ]
326
+ );
327
+
328
+ $this->add_group_control(
329
+ Group_Control_Border::get_type(),
330
+ [
331
+ 'name' => 'tab_border',
332
+ 'label' => __( 'Border', 'happy-elementor-addons' ),
333
+ 'selector' => '{{WRAPPER}} .ha-post-tab .ha-post-tab-filter',
334
+ ]
335
+ );
336
+
337
+ $this->add_responsive_control(
338
+ 'tab_item',
339
+ [
340
+ 'label' => __( 'Tab Item', 'happy-elementor-addons' ),
341
+ 'type' => Controls_Manager::HEADING,
342
+ 'separator' => 'before',
343
+ ]
344
+ );
345
+
346
+ $this->add_responsive_control(
347
+ 'tab_item_margin',
348
+ [
349
+ 'label' => __( 'Margin', 'happy-elementor-addons' ),
350
+ 'type' => Controls_Manager::DIMENSIONS,
351
+ 'size_units' => [ 'px', '%' ],
352
+ 'selectors' => [
353
+ '{{WRAPPER}} .ha-post-tab .ha-post-tab-filter li' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
354
+ ],
355
+ ]
356
+ );
357
+
358
+ $this->add_responsive_control(
359
+ 'tab_item_padding',
360
+ [
361
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
362
+ 'type' => Controls_Manager::DIMENSIONS,
363
+ 'size_units' => [ 'px', 'em', '%' ],
364
+ 'selectors' => [
365
+ '{{WRAPPER}} .ha-post-tab .ha-post-tab-filter li' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
366
+ ]
367
+ ]
368
+ );
369
+
370
+ $this->start_controls_tabs( 'tab_item_tabs' );
371
+ $this->start_controls_tab(
372
+ 'tab_item_normal_tab',
373
+ [
374
+ 'label' => __( 'Normal', 'happy-elementor-addons' ),
375
+ ]
376
+ );
377
+
378
+ $this->add_control(
379
+ 'tab_item_color',
380
+ [
381
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
382
+ 'type' => Controls_Manager::COLOR,
383
+ 'selectors' => [
384
+ '{{WRAPPER}} .ha-post-tab .ha-post-tab-filter li' => 'color: {{VALUE}}',
385
+ ],
386
+ ]
387
+ );
388
+
389
+ $this->add_group_control(
390
+ Group_Control_Background::get_type(),
391
+ [
392
+ 'name' => 'tab_item_background',
393
+ 'label' => __( 'Background', 'happy-elementor-addons' ),
394
+ 'types' => [ 'classic', 'gradient' ],
395
+ 'selector' => '{{WRAPPER}} .ha-post-tab .ha-post-tab-filter li',
396
+ ]
397
+ );
398
+
399
+ $this->end_controls_tab();
400
+
401
+ $this->start_controls_tab(
402
+ 'tab_item_hover_tab',
403
+ [
404
+ 'label' => __( 'Hover', 'happy-elementor-addons' ),
405
+ ]
406
+ );
407
+
408
+ $this->add_control(
409
+ 'tab_item_hvr_color',
410
+ [
411
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
412
+ 'type' => Controls_Manager::COLOR,
413
+ 'selectors' => [
414
+ '{{WRAPPER}} .ha-post-tab .ha-post-tab-filter li.active' => 'color: {{VALUE}}',
415
+ '{{WRAPPER}} .ha-post-tab .ha-post-tab-filter li:hover' => 'color: {{VALUE}}',
416
+ ],
417
+ ]
418
+ );
419
+
420
+
421
+ $this->add_group_control(
422
+ Group_Control_Background::get_type(),
423
+ [
424
+ 'name' => 'tab_item_hvr_background',
425
+ 'label' => __( 'Background', 'happy-elementor-addons' ),
426
+ 'types' => [ 'classic', 'gradient' ],
427
+ 'selector' => '{{WRAPPER}} .ha-post-tab .ha-post-tab-filter li.active,{{WRAPPER}} .ha-post-tab .ha-post-tab-filter li:hover',
428
+ ]
429
+ );
430
+ $this->end_controls_tab();
431
+ $this->end_controls_tabs();
432
+
433
+ $this->add_group_control(
434
+ Group_Control_Typography::get_type(),
435
+ [
436
+ 'name' => 'tab_item_typography',
437
+ 'label' => __( 'Typography', 'happy-elementor-addons' ),
438
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_2,
439
+ 'selector' => '{{WRAPPER}} .ha-post-tab .ha-post-tab-filter li',
440
+ ]
441
+ );
442
+
443
+ $this->add_group_control(
444
+ Group_Control_Border::get_type(),
445
+ [
446
+ 'name' => 'tab_item_border',
447
+ 'label' => __( 'Border', 'happy-elementor-addons' ),
448
+ 'selector' => '{{WRAPPER}} .ha-post-tab .ha-post-tab-filter li',
449
+ ]
450
+ );
451
+
452
+ $this->add_responsive_control(
453
+ 'tab_item_border_radius',
454
+ [
455
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
456
+ 'type' => Controls_Manager::DIMENSIONS,
457
+ 'size_units' => [ 'px', 'em', '%' ],
458
+ 'selectors' => [
459
+ '{{WRAPPER}} .ha-post-tab .ha-post-tab-filter li' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
460
+ ]
461
+ ]
462
+ );
463
+ $this->end_controls_section();
464
+
465
+ //Column
466
+ $this->start_controls_section(
467
+ '_section_post_tab_column',
468
+ [
469
+ 'label' => __( 'Column', 'happy-elementor-addons' ),
470
+ 'tab' => Controls_Manager::TAB_STYLE,
471
+ ]
472
+ );
473
+
474
+ $this->add_responsive_control(
475
+ 'post_item_space',
476
+ [
477
+ 'label' => __( 'Space Between', 'happy-elementor-addons' ),
478
+ 'type' => Controls_Manager::SLIDER,
479
+ 'default' => [
480
+ 'unit' => 'px',
481
+ 'size' => 15,
482
+ ],
483
+ 'selectors' => [
484
+ '{{WRAPPER}} .ha-post-tab .ha-post-tab-item' => 'padding-left: {{SIZE}}{{UNIT}};padding-right: {{SIZE}}{{UNIT}};',
485
+ ],
486
+ ]
487
+ );
488
+
489
+ $this->add_responsive_control(
490
+ 'post_item_margin_btm',
491
+ [
492
+ 'label' => __( 'Margin Bottom', 'happy-elementor-addons' ),
493
+ 'type' => Controls_Manager::SLIDER,
494
+ 'default' => [
495
+ 'unit' => 'px',
496
+ 'size' => 30,
497
+ ],
498
+ 'selectors' => [
499
+ '{{WRAPPER}} .ha-post-tab .ha-post-tab-item' => 'margin-bottom: {{SIZE}}{{UNIT}};',
500
+ ],
501
+ ]
502
+ );
503
+
504
+ $this->add_responsive_control(
505
+ 'post_item_padding',
506
+ [
507
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
508
+ 'type' => Controls_Manager::DIMENSIONS,
509
+ 'size_units' => [ 'px', 'em', '%' ],
510
+ 'selectors' => [
511
+ '{{WRAPPER}} .ha-post-tab .ha-post-tab-item-inner' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
512
+ ]
513
+ ]
514
+ );
515
+
516
+ $this->add_group_control(
517
+ Group_Control_Background::get_type(),
518
+ [
519
+ 'name' => 'post_item_background',
520
+ 'label' => __( 'Background', 'happy-elementor-addons' ),
521
+ 'types' => [ 'classic', 'gradient' ],
522
+ 'selector' => '{{WRAPPER}} .ha-post-tab .ha-post-tab-item-inner',
523
+ ]
524
+ );
525
+
526
+ $this->add_group_control(
527
+ Group_Control_Box_Shadow::get_type(),
528
+ [
529
+ 'name' => 'post_item_box_shadow',
530
+ 'label' => __( 'Box Shadow', 'happy-elementor-addons' ),
531
+ 'selector' => '{{WRAPPER}} .ha-post-tab .ha-post-tab-item-inner',
532
+ ]
533
+ );
534
+
535
+ $this->add_group_control(
536
+ Group_Control_Border::get_type(),
537
+ [
538
+ 'name' => 'post_item_border',
539
+ 'label' => __( 'Border', 'happy-elementor-addons' ),
540
+ 'selector' => '{{WRAPPER}} .ha-post-tab .ha-post-tab-item-inner',
541
+ ]
542
+ );
543
+
544
+ $this->add_responsive_control(
545
+ 'post_item_border_radius',
546
+ [
547
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
548
+ 'type' => Controls_Manager::DIMENSIONS,
549
+ 'size_units' => [ 'px', 'em', '%' ],
550
+ 'selectors' => [
551
+ '{{WRAPPER}} .ha-post-tab .ha-post-tab-item-inner' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
552
+ ]
553
+ ]
554
+ );
555
+ $this->end_controls_section();
556
+
557
+ //Content Style
558
+ $this->start_controls_section(
559
+ '_section_post_tab_content',
560
+ [
561
+ 'label' => __( 'Content', 'happy-elementor-addons' ),
562
+ 'tab' => Controls_Manager::TAB_STYLE,
563
+ ]
564
+ );
565
+
566
+ $this->add_responsive_control(
567
+ 'post_content_image',
568
+ [
569
+ 'label' => __( 'Image', 'happy-elementor-addons' ),
570
+ 'type' => Controls_Manager::HEADING,
571
+ ]
572
+ );
573
+
574
+ $this->add_responsive_control(
575
+ 'post_item_content_img_margin_btm',
576
+ [
577
+ 'label' => __( 'Margin Bottom', 'happy-elementor-addons' ),
578
+ 'type' => Controls_Manager::SLIDER,
579
+ 'default' => [
580
+ 'unit' => 'px',
581
+ 'size' => 15,
582
+ ],
583
+ 'selectors' => [
584
+ '{{WRAPPER}} .ha-post-tab .ha-post-tab-item-inner .ha-post-tab-thumb' => 'margin-bottom: {{SIZE}}{{UNIT}};',
585
+ ],
586
+ ]
587
+ );
588
+
589
+ $this->add_group_control(
590
+ Group_Control_Border::get_type(),
591
+ [
592
+ 'name' => 'image_boder',
593
+ 'label' => __( 'Border', 'happy-elementor-addons' ),
594
+ 'selector' => '{{WRAPPER}} .ha-post-tab .ha-post-tab-item-inner .ha-post-tab-thumb img',
595
+ ]
596
+ );
597
+
598
+ $this->add_responsive_control(
599
+ 'image_boder_radius',
600
+ [
601
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
602
+ 'type' => Controls_Manager::DIMENSIONS,
603
+ 'size_units' => [ 'px', '%' ],
604
+ 'selectors' => [
605
+ '{{WRAPPER}} .ha-post-tab .ha-post-tab-item-inner .ha-post-tab-thumb img' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
606
+ ],
607
+ ]
608
+ );
609
+
610
+ $this->add_responsive_control(
611
+ 'post_content_title',
612
+ [
613
+ 'label' => __( 'Title', 'happy-elementor-addons' ),
614
+ 'type' => Controls_Manager::HEADING,
615
+ 'separator' => 'before'
616
+ ]
617
+ );
618
+
619
+ $this->add_responsive_control(
620
+ 'post_content_margin_btm',
621
+ [
622
+ 'label' => __( 'Margin Bottom', 'happy-elementor-addons' ),
623
+ 'type' => Controls_Manager::SLIDER,
624
+ 'default' => [
625
+ 'unit' => 'px',
626
+ 'size' => 10,
627
+ ],
628
+ 'selectors' => [
629
+ '{{WRAPPER}} .ha-post-tab .ha-post-tab-item-inner .ha-post-tab-title' => 'margin-bottom: {{SIZE}}{{UNIT}};',
630
+ ],
631
+ ]
632
+ );
633
+
634
+ $this->add_group_control(
635
+ Group_Control_Typography::get_type(),
636
+ [
637
+ 'name' => 'title_typography',
638
+ 'label' => __( 'Typography', 'happy-elementor-addons' ),
639
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_2,
640
+ 'selector' => '{{WRAPPER}} .ha-post-tab .ha-post-tab-item-inner .ha-post-tab-title',
641
+ ]
642
+ );
643
+
644
+ $this->start_controls_tabs( 'title_tabs' );
645
+ $this->start_controls_tab(
646
+ 'title_normal_tab',
647
+ [
648
+ 'label' => __( 'Normal', 'happy-elementor-addons' ),
649
+ ]
650
+ );
651
+
652
+ $this->add_control(
653
+ 'title_color',
654
+ [
655
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
656
+ 'type' => Controls_Manager::COLOR,
657
+ 'selectors' => [
658
+ '{{WRAPPER}} .ha-post-tab .ha-post-tab-item-inner .ha-post-tab-title a' => 'color: {{VALUE}}',
659
+ ],
660
+ ]
661
+ );
662
+ $this->end_controls_tab();
663
+
664
+ $this->start_controls_tab(
665
+ 'title_hover_tab',
666
+ [
667
+ 'label' => __( 'Hover', 'happy-elementor-addons' ),
668
+ ]
669
+ );
670
+
671
+ $this->add_control(
672
+ 'title_hvr_color',
673
+ [
674
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
675
+ 'type' => Controls_Manager::COLOR,
676
+ 'selectors' => [
677
+ '{{WRAPPER}} .ha-post-tab .ha-post-tab-item-inner .ha-post-tab-title a:hover' => 'color: {{VALUE}}',
678
+ ],
679
+ ]
680
+ );
681
+ $this->end_controls_tab();
682
+ $this->end_controls_tabs();
683
+
684
+ $this->add_responsive_control(
685
+ 'post_content_meta',
686
+ [
687
+ 'label' => __( 'Meta', 'happy-elementor-addons' ),
688
+ 'type' => Controls_Manager::HEADING,
689
+ 'separator' => 'before'
690
+ ]
691
+ );
692
+
693
+ $this->add_group_control(
694
+ Group_Control_Typography::get_type(),
695
+ [
696
+ 'name' => 'meta_typography',
697
+ 'label' => __( 'Typography', 'happy-elementor-addons' ),
698
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3,
699
+ 'selector' => '{{WRAPPER}} .ha-post-tab .ha-post-tab-meta span',
700
+ ]
701
+ );
702
+
703
+ $this->start_controls_tabs( 'meta_tabs' );
704
+ $this->start_controls_tab(
705
+ 'meta_normal_tab',
706
+ [
707
+ 'label' => __( 'Normal', 'happy-elementor-addons' ),
708
+ ]
709
+ );
710
+
711
+ $this->add_control(
712
+ 'meta_color',
713
+ [
714
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
715
+ 'type' => Controls_Manager::COLOR,
716
+ 'selectors' => [
717
+ '{{WRAPPER}} .ha-post-tab .ha-post-tab-meta span' => 'color: {{VALUE}};',
718
+ '{{WRAPPER}} .ha-post-tab .ha-post-tab-meta span a' => 'color: {{VALUE}};',
719
+ ],
720
+ ]
721
+ );
722
+ $this->end_controls_tab();
723
+
724
+ $this->start_controls_tab(
725
+ 'meta_hover_tab',
726
+ [
727
+ 'label' => __( 'Hover', 'happy-elementor-addons' ),
728
+ ]
729
+ );
730
+
731
+ $this->add_control(
732
+ 'meta_hvr_color',
733
+ [
734
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
735
+ 'type' => Controls_Manager::COLOR,
736
+ 'selectors' => [
737
+ '{{WRAPPER}} .ha-post-tab .ha-post-tab-meta span:hover' => 'color: {{VALUE}};',
738
+ '{{WRAPPER}} .ha-post-tab .ha-post-tab-meta span:hover a' => 'color: {{VALUE}};',
739
+ ],
740
+ ]
741
+ );
742
+ $this->end_controls_tab();
743
+ $this->end_controls_tabs();
744
+
745
+ $this->add_responsive_control(
746
+ 'meta__margin',
747
+ [
748
+ 'label' => __( 'Margin', 'happy-elementor-addons' ),
749
+ 'type' => Controls_Manager::DIMENSIONS,
750
+ 'size_units' => [ 'px', '%' ],
751
+ 'selectors' => [
752
+ '{{WRAPPER}} .ha-post-tab .ha-post-tab-meta span' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
753
+ ]
754
+ ]
755
+ );
756
+
757
+ $this->add_responsive_control(
758
+ 'post_content_excerpt',
759
+ [
760
+ 'label' => __( 'Excerpt', 'happy-elementor-addons' ),
761
+ 'type' => Controls_Manager::HEADING,
762
+ 'separator' => 'before',
763
+ 'condition' => [
764
+ 'excerpt' => 'yes',
765
+ ],
766
+ ]
767
+ );
768
+
769
+ $this->add_group_control(
770
+ Group_Control_Typography::get_type(),
771
+ [
772
+ 'name' => 'excerpt_typography',
773
+ 'label' => __( 'Typography', 'happy-elementor-addons' ),
774
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3,
775
+ 'selector' => '{{WRAPPER}} .ha-post-tab .ha-post-tab-excerpt p',
776
+ 'condition' => [
777
+ 'excerpt' => 'yes',
778
+ ],
779
+ ]
780
+ );
781
+
782
+ $this->add_control(
783
+ 'excerpt_color',
784
+ [
785
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
786
+ 'type' => Controls_Manager::COLOR,
787
+ 'selectors' => [
788
+ '{{WRAPPER}} .ha-post-tab .ha-post-tab-excerpt p' => 'color: {{VALUE}};',
789
+ ],
790
+ 'condition' => [
791
+ 'excerpt' => 'yes',
792
+ ],
793
+ ]
794
+ );
795
+
796
+ $this->add_responsive_control(
797
+ 'excerpt_margin_top',
798
+ [
799
+ 'label' => __( 'Margin Top', 'happy-elementor-addons' ),
800
+ 'type' => Controls_Manager::SLIDER,
801
+ 'default' => [
802
+ 'unit' => 'px',
803
+ 'size' => 15,
804
+ ],
805
+ 'selectors' => [
806
+ '{{WRAPPER}} .ha-post-tab .ha-post-tab-excerpt' => 'margin-top: {{SIZE}}{{UNIT}};',
807
+ ],
808
+ 'condition' => [
809
+ 'excerpt' => 'yes',
810
+ ],
811
+ ]
812
+ );
813
+
814
+ $this->end_controls_section();
815
+ }
816
+
817
+ protected function render () {
818
+
819
+ $settings = $this->get_settings_for_display();
820
+ if ( ! $settings['post_type'] )
821
+ return;
822
+
823
+ $taxonomy = $settings['tax_type_' . $settings['post_type']];
824
+ $terms_ids = $settings['tax_ids_' . $taxonomy];
825
+ $terms_args = [
826
+ 'taxonomy' => $taxonomy,
827
+ 'hide_empty' => true,
828
+ 'include' => $terms_ids,
829
+ 'orderby' => 'term_id',
830
+ ];
831
+ $filter_list = get_terms( $terms_args );
832
+
833
+ $post_args = [
834
+ 'post_status' => 'publish',
835
+ 'post_type' => $settings['post_type'],
836
+ 'posts_per_page' => $settings['item_limit'],
837
+ 'tax_query' => array(
838
+ array(
839
+ 'taxonomy' => $taxonomy,
840
+ 'field' => 'term_id',
841
+ 'terms' => $terms_ids ? $filter_list[0]->term_id : '',
842
+ ),
843
+ ),
844
+ ];
845
+ $posts = get_posts( $post_args );
846
+
847
+ $query_settings = [
848
+ 'post_type' => $settings['post_type'],
849
+ 'taxonomy' => $taxonomy,
850
+ 'item_limit' => $settings['item_limit'],
851
+ 'excerpt' => $settings['excerpt'] ? $settings['excerpt'] : 'no',
852
+ ];
853
+ $query_settings = json_encode( $query_settings, true );
854
+
855
+ $event = 'click';
856
+ if ( 'hover' === $settings['event'] ) {
857
+ $event = 'hover touchstart';
858
+ }
859
+ $wrapper_class = [
860
+ 'ha-post-tab',
861
+ 'ha-post-tab-' . $settings['filter_pos'],
862
+ 'ha-post-tab-grid-' . $settings['column'],
863
+ 'ha-post-tab-grid-tablet-' . $settings['column_tablet'],
864
+ 'ha-post-tab-grid-mobile-' . $settings['column_mobile'],
865
+ ];
866
+ $this->add_render_attribute( 'wrapper', 'class', $wrapper_class );
867
+ $this->add_render_attribute( 'wrapper', 'data-query-args', $query_settings );
868
+ $this->add_render_attribute( 'wrapper', 'data-event', $event );
869
+ $this->add_render_attribute( 'tab-filter', 'class', [ 'ha-post-tab-filter ha-text--center' ] );
870
+ $this->add_render_attribute( 'tab-body', 'class', [ 'ha-post-tab-content' ] );
871
+ $this->add_render_attribute( 'tab-item-wrapper', 'class', [ 'ha-post-tab-item-wrapper active' ] );
872
+ $this->add_render_attribute( 'item', 'class', [ 'ha-post-list-item' ] );
873
+ $i = 1;
874
+ if ( !empty($terms_ids) && count( $posts ) !== 0 ) :?>
875
+ <div <?php $this->print_render_attribute_string( 'wrapper' ); ?>>
876
+ <ul <?php $this->print_render_attribute_string( 'tab-filter' ); ?>>
877
+ <?php foreach ( $filter_list as $list ): ?>
878
+ <?php if ( $i === 1 ): $i++; ?>
879
+ <li class="active"
880
+ data-term="<?php echo esc_attr( $list->term_id ); ?>"><?php echo esc_html( $list->name ); ?></li>
881
+ <?php else: ?>
882
+ <li data-term="<?php echo esc_attr( $list->term_id ); ?>"><?php echo esc_html( $list->name ); ?></li>
883
+ <?php endif; ?>
884
+ <?php endforeach; ?>
885
+ </ul>
886
+ <div <?php $this->print_render_attribute_string( 'tab-body' ); ?>>
887
+ <div <?php $this->print_render_attribute_string( 'tab-item-wrapper' ); ?>
888
+ data-term="<?php echo esc_attr( $terms_ids[0] ); ?>">
889
+ <?php foreach ( $posts as $post ): ?>
890
+ <div class="ha-post-tab-item">
891
+ <div class="ha-post-tab-item-inner">
892
+ <?php if ( has_post_thumbnail( $post->ID ) ): ?>
893
+ <a href="<?php echo esc_url( get_the_permalink( $post->ID ) ); ?>"
894
+ class="ha-post-tab-thumb">
895
+ <?php echo get_the_post_thumbnail( $post->ID, 'full' ); ?>
896
+ </a>
897
+ <?php endif; ?>
898
+ <h2 class="ha-post-tab-title">
899
+ <a href="<?php echo esc_url( get_the_permalink( $post->ID ) ); ?>"> <?php echo esc_html( $post->post_title ); ?></a>
900
+ </h2>
901
+ <div class="ha-post-tab-meta">
902
+ <span class="ha-post-tab-meta-author">
903
+ <i class="fa fa-user-o"></i>
904
+ <a href="<?php echo esc_url( get_author_posts_url( $post->post_author ) ); ?>"><?php echo esc_html( get_the_author_meta( 'display_name', $post->post_author ) ); ?></a>
905
+ </span>
906
+ <?php
907
+ $archive_year = get_the_time( 'Y', $post->ID );
908
+ $archive_month = get_the_time( 'm', $post->ID );
909
+ $archive_day = get_the_time( 'd', $post->ID );
910
+ ?>
911
+ <span class="ha-post-tab-meta-date">
912
+ <i class="fa fa-calendar-o"></i>
913
+ <a href="<?php echo esc_url( get_day_link( $archive_year, $archive_month, $archive_day ) ); ?>"><?php echo get_the_date( "M d, Y", $post->ID ); ?></a>
914
+ </span>
915
+ </div>
916
+ <?php if( 'yes' === $settings['excerpt'] && !empty($post->post_excerpt) ): ?>
917
+ <div class="ha-post-tab-excerpt">
918
+ <p><?php echo esc_html($post->post_excerpt);?></p>
919
+ </div>
920
+ <?php endif;?>
921
+ </div>
922
+ </div>
923
+ <?php
924
+ endforeach; ?>
925
+ </div>
926
+ </div>
927
+ </div>
928
+ <?php
929
+ else:
930
+ printf( '%1$s',
931
+ __( 'No Posts Found', 'happy-elementor-addons' )
932
+ );
933
+ endif;
934
+ }
935
+ }