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

Version Description

  • 23 July 2019 =

  • New: Carousel Widget

  • New: Slider Widget

  • Update: Justified Grid Widget hover and animation effects

  • Update: Typography scheme support for all FREE widgets

  • Fix: Misc styling issue

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 1.3.0
Comparing to
See all releases

Code changes from version 1.2.1 to 1.3.0

Files changed (43) hide show
  1. assets/css/main.css +288 -383
  2. assets/css/main.min.css +1 -1
  3. assets/js/happy-addons.js +95 -0
  4. assets/js/happy-addons.min.js +1 -1
  5. assets/vendor/slick/ajax-loader.gif +0 -0
  6. assets/vendor/slick/fonts/slick.eot +0 -0
  7. assets/vendor/slick/fonts/slick.svg +14 -0
  8. assets/vendor/slick/fonts/slick.ttf +0 -0
  9. assets/vendor/slick/fonts/slick.woff +0 -0
  10. assets/vendor/slick/slick-theme.css +169 -0
  11. assets/vendor/slick/slick-theme.css.map +9 -0
  12. assets/vendor/slick/slick-theme.less +168 -0
  13. assets/vendor/slick/slick-theme.scss +194 -0
  14. assets/vendor/slick/slick.css +102 -0
  15. assets/vendor/slick/slick.css.map +9 -0
  16. assets/vendor/slick/slick.js +3011 -0
  17. assets/vendor/slick/slick.less +100 -0
  18. assets/vendor/slick/slick.min.js +1 -0
  19. assets/vendor/slick/slick.scss +100 -0
  20. base.php +23 -1
  21. base/widget-base.php +1 -2
  22. classes/asset-manager.php +22 -0
  23. classes/widget-manager.php +2 -0
  24. inc/functions.php +41 -0
  25. plugin.php +4 -3
  26. readme.txt +18 -6
  27. vendor/appsero/src/Client.php +202 -0
  28. vendor/appsero/src/Insights.php +954 -0
  29. vendor/appsero/src/License.php +345 -0
  30. vendor/appsero/src/Updater.php +247 -0
  31. widgets/carousel/widget.php +767 -0
  32. widgets/cf7/widget.php +4 -0
  33. widgets/dual-button/widget.php +1 -0
  34. widgets/image-compare/widget.php +0 -1
  35. widgets/justified-gallery/widget.php +145 -22
  36. widgets/logo-grid/widget.php +145 -33
  37. widgets/ninjaform/widget.php +5 -0
  38. widgets/number/widget.php +2 -0
  39. widgets/review/widget.php +0 -1
  40. widgets/slider/widget.php +726 -0
  41. widgets/testimonial/widget.php +2 -2
  42. widgets/weform/widget.php +5 -0
  43. widgets/wpform/widget.php +6 -0
assets/css/main.css CHANGED
@@ -115,6 +115,7 @@
115
 
116
  .ha-card--top .ha-card-figure {
117
  display: inline-block;
 
118
  }
119
 
120
  .ha-card--right > .elementor-widget-container,
@@ -571,245 +572,181 @@ span .ha-review-ratting--star:before,
571
  color: #fff;
572
  }
573
 
574
- .ha-image-grid-item {
575
- float: left;
 
576
  }
577
 
578
- .ha-image-grid-link {
579
- position: relative;
580
- display: block;
581
- overflow: hidden;
582
- margin: 10px;
583
- text-decoration: none;
584
- }
585
- .ha-image-grid-link:focus {
586
- outline: none;
587
- }
588
- .ha-image-grid-link img {
589
- vertical-align: bottom;
590
- -webkit-transition: -webkit-transform .25s linear;
591
- transition: -webkit-transform .25s linear;
592
- transition: transform .25s linear;
593
- transition: transform .25s linear, -webkit-transform .25s linear;
594
  }
595
- .ha-image-grid-link:hover img {
596
- -webkit-transform: scale(1.25);
597
- -ms-transform: scale(1.25);
598
- transform: scale(1.25);
599
  }
600
- .ha-image-grid-link:hover .ha-image-grid-overlay {
601
- opacity: 1;
 
 
 
602
  }
603
- .ha-image-grid-link:hover .ha-image-grid-content {
604
- opacity: 1;
 
 
 
 
 
 
 
 
605
  }
606
- .ha-image-grid-link:hover .ha-image-grid-content:before {
607
- width: 80px;
 
 
 
 
 
 
 
 
608
  }
609
 
610
- .ha-image-grid-overlay {
611
- position: absolute;
612
- top: 0;
613
- right: 0;
614
- bottom: 0;
615
- left: 0;
616
- padding: 30px;
617
- background-color: rgba(0, 0, 0, .8);
618
- opacity: 0;
619
- -webkit-transition: opacity .5s;
620
- transition: opacity .5s;
621
  }
622
 
623
- .ha-image-grid-content {
624
- position: absolute;
625
- width: 100%;
626
- color: #fff;
627
- font-size: 16px;
628
- opacity: 0;
629
- -webkit-transition: opacity .5s;
630
- transition: opacity .5s;
 
 
 
 
 
631
  }
632
- .ha-image-grid-content:before {
633
- position: absolute;
634
- top: -15px;
635
- width: 35px;
636
- height: 1px;
637
- background: #fe413b;
 
 
 
 
 
 
 
 
638
  content: "";
639
- -webkit-transition: all .3s;
640
- transition: all .3s;
641
- }
642
- .ha-image-grid-content--topleft {
643
- top: 2.9rem;
644
- left: 2rem;
645
- text-align: left;
646
- }
647
- .ha-image-grid-content--topleft:before {
648
- left: 0;
649
- }
650
- .ha-image-grid-content--topcenter {
651
- top: 2.9rem;
652
- left: 50%;
653
- text-align: center;
654
- -webkit-transform: translateX(-50%);
655
- -ms-transform: translateX(-50%);
656
- transform: translateX(-50%);
657
- }
658
- .ha-image-grid-content--topcenter:before {
659
- left: 50%;
660
- -webkit-transform: translateX(-50%);
661
- -ms-transform: translateX(-50%);
662
- transform: translateX(-50%);
663
- }
664
- .ha-image-grid-content--topright {
665
- top: 2.9rem;
666
- right: 2rem;
667
- text-align: right;
668
- }
669
- .ha-image-grid-content--topright:before {
670
- right: 0;
671
- }
672
- .ha-image-grid-content--bottomleft {
673
- bottom: 2rem;
674
- left: 2rem;
675
- text-align: left;
676
  }
677
- .ha-image-grid-content--bottomleft:before {
678
- left: 0;
679
- }
680
- .ha-image-grid-content--bottomcenter {
681
- bottom: 2rem;
682
- left: 50%;
683
- text-align: center;
684
- -webkit-transform: translateX(-50%);
685
- -ms-transform: translateX(-50%);
686
- transform: translateX(-50%);
687
- }
688
- .ha-image-grid-content--bottomcenter:before {
689
- left: 50%;
690
- -webkit-transform: translateX(-50%);
691
- -ms-transform: translateX(-50%);
692
- transform: translateX(-50%);
693
- }
694
- .ha-image-grid-content--bottomright {
695
- right: 2rem;
696
- bottom: 2rem;
697
- text-align: right;
698
- }
699
- .ha-image-grid-content--bottomright:before {
700
- right: 0;
701
  }
702
- .ha-image-grid-content--middleleft {
703
- top: 50%;
704
- left: 2rem;
705
- text-align: left;
706
- -webkit-transform: translateY(-50%);
707
- -ms-transform: translateY(-50%);
708
- transform: translateY(-50%);
709
  }
710
- .ha-image-grid-content--middleleft:before {
711
- left: 0;
 
 
712
  }
713
- .ha-image-grid-content--middlecenter {
714
- top: 50%;
715
- left: 50%;
716
- text-align: center;
717
- -webkit-transform: translateX(-50%);
718
- -ms-transform: translateX(-50%);
719
- transform: translateX(-50%);
720
  }
721
- .ha-image-grid-content--middlecenter:before {
722
- left: 50%;
723
- -webkit-transform: translateX(-50%);
724
- -ms-transform: translateX(-50%);
725
- transform: translateX(-50%);
726
  }
727
- .ha-image-grid-content--middleright {
728
- top: 50%;
729
- right: 2rem;
730
- text-align: right;
731
- -webkit-transform: translateY(-50%);
732
- -ms-transform: translateY(-50%);
733
- transform: translateY(-50%);
734
- }
735
- .ha-image-grid-content--middleright:before {
736
- right: 0;
737
  }
738
-
739
- .ha-image-grid--col-2 .ha-image-grid-item {
740
- width: 50%;
 
741
  }
742
-
743
- .ha-image-grid--col-3 .ha-image-grid-item {
744
- width: 33.33%;
 
 
 
 
745
  }
746
 
747
- .ha-image-grid--col-4 .ha-image-grid-item {
748
- width: 25%;
 
 
 
749
  }
750
 
751
- .ha-image-grid--col-5 .ha-image-grid-item {
752
- width: 20%;
 
 
 
753
  }
754
 
755
- .ha-justified-gallery-item {
756
- border-radius: 6px;
757
- -webkit-transition: all .3s;
758
- transition: all .3s;
759
- }
760
- .ha-justified-gallery-item > img {
761
- width: 100%;
762
- -webkit-transition: all .25s !important;
763
- transition: all .25s !important;
764
- }
765
- .ha-justified-gallery-item:hover > img {
766
- -webkit-transform: scale(1.25);
767
- -ms-transform: scale(1.25);
768
- transform: scale(1.25);
769
  }
770
 
771
- .justified-gallery > a > .caption,
772
- .justified-gallery > div > .caption,
773
- .justified-gallery > figure > .caption {
774
- padding: 10px;
775
  }
776
 
777
- .justified-gallery > a > .caption,
778
- .justified-gallery > div > .caption,
779
- .justified-gallery > figure > .caption {
780
- bottom: -100px !important;
781
- -webkit-transition: all .25s !important;
782
- transition: all .25s !important;
783
- -webkit-animation: haSmoothReveal .3s forwards;
784
- animation: haSmoothReveal .3s forwards;
785
  }
786
 
787
- .justified-gallery > a > .caption.caption-visible,
788
- .justified-gallery > div > .caption.caption-visible,
789
- .justified-gallery > figure > .caption.caption-visible {
790
- bottom: 0 !important;
 
 
 
791
  }
792
 
793
- @-webkit-keyframes haSmoothReveal {
794
- 0% {
795
- -webkit-transform: translateY(100px);
796
- transform: translateY(100px);
797
- }
798
- to {
799
- -webkit-transform: translateY(0);
800
- transform: translateY(0);
801
- }
802
  }
803
 
804
- @keyframes haSmoothReveal {
805
- 0% {
806
- -webkit-transform: translateY(100px);
807
- transform: translateY(100px);
808
- }
809
- to {
810
- -webkit-transform: translateY(0);
811
- transform: translateY(0);
812
- }
813
  }
814
 
815
  .ha-skills > .elementor-widget-container {
@@ -922,27 +859,25 @@ span .ha-review-ratting--star:before,
922
  max-height: 100%;
923
  }
924
 
925
- .ha-logo-grid--col-2 .ha-logo-grid-item {
926
- width: calc(100% / 2);
927
- }
928
-
929
- .ha-logo-grid--col-3 .ha-logo-grid-item {
930
- width: calc(100% / 3);
931
- }
932
-
933
- .ha-logo-grid--col-4 .ha-logo-grid-item {
934
- width: calc(100% / 4);
935
- }
936
-
937
- .ha-logo-grid--col-5 .ha-logo-grid-item {
938
- width: calc(100% / 5);
939
- }
940
-
941
- .ha-logo-grid--col-6 .ha-logo-grid-item {
942
- width: calc(100% / 6);
943
  }
944
 
945
- @media (max-width: 1024px) {
946
  .ha-logo-grid--col--tablet2 .ha-logo-grid-item {
947
  width: calc(100% / 2);
948
  }
@@ -983,116 +918,105 @@ span .ha-review-ratting--star:before,
983
  border-style: solid;
984
  }
985
 
986
- .ha-logo-grid--tictactoe.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2n) {
987
- border-right-width: 0;
988
- }
989
-
990
- .ha-logo-grid--tictactoe.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(-n + 2) {
991
- border-top-width: 0;
992
- }
993
-
994
- .ha-logo-grid--tictactoe.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3n) {
995
- border-right-width: 0;
996
- }
997
-
998
- .ha-logo-grid--tictactoe.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(-n + 3) {
999
- border-top-width: 0;
1000
- }
1001
-
1002
- .ha-logo-grid--tictactoe.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4n) {
1003
- border-right-width: 0;
1004
- }
1005
-
1006
- .ha-logo-grid--tictactoe.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(-n + 4) {
1007
- border-top-width: 0;
1008
- }
1009
-
1010
- .ha-logo-grid--tictactoe.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5n) {
1011
- border-right-width: 0;
1012
- }
1013
-
1014
- .ha-logo-grid--tictactoe.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(-n + 5) {
1015
- border-top-width: 0;
1016
- }
1017
-
1018
- .ha-logo-grid--tictactoe.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6n) {
1019
- border-right-width: 0;
1020
- }
1021
-
1022
- .ha-logo-grid--tictactoe.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(-n + 6) {
1023
- border-top-width: 0;
1024
  }
1025
 
1026
- @media (max-width: 1024px) {
1027
  .ha-logo-grid--tictactoe.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(2n) {
1028
- border-right-width: 0;
1029
  }
1030
  .ha-logo-grid--tictactoe.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(-n + 2) {
1031
- border-top-width: 0;
1032
  }
1033
  .ha-logo-grid--tictactoe.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(3n) {
1034
- border-right-width: 0;
1035
  }
1036
  .ha-logo-grid--tictactoe.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(-n + 3) {
1037
- border-top-width: 0;
1038
  }
1039
  .ha-logo-grid--tictactoe.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(4n) {
1040
- border-right-width: 0;
1041
  }
1042
  .ha-logo-grid--tictactoe.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(-n + 4) {
1043
- border-top-width: 0;
1044
  }
1045
  .ha-logo-grid--tictactoe.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(5n) {
1046
- border-right-width: 0;
1047
  }
1048
  .ha-logo-grid--tictactoe.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(-n + 5) {
1049
- border-top-width: 0;
1050
  }
1051
  .ha-logo-grid--tictactoe.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(6n) {
1052
- border-right-width: 0;
1053
  }
1054
  .ha-logo-grid--tictactoe.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(-n + 6) {
1055
- border-top-width: 0;
1056
  }
1057
  }
1058
 
1059
  @media (max-width: 767px) {
1060
  .ha-logo-grid--tictactoe.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(2n) {
1061
- border-right-width: 0;
1062
  }
1063
  .ha-logo-grid--tictactoe.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(-n + 2) {
1064
- border-top-width: 0;
1065
  }
1066
  .ha-logo-grid--tictactoe.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(3n) {
1067
- border-right-width: 0;
1068
  }
1069
  .ha-logo-grid--tictactoe.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(-n + 3) {
1070
- border-top-width: 0;
1071
  }
1072
  .ha-logo-grid--tictactoe.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(4n) {
1073
- border-right-width: 0;
1074
  }
1075
  .ha-logo-grid--tictactoe.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(-n + 4) {
1076
- border-top-width: 0;
1077
  }
1078
  .ha-logo-grid--tictactoe.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(5n) {
1079
- border-right-width: 0;
1080
  }
1081
  .ha-logo-grid--tictactoe.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(-n + 5) {
1082
- border-top-width: 0;
1083
  }
1084
  .ha-logo-grid--tictactoe.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(6n) {
1085
- border-right-width: 0;
1086
  }
1087
  .ha-logo-grid--tictactoe.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(-n + 6) {
1088
- border-top-width: 0;
1089
  }
1090
  }
1091
 
1092
- .ha-logo-grid--border {
1093
- border-radius: .5rem;
1094
- }
1095
-
1096
  .ha-logo-grid--border .ha-logo-grid-item {
1097
  border-width: 0 2px 2px 0;
1098
  border-style: solid;
@@ -1104,87 +1028,70 @@ span .ha-review-ratting--star:before,
1104
  border-bottom-right-radius: 10px;
1105
  }
1106
 
1107
- .ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(-n + 2) {
1108
- border-top-width: 2px;
1109
- }
1110
-
1111
- .ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2n + 1) {
1112
- border-left-width: 2px;
1113
- }
1114
-
1115
- .ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2) {
1116
- border-top-right-radius: 10px;
1117
- }
1118
-
1119
- .ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-last-child(2) {
1120
- border-bottom-left-radius: 10px;
1121
- }
1122
-
1123
- .ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(-n + 3) {
1124
- border-top-width: 2px;
1125
- }
1126
-
1127
- .ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3n + 1) {
1128
- border-left-width: 2px;
1129
- }
1130
-
1131
- .ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3) {
1132
- border-top-right-radius: 10px;
1133
- }
1134
-
1135
- .ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-last-child(3) {
1136
- border-bottom-left-radius: 10px;
1137
- }
1138
-
1139
- .ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(-n + 4) {
1140
- border-top-width: 2px;
1141
- }
1142
-
1143
- .ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4n + 1) {
1144
- border-left-width: 2px;
1145
- }
1146
-
1147
- .ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4) {
1148
- border-top-right-radius: 10px;
1149
- }
1150
-
1151
- .ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-last-child(4) {
1152
- border-bottom-left-radius: 10px;
1153
- }
1154
-
1155
- .ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(-n + 5) {
1156
- border-top-width: 2px;
1157
- }
1158
-
1159
- .ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5n + 1) {
1160
- border-left-width: 2px;
1161
- }
1162
-
1163
- .ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5) {
1164
- border-top-right-radius: 10px;
1165
- }
1166
-
1167
- .ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-last-child(5) {
1168
- border-bottom-left-radius: 10px;
1169
- }
1170
-
1171
- .ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(-n + 6) {
1172
- border-top-width: 2px;
1173
- }
1174
-
1175
- .ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6n + 1) {
1176
- border-left-width: 2px;
1177
- }
1178
-
1179
- .ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6) {
1180
- border-top-right-radius: 10px;
1181
- }
1182
-
1183
- .ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-last-child(6) {
1184
- border-bottom-left-radius: 10px;
1185
  }
1186
 
1187
- @media (max-width: 1024px) {
1188
  .ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(-n + 2) {
1189
  border-top-width: 2px;
1190
  }
@@ -1321,27 +1228,25 @@ span .ha-review-ratting--star:before,
1321
  border-radius: .5rem;
1322
  }
1323
 
1324
- .ha-logo-grid--box.ha-logo-grid--col-2 .ha-logo-grid-item {
1325
- width: calc((100% / 2) - 1rem);
1326
- }
1327
-
1328
- .ha-logo-grid--box.ha-logo-grid--col-3 .ha-logo-grid-item {
1329
- width: calc((100% / 3) - 1rem);
1330
- }
1331
-
1332
- .ha-logo-grid--box.ha-logo-grid--col-4 .ha-logo-grid-item {
1333
- width: calc((100% / 4) - 1rem);
1334
- }
1335
-
1336
- .ha-logo-grid--box.ha-logo-grid--col-5 .ha-logo-grid-item {
1337
- width: calc((100% / 5) - 1rem);
1338
- }
1339
-
1340
- .ha-logo-grid--box.ha-logo-grid--col-6 .ha-logo-grid-item {
1341
- width: calc((100% / 6) - 1rem);
1342
  }
1343
 
1344
- @media (max-width: 1024px) {
1345
  .ha-logo-grid--box.ha-logo-grid--col--tablet2 .ha-logo-grid-item {
1346
  width: calc((100% / 2) - 1rem);
1347
  }
115
 
116
  .ha-card--top .ha-card-figure {
117
  display: inline-block;
118
+ width: 100%;
119
  }
120
 
121
  .ha-card--right > .elementor-widget-container,
572
  color: #fff;
573
  }
574
 
575
+ .ha-justified-gallery-item,
576
+ .ha-justified-gallery-item > img {
577
+ border-radius: 6px;
578
  }
579
 
580
+ .justified-gallery > .ha-justified-gallery-item > .caption {
581
+ bottom: -100px !important;
582
+ padding: 10px;
583
+ -webkit-transition: all .25s !important;
584
+ transition: all .25s !important;
585
+ -webkit-animation: haSmoothReveal .3s forwards;
586
+ animation: haSmoothReveal .3s forwards;
 
 
 
 
 
 
 
 
 
587
  }
588
+
589
+ .justified-gallery > .ha-justified-gallery-item > .caption.caption-visible {
590
+ bottom: 0 !important;
 
591
  }
592
+
593
+ .justified-gallery > .entry-visible > img,
594
+ .justified-gallery > .entry-visible > a > img {
595
+ -webkit-transition: all 300ms, opacity 500ms ease-in;
596
+ transition: all 300ms, opacity 500ms ease-in;
597
  }
598
+
599
+ @-webkit-keyframes haSmoothReveal {
600
+ from {
601
+ -webkit-transform: translateY(100px);
602
+ transform: translateY(100px);
603
+ }
604
+ to {
605
+ -webkit-transform: translateY(0);
606
+ transform: translateY(0);
607
+ }
608
  }
609
+
610
+ @keyframes haSmoothReveal {
611
+ from {
612
+ -webkit-transform: translateY(100px);
613
+ transform: translateY(100px);
614
+ }
615
+ to {
616
+ -webkit-transform: translateY(0);
617
+ transform: translateY(0);
618
+ }
619
  }
620
 
621
+ .ha-slider .slick-vertical .slick-slide,
622
+ .ha-carousel .slick-vertical .slick-slide {
623
+ border: 0;
 
 
 
 
 
 
 
 
624
  }
625
 
626
+ .ha-slider .slick-prev,
627
+ .ha-slider .slick-next,
628
+ .ha-carousel .slick-prev,
629
+ .ha-carousel .slick-next {
630
+ z-index: 999;
631
+ padding: 0;
632
+ border: 1px solid rgba(255, 255, 255, .8);
633
+ border-radius: 50%;
634
+ background-color: rgba(255, 255, 255, .8);
635
+ color: #8c8c8c;
636
+ text-align: center;
637
+ font-size: 12px;
638
+ opacity: 1;
639
  }
640
+ .ha-slider .slick-prev:hover,
641
+ .ha-slider .slick-prev:focus,
642
+ .ha-slider .slick-next:hover,
643
+ .ha-slider .slick-next:focus,
644
+ .ha-carousel .slick-prev:hover,
645
+ .ha-carousel .slick-prev:focus,
646
+ .ha-carousel .slick-next:hover,
647
+ .ha-carousel .slick-next:focus {
648
+ background-color: white;
649
+ }
650
+ .ha-slider .slick-prev:before,
651
+ .ha-slider .slick-next:before,
652
+ .ha-carousel .slick-prev:before,
653
+ .ha-carousel .slick-next:before {
654
  content: "";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
655
  }
656
+
657
+ .ha-slider .slick-disabled,
658
+ .ha-carousel .slick-disabled {
659
+ opacity: .7;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
660
  }
661
+
662
+ .ha-slider .slick-prev,
663
+ .ha-carousel .slick-prev {
664
+ left: 25px;
 
 
 
665
  }
666
+
667
+ .ha-slider .slick-next,
668
+ .ha-carousel .slick-next {
669
+ right: 25px;
670
  }
671
+
672
+ .ha-slider .slick-dots,
673
+ .ha-carousel .slick-dots {
674
+ bottom: -40px;
 
 
 
675
  }
676
+ .ha-slider .slick-dots li,
677
+ .ha-carousel .slick-dots li {
678
+ margin-right: 2px;
679
+ margin-left: 2px;
 
680
  }
681
+ .ha-slider .slick-dots li button:hover,
682
+ .ha-slider .slick-dots li button:focus,
683
+ .ha-carousel .slick-dots li button:hover,
684
+ .ha-carousel .slick-dots li button:focus {
685
+ background-color: transparent;
 
 
 
 
 
686
  }
687
+ .ha-slider .slick-dots li button:before,
688
+ .ha-carousel .slick-dots li button:before {
689
+ color: #1b1b1b;
690
+ opacity: 1;
691
  }
692
+ .ha-slider .slick-dots li button:hover:before,
693
+ .ha-slider .slick-dots .slick-active button:before,
694
+ .ha-carousel .slick-dots li button:hover:before,
695
+ .ha-carousel .slick-dots .slick-active button:before {
696
+ -webkit-transform: scale(1.5);
697
+ -ms-transform: scale(1.5);
698
+ transform: scale(1.5);
699
  }
700
 
701
+ .ha-carousel .slick-prev,
702
+ .ha-carousel .slick-next {
703
+ width: 40px;
704
+ height: 40px;
705
+ line-height: 40px;
706
  }
707
 
708
+ .ha-slider .slick-prev,
709
+ .ha-slider .slick-next {
710
+ width: 50px;
711
+ height: 50px;
712
+ line-height: 50px;
713
  }
714
 
715
+ .ha-carousel .slick-slider:not(.slick-vertical) .slick-slide {
716
+ padding-right: 5px;
717
+ padding-left: 5px;
 
 
 
 
 
 
 
 
 
 
 
718
  }
719
 
720
+ .ha-carousel .slick-slider.slick-vertical .slick-slide {
721
+ padding-top: 5px;
722
+ padding-bottom: 5px;
 
723
  }
724
 
725
+ .ha-slick-item {
726
+ position: relative;
727
+ overflow: hidden;
728
+ vertical-align: bottom;
 
 
 
 
729
  }
730
 
731
+ .ha-slick-content {
732
+ position: absolute;
733
+ bottom: 0;
734
+ padding: 1.5rem;
735
+ width: 100%;
736
+ background: -webkit-linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
737
+ background: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
738
  }
739
 
740
+ .ha-slick-title {
741
+ margin-top: 0;
742
+ margin-bottom: .2rem;
743
+ color: #fff;
744
+ font-size: 20px;
 
 
 
 
745
  }
746
 
747
+ .ha-slick-subtitle {
748
+ margin: 0;
749
+ color: #fff;
 
 
 
 
 
 
750
  }
751
 
752
  .ha-skills > .elementor-widget-container {
859
  max-height: 100%;
860
  }
861
 
862
+ @media (min-width: 1025px) {
863
+ .ha-logo-grid--col-2 .ha-logo-grid-item {
864
+ width: calc(100% / 2);
865
+ }
866
+ .ha-logo-grid--col-3 .ha-logo-grid-item {
867
+ width: calc(100% / 3);
868
+ }
869
+ .ha-logo-grid--col-4 .ha-logo-grid-item {
870
+ width: calc(100% / 4);
871
+ }
872
+ .ha-logo-grid--col-5 .ha-logo-grid-item {
873
+ width: calc(100% / 5);
874
+ }
875
+ .ha-logo-grid--col-6 .ha-logo-grid-item {
876
+ width: calc(100% / 6);
877
+ }
 
 
878
  }
879
 
880
+ @media (max-width: 1024px) and (min-width: 768px) {
881
  .ha-logo-grid--col--tablet2 .ha-logo-grid-item {
882
  width: calc(100% / 2);
883
  }
918
  border-style: solid;
919
  }
920
 
921
+ @media (min-width: 1025px) {
922
+ .ha-logo-grid--tictactoe.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2n) {
923
+ border-right-width: 0 !important;
924
+ }
925
+ .ha-logo-grid--tictactoe.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(-n + 2) {
926
+ border-top-width: 0 !important;
927
+ }
928
+ .ha-logo-grid--tictactoe.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3n) {
929
+ border-right-width: 0 !important;
930
+ }
931
+ .ha-logo-grid--tictactoe.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(-n + 3) {
932
+ border-top-width: 0 !important;
933
+ }
934
+ .ha-logo-grid--tictactoe.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4n) {
935
+ border-right-width: 0 !important;
936
+ }
937
+ .ha-logo-grid--tictactoe.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(-n + 4) {
938
+ border-top-width: 0 !important;
939
+ }
940
+ .ha-logo-grid--tictactoe.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5n) {
941
+ border-right-width: 0 !important;
942
+ }
943
+ .ha-logo-grid--tictactoe.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(-n + 5) {
944
+ border-top-width: 0 !important;
945
+ }
946
+ .ha-logo-grid--tictactoe.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6n) {
947
+ border-right-width: 0 !important;
948
+ }
949
+ .ha-logo-grid--tictactoe.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(-n + 6) {
950
+ border-top-width: 0 !important;
951
+ }
 
 
 
 
 
 
 
952
  }
953
 
954
+ @media (max-width: 1024px) and (min-width: 768px) {
955
  .ha-logo-grid--tictactoe.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(2n) {
956
+ border-right-width: 0 !important;
957
  }
958
  .ha-logo-grid--tictactoe.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(-n + 2) {
959
+ border-top-width: 0 !important;
960
  }
961
  .ha-logo-grid--tictactoe.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(3n) {
962
+ border-right-width: 0 !important;
963
  }
964
  .ha-logo-grid--tictactoe.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(-n + 3) {
965
+ border-top-width: 0 !important;
966
  }
967
  .ha-logo-grid--tictactoe.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(4n) {
968
+ border-right-width: 0 !important;
969
  }
970
  .ha-logo-grid--tictactoe.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(-n + 4) {
971
+ border-top-width: 0 !important;
972
  }
973
  .ha-logo-grid--tictactoe.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(5n) {
974
+ border-right-width: 0 !important;
975
  }
976
  .ha-logo-grid--tictactoe.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(-n + 5) {
977
+ border-top-width: 0 !important;
978
  }
979
  .ha-logo-grid--tictactoe.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(6n) {
980
+ border-right-width: 0 !important;
981
  }
982
  .ha-logo-grid--tictactoe.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(-n + 6) {
983
+ border-top-width: 0 !important;
984
  }
985
  }
986
 
987
  @media (max-width: 767px) {
988
  .ha-logo-grid--tictactoe.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(2n) {
989
+ border-right-width: 0 !important;
990
  }
991
  .ha-logo-grid--tictactoe.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(-n + 2) {
992
+ border-top-width: 0 !important;
993
  }
994
  .ha-logo-grid--tictactoe.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(3n) {
995
+ border-right-width: 0 !important;
996
  }
997
  .ha-logo-grid--tictactoe.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(-n + 3) {
998
+ border-top-width: 0 !important;
999
  }
1000
  .ha-logo-grid--tictactoe.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(4n) {
1001
+ border-right-width: 0 !important;
1002
  }
1003
  .ha-logo-grid--tictactoe.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(-n + 4) {
1004
+ border-top-width: 0 !important;
1005
  }
1006
  .ha-logo-grid--tictactoe.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(5n) {
1007
+ border-right-width: 0 !important;
1008
  }
1009
  .ha-logo-grid--tictactoe.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(-n + 5) {
1010
+ border-top-width: 0 !important;
1011
  }
1012
  .ha-logo-grid--tictactoe.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(6n) {
1013
+ border-right-width: 0 !important;
1014
  }
1015
  .ha-logo-grid--tictactoe.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(-n + 6) {
1016
+ border-top-width: 0 !important;
1017
  }
1018
  }
1019
 
 
 
 
 
1020
  .ha-logo-grid--border .ha-logo-grid-item {
1021
  border-width: 0 2px 2px 0;
1022
  border-style: solid;
1028
  border-bottom-right-radius: 10px;
1029
  }
1030
 
1031
+ @media (min-width: 1025px) {
1032
+ .ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(-n + 2) {
1033
+ border-top-width: 2px;
1034
+ }
1035
+ .ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2n + 1) {
1036
+ border-left-width: 2px;
1037
+ }
1038
+ .ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2) {
1039
+ border-top-right-radius: 10px;
1040
+ }
1041
+ .ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-last-child(2) {
1042
+ border-bottom-left-radius: 10px;
1043
+ }
1044
+ .ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(-n + 3) {
1045
+ border-top-width: 2px;
1046
+ }
1047
+ .ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3n + 1) {
1048
+ border-left-width: 2px;
1049
+ }
1050
+ .ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3) {
1051
+ border-top-right-radius: 10px;
1052
+ }
1053
+ .ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-last-child(3) {
1054
+ border-bottom-left-radius: 10px;
1055
+ }
1056
+ .ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(-n + 4) {
1057
+ border-top-width: 2px;
1058
+ }
1059
+ .ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4n + 1) {
1060
+ border-left-width: 2px;
1061
+ }
1062
+ .ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4) {
1063
+ border-top-right-radius: 10px;
1064
+ }
1065
+ .ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-last-child(4) {
1066
+ border-bottom-left-radius: 10px;
1067
+ }
1068
+ .ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(-n + 5) {
1069
+ border-top-width: 2px;
1070
+ }
1071
+ .ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5n + 1) {
1072
+ border-left-width: 2px;
1073
+ }
1074
+ .ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5) {
1075
+ border-top-right-radius: 10px;
1076
+ }
1077
+ .ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-last-child(5) {
1078
+ border-bottom-left-radius: 10px;
1079
+ }
1080
+ .ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(-n + 6) {
1081
+ border-top-width: 2px;
1082
+ }
1083
+ .ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6n + 1) {
1084
+ border-left-width: 2px;
1085
+ }
1086
+ .ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6) {
1087
+ border-top-right-radius: 10px;
1088
+ }
1089
+ .ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-last-child(6) {
1090
+ border-bottom-left-radius: 10px;
1091
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1092
  }
1093
 
1094
+ @media (max-width: 1024px) and (min-width: 768px) {
1095
  .ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(-n + 2) {
1096
  border-top-width: 2px;
1097
  }
1228
  border-radius: .5rem;
1229
  }
1230
 
1231
+ @media (min-width: 1025px) {
1232
+ .ha-logo-grid--box.ha-logo-grid--col-2 .ha-logo-grid-item {
1233
+ width: calc((100% / 2) - 1rem);
1234
+ }
1235
+ .ha-logo-grid--box.ha-logo-grid--col-3 .ha-logo-grid-item {
1236
+ width: calc((100% / 3) - 1rem);
1237
+ }
1238
+ .ha-logo-grid--box.ha-logo-grid--col-4 .ha-logo-grid-item {
1239
+ width: calc((100% / 4) - 1rem);
1240
+ }
1241
+ .ha-logo-grid--box.ha-logo-grid--col-5 .ha-logo-grid-item {
1242
+ width: calc((100% / 5) - 1rem);
1243
+ }
1244
+ .ha-logo-grid--box.ha-logo-grid--col-6 .ha-logo-grid-item {
1245
+ width: calc((100% / 6) - 1rem);
1246
+ }
 
 
1247
  }
1248
 
1249
+ @media (max-width: 1024px) and (min-width: 768px) {
1250
  .ha-logo-grid--box.ha-logo-grid--col--tablet2 .ha-logo-grid-item {
1251
  width: calc((100% / 2) - 1rem);
1252
  }
assets/css/main.min.css CHANGED
@@ -1 +1 @@
1
- .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-review>.elementor-widget-container{border-radius:.5rem;background-color:#fff;box-shadow:0 .2rem 2.8rem rgba(36,36,36,.1);word-wrap:break-word;overflow-wrap:break-word}.happy-addon,.happy-addon *{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-cf:after,.ha-cf:before,.ha-logo-grid-wrapper:after,.ha-logo-grid-wrapper:before{display:table;content:" "}.ha-cf:after,.ha-logo-grid-wrapper:after{clear:both}.ha-btn{display:inline-block;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{-webkit-transition:all .3s;transition:all .3s}.ha-btn-icon+.ha-btn-text,.ha-btn-text+.ha-btn-icon{margin-left:5px}.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,.ha-member-links>a{display:inline-block}.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-badge{padding:.475rem 1.1rem;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-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-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{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:#287dfe;color:#fff}.ha-review-ratting--star{display:inline-block;color:#ffbf36;font-family:"Fontawesome"}.ha-review-ratting--star>span{position:relative;overflow:hidden;height:1em}.ha-review-ratting--star span>span{position:absolute;top:0;left:0;overflow:hidden;padding-top:1.5em}.ha-review-ratting--star span>span:before,span .ha-review-ratting--star:before{position:absolute;top:0;left:0}.ha-review-ratting--star span:before{content:"\f006\f006\f006\f006\f006"}.ha-review-ratting--star span>span:before{content:"\f005\f005\f005\f005\f005"}.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{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}.ha-gallery-filter>li:not(:last-child){margin-right:10px}.ha-gallery-filter>li>button{display:block;padding:10px 25px;border:2px solid #562dd4;border-radius:.25rem;background-color:transparent;color:#562dd4;text-transform:uppercase;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-link{position:relative;display:block;overflow:hidden;margin:10px;text-decoration:none}.ha-image-grid-link:focus{outline:none}.ha-image-grid-link img{vertical-align:bottom;-webkit-transition:-webkit-transform .25s linear;transition:transform .25s linear;transition:transform .25s linear,-webkit-transform .25s linear}.ha-image-grid-link:hover img,.ha-justified-gallery-item:hover>img{-webkit-transform:scale(1.25);-ms-transform:scale(1.25);transform:scale(1.25)}.ha-image-grid-link:hover .ha-image-grid-content,.ha-image-grid-link:hover .ha-image-grid-overlay{opacity:1}.ha-image-grid-link:hover .ha-image-grid-content:before{width:80px}.ha-image-grid-content,.ha-image-grid-overlay{position:absolute;opacity:0;-webkit-transition:opacity .5s;transition:opacity .5s}.ha-image-grid-overlay{top:0;right:0;bottom:0;left:0;padding:30px;background-color:rgba(0,0,0,.8)}.ha-image-grid-content{width:100%;color:#fff;font-size:16px}.ha-image-grid-content:before{position:absolute;top:-15px;width:35px;height:1px;background:#fe413b;content:"";-webkit-transition:all .3s;transition:all .3s}.ha-image-grid-content--topleft{top:2.9rem;left:2rem;text-align:left}.ha-image-grid-content--topleft:before{left:0}.ha-image-grid-content--topcenter{top:2.9rem;text-align:center}.ha-image-grid-content--topcenter,.ha-image-grid-content--topcenter:before{left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-image-grid-content--topright{top:2.9rem;right:2rem;text-align:right}.ha-image-grid-content--topright:before{right:0}.ha-image-grid-content--bottomleft{bottom:2rem;left:2rem;text-align:left}.ha-image-grid-content--bottomleft:before{left:0}.ha-image-grid-content--bottomcenter{bottom:2rem;text-align:center}.ha-image-grid-content--bottomcenter,.ha-image-grid-content--bottomcenter:before{left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-image-grid-content--bottomright{right:2rem;bottom:2rem;text-align:right}.ha-image-grid-content--bottomright:before{right:0}.ha-image-grid-content--middleleft{top:50%;left:2rem;text-align:left;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.ha-image-grid-content--middleleft:before{left:0}.ha-image-grid-content--middlecenter{top:50%;text-align:center}.ha-image-grid-content--middlecenter,.ha-image-grid-content--middlecenter:before{left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-image-grid-content--middleright{top:50%;right:2rem;text-align:right;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.ha-image-grid-content--middleright:before{right:0}.ha-image-grid--col-2 .ha-image-grid-item{width:50%}.ha-image-grid--col-3 .ha-image-grid-item{width:33.33%}.ha-image-grid--col-4 .ha-image-grid-item{width:25%}.ha-image-grid--col-5 .ha-image-grid-item{width:20%}.ha-justified-gallery-item{border-radius:6px;-webkit-transition:all .3s;transition:all .3s}.ha-justified-gallery-item>img{width:100%;-webkit-transition:all .25s!important;transition:all .25s!important}.justified-gallery>a>.caption,.justified-gallery>div>.caption,.justified-gallery>figure>.caption{padding:10px;bottom:-100px!important;-webkit-transition:all .25s!important;transition:all .25s!important;-webkit-animation:haSmoothReveal .3s forwards;animation:haSmoothReveal .3s forwards}.justified-gallery>a>.caption.caption-visible,.justified-gallery>div>.caption.caption-visible,.justified-gallery>figure>.caption.caption-visible{bottom:0!important}@-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-skills>.elementor-widget-container{padding-top:1px}.ha-skill{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;background-color:#e9ecef;font-size:.75rem}.ha-skill--inside .ha-skill-info,.ha-skill--outside .ha-skill-info{text-align:left;font-size:14px}.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{overflow:hidden;height:30px;border-radius:.3rem}.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;background-color:#007bff;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-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%}.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){.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}.ha-logo-grid--tictactoe.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:0}@media (max-width:1024px){.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(2n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(3n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(4n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(5n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(6n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:0}}@media (max-width:767px){.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(2n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(3n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(4n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(5n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(6n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:0}}.ha-logo-grid--border{border-radius:.5rem}.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}.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){.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}.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){.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-button>.elementor-widget-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.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;color:#fff;text-decoration:none;font-size:14px}.ha-dual-btn--left{border-top-left-radius:50px;border-bottom-left-radius:50px;background-color:#562dd4}.ha-dual-btn--left:focus,.ha-dual-btn--left:hover{background-color:#4423ab}.ha-dual-btn--right{border-top-right-radius:50px;border-bottom-right-radius:50px;background-color:#e2498a}.ha-dual-btn--right:focus,.ha-dual-btn--right:hover{background-color:#d6226e}.ha-dual-btn-connector{position:absolute!important;top:50%;right:0;z-index:9;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--before{margin-right:5px}.ha-dual-btn-icon--after{margin-left:5px}.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-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.ha-testimonial__reviewer-thumb{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}.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-testimonial--center{text-align:center}.ha-number-body .ha-number-border{position:relative;display:-webkit-flex;display:-webkit-box;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:#c36;color:#fff;text-align:center;font-size:20px}.ha-number-body .ha-number-border .ha-number-border-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.ha-number-body .ha-number-border span{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}
1
+ .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-review>.elementor-widget-container{border-radius:.5rem;background-color:#fff;box-shadow:0 .2rem 2.8rem rgba(36,36,36,.1);word-wrap:break-word;overflow-wrap:break-word}.happy-addon,.happy-addon *{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-cf:after,.ha-cf:before,.ha-logo-grid-wrapper:after,.ha-logo-grid-wrapper:before{display:table;content:" "}.ha-cf:after,.ha-logo-grid-wrapper:after{clear:both}.ha-btn{display:inline-block;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{-webkit-transition:all .3s;transition:all .3s}.ha-btn-icon+.ha-btn-text,.ha-btn-text+.ha-btn-icon{margin-left:5px}.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-badge{padding:.475rem 1.1rem;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-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-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:#287dfe;color:#fff}.ha-review-ratting--star{display:inline-block;color:#ffbf36;font-family:"Fontawesome"}.ha-review-ratting--star>span{position:relative;overflow:hidden;height:1em}.ha-review-ratting--star span>span{position:absolute;top:0;left:0;overflow:hidden;padding-top:1.5em}.ha-review-ratting--star span>span:before,span .ha-review-ratting--star:before{position:absolute;top:0;left:0}.ha-review-ratting--star span:before{content:"\f006\f006\f006\f006\f006"}.ha-review-ratting--star span>span:before{content:"\f005\f005\f005\f005\f005"}.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{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}.ha-gallery-filter>li:not(:last-child){margin-right:10px}.ha-gallery-filter>li>button{display:block;padding:10px 25px;border:2px solid #562dd4;border-radius:.25rem;background-color:transparent;color:#562dd4;text-transform:uppercase;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-justified-gallery-item,.ha-justified-gallery-item>img{border-radius:6px}.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}.justified-gallery>.ha-justified-gallery-item>.caption.caption-visible{bottom:0!important}.justified-gallery>.entry-visible>a>img,.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;background-color:#e9ecef;font-size:.75rem}.ha-skill--inside .ha-skill-info,.ha-skill--outside .ha-skill-info{text-align:left;font-size:14px}.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{overflow:hidden;height:30px;border-radius:.3rem}.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;background-color:#007bff;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-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-button>.elementor-widget-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.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;color:#fff;text-decoration:none;font-size:14px}.ha-dual-btn--left{border-top-left-radius:50px;border-bottom-left-radius:50px;background-color:#562dd4}.ha-dual-btn--left:focus,.ha-dual-btn--left:hover{background-color:#4423ab}.ha-dual-btn--right{border-top-right-radius:50px;border-bottom-right-radius:50px;background-color:#e2498a}.ha-dual-btn--right:focus,.ha-dual-btn--right:hover{background-color:#d6226e}.ha-dual-btn-connector{position:absolute!important;top:50%;right:0;z-index:9;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--before{margin-right:5px}.ha-dual-btn-icon--after{margin-left:5px}.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-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.ha-testimonial__reviewer-thumb{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}.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-testimonial--center{text-align:center}.ha-number-body .ha-number-border{position:relative;display:-webkit-flex;display:-webkit-box;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:#c36;color:#fff;text-align:center;font-size:20px}.ha-number-body .ha-number-border .ha-number-border-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.ha-number-body .ha-number-border span{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}
assets/js/happy-addons.js CHANGED
@@ -152,14 +152,109 @@ window.Happy = window.Happy || {};
152
  }
153
  });
154
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
155
  elementorFrontend.hooks.addAction(
156
  'frontend/element_ready/ha-image-compare.default',
157
  Happy.initImageComparison
158
  );
 
159
  elementorFrontend.hooks.addAction(
160
  'frontend/element_ready/ha-justified-gallery.default',
161
  Happy.initJustifiedGallery
162
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
163
  elementorFrontend.hooks.addAction(
164
  'frontend/element_ready/widget',
165
  function($scope) {
152
  }
153
  });
154
 
155
+ var Slick = elementorModules.frontend.handlers.Base.extend({
156
+ onInit: function () {
157
+ elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
158
+ this.$container = this.$element.find('.hajs-slick');
159
+ this.run();
160
+ },
161
+
162
+ isCarousel: function() {
163
+ return this.$element.hasClass('ha-carousel');
164
+ },
165
+
166
+ getDefaultSettings: function() {
167
+ return {
168
+ arrows: false,
169
+ dots: false,
170
+ checkVisible: false,
171
+ infinite: true,
172
+ slidesToShow: this.isCarousel() ? 3 : 1,
173
+ rows: 0,
174
+ prevArrow: '<button type="button" class="slick-prev"><i class="fa fa-chevron-left"></i></button>',
175
+ nextArrow: '<button type="button" class="slick-next"><i class="fa fa-chevron-right"></i></button>',
176
+ }
177
+ },
178
+
179
+ onElementChange: function() {
180
+ this.$container.slick('unslick');
181
+ this.run();
182
+ },
183
+
184
+ getReadySettings: function() {
185
+ var settings = {
186
+ infinite: !! this.getElementSettings('loop'),
187
+ autoplay: !! this.getElementSettings('autoplay'),
188
+ autoplaySpeed: this.getElementSettings('autoplay_speed'),
189
+ speed: this.getElementSettings('animation_speed'),
190
+ centerMode: !! this.getElementSettings('center'),
191
+ vertical: !! this.getElementSettings('vertical'),
192
+ slidesToScroll: 1,
193
+ };
194
+
195
+ switch (this.getElementSettings('navigation')) {
196
+ case 'arrow':
197
+ settings.arrows = true;
198
+ break;
199
+ case 'dots':
200
+ settings.dots = true;
201
+ break;
202
+ case 'both':
203
+ settings.arrows = true;
204
+ settings.dots = true;
205
+ break;
206
+ }
207
+
208
+ if (this.isCarousel()) {
209
+ settings.slidesToShow = this.getElementSettings('slides_to_show') || 3;
210
+ settings.responsive = [
211
+ {
212
+ breakpoint: elementorFrontend.config.breakpoints.lg,
213
+ settings: {
214
+ slidesToShow: (this.getElementSettings('slides_to_show_tablet') || settings.slidesToShow),
215
+ }
216
+ },
217
+ {
218
+ breakpoint: elementorFrontend.config.breakpoints.md,
219
+ settings: {
220
+ slidesToShow: (this.getElementSettings('slides_to_show_mobile') || this.getElementSettings('slides_to_show_tablet')) || settings.slidesToShow,
221
+ }
222
+ }
223
+ ];
224
+ }
225
+
226
+ return $.extend({}, this.getDefaultSettings(), settings);
227
+ },
228
+
229
+ run: function() {
230
+ this.$container.slick(this.getReadySettings());
231
+ }
232
+ });
233
+
234
  elementorFrontend.hooks.addAction(
235
  'frontend/element_ready/ha-image-compare.default',
236
  Happy.initImageComparison
237
  );
238
+
239
  elementorFrontend.hooks.addAction(
240
  'frontend/element_ready/ha-justified-gallery.default',
241
  Happy.initJustifiedGallery
242
  );
243
+
244
+ elementorFrontend.hooks.addAction(
245
+ 'frontend/element_ready/ha-slider.default',
246
+ function($scope) {
247
+ elementorFrontend.elementsHandler.addHandler(Slick, {$element: $scope});
248
+ }
249
+ );
250
+
251
+ elementorFrontend.hooks.addAction(
252
+ 'frontend/element_ready/ha-carousel.default',
253
+ function($scope) {
254
+ elementorFrontend.elementsHandler.addHandler(Slick, {$element: $scope});
255
+ }
256
+ );
257
+
258
  elementorFrontend.hooks.addAction(
259
  'frontend/element_ready/widget',
260
  function($scope) {
assets/js/happy-addons.min.js CHANGED
@@ -1 +1 @@
1
- "use strict";window.Happy=window.Happy||{},function(t,e,i){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"))})}var s=t(i);t.fn.getHappySettings=function(){return this.data("happy-settings")},e.initImageComparison=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)})},e.initJustifiedGallery=function(e){var i=e.find(".hajs-justified-gallery"),s=i.getHappySettings();i.justifiedGallery(t.extend({},{rowHeight:150,lastRow:"justify",margins:10},s)),n(e,function(t){i.justifiedGallery({lastRow:"*"===t?s.lastRow:"nojustify",filter:t})})},s.on("elementor/frontend/init",function(){var t=elementorModules.frontend.handlers.Base.extend({onInit:function(){elementorModules.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.$container=this.$element.find(".elementor-widget-container")[0],this.run()},getDefaultSettings:function(){return{targets:this.$container,loop:!0,direction:"alternate",easing:"easeInOutSine"}},onElementChange:function(){this.animation&&this.animation.restart(),this.run()},getConfig:function(t){return this.getElementSettings("ha_floating_fx_"+t)},run: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.$container.style.setProperty("will-change","transform"),this.animation=anime(t))}});elementorFrontend.hooks.addAction("frontend/element_ready/ha-image-compare.default",e.initImageComparison),elementorFrontend.hooks.addAction("frontend/element_ready/ha-justified-gallery.default",e.initJustifiedGallery),elementorFrontend.hooks.addAction("frontend/element_ready/widget",function(e){elementorFrontend.elementsHandler.addHandler(t,{$element:e})})})}(jQuery,Happy,window);
1
+ "use strict";window.Happy=window.Happy||{},function(t,e,i){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"))})}var s=t(i);t.fn.getHappySettings=function(){return this.data("happy-settings")},e.initImageComparison=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)})},e.initJustifiedGallery=function(e){var i=e.find(".hajs-justified-gallery"),s=i.getHappySettings();i.justifiedGallery(t.extend({},{rowHeight:150,lastRow:"justify",margins:10},s)),n(e,function(t){i.justifiedGallery({lastRow:"*"===t?s.lastRow:"nojustify",filter:t})})},s.on("elementor/frontend/init",function(){var i=elementorModules.frontend.handlers.Base.extend({onInit:function(){elementorModules.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.$container=this.$element.find(".elementor-widget-container")[0],this.run()},getDefaultSettings:function(){return{targets:this.$container,loop:!0,direction:"alternate",easing:"easeInOutSine"}},onElementChange:function(){this.animation&&this.animation.restart(),this.run()},getConfig:function(t){return this.getElementSettings("ha_floating_fx_"+t)},run: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.$container.style.setProperty("will-change","transform"),this.animation=anime(t))}}),n=elementorModules.frontend.handlers.Base.extend({onInit:function(){elementorModules.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 e={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":e.arrows=!0;break;case"dots":e.dots=!0;break;case"both":e.arrows=!0,e.dots=!0}return this.isCarousel()&&(e.slidesToShow=this.getElementSettings("slides_to_show")||3,e.responsive=[{breakpoint:elementorFrontend.config.breakpoints.lg,settings:{slidesToShow:this.getElementSettings("slides_to_show_tablet")||e.slidesToShow}},{breakpoint:elementorFrontend.config.breakpoints.md,settings:{slidesToShow:this.getElementSettings("slides_to_show_mobile")||this.getElementSettings("slides_to_show_tablet")||e.slidesToShow}}]),t.extend({},this.getDefaultSettings(),e)},run:function(){this.$container.slick(this.getReadySettings())}});elementorFrontend.hooks.addAction("frontend/element_ready/ha-image-compare.default",e.initImageComparison),elementorFrontend.hooks.addAction("frontend/element_ready/ha-justified-gallery.default",e.initJustifiedGallery),elementorFrontend.hooks.addAction("frontend/element_ready/ha-slider.default",function(t){elementorFrontend.elementsHandler.addHandler(n,{$element:t})}),elementorFrontend.hooks.addAction("frontend/element_ready/ha-carousel.default",function(t){elementorFrontend.elementsHandler.addHandler(n,{$element:t})}),elementorFrontend.hooks.addAction("frontend/element_ready/widget",function(t){elementorFrontend.elementsHandler.addHandler(i,{$element:t})})})}(jQuery,Happy,window);
assets/vendor/slick/ajax-loader.gif ADDED
Binary file
assets/vendor/slick/fonts/slick.eot ADDED
Binary file
assets/vendor/slick/fonts/slick.svg ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
+ <svg xmlns="http://www.w3.org/2000/svg">
4
+ <metadata>Generated by Fontastic.me</metadata>
5
+ <defs>
6
+ <font id="slick" horiz-adv-x="512">
7
+ <font-face font-family="slick" units-per-em="512" ascent="480" descent="-32"/>
8
+ <missing-glyph horiz-adv-x="512" />
9
+
10
+ <glyph unicode="&#8594;" d="M241 113l130 130c4 4 6 8 6 13 0 5-2 9-6 13l-130 130c-3 3-7 5-12 5-5 0-10-2-13-5l-29-30c-4-3-6-7-6-12 0-5 2-10 6-13l87-88-87-88c-4-3-6-8-6-13 0-5 2-9 6-12l29-30c3-3 8-5 13-5 5 0 9 2 12 5z m234 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
11
+ <glyph unicode="&#8592;" d="M296 113l29 30c4 3 6 7 6 12 0 5-2 10-6 13l-87 88 87 88c4 3 6 8 6 13 0 5-2 9-6 12l-29 30c-3 3-8 5-13 5-5 0-9-2-12-5l-130-130c-4-4-6-8-6-13 0-5 2-9 6-13l130-130c3-3 7-5 12-5 5 0 10 2 13 5z m179 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
12
+ <glyph unicode="&#8226;" d="M475 256c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
13
+ <glyph unicode="&#97;" d="M475 439l0-128c0-5-1-9-5-13-4-4-8-5-13-5l-128 0c-8 0-13 3-17 11-3 7-2 14 4 20l40 39c-28 26-62 39-100 39-20 0-39-4-57-11-18-8-33-18-46-32-14-13-24-28-32-46-7-18-11-37-11-57 0-20 4-39 11-57 8-18 18-33 32-46 13-14 28-24 46-32 18-7 37-11 57-11 23 0 44 5 64 15 20 9 38 23 51 42 2 1 4 3 7 3 3 0 5-1 7-3l39-39c2-2 3-3 3-6 0-2-1-4-2-6-21-25-46-45-76-59-29-14-60-20-93-20-30 0-58 5-85 17-27 12-51 27-70 47-20 19-35 43-47 70-12 27-17 55-17 85 0 30 5 58 17 85 12 27 27 51 47 70 19 20 43 35 70 47 27 12 55 17 85 17 28 0 55-5 81-15 26-11 50-26 70-45l37 37c6 6 12 7 20 4 8-4 11-9 11-17z"/>
14
+ </font></defs></svg>
assets/vendor/slick/fonts/slick.ttf ADDED
Binary file
assets/vendor/slick/fonts/slick.woff ADDED
Binary file
assets/vendor/slick/slick-theme.css ADDED
@@ -0,0 +1,169 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @charset "UTF-8";
2
+ /* Slider */
3
+ .slick-loading .slick-list {
4
+ background: #fff url("./ajax-loader.gif") center center no-repeat;
5
+ }
6
+
7
+ /* Icons */
8
+ @font-face {
9
+ font-family: "slick";
10
+ src: url("./fonts/slick.eot");
11
+ src: url("./fonts/slick.eot?#iefix") format("embedded-opentype"), url("./fonts/slick.woff") format("woff"), url("./fonts/slick.ttf") format("truetype"), url("./fonts/slick.svg#slick") format("svg");
12
+ font-weight: normal;
13
+ font-style: normal;
14
+ }
15
+
16
+ /* Arrows */
17
+ .slick-prev,
18
+ .slick-next {
19
+ position: absolute;
20
+ display: block;
21
+ height: 20px;
22
+ width: 20px;
23
+ line-height: 0px;
24
+ font-size: 0px;
25
+ cursor: pointer;
26
+ background: transparent;
27
+ color: transparent;
28
+ top: 50%;
29
+ -webkit-transform: translate(0, -50%);
30
+ transform: translate(0, -50%);
31
+ padding: 0;
32
+ border: none;
33
+ outline: none;
34
+ }
35
+
36
+ .slick-prev:hover, .slick-prev:focus,
37
+ .slick-next:hover,
38
+ .slick-next:focus {
39
+ outline: none;
40
+ background: transparent;
41
+ color: transparent;
42
+ }
43
+
44
+ .slick-prev:hover:before, .slick-prev:focus:before,
45
+ .slick-next:hover:before,
46
+ .slick-next:focus:before {
47
+ opacity: 1;
48
+ }
49
+
50
+ .slick-prev.slick-disabled:before,
51
+ .slick-next.slick-disabled:before {
52
+ opacity: 0.25;
53
+ }
54
+
55
+ .slick-prev:before,
56
+ .slick-next:before {
57
+ font-family: "slick";
58
+ font-size: 20px;
59
+ line-height: 1;
60
+ color: white;
61
+ opacity: 0.75;
62
+ -webkit-font-smoothing: antialiased;
63
+ -moz-osx-font-smoothing: grayscale;
64
+ }
65
+
66
+ .slick-prev {
67
+ left: -25px;
68
+ }
69
+
70
+ [dir="rtl"] .slick-prev {
71
+ left: auto;
72
+ right: -25px;
73
+ }
74
+
75
+ .slick-prev:before {
76
+ content: "←";
77
+ }
78
+
79
+ [dir="rtl"] .slick-prev:before {
80
+ content: "→";
81
+ }
82
+
83
+ .slick-next {
84
+ right: -25px;
85
+ }
86
+
87
+ [dir="rtl"] .slick-next {
88
+ left: -25px;
89
+ right: auto;
90
+ }
91
+
92
+ .slick-next:before {
93
+ content: "→";
94
+ }
95
+
96
+ [dir="rtl"] .slick-next:before {
97
+ content: "←";
98
+ }
99
+
100
+ /* Dots */
101
+ .slick-dotted.slick-slider {
102
+ margin-bottom: 30px;
103
+ }
104
+
105
+ .slick-dots {
106
+ position: absolute;
107
+ bottom: -25px;
108
+ list-style: none;
109
+ display: block;
110
+ text-align: center;
111
+ padding: 0;
112
+ margin: 0;
113
+ width: 100%;
114
+ }
115
+
116
+ .slick-dots li {
117
+ position: relative;
118
+ display: inline-block;
119
+ height: 20px;
120
+ width: 20px;
121
+ margin: 0 5px;
122
+ padding: 0;
123
+ cursor: pointer;
124
+ }
125
+
126
+ .slick-dots li button {
127
+ border: 0;
128
+ background: transparent;
129
+ display: block;
130
+ height: 20px;
131
+ width: 20px;
132
+ outline: none;
133
+ line-height: 0px;
134
+ font-size: 0px;
135
+ color: transparent;
136
+ padding: 5px;
137
+ cursor: pointer;
138
+ }
139
+
140
+ .slick-dots li button:hover, .slick-dots li button:focus {
141
+ outline: none;
142
+ }
143
+
144
+ .slick-dots li button:hover:before, .slick-dots li button:focus:before {
145
+ opacity: 1;
146
+ }
147
+
148
+ .slick-dots li button:before {
149
+ position: absolute;
150
+ top: 0;
151
+ left: 0;
152
+ content: "•";
153
+ width: 20px;
154
+ height: 20px;
155
+ font-family: "slick";
156
+ font-size: 6px;
157
+ line-height: 20px;
158
+ text-align: center;
159
+ color: black;
160
+ opacity: 0.25;
161
+ -webkit-font-smoothing: antialiased;
162
+ -moz-osx-font-smoothing: grayscale;
163
+ }
164
+
165
+ .slick-dots li.slick-active button:before {
166
+ color: black;
167
+ opacity: 0.75;
168
+ }
169
+ /*# sourceMappingURL=slick-theme.css.map */
assets/vendor/slick/slick-theme.css.map ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "version": 3,
3
+ "mappings": ";AAyCA,YAAY;AAGR,AAAA,cAAc,CADlB,WAAW,CACU;EACb,UAAU,EAAE,IAAI,CAjBR,wBAA8B,CAiBc,MAAM,CAAC,MAAM,CAAC,SAAS;CAC9E;;AAGL,WAAW;AAEP,UAAU;EACN,WAAW,EAAE,OAAO;EACpB,GAAG,EAhBK,wBAA4B;EAiBpC,GAAG,EAjBK,+BAA4B,CAiBI,2BAA2B,EAjB3D,yBAA4B,CAiB8D,cAAc,EAjBxG,wBAA4B,CAiB0G,kBAAkB,EAjBxJ,8BAA4B,CAiBgK,aAAa;EACjN,WAAW,EAAE,MAAM;EACnB,UAAU,EAAE,MAAM;;;AAI1B,YAAY;AAEZ,AAAA,WAAW;AACX,WAAW,CAAC;EACR,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,KAAK;EACd,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,WAAW,EAAE,GAAG;EAChB,SAAS,EAAE,GAAG;EACd,MAAM,EAAE,OAAO;EACf,UAAU,EAAE,WAAW;EACvB,KAAK,EAAE,WAAW;EAClB,GAAG,EAAE,GAAG;EACR,iBAAiB,EAAE,kBAAkB;EACrC,aAAa,EAAE,kBAAkB;EACjC,SAAS,EAAE,kBAAkB;EAC7B,OAAO,EAAE,CAAC;EACV,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,IAAI;CAqBhB;;AAtCD,AAkBI,WAlBO,AAkBN,MAAM,EAlBX,WAAW,AAkBG,MAAM;AAjBpB,WAAW,AAiBN,MAAM;AAjBX,WAAW,AAiBG,MAAM,CAAC;EACb,OAAO,EAAE,IAAI;EACb,UAAU,EAAE,WAAW;EACvB,KAAK,EAAE,WAAW;CAIrB;;AAzBL,AAsBQ,WAtBG,AAkBN,MAAM,AAIF,OAAO,EAtBhB,WAAW,AAkBG,MAAM,AAIX,OAAO;AArBhB,WAAW,AAiBN,MAAM,AAIF,OAAO;AArBhB,WAAW,AAiBG,MAAM,AAIX,OAAO,CAAC;EACL,OAAO,EAjEM,CAAC;CAkEjB;;AAxBT,AA0BI,WA1BO,AA0BN,eAAe,AAAA,OAAO;AAzB3B,WAAW,AAyBN,eAAe,AAAA,OAAO,CAAC;EACpB,OAAO,EApEY,IAAI;CAqE1B;;AA5BL,AA6BI,WA7BO,AA6BN,OAAO;AA5BZ,WAAW,AA4BN,OAAO,CAAC;EACL,WAAW,EAlFC,OAAO;EAmFnB,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,CAAC;EACd,KAAK,EAnFO,KAAK;EAoFjB,OAAO,EA7ES,IAAI;EA8EpB,sBAAsB,EAAE,WAAW;EACnC,uBAAuB,EAAE,SAAS;CACrC;;AAGL,AAAA,WAAW,CAAC;EACR,IAAI,EAAE,KAAK;CAWd;;CAVG,AAAA,AAAA,GAAC,CAAI,KAAK,AAAT,EAFL,WAAW,CAEO;EACV,IAAI,EAAE,IAAI;EACV,KAAK,EAAE,KAAK;CACf;;AALL,AAMI,WANO,AAMN,OAAO,CAAC;EACL,OAAO,EA9FQ,IAAO;CAkGzB;;CAHG,AAAA,AAAA,GAAC,CAAI,KAAK,AAAT,EART,WAAW,AAMN,OAAO,CAEU;EACV,OAAO,EA/FI,IAAO;CAgGrB;;AAIT,AAAA,WAAW,CAAC;EACR,KAAK,EAAE,KAAK;CAWf;;CAVG,AAAA,AAAA,GAAC,CAAI,KAAK,AAAT,EAFL,WAAW,CAEO;EACV,IAAI,EAAE,KAAK;EACX,KAAK,EAAE,IAAI;CACd;;AALL,AAMI,WANO,AAMN,OAAO,CAAC;EACL,OAAO,EA3GQ,IAAO;CA+GzB;;CAHG,AAAA,AAAA,GAAC,CAAI,KAAK,AAAT,EART,WAAW,AAMN,OAAO,CAEU;EACV,OAAO,EA9GI,IAAO;CA+GrB;;AAIT,UAAU;AAEV,AAAA,aAAa,AAAA,aAAa,CAAC;EACvB,aAAa,EAAE,IAAI;CACtB;;AAED,AAAA,WAAW,CAAC;EACR,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,KAAK;EACb,UAAU,EAAE,IAAI;EAChB,OAAO,EAAE,KAAK;EACd,UAAU,EAAE,MAAM;EAClB,OAAO,EAAE,CAAC;EACV,MAAM,EAAE,CAAC;EACT,KAAK,EAAE,IAAI;CAiDd;;AAzDD,AASI,WATO,CASP,EAAE,CAAC;EACC,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,YAAY;EACrB,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,KAAK;EACb,OAAO,EAAE,CAAC;EACV,MAAM,EAAE,OAAO;CAwClB;;AAxDL,AAiBQ,WAjBG,CASP,EAAE,CAQE,MAAM,CAAC;EACH,MAAM,EAAE,CAAC;EACT,UAAU,EAAE,WAAW;EACvB,OAAO,EAAE,KAAK;EACd,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,IAAI;EACb,WAAW,EAAE,GAAG;EAChB,SAAS,EAAE,GAAG;EACd,KAAK,EAAE,WAAW;EAClB,OAAO,EAAE,GAAG;EACZ,MAAM,EAAE,OAAO;CAuBlB;;AAnDT,AA6BY,WA7BD,CASP,EAAE,CAQE,MAAM,AAYD,MAAM,EA7BnB,WAAW,CASP,EAAE,CAQE,MAAM,AAYQ,MAAM,CAAC;EACb,OAAO,EAAE,IAAI;CAIhB;;AAlCb,AA+BgB,WA/BL,CASP,EAAE,CAQE,MAAM,AAYD,MAAM,AAEF,OAAO,EA/BxB,WAAW,CASP,EAAE,CAQE,MAAM,AAYQ,MAAM,AAEX,OAAO,CAAC;EACL,OAAO,EApJF,CAAC;CAqJT;;AAjCjB,AAmCY,WAnCD,CASP,EAAE,CAQE,MAAM,AAkBD,OAAO,CAAC;EACL,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,CAAC;EACP,OAAO,EA9JD,IAAO;EA+Jb,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,WAAW,EAxKP,OAAO;EAyKX,SAAS,EAjKR,GAAG;EAkKJ,WAAW,EAAE,IAAI;EACjB,UAAU,EAAE,MAAM;EAClB,KAAK,EAzKH,KAAK;EA0KP,OAAO,EAlKI,IAAI;EAmKf,sBAAsB,EAAE,WAAW;EACnC,uBAAuB,EAAE,SAAS;CACrC;;AAlDb,AAoDQ,WApDG,CASP,EAAE,AA2CG,aAAa,CAAC,MAAM,AAAA,OAAO,CAAC;EACzB,KAAK,EAhLC,KAAK;EAiLX,OAAO,EA3KK,IAAI;CA4KnB",
4
+ "sources": [
5
+ "slick-theme.scss"
6
+ ],
7
+ "names": [],
8
+ "file": "slick-theme.css"
9
+ }
assets/vendor/slick/slick-theme.less ADDED
@@ -0,0 +1,168 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @charset "UTF-8";
2
+
3
+ // Default Variables
4
+
5
+ @slick-font-path: "./fonts/";
6
+ @slick-font-family: "slick";
7
+ @slick-loader-path: "./";
8
+ @slick-arrow-color: white;
9
+ @slick-dot-color: black;
10
+ @slick-dot-color-active: @slick-dot-color;
11
+ @slick-prev-character: "←";
12
+ @slick-next-character: "→";
13
+ @slick-dot-character: "•";
14
+ @slick-dot-size: 6px;
15
+ @slick-opacity-default: 0.75;
16
+ @slick-opacity-on-hover: 1;
17
+ @slick-opacity-not-active: 0.25;
18
+
19
+ /* Slider */
20
+ .slick-loading .slick-list{
21
+ background: #fff url('@{slick-loader-path}ajax-loader.gif') center center no-repeat;
22
+ }
23
+
24
+ /* Arrows */
25
+ .slick-prev,
26
+ .slick-next {
27
+ position: absolute;
28
+ display: block;
29
+ height: 20px;
30
+ width: 20px;
31
+ line-height: 0px;
32
+ font-size: 0px;
33
+ cursor: pointer;
34
+ background: transparent;
35
+ color: transparent;
36
+ top: 50%;
37
+ -webkit-transform: translate(0, -50%);
38
+ -ms-transform: translate(0, -50%);
39
+ transform: translate(0, -50%);
40
+ padding: 0;
41
+ border: none;
42
+ outline: none;
43
+ &:hover, &:focus {
44
+ outline: none;
45
+ background: transparent;
46
+ color: transparent;
47
+ &:before {
48
+ opacity: @slick-opacity-on-hover;
49
+ }
50
+ }
51
+ &.slick-disabled:before {
52
+ opacity: @slick-opacity-not-active;
53
+ }
54
+ }
55
+
56
+ .slick-prev:before, .slick-next:before {
57
+ font-family: @slick-font-family;
58
+ font-size: 20px;
59
+ line-height: 1;
60
+ color: @slick-arrow-color;
61
+ opacity: @slick-opacity-default;
62
+ -webkit-font-smoothing: antialiased;
63
+ -moz-osx-font-smoothing: grayscale;
64
+
65
+ & when ( @slick-font-family = 'slick' ) {
66
+ /* Icons */
67
+ @font-face {
68
+ font-family: 'slick';
69
+ font-weight: normal;
70
+ font-style: normal;
71
+ src: url('@{slick-font-path}slick.eot');
72
+ src: url('@{slick-font-path}slick.eot?#iefix') format('embedded-opentype'), url('@{slick-font-path}slick.woff') format('woff'), url('@{slick-font-path}slick.ttf') format('truetype'), url('@{slick-font-path}slick.svg#slick') format('svg');
73
+ }
74
+ }
75
+ }
76
+
77
+ .slick-prev {
78
+ left: -25px;
79
+ [dir="rtl"] & {
80
+ left: auto;
81
+ right: -25px;
82
+ }
83
+ &:before {
84
+ content: @slick-prev-character;
85
+ [dir="rtl"] & {
86
+ content: @slick-next-character;
87
+ }
88
+ }
89
+ }
90
+
91
+ .slick-next {
92
+ right: -25px;
93
+ [dir="rtl"] & {
94
+ left: -25px;
95
+ right: auto;
96
+ }
97
+ &:before {
98
+ content: @slick-next-character;
99
+ [dir="rtl"] & {
100
+ content: @slick-prev-character;
101
+ }
102
+ }
103
+ }
104
+
105
+ /* Dots */
106
+
107
+ .slick-dotted .slick-slider {
108
+ margin-bottom: 30px;
109
+ }
110
+
111
+ .slick-dots {
112
+ position: absolute;
113
+ bottom: -25px;
114
+ list-style: none;
115
+ display: block;
116
+ text-align: center;
117
+ padding: 0;
118
+ margin: 0;
119
+ width: 100%;
120
+ li {
121
+ position: relative;
122
+ display: inline-block;
123
+ height: 20px;
124
+ width: 20px;
125
+ margin: 0 5px;
126
+ padding: 0;
127
+ cursor: pointer;
128
+ button {
129
+ border: 0;
130
+ background: transparent;
131
+ display: block;
132
+ height: 20px;
133
+ width: 20px;
134
+ outline: none;
135
+ line-height: 0px;
136
+ font-size: 0px;
137
+ color: transparent;
138
+ padding: 5px;
139
+ cursor: pointer;
140
+ &:hover, &:focus {
141
+ outline: none;
142
+ &:before {
143
+ opacity: @slick-opacity-on-hover;
144
+ }
145
+ }
146
+ &:before {
147
+ position: absolute;
148
+ top: 0;
149
+ left: 0;
150
+ content: @slick-dot-character;
151
+ width: 20px;
152
+ height: 20px;
153
+ font-family: @slick-font-family;
154
+ font-size: @slick-dot-size;
155
+ line-height: 20px;
156
+ text-align: center;
157
+ color: @slick-dot-color;
158
+ opacity: @slick-opacity-not-active;
159
+ -webkit-font-smoothing: antialiased;
160
+ -moz-osx-font-smoothing: grayscale;
161
+ }
162
+ }
163
+ &.slick-active button:before {
164
+ color: @slick-dot-color-active;
165
+ opacity: @slick-opacity-default;
166
+ }
167
+ }
168
+ }
assets/vendor/slick/slick-theme.scss ADDED
@@ -0,0 +1,194 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @charset "UTF-8";
2
+
3
+ // Default Variables
4
+
5
+ // Slick icon entity codes outputs the following
6
+ // "\2190" outputs ascii character "←"
7
+ // "\2192" outputs ascii character "→"
8
+ // "\2022" outputs ascii character "•"
9
+
10
+ $slick-font-path: "./fonts/" !default;
11
+ $slick-font-family: "slick" !default;
12
+ $slick-loader-path: "./" !default;
13
+ $slick-arrow-color: white !default;
14
+ $slick-dot-color: black !default;
15
+ $slick-dot-color-active: $slick-dot-color !default;
16
+ $slick-prev-character: "\2190" !default;
17
+ $slick-next-character: "\2192" !default;
18
+ $slick-dot-character: "\2022" !default;
19
+ $slick-dot-size: 6px !default;
20
+ $slick-opacity-default: 0.75 !default;
21
+ $slick-opacity-on-hover: 1 !default;
22
+ $slick-opacity-not-active: 0.25 !default;
23
+
24
+ @function slick-image-url($url) {
25
+ @if function-exists(image-url) {
26
+ @return image-url($url);
27
+ }
28
+ @else {
29
+ @return url($slick-loader-path + $url);
30
+ }
31
+ }
32
+
33
+ @function slick-font-url($url) {
34
+ @if function-exists(font-url) {
35
+ @return font-url($url);
36
+ }
37
+ @else {
38
+ @return url($slick-font-path + $url);
39
+ }
40
+ }
41
+
42
+ /* Slider */
43
+
44
+ .slick-list {
45
+ .slick-loading & {
46
+ background: #fff slick-image-url("ajax-loader.gif") center center no-repeat;
47
+ }
48
+ }
49
+
50
+ /* Icons */
51
+ @if $slick-font-family == "slick" {
52
+ @font-face {
53
+ font-family: "slick";
54
+ src: slick-font-url("slick.eot");
55
+ src: slick-font-url("slick.eot?#iefix") format("embedded-opentype"), slick-font-url("slick.woff") format("woff"), slick-font-url("slick.ttf") format("truetype"), slick-font-url("slick.svg#slick") format("svg");
56
+ font-weight: normal;
57
+ font-style: normal;
58
+ }
59
+ }
60
+
61
+ /* Arrows */
62
+
63
+ .slick-prev,
64
+ .slick-next {
65
+ position: absolute;
66
+ display: block;
67
+ height: 20px;
68
+ width: 20px;
69
+ line-height: 0px;
70
+ font-size: 0px;
71
+ cursor: pointer;
72
+ background: transparent;
73
+ color: transparent;
74
+ top: 50%;
75
+ -webkit-transform: translate(0, -50%);
76
+ -ms-transform: translate(0, -50%);
77
+ transform: translate(0, -50%);
78
+ padding: 0;
79
+ border: none;
80
+ outline: none;
81
+ &:hover, &:focus {
82
+ outline: none;
83
+ background: transparent;
84
+ color: transparent;
85
+ &:before {
86
+ opacity: $slick-opacity-on-hover;
87
+ }
88
+ }
89
+ &.slick-disabled:before {
90
+ opacity: $slick-opacity-not-active;
91
+ }
92
+ &:before {
93
+ font-family: $slick-font-family;
94
+ font-size: 20px;
95
+ line-height: 1;
96
+ color: $slick-arrow-color;
97
+ opacity: $slick-opacity-default;
98
+ -webkit-font-smoothing: antialiased;
99
+ -moz-osx-font-smoothing: grayscale;
100
+ }
101
+ }
102
+
103
+ .slick-prev {
104
+ left: -25px;
105
+ [dir="rtl"] & {
106
+ left: auto;
107
+ right: -25px;
108
+ }
109
+ &:before {
110
+ content: $slick-prev-character;
111
+ [dir="rtl"] & {
112
+ content: $slick-next-character;
113
+ }
114
+ }
115
+ }
116
+
117
+ .slick-next {
118
+ right: -25px;
119
+ [dir="rtl"] & {
120
+ left: -25px;
121
+ right: auto;
122
+ }
123
+ &:before {
124
+ content: $slick-next-character;
125
+ [dir="rtl"] & {
126
+ content: $slick-prev-character;
127
+ }
128
+ }
129
+ }
130
+
131
+ /* Dots */
132
+
133
+ .slick-dotted.slick-slider {
134
+ margin-bottom: 30px;
135
+ }
136
+
137
+ .slick-dots {
138
+ position: absolute;
139
+ bottom: -25px;
140
+ list-style: none;
141
+ display: block;
142
+ text-align: center;
143
+ padding: 0;
144
+ margin: 0;
145
+ width: 100%;
146
+ li {
147
+ position: relative;
148
+ display: inline-block;
149
+ height: 20px;
150
+ width: 20px;
151
+ margin: 0 5px;
152
+ padding: 0;
153
+ cursor: pointer;
154
+ button {
155
+ border: 0;
156
+ background: transparent;
157
+ display: block;
158
+ height: 20px;
159
+ width: 20px;
160
+ outline: none;
161
+ line-height: 0px;
162
+ font-size: 0px;
163
+ color: transparent;
164
+ padding: 5px;
165
+ cursor: pointer;
166
+ &:hover, &:focus {
167
+ outline: none;
168
+ &:before {
169
+ opacity: $slick-opacity-on-hover;
170
+ }
171
+ }
172
+ &:before {
173
+ position: absolute;
174
+ top: 0;
175
+ left: 0;
176
+ content: $slick-dot-character;
177
+ width: 20px;
178
+ height: 20px;
179
+ font-family: $slick-font-family;
180
+ font-size: $slick-dot-size;
181
+ line-height: 20px;
182
+ text-align: center;
183
+ color: $slick-dot-color;
184
+ opacity: $slick-opacity-not-active;
185
+ -webkit-font-smoothing: antialiased;
186
+ -moz-osx-font-smoothing: grayscale;
187
+ }
188
+ }
189
+ &.slick-active button:before {
190
+ color: $slick-dot-color-active;
191
+ opacity: $slick-opacity-default;
192
+ }
193
+ }
194
+ }
assets/vendor/slick/slick.css ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Slider */
2
+ .slick-slider {
3
+ position: relative;
4
+ display: block;
5
+ -webkit-box-sizing: border-box;
6
+ box-sizing: border-box;
7
+ -webkit-touch-callout: none;
8
+ -webkit-user-select: none;
9
+ -moz-user-select: none;
10
+ -ms-user-select: none;
11
+ user-select: none;
12
+ -ms-touch-action: pan-y;
13
+ touch-action: pan-y;
14
+ -webkit-tap-highlight-color: transparent;
15
+ }
16
+
17
+ .slick-list {
18
+ position: relative;
19
+ overflow: hidden;
20
+ display: block;
21
+ margin: 0;
22
+ padding: 0;
23
+ }
24
+
25
+ .slick-list:focus {
26
+ outline: none;
27
+ }
28
+
29
+ .slick-list.dragging {
30
+ cursor: pointer;
31
+ cursor: hand;
32
+ }
33
+
34
+ .slick-slider .slick-track,
35
+ .slick-slider .slick-list {
36
+ -webkit-transform: translate3d(0, 0, 0);
37
+ transform: translate3d(0, 0, 0);
38
+ }
39
+
40
+ .slick-track {
41
+ position: relative;
42
+ left: 0;
43
+ top: 0;
44
+ display: block;
45
+ margin-left: auto;
46
+ margin-right: auto;
47
+ }
48
+
49
+ .slick-track:before, .slick-track:after {
50
+ content: "";
51
+ display: table;
52
+ }
53
+
54
+ .slick-track:after {
55
+ clear: both;
56
+ }
57
+
58
+ .slick-loading .slick-track {
59
+ visibility: hidden;
60
+ }
61
+
62
+ .slick-slide {
63
+ float: left;
64
+ height: 100%;
65
+ min-height: 1px;
66
+ display: none;
67
+ }
68
+
69
+ [dir="rtl"] .slick-slide {
70
+ float: right;
71
+ }
72
+
73
+ .slick-slide img {
74
+ display: block;
75
+ }
76
+
77
+ .slick-slide.slick-loading img {
78
+ display: none;
79
+ }
80
+
81
+ .slick-slide.dragging img {
82
+ pointer-events: none;
83
+ }
84
+
85
+ .slick-initialized .slick-slide {
86
+ display: block;
87
+ }
88
+
89
+ .slick-loading .slick-slide {
90
+ visibility: hidden;
91
+ }
92
+
93
+ .slick-vertical .slick-slide {
94
+ display: block;
95
+ height: auto;
96
+ border: 1px solid transparent;
97
+ }
98
+
99
+ .slick-arrow.slick-hidden {
100
+ display: none;
101
+ }
102
+ /*# sourceMappingURL=slick.css.map */
assets/vendor/slick/slick.css.map ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "version": 3,
3
+ "mappings": "AAAA,YAAY;AAEZ,AAAA,aAAa,CAAC;EACV,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,KAAK;EACd,UAAU,EAAE,UAAU;EACtB,qBAAqB,EAAE,IAAI;EAC3B,mBAAmB,EAAE,IAAI;EACzB,kBAAkB,EAAE,IAAI;EACxB,gBAAgB,EAAE,IAAI;EACtB,eAAe,EAAE,IAAI;EACrB,WAAW,EAAE,IAAI;EACjB,gBAAgB,EAAE,KAAK;EACvB,YAAY,EAAE,KAAK;EACnB,2BAA2B,EAAE,WAAW;CAC3C;;AACD,AAAA,WAAW,CAAC;EACR,QAAQ,EAAE,QAAQ;EAClB,QAAQ,EAAE,MAAM;EAChB,OAAO,EAAE,KAAK;EACd,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,CAAC;CAUb;;AAfD,AAOI,WAPO,AAON,MAAM,CAAC;EACJ,OAAO,EAAE,IAAI;CAChB;;AATL,AAWI,WAXO,AAWN,SAAS,CAAC;EACP,MAAM,EAAE,OAAO;EACf,MAAM,EAAE,IAAI;CACf;;AAEL,AAAA,aAAa,CAAC,YAAY;AAC1B,aAAa,CAAC,WAAW,CAAC;EACtB,iBAAiB,EAAE,oBAAoB;EACvC,cAAc,EAAE,oBAAoB;EACpC,aAAa,EAAE,oBAAoB;EACnC,YAAY,EAAE,oBAAoB;EAClC,SAAS,EAAE,oBAAoB;CAClC;;AAED,AAAA,YAAY,CAAC;EACT,QAAQ,EAAE,QAAQ;EAClB,IAAI,EAAE,CAAC;EACP,GAAG,EAAE,CAAC;EACN,OAAO,EAAE,KAAK;EACd,WAAW,EAAE,IAAI;EACjB,YAAY,EAAE,IAAI;CAerB;;AArBD,AAQI,YARQ,AAQP,OAAO,EARZ,YAAY,AASP,MAAM,CAAC;EACJ,OAAO,EAAE,EAAE;EACX,OAAO,EAAE,KAAK;CACjB;;AAZL,AAcI,YAdQ,AAcP,MAAM,CAAC;EACJ,KAAK,EAAE,IAAI;CACd;;AAED,AAAA,cAAc,CAlBlB,YAAY,CAkBS;EACb,UAAU,EAAE,MAAM;CACrB;;AAEL,AAAA,YAAY,CAAC;EACT,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,UAAU,EAAE,GAAG;EAWf,OAAO,EAAE,IAAI;CAmBhB;;CA7BG,AAAA,AAAA,GAAC,CAAI,KAAK,AAAT,EAJL,YAAY,CAIM;EACV,KAAK,EAAE,KAAK;CACf;;AANL,AAOI,YAPQ,CAOR,GAAG,CAAC;EACA,OAAO,EAAE,KAAK;CACjB;;AATL,AAUI,YAVQ,AAUP,cAAc,CAAC,GAAG,CAAC;EAChB,OAAO,EAAE,IAAI;CAChB;;AAZL,AAgBI,YAhBQ,AAgBP,SAAS,CAAC,GAAG,CAAC;EACX,cAAc,EAAE,IAAI;CACvB;;AAED,AAAA,kBAAkB,CApBtB,YAAY,CAoBa;EACjB,OAAO,EAAE,KAAK;CACjB;;AAED,AAAA,cAAc,CAxBlB,YAAY,CAwBS;EACb,UAAU,EAAE,MAAM;CACrB;;AAED,AAAA,eAAe,CA5BnB,YAAY,CA4BU;EACd,OAAO,EAAE,KAAK;EACd,MAAM,EAAE,IAAI;EACZ,MAAM,EAAE,qBAAqB;CAChC;;AAEL,AAAA,YAAY,AAAA,aAAa,CAAC;EACtB,OAAO,EAAE,IAAI;CAChB",
4
+ "sources": [
5
+ "slick.scss"
6
+ ],
7
+ "names": [],
8
+ "file": "slick.css"
9
+ }
assets/vendor/slick/slick.js ADDED
@@ -0,0 +1,3011 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ _ _ _ _
3
+ ___| (_) ___| | __ (_)___
4
+ / __| | |/ __| |/ / | / __|
5
+ \__ \ | | (__| < _ | \__ \
6
+ |___/_|_|\___|_|\_(_)/ |___/
7
+ |__/
8
+
9
+ Version: 1.8.0
10
+ Author: Ken Wheeler
11
+ Website: http://kenwheeler.github.io
12
+ Docs: http://kenwheeler.github.io/slick
13
+ Repo: http://github.com/kenwheeler/slick
14
+ Issues: http://github.com/kenwheeler/slick/issues
15
+
16
+ */
17
+ /* global window, document, define, jQuery, setInterval, clearInterval */
18
+ ;(function(factory) {
19
+ 'use strict';
20
+ if (typeof define === 'function' && define.amd) {
21
+ define(['jquery'], factory);
22
+ } else if (typeof exports !== 'undefined') {
23
+ module.exports = factory(require('jquery'));
24
+ } else {
25
+ factory(jQuery);
26
+ }
27
+
28
+ }(function($) {
29
+ 'use strict';
30
+ var Slick = window.Slick || {};
31
+
32
+ Slick = (function() {
33
+
34
+ var instanceUid = 0;
35
+
36
+ function Slick(element, settings) {
37
+
38
+ var _ = this, dataSettings;
39
+
40
+ _.defaults = {
41
+ accessibility: true,
42
+ adaptiveHeight: false,
43
+ appendArrows: $(element),
44
+ appendDots: $(element),
45
+ arrows: true,
46
+ asNavFor: null,
47
+ prevArrow: '<button class="slick-prev" aria-label="Previous" type="button">Previous</button>',
48
+ nextArrow: '<button class="slick-next" aria-label="Next" type="button">Next</button>',
49
+ autoplay: false,
50
+ autoplaySpeed: 3000,
51
+ centerMode: false,
52
+ centerPadding: '50px',
53
+ cssEase: 'ease',
54
+ customPaging: function(slider, i) {
55
+ return $('<button type="button" />').text(i + 1);
56
+ },
57
+ dots: false,
58
+ dotsClass: 'slick-dots',
59
+ draggable: true,
60
+ easing: 'linear',
61
+ edgeFriction: 0.35,
62
+ fade: false,
63
+ focusOnSelect: false,
64
+ focusOnChange: false,
65
+ infinite: true,
66
+ initialSlide: 0,
67
+ lazyLoad: 'ondemand',
68
+ mobileFirst: false,
69
+ pauseOnHover: true,
70
+ pauseOnFocus: true,
71
+ pauseOnDotsHover: false,
72
+ respondTo: 'window',
73
+ responsive: null,
74
+ rows: 1,
75
+ rtl: false,
76
+ slide: '',
77
+ slidesPerRow: 1,
78
+ slidesToShow: 1,
79
+ slidesToScroll: 1,
80
+ speed: 500,
81
+ swipe: true,
82
+ swipeToSlide: false,
83
+ touchMove: true,
84
+ touchThreshold: 5,
85
+ useCSS: true,
86
+ useTransform: true,
87
+ variableWidth: false,
88
+ vertical: false,
89
+ verticalSwiping: false,
90
+ waitForAnimate: true,
91
+ zIndex: 1000
92
+ };
93
+
94
+ _.initials = {
95
+ animating: false,
96
+ dragging: false,
97
+ autoPlayTimer: null,
98
+ currentDirection: 0,
99
+ currentLeft: null,
100
+ currentSlide: 0,
101
+ direction: 1,
102
+ $dots: null,
103
+ listWidth: null,
104
+ listHeight: null,
105
+ loadIndex: 0,
106
+ $nextArrow: null,
107
+ $prevArrow: null,
108
+ scrolling: false,
109
+ slideCount: null,
110
+ slideWidth: null,
111
+ $slideTrack: null,
112
+ $slides: null,
113
+ sliding: false,
114
+ slideOffset: 0,
115
+ swipeLeft: null,
116
+ swiping: false,
117
+ $list: null,
118
+ touchObject: {},
119
+ transformsEnabled: false,
120
+ unslicked: false
121
+ };
122
+
123
+ $.extend(_, _.initials);
124
+
125
+ _.activeBreakpoint = null;
126
+ _.animType = null;
127
+ _.animProp = null;
128
+ _.breakpoints = [];
129
+ _.breakpointSettings = [];
130
+ _.cssTransitions = false;
131
+ _.focussed = false;
132
+ _.interrupted = false;
133
+ _.hidden = 'hidden';
134
+ _.paused = true;
135
+ _.positionProp = null;
136
+ _.respondTo = null;
137
+ _.rowCount = 1;
138
+ _.shouldClick = true;
139
+ _.$slider = $(element);
140
+ _.$slidesCache = null;
141
+ _.transformType = null;
142
+ _.transitionType = null;
143
+ _.visibilityChange = 'visibilitychange';
144
+ _.windowWidth = 0;
145
+ _.windowTimer = null;
146
+
147
+ dataSettings = $(element).data('slick') || {};
148
+
149
+ _.options = $.extend({}, _.defaults, settings, dataSettings);
150
+
151
+ _.currentSlide = _.options.initialSlide;
152
+
153
+ _.originalSettings = _.options;
154
+
155
+ if (typeof document.mozHidden !== 'undefined') {
156
+ _.hidden = 'mozHidden';
157
+ _.visibilityChange = 'mozvisibilitychange';
158
+ } else if (typeof document.webkitHidden !== 'undefined') {
159
+ _.hidden = 'webkitHidden';
160
+ _.visibilityChange = 'webkitvisibilitychange';
161
+ }
162
+
163
+ _.autoPlay = $.proxy(_.autoPlay, _);
164
+ _.autoPlayClear = $.proxy(_.autoPlayClear, _);
165
+ _.autoPlayIterator = $.proxy(_.autoPlayIterator, _);
166
+ _.changeSlide = $.proxy(_.changeSlide, _);
167
+ _.clickHandler = $.proxy(_.clickHandler, _);
168
+ _.selectHandler = $.proxy(_.selectHandler, _);
169
+ _.setPosition = $.proxy(_.setPosition, _);
170
+ _.swipeHandler = $.proxy(_.swipeHandler, _);
171
+ _.dragHandler = $.proxy(_.dragHandler, _);
172
+ _.keyHandler = $.proxy(_.keyHandler, _);
173
+
174
+ _.instanceUid = instanceUid++;
175
+
176
+ // A simple way to check for HTML strings
177
+ // Strict HTML recognition (must start with <)
178
+ // Extracted from jQuery v1.11 source
179
+ _.htmlExpr = /^(?:\s*(<[\w\W]+>)[^>]*)$/;
180
+
181
+
182
+ _.registerBreakpoints();
183
+ _.init(true);
184
+
185
+ }
186
+
187
+ return Slick;
188
+
189
+ }());
190
+
191
+ Slick.prototype.activateADA = function() {
192
+ var _ = this;
193
+
194
+ _.$slideTrack.find('.slick-active').attr({
195
+ 'aria-hidden': 'false'
196
+ }).find('a, input, button, select').attr({
197
+ 'tabindex': '0'
198
+ });
199
+
200
+ };
201
+
202
+ Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) {
203
+
204
+ var _ = this;
205
+
206
+ if (typeof(index) === 'boolean') {
207
+ addBefore = index;
208
+ index = null;
209
+ } else if (index < 0 || (index >= _.slideCount)) {
210
+ return false;
211
+ }
212
+
213
+ _.unload();
214
+
215
+ if (typeof(index) === 'number') {
216
+ if (index === 0 && _.$slides.length === 0) {
217
+ $(markup).appendTo(_.$slideTrack);
218
+ } else if (addBefore) {
219
+ $(markup).insertBefore(_.$slides.eq(index));
220
+ } else {
221
+ $(markup).insertAfter(_.$slides.eq(index));
222
+ }
223
+ } else {
224
+ if (addBefore === true) {
225
+ $(markup).prependTo(_.$slideTrack);
226
+ } else {
227
+ $(markup).appendTo(_.$slideTrack);
228
+ }
229
+ }
230
+
231
+ _.$slides = _.$slideTrack.children(this.options.slide);
232
+
233
+ _.$slideTrack.children(this.options.slide).detach();
234
+
235
+ _.$slideTrack.append(_.$slides);
236
+
237
+ _.$slides.each(function(index, element) {
238
+ $(element).attr('data-slick-index', index);
239
+ });
240
+
241
+ _.$slidesCache = _.$slides;
242
+
243
+ _.reinit();
244
+
245
+ };
246
+
247
+ Slick.prototype.animateHeight = function() {
248
+ var _ = this;
249
+ if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
250
+ var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
251
+ _.$list.animate({
252
+ height: targetHeight
253
+ }, _.options.speed);
254
+ }
255
+ };
256
+
257
+ Slick.prototype.animateSlide = function(targetLeft, callback) {
258
+
259
+ var animProps = {},
260
+ _ = this;
261
+
262
+ _.animateHeight();
263
+
264
+ if (_.options.rtl === true && _.options.vertical === false) {
265
+ targetLeft = -targetLeft;
266
+ }
267
+ if (_.transformsEnabled === false) {
268
+ if (_.options.vertical === false) {
269
+ _.$slideTrack.animate({
270
+ left: targetLeft
271
+ }, _.options.speed, _.options.easing, callback);
272
+ } else {
273
+ _.$slideTrack.animate({
274
+ top: targetLeft
275
+ }, _.options.speed, _.options.easing, callback);
276
+ }
277
+
278
+ } else {
279
+
280
+ if (_.cssTransitions === false) {
281
+ if (_.options.rtl === true) {
282
+ _.currentLeft = -(_.currentLeft);
283
+ }
284
+ $({
285
+ animStart: _.currentLeft
286
+ }).animate({
287
+ animStart: targetLeft
288
+ }, {
289
+ duration: _.options.speed,
290
+ easing: _.options.easing,
291
+ step: function(now) {
292
+ now = Math.ceil(now);
293
+ if (_.options.vertical === false) {
294
+ animProps[_.animType] = 'translate(' +
295
+ now + 'px, 0px)';
296
+ _.$slideTrack.css(animProps);
297
+ } else {
298
+ animProps[_.animType] = 'translate(0px,' +
299
+ now + 'px)';
300
+ _.$slideTrack.css(animProps);
301
+ }
302
+ },
303
+ complete: function() {
304
+ if (callback) {
305
+ callback.call();
306
+ }
307
+ }
308
+ });
309
+
310
+ } else {
311
+
312
+ _.applyTransition();
313
+ targetLeft = Math.ceil(targetLeft);
314
+
315
+ if (_.options.vertical === false) {
316
+ animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)';
317
+ } else {
318
+ animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)';
319
+ }
320
+ _.$slideTrack.css(animProps);
321
+
322
+ if (callback) {
323
+ setTimeout(function() {
324
+
325
+ _.disableTransition();
326
+
327
+ callback.call();
328
+ }, _.options.speed);
329
+ }
330
+
331
+ }
332
+
333
+ }
334
+
335
+ };
336
+
337
+ Slick.prototype.getNavTarget = function() {
338
+
339
+ var _ = this,
340
+ asNavFor = _.options.asNavFor;
341
+
342
+ if ( asNavFor && asNavFor !== null ) {
343
+ asNavFor = $(asNavFor).not(_.$slider);
344
+ }
345
+
346
+ return asNavFor;
347
+
348
+ };
349
+
350
+ Slick.prototype.asNavFor = function(index) {
351
+
352
+ var _ = this,
353
+ asNavFor = _.getNavTarget();
354
+
355
+ if ( asNavFor !== null && typeof asNavFor === 'object' ) {
356
+ asNavFor.each(function() {
357
+ var target = $(this).slick('getSlick');
358
+ if(!target.unslicked) {
359
+ target.slideHandler(index, true);
360
+ }
361
+ });
362
+ }
363
+
364
+ };
365
+
366
+ Slick.prototype.applyTransition = function(slide) {
367
+
368
+ var _ = this,
369
+ transition = {};
370
+
371
+ if (_.options.fade === false) {
372
+ transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase;
373
+ } else {
374
+ transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase;
375
+ }
376
+
377
+ if (_.options.fade === false) {
378
+ _.$slideTrack.css(transition);
379
+ } else {
380
+ _.$slides.eq(slide).css(transition);
381
+ }
382
+
383
+ };
384
+
385
+ Slick.prototype.autoPlay = function() {
386
+
387
+ var _ = this;
388
+
389
+ _.autoPlayClear();
390
+
391
+ if ( _.slideCount > _.options.slidesToShow ) {
392
+ _.autoPlayTimer = setInterval( _.autoPlayIterator, _.options.autoplaySpeed );
393
+ }
394
+
395
+ };
396
+
397
+ Slick.prototype.autoPlayClear = function() {
398
+
399
+ var _ = this;
400
+
401
+ if (_.autoPlayTimer) {
402
+ clearInterval(_.autoPlayTimer);
403
+ }
404
+
405
+ };
406
+
407
+ Slick.prototype.autoPlayIterator = function() {
408
+
409
+ var _ = this,
410
+ slideTo = _.currentSlide + _.options.slidesToScroll;
411
+
412
+ if ( !_.paused && !_.interrupted && !_.focussed ) {
413
+
414
+ if ( _.options.infinite === false ) {
415
+
416
+ if ( _.direction === 1 && ( _.currentSlide + 1 ) === ( _.slideCount - 1 )) {
417
+ _.direction = 0;
418
+ }
419
+
420
+ else if ( _.direction === 0 ) {
421
+
422
+ slideTo = _.currentSlide - _.options.slidesToScroll;
423
+
424
+ if ( _.currentSlide - 1 === 0 ) {
425
+ _.direction = 1;
426
+ }
427
+
428
+ }
429
+
430
+ }
431
+
432
+ _.slideHandler( slideTo );
433
+
434
+ }
435
+
436
+ };
437
+
438
+ Slick.prototype.buildArrows = function() {
439
+
440
+ var _ = this;
441
+
442
+ if (_.options.arrows === true ) {
443
+
444
+ _.$prevArrow = $(_.options.prevArrow).addClass('slick-arrow');
445
+ _.$nextArrow = $(_.options.nextArrow).addClass('slick-arrow');
446
+
447
+ if( _.slideCount > _.options.slidesToShow ) {
448
+
449
+ _.$prevArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');
450
+ _.$nextArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');
451
+
452
+ if (_.htmlExpr.test(_.options.prevArrow)) {
453
+ _.$prevArrow.prependTo(_.options.appendArrows);
454
+ }
455
+
456
+ if (_.htmlExpr.test(_.options.nextArrow)) {
457
+ _.$nextArrow.appendTo(_.options.appendArrows);
458
+ }
459
+
460
+ if (_.options.infinite !== true) {
461
+ _.$prevArrow
462
+ .addClass('slick-disabled')
463
+ .attr('aria-disabled', 'true');
464
+ }
465
+
466
+ } else {
467
+
468
+ _.$prevArrow.add( _.$nextArrow )
469
+
470
+ .addClass('slick-hidden')
471
+ .attr({
472
+ 'aria-disabled': 'true',
473
+ 'tabindex': '-1'
474
+ });
475
+
476
+ }
477
+
478
+ }
479
+
480
+ };
481
+
482
+ Slick.prototype.buildDots = function() {
483
+
484
+ var _ = this,
485
+ i, dot;
486
+
487
+ if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
488
+
489
+ _.$slider.addClass('slick-dotted');
490
+
491
+ dot = $('<ul />').addClass(_.options.dotsClass);
492
+
493
+ for (i = 0; i <= _.getDotCount(); i += 1) {
494
+ dot.append($('<li />').append(_.options.customPaging.call(this, _, i)));
495
+ }
496
+
497
+ _.$dots = dot.appendTo(_.options.appendDots);
498
+
499
+ _.$dots.find('li').first().addClass('slick-active');
500
+
501
+ }
502
+
503
+ };
504
+
505
+ Slick.prototype.buildOut = function() {
506
+
507
+ var _ = this;
508
+
509
+ _.$slides =
510
+ _.$slider
511
+ .children( _.options.slide + ':not(.slick-cloned)')
512
+ .addClass('slick-slide');
513
+
514
+ _.slideCount = _.$slides.length;
515
+
516
+ _.$slides.each(function(index, element) {
517
+ $(element)
518
+ .attr('data-slick-index', index)
519
+ .data('originalStyling', $(element).attr('style') || '');
520
+ });
521
+
522
+ _.$slider.addClass('slick-slider');
523
+
524
+ _.$slideTrack = (_.slideCount === 0) ?
525
+ $('<div class="slick-track"/>').appendTo(_.$slider) :
526
+ _.$slides.wrapAll('<div class="slick-track"/>').parent();
527
+
528
+ _.$list = _.$slideTrack.wrap(
529
+ '<div class="slick-list"/>').parent();
530
+ _.$slideTrack.css('opacity', 0);
531
+
532
+ if (_.options.centerMode === true || _.options.swipeToSlide === true) {
533
+ _.options.slidesToScroll = 1;
534
+ }
535
+
536
+ $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading');
537
+
538
+ _.setupInfinite();
539
+
540
+ _.buildArrows();
541
+
542
+ _.buildDots();
543
+
544
+ _.updateDots();
545
+
546
+
547
+ _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);
548
+
549
+ if (_.options.draggable === true) {
550
+ _.$list.addClass('draggable');
551
+ }
552
+
553
+ };
554
+
555
+ Slick.prototype.buildRows = function() {
556
+
557
+ var _ = this, a, b, c, newSlides, numOfSlides, originalSlides,slidesPerSection;
558
+
559
+ newSlides = document.createDocumentFragment();
560
+ originalSlides = _.$slider.children();
561
+
562
+ if(_.options.rows > 0) {
563
+
564
+ slidesPerSection = _.options.slidesPerRow * _.options.rows;
565
+ numOfSlides = Math.ceil(
566
+ originalSlides.length / slidesPerSection
567
+ );
568
+
569
+ for(a = 0; a < numOfSlides; a++){
570
+ var slide = document.createElement('div');
571
+ for(b = 0; b < _.options.rows; b++) {
572
+ var row = document.createElement('div');
573
+ for(c = 0; c < _.options.slidesPerRow; c++) {
574
+ var target = (a * slidesPerSection + ((b * _.options.slidesPerRow) + c));
575
+ if (originalSlides.get(target)) {
576
+ row.appendChild(originalSlides.get(target));
577
+ }
578
+ }
579
+ slide.appendChild(row);
580
+ }
581
+ newSlides.appendChild(slide);
582
+ }
583
+
584
+ _.$slider.empty().append(newSlides);
585
+ _.$slider.children().children().children()
586
+ .css({
587
+ 'width':(100 / _.options.slidesPerRow) + '%',
588
+ 'display': 'inline-block'
589
+ });
590
+
591
+ }
592
+
593
+ };
594
+
595
+ Slick.prototype.checkResponsive = function(initial, forceUpdate) {
596
+
597
+ var _ = this,
598
+ breakpoint, targetBreakpoint, respondToWidth, triggerBreakpoint = false;
599
+ var sliderWidth = _.$slider.width();
600
+ var windowWidth = window.innerWidth || $(window).width();
601
+
602
+ if (_.respondTo === 'window') {
603
+ respondToWidth = windowWidth;
604
+ } else if (_.respondTo === 'slider') {
605
+ respondToWidth = sliderWidth;
606
+ } else if (_.respondTo === 'min') {
607
+ respondToWidth = Math.min(windowWidth, sliderWidth);
608
+ }
609
+
610
+ if ( _.options.responsive &&
611
+ _.options.responsive.length &&
612
+ _.options.responsive !== null) {
613
+
614
+ targetBreakpoint = null;
615
+
616
+ for (breakpoint in _.breakpoints) {
617
+ if (_.breakpoints.hasOwnProperty(breakpoint)) {
618
+ if (_.originalSettings.mobileFirst === false) {
619
+ if (respondToWidth < _.breakpoints[breakpoint]) {
620
+ targetBreakpoint = _.breakpoints[breakpoint];
621
+ }
622
+ } else {
623
+ if (respondToWidth > _.breakpoints[breakpoint]) {
624
+ targetBreakpoint = _.breakpoints[breakpoint];
625
+ }
626
+ }
627
+ }
628
+ }
629
+
630
+ if (targetBreakpoint !== null) {
631
+ if (_.activeBreakpoint !== null) {
632
+ if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) {
633
+ _.activeBreakpoint =
634
+ targetBreakpoint;
635
+ if (_.breakpointSettings[targetBreakpoint] === 'unslick') {
636
+ _.unslick(targetBreakpoint);
637
+ } else {
638
+ _.options = $.extend({}, _.originalSettings,
639
+ _.breakpointSettings[
640
+ targetBreakpoint]);
641
+ if (initial === true) {
642
+ _.currentSlide = _.options.initialSlide;
643
+ }
644
+ _.refresh(initial);
645
+ }
646
+ triggerBreakpoint = targetBreakpoint;
647
+ }
648
+ } else {
649
+ _.activeBreakpoint = targetBreakpoint;
650
+ if (_.breakpointSettings[targetBreakpoint] === 'unslick') {
651
+ _.unslick(targetBreakpoint);
652
+ } else {
653
+ _.options = $.extend({}, _.originalSettings,
654
+ _.breakpointSettings[
655
+ targetBreakpoint]);
656
+ if (initial === true) {
657
+ _.currentSlide = _.options.initialSlide;
658
+ }
659
+ _.refresh(initial);
660
+ }
661
+ triggerBreakpoint = targetBreakpoint;
662
+ }
663
+ } else {
664
+ if (_.activeBreakpoint !== null) {
665
+ _.activeBreakpoint = null;
666
+ _.options = _.originalSettings;
667
+ if (initial === true) {
668
+ _.currentSlide = _.options.initialSlide;
669
+ }
670
+ _.refresh(initial);
671
+ triggerBreakpoint = targetBreakpoint;
672
+ }
673
+ }
674
+
675
+ // only trigger breakpoints during an actual break. not on initialize.
676
+ if( !initial && triggerBreakpoint !== false ) {
677
+ _.$slider.trigger('breakpoint', [_, triggerBreakpoint]);
678
+ }
679
+ }
680
+
681
+ };
682
+
683
+ Slick.prototype.changeSlide = function(event, dontAnimate) {
684
+
685
+ var _ = this,
686
+ $target = $(event.currentTarget),
687
+ indexOffset, slideOffset, unevenOffset;
688
+
689
+ // If target is a link, prevent default action.
690
+ if($target.is('a')) {
691
+ event.preventDefault();
692
+ }
693
+
694
+ // If target is not the <li> element (ie: a child), find the <li>.
695
+ if(!$target.is('li')) {
696
+ $target = $target.closest('li');
697
+ }
698
+
699
+ unevenOffset = (_.slideCount % _.options.slidesToScroll !== 0);
700
+ indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll;
701
+
702
+ switch (event.data.message) {
703
+
704
+ case 'previous':
705
+ slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset;
706
+ if (_.slideCount > _.options.slidesToShow) {
707
+ _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate);
708
+ }
709
+ break;
710
+
711
+ case 'next':
712
+ slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset;
713
+ if (_.slideCount > _.options.slidesToShow) {
714
+ _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate);
715
+ }
716
+ break;
717
+
718
+ case 'index':
719
+ var index = event.data.index === 0 ? 0 :
720
+ event.data.index || $target.index() * _.options.slidesToScroll;
721
+
722
+ _.slideHandler(_.checkNavigable(index), false, dontAnimate);
723
+ $target.children().trigger('focus');
724
+ break;
725
+
726
+ default:
727
+ return;
728
+ }
729
+
730
+ };
731
+
732
+ Slick.prototype.checkNavigable = function(index) {
733
+
734
+ var _ = this,
735
+ navigables, prevNavigable;
736
+
737
+ navigables = _.getNavigableIndexes();
738
+ prevNavigable = 0;
739
+ if (index > navigables[navigables.length - 1]) {
740
+ index = navigables[navigables.length - 1];
741
+ } else {
742
+ for (var n in navigables) {
743
+ if (index < navigables[n]) {
744
+ index = prevNavigable;
745
+ break;
746
+ }
747
+ prevNavigable = navigables[n];
748
+ }
749
+ }
750
+
751
+ return index;
752
+ };
753
+
754
+ Slick.prototype.cleanUpEvents = function() {
755
+
756
+ var _ = this;
757
+
758
+ if (_.options.dots && _.$dots !== null) {
759
+
760
+ $('li', _.$dots)
761
+ .off('click.slick', _.changeSlide)
762
+ .off('mouseenter.slick', $.proxy(_.interrupt, _, true))
763
+ .off('mouseleave.slick', $.proxy(_.interrupt, _, false));
764
+
765
+ if (_.options.accessibility === true) {
766
+ _.$dots.off('keydown.slick', _.keyHandler);
767
+ }
768
+ }
769
+
770
+ _.$slider.off('focus.slick blur.slick');
771
+
772
+ if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
773
+ _.$prevArrow && _.$prevArrow.off('click.slick', _.changeSlide);
774
+ _.$nextArrow && _.$nextArrow.off('click.slick', _.changeSlide);
775
+
776
+ if (_.options.accessibility === true) {
777
+ _.$prevArrow && _.$prevArrow.off('keydown.slick', _.keyHandler);
778
+ _.$nextArrow && _.$nextArrow.off('keydown.slick', _.keyHandler);
779
+ }
780
+ }
781
+
782
+ _.$list.off('touchstart.slick mousedown.slick', _.swipeHandler);
783
+ _.$list.off('touchmove.slick mousemove.slick', _.swipeHandler);
784
+ _.$list.off('touchend.slick mouseup.slick', _.swipeHandler);
785
+ _.$list.off('touchcancel.slick mouseleave.slick', _.swipeHandler);
786
+
787
+ _.$list.off('click.slick', _.clickHandler);
788
+
789
+ $(document).off(_.visibilityChange, _.visibility);
790
+
791
+ _.cleanUpSlideEvents();
792
+
793
+ if (_.options.accessibility === true) {
794
+ _.$list.off('keydown.slick', _.keyHandler);
795
+ }
796
+
797
+ if (_.options.focusOnSelect === true) {
798
+ $(_.$slideTrack).children().off('click.slick', _.selectHandler);
799
+ }
800
+
801
+ $(window).off('orientationchange.slick.slick-' + _.instanceUid, _.orientationChange);
802
+
803
+ $(window).off('resize.slick.slick-' + _.instanceUid, _.resize);
804
+
805
+ $('[draggable!=true]', _.$slideTrack).off('dragstart', _.preventDefault);
806
+
807
+ $(window).off('load.slick.slick-' + _.instanceUid, _.setPosition);
808
+
809
+ };
810
+
811
+ Slick.prototype.cleanUpSlideEvents = function() {
812
+
813
+ var _ = this;
814
+
815
+ _.$list.off('mouseenter.slick', $.proxy(_.interrupt, _, true));
816
+ _.$list.off('mouseleave.slick', $.proxy(_.interrupt, _, false));
817
+
818
+ };
819
+
820
+ Slick.prototype.cleanUpRows = function() {
821
+
822
+ var _ = this, originalSlides;
823
+
824
+ if(_.options.rows > 0) {
825
+ originalSlides = _.$slides.children().children();
826
+ originalSlides.removeAttr('style');
827
+ _.$slider.empty().append(originalSlides);
828
+ }
829
+
830
+ };
831
+
832
+ Slick.prototype.clickHandler = function(event) {
833
+
834
+ var _ = this;
835
+
836
+ if (_.shouldClick === false) {
837
+ event.stopImmediatePropagation();
838
+ event.stopPropagation();
839
+ event.preventDefault();
840
+ }
841
+
842
+ };
843
+
844
+ Slick.prototype.destroy = function(refresh) {
845
+
846
+ var _ = this;
847
+
848
+ _.autoPlayClear();
849
+
850
+ _.touchObject = {};
851
+
852
+ _.cleanUpEvents();
853
+
854
+ $('.slick-cloned', _.$slider).detach();
855
+
856
+ if (_.$dots) {
857
+ _.$dots.remove();
858
+ }
859
+
860
+ if ( _.$prevArrow && _.$prevArrow.length ) {
861
+
862
+ _.$prevArrow
863
+ .removeClass('slick-disabled slick-arrow slick-hidden')
864
+ .removeAttr('aria-hidden aria-disabled tabindex')
865
+ .css('display','');
866
+
867
+ if ( _.htmlExpr.test( _.options.prevArrow )) {
868
+ _.$prevArrow.remove();
869
+ }
870
+ }
871
+
872
+ if ( _.$nextArrow && _.$nextArrow.length ) {
873
+
874
+ _.$nextArrow
875
+ .removeClass('slick-disabled slick-arrow slick-hidden')
876
+ .removeAttr('aria-hidden aria-disabled tabindex')
877
+ .css('display','');
878
+
879
+ if ( _.htmlExpr.test( _.options.nextArrow )) {
880
+ _.$nextArrow.remove();
881
+ }
882
+ }
883
+
884
+
885
+ if (_.$slides) {
886
+
887
+ _.$slides
888
+ .removeClass('slick-slide slick-active slick-center slick-visible slick-current')
889
+ .removeAttr('aria-hidden')
890
+ .removeAttr('data-slick-index')
891
+ .each(function(){
892
+ $(this).attr('style', $(this).data('originalStyling'));
893
+ });
894
+
895
+ _.$slideTrack.children(this.options.slide).detach();
896
+
897
+ _.$slideTrack.detach();
898
+
899
+ _.$list.detach();
900
+
901
+ _.$slider.append(_.$slides);
902
+ }
903
+
904
+ _.cleanUpRows();
905
+
906
+ _.$slider.removeClass('slick-slider');
907
+ _.$slider.removeClass('slick-initialized');
908
+ _.$slider.removeClass('slick-dotted');
909
+
910
+ _.unslicked = true;
911
+
912
+ if(!refresh) {
913
+ _.$slider.trigger('destroy', [_]);
914
+ }
915
+
916
+ };
917
+
918
+ Slick.prototype.disableTransition = function(slide) {
919
+
920
+ var _ = this,
921
+ transition = {};
922
+
923
+ transition[_.transitionType] = '';
924
+
925
+ if (_.options.fade === false) {
926
+ _.$slideTrack.css(transition);
927
+ } else {
928
+ _.$slides.eq(slide).css(transition);
929
+ }
930
+
931
+ };
932
+
933
+ Slick.prototype.fadeSlide = function(slideIndex, callback) {
934
+
935
+ var _ = this;
936
+
937
+ if (_.cssTransitions === false) {
938
+
939
+ _.$slides.eq(slideIndex).css({
940
+ zIndex: _.options.zIndex
941
+ });
942
+
943
+ _.$slides.eq(slideIndex).animate({
944
+ opacity: 1
945
+ }, _.options.speed, _.options.easing, callback);
946
+
947
+ } else {
948
+
949
+ _.applyTransition(slideIndex);
950
+
951
+ _.$slides.eq(slideIndex).css({
952
+ opacity: 1,
953
+ zIndex: _.options.zIndex
954
+ });
955
+
956
+ if (callback) {
957
+ setTimeout(function() {
958
+
959
+ _.disableTransition(slideIndex);
960
+
961
+ callback.call();
962
+ }, _.options.speed);
963
+ }
964
+
965
+ }
966
+
967
+ };
968
+
969
+ Slick.prototype.fadeSlideOut = function(slideIndex) {
970
+
971
+ var _ = this;
972
+
973
+ if (_.cssTransitions === false) {
974
+
975
+ _.$slides.eq(slideIndex).animate({
976
+ opacity: 0,
977
+ zIndex: _.options.zIndex - 2
978
+ }, _.options.speed, _.options.easing);
979
+
980
+ } else {
981
+
982
+ _.applyTransition(slideIndex);
983
+
984
+ _.$slides.eq(slideIndex).css({
985
+ opacity: 0,
986
+ zIndex: _.options.zIndex - 2
987
+ });
988
+
989
+ }
990
+
991
+ };
992
+
993
+ Slick.prototype.filterSlides = Slick.prototype.slickFilter = function(filter) {
994
+
995
+ var _ = this;
996
+
997
+ if (filter !== null) {
998
+
999
+ _.$slidesCache = _.$slides;
1000
+
1001
+ _.unload();
1002
+
1003
+ _.$slideTrack.children(this.options.slide).detach();
1004
+
1005
+ _.$slidesCache.filter(filter).appendTo(_.$slideTrack);
1006
+
1007
+ _.reinit();
1008
+
1009
+ }
1010
+
1011
+ };
1012
+
1013
+ Slick.prototype.focusHandler = function() {
1014
+
1015
+ var _ = this;
1016
+
1017
+ _.$slider
1018
+ .off('focus.slick blur.slick')
1019
+ .on('focus.slick blur.slick', '*', function(event) {
1020
+
1021
+ event.stopImmediatePropagation();
1022
+ var $sf = $(this);
1023
+
1024
+ setTimeout(function() {
1025
+
1026
+ if( _.options.pauseOnFocus ) {
1027
+ _.focussed = $sf.is(':focus');
1028
+ _.autoPlay();
1029
+ }
1030
+
1031
+ }, 0);
1032
+
1033
+ });
1034
+ };
1035
+
1036
+ Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function() {
1037
+
1038
+ var _ = this;
1039
+ return _.currentSlide;
1040
+
1041
+ };
1042
+
1043
+ Slick.prototype.getDotCount = function() {
1044
+
1045
+ var _ = this;
1046
+
1047
+ var breakPoint = 0;
1048
+ var counter = 0;
1049
+ var pagerQty = 0;
1050
+
1051
+ if (_.options.infinite === true) {
1052
+ if (_.slideCount <= _.options.slidesToShow) {
1053
+ ++pagerQty;
1054
+ } else {
1055
+ while (breakPoint < _.slideCount) {
1056
+ ++pagerQty;
1057
+ breakPoint = counter + _.options.slidesToScroll;
1058
+ counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
1059
+ }
1060
+ }
1061
+ } else if (_.options.centerMode === true) {
1062
+ pagerQty = _.slideCount;
1063
+ } else if(!_.options.asNavFor) {
1064
+ pagerQty = 1 + Math.ceil((_.slideCount - _.options.slidesToShow) / _.options.slidesToScroll);
1065
+ }else {
1066
+ while (breakPoint < _.slideCount) {
1067
+ ++pagerQty;
1068
+ breakPoint = counter + _.options.slidesToScroll;
1069
+ counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
1070
+ }
1071
+ }
1072
+
1073
+ return pagerQty - 1;
1074
+
1075
+ };
1076
+
1077
+ Slick.prototype.getLeft = function(slideIndex) {
1078
+
1079
+ var _ = this,
1080
+ targetLeft,
1081
+ verticalHeight,
1082
+ verticalOffset = 0,
1083
+ targetSlide,
1084
+ coef;
1085
+
1086
+ _.slideOffset = 0;
1087
+ verticalHeight = _.$slides.first().outerHeight(true);
1088
+
1089
+ if (_.options.infinite === true) {
1090
+ if (_.slideCount > _.options.slidesToShow) {
1091
+ _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;
1092
+ coef = -1
1093
+
1094
+ if (_.options.vertical === true && _.options.centerMode === true) {
1095
+ if (_.options.slidesToShow === 2) {
1096
+ coef = -1.5;
1097
+ } else if (_.options.slidesToShow === 1) {
1098
+ coef = -2
1099
+ }
1100
+ }
1101
+ verticalOffset = (verticalHeight * _.options.slidesToShow) * coef;
1102
+ }
1103
+ if (_.slideCount % _.options.slidesToScroll !== 0) {
1104
+ if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {
1105
+ if (slideIndex > _.slideCount) {
1106
+ _.slideOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * _.slideWidth) * -1;
1107
+ verticalOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight) * -1;
1108
+ } else {
1109
+ _.slideOffset = ((_.slideCount % _.options.slidesToScroll) * _.slideWidth) * -1;
1110
+ verticalOffset = ((_.slideCount % _.options.slidesToScroll) * verticalHeight) * -1;
1111
+ }
1112
+ }
1113
+ }
1114
+ } else {
1115
+ if (slideIndex + _.options.slidesToShow > _.slideCount) {
1116
+ _.slideOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * _.slideWidth;
1117
+ verticalOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * verticalHeight;
1118
+ }
1119
+ }
1120
+
1121
+ if (_.slideCount <= _.options.slidesToShow) {
1122
+ _.slideOffset = 0;
1123
+ verticalOffset = 0;
1124
+ }
1125
+
1126
+ if (_.options.centerMode === true && _.slideCount <= _.options.slidesToShow) {
1127
+ _.slideOffset = ((_.slideWidth * Math.floor(_.options.slidesToShow)) / 2) - ((_.slideWidth * _.slideCount) / 2);
1128
+ } else if (_.options.centerMode === true && _.options.infinite === true) {
1129
+ _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;
1130
+ } else if (_.options.centerMode === true) {
1131
+ _.slideOffset = 0;
1132
+ _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2);
1133
+ }
1134
+
1135
+ if (_.options.vertical === false) {
1136
+ targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset;
1137
+ } else {
1138
+ targetLeft = ((slideIndex * verticalHeight) * -1) + verticalOffset;
1139
+ }
1140
+
1141
+ if (_.options.variableWidth === true) {
1142
+
1143
+ if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
1144
+ targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);
1145
+ } else {
1146
+ targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow);
1147
+ }
1148
+
1149
+ if (_.options.rtl === true) {
1150
+ if (targetSlide[0]) {
1151
+ targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
1152
+ } else {
1153
+ targetLeft = 0;
1154
+ }
1155
+ } else {
1156
+ targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
1157
+ }
1158
+
1159
+ if (_.options.centerMode === true) {
1160
+ if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
1161
+ targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);
1162
+ } else {
1163
+ targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow + 1);
1164
+ }
1165
+
1166
+ if (_.options.rtl === true) {
1167
+ if (targetSlide[0]) {
1168
+ targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
1169
+ } else {
1170
+ targetLeft = 0;
1171
+ }
1172
+ } else {
1173
+ targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
1174
+ }
1175
+
1176
+ targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2;
1177
+ }
1178
+ }
1179
+
1180
+ return targetLeft;
1181
+
1182
+ };
1183
+
1184
+ Slick.prototype.getOption = Slick.prototype.slickGetOption = function(option) {
1185
+
1186
+ var _ = this;
1187
+
1188
+ return _.options[option];
1189
+
1190
+ };
1191
+
1192
+ Slick.prototype.getNavigableIndexes = function() {
1193
+
1194
+ var _ = this,
1195
+ breakPoint = 0,
1196
+ counter = 0,
1197
+ indexes = [],
1198
+ max;
1199
+
1200
+ if (_.options.infinite === false) {
1201
+ max = _.slideCount;
1202
+ } else {
1203
+ breakPoint = _.options.slidesToScroll * -1;
1204
+ counter = _.options.slidesToScroll * -1;
1205
+ max = _.slideCount * 2;
1206
+ }
1207
+
1208
+ while (breakPoint < max) {
1209
+ indexes.push(breakPoint);
1210
+ breakPoint = counter + _.options.slidesToScroll;
1211
+ counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
1212
+ }
1213
+
1214
+ return indexes;
1215
+
1216
+ };
1217
+
1218
+ Slick.prototype.getSlick = function() {
1219
+
1220
+ return this;
1221
+
1222
+ };
1223
+
1224
+ Slick.prototype.getSlideCount = function() {
1225
+
1226
+ var _ = this,
1227
+ slidesTraversed, swipedSlide, centerOffset;
1228
+
1229
+ centerOffset = _.options.centerMode === true ? _.slideWidth * Math.floor(_.options.slidesToShow / 2) : 0;
1230
+
1231
+ if (_.options.swipeToSlide === true) {
1232
+ _.$slideTrack.find('.slick-slide').each(function(index, slide) {
1233
+ if (slide.offsetLeft - centerOffset + ($(slide).outerWidth() / 2) > (_.swipeLeft * -1)) {
1234
+ swipedSlide = slide;
1235
+ return false;
1236
+ }
1237
+ });
1238
+
1239
+ slidesTraversed = Math.abs($(swipedSlide).attr('data-slick-index') - _.currentSlide) || 1;
1240
+
1241
+ return slidesTraversed;
1242
+
1243
+ } else {
1244
+ return _.options.slidesToScroll;
1245
+ }
1246
+
1247
+ };
1248
+
1249
+ Slick.prototype.goTo = Slick.prototype.slickGoTo = function(slide, dontAnimate) {
1250
+
1251
+ var _ = this;
1252
+
1253
+ _.changeSlide({
1254
+ data: {
1255
+ message: 'index',
1256
+ index: parseInt(slide)
1257
+ }
1258
+ }, dontAnimate);
1259
+
1260
+ };
1261
+
1262
+ Slick.prototype.init = function(creation) {
1263
+
1264
+ var _ = this;
1265
+
1266
+ if (!$(_.$slider).hasClass('slick-initialized')) {
1267
+
1268
+ $(_.$slider).addClass('slick-initialized');
1269
+
1270
+ _.buildRows();
1271
+ _.buildOut();
1272
+ _.setProps();
1273
+ _.startLoad();
1274
+ _.loadSlider();
1275
+ _.initializeEvents();
1276
+ _.updateArrows();
1277
+ _.updateDots();
1278
+ _.checkResponsive(true);
1279
+ _.focusHandler();
1280
+
1281
+ }
1282
+
1283
+ if (creation) {
1284
+ _.$slider.trigger('init', [_]);
1285
+ }
1286
+
1287
+ if (_.options.accessibility === true) {
1288
+ _.initADA();
1289
+ }
1290
+
1291
+ if ( _.options.autoplay ) {
1292
+
1293
+ _.paused = false;
1294
+ _.autoPlay();
1295
+
1296
+ }
1297
+
1298
+ };
1299
+
1300
+ Slick.prototype.initADA = function() {
1301
+ var _ = this,
1302
+ numDotGroups = Math.ceil(_.slideCount / _.options.slidesToShow),
1303
+ tabControlIndexes = _.getNavigableIndexes().filter(function(val) {
1304
+ return (val >= 0) && (val < _.slideCount);
1305
+ });
1306
+
1307
+ _.$slides.add(_.$slideTrack.find('.slick-cloned')).attr({
1308
+ 'aria-hidden': 'true',
1309
+ 'tabindex': '-1'
1310
+ }).find('a, input, button, select').attr({
1311
+ 'tabindex': '-1'
1312
+ });
1313
+
1314
+ if (_.$dots !== null) {
1315
+ _.$slides.not(_.$slideTrack.find('.slick-cloned')).each(function(i) {
1316
+ var slideControlIndex = tabControlIndexes.indexOf(i);
1317
+
1318
+ $(this).attr({
1319
+ 'role': 'tabpanel',
1320
+ 'id': 'slick-slide' + _.instanceUid + i,
1321
+ 'tabindex': -1
1322
+ });
1323
+
1324
+ if (slideControlIndex !== -1) {
1325
+ var ariaButtonControl = 'slick-slide-control' + _.instanceUid + slideControlIndex
1326
+ if ($('#' + ariaButtonControl).length) {
1327
+ $(this).attr({
1328
+ 'aria-describedby': ariaButtonControl
1329
+ });
1330
+ }
1331
+ }
1332
+ });
1333
+
1334
+ _.$dots.attr('role', 'tablist').find('li').each(function(i) {
1335
+ var mappedSlideIndex = tabControlIndexes[i];
1336
+
1337
+ $(this).attr({
1338
+ 'role': 'presentation'
1339
+ });
1340
+
1341
+ $(this).find('button').first().attr({
1342
+ 'role': 'tab',
1343
+ 'id': 'slick-slide-control' + _.instanceUid + i,
1344
+ 'aria-controls': 'slick-slide' + _.instanceUid + mappedSlideIndex,
1345
+ 'aria-label': (i + 1) + ' of ' + numDotGroups,
1346
+ 'aria-selected': null,
1347
+ 'tabindex': '-1'
1348
+ });
1349
+
1350
+ }).eq(_.currentSlide).find('button').attr({
1351
+ 'aria-selected': 'true',
1352
+ 'tabindex': '0'
1353
+ }).end();
1354
+ }
1355
+
1356
+ for (var i=_.currentSlide, max=i+_.options.slidesToShow; i < max; i++) {
1357
+ if (_.options.focusOnChange) {
1358
+ _.$slides.eq(i).attr({'tabindex': '0'});
1359
+ } else {
1360
+ _.$slides.eq(i).removeAttr('tabindex');
1361
+ }
1362
+ }
1363
+
1364
+ _.activateADA();
1365
+
1366
+ };
1367
+
1368
+ Slick.prototype.initArrowEvents = function() {
1369
+
1370
+ var _ = this;
1371
+
1372
+ if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
1373
+ _.$prevArrow
1374
+ .off('click.slick')
1375
+ .on('click.slick', {
1376
+ message: 'previous'
1377
+ }, _.changeSlide);
1378
+ _.$nextArrow
1379
+ .off('click.slick')
1380
+ .on('click.slick', {
1381
+ message: 'next'
1382
+ }, _.changeSlide);
1383
+
1384
+ if (_.options.accessibility === true) {
1385
+ _.$prevArrow.on('keydown.slick', _.keyHandler);
1386
+ _.$nextArrow.on('keydown.slick', _.keyHandler);
1387
+ }
1388
+ }
1389
+
1390
+ };
1391
+
1392
+ Slick.prototype.initDotEvents = function() {
1393
+
1394
+ var _ = this;
1395
+
1396
+ if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
1397
+ $('li', _.$dots).on('click.slick', {
1398
+ message: 'index'
1399
+ }, _.changeSlide);
1400
+
1401
+ if (_.options.accessibility === true) {
1402
+ _.$dots.on('keydown.slick', _.keyHandler);
1403
+ }
1404
+ }
1405
+
1406
+ if (_.options.dots === true && _.options.pauseOnDotsHover === true && _.slideCount > _.options.slidesToShow) {
1407
+
1408
+ $('li', _.$dots)
1409
+ .on('mouseenter.slick', $.proxy(_.interrupt, _, true))
1410
+ .on('mouseleave.slick', $.proxy(_.interrupt, _, false));
1411
+
1412
+ }
1413
+
1414
+ };
1415
+
1416
+ Slick.prototype.initSlideEvents = function() {
1417
+
1418
+ var _ = this;
1419
+
1420
+ if ( _.options.pauseOnHover ) {
1421
+
1422
+ _.$list.on('mouseenter.slick', $.proxy(_.interrupt, _, true));
1423
+ _.$list.on('mouseleave.slick', $.proxy(_.interrupt, _, false));
1424
+
1425
+ }
1426
+
1427
+ };
1428
+
1429
+ Slick.prototype.initializeEvents = function() {
1430
+
1431
+ var _ = this;
1432
+
1433
+ _.initArrowEvents();
1434
+
1435
+ _.initDotEvents();
1436
+ _.initSlideEvents();
1437
+
1438
+ _.$list.on('touchstart.slick mousedown.slick', {
1439
+ action: 'start'
1440
+ }, _.swipeHandler);
1441
+ _.$list.on('touchmove.slick mousemove.slick', {
1442
+ action: 'move'
1443
+ }, _.swipeHandler);
1444
+ _.$list.on('touchend.slick mouseup.slick', {
1445
+ action: 'end'
1446
+ }, _.swipeHandler);
1447
+ _.$list.on('touchcancel.slick mouseleave.slick', {
1448
+ action: 'end'
1449
+ }, _.swipeHandler);
1450
+
1451
+ _.$list.on('click.slick', _.clickHandler);
1452
+
1453
+ $(document).on(_.visibilityChange, $.proxy(_.visibility, _));
1454
+
1455
+ if (_.options.accessibility === true) {
1456
+ _.$list.on('keydown.slick', _.keyHandler);
1457
+ }
1458
+
1459
+ if (_.options.focusOnSelect === true) {
1460
+ $(_.$slideTrack).children().on('click.slick', _.selectHandler);
1461
+ }
1462
+
1463
+ $(window).on('orientationchange.slick.slick-' + _.instanceUid, $.proxy(_.orientationChange, _));
1464
+
1465
+ $(window).on('resize.slick.slick-' + _.instanceUid, $.proxy(_.resize, _));
1466
+
1467
+ $('[draggable!=true]', _.$slideTrack).on('dragstart', _.preventDefault);
1468
+
1469
+ $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition);
1470
+ $(_.setPosition);
1471
+
1472
+ };
1473
+
1474
+ Slick.prototype.initUI = function() {
1475
+
1476
+ var _ = this;
1477
+
1478
+ if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
1479
+
1480
+ _.$prevArrow.show();
1481
+ _.$nextArrow.show();
1482
+
1483
+ }
1484
+
1485
+ if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
1486
+
1487
+ _.$dots.show();
1488
+
1489
+ }
1490
+
1491
+ };
1492
+
1493
+ Slick.prototype.keyHandler = function(event) {
1494
+
1495
+ var _ = this;
1496
+ //Dont slide if the cursor is inside the form fields and arrow keys are pressed
1497
+ if(!event.target.tagName.match('TEXTAREA|INPUT|SELECT')) {
1498
+ if (event.keyCode === 37 && _.options.accessibility === true) {
1499
+ _.changeSlide({
1500
+ data: {
1501
+ message: _.options.rtl === true ? 'next' : 'previous'
1502
+ }
1503
+ });
1504
+ } else if (event.keyCode === 39 && _.options.accessibility === true) {
1505
+ _.changeSlide({
1506
+ data: {
1507
+ message: _.options.rtl === true ? 'previous' : 'next'
1508
+ }
1509
+ });
1510
+ }
1511
+ }
1512
+
1513
+ };
1514
+
1515
+ Slick.prototype.lazyLoad = function() {
1516
+
1517
+ var _ = this,
1518
+ loadRange, cloneRange, rangeStart, rangeEnd;
1519
+
1520
+ function loadImages(imagesScope) {
1521
+
1522
+ $('img[data-lazy]', imagesScope).each(function() {
1523
+
1524
+ var image = $(this),
1525
+ imageSource = $(this).attr('data-lazy'),
1526
+ imageSrcSet = $(this).attr('data-srcset'),
1527
+ imageSizes = $(this).attr('data-sizes') || _.$slider.attr('data-sizes'),
1528
+ imageToLoad = document.createElement('img');
1529
+
1530
+ imageToLoad.onload = function() {
1531
+
1532
+ image
1533
+ .animate({ opacity: 0 }, 100, function() {
1534
+
1535
+ if (imageSrcSet) {
1536
+ image
1537
+ .attr('srcset', imageSrcSet );
1538
+
1539
+ if (imageSizes) {
1540
+ image
1541
+ .attr('sizes', imageSizes );
1542
+ }
1543
+ }
1544
+
1545
+ image
1546
+ .attr('src', imageSource)
1547
+ .animate({ opacity: 1 }, 200, function() {
1548
+ image
1549
+ .removeAttr('data-lazy data-srcset data-sizes')
1550
+ .removeClass('slick-loading');
1551
+ });
1552
+ _.$slider.trigger('lazyLoaded', [_, image, imageSource]);
1553
+ });
1554
+
1555
+ };
1556
+
1557
+ imageToLoad.onerror = function() {
1558
+
1559
+ image
1560
+ .removeAttr( 'data-lazy' )
1561
+ .removeClass( 'slick-loading' )
1562
+ .addClass( 'slick-lazyload-error' );
1563
+
1564
+ _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);
1565
+
1566
+ };
1567
+
1568
+ imageToLoad.src = imageSource;
1569
+
1570
+ });
1571
+
1572
+ }
1573
+
1574
+ if (_.options.centerMode === true) {
1575
+ if (_.options.infinite === true) {
1576
+ rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1);
1577
+ rangeEnd = rangeStart + _.options.slidesToShow + 2;
1578
+ } else {
1579
+ rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1));
1580
+ rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide;
1581
+ }
1582
+ } else {
1583
+ rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;
1584
+ rangeEnd = Math.ceil(rangeStart + _.options.slidesToShow);
1585
+ if (_.options.fade === true) {
1586
+ if (rangeStart > 0) rangeStart--;
1587
+ if (rangeEnd <= _.slideCount) rangeEnd++;
1588
+ }
1589
+ }
1590
+
1591
+ loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd);
1592
+
1593
+ if (_.options.lazyLoad === 'anticipated') {
1594
+ var prevSlide = rangeStart - 1,
1595
+ nextSlide = rangeEnd,
1596
+ $slides = _.$slider.find('.slick-slide');
1597
+
1598
+ for (var i = 0; i < _.options.slidesToScroll; i++) {
1599
+ if (prevSlide < 0) prevSlide = _.slideCount - 1;
1600
+ loadRange = loadRange.add($slides.eq(prevSlide));
1601
+ loadRange = loadRange.add($slides.eq(nextSlide));
1602
+ prevSlide--;
1603
+ nextSlide++;
1604
+ }
1605
+ }
1606
+
1607
+ loadImages(loadRange);
1608
+
1609
+ if (_.slideCount <= _.options.slidesToShow) {
1610
+ cloneRange = _.$slider.find('.slick-slide');
1611
+ loadImages(cloneRange);
1612
+ } else
1613
+ if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {
1614
+ cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow);
1615
+ loadImages(cloneRange);
1616
+ } else if (_.currentSlide === 0) {
1617
+ cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1);
1618
+ loadImages(cloneRange);
1619
+ }
1620
+
1621
+ };
1622
+
1623
+ Slick.prototype.loadSlider = function() {
1624
+
1625
+ var _ = this;
1626
+
1627
+ _.setPosition();
1628
+
1629
+ _.$slideTrack.css({
1630
+ opacity: 1
1631
+ });
1632
+
1633
+ _.$slider.removeClass('slick-loading');
1634
+
1635
+ _.initUI();
1636
+
1637
+ if (_.options.lazyLoad === 'progressive') {
1638
+ _.progressiveLazyLoad();
1639
+ }
1640
+
1641
+ };
1642
+
1643
+ Slick.prototype.next = Slick.prototype.slickNext = function() {
1644
+
1645
+ var _ = this;
1646
+
1647
+ _.changeSlide({
1648
+ data: {
1649
+ message: 'next'
1650
+ }
1651
+ });
1652
+
1653
+ };
1654
+
1655
+ Slick.prototype.orientationChange = function() {
1656
+
1657
+ var _ = this;
1658
+
1659
+ _.checkResponsive();
1660
+ _.setPosition();
1661
+
1662
+ };
1663
+
1664
+ Slick.prototype.pause = Slick.prototype.slickPause = function() {
1665
+
1666
+ var _ = this;
1667
+
1668
+ _.autoPlayClear();
1669
+ _.paused = true;
1670
+
1671
+ };
1672
+
1673
+ Slick.prototype.play = Slick.prototype.slickPlay = function() {
1674
+
1675
+ var _ = this;
1676
+
1677
+ _.autoPlay();
1678
+ _.options.autoplay = true;
1679
+ _.paused = false;
1680
+ _.focussed = false;
1681
+ _.interrupted = false;
1682
+
1683
+ };
1684
+
1685
+ Slick.prototype.postSlide = function(index) {
1686
+
1687
+ var _ = this;
1688
+
1689
+ if( !_.unslicked ) {
1690
+
1691
+ _.$slider.trigger('afterChange', [_, index]);
1692
+
1693
+ _.animating = false;
1694
+
1695
+ if (_.slideCount > _.options.slidesToShow) {
1696
+ _.setPosition();
1697
+ }
1698
+
1699
+ _.swipeLeft = null;
1700
+
1701
+ if ( _.options.autoplay ) {
1702
+ _.autoPlay();
1703
+ }
1704
+
1705
+ if (_.options.accessibility === true) {
1706
+ _.initADA();
1707
+
1708
+ if (_.options.focusOnChange) {
1709
+ var $currentSlide = $(_.$slides.get(_.currentSlide));
1710
+ $currentSlide.attr('tabindex', 0).focus();
1711
+ }
1712
+ }
1713
+
1714
+ }
1715
+
1716
+ };
1717
+
1718
+ Slick.prototype.prev = Slick.prototype.slickPrev = function() {
1719
+
1720
+ var _ = this;
1721
+
1722
+ _.changeSlide({
1723
+ data: {
1724
+ message: 'previous'
1725
+ }
1726
+ });
1727
+
1728
+ };
1729
+
1730
+ Slick.prototype.preventDefault = function(event) {
1731
+
1732
+ event.preventDefault();
1733
+
1734
+ };
1735
+
1736
+ Slick.prototype.progressiveLazyLoad = function( tryCount ) {
1737
+
1738
+ tryCount = tryCount || 1;
1739
+
1740
+ var _ = this,
1741
+ $imgsToLoad = $( 'img[data-lazy]', _.$slider ),
1742
+ image,
1743
+ imageSource,
1744
+ imageSrcSet,
1745
+ imageSizes,
1746
+ imageToLoad;
1747
+
1748
+ if ( $imgsToLoad.length ) {
1749
+
1750
+ image = $imgsToLoad.first();
1751
+ imageSource = image.attr('data-lazy');
1752
+ imageSrcSet = image.attr('data-srcset');
1753
+ imageSizes = image.attr('data-sizes') || _.$slider.attr('data-sizes');
1754
+ imageToLoad = document.createElement('img');
1755
+
1756
+ imageToLoad.onload = function() {
1757
+
1758
+ if (imageSrcSet) {
1759
+ image
1760
+ .attr('srcset', imageSrcSet );
1761
+
1762
+ if (imageSizes) {
1763
+ image
1764
+ .attr('sizes', imageSizes );
1765
+ }
1766
+ }
1767
+
1768
+ image
1769
+ .attr( 'src', imageSource )
1770
+ .removeAttr('data-lazy data-srcset data-sizes')
1771
+ .removeClass('slick-loading');
1772
+
1773
+ if ( _.options.adaptiveHeight === true ) {
1774
+ _.setPosition();
1775
+ }
1776
+
1777
+ _.$slider.trigger('lazyLoaded', [ _, image, imageSource ]);
1778
+ _.progressiveLazyLoad();
1779
+
1780
+ };
1781
+
1782
+ imageToLoad.onerror = function() {
1783
+
1784
+ if ( tryCount < 3 ) {
1785
+
1786
+ /**
1787
+ * try to load the image 3 times,
1788
+ * leave a slight delay so we don't get
1789
+ * servers blocking the request.
1790
+ */
1791
+ setTimeout( function() {
1792
+ _.progressiveLazyLoad( tryCount + 1 );
1793
+ }, 500 );
1794
+
1795
+ } else {
1796
+
1797
+ image
1798
+ .removeAttr( 'data-lazy' )
1799
+ .removeClass( 'slick-loading' )
1800
+ .addClass( 'slick-lazyload-error' );
1801
+
1802
+ _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);
1803
+
1804
+ _.progressiveLazyLoad();
1805
+
1806
+ }
1807
+
1808
+ };
1809
+
1810
+ imageToLoad.src = imageSource;
1811
+
1812
+ } else {
1813
+
1814
+ _.$slider.trigger('allImagesLoaded', [ _ ]);
1815
+
1816
+ }
1817
+
1818
+ };
1819
+
1820
+ Slick.prototype.refresh = function( initializing ) {
1821
+
1822
+ var _ = this, currentSlide, lastVisibleIndex;
1823
+
1824
+ lastVisibleIndex = _.slideCount - _.options.slidesToShow;
1825
+
1826
+ // in non-infinite sliders, we don't want to go past the
1827
+ // last visible index.
1828
+ if( !_.options.infinite && ( _.currentSlide > lastVisibleIndex )) {
1829
+ _.currentSlide = lastVisibleIndex;
1830
+ }
1831
+
1832
+ // if less slides than to show, go to start.
1833
+ if ( _.slideCount <= _.options.slidesToShow ) {
1834
+ _.currentSlide = 0;
1835
+
1836
+ }
1837
+
1838
+ currentSlide = _.currentSlide;
1839
+
1840
+ _.destroy(true);
1841
+
1842
+ $.extend(_, _.initials, { currentSlide: currentSlide });
1843
+
1844
+ _.init();
1845
+
1846
+ if( !initializing ) {
1847
+
1848
+ _.changeSlide({
1849
+ data: {
1850
+ message: 'index',
1851
+ index: currentSlide
1852
+ }
1853
+ }, false);
1854
+
1855
+ }
1856
+
1857
+ };
1858
+
1859
+ Slick.prototype.registerBreakpoints = function() {
1860
+
1861
+ var _ = this, breakpoint, currentBreakpoint, l,
1862
+ responsiveSettings = _.options.responsive || null;
1863
+
1864
+ if ( $.type(responsiveSettings) === 'array' && responsiveSettings.length ) {
1865
+
1866
+ _.respondTo = _.options.respondTo || 'window';
1867
+
1868
+ for ( breakpoint in responsiveSettings ) {
1869
+
1870
+ l = _.breakpoints.length-1;
1871
+
1872
+ if (responsiveSettings.hasOwnProperty(breakpoint)) {
1873
+ currentBreakpoint = responsiveSettings[breakpoint].breakpoint;
1874
+
1875
+ // loop through the breakpoints and cut out any existing
1876
+ // ones with the same breakpoint number, we don't want dupes.
1877
+ while( l >= 0 ) {
1878
+ if( _.breakpoints[l] && _.breakpoints[l] === currentBreakpoint ) {
1879
+ _.breakpoints.splice(l,1);
1880
+ }
1881
+ l--;
1882
+ }
1883
+
1884
+ _.breakpoints.push(currentBreakpoint);
1885
+ _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings;
1886
+
1887
+ }
1888
+
1889
+ }
1890
+
1891
+ _.breakpoints.sort(function(a, b) {
1892
+ return ( _.options.mobileFirst ) ? a-b : b-a;
1893
+ });
1894
+
1895
+ }
1896
+
1897
+ };
1898
+
1899
+ Slick.prototype.reinit = function() {
1900
+
1901
+ var _ = this;
1902
+
1903
+ _.$slides =
1904
+ _.$slideTrack
1905
+ .children(_.options.slide)
1906
+ .addClass('slick-slide');
1907
+
1908
+ _.slideCount = _.$slides.length;
1909
+
1910
+ if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {
1911
+ _.currentSlide = _.currentSlide - _.options.slidesToScroll;
1912
+ }
1913
+
1914
+ if (_.slideCount <= _.options.slidesToShow) {
1915
+ _.currentSlide = 0;
1916
+ }
1917
+
1918
+ _.registerBreakpoints();
1919
+
1920
+ _.setProps();
1921
+ _.setupInfinite();
1922
+ _.buildArrows();
1923
+ _.updateArrows();
1924
+ _.initArrowEvents();
1925
+ _.buildDots();
1926
+ _.updateDots();
1927
+ _.initDotEvents();
1928
+ _.cleanUpSlideEvents();
1929
+ _.initSlideEvents();
1930
+
1931
+ _.checkResponsive(false, true);
1932
+
1933
+ if (_.options.focusOnSelect === true) {
1934
+ $(_.$slideTrack).children().on('click.slick', _.selectHandler);
1935
+ }
1936
+
1937
+ _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);
1938
+
1939
+ _.setPosition();
1940
+ _.focusHandler();
1941
+
1942
+ _.paused = !_.options.autoplay;
1943
+ _.autoPlay();
1944
+
1945
+ _.$slider.trigger('reInit', [_]);
1946
+
1947
+ };
1948
+
1949
+ Slick.prototype.resize = function() {
1950
+
1951
+ var _ = this;
1952
+
1953
+ if ($(window).width() !== _.windowWidth) {
1954
+ clearTimeout(_.windowDelay);
1955
+ _.windowDelay = window.setTimeout(function() {
1956
+ _.windowWidth = $(window).width();
1957
+ _.checkResponsive();
1958
+ if( !_.unslicked ) { _.setPosition(); }
1959
+ }, 50);
1960
+ }
1961
+ };
1962
+
1963
+ Slick.prototype.removeSlide = Slick.prototype.slickRemove = function(index, removeBefore, removeAll) {
1964
+
1965
+ var _ = this;
1966
+
1967
+ if (typeof(index) === 'boolean') {
1968
+ removeBefore = index;
1969
+ index = removeBefore === true ? 0 : _.slideCount - 1;
1970
+ } else {
1971
+ index = removeBefore === true ? --index : index;
1972
+ }
1973
+
1974
+ if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {
1975
+ return false;
1976
+ }
1977
+
1978
+ _.unload();
1979
+
1980
+ if (removeAll === true) {
1981
+ _.$slideTrack.children().remove();
1982
+ } else {
1983
+ _.$slideTrack.children(this.options.slide).eq(index).remove();
1984
+ }
1985
+
1986
+ _.$slides = _.$slideTrack.children(this.options.slide);
1987
+
1988
+ _.$slideTrack.children(this.options.slide).detach();
1989
+
1990
+ _.$slideTrack.append(_.$slides);
1991
+
1992
+ _.$slidesCache = _.$slides;
1993
+
1994
+ _.reinit();
1995
+
1996
+ };
1997
+
1998
+ Slick.prototype.setCSS = function(position) {
1999
+
2000
+ var _ = this,
2001
+ positionProps = {},
2002
+ x, y;
2003
+
2004
+ if (_.options.rtl === true) {
2005
+ position = -position;
2006
+ }
2007
+ x = _.positionProp == 'left' ? Math.ceil(position) + 'px' : '0px';
2008
+ y = _.positionProp == 'top' ? Math.ceil(position) + 'px' : '0px';
2009
+
2010
+ positionProps[_.positionProp] = position;
2011
+
2012
+ if (_.transformsEnabled === false) {
2013
+ _.$slideTrack.css(positionProps);
2014
+ } else {
2015
+ positionProps = {};
2016
+ if (_.cssTransitions === false) {
2017
+ positionProps[_.animType] = 'translate(' + x + ', ' + y + ')';
2018
+ _.$slideTrack.css(positionProps);
2019
+ } else {
2020
+ positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)';
2021
+ _.$slideTrack.css(positionProps);
2022
+ }
2023
+ }
2024
+
2025
+ };
2026
+
2027
+ Slick.prototype.setDimensions = function() {
2028
+
2029
+ var _ = this;
2030
+
2031
+ if (_.options.vertical === false) {
2032
+ if (_.options.centerMode === true) {
2033
+ _.$list.css({
2034
+ padding: ('0px ' + _.options.centerPadding)
2035
+ });
2036
+ }
2037
+ } else {
2038
+ _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow);
2039
+ if (_.options.centerMode === true) {
2040
+ _.$list.css({
2041
+ padding: (_.options.centerPadding + ' 0px')
2042
+ });
2043
+ }
2044
+ }
2045
+
2046
+ _.listWidth = _.$list.width();
2047
+ _.listHeight = _.$list.height();
2048
+
2049
+
2050
+ if (_.options.vertical === false && _.options.variableWidth === false) {
2051
+ _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow);
2052
+ _.$slideTrack.width(Math.ceil((_.slideWidth * _.$slideTrack.children('.slick-slide').length)));
2053
+
2054
+ } else if (_.options.variableWidth === true) {
2055
+ _.$slideTrack.width(5000 * _.slideCount);
2056
+ } else {
2057
+ _.slideWidth = Math.ceil(_.listWidth);
2058
+ _.$slideTrack.height(Math.ceil((_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length)));
2059
+ }
2060
+
2061
+ var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width();
2062
+ if (_.options.variableWidth === false) _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset);
2063
+
2064
+ };
2065
+
2066
+ Slick.prototype.setFade = function() {
2067
+
2068
+ var _ = this,
2069
+ targetLeft;
2070
+
2071
+ _.$slides.each(function(index, element) {
2072
+ targetLeft = (_.slideWidth * index) * -1;
2073
+ if (_.options.rtl === true) {
2074
+ $(element).css({
2075
+ position: 'relative',
2076
+ right: targetLeft,
2077
+ top: 0,
2078
+ zIndex: _.options.zIndex - 2,
2079
+ opacity: 0
2080
+ });
2081
+ } else {
2082
+ $(element).css({
2083
+ position: 'relative',
2084
+ left: targetLeft,
2085
+ top: 0,
2086
+ zIndex: _.options.zIndex - 2,
2087
+ opacity: 0
2088
+ });
2089
+ }
2090
+ });
2091
+
2092
+ _.$slides.eq(_.currentSlide).css({
2093
+ zIndex: _.options.zIndex - 1,
2094
+ opacity: 1
2095
+ });
2096
+
2097
+ };
2098
+
2099
+ Slick.prototype.setHeight = function() {
2100
+
2101
+ var _ = this;
2102
+
2103
+ if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
2104
+ var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
2105
+ _.$list.css('height', targetHeight);
2106
+ }
2107
+
2108
+ };
2109
+
2110
+ Slick.prototype.setOption =
2111
+ Slick.prototype.slickSetOption = function() {
2112
+
2113
+ /**
2114
+ * accepts arguments in format of:
2115
+ *
2116
+ * - for changing a single option's value:
2117
+ * .slick("setOption", option, value, refresh )
2118
+ *
2119
+ * - for changing a set of responsive options:
2120
+ * .slick("setOption", 'responsive', [{}, ...], refresh )
2121
+ *
2122
+ * - for updating multiple values at once (not responsive)
2123
+ * .slick("setOption", { 'option': value, ... }, refresh )
2124
+ */
2125
+
2126
+ var _ = this, l, item, option, value, refresh = false, type;
2127
+
2128
+ if( $.type( arguments[0] ) === 'object' ) {
2129
+
2130
+ option = arguments[0];
2131
+ refresh = arguments[1];
2132
+ type = 'multiple';
2133
+
2134
+ } else if ( $.type( arguments[0] ) === 'string' ) {
2135
+
2136
+ option = arguments[0];
2137
+ value = arguments[1];
2138
+ refresh = arguments[2];
2139
+
2140
+ if ( arguments[0] === 'responsive' && $.type( arguments[1] ) === 'array' ) {
2141
+
2142
+ type = 'responsive';
2143
+
2144
+ } else if ( typeof arguments[1] !== 'undefined' ) {
2145
+
2146
+ type = 'single';
2147
+
2148
+ }
2149
+
2150
+ }
2151
+
2152
+ if ( type === 'single' ) {
2153
+
2154
+ _.options[option] = value;
2155
+
2156
+
2157
+ } else if ( type === 'multiple' ) {
2158
+
2159
+ $.each( option , function( opt, val ) {
2160
+
2161
+ _.options[opt] = val;
2162
+
2163
+ });
2164
+
2165
+
2166
+ } else if ( type === 'responsive' ) {
2167
+
2168
+ for ( item in value ) {
2169
+
2170
+ if( $.type( _.options.responsive ) !== 'array' ) {
2171
+
2172
+ _.options.responsive = [ value[item] ];
2173
+
2174
+ } else {
2175
+
2176
+ l = _.options.responsive.length-1;
2177
+
2178
+ // loop through the responsive object and splice out duplicates.
2179
+ while( l >= 0 ) {
2180
+
2181
+ if( _.options.responsive[l].breakpoint === value[item].breakpoint ) {
2182
+
2183
+ _.options.responsive.splice(l,1);
2184
+
2185
+ }
2186
+
2187
+ l--;
2188
+
2189
+ }
2190
+
2191
+ _.options.responsive.push( value[item] );
2192
+
2193
+ }
2194
+
2195
+ }
2196
+
2197
+ }
2198
+
2199
+ if ( refresh ) {
2200
+
2201
+ _.unload();
2202
+ _.reinit();
2203
+
2204
+ }
2205
+
2206
+ };
2207
+
2208
+ Slick.prototype.setPosition = function() {
2209
+
2210
+ var _ = this;
2211
+
2212
+ _.setDimensions();
2213
+
2214
+ _.setHeight();
2215
+
2216
+ if (_.options.fade === false) {
2217
+ _.setCSS(_.getLeft(_.currentSlide));
2218
+ } else {
2219
+ _.setFade();
2220
+ }
2221
+
2222
+ _.$slider.trigger('setPosition', [_]);
2223
+
2224
+ };
2225
+
2226
+ Slick.prototype.setProps = function() {
2227
+
2228
+ var _ = this,
2229
+ bodyStyle = document.body.style;
2230
+
2231
+ _.positionProp = _.options.vertical === true ? 'top' : 'left';
2232
+
2233
+ if (_.positionProp === 'top') {
2234
+ _.$slider.addClass('slick-vertical');
2235
+ } else {
2236
+ _.$slider.removeClass('slick-vertical');
2237
+ }
2238
+
2239
+ if (bodyStyle.WebkitTransition !== undefined ||
2240
+ bodyStyle.MozTransition !== undefined ||
2241
+ bodyStyle.msTransition !== undefined) {
2242
+ if (_.options.useCSS === true) {
2243
+ _.cssTransitions = true;
2244
+ }
2245
+ }
2246
+
2247
+ if ( _.options.fade ) {
2248
+ if ( typeof _.options.zIndex === 'number' ) {
2249
+ if( _.options.zIndex < 3 ) {
2250
+ _.options.zIndex = 3;
2251
+ }
2252
+ } else {
2253
+ _.options.zIndex = _.defaults.zIndex;
2254
+ }
2255
+ }
2256
+
2257
+ if (bodyStyle.OTransform !== undefined) {
2258
+ _.animType = 'OTransform';
2259
+ _.transformType = '-o-transform';
2260
+ _.transitionType = 'OTransition';
2261
+ if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;
2262
+ }
2263
+ if (bodyStyle.MozTransform !== undefined) {
2264
+ _.animType = 'MozTransform';
2265
+ _.transformType = '-moz-transform';
2266
+ _.transitionType = 'MozTransition';
2267
+ if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false;
2268
+ }
2269
+ if (bodyStyle.webkitTransform !== undefined) {
2270
+ _.animType = 'webkitTransform';
2271
+ _.transformType = '-webkit-transform';
2272
+ _.transitionType = 'webkitTransition';
2273
+ if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;
2274
+ }
2275
+ if (bodyStyle.msTransform !== undefined) {
2276
+ _.animType = 'msTransform';
2277
+ _.transformType = '-ms-transform';
2278
+ _.transitionType = 'msTransition';
2279
+ if (bodyStyle.msTransform === undefined) _.animType = false;
2280
+ }
2281
+ if (bodyStyle.transform !== undefined && _.animType !== false) {
2282
+ _.animType = 'transform';
2283
+ _.transformType = 'transform';
2284
+ _.transitionType = 'transition';
2285
+ }
2286
+ _.transformsEnabled = _.options.useTransform && (_.animType !== null && _.animType !== false);
2287
+ };
2288
+
2289
+
2290
+ Slick.prototype.setSlideClasses = function(index) {
2291
+
2292
+ var _ = this,
2293
+ centerOffset, allSlides, indexOffset, remainder;
2294
+
2295
+ allSlides = _.$slider
2296
+ .find('.slick-slide')
2297
+ .removeClass('slick-active slick-center slick-current')
2298
+ .attr('aria-hidden', 'true');
2299
+
2300
+ _.$slides
2301
+ .eq(index)
2302
+ .addClass('slick-current');
2303
+
2304
+ if (_.options.centerMode === true) {
2305
+
2306
+ var evenCoef = _.options.slidesToShow % 2 === 0 ? 1 : 0;
2307
+
2308
+ centerOffset = Math.floor(_.options.slidesToShow / 2);
2309
+
2310
+ if (_.options.infinite === true) {
2311
+
2312
+ if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) {
2313
+ _.$slides
2314
+ .slice(index - centerOffset + evenCoef, index + centerOffset + 1)
2315
+ .addClass('slick-active')
2316
+ .attr('aria-hidden', 'false');
2317
+
2318
+ } else {
2319
+
2320
+ indexOffset = _.options.slidesToShow + index;
2321
+ allSlides
2322
+ .slice(indexOffset - centerOffset + 1 + evenCoef, indexOffset + centerOffset + 2)
2323
+ .addClass('slick-active')
2324
+ .attr('aria-hidden', 'false');
2325
+
2326
+ }
2327
+
2328
+ if (index === 0) {
2329
+
2330
+ allSlides
2331
+ .eq(allSlides.length - 1 - _.options.slidesToShow)
2332
+ .addClass('slick-center');
2333
+
2334
+ } else if (index === _.slideCount - 1) {
2335
+
2336
+ allSlides
2337
+ .eq(_.options.slidesToShow)
2338
+ .addClass('slick-center');
2339
+
2340
+ }
2341
+
2342
+ }
2343
+
2344
+ _.$slides
2345
+ .eq(index)
2346
+ .addClass('slick-center');
2347
+
2348
+ } else {
2349
+
2350
+ if (index >= 0 && index <= (_.slideCount - _.options.slidesToShow)) {
2351
+
2352
+ _.$slides
2353
+ .slice(index, index + _.options.slidesToShow)
2354
+ .addClass('slick-active')
2355
+ .attr('aria-hidden', 'false');
2356
+
2357
+ } else if (allSlides.length <= _.options.slidesToShow) {
2358
+
2359
+ allSlides
2360
+ .addClass('slick-active')
2361
+ .attr('aria-hidden', 'false');
2362
+
2363
+ } else {
2364
+
2365
+ remainder = _.slideCount % _.options.slidesToShow;
2366
+ indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index;
2367
+
2368
+ if (_.options.slidesToShow == _.options.slidesToScroll && (_.slideCount - index) < _.options.slidesToShow) {
2369
+
2370
+ allSlides
2371
+ .slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder)
2372
+ .addClass('slick-active')
2373
+ .attr('aria-hidden', 'false');
2374
+
2375
+ } else {
2376
+
2377
+ allSlides
2378
+ .slice(indexOffset, indexOffset + _.options.slidesToShow)
2379
+ .addClass('slick-active')
2380
+ .attr('aria-hidden', 'false');
2381
+
2382
+ }
2383
+
2384
+ }
2385
+
2386
+ }
2387
+
2388
+ if (_.options.lazyLoad === 'ondemand' || _.options.lazyLoad === 'anticipated') {
2389
+ _.lazyLoad();
2390
+ }
2391
+ };
2392
+
2393
+ Slick.prototype.setupInfinite = function() {
2394
+
2395
+ var _ = this,
2396
+ i, slideIndex, infiniteCount;
2397
+
2398
+ if (_.options.fade === true) {
2399
+ _.options.centerMode = false;
2400
+ }
2401
+
2402
+ if (_.options.infinite === true && _.options.fade === false) {
2403
+
2404
+ slideIndex = null;
2405
+
2406
+ if (_.slideCount > _.options.slidesToShow) {
2407
+
2408
+ if (_.options.centerMode === true) {
2409
+ infiniteCount = _.options.slidesToShow + 1;
2410
+ } else {
2411
+ infiniteCount = _.options.slidesToShow;
2412
+ }
2413
+
2414
+ for (i = _.slideCount; i > (_.slideCount -
2415
+ infiniteCount); i -= 1) {
2416
+ slideIndex = i - 1;
2417
+ $(_.$slides[slideIndex]).clone(true).attr('id', '')
2418
+ .attr('data-slick-index', slideIndex - _.slideCount)
2419
+ .prependTo(_.$slideTrack).addClass('slick-cloned');
2420
+ }
2421
+ for (i = 0; i < infiniteCount + _.slideCount; i += 1) {
2422
+ slideIndex = i;
2423
+ $(_.$slides[slideIndex]).clone(true).attr('id', '')
2424
+ .attr('data-slick-index', slideIndex + _.slideCount)
2425
+ .appendTo(_.$slideTrack).addClass('slick-cloned');
2426
+ }
2427
+ _.$slideTrack.find('.slick-cloned').find('[id]').each(function() {
2428
+ $(this).attr('id', '');
2429
+ });
2430
+
2431
+ }
2432
+
2433
+ }
2434
+
2435
+ };
2436
+
2437
+ Slick.prototype.interrupt = function( toggle ) {
2438
+
2439
+ var _ = this;
2440
+
2441
+ if( !toggle ) {
2442
+ _.autoPlay();
2443
+ }
2444
+ _.interrupted = toggle;
2445
+
2446
+ };
2447
+
2448
+ Slick.prototype.selectHandler = function(event) {
2449
+
2450
+ var _ = this;
2451
+
2452
+ var targetElement =
2453
+ $(event.target).is('.slick-slide') ?
2454
+ $(event.target) :
2455
+ $(event.target).parents('.slick-slide');
2456
+
2457
+ var index = parseInt(targetElement.attr('data-slick-index'));
2458
+
2459
+ if (!index) index = 0;
2460
+
2461
+ if (_.slideCount <= _.options.slidesToShow) {
2462
+
2463
+ _.slideHandler(index, false, true);
2464
+ return;
2465
+
2466
+ }
2467
+
2468
+ _.slideHandler(index);
2469
+
2470
+ };
2471
+
2472
+ Slick.prototype.slideHandler = function(index, sync, dontAnimate) {
2473
+
2474
+ var targetSlide, animSlide, oldSlide, slideLeft, targetLeft = null,
2475
+ _ = this, navTarget;
2476
+
2477
+ sync = sync || false;
2478
+
2479
+ if (_.animating === true && _.options.waitForAnimate === true) {
2480
+ return;
2481
+ }
2482
+
2483
+ if (_.options.fade === true && _.currentSlide === index) {
2484
+ return;
2485
+ }
2486
+
2487
+ if (sync === false) {
2488
+ _.asNavFor(index);
2489
+ }
2490
+
2491
+ targetSlide = index;
2492
+ targetLeft = _.getLeft(targetSlide);
2493
+ slideLeft = _.getLeft(_.currentSlide);
2494
+
2495
+ _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;
2496
+
2497
+ if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) {
2498
+ if (_.options.fade === false) {
2499
+ targetSlide = _.currentSlide;
2500
+ if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {
2501
+ _.animateSlide(slideLeft, function() {
2502
+ _.postSlide(targetSlide);
2503
+ });
2504
+ } else {
2505
+ _.postSlide(targetSlide);
2506
+ }
2507
+ }
2508
+ return;
2509
+ } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > (_.slideCount - _.options.slidesToScroll))) {
2510
+ if (_.options.fade === false) {
2511
+ targetSlide = _.currentSlide;
2512
+ if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {
2513
+ _.animateSlide(slideLeft, function() {
2514
+ _.postSlide(targetSlide);
2515
+ });
2516
+ } else {
2517
+ _.postSlide(targetSlide);
2518
+ }
2519
+ }
2520
+ return;
2521
+ }
2522
+
2523
+ if ( _.options.autoplay ) {
2524
+ clearInterval(_.autoPlayTimer);
2525
+ }
2526
+
2527
+ if (targetSlide < 0) {
2528
+ if (_.slideCount % _.options.slidesToScroll !== 0) {
2529
+ animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll);
2530
+ } else {
2531
+ animSlide = _.slideCount + targetSlide;
2532
+ }
2533
+ } else if (targetSlide >= _.slideCount) {
2534
+ if (_.slideCount % _.options.slidesToScroll !== 0) {
2535
+ animSlide = 0;
2536
+ } else {
2537
+ animSlide = targetSlide - _.slideCount;
2538
+ }
2539
+ } else {
2540
+ animSlide = targetSlide;
2541
+ }
2542
+
2543
+ _.animating = true;
2544
+
2545
+ _.$slider.trigger('beforeChange', [_, _.currentSlide, animSlide]);
2546
+
2547
+ oldSlide = _.currentSlide;
2548
+ _.currentSlide = animSlide;
2549
+
2550
+ _.setSlideClasses(_.currentSlide);
2551
+
2552
+ if ( _.options.asNavFor ) {
2553
+
2554
+ navTarget = _.getNavTarget();
2555
+ navTarget = navTarget.slick('getSlick');
2556
+
2557
+ if ( navTarget.slideCount <= navTarget.options.slidesToShow ) {
2558
+ navTarget.setSlideClasses(_.currentSlide);
2559
+ }
2560
+
2561
+ }
2562
+
2563
+ _.updateDots();
2564
+ _.updateArrows();
2565
+
2566
+ if (_.options.fade === true) {
2567
+ if (dontAnimate !== true) {
2568
+
2569
+ _.fadeSlideOut(oldSlide);
2570
+
2571
+ _.fadeSlide(animSlide, function() {
2572
+ _.postSlide(animSlide);
2573
+ });
2574
+
2575
+ } else {
2576
+ _.postSlide(animSlide);
2577
+ }
2578
+ _.animateHeight();
2579
+ return;
2580
+ }
2581
+
2582
+ if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {
2583
+ _.animateSlide(targetLeft, function() {
2584
+ _.postSlide(animSlide);
2585
+ });
2586
+ } else {
2587
+ _.postSlide(animSlide);
2588
+ }
2589
+
2590
+ };
2591
+
2592
+ Slick.prototype.startLoad = function() {
2593
+
2594
+ var _ = this;
2595
+
2596
+ if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
2597
+
2598
+ _.$prevArrow.hide();
2599
+ _.$nextArrow.hide();
2600
+
2601
+ }
2602
+
2603
+ if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
2604
+
2605
+ _.$dots.hide();
2606
+
2607
+ }
2608
+
2609
+ _.$slider.addClass('slick-loading');
2610
+
2611
+ };
2612
+
2613
+ Slick.prototype.swipeDirection = function() {
2614
+
2615
+ var xDist, yDist, r, swipeAngle, _ = this;
2616
+
2617
+ xDist = _.touchObject.startX - _.touchObject.curX;
2618
+ yDist = _.touchObject.startY - _.touchObject.curY;
2619
+ r = Math.atan2(yDist, xDist);
2620
+
2621
+ swipeAngle = Math.round(r * 180 / Math.PI);
2622
+ if (swipeAngle < 0) {
2623
+ swipeAngle = 360 - Math.abs(swipeAngle);
2624
+ }
2625
+
2626
+ if ((swipeAngle <= 45) && (swipeAngle >= 0)) {
2627
+ return (_.options.rtl === false ? 'left' : 'right');
2628
+ }
2629
+ if ((swipeAngle <= 360) && (swipeAngle >= 315)) {
2630
+ return (_.options.rtl === false ? 'left' : 'right');
2631
+ }
2632
+ if ((swipeAngle >= 135) && (swipeAngle <= 225)) {
2633
+ return (_.options.rtl === false ? 'right' : 'left');
2634
+ }
2635
+ if (_.options.verticalSwiping === true) {
2636
+ if ((swipeAngle >= 35) && (swipeAngle <= 135)) {
2637
+ return 'down';
2638
+ } else {
2639
+ return 'up';
2640
+ }
2641
+ }
2642
+
2643
+ return 'vertical';
2644
+
2645
+ };
2646
+
2647
+ Slick.prototype.swipeEnd = function(event) {
2648
+
2649
+ var _ = this,
2650
+ slideCount,
2651
+ direction;
2652
+
2653
+ _.dragging = false;
2654
+ _.swiping = false;
2655
+
2656
+ if (_.scrolling) {
2657
+ _.scrolling = false;
2658
+ return false;
2659
+ }
2660
+
2661
+ _.interrupted = false;
2662
+ _.shouldClick = ( _.touchObject.swipeLength > 10 ) ? false : true;
2663
+
2664
+ if ( _.touchObject.curX === undefined ) {
2665
+ return false;
2666
+ }
2667
+
2668
+ if ( _.touchObject.edgeHit === true ) {
2669
+ _.$slider.trigger('edge', [_, _.swipeDirection() ]);
2670
+ }
2671
+
2672
+ if ( _.touchObject.swipeLength >= _.touchObject.minSwipe ) {
2673
+
2674
+ direction = _.swipeDirection();
2675
+
2676
+ switch ( direction ) {
2677
+
2678
+ case 'left':
2679
+ case 'down':
2680
+
2681
+ slideCount =
2682
+ _.options.swipeToSlide ?
2683
+ _.checkNavigable( _.currentSlide + _.getSlideCount() ) :
2684
+ _.currentSlide + _.getSlideCount();
2685
+
2686
+ _.currentDirection = 0;
2687
+
2688
+ break;
2689
+
2690
+ case 'right':
2691
+ case 'up':
2692
+
2693
+ slideCount =
2694
+ _.options.swipeToSlide ?
2695
+ _.checkNavigable( _.currentSlide - _.getSlideCount() ) :
2696
+ _.currentSlide - _.getSlideCount();
2697
+
2698
+ _.currentDirection = 1;
2699
+
2700
+ break;
2701
+
2702
+ default:
2703
+
2704
+
2705
+ }
2706
+
2707
+ if( direction != 'vertical' ) {
2708
+
2709
+ _.slideHandler( slideCount );
2710
+ _.touchObject = {};
2711
+ _.$slider.trigger('swipe', [_, direction ]);
2712
+
2713
+ }
2714
+
2715
+ } else {
2716
+
2717
+ if ( _.touchObject.startX !== _.touchObject.curX ) {
2718
+
2719
+ _.slideHandler( _.currentSlide );
2720
+ _.touchObject = {};
2721
+
2722
+ }
2723
+
2724
+ }
2725
+
2726
+ };
2727
+
2728
+ Slick.prototype.swipeHandler = function(event) {
2729
+
2730
+ var _ = this;
2731
+
2732
+ if ((_.options.swipe === false) || ('ontouchend' in document && _.options.swipe === false)) {
2733
+ return;
2734
+ } else if (_.options.draggable === false && event.type.indexOf('mouse') !== -1) {
2735
+ return;
2736
+ }
2737
+
2738
+ _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ?
2739
+ event.originalEvent.touches.length : 1;
2740
+
2741
+ _.touchObject.minSwipe = _.listWidth / _.options
2742
+ .touchThreshold;
2743
+
2744
+ if (_.options.verticalSwiping === true) {
2745
+ _.touchObject.minSwipe = _.listHeight / _.options
2746
+ .touchThreshold;
2747
+ }
2748
+
2749
+ switch (event.data.action) {
2750
+
2751
+ case 'start':
2752
+ _.swipeStart(event);
2753
+ break;
2754
+
2755
+ case 'move':
2756
+ _.swipeMove(event);
2757
+ break;
2758
+
2759
+ case 'end':
2760
+ _.swipeEnd(event);
2761
+ break;
2762
+
2763
+ }
2764
+
2765
+ };
2766
+
2767
+ Slick.prototype.swipeMove = function(event) {
2768
+
2769
+ var _ = this,
2770
+ edgeWasHit = false,
2771
+ curLeft, swipeDirection, swipeLength, positionOffset, touches, verticalSwipeLength;
2772
+
2773
+ touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;
2774
+
2775
+ if (!_.dragging || _.scrolling || touches && touches.length !== 1) {
2776
+ return false;
2777
+ }
2778
+
2779
+ curLeft = _.getLeft(_.currentSlide);
2780
+
2781
+ _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;
2782
+ _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;
2783
+
2784
+ _.touchObject.swipeLength = Math.round(Math.sqrt(
2785
+ Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));
2786
+
2787
+ verticalSwipeLength = Math.round(Math.sqrt(
2788
+ Math.pow(_.touchObject.curY - _.touchObject.startY, 2)));
2789
+
2790
+ if (!_.options.verticalSwiping && !_.swiping && verticalSwipeLength > 4) {
2791
+ _.scrolling = true;
2792
+ return false;
2793
+ }
2794
+
2795
+ if (_.options.verticalSwiping === true) {
2796
+ _.touchObject.swipeLength = verticalSwipeLength;
2797
+ }
2798
+
2799
+ swipeDirection = _.swipeDirection();
2800
+
2801
+ if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) {
2802
+ _.swiping = true;
2803
+ event.preventDefault();
2804
+ }
2805
+
2806
+ positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1);
2807
+ if (_.options.verticalSwiping === true) {
2808
+ positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1;
2809
+ }
2810
+
2811
+
2812
+ swipeLength = _.touchObject.swipeLength;
2813
+
2814
+ _.touchObject.edgeHit = false;
2815
+
2816
+ if (_.options.infinite === false) {
2817
+ if ((_.currentSlide === 0 && swipeDirection === 'right') || (_.currentSlide >= _.getDotCount() && swipeDirection === 'left')) {
2818
+ swipeLength = _.touchObject.swipeLength * _.options.edgeFriction;
2819
+ _.touchObject.edgeHit = true;
2820
+ }
2821
+ }
2822
+
2823
+ if (_.options.vertical === false) {
2824
+ _.swipeLeft = curLeft + swipeLength * positionOffset;
2825
+ } else {
2826
+ _.swipeLeft = curLeft + (swipeLength * (_.$list.height() / _.listWidth)) * positionOffset;
2827
+ }
2828
+ if (_.options.verticalSwiping === true) {
2829
+ _.swipeLeft = curLeft + swipeLength * positionOffset;
2830
+ }
2831
+
2832
+ if (_.options.fade === true || _.options.touchMove === false) {
2833
+ return false;
2834
+ }
2835
+
2836
+ if (_.animating === true) {
2837
+ _.swipeLeft = null;
2838
+ return false;
2839
+ }
2840
+
2841
+ _.setCSS(_.swipeLeft);
2842
+
2843
+ };
2844
+
2845
+ Slick.prototype.swipeStart = function(event) {
2846
+
2847
+ var _ = this,
2848
+ touches;
2849
+
2850
+ _.interrupted = true;
2851
+
2852
+ if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {
2853
+ _.touchObject = {};
2854
+ return false;
2855
+ }
2856
+
2857
+ if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {
2858
+ touches = event.originalEvent.touches[0];
2859
+ }
2860
+
2861
+ _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;
2862
+ _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;
2863
+
2864
+ _.dragging = true;
2865
+
2866
+ };
2867
+
2868
+ Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function() {
2869
+
2870
+ var _ = this;
2871
+
2872
+ if (_.$slidesCache !== null) {
2873
+
2874
+ _.unload();
2875
+
2876
+ _.$slideTrack.children(this.options.slide).detach();
2877
+
2878
+ _.$slidesCache.appendTo(_.$slideTrack);
2879
+
2880
+ _.reinit();
2881
+
2882
+ }
2883
+
2884
+ };
2885
+
2886
+ Slick.prototype.unload = function() {
2887
+
2888
+ var _ = this;
2889
+
2890
+ $('.slick-cloned', _.$slider).remove();
2891
+
2892
+ if (_.$dots) {
2893
+ _.$dots.remove();
2894
+ }
2895
+
2896
+ if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) {
2897
+ _.$prevArrow.remove();
2898
+ }
2899
+
2900
+ if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) {
2901
+ _.$nextArrow.remove();
2902
+ }
2903
+
2904
+ _.$slides
2905
+ .removeClass('slick-slide slick-active slick-visible slick-current')
2906
+ .attr('aria-hidden', 'true')
2907
+ .css('width', '');
2908
+
2909
+ };
2910
+
2911
+ Slick.prototype.unslick = function(fromBreakpoint) {
2912
+
2913
+ var _ = this;
2914
+ _.$slider.trigger('unslick', [_, fromBreakpoint]);
2915
+ _.destroy();
2916
+
2917
+ };
2918
+
2919
+ Slick.prototype.updateArrows = function() {
2920
+
2921
+ var _ = this,
2922
+ centerOffset;
2923
+
2924
+ centerOffset = Math.floor(_.options.slidesToShow / 2);
2925
+
2926
+ if ( _.options.arrows === true &&
2927
+ _.slideCount > _.options.slidesToShow &&
2928
+ !_.options.infinite ) {
2929
+
2930
+ _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
2931
+ _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
2932
+
2933
+ if (_.currentSlide === 0) {
2934
+
2935
+ _.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
2936
+ _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
2937
+
2938
+ } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {
2939
+
2940
+ _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
2941
+ _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
2942
+
2943
+ } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {
2944
+
2945
+ _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
2946
+ _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
2947
+
2948
+ }
2949
+
2950
+ }
2951
+
2952
+ };
2953
+
2954
+ Slick.prototype.updateDots = function() {
2955
+
2956
+ var _ = this;
2957
+
2958
+ if (_.$dots !== null) {
2959
+
2960
+ _.$dots
2961
+ .find('li')
2962
+ .removeClass('slick-active')
2963
+ .end();
2964
+
2965
+ _.$dots
2966
+ .find('li')
2967
+ .eq(Math.floor(_.currentSlide / _.options.slidesToScroll))
2968
+ .addClass('slick-active');
2969
+
2970
+ }
2971
+
2972
+ };
2973
+
2974
+ Slick.prototype.visibility = function() {
2975
+
2976
+ var _ = this;
2977
+
2978
+ if ( _.options.autoplay ) {
2979
+
2980
+ if ( document[_.hidden] ) {
2981
+
2982
+ _.interrupted = true;
2983
+
2984
+ } else {
2985
+
2986
+ _.interrupted = false;
2987
+
2988
+ }
2989
+
2990
+ }
2991
+
2992
+ };
2993
+
2994
+ $.fn.slick = function() {
2995
+ var _ = this,
2996
+ opt = arguments[0],
2997
+ args = Array.prototype.slice.call(arguments, 1),
2998
+ l = _.length,
2999
+ i,
3000
+ ret;
3001
+ for (i = 0; i < l; i++) {
3002
+ if (typeof opt == 'object' || typeof opt == 'undefined')
3003
+ _[i].slick = new Slick(_[i], opt);
3004
+ else
3005
+ ret = _[i].slick[opt].apply(_[i].slick, args);
3006
+ if (typeof ret != 'undefined') return ret;
3007
+ }
3008
+ return _;
3009
+ };
3010
+
3011
+ }));
assets/vendor/slick/slick.less ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Slider */
2
+
3
+ .slick-slider {
4
+ position: relative;
5
+ display: block;
6
+ box-sizing: border-box;
7
+ -webkit-touch-callout: none;
8
+ -webkit-user-select: none;
9
+ -khtml-user-select: none;
10
+ -moz-user-select: none;
11
+ -ms-user-select: none;
12
+ user-select: none;
13
+ -ms-touch-action: pan-y;
14
+ touch-action: pan-y;
15
+ -webkit-tap-highlight-color: transparent;
16
+ }
17
+ .slick-list {
18
+ position: relative;
19
+ overflow: hidden;
20
+ display: block;
21
+ margin: 0;
22
+ padding: 0;
23
+
24
+ &:focus {
25
+ outline: none;
26
+ }
27
+
28
+ &.dragging {
29
+ cursor: pointer;
30
+ cursor: hand;
31
+ }
32
+ }
33
+ .slick-slider .slick-track,
34
+ .slick-slider .slick-list {
35
+ -webkit-transform: translate3d(0, 0, 0);
36
+ -moz-transform: translate3d(0, 0, 0);
37
+ -ms-transform: translate3d(0, 0, 0);
38
+ -o-transform: translate3d(0, 0, 0);
39
+ transform: translate3d(0, 0, 0);
40
+ }
41
+
42
+ .slick-track {
43
+ position: relative;
44
+ left: 0;
45
+ top: 0;
46
+ display: block;
47
+ margin-left: auto;
48
+ margin-right: auto;
49
+
50
+ &:before,
51
+ &:after {
52
+ content: "";
53
+ display: table;
54
+ }
55
+
56
+ &:after {
57
+ clear: both;
58
+ }
59
+
60
+ .slick-loading & {
61
+ visibility: hidden;
62
+ }
63
+ }
64
+ .slick-slide {
65
+ float: left;
66
+ height: 100%;
67
+ min-height: 1px;
68
+ [dir="rtl"] & {
69
+ float: right;
70
+ }
71
+ img {
72
+ display: block;
73
+ }
74
+ &.slick-loading img {
75
+ display: none;
76
+ }
77
+
78
+ display: none;
79
+
80
+ &.dragging img {
81
+ pointer-events: none;
82
+ }
83
+
84
+ .slick-initialized & {
85
+ display: block;
86
+ }
87
+
88
+ .slick-loading & {
89
+ visibility: hidden;
90
+ }
91
+
92
+ .slick-vertical & {
93
+ display: block;
94
+ height: auto;
95
+ border: 1px solid transparent;
96
+ }
97
+ }
98
+ .slick-arrow.slick-hidden {
99
+ display: none;
100
+ }
assets/vendor/slick/slick.min.js ADDED
@@ -0,0 +1 @@
 
1
+ !function(i){"use strict";"function"==typeof define&&define.amd?define(["jquery"],i):"undefined"!=typeof exports?module.exports=i(require("jquery")):i(jQuery)}(function(i){"use strict";var e=window.Slick||{};(e=function(){var e=0;return function(t,o){var s,n=this;n.defaults={accessibility:!0,adaptiveHeight:!1,appendArrows:i(t),appendDots:i(t),arrows:!0,asNavFor:null,prevArrow:'<button class="slick-prev" aria-label="Previous" type="button">Previous</button>',nextArrow:'<button class="slick-next" aria-label="Next" type="button">Next</button>',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(e,t){return i('<button type="button" />').text(t+1)},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,focusOnChange:!1,infinite:!0,initialSlide:0,lazyLoad:"ondemand",mobileFirst:!1,pauseOnHover:!0,pauseOnFocus:!0,pauseOnDotsHover:!1,respondTo:"window",responsive:null,rows:1,rtl:!1,slide:"",slidesPerRow:1,slidesToShow:1,slidesToScroll:1,speed:500,swipe:!0,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!0,variableWidth:!1,vertical:!1,verticalSwiping:!1,waitForAnimate:!0,zIndex:1e3},n.initials={animating:!1,dragging:!1,autoPlayTimer:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,$dots:null,listWidth:null,listHeight:null,loadIndex:0,$nextArrow:null,$prevArrow:null,scrolling:!1,slideCount:null,slideWidth:null,$slideTrack:null,$slides:null,sliding:!1,slideOffset:0,swipeLeft:null,swiping:!1,$list:null,touchObject:{},transformsEnabled:!1,unslicked:!1},i.extend(n,n.initials),n.activeBreakpoint=null,n.animType=null,n.animProp=null,n.breakpoints=[],n.breakpointSettings=[],n.cssTransitions=!1,n.focussed=!1,n.interrupted=!1,n.hidden="hidden",n.paused=!0,n.positionProp=null,n.respondTo=null,n.rowCount=1,n.shouldClick=!0,n.$slider=i(t),n.$slidesCache=null,n.transformType=null,n.transitionType=null,n.visibilityChange="visibilitychange",n.windowWidth=0,n.windowTimer=null,s=i(t).data("slick")||{},n.options=i.extend({},n.defaults,o,s),n.currentSlide=n.options.initialSlide,n.originalSettings=n.options,void 0!==document.mozHidden?(n.hidden="mozHidden",n.visibilityChange="mozvisibilitychange"):void 0!==document.webkitHidden&&(n.hidden="webkitHidden",n.visibilityChange="webkitvisibilitychange"),n.autoPlay=i.proxy(n.autoPlay,n),n.autoPlayClear=i.proxy(n.autoPlayClear,n),n.autoPlayIterator=i.proxy(n.autoPlayIterator,n),n.changeSlide=i.proxy(n.changeSlide,n),n.clickHandler=i.proxy(n.clickHandler,n),n.selectHandler=i.proxy(n.selectHandler,n),n.setPosition=i.proxy(n.setPosition,n),n.swipeHandler=i.proxy(n.swipeHandler,n),n.dragHandler=i.proxy(n.dragHandler,n),n.keyHandler=i.proxy(n.keyHandler,n),n.instanceUid=e++,n.htmlExpr=/^(?:\s*(<[\w\W]+>)[^>]*)$/,n.registerBreakpoints(),n.init(!0)}}()).prototype.activateADA=function(){this.$slideTrack.find(".slick-active").attr({"aria-hidden":"false"}).find("a, input, button, select").attr({tabindex:"0"})},e.prototype.addSlide=e.prototype.slickAdd=function(e,t,o){var s=this;if("boolean"==typeof t)o=t,t=null;else if(t<0||t>=s.slideCount)return!1;s.unload(),"number"==typeof t?0===t&&0===s.$slides.length?i(e).appendTo(s.$slideTrack):o?i(e).insertBefore(s.$slides.eq(t)):i(e).insertAfter(s.$slides.eq(t)):!0===o?i(e).prependTo(s.$slideTrack):i(e).appendTo(s.$slideTrack),s.$slides=s.$slideTrack.children(this.options.slide),s.$slideTrack.children(this.options.slide).detach(),s.$slideTrack.append(s.$slides),s.$slides.each(function(e,t){i(t).attr("data-slick-index",e)}),s.$slidesCache=s.$slides,s.reinit()},e.prototype.animateHeight=function(){var i=this;if(1===i.options.slidesToShow&&!0===i.options.adaptiveHeight&&!1===i.options.vertical){var e=i.$slides.eq(i.currentSlide).outerHeight(!0);i.$list.animate({height:e},i.options.speed)}},e.prototype.animateSlide=function(e,t){var o={},s=this;s.animateHeight(),!0===s.options.rtl&&!1===s.options.vertical&&(e=-e),!1===s.transformsEnabled?!1===s.options.vertical?s.$slideTrack.animate({left:e},s.options.speed,s.options.easing,t):s.$slideTrack.animate({top:e},s.options.speed,s.options.easing,t):!1===s.cssTransitions?(!0===s.options.rtl&&(s.currentLeft=-s.currentLeft),i({animStart:s.currentLeft}).animate({animStart:e},{duration:s.options.speed,easing:s.options.easing,step:function(i){i=Math.ceil(i),!1===s.options.vertical?(o[s.animType]="translate("+i+"px, 0px)",s.$slideTrack.css(o)):(o[s.animType]="translate(0px,"+i+"px)",s.$slideTrack.css(o))},complete:function(){t&&t.call()}})):(s.applyTransition(),e=Math.ceil(e),!1===s.options.vertical?o[s.animType]="translate3d("+e+"px, 0px, 0px)":o[s.animType]="translate3d(0px,"+e+"px, 0px)",s.$slideTrack.css(o),t&&setTimeout(function(){s.disableTransition(),t.call()},s.options.speed))},e.prototype.getNavTarget=function(){var e=this,t=e.options.asNavFor;return t&&null!==t&&(t=i(t).not(e.$slider)),t},e.prototype.asNavFor=function(e){var t=this.getNavTarget();null!==t&&"object"==typeof t&&t.each(function(){var t=i(this).slick("getSlick");t.unslicked||t.slideHandler(e,!0)})},e.prototype.applyTransition=function(i){var e=this,t={};!1===e.options.fade?t[e.transitionType]=e.transformType+" "+e.options.speed+"ms "+e.options.cssEase:t[e.transitionType]="opacity "+e.options.speed+"ms "+e.options.cssEase,!1===e.options.fade?e.$slideTrack.css(t):e.$slides.eq(i).css(t)},e.prototype.autoPlay=function(){var i=this;i.autoPlayClear(),i.slideCount>i.options.slidesToShow&&(i.autoPlayTimer=setInterval(i.autoPlayIterator,i.options.autoplaySpeed))},e.prototype.autoPlayClear=function(){var i=this;i.autoPlayTimer&&clearInterval(i.autoPlayTimer)},e.prototype.autoPlayIterator=function(){var i=this,e=i.currentSlide+i.options.slidesToScroll;i.paused||i.interrupted||i.focussed||(!1===i.options.infinite&&(1===i.direction&&i.currentSlide+1===i.slideCount-1?i.direction=0:0===i.direction&&(e=i.currentSlide-i.options.slidesToScroll,i.currentSlide-1==0&&(i.direction=1))),i.slideHandler(e))},e.prototype.buildArrows=function(){var e=this;!0===e.options.arrows&&(e.$prevArrow=i(e.options.prevArrow).addClass("slick-arrow"),e.$nextArrow=i(e.options.nextArrow).addClass("slick-arrow"),e.slideCount>e.options.slidesToShow?(e.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),e.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),e.htmlExpr.test(e.options.prevArrow)&&e.$prevArrow.prependTo(e.options.appendArrows),e.htmlExpr.test(e.options.nextArrow)&&e.$nextArrow.appendTo(e.options.appendArrows),!0!==e.options.infinite&&e.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true")):e.$prevArrow.add(e.$nextArrow).addClass("slick-hidden").attr({"aria-disabled":"true",tabindex:"-1"}))},e.prototype.buildDots=function(){var e,t,o=this;if(!0===o.options.dots){for(o.$slider.addClass("slick-dotted"),t=i("<ul />").addClass(o.options.dotsClass),e=0;e<=o.getDotCount();e+=1)t.append(i("<li />").append(o.options.customPaging.call(this,o,e)));o.$dots=t.appendTo(o.options.appendDots),o.$dots.find("li").first().addClass("slick-active")}},e.prototype.buildOut=function(){var e=this;e.$slides=e.$slider.children(e.options.slide+":not(.slick-cloned)").addClass("slick-slide"),e.slideCount=e.$slides.length,e.$slides.each(function(e,t){i(t).attr("data-slick-index",e).data("originalStyling",i(t).attr("style")||"")}),e.$slider.addClass("slick-slider"),e.$slideTrack=0===e.slideCount?i('<div class="slick-track"/>').appendTo(e.$slider):e.$slides.wrapAll('<div class="slick-track"/>').parent(),e.$list=e.$slideTrack.wrap('<div class="slick-list"/>').parent(),e.$slideTrack.css("opacity",0),!0!==e.options.centerMode&&!0!==e.options.swipeToSlide||(e.options.slidesToScroll=1),i("img[data-lazy]",e.$slider).not("[src]").addClass("slick-loading"),e.setupInfinite(),e.buildArrows(),e.buildDots(),e.updateDots(),e.setSlideClasses("number"==typeof e.currentSlide?e.currentSlide:0),!0===e.options.draggable&&e.$list.addClass("draggable")},e.prototype.buildRows=function(){var i,e,t,o,s,n,r,l=this;if(o=document.createDocumentFragment(),n=l.$slider.children(),l.options.rows>1){for(r=l.options.slidesPerRow*l.options.rows,s=Math.ceil(n.length/r),i=0;i<s;i++){var d=document.createElement("div");for(e=0;e<l.options.rows;e++){var a=document.createElement("div");for(t=0;t<l.options.slidesPerRow;t++){var c=i*r+(e*l.options.slidesPerRow+t);n.get(c)&&a.appendChild(n.get(c))}d.appendChild(a)}o.appendChild(d)}l.$slider.empty().append(o),l.$slider.children().children().children().css({width:100/l.options.slidesPerRow+"%",display:"inline-block"})}},e.prototype.checkResponsive=function(e,t){var o,s,n,r=this,l=!1,d=r.$slider.width(),a=window.innerWidth||i(window).width();if("window"===r.respondTo?n=a:"slider"===r.respondTo?n=d:"min"===r.respondTo&&(n=Math.min(a,d)),r.options.responsive&&r.options.responsive.length&&null!==r.options.responsive){s=null;for(o in r.breakpoints)r.breakpoints.hasOwnProperty(o)&&(!1===r.originalSettings.mobileFirst?n<r.breakpoints[o]&&(s=r.breakpoints[o]):n>r.breakpoints[o]&&(s=r.breakpoints[o]));null!==s?null!==r.activeBreakpoint?(s!==r.activeBreakpoint||t)&&(r.activeBreakpoint=s,"unslick"===r.breakpointSettings[s]?r.unslick(s):(r.options=i.extend({},r.originalSettings,r.breakpointSettings[s]),!0===e&&(r.currentSlide=r.options.initialSlide),r.refresh(e)),l=s):(r.activeBreakpoint=s,"unslick"===r.breakpointSettings[s]?r.unslick(s):(r.options=i.extend({},r.originalSettings,r.breakpointSettings[s]),!0===e&&(r.currentSlide=r.options.initialSlide),r.refresh(e)),l=s):null!==r.activeBreakpoint&&(r.activeBreakpoint=null,r.options=r.originalSettings,!0===e&&(r.currentSlide=r.options.initialSlide),r.refresh(e),l=s),e||!1===l||r.$slider.trigger("breakpoint",[r,l])}},e.prototype.changeSlide=function(e,t){var o,s,n,r=this,l=i(e.currentTarget);switch(l.is("a")&&e.preventDefault(),l.is("li")||(l=l.closest("li")),n=r.slideCount%r.options.slidesToScroll!=0,o=n?0:(r.slideCount-r.currentSlide)%r.options.slidesToScroll,e.data.message){case"previous":s=0===o?r.options.slidesToScroll:r.options.slidesToShow-o,r.slideCount>r.options.slidesToShow&&r.slideHandler(r.currentSlide-s,!1,t);break;case"next":s=0===o?r.options.slidesToScroll:o,r.slideCount>r.options.slidesToShow&&r.slideHandler(r.currentSlide+s,!1,t);break;case"index":var d=0===e.data.index?0:e.data.index||l.index()*r.options.slidesToScroll;r.slideHandler(r.checkNavigable(d),!1,t),l.children().trigger("focus");break;default:return}},e.prototype.checkNavigable=function(i){var e,t;if(e=this.getNavigableIndexes(),t=0,i>e[e.length-1])i=e[e.length-1];else for(var o in e){if(i<e[o]){i=t;break}t=e[o]}return i},e.prototype.cleanUpEvents=function(){var e=this;e.options.dots&&null!==e.$dots&&(i("li",e.$dots).off("click.slick",e.changeSlide).off("mouseenter.slick",i.proxy(e.interrupt,e,!0)).off("mouseleave.slick",i.proxy(e.interrupt,e,!1)),!0===e.options.accessibility&&e.$dots.off("keydown.slick",e.keyHandler)),e.$slider.off("focus.slick blur.slick"),!0===e.options.arrows&&e.slideCount>e.options.slidesToShow&&(e.$prevArrow&&e.$prevArrow.off("click.slick",e.changeSlide),e.$nextArrow&&e.$nextArrow.off("click.slick",e.changeSlide),!0===e.options.accessibility&&(e.$prevArrow&&e.$prevArrow.off("keydown.slick",e.keyHandler),e.$nextArrow&&e.$nextArrow.off("keydown.slick",e.keyHandler))),e.$list.off("touchstart.slick mousedown.slick",e.swipeHandler),e.$list.off("touchmove.slick mousemove.slick",e.swipeHandler),e.$list.off("touchend.slick mouseup.slick",e.swipeHandler),e.$list.off("touchcancel.slick mouseleave.slick",e.swipeHandler),e.$list.off("click.slick",e.clickHandler),i(document).off(e.visibilityChange,e.visibility),e.cleanUpSlideEvents(),!0===e.options.accessibility&&e.$list.off("keydown.slick",e.keyHandler),!0===e.options.focusOnSelect&&i(e.$slideTrack).children().off("click.slick",e.selectHandler),i(window).off("orientationchange.slick.slick-"+e.instanceUid,e.orientationChange),i(window).off("resize.slick.slick-"+e.instanceUid,e.resize),i("[draggable!=true]",e.$slideTrack).off("dragstart",e.preventDefault),i(window).off("load.slick.slick-"+e.instanceUid,e.setPosition)},e.prototype.cleanUpSlideEvents=function(){var e=this;e.$list.off("mouseenter.slick",i.proxy(e.interrupt,e,!0)),e.$list.off("mouseleave.slick",i.proxy(e.interrupt,e,!1))},e.prototype.cleanUpRows=function(){var i,e=this;e.options.rows>1&&((i=e.$slides.children().children()).removeAttr("style"),e.$slider.empty().append(i))},e.prototype.clickHandler=function(i){!1===this.shouldClick&&(i.stopImmediatePropagation(),i.stopPropagation(),i.preventDefault())},e.prototype.destroy=function(e){var t=this;t.autoPlayClear(),t.touchObject={},t.cleanUpEvents(),i(".slick-cloned",t.$slider).detach(),t.$dots&&t.$dots.remove(),t.$prevArrow&&t.$prevArrow.length&&(t.$prevArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),t.htmlExpr.test(t.options.prevArrow)&&t.$prevArrow.remove()),t.$nextArrow&&t.$nextArrow.length&&(t.$nextArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),t.htmlExpr.test(t.options.nextArrow)&&t.$nextArrow.remove()),t.$slides&&(t.$slides.removeClass("slick-slide slick-active slick-center slick-visible slick-current").removeAttr("aria-hidden").removeAttr("data-slick-index").each(function(){i(this).attr("style",i(this).data("originalStyling"))}),t.$slideTrack.children(this.options.slide).detach(),t.$slideTrack.detach(),t.$list.detach(),t.$slider.append(t.$slides)),t.cleanUpRows(),t.$slider.removeClass("slick-slider"),t.$slider.removeClass("slick-initialized"),t.$slider.removeClass("slick-dotted"),t.unslicked=!0,e||t.$slider.trigger("destroy",[t])},e.prototype.disableTransition=function(i){var e=this,t={};t[e.transitionType]="",!1===e.options.fade?e.$slideTrack.css(t):e.$slides.eq(i).css(t)},e.prototype.fadeSlide=function(i,e){var t=this;!1===t.cssTransitions?(t.$slides.eq(i).css({zIndex:t.options.zIndex}),t.$slides.eq(i).animate({opacity:1},t.options.speed,t.options.easing,e)):(t.applyTransition(i),t.$slides.eq(i).css({opacity:1,zIndex:t.options.zIndex}),e&&setTimeout(function(){t.disableTransition(i),e.call()},t.options.speed))},e.prototype.fadeSlideOut=function(i){var e=this;!1===e.cssTransitions?e.$slides.eq(i).animate({opacity:0,zIndex:e.options.zIndex-2},e.options.speed,e.options.easing):(e.applyTransition(i),e.$slides.eq(i).css({opacity:0,zIndex:e.options.zIndex-2}))},e.prototype.filterSlides=e.prototype.slickFilter=function(i){var e=this;null!==i&&(e.$slidesCache=e.$slides,e.unload(),e.$slideTrack.children(this.options.slide).detach(),e.$slidesCache.filter(i).appendTo(e.$slideTrack),e.reinit())},e.prototype.focusHandler=function(){var e=this;e.$slider.off("focus.slick blur.slick").on("focus.slick blur.slick","*",function(t){t.stopImmediatePropagation();var o=i(this);setTimeout(function(){e.options.pauseOnFocus&&(e.focussed=o.is(":focus"),e.autoPlay())},0)})},e.prototype.getCurrent=e.prototype.slickCurrentSlide=function(){return this.currentSlide},e.prototype.getDotCount=function(){var i=this,e=0,t=0,o=0;if(!0===i.options.infinite)if(i.slideCount<=i.options.slidesToShow)++o;else for(;e<i.slideCount;)++o,e=t+i.options.slidesToScroll,t+=i.options.slidesToScroll<=i.options.slidesToShow?i.options.slidesToScroll:i.options.slidesToShow;else if(!0===i.options.centerMode)o=i.slideCount;else if(i.options.asNavFor)for(;e<i.slideCount;)++o,e=t+i.options.slidesToScroll,t+=i.options.slidesToScroll<=i.options.slidesToShow?i.options.slidesToScroll:i.options.slidesToShow;else o=1+Math.ceil((i.slideCount-i.options.slidesToShow)/i.options.slidesToScroll);return o-1},e.prototype.getLeft=function(i){var e,t,o,s,n=this,r=0;return n.slideOffset=0,t=n.$slides.first().outerHeight(!0),!0===n.options.infinite?(n.slideCount>n.options.slidesToShow&&(n.slideOffset=n.slideWidth*n.options.slidesToShow*-1,s=-1,!0===n.options.vertical&&!0===n.options.centerMode&&(2===n.options.slidesToShow?s=-1.5:1===n.options.slidesToShow&&(s=-2)),r=t*n.options.slidesToShow*s),n.slideCount%n.options.slidesToScroll!=0&&i+n.options.slidesToScroll>n.slideCount&&n.slideCount>n.options.slidesToShow&&(i>n.slideCount?(n.slideOffset=(n.options.slidesToShow-(i-n.slideCount))*n.slideWidth*-1,r=(n.options.slidesToShow-(i-n.slideCount))*t*-1):(n.slideOffset=n.slideCount%n.options.slidesToScroll*n.slideWidth*-1,r=n.slideCount%n.options.slidesToScroll*t*-1))):i+n.options.slidesToShow>n.slideCount&&(n.slideOffset=(i+n.options.slidesToShow-n.slideCount)*n.slideWidth,r=(i+n.options.slidesToShow-n.slideCount)*t),n.slideCount<=n.options.slidesToShow&&(n.slideOffset=0,r=0),!0===n.options.centerMode&&n.slideCount<=n.options.slidesToShow?n.slideOffset=n.slideWidth*Math.floor(n.options.slidesToShow)/2-n.slideWidth*n.slideCount/2:!0===n.options.centerMode&&!0===n.options.infinite?n.slideOffset+=n.slideWidth*Math.floor(n.options.slidesToShow/2)-n.slideWidth:!0===n.options.centerMode&&(n.slideOffset=0,n.slideOffset+=n.slideWidth*Math.floor(n.options.slidesToShow/2)),e=!1===n.options.vertical?i*n.slideWidth*-1+n.slideOffset:i*t*-1+r,!0===n.options.variableWidth&&(o=n.slideCount<=n.options.slidesToShow||!1===n.options.infinite?n.$slideTrack.children(".slick-slide").eq(i):n.$slideTrack.children(".slick-slide").eq(i+n.options.slidesToShow),e=!0===n.options.rtl?o[0]?-1*(n.$slideTrack.width()-o[0].offsetLeft-o.width()):0:o[0]?-1*o[0].offsetLeft:0,!0===n.options.centerMode&&(o=n.slideCount<=n.options.slidesToShow||!1===n.options.infinite?n.$slideTrack.children(".slick-slide").eq(i):n.$slideTrack.children(".slick-slide").eq(i+n.options.slidesToShow+1),e=!0===n.options.rtl?o[0]?-1*(n.$slideTrack.width()-o[0].offsetLeft-o.width()):0:o[0]?-1*o[0].offsetLeft:0,e+=(n.$list.width()-o.outerWidth())/2)),e},e.prototype.getOption=e.prototype.slickGetOption=function(i){return this.options[i]},e.prototype.getNavigableIndexes=function(){var i,e=this,t=0,o=0,s=[];for(!1===e.options.infinite?i=e.slideCount:(t=-1*e.options.slidesToScroll,o=-1*e.options.slidesToScroll,i=2*e.slideCount);t<i;)s.push(t),t=o+e.options.slidesToScroll,o+=e.options.slidesToScroll<=e.options.slidesToShow?e.options.slidesToScroll:e.options.slidesToShow;return s},e.prototype.getSlick=function(){return this},e.prototype.getSlideCount=function(){var e,t,o=this;return t=!0===o.options.centerMode?o.slideWidth*Math.floor(o.options.slidesToShow/2):0,!0===o.options.swipeToSlide?(o.$slideTrack.find(".slick-slide").each(function(s,n){if(n.offsetLeft-t+i(n).outerWidth()/2>-1*o.swipeLeft)return e=n,!1}),Math.abs(i(e).attr("data-slick-index")-o.currentSlide)||1):o.options.slidesToScroll},e.prototype.goTo=e.prototype.slickGoTo=function(i,e){this.changeSlide({data:{message:"index",index:parseInt(i)}},e)},e.prototype.init=function(e){var t=this;i(t.$slider).hasClass("slick-initialized")||(i(t.$slider).addClass("slick-initialized"),t.buildRows(),t.buildOut(),t.setProps(),t.startLoad(),t.loadSlider(),t.initializeEvents(),t.updateArrows(),t.updateDots(),t.checkResponsive(!0),t.focusHandler()),e&&t.$slider.trigger("init",[t]),!0===t.options.accessibility&&t.initADA(),t.options.autoplay&&(t.paused=!1,t.autoPlay())},e.prototype.initADA=function(){var e=this,t=Math.ceil(e.slideCount/e.options.slidesToShow),o=e.getNavigableIndexes().filter(function(i){return i>=0&&i<e.slideCount});e.$slides.add(e.$slideTrack.find(".slick-cloned")).attr({"aria-hidden":"true",tabindex:"-1"}).find("a, input, button, select").attr({tabindex:"-1"}),null!==e.$dots&&(e.$slides.not(e.$slideTrack.find(".slick-cloned")).each(function(t){var s=o.indexOf(t);i(this).attr({role:"tabpanel",id:"slick-slide"+e.instanceUid+t,tabindex:-1}),-1!==s&&i(this).attr({"aria-describedby":"slick-slide-control"+e.instanceUid+s})}),e.$dots.attr("role","tablist").find("li").each(function(s){var n=o[s];i(this).attr({role:"presentation"}),i(this).find("button").first().attr({role:"tab",id:"slick-slide-control"+e.instanceUid+s,"aria-controls":"slick-slide"+e.instanceUid+n,"aria-label":s+1+" of "+t,"aria-selected":null,tabindex:"-1"})}).eq(e.currentSlide).find("button").attr({"aria-selected":"true",tabindex:"0"}).end());for(var s=e.currentSlide,n=s+e.options.slidesToShow;s<n;s++)e.$slides.eq(s).attr("tabindex",0);e.activateADA()},e.prototype.initArrowEvents=function(){var i=this;!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.off("click.slick").on("click.slick",{message:"previous"},i.changeSlide),i.$nextArrow.off("click.slick").on("click.slick",{message:"next"},i.changeSlide),!0===i.options.accessibility&&(i.$prevArrow.on("keydown.slick",i.keyHandler),i.$nextArrow.on("keydown.slick",i.keyHandler)))},e.prototype.initDotEvents=function(){var e=this;!0===e.options.dots&&(i("li",e.$dots).on("click.slick",{message:"index"},e.changeSlide),!0===e.options.accessibility&&e.$dots.on("keydown.slick",e.keyHandler)),!0===e.options.dots&&!0===e.options.pauseOnDotsHover&&i("li",e.$dots).on("mouseenter.slick",i.proxy(e.interrupt,e,!0)).on("mouseleave.slick",i.proxy(e.interrupt,e,!1))},e.prototype.initSlideEvents=function(){var e=this;e.options.pauseOnHover&&(e.$list.on("mouseenter.slick",i.proxy(e.interrupt,e,!0)),e.$list.on("mouseleave.slick",i.proxy(e.interrupt,e,!1)))},e.prototype.initializeEvents=function(){var e=this;e.initArrowEvents(),e.initDotEvents(),e.initSlideEvents(),e.$list.on("touchstart.slick mousedown.slick",{action:"start"},e.swipeHandler),e.$list.on("touchmove.slick mousemove.slick",{action:"move"},e.swipeHandler),e.$list.on("touchend.slick mouseup.slick",{action:"end"},e.swipeHandler),e.$list.on("touchcancel.slick mouseleave.slick",{action:"end"},e.swipeHandler),e.$list.on("click.slick",e.clickHandler),i(document).on(e.visibilityChange,i.proxy(e.visibility,e)),!0===e.options.accessibility&&e.$list.on("keydown.slick",e.keyHandler),!0===e.options.focusOnSelect&&i(e.$slideTrack).children().on("click.slick",e.selectHandler),i(window).on("orientationchange.slick.slick-"+e.instanceUid,i.proxy(e.orientationChange,e)),i(window).on("resize.slick.slick-"+e.instanceUid,i.proxy(e.resize,e)),i("[draggable!=true]",e.$slideTrack).on("dragstart",e.preventDefault),i(window).on("load.slick.slick-"+e.instanceUid,e.setPosition),i(e.setPosition)},e.prototype.initUI=function(){var i=this;!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.show(),i.$nextArrow.show()),!0===i.options.dots&&i.slideCount>i.options.slidesToShow&&i.$dots.show()},e.prototype.keyHandler=function(i){var e=this;i.target.tagName.match("TEXTAREA|INPUT|SELECT")||(37===i.keyCode&&!0===e.options.accessibility?e.changeSlide({data:{message:!0===e.options.rtl?"next":"previous"}}):39===i.keyCode&&!0===e.options.accessibility&&e.changeSlide({data:{message:!0===e.options.rtl?"previous":"next"}}))},e.prototype.lazyLoad=function(){function e(e){i("img[data-lazy]",e).each(function(){var e=i(this),t=i(this).attr("data-lazy"),o=i(this).attr("data-srcset"),s=i(this).attr("data-sizes")||n.$slider.attr("data-sizes"),r=document.createElement("img");r.onload=function(){e.animate({opacity:0},100,function(){o&&(e.attr("srcset",o),s&&e.attr("sizes",s)),e.attr("src",t).animate({opacity:1},200,function(){e.removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading")}),n.$slider.trigger("lazyLoaded",[n,e,t])})},r.onerror=function(){e.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),n.$slider.trigger("lazyLoadError",[n,e,t])},r.src=t})}var t,o,s,n=this;if(!0===n.options.centerMode?!0===n.options.infinite?s=(o=n.currentSlide+(n.options.slidesToShow/2+1))+n.options.slidesToShow+2:(o=Math.max(0,n.currentSlide-(n.options.slidesToShow/2+1)),s=n.options.slidesToShow/2+1+2+n.currentSlide):(o=n.options.infinite?n.options.slidesToShow+n.currentSlide:n.currentSlide,s=Math.ceil(o+n.options.slidesToShow),!0===n.options.fade&&(o>0&&o--,s<=n.slideCount&&s++)),t=n.$slider.find(".slick-slide").slice(o,s),"anticipated"===n.options.lazyLoad)for(var r=o-1,l=s,d=n.$slider.find(".slick-slide"),a=0;a<n.options.slidesToScroll;a++)r<0&&(r=n.slideCount-1),t=(t=t.add(d.eq(r))).add(d.eq(l)),r--,l++;e(t),n.slideCount<=n.options.slidesToShow?e(n.$slider.find(".slick-slide")):n.currentSlide>=n.slideCount-n.options.slidesToShow?e(n.$slider.find(".slick-cloned").slice(0,n.options.slidesToShow)):0===n.currentSlide&&e(n.$slider.find(".slick-cloned").slice(-1*n.options.slidesToShow))},e.prototype.loadSlider=function(){var i=this;i.setPosition(),i.$slideTrack.css({opacity:1}),i.$slider.removeClass("slick-loading"),i.initUI(),"progressive"===i.options.lazyLoad&&i.progressiveLazyLoad()},e.prototype.next=e.prototype.slickNext=function(){this.changeSlide({data:{message:"next"}})},e.prototype.orientationChange=function(){var i=this;i.checkResponsive(),i.setPosition()},e.prototype.pause=e.prototype.slickPause=function(){var i=this;i.autoPlayClear(),i.paused=!0},e.prototype.play=e.prototype.slickPlay=function(){var i=this;i.autoPlay(),i.options.autoplay=!0,i.paused=!1,i.focussed=!1,i.interrupted=!1},e.prototype.postSlide=function(e){var t=this;t.unslicked||(t.$slider.trigger("afterChange",[t,e]),t.animating=!1,t.slideCount>t.options.slidesToShow&&t.setPosition(),t.swipeLeft=null,t.options.autoplay&&t.autoPlay(),!0===t.options.accessibility&&(t.initADA(),t.options.focusOnChange&&i(t.$slides.get(t.currentSlide)).attr("tabindex",0).focus()))},e.prototype.prev=e.prototype.slickPrev=function(){this.changeSlide({data:{message:"previous"}})},e.prototype.preventDefault=function(i){i.preventDefault()},e.prototype.progressiveLazyLoad=function(e){e=e||1;var t,o,s,n,r,l=this,d=i("img[data-lazy]",l.$slider);d.length?(t=d.first(),o=t.attr("data-lazy"),s=t.attr("data-srcset"),n=t.attr("data-sizes")||l.$slider.attr("data-sizes"),(r=document.createElement("img")).onload=function(){s&&(t.attr("srcset",s),n&&t.attr("sizes",n)),t.attr("src",o).removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading"),!0===l.options.adaptiveHeight&&l.setPosition(),l.$slider.trigger("lazyLoaded",[l,t,o]),l.progressiveLazyLoad()},r.onerror=function(){e<3?setTimeout(function(){l.progressiveLazyLoad(e+1)},500):(t.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),l.$slider.trigger("lazyLoadError",[l,t,o]),l.progressiveLazyLoad())},r.src=o):l.$slider.trigger("allImagesLoaded",[l])},e.prototype.refresh=function(e){var t,o,s=this;o=s.slideCount-s.options.slidesToShow,!s.options.infinite&&s.currentSlide>o&&(s.currentSlide=o),s.slideCount<=s.options.slidesToShow&&(s.currentSlide=0),t=s.currentSlide,s.destroy(!0),i.extend(s,s.initials,{currentSlide:t}),s.init(),e||s.changeSlide({data:{message:"index",index:t}},!1)},e.prototype.registerBreakpoints=function(){var e,t,o,s=this,n=s.options.responsive||null;if("array"===i.type(n)&&n.length){s.respondTo=s.options.respondTo||"window";for(e in n)if(o=s.breakpoints.length-1,n.hasOwnProperty(e)){for(t=n[e].breakpoint;o>=0;)s.breakpoints[o]&&s.breakpoints[o]===t&&s.breakpoints.splice(o,1),o--;s.breakpoints.push(t),s.breakpointSettings[t]=n[e].settings}s.breakpoints.sort(function(i,e){return s.options.mobileFirst?i-e:e-i})}},e.prototype.reinit=function(){var e=this;e.$slides=e.$slideTrack.children(e.options.slide).addClass("slick-slide"),e.slideCount=e.$slides.length,e.currentSlide>=e.slideCount&&0!==e.currentSlide&&(e.currentSlide=e.currentSlide-e.options.slidesToScroll),e.slideCount<=e.options.slidesToShow&&(e.currentSlide=0),e.registerBreakpoints(),e.setProps(),e.setupInfinite(),e.buildArrows(),e.updateArrows(),e.initArrowEvents(),e.buildDots(),e.updateDots(),e.initDotEvents(),e.cleanUpSlideEvents(),e.initSlideEvents(),e.checkResponsive(!1,!0),!0===e.options.focusOnSelect&&i(e.$slideTrack).children().on("click.slick",e.selectHandler),e.setSlideClasses("number"==typeof e.currentSlide?e.currentSlide:0),e.setPosition(),e.focusHandler(),e.paused=!e.options.autoplay,e.autoPlay(),e.$slider.trigger("reInit",[e])},e.prototype.resize=function(){var e=this;i(window).width()!==e.windowWidth&&(clearTimeout(e.windowDelay),e.windowDelay=window.setTimeout(function(){e.windowWidth=i(window).width(),e.checkResponsive(),e.unslicked||e.setPosition()},50))},e.prototype.removeSlide=e.prototype.slickRemove=function(i,e,t){var o=this;if(i="boolean"==typeof i?!0===(e=i)?0:o.slideCount-1:!0===e?--i:i,o.slideCount<1||i<0||i>o.slideCount-1)return!1;o.unload(),!0===t?o.$slideTrack.children().remove():o.$slideTrack.children(this.options.slide).eq(i).remove(),o.$slides=o.$slideTrack.children(this.options.slide),o.$slideTrack.children(this.options.slide).detach(),o.$slideTrack.append(o.$slides),o.$slidesCache=o.$slides,o.reinit()},e.prototype.setCSS=function(i){var e,t,o=this,s={};!0===o.options.rtl&&(i=-i),e="left"==o.positionProp?Math.ceil(i)+"px":"0px",t="top"==o.positionProp?Math.ceil(i)+"px":"0px",s[o.positionProp]=i,!1===o.transformsEnabled?o.$slideTrack.css(s):(s={},!1===o.cssTransitions?(s[o.animType]="translate("+e+", "+t+")",o.$slideTrack.css(s)):(s[o.animType]="translate3d("+e+", "+t+", 0px)",o.$slideTrack.css(s)))},e.prototype.setDimensions=function(){var i=this;!1===i.options.vertical?!0===i.options.centerMode&&i.$list.css({padding:"0px "+i.options.centerPadding}):(i.$list.height(i.$slides.first().outerHeight(!0)*i.options.slidesToShow),!0===i.options.centerMode&&i.$list.css({padding:i.options.centerPadding+" 0px"})),i.listWidth=i.$list.width(),i.listHeight=i.$list.height(),!1===i.options.vertical&&!1===i.options.variableWidth?(i.slideWidth=Math.ceil(i.listWidth/i.options.slidesToShow),i.$slideTrack.width(Math.ceil(i.slideWidth*i.$slideTrack.children(".slick-slide").length))):!0===i.options.variableWidth?i.$slideTrack.width(5e3*i.slideCount):(i.slideWidth=Math.ceil(i.listWidth),i.$slideTrack.height(Math.ceil(i.$slides.first().outerHeight(!0)*i.$slideTrack.children(".slick-slide").length)));var e=i.$slides.first().outerWidth(!0)-i.$slides.first().width();!1===i.options.variableWidth&&i.$slideTrack.children(".slick-slide").width(i.slideWidth-e)},e.prototype.setFade=function(){var e,t=this;t.$slides.each(function(o,s){e=t.slideWidth*o*-1,!0===t.options.rtl?i(s).css({position:"relative",right:e,top:0,zIndex:t.options.zIndex-2,opacity:0}):i(s).css({position:"relative",left:e,top:0,zIndex:t.options.zIndex-2,opacity:0})}),t.$slides.eq(t.currentSlide).css({zIndex:t.options.zIndex-1,opacity:1})},e.prototype.setHeight=function(){var i=this;if(1===i.options.slidesToShow&&!0===i.options.adaptiveHeight&&!1===i.options.vertical){var e=i.$slides.eq(i.currentSlide).outerHeight(!0);i.$list.css("height",e)}},e.prototype.setOption=e.prototype.slickSetOption=function(){var e,t,o,s,n,r=this,l=!1;if("object"===i.type(arguments[0])?(o=arguments[0],l=arguments[1],n="multiple"):"string"===i.type(arguments[0])&&(o=arguments[0],s=arguments[1],l=arguments[2],"responsive"===arguments[0]&&"array"===i.type(arguments[1])?n="responsive":void 0!==arguments[1]&&(n="single")),"single"===n)r.options[o]=s;else if("multiple"===n)i.each(o,function(i,e){r.options[i]=e});else if("responsive"===n)for(t in s)if("array"!==i.type(r.options.responsive))r.options.responsive=[s[t]];else{for(e=r.options.responsive.length-1;e>=0;)r.options.responsive[e].breakpoint===s[t].breakpoint&&r.options.responsive.splice(e,1),e--;r.options.responsive.push(s[t])}l&&(r.unload(),r.reinit())},e.prototype.setPosition=function(){var i=this;i.setDimensions(),i.setHeight(),!1===i.options.fade?i.setCSS(i.getLeft(i.currentSlide)):i.setFade(),i.$slider.trigger("setPosition",[i])},e.prototype.setProps=function(){var i=this,e=document.body.style;i.positionProp=!0===i.options.vertical?"top":"left","top"===i.positionProp?i.$slider.addClass("slick-vertical"):i.$slider.removeClass("slick-vertical"),void 0===e.WebkitTransition&&void 0===e.MozTransition&&void 0===e.msTransition||!0===i.options.useCSS&&(i.cssTransitions=!0),i.options.fade&&("number"==typeof i.options.zIndex?i.options.zIndex<3&&(i.options.zIndex=3):i.options.zIndex=i.defaults.zIndex),void 0!==e.OTransform&&(i.animType="OTransform",i.transformType="-o-transform",i.transitionType="OTransition",void 0===e.perspectiveProperty&&void 0===e.webkitPerspective&&(i.animType=!1)),void 0!==e.MozTransform&&(i.animType="MozTransform",i.transformType="-moz-transform",i.transitionType="MozTransition",void 0===e.perspectiveProperty&&void 0===e.MozPerspective&&(i.animType=!1)),void 0!==e.webkitTransform&&(i.animType="webkitTransform",i.transformType="-webkit-transform",i.transitionType="webkitTransition",void 0===e.perspectiveProperty&&void 0===e.webkitPerspective&&(i.animType=!1)),void 0!==e.msTransform&&(i.animType="msTransform",i.transformType="-ms-transform",i.transitionType="msTransition",void 0===e.msTransform&&(i.animType=!1)),void 0!==e.transform&&!1!==i.animType&&(i.animType="transform",i.transformType="transform",i.transitionType="transition"),i.transformsEnabled=i.options.useTransform&&null!==i.animType&&!1!==i.animType},e.prototype.setSlideClasses=function(i){var e,t,o,s,n=this;if(t=n.$slider.find(".slick-slide").removeClass("slick-active slick-center slick-current").attr("aria-hidden","true"),n.$slides.eq(i).addClass("slick-current"),!0===n.options.centerMode){var r=n.options.slidesToShow%2==0?1:0;e=Math.floor(n.options.slidesToShow/2),!0===n.options.infinite&&(i>=e&&i<=n.slideCount-1-e?n.$slides.slice(i-e+r,i+e+1).addClass("slick-active").attr("aria-hidden","false"):(o=n.options.slidesToShow+i,t.slice(o-e+1+r,o+e+2).addClass("slick-active").attr("aria-hidden","false")),0===i?t.eq(t.length-1-n.options.slidesToShow).addClass("slick-center"):i===n.slideCount-1&&t.eq(n.options.slidesToShow).addClass("slick-center")),n.$slides.eq(i).addClass("slick-center")}else i>=0&&i<=n.slideCount-n.options.slidesToShow?n.$slides.slice(i,i+n.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false"):t.length<=n.options.slidesToShow?t.addClass("slick-active").attr("aria-hidden","false"):(s=n.slideCount%n.options.slidesToShow,o=!0===n.options.infinite?n.options.slidesToShow+i:i,n.options.slidesToShow==n.options.slidesToScroll&&n.slideCount-i<n.options.slidesToShow?t.slice(o-(n.options.slidesToShow-s),o+s).addClass("slick-active").attr("aria-hidden","false"):t.slice(o,o+n.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false"));"ondemand"!==n.options.lazyLoad&&"anticipated"!==n.options.lazyLoad||n.lazyLoad()},e.prototype.setupInfinite=function(){var e,t,o,s=this;if(!0===s.options.fade&&(s.options.centerMode=!1),!0===s.options.infinite&&!1===s.options.fade&&(t=null,s.slideCount>s.options.slidesToShow)){for(o=!0===s.options.centerMode?s.options.slidesToShow+1:s.options.slidesToShow,e=s.slideCount;e>s.slideCount-o;e-=1)t=e-1,i(s.$slides[t]).clone(!0).attr("id","").attr("data-slick-index",t-s.slideCount).prependTo(s.$slideTrack).addClass("slick-cloned");for(e=0;e<o+s.slideCount;e+=1)t=e,i(s.$slides[t]).clone(!0).attr("id","").attr("data-slick-index",t+s.slideCount).appendTo(s.$slideTrack).addClass("slick-cloned");s.$slideTrack.find(".slick-cloned").find("[id]").each(function(){i(this).attr("id","")})}},e.prototype.interrupt=function(i){var e=this;i||e.autoPlay(),e.interrupted=i},e.prototype.selectHandler=function(e){var t=this,o=i(e.target).is(".slick-slide")?i(e.target):i(e.target).parents(".slick-slide"),s=parseInt(o.attr("data-slick-index"));s||(s=0),t.slideCount<=t.options.slidesToShow?t.slideHandler(s,!1,!0):t.slideHandler(s)},e.prototype.slideHandler=function(i,e,t){var o,s,n,r,l,d=null,a=this;if(e=e||!1,!(!0===a.animating&&!0===a.options.waitForAnimate||!0===a.options.fade&&a.currentSlide===i))if(!1===e&&a.asNavFor(i),o=i,d=a.getLeft(o),r=a.getLeft(a.currentSlide),a.currentLeft=null===a.swipeLeft?r:a.swipeLeft,!1===a.options.infinite&&!1===a.options.centerMode&&(i<0||i>a.getDotCount()*a.options.slidesToScroll))!1===a.options.fade&&(o=a.currentSlide,!0!==t?a.animateSlide(r,function(){a.postSlide(o)}):a.postSlide(o));else if(!1===a.options.infinite&&!0===a.options.centerMode&&(i<0||i>a.slideCount-a.options.slidesToScroll))!1===a.options.fade&&(o=a.currentSlide,!0!==t?a.animateSlide(r,function(){a.postSlide(o)}):a.postSlide(o));else{if(a.options.autoplay&&clearInterval(a.autoPlayTimer),s=o<0?a.slideCount%a.options.slidesToScroll!=0?a.slideCount-a.slideCount%a.options.slidesToScroll:a.slideCount+o:o>=a.slideCount?a.slideCount%a.options.slidesToScroll!=0?0:o-a.slideCount:o,a.animating=!0,a.$slider.trigger("beforeChange",[a,a.currentSlide,s]),n=a.currentSlide,a.currentSlide=s,a.setSlideClasses(a.currentSlide),a.options.asNavFor&&(l=(l=a.getNavTarget()).slick("getSlick")).slideCount<=l.options.slidesToShow&&l.setSlideClasses(a.currentSlide),a.updateDots(),a.updateArrows(),!0===a.options.fade)return!0!==t?(a.fadeSlideOut(n),a.fadeSlide(s,function(){a.postSlide(s)})):a.postSlide(s),void a.animateHeight();!0!==t?a.animateSlide(d,function(){a.postSlide(s)}):a.postSlide(s)}},e.prototype.startLoad=function(){var i=this;!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.hide(),i.$nextArrow.hide()),!0===i.options.dots&&i.slideCount>i.options.slidesToShow&&i.$dots.hide(),i.$slider.addClass("slick-loading")},e.prototype.swipeDirection=function(){var i,e,t,o,s=this;return i=s.touchObject.startX-s.touchObject.curX,e=s.touchObject.startY-s.touchObject.curY,t=Math.atan2(e,i),(o=Math.round(180*t/Math.PI))<0&&(o=360-Math.abs(o)),o<=45&&o>=0?!1===s.options.rtl?"left":"right":o<=360&&o>=315?!1===s.options.rtl?"left":"right":o>=135&&o<=225?!1===s.options.rtl?"right":"left":!0===s.options.verticalSwiping?o>=35&&o<=135?"down":"up":"vertical"},e.prototype.swipeEnd=function(i){var e,t,o=this;if(o.dragging=!1,o.swiping=!1,o.scrolling)return o.scrolling=!1,!1;if(o.interrupted=!1,o.shouldClick=!(o.touchObject.swipeLength>10),void 0===o.touchObject.curX)return!1;if(!0===o.touchObject.edgeHit&&o.$slider.trigger("edge",[o,o.swipeDirection()]),o.touchObject.swipeLength>=o.touchObject.minSwipe){switch(t=o.swipeDirection()){case"left":case"down":e=o.options.swipeToSlide?o.checkNavigable(o.currentSlide+o.getSlideCount()):o.currentSlide+o.getSlideCount(),o.currentDirection=0;break;case"right":case"up":e=o.options.swipeToSlide?o.checkNavigable(o.currentSlide-o.getSlideCount()):o.currentSlide-o.getSlideCount(),o.currentDirection=1}"vertical"!=t&&(o.slideHandler(e),o.touchObject={},o.$slider.trigger("swipe",[o,t]))}else o.touchObject.startX!==o.touchObject.curX&&(o.slideHandler(o.currentSlide),o.touchObject={})},e.prototype.swipeHandler=function(i){var e=this;if(!(!1===e.options.swipe||"ontouchend"in document&&!1===e.options.swipe||!1===e.options.draggable&&-1!==i.type.indexOf("mouse")))switch(e.touchObject.fingerCount=i.originalEvent&&void 0!==i.originalEvent.touches?i.originalEvent.touches.length:1,e.touchObject.minSwipe=e.listWidth/e.options.touchThreshold,!0===e.options.verticalSwiping&&(e.touchObject.minSwipe=e.listHeight/e.options.touchThreshold),i.data.action){case"start":e.swipeStart(i);break;case"move":e.swipeMove(i);break;case"end":e.swipeEnd(i)}},e.prototype.swipeMove=function(i){var e,t,o,s,n,r,l=this;return n=void 0!==i.originalEvent?i.originalEvent.touches:null,!(!l.dragging||l.scrolling||n&&1!==n.length)&&(e=l.getLeft(l.currentSlide),l.touchObject.curX=void 0!==n?n[0].pageX:i.clientX,l.touchObject.curY=void 0!==n?n[0].pageY:i.clientY,l.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(l.touchObject.curX-l.touchObject.startX,2))),r=Math.round(Math.sqrt(Math.pow(l.touchObject.curY-l.touchObject.startY,2))),!l.options.verticalSwiping&&!l.swiping&&r>4?(l.scrolling=!0,!1):(!0===l.options.verticalSwiping&&(l.touchObject.swipeLength=r),t=l.swipeDirection(),void 0!==i.originalEvent&&l.touchObject.swipeLength>4&&(l.swiping=!0,i.preventDefault()),s=(!1===l.options.rtl?1:-1)*(l.touchObject.curX>l.touchObject.startX?1:-1),!0===l.options.verticalSwiping&&(s=l.touchObject.curY>l.touchObject.startY?1:-1),o=l.touchObject.swipeLength,l.touchObject.edgeHit=!1,!1===l.options.infinite&&(0===l.currentSlide&&"right"===t||l.currentSlide>=l.getDotCount()&&"left"===t)&&(o=l.touchObject.swipeLength*l.options.edgeFriction,l.touchObject.edgeHit=!0),!1===l.options.vertical?l.swipeLeft=e+o*s:l.swipeLeft=e+o*(l.$list.height()/l.listWidth)*s,!0===l.options.verticalSwiping&&(l.swipeLeft=e+o*s),!0!==l.options.fade&&!1!==l.options.touchMove&&(!0===l.animating?(l.swipeLeft=null,!1):void l.setCSS(l.swipeLeft))))},e.prototype.swipeStart=function(i){var e,t=this;if(t.interrupted=!0,1!==t.touchObject.fingerCount||t.slideCount<=t.options.slidesToShow)return t.touchObject={},!1;void 0!==i.originalEvent&&void 0!==i.originalEvent.touches&&(e=i.originalEvent.touches[0]),t.touchObject.startX=t.touchObject.curX=void 0!==e?e.pageX:i.clientX,t.touchObject.startY=t.touchObject.curY=void 0!==e?e.pageY:i.clientY,t.dragging=!0},e.prototype.unfilterSlides=e.prototype.slickUnfilter=function(){var i=this;null!==i.$slidesCache&&(i.unload(),i.$slideTrack.children(this.options.slide).detach(),i.$slidesCache.appendTo(i.$slideTrack),i.reinit())},e.prototype.unload=function(){var e=this;i(".slick-cloned",e.$slider).remove(),e.$dots&&e.$dots.remove(),e.$prevArrow&&e.htmlExpr.test(e.options.prevArrow)&&e.$prevArrow.remove(),e.$nextArrow&&e.htmlExpr.test(e.options.nextArrow)&&e.$nextArrow.remove(),e.$slides.removeClass("slick-slide slick-active slick-visible slick-current").attr("aria-hidden","true").css("width","")},e.prototype.unslick=function(i){var e=this;e.$slider.trigger("unslick",[e,i]),e.destroy()},e.prototype.updateArrows=function(){var i=this;Math.floor(i.options.slidesToShow/2),!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&!i.options.infinite&&(i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false"),i.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false"),0===i.currentSlide?(i.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true"),i.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false")):i.currentSlide>=i.slideCount-i.options.slidesToShow&&!1===i.options.centerMode?(i.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")):i.currentSlide>=i.slideCount-1&&!0===i.options.centerMode&&(i.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")))},e.prototype.updateDots=function(){var i=this;null!==i.$dots&&(i.$dots.find("li").removeClass("slick-active").end(),i.$dots.find("li").eq(Math.floor(i.currentSlide/i.options.slidesToScroll)).addClass("slick-active"))},e.prototype.visibility=function(){var i=this;i.options.autoplay&&(document[i.hidden]?i.interrupted=!0:i.interrupted=!1)},i.fn.slick=function(){var i,t,o=this,s=arguments[0],n=Array.prototype.slice.call(arguments,1),r=o.length;for(i=0;i<r;i++)if("object"==typeof s||void 0===s?o[i].slick=new e(o[i],s):t=o[i].slick[s].apply(o[i].slick,n),void 0!==t)return t;return o}});
assets/vendor/slick/slick.scss ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Slider */
2
+
3
+ .slick-slider {
4
+ position: relative;
5
+ display: block;
6
+ box-sizing: border-box;
7
+ -webkit-touch-callout: none;
8
+ -webkit-user-select: none;
9
+ -khtml-user-select: none;
10
+ -moz-user-select: none;
11
+ -ms-user-select: none;
12
+ user-select: none;
13
+ -ms-touch-action: pan-y;
14
+ touch-action: pan-y;
15
+ -webkit-tap-highlight-color: transparent;
16
+ }
17
+ .slick-list {
18
+ position: relative;
19
+ overflow: hidden;
20
+ display: block;
21
+ margin: 0;
22
+ padding: 0;
23
+
24
+ &:focus {
25
+ outline: none;
26
+ }
27
+
28
+ &.dragging {
29
+ cursor: pointer;
30
+ cursor: hand;
31
+ }
32
+ }
33
+ .slick-slider .slick-track,
34
+ .slick-slider .slick-list {
35
+ -webkit-transform: translate3d(0, 0, 0);
36
+ -moz-transform: translate3d(0, 0, 0);
37
+ -ms-transform: translate3d(0, 0, 0);
38
+ -o-transform: translate3d(0, 0, 0);
39
+ transform: translate3d(0, 0, 0);
40
+ }
41
+
42
+ .slick-track {
43
+ position: relative;
44
+ left: 0;
45
+ top: 0;
46
+ display: block;
47
+ margin-left: auto;
48
+ margin-right: auto;
49
+
50
+ &:before,
51
+ &:after {
52
+ content: "";
53
+ display: table;
54
+ }
55
+
56
+ &:after {
57
+ clear: both;
58
+ }
59
+
60
+ .slick-loading & {
61
+ visibility: hidden;
62
+ }
63
+ }
64
+ .slick-slide {
65
+ float: left;
66
+ height: 100%;
67
+ min-height: 1px;
68
+ [dir="rtl"] & {
69
+ float: right;
70
+ }
71
+ img {
72
+ display: block;
73
+ }
74
+ &.slick-loading img {
75
+ display: none;
76
+ }
77
+
78
+ display: none;
79
+
80
+ &.dragging img {
81
+ pointer-events: none;
82
+ }
83
+
84
+ .slick-initialized & {
85
+ display: block;
86
+ }
87
+
88
+ .slick-loading & {
89
+ visibility: hidden;
90
+ }
91
+
92
+ .slick-vertical & {
93
+ display: block;
94
+ height: auto;
95
+ border: 1px solid transparent;
96
+ }
97
+ }
98
+ .slick-arrow.slick-hidden {
99
+ display: none;
100
+ }
base.php CHANGED
@@ -14,7 +14,7 @@ defined( 'ABSPATH' ) || die();
14
 
15
  class Base {
16
 
17
- const VERSION = '1.2.1';
18
 
19
  const MINIMUM_ELEMENTOR_VERSION = '2.5.0';
20
 
@@ -68,6 +68,28 @@ class Base {
68
  Widgets::init();
69
  Assets::init();
70
  Happy_Effects::init();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
  }
72
 
73
  public function include_files() {
14
 
15
  class Base {
16
 
17
+ const VERSION = '1.3.0';
18
 
19
  const MINIMUM_ELEMENTOR_VERSION = '2.5.0';
20
 
68
  Widgets::init();
69
  Assets::init();
70
  Happy_Effects::init();
71
+
72
+ $this->init_appsero_tracking();
73
+ }
74
+
75
+ /**
76
+ * Initialize the tracker
77
+ *
78
+ * @return void
79
+ */
80
+ protected function init_appsero_tracking() {
81
+ if ( ! class_exists( 'Appsero\Client' ) ) {
82
+ require_once __DIR__ . '/vendor/appsero/src/Client.php';
83
+ }
84
+
85
+ $client = new \Appsero\Client(
86
+ '70b96801-94cc-4501-a005-8f9a4e20e152',
87
+ 'Happy Elementor Addons',
88
+ HAPPY__FILE__
89
+ );
90
+
91
+ // Active insights
92
+ $client->insights()->init();
93
  }
94
 
95
  public function include_files() {
base/widget-base.php CHANGED
@@ -28,10 +28,9 @@ abstract class Base extends Widget_Base {
28
  * Card will be card
29
  * Blog_Card will be blog-card
30
  */
31
- $name = str_replace( __NAMESPACE__, '', $this->get_class_name() );
32
  $name = str_replace( '_', '-', $name );
33
  $name = ltrim( $name, '\\' );
34
- $name = strtolower( $name );
35
  return 'ha-' . $name;
36
  }
37
 
28
  * Card will be card
29
  * Blog_Card will be blog-card
30
  */
31
+ $name = str_replace( strtolower(__NAMESPACE__), '', strtolower($this->get_class_name()) );
32
  $name = str_replace( '_', '-', $name );
33
  $name = ltrim( $name, '\\' );
 
34
  return 'ha-' . $name;
35
  }
36
 
classes/asset-manager.php CHANGED
@@ -54,6 +54,20 @@ class Assets {
54
  Base::VERSION
55
  );
56
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  wp_enqueue_style(
58
  'happy-elementor-addons',
59
  HAPPY_ASSETS . 'css/main' . $suffix . 'css',
@@ -86,6 +100,14 @@ class Assets {
86
  true
87
  );
88
 
 
 
 
 
 
 
 
 
89
  wp_enqueue_script(
90
  'anime',
91
  HAPPY_ASSETS . 'vendor/anime/lib/anime.min.js',
54
  Base::VERSION
55
  );
56
 
57
+ wp_enqueue_style(
58
+ 'slick',
59
+ HAPPY_ASSETS . 'vendor/slick/slick.css',
60
+ null,
61
+ Base::VERSION
62
+ );
63
+
64
+ wp_enqueue_style(
65
+ 'slick-theme',
66
+ HAPPY_ASSETS . 'vendor/slick/slick-theme.css',
67
+ null,
68
+ Base::VERSION
69
+ );
70
+
71
  wp_enqueue_style(
72
  'happy-elementor-addons',
73
  HAPPY_ASSETS . 'css/main' . $suffix . 'css',
100
  true
101
  );
102
 
103
+ wp_enqueue_script(
104
+ 'jquery-slick',
105
+ HAPPY_ASSETS . 'vendor/slick/slick' . $suffix . 'js',
106
+ ['jquery'],
107
+ Base::VERSION,
108
+ true
109
+ );
110
+
111
  wp_enqueue_script(
112
  'anime',
113
  HAPPY_ASSETS . 'vendor/anime/lib/anime.min.js',
classes/widget-manager.php CHANGED
@@ -34,6 +34,8 @@ class Widgets {
34
  'review',
35
  'image-compare',
36
  'justified-gallery',
 
 
37
  'skills',
38
  'gradient-heading',
39
  'wpform',
34
  'review',
35
  'image-compare',
36
  'justified-gallery',
37
+ 'slider',
38
+ 'carousel',
39
  'skills',
40
  'gradient-heading',
41
  'wpform',
inc/functions.php CHANGED
@@ -281,3 +281,44 @@ function ha_get_setting_value( &$settings, $keys ) {
281
  function ha_is_localhost() {
282
  return isset( $_SERVER['REMOTE_ADDR'] ) && in_array( $_SERVER['REMOTE_ADDR'], ['127.0.0.1', '::1'] );
283
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
281
  function ha_is_localhost() {
282
  return isset( $_SERVER['REMOTE_ADDR'] ) && in_array( $_SERVER['REMOTE_ADDR'], ['127.0.0.1', '::1'] );
283
  }
284
+
285
+ function ha_get_css_cursors() {
286
+ return [
287
+ 'default' => __( 'Default', 'happy-elementor-addons' ),
288
+ 'alias' => __( 'Alias', 'happy-elementor-addons' ),
289
+ 'all-scroll' => __( 'All scroll', 'happy-elementor-addons' ),
290
+ 'auto' => __( 'Auto', 'happy-elementor-addons' ),
291
+ 'cell' => __( 'Cell', 'happy-elementor-addons' ),
292
+ 'context-menu' => __( 'Context menu', 'happy-elementor-addons' ),
293
+ 'col-resize' => __( 'Col-resize', 'happy-elementor-addons' ),
294
+ 'copy' => __( 'Copy', 'happy-elementor-addons' ),
295
+ 'crosshair' => __( 'Crosshair', 'happy-elementor-addons' ),
296
+ 'e-resize' => __( 'E-resize', 'happy-elementor-addons' ),
297
+ 'ew-resize' => __( 'EW-resize', 'happy-elementor-addons' ),
298
+ 'grab' => __( 'Grab', 'happy-elementor-addons' ),
299
+ 'grabbing' => __( 'Grabbing', 'happy-elementor-addons' ),
300
+ 'help' => __( 'Help', 'happy-elementor-addons' ),
301
+ 'move' => __( 'Move', 'happy-elementor-addons' ),
302
+ 'n-resize' => __( 'N-resize', 'happy-elementor-addons' ),
303
+ 'ne-resize' => __( 'NE-resize', 'happy-elementor-addons' ),
304
+ 'nesw-resize' => __( 'NESW-resize', 'happy-elementor-addons' ),
305
+ 'ns-resize' => __( 'NS-resize', 'happy-elementor-addons' ),
306
+ 'nw-resize' => __( 'NW-resize', 'happy-elementor-addons' ),
307
+ 'nwse-resize' => __( 'NWSE-resize', 'happy-elementor-addons' ),
308
+ 'no-drop' => __( 'No-drop', 'happy-elementor-addons' ),
309
+ 'not-allowed' => __( 'Not-allowed', 'happy-elementor-addons' ),
310
+ 'pointer' => __( 'Pointer', 'happy-elementor-addons' ),
311
+ 'progress' => __( 'Progress', 'happy-elementor-addons' ),
312
+ 'row-resize' => __( 'Row-resize', 'happy-elementor-addons' ),
313
+ 's-resize' => __( 'S-resize', 'happy-elementor-addons' ),
314
+ 'se-resize' => __( 'SE-resize', 'happy-elementor-addons' ),
315
+ 'sw-resize' => __( 'SW-resize', 'happy-elementor-addons' ),
316
+ 'text' => __( 'Text', 'happy-elementor-addons' ),
317
+ 'url' => __( 'URL', 'happy-elementor-addons' ),
318
+ 'w-resize' => __( 'W-resize', 'happy-elementor-addons' ),
319
+ 'wait' => __( 'Wait', 'happy-elementor-addons' ),
320
+ 'zoom-in' => __( 'Zoom-in', 'happy-elementor-addons' ),
321
+ 'zoom-out' => __( 'Zoom-out', 'happy-elementor-addons' ),
322
+ 'none' => __( 'None', 'happy-elementor-addons' ),
323
+ ];
324
+ }
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: 1.2.1
7
  * Author: HappyMonster
8
  * Author URI: https://happyaddons.com/
9
  * License: GPLv2
@@ -34,8 +34,9 @@ Copyright 2019 HappyMonster <http://happymonster.me>
34
 
35
  defined( 'ABSPATH' ) || die();
36
 
37
- define( 'HAPPY_DIR_PATH', plugin_dir_path( __FILE__ ) );
38
- define( 'HAPPY_DIR_URL', plugin_dir_url( __FILE__ ) );
 
39
  define( 'HAPPY_ASSETS', trailingslashit( HAPPY_DIR_URL . 'assets' ) );
40
 
41
  require HAPPY_DIR_PATH . 'base.php';
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: 1.3.0
7
  * Author: HappyMonster
8
  * Author URI: https://happyaddons.com/
9
  * License: GPLv2
34
 
35
  defined( 'ABSPATH' ) || die();
36
 
37
+ define( 'HAPPY__FILE__', __FILE__ );
38
+ define( 'HAPPY_DIR_PATH', plugin_dir_path( HAPPY__FILE__ ) );
39
+ define( 'HAPPY_DIR_URL', plugin_dir_url( HAPPY__FILE__ ) );
40
  define( 'HAPPY_ASSETS', trailingslashit( HAPPY_DIR_URL . 'assets' ) );
41
 
42
  require HAPPY_DIR_PATH . 'base.php';
readme.txt CHANGED
@@ -1,6 +1,6 @@
1
  === Happy Elementor Addons ===
2
  Plugin Name: Happy Elementor Addons
3
- Version: 1.2.1
4
  Author: HappyMonster
5
  Author URI: https://happyaddons.com/
6
  Contributors: thehappymonster, happyaddons, hasinhayder, mosaddek73, tareq1988, obiplabon, sourav926, wedevs
@@ -19,7 +19,7 @@ License URI: http://www.gnu.org/licenses/gpl-2.0.html
19
  [HappyAddons](https://happyaddons.com/) 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. [HappyAddons](https://happyaddons.com/) is free, rapidly growing and comes with great support.
20
 
21
 
22
- ### Included 18 Free Widgets
23
 
24
  1. **[Card](https://happyaddons.com/elementor-card-widget-demo/)** - Incredibly powerful widget to demonstrate your products, articles, news, creative posts using a beautiful combination of texts, links, badge and image. Using built in positioning and offset feature you can create eye-candy designs in a twist. [Check demo](https://happyaddons.com/elementor-card-widget-demo/)
25
  2. **[Gradient Heading](https://happyaddons.com/elementor-gradient-heading-widget-demo/)** - Another gem to create eye candy headings for your websites. You can apply different gradient styles, angles, opacity, and positions to make them look even better across different device screens. [Check demo](https://happyaddons.com/elementor-gradient-heading-widget-demo/)
@@ -39,8 +39,8 @@ License URI: http://www.gnu.org/licenses/gpl-2.0.html
39
  16. **[Justified Grid](https://happyaddons.com/elementor-justified-grid-widget-demo/)** - Another pro grade widget which can help you to create beautiful justified grid. Comes packed with tons of options to make it stand out from the crowd. [Check demo](https://happyaddons.com/elementor-justified-grid-widget-demo/)
40
  17. **[Number](https://happyaddons.com/elementor-number-widget-demo/)** - Simply beautiful, this widget can help you create stunning number blocks with various styles, look-n-feels that’s literally going to blow your mind. [Check demo](https://happyaddons.com/elementor-number-widget-demo/)
41
  18. **[Logo Grid](https://happyaddons.com/elementor-logo-grid-widget-demo)** - Showcase your clients or products using our logo grid widget, and display these items with styles. [Check demo](https://happyaddons.com/elementor-logo-grid-widget-demo)
42
- 19. **Carousel** - ETA 23 July, 2019
43
- 20. **Slider** - ETA 23 July, 2019
44
 
45
  ### INCLUDED FREE EXTENSIONS FOR EVERY ELEMENTOR WIDGET
46
  **Happy Effects**
@@ -83,6 +83,10 @@ I'm afraid, you cannot use **[Happy Elementor Addons](https://happyaddons.com/)*
83
 
84
  Yes, it does. And you'll get some cool and extra features like Happy Effects for other Elementor Addons or Extensions.
85
 
 
 
 
 
86
  = Does it work with Elementor Pro? =
87
 
88
  Yes, undoubtedly.
@@ -126,11 +130,19 @@ It's really easy and super simple to install **Happy Elementor Addons** plugin b
126
 
127
  == Changelog ==
128
 
129
- = 1.2.1 =
 
 
 
 
 
 
 
 
130
 
131
  * Fix: Unnecessary JS and CSS loading issue fixed
132
 
133
- = 1.2.0 =
134
 
135
  * New: Justified Grid Widget
136
  * New: Logo Grid Widget
1
  === Happy Elementor Addons ===
2
  Plugin Name: Happy Elementor Addons
3
+ Version: 1.3.0
4
  Author: HappyMonster
5
  Author URI: https://happyaddons.com/
6
  Contributors: thehappymonster, happyaddons, hasinhayder, mosaddek73, tareq1988, obiplabon, sourav926, wedevs
19
  [HappyAddons](https://happyaddons.com/) 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. [HappyAddons](https://happyaddons.com/) is free, rapidly growing and comes with great support.
20
 
21
 
22
+ ### Included 20 Free Widgets
23
 
24
  1. **[Card](https://happyaddons.com/elementor-card-widget-demo/)** - Incredibly powerful widget to demonstrate your products, articles, news, creative posts using a beautiful combination of texts, links, badge and image. Using built in positioning and offset feature you can create eye-candy designs in a twist. [Check demo](https://happyaddons.com/elementor-card-widget-demo/)
25
  2. **[Gradient Heading](https://happyaddons.com/elementor-gradient-heading-widget-demo/)** - Another gem to create eye candy headings for your websites. You can apply different gradient styles, angles, opacity, and positions to make them look even better across different device screens. [Check demo](https://happyaddons.com/elementor-gradient-heading-widget-demo/)
39
  16. **[Justified Grid](https://happyaddons.com/elementor-justified-grid-widget-demo/)** - Another pro grade widget which can help you to create beautiful justified grid. Comes packed with tons of options to make it stand out from the crowd. [Check demo](https://happyaddons.com/elementor-justified-grid-widget-demo/)
40
  17. **[Number](https://happyaddons.com/elementor-number-widget-demo/)** - Simply beautiful, this widget can help you create stunning number blocks with various styles, look-n-feels that’s literally going to blow your mind. [Check demo](https://happyaddons.com/elementor-number-widget-demo/)
41
  18. **[Logo Grid](https://happyaddons.com/elementor-logo-grid-widget-demo)** - Showcase your clients or products using our logo grid widget, and display these items with styles. [Check demo](https://happyaddons.com/elementor-logo-grid-widget-demo)
42
+ 19. **[Carousel](https://happyaddons.com/elementor-carousel-widget-demo/)** - Create interesting image and text carousels using our carousel widget which comes with lot of options. [Check demo](https://happyaddons.com/elementor-carousel-widget-demo/)
43
+ 20. **[Slider](https://happyaddons.com/elementor-slider-widget-demo/)** - Now you can create sliders with beautiful animations and effects using our Slider widget. And just like our other widgets, there are lots of customization options for you. [Check demo](https://happyaddons.com/elementor-slider-widget-demo/)
44
 
45
  ### INCLUDED FREE EXTENSIONS FOR EVERY ELEMENTOR WIDGET
46
  **Happy Effects**
83
 
84
  Yes, it does. And you'll get some cool and extra features like Happy Effects for other Elementor Addons or Extensions.
85
 
86
+ = Does it work with any WordPress theme? =
87
+
88
+ Yes, it works with any WordPress theme that works with Elementor. And it best works with [Hello Elementor](https://wordpress.org/themes/hello-elementor/).
89
+
90
  = Does it work with Elementor Pro? =
91
 
92
  Yes, undoubtedly.
130
 
131
  == Changelog ==
132
 
133
+ = 1.3.0 - 23 July 2019 =
134
+
135
+ * New: Carousel Widget
136
+ * New: Slider Widget
137
+ * Update: Justified Grid Widget hover and animation effects
138
+ * Update: Typography scheme support for all FREE widgets
139
+ * Fix: Misc styling issue
140
+
141
+ = 1.2.1 - 18 July 2019 =
142
 
143
  * Fix: Unnecessary JS and CSS loading issue fixed
144
 
145
+ = 1.2.0 - 16 July 2019 =
146
 
147
  * New: Justified Grid Widget
148
  * New: Logo Grid Widget
vendor/appsero/src/Client.php ADDED
@@ -0,0 +1,202 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Appsero;
3
+
4
+ /**
5
+ * Appsero Client
6
+ *
7
+ * This class is necessary to set project data
8
+ */
9
+ class Client {
10
+
11
+ /**
12
+ * The client version
13
+ *
14
+ * @var string
15
+ */
16
+ public $version = '1.1.1';
17
+
18
+ /**
19
+ * Hash identifier of the plugin
20
+ *
21
+ * @var string
22
+ */
23
+ public $hash;
24
+
25
+ /**
26
+ * Name of the plugin
27
+ *
28
+ * @var string
29
+ */
30
+ public $name;
31
+
32
+ /**
33
+ * The plugin/theme file path
34
+ * @example .../wp-content/plugins/test-slug/test-slug.php
35
+ *
36
+ * @var string
37
+ */
38
+ public $file;
39
+
40
+ /**
41
+ * Main plugin file
42
+ * @example test-slug/test-slug.php
43
+ *
44
+ * @var string
45
+ */
46
+ public $basename;
47
+
48
+ /**
49
+ * Slug of the plugin
50
+ * @example test-slug
51
+ *
52
+ * @var string
53
+ */
54
+ public $slug;
55
+
56
+ /**
57
+ * The project version
58
+ *
59
+ * @var string
60
+ */
61
+ public $project_version;
62
+
63
+ /**
64
+ * The project type
65
+ *
66
+ * @var string
67
+ */
68
+ public $type;
69
+
70
+ /**
71
+ * Initialize the class
72
+ *
73
+ * @param string $hash hash of the plugin
74
+ * @param string $name readable name of the plugin
75
+ * @param string $file main plugin file path
76
+ */
77
+ public function __construct( $hash, $name, $file ) {
78
+ $this->hash = $hash;
79
+ $this->name = $name;
80
+ $this->file = $file;
81
+
82
+ $this->set_basename_and_slug();
83
+ }
84
+
85
+ /**
86
+ * Initialize insights class
87
+ *
88
+ * @return Appsero\Insights
89
+ */
90
+ public function insights() {
91
+
92
+ if ( ! class_exists( __NAMESPACE__ . '\Insights') ) {
93
+ require_once __DIR__ . '/Insights.php';
94
+ }
95
+
96
+ return new Insights( $this );
97
+ }
98
+
99
+ /**
100
+ * Initialize plugin/theme updater
101
+ *
102
+ * @return Appsero\Updater
103
+ */
104
+ public function updater() {
105
+
106
+ if ( ! class_exists( __NAMESPACE__ . '\Updater') ) {
107
+ require_once __DIR__ . '/Updater.php';
108
+ }
109
+
110
+ return new Updater( $this );
111
+ }
112
+
113
+ /**
114
+ * Initialize license checker
115
+ *
116
+ * @return Appsero\License
117
+ */
118
+ public function license() {
119
+
120
+ if ( ! class_exists( __NAMESPACE__ . '\License') ) {
121
+ require_once __DIR__ . '/License.php';
122
+ }
123
+
124
+ return new License( $this );
125
+ }
126
+
127
+ /**
128
+ * API Endpoint
129
+ *
130
+ * @return string
131
+ */
132
+ public function endpoint() {
133
+ $endpoint = apply_filters( 'appsero_endpoint', 'https://api.appsero.com' );
134
+
135
+ return trailingslashit( $endpoint );
136
+ }
137
+
138
+ /**
139
+ * Set project basename, slug and version
140
+ *
141
+ * @return void
142
+ */
143
+ protected function set_basename_and_slug() {
144
+
145
+ if ( strpos( $this->file, WP_CONTENT_DIR . '/themes/' ) === false ) {
146
+
147
+ $this->basename = plugin_basename( $this->file );
148
+
149
+ list( $this->slug, $mainfile) = explode( '/', $this->basename );
150
+
151
+ require_once ABSPATH . 'wp-admin/includes/plugin.php';
152
+
153
+ $plugin_data = get_plugin_data( $this->file );
154
+
155
+ $this->project_version = $plugin_data['Version'];
156
+ $this->type = 'plugin';
157
+
158
+ } else {
159
+
160
+ $this->basename = str_replace( WP_CONTENT_DIR . '/themes/', '', $this->file );
161
+
162
+ list( $this->slug, $mainfile) = explode( '/', $this->basename );
163
+
164
+ $theme = wp_get_theme( $this->slug );
165
+
166
+ $this->project_version = $theme->version;
167
+ $this->type = 'theme';
168
+
169
+ }
170
+ }
171
+
172
+ /**
173
+ * Send request to remote endpoint
174
+ *
175
+ * @param array $params
176
+ * @param string $route
177
+ *
178
+ * @return array|WP_Error Array of results including HTTP headers or WP_Error if the request failed.
179
+ */
180
+ public function send_request( $params, $route, $blocking = false ) {
181
+ $url = $this->endpoint() . $route;
182
+
183
+ $headers = array(
184
+ 'user-agent' => 'Appsero/' . md5( esc_url( home_url() ) ) . ';',
185
+ 'Accept' => 'application/json',
186
+ );
187
+
188
+ $response = wp_remote_post( $url, array(
189
+ 'method' => 'POST',
190
+ 'timeout' => 30,
191
+ 'redirection' => 5,
192
+ 'httpversion' => '1.0',
193
+ 'blocking' => $blocking,
194
+ 'headers' => $headers,
195
+ 'body' => array_merge( $params, array( 'client' => $this->version ) ),
196
+ 'cookies' => array()
197
+ ) );
198
+
199
+ return $response;
200
+ }
201
+
202
+ }
vendor/appsero/src/Insights.php ADDED
@@ -0,0 +1,954 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Appsero;
3
+
4
+ /**
5
+ * Appsero Insights
6
+ *
7
+ * This is a tracker class to track plugin usage based on if the customer has opted in.
8
+ * No personal information is being tracked by this class, only general settings, active plugins, environment details
9
+ * and admin email.
10
+ */
11
+ class Insights {
12
+
13
+ /**
14
+ * The notice text
15
+ *
16
+ * @var string
17
+ */
18
+ public $notice;
19
+
20
+ /**
21
+ * Wheather to the notice or not
22
+ *
23
+ * @var boolean
24
+ */
25
+ protected $show_notice = true;
26
+
27
+ /**
28
+ * If extra data needs to be sent
29
+ *
30
+ * @var array
31
+ */
32
+ protected $extra_data = array();
33
+
34
+ /**
35
+ * AppSero\Client
36
+ *
37
+ * @var object
38
+ */
39
+ protected $client;
40
+
41
+ /**
42
+ * Initialize the class
43
+ *
44
+ * @param AppSero\Client
45
+ */
46
+ public function __construct( $client, $name = null, $file = null ) {
47
+
48
+ if ( is_string( $client ) && ! empty( $name ) && ! empty( $file ) ) {
49
+ $client = new Client( $client, $name, $file );
50
+ }
51
+
52
+ if ( is_object( $client ) && is_a( $client, 'Appsero\Client' ) ) {
53
+ $this->client = $client;
54
+ }
55
+ }
56
+
57
+ /**
58
+ * Don't show the notice
59
+ *
60
+ * @return \self
61
+ */
62
+ public function hide_notice() {
63
+ $this->show_notice = false;
64
+
65
+ return $this;
66
+ }
67
+
68
+ /**
69
+ * Add extra data if needed
70
+ *
71
+ * @param array $data
72
+ *
73
+ * @return \self
74
+ */
75
+ public function add_extra( $data = array() ) {
76
+ $this->extra_data = $data;
77
+
78
+ return $this;
79
+ }
80
+
81
+ /**
82
+ * Set custom notice text
83
+ *
84
+ * @param string $text
85
+ *
86
+ * @return \self
87
+ */
88
+ public function notice( $text ) {
89
+ $this->notice = $text;
90
+
91
+ return $this;
92
+ }
93
+
94
+ /**
95
+ * Initialize insights
96
+ *
97
+ * @return void
98
+ */
99
+ public function init() {
100
+ if ( $this->client->type == 'plugin' ) {
101
+ $this->init_plugin();
102
+ } else if ( $this->client->type == 'theme' ) {
103
+ $this->init_theme();
104
+ }
105
+ }
106
+
107
+ /**
108
+ * Initialize theme hooks
109
+ *
110
+ * @return void
111
+ */
112
+ public function init_theme() {
113
+ $this->init_common();
114
+
115
+ add_action( 'switch_theme', array( $this, 'deactivation_cleanup' ) );
116
+ add_action( 'switch_theme', array( $this, 'theme_deactivated' ), 12, 3 );
117
+ }
118
+
119
+ /**
120
+ * Initialize plugin hooks
121
+ *
122
+ * @return void
123
+ */
124
+ public function init_plugin() {
125
+ // plugin deactivate popup
126
+ if ( ! $this->is_local_server() ) {
127
+ add_filter( 'plugin_action_links_' . $this->client->basename, array( $this, 'plugin_action_links' ) );
128
+ add_action( 'admin_footer', array( $this, 'deactivate_scripts' ) );
129
+ }
130
+
131
+ $this->init_common();
132
+
133
+ register_activation_hook( $this->client->file, array( $this, 'activate_plugin' ) );
134
+ register_deactivation_hook( $this->client->file, array( $this, 'deactivation_cleanup' ) );
135
+ }
136
+
137
+ /**
138
+ * Initialize common hooks
139
+ *
140
+ * @return void
141
+ */
142
+ protected function init_common() {
143
+
144
+ if ( $this->show_notice ) {
145
+ // tracking notice
146
+ add_action( 'admin_notices', array( $this, 'admin_notice' ) );
147
+ }
148
+
149
+ add_action( 'admin_init', array( $this, 'handle_optin_optout' ) );
150
+
151
+ // uninstall reason
152
+ add_action( 'wp_ajax_' . $this->client->slug . '_submit-uninstall-reason', array( $this, 'uninstall_reason_submission' ) );
153
+
154
+ // cron events
155
+ add_action( 'cron_schedules', array( $this, 'add_weekly_schedule' ) );
156
+ add_action( $this->client->slug . '_tracker_send_event', array( $this, 'send_tracking_data' ) );
157
+ // add_action( 'admin_init', array( $this, 'send_tracking_data' ) ); // test
158
+ }
159
+
160
+ /**
161
+ * Send tracking data to AppSero server
162
+ *
163
+ * @param boolean $override
164
+ *
165
+ * @return void
166
+ */
167
+ public function send_tracking_data( $override = false ) {
168
+ // skip on AJAX Requests
169
+ if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
170
+ return;
171
+ }
172
+
173
+ if ( ! $this->tracking_allowed() && ! $override ) {
174
+ return;
175
+ }
176
+
177
+ // Send a maximum of once per week
178
+ $last_send = $this->get_last_send();
179
+
180
+ if ( $last_send && $last_send > strtotime( '-1 week' ) ) {
181
+ return;
182
+ }
183
+
184
+ $response = $this->client->send_request( $this->get_tracking_data(), 'track' );
185
+
186
+ update_option( $this->client->slug . '_tracking_last_send', time() );
187
+ }
188
+
189
+ /**
190
+ * Get the tracking data points
191
+ *
192
+ * @return array
193
+ */
194
+ protected function get_tracking_data() {
195
+ $all_plugins = $this->get_all_plugins();
196
+
197
+ $users = get_users( array(
198
+ 'role' => 'administrator',
199
+ 'orderby' => 'ID',
200
+ 'order' => 'ASC',
201
+ 'number' => 1,
202
+ 'paged' => 1,
203
+ ) );
204
+
205
+ $admin_user = ( is_array( $users ) && ! empty( $users ) ) ? $users[0] : false;
206
+ $first_name = $last_name = '';
207
+
208
+ if ( $admin_user ) {
209
+ $first_name = $admin_user->first_name ? $admin_user->first_name : $admin_user->display_name;
210
+ $last_name = $admin_user->last_name;
211
+ }
212
+
213
+ $data = array(
214
+ 'version' => $this->client->project_version,
215
+ 'url' => esc_url( home_url() ),
216
+ 'site' => $this->get_site_name(),
217
+ 'admin_email' => get_option( 'admin_email' ),
218
+ 'first_name' => $first_name,
219
+ 'last_name' => $last_name,
220
+ 'hash' => $this->client->hash,
221
+ 'server' => $this->get_server_info(),
222
+ 'wp' => $this->get_wp_info(),
223
+ 'users' => $this->get_user_counts(),
224
+ 'active_plugins' => count( $all_plugins['active_plugins'] ),
225
+ 'inactive_plugins' => count( $all_plugins['inactive_plugins'] ),
226
+ 'ip_address' => $this->get_user_ip_address(),
227
+ 'theme' => get_stylesheet(),
228
+ 'version' => $this->client->project_version,
229
+ );
230
+
231
+ // Add metadata
232
+ if ( $extra = $this->get_extra_data() ) {
233
+ $data['extra'] = $extra;
234
+ }
235
+
236
+ return apply_filters( $this->client->slug . '_tracker_data', $data );
237
+ }
238
+
239
+ /**
240
+ * If a child class wants to send extra data
241
+ *
242
+ * @return mixed
243
+ */
244
+ protected function get_extra_data() {
245
+ $extra_data = $this->extra_data;
246
+
247
+ if ( is_callable( $extra_data ) ) {
248
+ return $extra_data();
249
+ } else if ( is_array( $extra_data ) ) {
250
+ return $extra_data;
251
+ }
252
+
253
+ return array();
254
+ }
255
+
256
+ /**
257
+ * Explain the user which data we collect
258
+ *
259
+ * @return string
260
+ */
261
+ protected function data_we_collect() {
262
+ $data = array(
263
+ 'Server environment details (php, mysql, server, WordPress versions)',
264
+ 'Number of users in your site',
265
+ 'Site language',
266
+ 'Number of active and inactive plugins',
267
+ 'Site name and url',
268
+ 'Your name and email address',
269
+ );
270
+
271
+ return $data;
272
+ }
273
+
274
+ /**
275
+ * Check if the user has opted into tracking
276
+ *
277
+ * @return bool
278
+ */
279
+ private function tracking_allowed() {
280
+ $allow_tracking = get_option( $this->client->slug . '_allow_tracking', 'no' );
281
+
282
+ return $allow_tracking == 'yes';
283
+ }
284
+
285
+ /**
286
+ * Get the last time a tracking was sent
287
+ *
288
+ * @return false|string
289
+ */
290
+ private function get_last_send() {
291
+ return get_option( $this->client->slug . '_tracking_last_send', false );
292
+ }
293
+
294
+ /**
295
+ * Check if the notice has been dismissed or enabled
296
+ *
297
+ * @return boolean
298
+ */
299
+ private function notice_dismissed() {
300
+ $hide_notice = get_option( $this->client->slug . '_tracking_notice', 'no' );
301
+
302
+ if ( 'hide' == $hide_notice ) {
303
+ return true;
304
+ }
305
+
306
+ return false;
307
+ }
308
+
309
+ /**
310
+ * Check if the current server is localhost
311
+ *
312
+ * @return boolean
313
+ */
314
+ private function is_local_server() {
315
+ return false;
316
+
317
+ $is_local = in_array( $_SERVER['REMOTE_ADDR'], array( '127.0.0.1', '::1' ) );
318
+
319
+ return apply_filters( 'appsero_is_local', $is_local );
320
+ }
321
+
322
+ /**
323
+ * Schedule the event weekly
324
+ *
325
+ * @return void
326
+ */
327
+ private function schedule_event() {
328
+ wp_schedule_event( time(), 'weekly', $this->client->slug . '_tracker_send_event' );
329
+ wp_schedule_event( time(), 'daily', $this->client->slug . '_license_check_event' );
330
+ }
331
+
332
+ /**
333
+ * Clear any scheduled hook
334
+ *
335
+ * @return void
336
+ */
337
+ private function clear_schedule_event() {
338
+ wp_clear_scheduled_hook( $this->client->slug . '_tracker_send_event' );
339
+ wp_clear_scheduled_hook( $this->client->slug . '_license_check_event' );
340
+ }
341
+
342
+ /**
343
+ * Display the admin notice to users that have not opted-in or out
344
+ *
345
+ * @return void
346
+ */
347
+ public function admin_notice() {
348
+
349
+ if ( $this->notice_dismissed() ) {
350
+ return;
351
+ }
352
+
353
+ if ( $this->tracking_allowed() ) {
354
+ return;
355
+ }
356
+
357
+ if ( ! current_user_can( 'manage_options' ) ) {
358
+ return;
359
+ }
360
+
361
+ // don't show tracking if a local server
362
+ if ( ! $this->is_local_server() ) {
363
+ $optin_url = add_query_arg( $this->client->slug . '_tracker_optin', 'true' );
364
+ $optout_url = add_query_arg( $this->client->slug . '_tracker_optout', 'true' );
365
+
366
+ if ( empty( $this->notice ) ) {
367
+ $notice = sprintf( __( 'Want to help make <strong>%1$s</strong> even more awesome? Allow %1$s to collect non-sensitive diagnostic data and usage information.', 'textdomain' ), $this->client->name );
368
+ } else {
369
+ $notice = $this->notice;
370
+ }
371
+
372
+ $notice .= ' (<a class="' . $this->client->slug . '-insights-data-we-collect" href="#">' . __( 'what we collect', 'textdomain' ) . '</a>)';
373
+ $notice .= '<p class="description" style="display:none;">' . implode( ', ', $this->data_we_collect() ) . '. No sensitive data is tracked.</p>';
374
+
375
+ echo '<div class="updated"><p>';
376
+ echo $notice;
377
+ echo '</p><p class="submit">';
378
+ echo '&nbsp;<a href="' . esc_url( $optin_url ) . '" class="button-primary button-large">' . __( 'Allow', 'textdomain' ) . '</a>';
379
+ echo '&nbsp;<a href="' . esc_url( $optout_url ) . '" class="button-secondary button-large">' . __( 'No thanks', 'textdomain' ) . '</a>';
380
+ echo '</p></div>';
381
+
382
+ echo "<script type='text/javascript'>jQuery('." . $this->client->slug . "-insights-data-we-collect').on('click', function(e) {
383
+ e.preventDefault();
384
+ jQuery(this).parents('.updated').find('p.description').slideToggle('fast');
385
+ });
386
+ jQuery.getJSON('https://api.ipify.org?format=jsonp&callback=?', function(json) {
387
+ json.ip;
388
+ } );
389
+ </script>
390
+ ";
391
+ }
392
+ }
393
+
394
+ /**
395
+ * handle the optin/optout
396
+ *
397
+ * @return void
398
+ */
399
+ public function handle_optin_optout() {
400
+
401
+ if ( isset( $_GET[ $this->client->slug . '_tracker_optin' ] ) && $_GET[ $this->client->slug . '_tracker_optin' ] == 'true' ) {
402
+ $this->optin();
403
+
404
+ wp_redirect( remove_query_arg( $this->client->slug . '_tracker_optin' ) );
405
+ exit;
406
+ }
407
+
408
+ if ( isset( $_GET[ $this->client->slug . '_tracker_optout' ] ) && $_GET[ $this->client->slug . '_tracker_optout' ] == 'true' ) {
409
+ $this->optout();
410
+
411
+ wp_redirect( remove_query_arg( $this->client->slug . '_tracker_optout' ) );
412
+ exit;
413
+ }
414
+ }
415
+
416
+ /**
417
+ * Tracking optin
418
+ *
419
+ * @return void
420
+ */
421
+ public function optin() {
422
+ update_option( $this->client->slug . '_allow_tracking', 'yes' );
423
+ update_option( $this->client->slug . '_tracking_notice', 'hide' );
424
+
425
+ $this->clear_schedule_event();
426
+ $this->schedule_event();
427
+ $this->send_tracking_data();
428
+ }
429
+
430
+ /**
431
+ * Optout from tracking
432
+ *
433
+ * @return void
434
+ */
435
+ public function optout() {
436
+ update_option( $this->client->slug . '_allow_tracking', 'no' );
437
+ update_option( $this->client->slug . '_tracking_notice', 'hide' );
438
+
439
+ $this->clear_schedule_event();
440
+ }
441
+
442
+ /**
443
+ * Get the number of post counts
444
+ *
445
+ * @param string $post_type
446
+ *
447
+ * @return integer
448
+ */
449
+ public function get_post_count( $post_type ) {
450
+ global $wpdb;
451
+
452
+ return (int) $wpdb->get_var( "SELECT count(ID) FROM $wpdb->posts WHERE post_type = '$post_type' and post_status = 'publish'");
453
+ }
454
+
455
+ /**
456
+ * Get server related info.
457
+ *
458
+ * @return array
459
+ */
460
+ private static function get_server_info() {
461
+ global $wpdb;
462
+
463
+ $server_data = array();
464
+
465
+ if ( isset( $_SERVER['SERVER_SOFTWARE'] ) && ! empty( $_SERVER['SERVER_SOFTWARE'] ) ) {
466
+ $server_data['software'] = $_SERVER['SERVER_SOFTWARE'];
467
+ }
468
+
469
+ if ( function_exists( 'phpversion' ) ) {
470
+ $server_data['php_version'] = phpversion();
471
+ }
472
+
473
+ $server_data['mysql_version'] = $wpdb->db_version();
474
+
475
+ $server_data['php_max_upload_size'] = size_format( wp_max_upload_size() );
476
+ $server_data['php_default_timezone'] = date_default_timezone_get();
477
+ $server_data['php_soap'] = class_exists( 'SoapClient' ) ? 'Yes' : 'No';
478
+ $server_data['php_fsockopen'] = function_exists( 'fsockopen' ) ? 'Yes' : 'No';
479
+ $server_data['php_curl'] = function_exists( 'curl_init' ) ? 'Yes' : 'No';
480
+
481
+ return $server_data;
482
+ }
483
+
484
+ /**
485
+ * Get WordPress related data.
486
+ *
487
+ * @return array
488
+ */
489
+ private function get_wp_info() {
490
+ $wp_data = array();
491
+
492
+ $wp_data['memory_limit'] = WP_MEMORY_LIMIT;
493
+ $wp_data['debug_mode'] = ( defined('WP_DEBUG') && WP_DEBUG ) ? 'Yes' : 'No';
494
+ $wp_data['locale'] = get_locale();
495
+ $wp_data['version'] = get_bloginfo( 'version' );
496
+ $wp_data['multisite'] = is_multisite() ? 'Yes' : 'No';
497
+
498
+ return $wp_data;
499
+ }
500
+
501
+ /**
502
+ * Get the list of active and inactive plugins
503
+ *
504
+ * @return array
505
+ */
506
+ private function get_all_plugins() {
507
+ // Ensure get_plugins function is loaded
508
+ if ( ! function_exists( 'get_plugins' ) ) {
509
+ include ABSPATH . '/wp-admin/includes/plugin.php';
510
+ }
511
+
512
+ $plugins = get_plugins();
513
+ $active_plugins_keys = get_option( 'active_plugins', array() );
514
+ $active_plugins = array();
515
+
516
+ foreach ( $plugins as $k => $v ) {
517
+ // Take care of formatting the data how we want it.
518
+ $formatted = array();
519
+ $formatted['name'] = strip_tags( $v['Name'] );
520
+
521
+ if ( isset( $v['Version'] ) ) {
522
+ $formatted['version'] = strip_tags( $v['Version'] );
523
+ }
524
+
525
+ if ( isset( $v['Author'] ) ) {
526
+ $formatted['author'] = strip_tags( $v['Author'] );
527
+ }
528
+
529
+ if ( isset( $v['Network'] ) ) {
530
+ $formatted['network'] = strip_tags( $v['Network'] );
531
+ }
532
+
533
+ if ( isset( $v['PluginURI'] ) ) {
534
+ $formatted['plugin_uri'] = strip_tags( $v['PluginURI'] );
535
+ }
536
+
537
+ if ( in_array( $k, $active_plugins_keys ) ) {
538
+ // Remove active plugins from list so we can show active and inactive separately
539
+ unset( $plugins[$k] );
540
+ $active_plugins[$k] = $formatted;
541
+ } else {
542
+ $plugins[$k] = $formatted;
543
+ }
544
+ }
545
+
546
+ return array( 'active_plugins' => $active_plugins, 'inactive_plugins' => $plugins );
547
+ }
548
+
549
+ /**
550
+ * Get user totals based on user role.
551
+ *
552
+ * @return array
553
+ */
554
+ public function get_user_counts() {
555
+ $user_count = array();
556
+ $user_count_data = count_users();
557
+ $user_count['total'] = $user_count_data['total_users'];
558
+
559
+ // Get user count based on user role
560
+ foreach ( $user_count_data['avail_roles'] as $role => $count ) {
561
+ $user_count[ $role ] = $count;
562
+ }
563
+
564
+ return $user_count;
565
+ }
566
+
567
+ /**
568
+ * Add weekly cron schedule
569
+ *
570
+ * @param array $schedules
571
+ *
572
+ * @return array
573
+ */
574
+ public function add_weekly_schedule( $schedules ) {
575
+
576
+ $schedules['weekly'] = array(
577
+ 'interval' => DAY_IN_SECONDS * 7,
578
+ 'display' => __( 'Once Weekly', 'textdomain' )
579
+ );
580
+
581
+ return $schedules;
582
+ }
583
+
584
+ /**
585
+ * Plugin activation hook
586
+ *
587
+ * @return void
588
+ */
589
+ public function activate_plugin() {
590
+ $allowed = get_option( $this->client->slug . '_allow_tracking', 'no' );
591
+
592
+ // if it wasn't allowed before, do nothing
593
+ if ( 'yes' !== $allowed ) {
594
+ return;
595
+ }
596
+
597
+ // re-schedule and delete the last sent time so we could force send again
598
+ wp_schedule_event( time(), 'weekly', $this->client->slug . '_tracker_send_event' );
599
+ delete_option( $this->client->slug . '_tracking_last_send' );
600
+
601
+ $this->send_tracking_data( true );
602
+ }
603
+
604
+ /**
605
+ * Clear our options upon deactivation
606
+ *
607
+ * @return void
608
+ */
609
+ public function deactivation_cleanup() {
610
+ $this->clear_schedule_event();
611
+
612
+ if ( 'theme' == $this->client->type ) {
613
+ delete_option( $this->client->slug . '_tracking_last_send' );
614
+ delete_option( $this->client->slug . '_allow_tracking' );
615
+ }
616
+
617
+ delete_option( $this->client->slug . '_tracking_notice' );
618
+ }
619
+
620
+ /**
621
+ * Hook into action links and modify the deactivate link
622
+ *
623
+ * @param array $links
624
+ *
625
+ * @return array
626
+ */
627
+ public function plugin_action_links( $links ) {
628
+
629
+ if ( array_key_exists( 'deactivate', $links ) ) {
630
+ $links['deactivate'] = str_replace( '<a', '<a class="' . $this->client->slug . '-deactivate-link"', $links['deactivate'] );
631
+ }
632
+
633
+ return $links;
634
+ }
635
+
636
+ private function get_uninstall_reasons() {
637
+ $reasons = array(
638
+ array(
639
+ 'id' => 'could-not-understand',
640
+ 'text' => 'I couldn\'t understand how to make it work',
641
+ 'type' => 'textarea',
642
+ 'placeholder' => 'Would you like us to assist you?'
643
+ ),
644
+ array(
645
+ 'id' => 'found-better-plugin',
646
+ 'text' => 'I found a better plugin',
647
+ 'type' => 'text',
648
+ 'placeholder' => 'Which plugin?'
649
+ ),
650
+ array(
651
+ 'id' => 'not-have-that-feature',
652
+ 'text' => 'The plugin is great, but I need specific feature that you don\'t support',
653
+ 'type' => 'textarea',
654
+ 'placeholder' => 'Could you tell us more about that feature?'
655
+ ),
656
+ array(
657
+ 'id' => 'is-not-working',
658
+ 'text' => 'The plugin is not working',
659
+ 'type' => 'textarea',
660
+ 'placeholder' => 'Could you tell us a bit more whats not working?'
661
+ ),
662
+ array(
663
+ 'id' => 'looking-for-other',
664
+ 'text' => 'It\'s not what I was looking for',
665
+ 'type' => '',
666
+ 'placeholder' => ''
667
+ ),
668
+ array(
669
+ 'id' => 'did-not-work-as-expected',
670
+ 'text' => 'The plugin didn\'t work as expected',
671
+ 'type' => 'textarea',
672
+ 'placeholder' => 'What did you expect?'
673
+ ),
674
+ array(
675
+ 'id' => 'other',
676
+ 'text' => 'Other',
677
+ 'type' => 'textarea',
678
+ 'placeholder' => 'Could you tell us a bit more?'
679
+ ),
680
+ );
681
+
682
+ return $reasons;
683
+ }
684
+
685
+ /**
686
+ * Plugin deactivation uninstall reason submission
687
+ *
688
+ * @return void
689
+ */
690
+ public function uninstall_reason_submission() {
691
+
692
+ if ( ! isset( $_POST['reason_id'] ) ) {
693
+ wp_send_json_error();
694
+ }
695
+
696
+ $current_user = wp_get_current_user();
697
+
698
+ $data = array(
699
+ 'hash' => $this->client->hash,
700
+ 'reason_id' => sanitize_text_field( $_POST['reason_id'] ),
701
+ 'reason_info' => isset( $_REQUEST['reason_info'] ) ? trim( stripslashes( $_REQUEST['reason_info'] ) ) : '',
702
+ 'site' => $this->get_site_name(),
703
+ 'url' => esc_url( home_url() ),
704
+ 'admin_email' => get_option( 'admin_email' ),
705
+ 'user_email' => $current_user->user_email,
706
+ 'first_name' => $current_user->first_name,
707
+ 'last_name' => $current_user->last_name,
708
+ 'server' => $this->get_server_info(),
709
+ 'wp' => $this->get_wp_info(),
710
+ 'ip_address' => $this->get_user_ip_address(),
711
+ 'theme' => get_stylesheet(),
712
+ 'version' => $this->client->project_version,
713
+ );
714
+
715
+ // Add metadata
716
+ if ( $extra = $this->get_extra_data() ) {
717
+ $data['extra'] = $extra;
718
+ }
719
+
720
+ $this->client->send_request( $data, 'deactivate' );
721
+
722
+ wp_send_json_success();
723
+ }
724
+
725
+ /**
726
+ * Handle the plugin deactivation feedback
727
+ *
728
+ * @return void
729
+ */
730
+ public function deactivate_scripts() {
731
+ global $pagenow;
732
+
733
+ if ( 'plugins.php' != $pagenow ) {
734
+ return;
735
+ }
736
+
737
+ $reasons = $this->get_uninstall_reasons();
738
+ ?>
739
+
740
+ <div class="wd-dr-modal" id="<?php echo $this->client->slug; ?>-wd-dr-modal">
741
+ <div class="wd-dr-modal-wrap">
742
+ <div class="wd-dr-modal-header">
743
+ <h3><?php _e( 'If you have a moment, please let us know why you are deactivating:', 'domain' ); ?></h3>
744
+ </div>
745
+
746
+ <div class="wd-dr-modal-body">
747
+ <ul class="reasons">
748
+ <?php foreach ($reasons as $reason) { ?>
749
+ <li data-type="<?php echo esc_attr( $reason['type'] ); ?>" data-placeholder="<?php echo esc_attr( $reason['placeholder'] ); ?>">
750
+ <label><input type="radio" name="selected-reason" value="<?php echo $reason['id']; ?>"> <?php echo $reason['text']; ?></label>
751
+ </li>
752
+ <?php } ?>
753
+ </ul>
754
+ </div>
755
+
756
+ <div class="wd-dr-modal-footer">
757
+ <a href="#" class="dont-bother-me"><?php _e( 'I rather wouldn\'t say', 'domain' ); ?></a>
758
+ <button class="button-secondary"><?php _e( 'Submit & Deactivate', 'domain' ); ?></button>
759
+ <button class="button-primary"><?php _e( 'Cancel', 'domain' ); ?></button>
760
+ </div>
761
+ </div>
762
+ </div>
763
+
764
+ <style type="text/css">
765
+ .wd-dr-modal {
766
+ position: fixed;
767
+ z-index: 99999;
768
+ top: 0;
769
+ right: 0;
770
+ bottom: 0;
771
+ left: 0;
772
+ background: rgba(0,0,0,0.5);
773
+ display: none;
774
+ }
775
+
776
+ .wd-dr-modal.modal-active {
777
+ display: block;
778
+ }
779
+
780
+ .wd-dr-modal-wrap {
781
+ width: 475px;
782
+ position: relative;
783
+ margin: 10% auto;
784
+ background: #fff;
785
+ }
786
+
787
+ .wd-dr-modal-header {
788
+ border-bottom: 1px solid #eee;
789
+ padding: 8px 20px;
790
+ }
791
+
792
+ .wd-dr-modal-header h3 {
793
+ line-height: 150%;
794
+ margin: 0;
795
+ }
796
+
797
+ .wd-dr-modal-body {
798
+ padding: 5px 20px 20px 20px;
799
+ }
800
+
801
+ .wd-dr-modal-body .reason-input {
802
+ margin-top: 5px;
803
+ margin-left: 20px;
804
+ }
805
+ .wd-dr-modal-footer {
806
+ border-top: 1px solid #eee;
807
+ padding: 12px 20px;
808
+ text-align: right;
809
+ }
810
+ </style>
811
+
812
+ <script type="text/javascript">
813
+ (function($) {
814
+ $(function() {
815
+ var modal = $( '#<?php echo $this->client->slug; ?>-wd-dr-modal' );
816
+ var deactivateLink = '';
817
+
818
+ $( '#the-list' ).on('click', 'a.<?php echo $this->client->slug; ?>-deactivate-link', function(e) {
819
+ e.preventDefault();
820
+
821
+ modal.addClass('modal-active');
822
+ deactivateLink = $(this).attr('href');
823
+ modal.find('a.dont-bother-me').attr('href', deactivateLink).css('float', 'left');
824
+ });
825
+
826
+ modal.on('click', 'button.button-primary', function(e) {
827
+ e.preventDefault();
828
+
829
+ modal.removeClass('modal-active');
830
+ });
831
+
832
+ modal.on('click', 'input[type="radio"]', function () {
833
+ var parent = $(this).parents('li:first');
834
+
835
+ modal.find('.reason-input').remove();
836
+
837
+ var inputType = parent.data('type'),
838
+ inputPlaceholder = parent.data('placeholder'),
839
+ reasonInputHtml = '<div class="reason-input">' + ( ( 'text' === inputType ) ? '<input type="text" size="40" />' : '<textarea rows="5" cols="45"></textarea>' ) + '</div>';
840
+
841
+ if ( inputType !== '' ) {
842
+ parent.append( $(reasonInputHtml) );
843
+ parent.find('input, textarea').attr('placeholder', inputPlaceholder).focus();
844
+ }
845
+ });
846
+
847
+ modal.on('click', 'button.button-secondary', function(e) {
848
+ e.preventDefault();
849
+
850
+ var button = $(this);
851
+
852
+ if ( button.hasClass('disabled') ) {
853
+ return;
854
+ }
855
+
856
+ var $radio = $( 'input[type="radio"]:checked', modal );
857
+
858
+ var $selected_reason = $radio.parents('li:first'),
859
+ $input = $selected_reason.find('textarea, input[type="text"]');
860
+
861
+ $.ajax({
862
+ url: ajaxurl,
863
+ type: 'POST',
864
+ data: {
865
+ action: '<?php echo $this->client->slug; ?>_submit-uninstall-reason',
866
+ reason_id: ( 0 === $radio.length ) ? 'none' : $radio.val(),
867
+ reason_info: ( 0 !== $input.length ) ? $input.val().trim() : ''
868
+ },
869
+ beforeSend: function() {
870
+ button.addClass('disabled');
871
+ button.text('Processing...');
872
+ },
873
+ complete: function() {
874
+ window.location.href = deactivateLink;
875
+ }
876
+ });
877
+ });
878
+ });
879
+ }(jQuery));
880
+ </script>
881
+
882
+ <?php
883
+ }
884
+
885
+ /**
886
+ * Run after theme deactivated
887
+ * @param string $new_name
888
+ * @param object $new_theme
889
+ * @param object $old_theme
890
+ * @return void
891
+ */
892
+ public function theme_deactivated( $new_name, $new_theme, $old_theme ) {
893
+ // Make sure this is appsero theme
894
+ if ( $old_theme->get_template() == $this->client->slug ) {
895
+ $current_user = wp_get_current_user();
896
+
897
+ $data = array(
898
+ 'hash' => $this->client->hash,
899
+ 'reason_id' => 'none',
900
+ 'reason_info' => '',
901
+ 'site' => $this->get_site_name(),
902
+ 'url' => esc_url( home_url() ),
903
+ 'admin_email' => get_option( 'admin_email' ),
904
+ 'user_email' => $current_user->user_email,
905
+ 'first_name' => $current_user->first_name,
906
+ 'last_name' => $current_user->last_name,
907
+ 'server' => $this->get_server_info(),
908
+ 'wp' => $this->get_wp_info(),
909
+ 'ip_address' => $this->get_user_ip_address(),
910
+ 'theme' => get_stylesheet(),
911
+ 'version' => $this->client->project_version,
912
+ );
913
+
914
+ $this->client->send_request( $data, 'deactivate' );
915
+ }
916
+ }
917
+
918
+ /**
919
+ * Get user IP Address
920
+ */
921
+ private function get_user_ip_address() {
922
+ $response = wp_remote_get( 'https://icanhazip.com/' );
923
+
924
+ if ( is_wp_error( $response ) ) {
925
+ return '';
926
+ }
927
+
928
+ $ip = trim( wp_remote_retrieve_body( $response ) );
929
+
930
+ if ( ! filter_var( $ip, FILTER_VALIDATE_IP ) ) {
931
+ return '';
932
+ }
933
+
934
+ return $ip;
935
+ }
936
+
937
+ /**
938
+ * Get site name
939
+ */
940
+ private function get_site_name() {
941
+ $site_name = get_bloginfo( 'name' );
942
+
943
+ if ( empty( $site_name ) ) {
944
+ $site_name = get_bloginfo( 'description' );
945
+ $site_name = wp_trim_words( $site_name, 3, '' );
946
+ }
947
+
948
+ if ( empty( $site_name ) ) {
949
+ $site_name = get_bloginfo( 'url' );
950
+ }
951
+
952
+ return $site_name;
953
+ }
954
+ }
vendor/appsero/src/License.php ADDED
@@ -0,0 +1,345 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Appsero;
3
+
4
+ /**
5
+ * Appsero License Checker
6
+ *
7
+ * This class will check, active and deactive license
8
+ */
9
+ class License {
10
+
11
+ /**
12
+ * AppSero\Client
13
+ *
14
+ * @var object
15
+ */
16
+ protected $client;
17
+
18
+ /**
19
+ * Arguments of create menu
20
+ *
21
+ * @var array
22
+ */
23
+ protected $menu_args;
24
+
25
+ /**
26
+ * `option_name` of `wp_options` table
27
+ *
28
+ * @var string
29
+ */
30
+ protected $option_key;
31
+
32
+ /**
33
+ * Error message of HTTP request
34
+ *
35
+ * @var string
36
+ */
37
+ protected $error;
38
+
39
+ /**
40
+ * Success message on form submit
41
+ *
42
+ * @var string
43
+ */
44
+ protected $success;
45
+
46
+ /**
47
+ * Set value for valid licnese
48
+ *
49
+ * @var boolean
50
+ */
51
+ private $is_valid_licnese = null;
52
+
53
+ /**
54
+ * Initialize the class
55
+ *
56
+ * @param Appsero\Client
57
+ */
58
+ public function __construct( Client $client ) {
59
+ $this->client = $client;
60
+
61
+ $this->option_key = 'appsero_' . md5( $this->client->slug ) . '_licenses';
62
+ }
63
+
64
+ /**
65
+ * Check license
66
+ *
67
+ * @return boolean
68
+ */
69
+ public function check( $license_key ) {
70
+ $route = 'public/license/' . $this->client->hash . '/check';
71
+
72
+ return $this->send_request( $license_key, $route );
73
+ }
74
+
75
+ /**
76
+ * Active a license
77
+ *
78
+ * @return boolean
79
+ */
80
+ public function activate( $license_key ) {
81
+ $route = 'public/license/' . $this->client->hash . '/activate';
82
+
83
+ return $this->send_request( $license_key, $route );
84
+ }
85
+
86
+ /**
87
+ * Deactivate a license
88
+ *
89
+ * @return boolean
90
+ */
91
+ public function deactivate( $license_key ) {
92
+ $route = 'public/license/' . $this->client->hash . '/deactivate';
93
+
94
+ return $this->send_request( $license_key, $route );
95
+ }
96
+
97
+ /**
98
+ * Send common request
99
+ *
100
+ * @param $license_key
101
+ * @param $route
102
+ *
103
+ * @return array
104
+ */
105
+ protected function send_request( $license_key, $route ) {
106
+ $params = array(
107
+ 'license_key' => $license_key,
108
+ 'url' => esc_url( home_url() ),
109
+ );
110
+
111
+ $response = $this->client->send_request( $params, $route, true );
112
+
113
+ if ( is_wp_error( $response ) ) {
114
+ return array(
115
+ 'success' => false,
116
+ 'error' => $response->get_error_message()
117
+ );
118
+ }
119
+
120
+ $response = json_decode( wp_remote_retrieve_body( $response ), true );
121
+
122
+ if ( empty( $response ) || isset( $response['exception'] )) {
123
+ return array(
124
+ 'success' => false,
125
+ 'error' => 'Unknown error occurred, Please try again.'
126
+ );
127
+ }
128
+
129
+ if ( isset( $response['errors'] ) && isset( $response['errors']['license_key'] ) ) {
130
+ $response = array(
131
+ 'success' => false,
132
+ 'error' => $response['errors']['license_key'][0]
133
+ );
134
+ }
135
+
136
+ return $response;
137
+ }
138
+
139
+ /**
140
+ * Add settings page for license
141
+ *
142
+ * @param array $args
143
+ *
144
+ * @return void
145
+ */
146
+ public function add_settings_page( $args = array() ) {
147
+ $defaults = array(
148
+ 'type' => 'menu', // Can be: menu, options, submenu
149
+ 'page_title' => 'Manage License',
150
+ 'menu_title' => 'Manage License',
151
+ 'capability' => 'manage_options',
152
+ 'menu_slug' => 'manage-license',
153
+ 'icon_url' => '',
154
+ 'position' => null,
155
+ 'parent_slug' => '',
156
+ );
157
+
158
+ $this->menu_args = wp_parse_args( $args, $defaults );
159
+
160
+ add_action( 'admin_menu', array( $this, 'admin_menu' ) );
161
+
162
+ add_action( $this->client->slug . '_license_check_event', array( $this, 'check_license_status' ) );
163
+ }
164
+
165
+ /**
166
+ * Admin Menu hook
167
+ *
168
+ * @return void
169
+ */
170
+ public function admin_menu() {
171
+ $add_page = 'add_' . $this->menu_args['type'] . '_page';
172
+
173
+ switch ( $this->menu_args['type'] ) {
174
+ case 'menu':
175
+ $add_page(
176
+ $this->menu_args['page_title'],
177
+ $this->menu_args['menu_title'],
178
+ $this->menu_args['capability'],
179
+ $this->menu_args['menu_slug'],
180
+ array( $this, 'menu_output' ),
181
+ $this->menu_args['icon_url'],
182
+ $this->menu_args['position']
183
+ );
184
+ break;
185
+
186
+ case 'submenu':
187
+ $add_page(
188
+ $this->menu_args['parent_slug'],
189
+ $this->menu_args['page_title'],
190
+ $this->menu_args['menu_title'],
191
+ $this->menu_args['capability'],
192
+ $this->menu_args['menu_slug'],
193
+ array( $this, 'menu_output' )
194
+ );
195
+ break;
196
+
197
+ case 'options':
198
+ $add_page(
199
+ $this->menu_args['page_title'],
200
+ $this->menu_args['menu_title'],
201
+ $this->menu_args['capability'],
202
+ $this->menu_args['menu_slug'],
203
+ array( $this, 'menu_output' )
204
+ );
205
+ break;
206
+ }
207
+ }
208
+
209
+ /**
210
+ * License menu output
211
+ */
212
+ public function menu_output() {
213
+
214
+ if ( isset( $_POST['submit'] ) ) {
215
+ $this->license_page_form( $_POST );
216
+ }
217
+
218
+ $license = get_option( $this->option_key, null );
219
+ $action = ( $license && isset( $license['status'] ) && 'activate' == $license['status'] ) ? 'Deactive' : 'Active';
220
+ ?>
221
+
222
+ <div class="wrap">
223
+ <h1><?php echo $this->menu_args['menu_title']; ?></h1>
224
+
225
+ <?php if ( ! empty( $this->error ) ) : ?>
226
+ <div class="notice notice-error is-dismissible" style="max-width: 745px;">
227
+ <p><?php echo $this->error; ?></p>
228
+ </div>
229
+ <?php endif; ?>
230
+
231
+ <?php if ( ! empty( $this->success ) ) : ?>
232
+ <div class="notice notice-success is-dismissible" style="max-width: 745px;">
233
+ <p><?php echo $this->success; ?></p>
234
+ </div>
235
+ <?php endif; ?>
236
+
237
+ <br />
238
+
239
+ <div class="widget open" style="max-width: 800px; margin: 0;">
240
+ <div class="widget-top">
241
+ <div class="widget-title"><h3>License Settings</h3></div>
242
+ </div>
243
+ <div class="widget-inside" style="display: block; padding: 5px 15px;">
244
+ <form method="post" action="<?php echo home_url( $_SERVER['REQUEST_URI'] ); ?>" novalidate="novalidate">
245
+ <table class="form-table">
246
+ <tbody>
247
+ <tr>
248
+ <th scope="row">
249
+ <label>License key</label>
250
+ </th>
251
+ <td>
252
+ <input type="text" class="regular-text code" value="<?php echo $license['key']; ?>"
253
+ placeholder="Enter your license key" name="license_key"
254
+ <?php echo ( 'Deactive' == $action ) ? 'readonly="readonly"' : ''; ?> />
255
+ </td>
256
+ </tr>
257
+ </tbody>
258
+ </table>
259
+ <input type="hidden" name="_action" value="<?php echo $action; ?>">
260
+ <p>
261
+ <button type="submit" name="submit" class="button button-primary"><?php echo $action; ?></button>
262
+ </p>
263
+ </form>
264
+ </div>
265
+ </div> <!-- /.widget -->
266
+ </div>
267
+
268
+ <?php
269
+ }
270
+
271
+ /**
272
+ * License form submit
273
+ */
274
+ private function license_page_form( $form ) {
275
+ if ( $form['_action'] == 'Active' ) {
276
+ $response = $this->activate( $form['license_key'] );
277
+
278
+ if ( ! empty( $response['success'] ) ) {
279
+ $data = array(
280
+ 'key' => $form['license_key'],
281
+ 'status' => 'activate',
282
+ );
283
+ update_option( $this->option_key, $data, false );
284
+ $this->success = 'License activated successfully.';
285
+ }
286
+ } else if ( $form['_action'] == 'Deactive' ) {
287
+ $response = $this->deactivate( $form['license_key'] );
288
+
289
+ if ( ! empty( $response['success'] ) ) {
290
+ $this->success = 'License deactivated successfully.';
291
+ }
292
+
293
+ $data = array(
294
+ 'key' => '',
295
+ 'status' => 'deactivate',
296
+ );
297
+
298
+ update_option( $this->option_key, $data, false );
299
+ }
300
+
301
+ if ( isset( $response['error'] ) && ! empty( $response['error'] ) ) {
302
+ $this->error = $response['error'];
303
+ }
304
+
305
+ // var_export( $response );
306
+ }
307
+
308
+ /**
309
+ * Check license status on schedule
310
+ */
311
+ public function check_license_status() {
312
+ $license = get_option( $this->option_key, null );
313
+
314
+ if ( isset( $license['key'] ) && ! empty( $license['key'] ) ) {
315
+ $response = $this->check( $license['key'] );
316
+
317
+ if ( isset( $response['success'] ) && $response['success'] ) {
318
+ $license['status'] = 'activate';
319
+ } else {
320
+ $license['status'] = 'deactivate';
321
+ }
322
+
323
+ update_option( $this->option_key, $license, false );
324
+ }
325
+ }
326
+
327
+ /**
328
+ * Check this is a valid license
329
+ */
330
+ public function is_valid() {
331
+ if ( null !== $this->is_valid_licnese ) {
332
+ return $this->is_valid_licnese;
333
+ }
334
+
335
+ $license = get_option( $this->option_key, null );
336
+ if ( ! empty( $license['key'] ) && isset( $license['status'] ) && $license['status'] == 'activate' ) {
337
+ $this->is_valid_licnese = true;
338
+ } else {
339
+ $this->is_valid_licnese = false;
340
+ }
341
+
342
+ return $this->is_valid_licnese;
343
+ }
344
+
345
+ }
vendor/appsero/src/Updater.php ADDED
@@ -0,0 +1,247 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Appsero;
3
+
4
+ /**
5
+ * Appsero Updater
6
+ *
7
+ * This class will show new updates project
8
+ */
9
+ class Updater {
10
+
11
+ /**
12
+ * Appsero\Client
13
+ *
14
+ * @var object
15
+ */
16
+ protected $client;
17
+
18
+ /**
19
+ * Initialize the class
20
+ *
21
+ * @param Appsero\Client
22
+ */
23
+ public function __construct( Client $client ) {
24
+
25
+ $this->client = $client;
26
+ $this->cache_key = 'appsero_' . md5( $this->client->slug ) . '_version_info';
27
+
28
+ // Run hooks.
29
+ if ( $this->client->type == 'plugin' ) {
30
+ $this->run_plugin_hooks();
31
+ } elseif ( $this->client->type == 'theme' ) {
32
+ $this->run_theme_hooks();
33
+ }
34
+ }
35
+
36
+ /**
37
+ * Set up WordPress filter to hooks to get update.
38
+ *
39
+ * @return void
40
+ */
41
+ public function run_plugin_hooks() {
42
+ add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_plugin_update' ) );
43
+ add_filter( 'plugins_api', array( $this, 'plugins_api_filter' ), 10, 3 );
44
+ }
45
+
46
+ /**
47
+ * Set up WordPress filter to hooks to get update.
48
+ *
49
+ * @return void
50
+ */
51
+ public function run_theme_hooks() {
52
+ add_filter( 'pre_set_site_transient_update_themes', array( $this, 'check_theme_update' ) );
53
+ }
54
+
55
+ /**
56
+ * Check for Update for this specific project
57
+ */
58
+ public function check_plugin_update( $transient_data ) {
59
+ global $pagenow;
60
+
61
+ if ( ! is_object( $transient_data ) ) {
62
+ $transient_data = new \stdClass;
63
+ }
64
+
65
+ if ( 'plugins.php' == $pagenow && is_multisite() ) {
66
+ return $transient_data;
67
+ }
68
+
69
+ if ( ! empty( $transient_data->response ) && ! empty( $transient_data->response[ $this->client->basename ] ) ) {
70
+ return $transient_data;
71
+ }
72
+
73
+ $version_info = $this->get_cached_version_info();
74
+
75
+ if ( false === $version_info ) {
76
+ $version_info = $this->get_project_latest_version();
77
+ $this->set_cached_version_info( $version_info );
78
+ }
79
+
80
+ if ( false !== $version_info && is_object( $version_info ) && isset( $version_info->new_version ) ) {
81
+
82
+ if ( version_compare( $this->client->project_version, $version_info->new_version, '<' ) ) {
83
+ unset( $version_info->sections );
84
+ $transient_data->response[ $this->client->basename ] = $version_info;
85
+ }
86
+
87
+ $transient_data->last_checked = time();
88
+ $transient_data->checked[ $this->client->basename ] = $this->client->project_version;
89
+ }
90
+
91
+ return $transient_data;
92
+ }
93
+
94
+ /**
95
+ * Get version info from database
96
+ *
97
+ * @return Object or Boolean
98
+ */
99
+ private function get_cached_version_info() {
100
+
101
+ $value = get_transient( $this->cache_key );
102
+
103
+ if( ! $value && ! isset( $value->name ) ) {
104
+ return false; // Cache is expired
105
+ }
106
+
107
+ // We need to turn the icons into an array
108
+ if ( isset( $value->icons ) ) {
109
+ $value->icons = (array) $value->icons;
110
+ }
111
+
112
+ // We need to turn the banners into an array
113
+ if ( isset( $value->banners ) ) {
114
+ $value->banners = (array) $value->banners;
115
+ }
116
+
117
+ if ( isset( $value->sections ) ) {
118
+ $value->sections = (array) $value->sections;
119
+ }
120
+
121
+ return $value;
122
+ }
123
+
124
+ /**
125
+ * Set version info to database
126
+ */
127
+ private function set_cached_version_info( $value ) {
128
+ if ( ! $value ) {
129
+ return;
130
+ }
131
+
132
+ set_transient( $this->cache_key, $value, 3 * HOUR_IN_SECONDS );
133
+ }
134
+
135
+ /**
136
+ * Get plugin info from Appsero
137
+ */
138
+ private function get_project_latest_version() {
139
+
140
+ $license_option_key = 'appsero_' . md5( $this->client->slug ) . '_manage_license';
141
+ $license = get_option( $license_option_key, null );
142
+
143
+ $params = array(
144
+ 'version' => $this->client->project_version,
145
+ 'name' => $this->client->name,
146
+ 'slug' => $this->client->slug,
147
+ 'basename' => $this->client->basename,
148
+ 'license_key' => ! empty( $license ) && isset( $license['key'] ) ? $license['key'] : '',
149
+ );
150
+
151
+ $route = 'update/' . $this->client->hash . '/check';
152
+
153
+ $response = $this->client->send_request( $params, $route, true );
154
+
155
+ if ( is_wp_error( $response ) ) {
156
+ return false;
157
+ }
158
+
159
+ $response = json_decode( wp_remote_retrieve_body( $response ) );
160
+
161
+ if ( ! isset( $response->slug ) ) {
162
+ return false;
163
+ }
164
+
165
+ if ( isset( $response->icons ) ) {
166
+ $response->icons = (array) $response->icons;
167
+ }
168
+
169
+ if ( isset( $response->banners ) ) {
170
+ $response->banners = (array) $response->banners;
171
+ }
172
+
173
+ if ( isset( $response->sections ) ) {
174
+ $response->sections = (array) $response->sections;
175
+ }
176
+
177
+ return $response;
178
+ }
179
+
180
+ /**
181
+ * Updates information on the "View version x.x details" page with custom data.
182
+ *
183
+ * @param mixed $data
184
+ * @param string $action
185
+ * @param object $args
186
+ *
187
+ * @return object $data
188
+ */
189
+ public function plugins_api_filter( $data, $action = '', $args = null ) {
190
+
191
+ if ( $action != 'plugin_information' ) {
192
+ return $data;
193
+ }
194
+
195
+ if ( ! isset( $args->slug ) || ( $args->slug != $this->client->slug ) ) {
196
+ return $data;
197
+ }
198
+
199
+ $version_info = $this->get_cached_version_info();
200
+
201
+ if ( false === $version_info ) {
202
+ $version_info = $this->get_project_latest_version();
203
+ $this->set_cached_version_info( $version_info );
204
+ }
205
+
206
+ return $version_info;
207
+ }
208
+
209
+ /**
210
+ * Check theme upate
211
+ */
212
+ public function check_theme_update( $transient_data ) {
213
+ global $pagenow;
214
+
215
+ if ( ! is_object( $transient_data ) ) {
216
+ $transient_data = new \stdClass;
217
+ }
218
+
219
+ if ( 'themes.php' == $pagenow && is_multisite() ) {
220
+ return $transient_data;
221
+ }
222
+
223
+ if ( ! empty( $transient_data->response ) && ! empty( $transient_data->response[ $this->client->slug ] ) ) {
224
+ return $transient_data;
225
+ }
226
+
227
+ $version_info = $this->get_cached_version_info();
228
+
229
+ if ( false === $version_info ) {
230
+ $version_info = $this->get_project_latest_version();
231
+ $this->set_cached_version_info( $version_info );
232
+ }
233
+
234
+ if ( false !== $version_info && is_object( $version_info ) && isset( $version_info->new_version ) ) {
235
+
236
+ if ( version_compare( $this->client->project_version, $version_info->new_version, '<' ) ) {
237
+ $transient_data->response[ $this->client->slug ] = (array) $version_info;
238
+ }
239
+
240
+ $transient_data->last_checked = time();
241
+ $transient_data->checked[ $this->client->slug ] = $this->client->project_version;
242
+ }
243
+
244
+ return $transient_data;
245
+ }
246
+
247
+ }
widgets/carousel/widget.php ADDED
@@ -0,0 +1,767 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Carousel widget class
4
+ *
5
+ * @package Happy_Addons
6
+ */
7
+ namespace Happy_Addons\Elementor\Widget;
8
+
9
+ use Elementor\Group_Control_Background;
10
+ use Elementor\Repeater;
11
+ use Elementor\Control_Media;
12
+ use Elementor\Controls_Manager;
13
+ use Elementor\Group_Control_Border;
14
+ use Elementor\Group_Control_Box_Shadow;
15
+ use Elementor\Group_Control_Image_Size;
16
+ use Elementor\Group_Control_Typography;
17
+ use Elementor\Scheme_Typography;
18
+ use Elementor\Utils;
19
+
20
+ defined( 'ABSPATH' ) || die();
21
+
22
+ class Carousel extends Base {
23
+
24
+ /**
25
+ * Get widget title.
26
+ *
27
+ * @since 1.0.0
28
+ * @access public
29
+ *
30
+ * @return string Widget title.
31
+ */
32
+ public function get_title() {
33
+ return __( 'Carousel', 'happy-elementor-addons' );
34
+ }
35
+
36
+ /**
37
+ * Get widget icon.
38
+ *
39
+ * @since 1.0.0
40
+ * @access public
41
+ *
42
+ * @return string Widget icon.
43
+ */
44
+ public function get_icon() {
45
+ return 'hm hm-carousal';
46
+ }
47
+
48
+ public function get_keywords() {
49
+ return [ 'slider', 'image', 'gallery', 'carousel' ];
50
+ }
51
+
52
+ protected function register_content_controls() {
53
+ $this->start_controls_section(
54
+ '_section_slides',
55
+ [
56
+ 'label' => __( 'Slides', 'happy-elementor-addons' ),
57
+ 'tab' => Controls_Manager::TAB_CONTENT,
58
+ ]
59
+ );
60
+
61
+ $repeater = new Repeater();
62
+
63
+ $repeater->add_control(
64
+ 'image',
65
+ [
66
+ 'type' => Controls_Manager::MEDIA,
67
+ 'label' => __( 'Image', 'happy-elementor-addons' ),
68
+ 'default' => [
69
+ 'url' => Utils::get_placeholder_image_src(),
70
+ ],
71
+ ]
72
+ );
73
+
74
+ $repeater->add_control(
75
+ 'title',
76
+ [
77
+ 'type' => Controls_Manager::TEXT,
78
+ 'label_block' => true,
79
+ 'label' => __( 'Title & Subtitle', 'happy-elementor-addons' ),
80
+ 'placeholder' => __( 'Type title here', 'happy-elementor-addons' )
81
+ ]
82
+ );
83
+
84
+ $repeater->add_control(
85
+ 'subtitle',
86
+ [
87
+ 'type' => Controls_Manager::TEXTAREA,
88
+ 'label_block' => true,
89
+ 'show_label' => false,
90
+ 'placeholder' => __( 'Type subtitle here', 'happy-elementor-addons' )
91
+ ]
92
+ );
93
+
94
+ $this->add_control(
95
+ 'slides',
96
+ [
97
+ 'show_label' => false,
98
+ 'type' => Controls_Manager::REPEATER,
99
+ 'fields' => $repeater->get_controls(),
100
+ 'title_field' => '<# print(title || "Carousel Item"); #>',
101
+ 'default' => [
102
+ [
103
+ 'image' => [
104
+ 'url' => Utils::get_placeholder_image_src(),
105
+ ],
106
+ ],
107
+ [
108
+ 'image' => [
109
+ 'url' => Utils::get_placeholder_image_src(),
110
+ ],
111
+ ],
112
+ [
113
+ 'image' => [
114
+ 'url' => Utils::get_placeholder_image_src(),
115
+ ],
116
+ ],
117
+ [
118
+ 'image' => [
119
+ 'url' => Utils::get_placeholder_image_src(),
120
+ ],
121
+ ],
122
+ [
123
+ 'image' => [
124
+ 'url' => Utils::get_placeholder_image_src(),
125
+ ],
126
+ ]
127
+ ]
128
+ ]
129
+ );
130
+
131
+ $this->add_group_control(
132
+ Group_Control_Image_Size::get_type(),
133
+ [
134
+ 'name' => 'thumbnail',
135
+ 'default' => 'medium_large',
136
+ 'separator' => 'before',
137
+ 'exclude' => [
138
+ 'custom'
139
+ ]
140
+ ]
141
+ );
142
+
143
+ $this->end_controls_section();
144
+
145
+ $this->start_controls_section(
146
+ '_section_settings',
147
+ [
148
+ 'label' => __( 'Settings', 'happy-elementor-addons' ),
149
+ 'tab' => Controls_Manager::TAB_CONTENT,
150
+ ]
151
+ );
152
+
153
+ $this->add_control(
154
+ 'animation_speed',
155
+ [
156
+ 'label' => __( 'Animation Speed', 'happy-elementor-addons' ),
157
+ 'type' => Controls_Manager::NUMBER,
158
+ 'min' => 100,
159
+ 'step' => 10,
160
+ 'max' => 10000,
161
+ 'default' => 300,
162
+ 'description' => __( 'Slide speed in milliseconds', 'happy-elementor-addons' ),
163
+ 'frontend_available' => true,
164
+ ]
165
+ );
166
+
167
+ $this->add_control(
168
+ 'autoplay',
169
+ [
170
+ 'label' => __( 'Autoplay?', 'happy-elementor-addons' ),
171
+ 'type' => Controls_Manager::SWITCHER,
172
+ 'label_on' => __( 'Yes', 'happy-elementor-addons' ),
173
+ 'label_off' => __( 'No', 'happy-elementor-addons' ),
174
+ 'return_value' => 'yes',
175
+ 'default' => 'yes',
176
+ 'frontend_available' => true,
177
+ ]
178
+ );
179
+
180
+ $this->add_control(
181
+ 'autoplay_speed',
182
+ [
183
+ 'label' => __( 'Autoplay Speed', 'happy-elementor-addons' ),
184
+ 'type' => Controls_Manager::NUMBER,
185
+ 'min' => 100,
186
+ 'step' => 100,
187
+ 'max' => 10000,
188
+ 'default' => 3000,
189
+ 'description' => __( 'Autoplay speed in milliseconds', 'happy-elementor-addons' ),
190
+ 'condition' => [
191
+ 'autoplay' => 'yes'
192
+ ],
193
+ 'frontend_available' => true,
194
+ ]
195
+ );
196
+
197
+ $this->add_control(
198
+ 'loop',
199
+ [
200
+ 'label' => __( 'Infinite Loop?', 'happy-elementor-addons' ),
201
+ 'type' => Controls_Manager::SWITCHER,
202
+ 'label_on' => __( 'Yes', 'happy-elementor-addons' ),
203
+ 'label_off' => __( 'No', 'happy-elementor-addons' ),
204
+ 'return_value' => 'yes',
205
+ 'default' => 'yes',
206
+ 'frontend_available' => true,
207
+ ]
208
+ );
209
+
210
+ $this->add_control(
211
+ 'center',
212
+ [
213
+ 'label' => __( 'Center Mode?', 'happy-elementor-addons' ),
214
+ 'type' => Controls_Manager::SWITCHER,
215
+ 'label_on' => __( 'Yes', 'happy-elementor-addons' ),
216
+ 'label_off' => __( 'No', 'happy-elementor-addons' ),
217
+ 'return_value' => 'yes',
218
+ 'description' => __( 'Best works with odd number of slides (Slides To Show) and loop (Infinite Loop)', 'happy-elementor-addons' ),
219
+ 'frontend_available' => true,
220
+ ]
221
+ );
222
+
223
+ $this->add_control(
224
+ 'vertical',
225
+ [
226
+ 'label' => __( 'Vertical Mode?', 'happy-elementor-addons' ),
227
+ 'type' => Controls_Manager::SWITCHER,
228
+ 'label_on' => __( 'Yes', 'happy-elementor-addons' ),
229
+ 'label_off' => __( 'No', 'happy-elementor-addons' ),
230
+ 'return_value' => 'yes',
231
+ 'frontend_available' => true,
232
+ ]
233
+ );
234
+
235
+ $this->add_control(
236
+ 'navigation',
237
+ [
238
+ 'label' => __( 'Navigation', 'happy-elementor-addons' ),
239
+ 'type' => Controls_Manager::SELECT,
240
+ 'options' => [
241
+ 'none' => __( 'None', 'happy-elementor-addons' ),
242
+ 'arrow' => __( 'Arrow', 'happy-elementor-addons' ),
243
+ 'dots' => __( 'Dots', 'happy-elementor-addons' ),
244
+ 'both' => __( 'Arrow & Dots', 'happy-elementor-addons' ),
245
+ ],
246
+ 'default' => 'arrow',
247
+ 'frontend_available' => true,
248
+ ]
249
+ );
250
+
251
+ $this->add_responsive_control(
252
+ 'slides_to_show',
253
+ [
254
+ 'label' => __( 'Slides To Show', 'happy-elementor-addons' ),
255
+ 'type' => Controls_Manager::SELECT,
256
+ 'options' => [
257
+ 1 => __( '1 Slide', 'happy-elementor-addons' ),
258
+ 2 => __( '2 Slides', 'happy-elementor-addons' ),
259
+ 3 => __( '3 Slides', 'happy-elementor-addons' ),
260
+ 4 => __( '4 Slides', 'happy-elementor-addons' ),
261
+ 5 => __( '5 Slides', 'happy-elementor-addons' ),
262
+ 6 => __( '6 Slides', 'happy-elementor-addons' ),
263
+ ],
264
+ 'desktop_default' => 4,
265
+ 'tablet_default' => 3,
266
+ 'mobile_default' => 2,
267
+ 'frontend_available' => true,
268
+ ]
269
+ );
270
+
271
+ $this->end_controls_section();
272
+ }
273
+
274
+ protected function register_style_controls() {
275
+ $this->start_controls_section(
276
+ '_section_style_item',
277
+ [
278
+ 'label' => __( 'Carousel Item', 'happy-elementor-addons' ),
279
+ 'tab' => Controls_Manager::TAB_STYLE,
280
+ ]
281
+ );
282
+
283
+ $this->add_responsive_control(
284
+ 'item_spacing',
285
+ [
286
+ 'label' => __( 'Slide Spacing (px)', 'happy-elementor-addons' ),
287
+ 'type' => Controls_Manager::SLIDER,
288
+ 'size_units' => ['px'],
289
+ 'selectors' => [
290
+ '{{WRAPPER}} .slick-slider:not(.slick-vertical) .slick-slide' => 'padding-right: {{SIZE}}{{UNIT}}; padding-left: {{SIZE}}{{UNIT}};',
291
+ '{{WRAPPER}} .slick-slider.slick-vertical .slick-slide' => 'padding-top: {{SIZE}}{{UNIT}}; padding-bottom: {{SIZE}}{{UNIT}};',
292
+ ],
293
+ ]
294
+ );
295
+
296
+ $this->add_responsive_control(
297
+ 'item_border_radius',
298
+ [
299
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
300
+ 'type' => Controls_Manager::DIMENSIONS,
301
+ 'size_units' => [ 'px', '%' ],
302
+ 'selectors' => [
303
+ '{{WRAPPER}} .ha-slick-item' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}; overflow: hidden;',
304
+ ],
305
+ ]
306
+ );
307
+
308
+ $this->end_controls_section();
309
+
310
+ $this->start_controls_section(
311
+ '_section_style_content',
312
+ [
313
+ 'label' => __( 'Slide Content', 'happy-elementor-addons' ),
314
+ 'tab' => Controls_Manager::TAB_STYLE,
315
+ ]
316
+ );
317
+
318
+ $this->add_responsive_control(
319
+ 'content_padding',
320
+ [
321
+ 'label' => __( 'Content Padding', 'happy-elementor-addons' ),
322
+ 'type' => Controls_Manager::DIMENSIONS,
323
+ 'size_units' => [ 'px', 'em', '%' ],
324
+ 'selectors' => [
325
+ '{{WRAPPER}} .ha-slick-content' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
326
+ ],
327
+ ]
328
+ );
329
+
330
+ $this->add_group_control(
331
+ Group_Control_Background::get_type(),
332
+ [
333
+ 'name' => 'content_background',
334
+ 'selector' => '{{WRAPPER}} .ha-slick-content',
335
+ 'exclude' => [
336
+ 'image'
337
+ ]
338
+ ]
339
+ );
340
+
341
+ $this->add_control(
342
+ '_heading_title',
343
+ [
344
+ 'type' => Controls_Manager::HEADING,
345
+ 'label' => __( 'Title', 'happy-elementor-addons' ),
346
+ 'separator' => 'before'
347
+ ]
348
+ );
349
+
350
+ $this->add_responsive_control(
351
+ 'title_spacing',
352
+ [
353
+ 'label' => __( 'Bottom Spacing', 'happy-elementor-addons' ),
354
+ 'type' => Controls_Manager::SLIDER,
355
+ 'size_units' => ['px'],
356
+ 'selectors' => [
357
+ '{{WRAPPER}} .ha-slick-title' => 'margin-bottom: {{SIZE}}{{UNIT}};',
358
+ ],
359
+ ]
360
+ );
361
+
362
+ $this->add_control(
363
+ 'title_color',
364
+ [
365
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
366
+ 'type' => Controls_Manager::COLOR,
367
+ 'selectors' => [
368
+ '{{WRAPPER}} .ha-slick-title' => 'color: {{VALUE}}',
369
+ ],
370
+ ]
371
+ );
372
+
373
+ $this->add_group_control(
374
+ Group_Control_Typography::get_type(),
375
+ [
376
+ 'name' => 'title',
377
+ 'label' => __( 'Typography', 'happy-elementor-addons' ),
378
+ 'selector' => '{{WRAPPER}} .ha-slick-title',
379
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_2,
380
+ ]
381
+ );
382
+
383
+ $this->add_control(
384
+ '_heading_subtitle',
385
+ [
386
+ 'type' => Controls_Manager::HEADING,
387
+ 'label' => __( 'Subtitle', 'happy-elementor-addons' ),
388
+ 'separator' => 'before'
389
+ ]
390
+ );
391
+
392
+ $this->add_responsive_control(
393
+ 'subtitle_spacing',
394
+ [
395
+ 'label' => __( 'Bottom Spacing', 'happy-elementor-addons' ),
396
+ 'type' => Controls_Manager::SLIDER,
397
+ 'size_units' => ['px'],
398
+ 'selectors' => [
399
+ '{{WRAPPER}} .ha-slick-subtitle' => 'margin-bottom: {{SIZE}}{{UNIT}};',
400
+ ],
401
+ ]
402
+ );
403
+
404
+ $this->add_control(
405
+ 'subtitle_color',
406
+ [
407
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
408
+ 'type' => Controls_Manager::COLOR,
409
+ 'selectors' => [
410
+ '{{WRAPPER}} .ha-slick-subtitle' => 'color: {{VALUE}}',
411
+ ],
412
+ ]
413
+ );
414
+
415
+ $this->add_group_control(
416
+ Group_Control_Typography::get_type(),
417
+ [
418
+ 'name' => 'subtitle',
419
+ 'label' => __( 'Typography', 'happy-elementor-addons' ),
420
+ 'selector' => '{{WRAPPER}} .ha-slick-subtitle',
421
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3,
422
+ ]
423
+ );
424
+
425
+ $this->end_controls_section();
426
+
427
+ $this->start_controls_section(
428
+ '_section_style_arrow',
429
+ [
430
+ 'label' => __( 'Navigation - Arrow', 'happy-elementor-addons' ),
431
+ 'tab' => Controls_Manager::TAB_STYLE,
432
+ ]
433
+ );
434
+
435
+ $this->add_control(
436
+ 'arrow_position_toggle',
437
+ [
438
+ 'label' => __( 'Position', 'happy-elementor-addons' ),
439
+ 'type' => Controls_Manager::POPOVER_TOGGLE,
440
+ 'label_off' => __( 'None', 'happy-elementor-addons' ),
441
+ 'label_on' => __( 'Custom', 'happy-elementor-addons' ),
442
+ 'return_value' => 'yes',
443
+ ]
444
+ );
445
+
446
+ $this->start_popover();
447
+
448
+ $this->add_responsive_control(
449
+ 'arrow_position_y',
450
+ [
451
+ 'label' => __( 'Vertical', 'happy-elementor-addons' ),
452
+ 'type' => Controls_Manager::SLIDER,
453
+ 'size_units' => ['px'],
454
+ 'condition' => [
455
+ 'arrow_position_toggle' => 'yes'
456
+ ],
457
+ 'range' => [
458
+ 'px' => [
459
+ 'min' => 0,
460
+ 'max' => 500,
461
+ ],
462
+ ],
463
+ 'selectors' => [
464
+ '{{WRAPPER}} .slick-prev, {{WRAPPER}} .slick-next' => 'top: {{SIZE}}{{UNIT}};',
465
+ ],
466
+ ]
467
+ );
468
+
469
+ $this->add_responsive_control(
470
+ 'arrow_position_x',
471
+ [
472
+ 'label' => __( 'Horizontal', 'happy-elementor-addons' ),
473
+ 'type' => Controls_Manager::SLIDER,
474
+ 'size_units' => ['px'],
475
+ 'condition' => [
476
+ 'arrow_position_toggle' => 'yes'
477
+ ],
478
+ 'range' => [
479
+ 'px' => [
480
+ 'min' => -100,
481
+ 'max' => 250,
482
+ ],
483
+ ],
484
+ 'selectors' => [
485
+ '{{WRAPPER}} .slick-prev' => 'left: {{SIZE}}{{UNIT}};',
486
+ '{{WRAPPER}} .slick-next' => 'right: {{SIZE}}{{UNIT}};',
487
+ ],
488
+ ]
489
+ );
490
+
491
+ $this->end_popover();
492
+
493
+ $this->add_group_control(
494
+ Group_Control_Border::get_type(),
495
+ [
496
+ 'name' => 'arrow_border',
497
+ 'selector' => '{{WRAPPER}} .slick-prev, {{WRAPPER}} .slick-next',
498
+ ]
499
+ );
500
+
501
+ $this->add_responsive_control(
502
+ 'arrow_border_radius',
503
+ [
504
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
505
+ 'type' => Controls_Manager::DIMENSIONS,
506
+ 'size_units' => [ 'px', '%' ],
507
+ 'selectors' => [
508
+ '{{WRAPPER}} .slick-prev, {{WRAPPER}} .slick-next' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}; overflow: hidden;',
509
+ ],
510
+ ]
511
+ );
512
+
513
+ $this->start_controls_tabs( '_tabs_arrow' );
514
+
515
+ $this->start_controls_tab(
516
+ '_tab_arrow_normal',
517
+ [
518
+ 'label' => __( 'Normal', 'happy-elementor-addons' ),
519
+ ]
520
+ );
521
+
522
+ $this->add_control(
523
+ 'arrow_color',
524
+ [
525
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
526
+ 'type' => Controls_Manager::COLOR,
527
+ 'default' => '',
528
+ 'selectors' => [
529
+ '{{WRAPPER}} .slick-prev, {{WRAPPER}} .slick-next' => 'color: {{VALUE}};',
530
+ ],
531
+ ]
532
+ );
533
+
534
+ $this->add_control(
535
+ 'arrow_bg_color',
536
+ [
537
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
538
+ 'type' => Controls_Manager::COLOR,
539
+ 'selectors' => [
540
+ '{{WRAPPER}} .slick-prev, {{WRAPPER}} .slick-next' => 'background-color: {{VALUE}};',
541
+ ],
542
+ ]
543
+ );
544
+
545
+ $this->end_controls_tab();
546
+
547
+ $this->start_controls_tab(
548
+ '_tab_arrow_hover',
549
+ [
550
+ 'label' => __( 'Hover', 'happy-elementor-addons' ),
551
+ ]
552
+ );
553
+
554
+ $this->add_control(
555
+ 'arrow_hover_color',
556
+ [
557
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
558
+ 'type' => Controls_Manager::COLOR,
559
+ 'selectors' => [
560
+ '{{WRAPPER}} .slick-prev:hover, {{WRAPPER}} .slick-next:hover' => 'color: {{VALUE}};',
561
+ ],
562
+ ]
563
+ );
564
+
565
+ $this->add_control(
566
+ 'arrow_hover_bg_color',
567
+ [
568
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
569
+ 'type' => Controls_Manager::COLOR,
570
+ 'selectors' => [
571
+ '{{WRAPPER}} .slick-prev:hover, {{WRAPPER}} .slick-next:hover' => 'background-color: {{VALUE}};',
572
+ ],
573
+ ]
574
+ );
575
+
576
+ $this->add_control(
577
+ 'arrow_hover_border_color',
578
+ [
579
+ 'label' => __( 'Border Color', 'happy-elementor-addons' ),
580
+ 'type' => Controls_Manager::COLOR,
581
+ 'condition' => [
582
+ 'arrow_border_border!' => '',
583
+ ],
584
+ 'selectors' => [
585
+ '{{WRAPPER}} .slick-prev:hover, {{WRAPPER}} .slick-next:hover' => 'border-color: {{VALUE}};',
586
+ ],
587
+ ]
588
+ );
589
+
590
+ $this->end_controls_tab();
591
+ $this->end_controls_tabs();
592
+
593
+ $this->end_controls_section();
594
+
595
+ $this->start_controls_section(
596
+ '_section_style_dots',
597
+ [
598
+ 'label' => __( 'Navigation - Dots', 'happy-elementor-addons' ),
599
+ 'tab' => Controls_Manager::TAB_STYLE,
600
+ ]
601
+ );
602
+
603
+ $this->add_responsive_control(
604
+ 'dots_nav_position_y',
605
+ [
606
+ 'label' => __( 'Vertical Position', 'happy-elementor-addons' ),
607
+ 'type' => Controls_Manager::SLIDER,
608
+ 'size_units' => ['px'],
609
+ 'range' => [
610
+ 'px' => [
611
+ 'min' => -100,
612
+ 'max' => 500,
613
+ ],
614
+ ],
615
+ 'selectors' => [
616
+ '{{WRAPPER}} .slick-dots' => 'bottom: {{SIZE}}{{UNIT}};',
617
+ ],
618
+ ]
619
+ );
620
+
621
+ $this->add_responsive_control(
622
+ 'dots_nav_spacing',
623
+ [
624
+ 'label' => __( 'Spacing', 'happy-elementor-addons' ),
625
+ 'type' => Controls_Manager::SLIDER,
626
+ 'size_units' => ['px'],
627
+ 'selectors' => [
628
+ '{{WRAPPER}} .slick-dots li' => 'margin-right: calc({{SIZE}}{{UNIT}} / 2); margin-left: calc({{SIZE}}{{UNIT}} / 2);',
629
+ ],
630
+ ]
631
+ );
632
+
633
+ $this->add_responsive_control(
634
+ 'dots_nav_align',
635
+ [
636
+ 'label' => __( 'Alignment', 'happy-elementor-addons' ),
637
+ 'type' => Controls_Manager::CHOOSE,
638
+ 'label_block' => false,
639
+ 'options' => [
640
+ 'left' => [
641
+ 'title' => __( 'Left', 'happy-elementor-addons' ),
642
+ 'icon' => 'eicon-h-align-left',
643
+ ],
644
+ 'center' => [
645
+ 'title' => __( 'Center', 'happy-elementor-addons' ),
646
+ 'icon' => 'eicon-h-align-center',
647
+ ],
648
+ 'right' => [
649
+ 'title' => __( 'Right', 'happy-elementor-addons' ),
650
+ 'icon' => 'eicon-h-align-right',
651
+ ],
652
+ ],
653
+ 'toggle' => true,
654
+ 'selectors' => [
655
+ '{{WRAPPER}} .slick-dots' => 'text-align: {{VALUE}}'
656
+ ]
657
+ ]
658
+ );
659
+
660
+ $this->start_controls_tabs( '_tabs_dots' );
661
+ $this->start_controls_tab(
662
+ '_tab_dots_normal',
663
+ [
664
+ 'label' => __( 'Normal', 'happy-elementor-addons' ),
665
+ ]
666
+ );
667
+
668
+ $this->add_control(
669
+ 'dots_nav_color',
670
+ [
671
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
672
+ 'type' => Controls_Manager::COLOR,
673
+ 'selectors' => [
674
+ '{{WRAPPER}} .slick-dots li button:before' => 'color: {{VALUE}};',
675
+ ],
676
+ ]
677
+ );
678
+
679
+ $this->end_controls_tab();
680
+
681
+ $this->start_controls_tab(
682
+ '_tab_dots_hover',
683
+ [
684
+ 'label' => __( 'Hover', 'happy-elementor-addons' ),
685
+ ]
686
+ );
687
+
688
+ $this->add_control(
689
+ 'dots_nav_hover_color',
690
+ [
691
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
692
+ 'type' => Controls_Manager::COLOR,
693
+ 'selectors' => [
694
+ '{{WRAPPER}} .slick-dots li button:hover:before' => 'color: {{VALUE}};',
695
+ ],
696
+ ]
697
+ );
698
+
699
+ $this->end_controls_tab();
700
+
701
+ $this->start_controls_tab(
702
+ '_tab_dots_active',
703
+ [
704
+ 'label' => __( 'Active', 'happy-elementor-addons' ),
705
+ ]
706
+ );
707
+
708
+ $this->add_control(
709
+ 'dots_nav_active_color',
710
+ [
711
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
712
+ 'type' => Controls_Manager::COLOR,
713
+ 'selectors' => [
714
+ '{{WRAPPER}} .slick-dots .slick-active button:before' => 'color: {{VALUE}};',
715
+ ],
716
+ ]
717
+ );
718
+
719
+ $this->end_controls_tab();
720
+ $this->end_controls_tabs();
721
+
722
+ $this->end_controls_section();
723
+ }
724
+
725
+ protected function render() {
726
+ $settings = $this->get_settings_for_display();
727
+
728
+ if ( empty( $settings['slides'] ) ) {
729
+ return;
730
+ }
731
+ ?>
732
+
733
+ <div class="hajs-slick ha-slick ha-slick--carousel">
734
+
735
+ <?php foreach ( $settings['slides'] as $slide ) :
736
+ $image = wp_get_attachment_image_url( $slide['image']['id'], $settings['thumbnail_size'] );
737
+ if ( ! $image ) {
738
+ $image = $slide['image']['url'];
739
+ }
740
+ ?>
741
+
742
+ <div class="ha-slick-slide">
743
+ <div class="ha-slick-item">
744
+ <?php if ( $image ) : ?>
745
+ <img class="ha-slick-img" src="<?php echo esc_url( $image ); ?>" alt="<?php echo esc_attr( $slide['title'] ); ?>">
746
+ <?php endif; ?>
747
+
748
+ <?php if ( $slide['title'] || $slide['subtitle'] ) : ?>
749
+ <div class="ha-slick-content">
750
+ <?php if ( $slide['title'] ) : ?>
751
+ <h2 class="ha-slick-title"><?php echo esc_html( $slide['title'] ); ?></h2>
752
+ <?php endif; ?>
753
+ <?php if ( $slide['subtitle'] ) : ?>
754
+ <p class="ha-slick-subtitle"><?php echo esc_html( $slide['subtitle'] ); ?></p>
755
+ <?php endif; ?>
756
+ </div>
757
+ <?php endif; ?>
758
+ </div>
759
+ </div>
760
+
761
+ <?php endforeach; ?>
762
+
763
+ </div>
764
+
765
+ <?php
766
+ }
767
+ }
widgets/cf7/widget.php CHANGED
@@ -10,6 +10,7 @@ use Elementor\Controls_Manager;
10
  use Elementor\Group_Control_Border;
11
  use Elementor\Group_Control_Box_Shadow;
12
  use Elementor\Group_Control_Typography;
 
13
 
14
  defined( 'ABSPATH' ) || die();
15
 
@@ -188,6 +189,7 @@ class CF7 extends Base {
188
  'name' => 'field_typography',
189
  'label' => __( 'Typography', 'happy-elementor-addons' ),
190
  'selector' => '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit)',
 
191
  ]
192
  );
193
 
@@ -336,6 +338,7 @@ class CF7 extends Base {
336
  'name' => 'label_typography',
337
  'label' => __( 'Typography', 'happy-elementor-addons' ),
338
  'selector' => '{{WRAPPER}} label',
 
339
  ]
340
  );
341
 
@@ -389,6 +392,7 @@ class CF7 extends Base {
389
  [
390
  'name' => 'submit_typography',
391
  'selector' => '{{WRAPPER}} .wpcf7-submit',
 
392
  ]
393
  );
394
 
10
  use Elementor\Group_Control_Border;
11
  use Elementor\Group_Control_Box_Shadow;
12
  use Elementor\Group_Control_Typography;
13
+ use Elementor\Scheme_Typography;
14
 
15
  defined( 'ABSPATH' ) || die();
16
 
189
  'name' => 'field_typography',
190
  'label' => __( 'Typography', 'happy-elementor-addons' ),
191
  'selector' => '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit)',
192
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3
193
  ]
194
  );
195
 
338
  'name' => 'label_typography',
339
  'label' => __( 'Typography', 'happy-elementor-addons' ),
340
  'selector' => '{{WRAPPER}} label',
341
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3
342
  ]
343
  );
344
 
392
  [
393
  'name' => 'submit_typography',
394
  'selector' => '{{WRAPPER}} .wpcf7-submit',
395
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_4
396
  ]
397
  );
398
 
widgets/dual-button/widget.php CHANGED
@@ -574,6 +574,7 @@ class Dual_Button extends Base {
574
  'name' => 'connector_typography',
575
  'label' => __( 'Typography', 'happy-elementor-addons' ),
576
  'selector' => '{{WRAPPER}} .ha-dual-btn-connector',
 
577
  ]
578
  );
579
 
574
  'name' => 'connector_typography',
575
  'label' => __( 'Typography', 'happy-elementor-addons' ),
576
  'selector' => '{{WRAPPER}} .ha-dual-btn-connector',
577
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3
578
  ]
579
  );
580
 
widgets/image-compare/widget.php CHANGED
@@ -555,7 +555,6 @@ class Image_Compare extends Base {
555
  }
556
  data[dKey] = settings[sKey];
557
  });
558
- console.log(elementorFrontend)
559
  view.addRenderAttribute('container', 'data-happy-settings', JSON.stringify(data)); #>
560
 
561
  <div {{{ view.getRenderAttributeString( 'container' ) }}}>
555
  }
556
  data[dKey] = settings[sKey];
557
  });
 
558
  view.addRenderAttribute('container', 'data-happy-settings', JSON.stringify(data)); #>
559
 
560
  <div {{{ view.getRenderAttributeString( 'container' ) }}}>
widgets/justified-gallery/widget.php CHANGED
@@ -6,6 +6,7 @@
6
  */
7
  namespace Happy_Addons\Elementor\Widget;
8
 
 
9
  use Elementor\Repeater;
10
  use Elementor\Controls_Manager;
11
  use Elementor\Group_Control_Border;
@@ -127,13 +128,13 @@ class Justified_Gallery extends Base {
127
  $this->add_control(
128
  'show_all_filter',
129
  [
130
- 'label' => __( 'Show Everything Filter?', 'happy-elementor-addons' ),
131
  'type' => Controls_Manager::SWITCHER,
132
  'label_on' => __( 'Yes', 'happy-elementor-addons' ),
133
  'label_off' => __( 'No', 'happy-elementor-addons' ),
134
  'return_value' => 'yes',
135
  'default' => 'yes',
136
- 'description' => __( 'Enable to display everything filter', 'happy-elementor-addons' ),
137
  'condition' => [
138
  'show_filter' => 'yes'
139
  ]
@@ -147,7 +148,7 @@ class Justified_Gallery extends Base {
147
  'type' => Controls_Manager::TEXT,
148
  'default' => __( 'All', 'happy-elementor-addons' ),
149
  'placeholder' => __( 'Type filter label', 'happy-elementor-addons' ),
150
- 'description' => __( 'Type everything filter label', 'happy-elementor-addons' ),
151
  'condition' => [
152
  'show_all_filter' => 'yes',
153
  'show_filter' => 'yes'
@@ -222,18 +223,10 @@ class Justified_Gallery extends Base {
222
 
223
  protected function register_style_controls() {
224
  $this->start_controls_section(
225
- '_section_style_gallery',
226
- [
227
- 'label' => __( 'Gallery', 'happy-elementor-addons' ),
228
- 'tab' => Controls_Manager::TAB_STYLE,
229
- ]
230
- );
231
-
232
- $this->add_control(
233
- '_heading_image',
234
  [
235
  'label' => __( 'Image', 'happy-elementor-addons' ),
236
- 'type' => Controls_Manager::HEADING,
237
  ]
238
  );
239
 
@@ -244,7 +237,7 @@ class Justified_Gallery extends Base {
244
  'type' => Controls_Manager::DIMENSIONS,
245
  'size_units' => [ 'px', '%' ],
246
  'selectors' => [
247
- '{{WRAPPER}} .ha-justified-gallery-item' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
248
  ],
249
  ]
250
  );
@@ -261,11 +254,140 @@ class Justified_Gallery extends Base {
261
  );
262
 
263
  $this->add_control(
264
- '_heading_caption',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
265
  [
266
  'label' => __( 'Caption', 'happy-elementor-addons' ),
267
- 'type' => Controls_Manager::HEADING,
268
- 'separator' => 'before',
269
  ]
270
  );
271
 
@@ -276,7 +398,7 @@ class Justified_Gallery extends Base {
276
  'type' => Controls_Manager::DIMENSIONS,
277
  'size_units' => [ 'px', 'em', '%' ],
278
  'selectors' => [
279
- '{{WRAPPER}} .ha-justified-gallery-grid > a > .caption' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
280
  ],
281
  ]
282
  );
@@ -287,7 +409,7 @@ class Justified_Gallery extends Base {
287
  'label' => __( 'Text Color', 'happy-elementor-addons' ),
288
  'type' => Controls_Manager::COLOR,
289
  'selectors' => [
290
- '{{WRAPPER}} .ha-justified-gallery-grid > a > .caption' => 'color: {{VALUE}}',
291
  ],
292
  ]
293
  );
@@ -298,7 +420,7 @@ class Justified_Gallery extends Base {
298
  'label' => __( 'Background Color', 'happy-elementor-addons' ),
299
  'type' => Controls_Manager::COLOR,
300
  'selectors' => [
301
- '{{WRAPPER}} .ha-justified-gallery-grid > a > .caption' => 'background-color: {{VALUE}}',
302
  ],
303
  ]
304
  );
@@ -308,7 +430,7 @@ class Justified_Gallery extends Base {
308
  [
309
  'name' => 'caption_typography',
310
  'label' => __( 'Typography', 'happy-elementor-addons' ),
311
- 'selector' => '{{WRAPPER}} .ha-justified-gallery-grid > a > .caption',
312
  'scheme' => Scheme_Typography::TYPOGRAPHY_3,
313
  ]
314
  );
@@ -421,6 +543,7 @@ class Justified_Gallery extends Base {
421
  [
422
  'label' => __( 'Alignment', 'happy-elementor-addons' ),
423
  'type' => Controls_Manager::CHOOSE,
 
424
  'options' => [
425
  'left' => [
426
  'title' => __( 'Left', 'happy-elementor-addons' ),
@@ -649,7 +772,7 @@ class Justified_Gallery extends Base {
649
  $caption = $settings['show_caption'] ? esc_attr( wp_get_attachment_caption( $id ) ) : '';
650
  ?>
651
  <a class="ha-justified-gallery-item <?php echo esc_attr( implode( ' ', $filters ) ); ?>">
652
- <?php echo wp_get_attachment_image( $id, $settings['thumbnail_size'], false, [ 'alt' => $caption ] ); ?>
653
  </a>
654
  <?php endforeach; ?>
655
  </div>
6
  */
7
  namespace Happy_Addons\Elementor\Widget;
8
 
9
+ use Elementor\Group_Control_Css_Filter;
10
  use Elementor\Repeater;
11
  use Elementor\Controls_Manager;
12
  use Elementor\Group_Control_Border;
128
  $this->add_control(
129
  'show_all_filter',
130
  [
131
+ 'label' => __( 'Show All Filter?', 'happy-elementor-addons' ),
132
  'type' => Controls_Manager::SWITCHER,
133
  'label_on' => __( 'Yes', 'happy-elementor-addons' ),
134
  'label_off' => __( 'No', 'happy-elementor-addons' ),
135
  'return_value' => 'yes',
136
  'default' => 'yes',
137
+ 'description' => __( 'Enable to display all filter button', 'happy-elementor-addons' ),
138
  'condition' => [
139
  'show_filter' => 'yes'
140
  ]
148
  'type' => Controls_Manager::TEXT,
149
  'default' => __( 'All', 'happy-elementor-addons' ),
150
  'placeholder' => __( 'Type filter label', 'happy-elementor-addons' ),
151
+ 'description' => __( 'Type all filter label', 'happy-elementor-addons' ),
152
  'condition' => [
153
  'show_all_filter' => 'yes',
154
  'show_filter' => 'yes'
223
 
224
  protected function register_style_controls() {
225
  $this->start_controls_section(
226
+ '_section_style_image',
 
 
 
 
 
 
 
 
227
  [
228
  'label' => __( 'Image', 'happy-elementor-addons' ),
229
+ 'tab' => Controls_Manager::TAB_STYLE,
230
  ]
231
  );
232
 
237
  'type' => Controls_Manager::DIMENSIONS,
238
  'size_units' => [ 'px', '%' ],
239
  'selectors' => [
240
+ '{{WRAPPER}} .ha-justified-gallery-item, {{WRAPPER}} .ha-justified-gallery-item > img' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
241
  ],
242
  ]
243
  );
254
  );
255
 
256
  $this->add_control(
257
+ 'image_bg_color',
258
+ [
259
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
260
+ 'type' => Controls_Manager::COLOR,
261
+ 'selectors' => [
262
+ '{{WRAPPER}} .ha-justified-gallery-item' => 'background-color: {{VALUE}};'
263
+ ]
264
+ ]
265
+ );
266
+
267
+ $this->start_controls_tabs(
268
+ '_tabs_image_effects',
269
+ [
270
+ 'separator' => 'before'
271
+ ]
272
+ );
273
+
274
+ $this->start_controls_tab(
275
+ '_tab_image_effects_normal',
276
+ [
277
+ 'label' => __( 'Normal', 'happy-elementor-addons' ),
278
+ ]
279
+ );
280
+
281
+ $this->add_control(
282
+ 'image_opacity',
283
+ [
284
+ 'label' => __( 'Opacity', 'happy-elementor-addons' ),
285
+ 'type' => Controls_Manager::SLIDER,
286
+ 'range' => [
287
+ 'px' => [
288
+ 'max' => 1,
289
+ 'min' => 0.10,
290
+ 'step' => 0.01,
291
+ ],
292
+ ],
293
+ 'selectors' => [
294
+ '{{WRAPPER}} .ha-justified-gallery-item > img' => 'opacity: {{SIZE}};',
295
+ ],
296
+ ]
297
+ );
298
+
299
+ $this->add_group_control(
300
+ Group_Control_Css_Filter::get_type(),
301
+ [
302
+ 'name' => 'image_css_filters',
303
+ 'selector' => '{{WRAPPER}} .ha-justified-gallery-item > img',
304
+ ]
305
+ );
306
+
307
+ $this->end_controls_tab();
308
+
309
+ $this->start_controls_tab( 'hover',
310
+ [
311
+ 'label' => __( 'Hover', 'happy-elementor-addons' ),
312
+ ]
313
+ );
314
+
315
+ $this->add_control(
316
+ 'image_opacity_hover',
317
+ [
318
+ 'label' => __( 'Opacity', 'happy-elementor-addons' ),
319
+ 'type' => Controls_Manager::SLIDER,
320
+ 'range' => [
321
+ 'px' => [
322
+ 'max' => 1,
323
+ 'min' => 0.10,
324
+ 'step' => 0.01,
325
+ ],
326
+ ],
327
+ 'selectors' => [
328
+ '{{WRAPPER}} .ha-justified-gallery-item:hover > img' => 'opacity: {{SIZE}};',
329
+ ],
330
+ ]
331
+ );
332
+
333
+ $this->add_group_control(
334
+ Group_Control_Css_Filter::get_type(),
335
+ [
336
+ 'name' => 'image_css_filters_hover',
337
+ 'selector' => '{{WRAPPER}} .ha-justified-gallery-item:hover > img',
338
+ ]
339
+ );
340
+
341
+ $this->add_control(
342
+ 'image_background_hover_transition',
343
+ [
344
+ 'label' => __( 'Transition Duration', 'happy-elementor-addons' ),
345
+ 'type' => Controls_Manager::SLIDER,
346
+ 'range' => [
347
+ 'px' => [
348
+ 'max' => 3,
349
+ 'step' => 0.1,
350
+ ],
351
+ ],
352
+ 'selectors' => [
353
+ '{{WRAPPER}} .ha-justified-gallery-item > img' => 'transition-duration: {{SIZE}}s',
354
+ ],
355
+ ]
356
+ );
357
+
358
+ $this->add_control(
359
+ 'image_hover_animation',
360
+ [
361
+ 'label' => __( 'Hover Animation', 'happy-elementor-addons' ),
362
+ 'type' => Controls_Manager::HOVER_ANIMATION,
363
+ 'default' => 'grow',
364
+ 'label_block' => false,
365
+ ]
366
+ );
367
+
368
+ $this->add_control(
369
+ 'image_hover_cursor',
370
+ [
371
+ 'label' => __( 'Hover Cursor', 'happy-elementor-addons' ),
372
+ 'type' => Controls_Manager::SELECT2,
373
+ 'options' => ha_get_css_cursors(),
374
+ 'default' => 'default',
375
+ 'selectors' => [
376
+ '{{WRAPPER}} .ha-justified-gallery-item:hover > img' => 'cursor: {{VALUE}};'
377
+ ]
378
+ ]
379
+ );
380
+
381
+ $this->end_controls_tab();
382
+ $this->end_controls_tabs();
383
+
384
+ $this->end_controls_section();
385
+
386
+ $this->start_controls_section(
387
+ '_section_style_caption',
388
  [
389
  'label' => __( 'Caption', 'happy-elementor-addons' ),
390
+ 'tab' => Controls_Manager::TAB_STYLE,
 
391
  ]
392
  );
393
 
398
  'type' => Controls_Manager::DIMENSIONS,
399
  'size_units' => [ 'px', 'em', '%' ],
400
  'selectors' => [
401
+ '{{WRAPPER}} .justified-gallery > .ha-justified-gallery-item > .caption' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
402
  ],
403
  ]
404
  );
409
  'label' => __( 'Text Color', 'happy-elementor-addons' ),
410
  'type' => Controls_Manager::COLOR,
411
  'selectors' => [
412
+ '{{WRAPPER}} .justified-gallery > .ha-justified-gallery-item > .caption' => 'color: {{VALUE}}',
413
  ],
414
  ]
415
  );
420
  'label' => __( 'Background Color', 'happy-elementor-addons' ),
421
  'type' => Controls_Manager::COLOR,
422
  'selectors' => [
423
+ '{{WRAPPER}} .justified-gallery > .ha-justified-gallery-item > .caption' => 'background-color: {{VALUE}}',
424
  ],
425
  ]
426
  );
430
  [
431
  'name' => 'caption_typography',
432
  'label' => __( 'Typography', 'happy-elementor-addons' ),
433
+ 'selector' => '{{WRAPPER}} .justified-gallery > .ha-justified-gallery-item > .caption',
434
  'scheme' => Scheme_Typography::TYPOGRAPHY_3,
435
  ]
436
  );
543
  [
544
  'label' => __( 'Alignment', 'happy-elementor-addons' ),
545
  'type' => Controls_Manager::CHOOSE,
546
+ 'label_block' => false,
547
  'options' => [
548
  'left' => [
549
  'title' => __( 'Left', 'happy-elementor-addons' ),
772
  $caption = $settings['show_caption'] ? esc_attr( wp_get_attachment_caption( $id ) ) : '';
773
  ?>
774
  <a class="ha-justified-gallery-item <?php echo esc_attr( implode( ' ', $filters ) ); ?>">
775
+ <?php echo wp_get_attachment_image( $id, $settings['thumbnail_size'], false, [ 'alt' => $caption, 'class' => 'elementor-animation-' . esc_attr( $settings['image_hover_animation'] ) ] ); ?>
776
  </a>
777
  <?php endforeach; ?>
778
  </div>
widgets/logo-grid/widget.php CHANGED
@@ -93,6 +93,16 @@ class Logo_Grid extends Base {
93
  'type' => Controls_Manager::REPEATER,
94
  'fields' => $repeater->get_controls(),
95
  'title_field' => '{{{ name }}}',
 
 
 
 
 
 
 
 
 
 
96
  ]
97
  );
98
 
@@ -164,6 +174,36 @@ class Logo_Grid extends Base {
164
  ]
165
  );
166
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
167
  $this->add_control(
168
  'grid_border_type',
169
  [
@@ -191,17 +231,42 @@ class Logo_Grid extends Base {
191
  'type' => Controls_Manager::SLIDER,
192
  'size_units' => ['px'],
193
  'selectors' => [
194
- '{{WRAPPER}}.ha-logo-grid--border .ha-logo-grid-item' => 'border-right-width: {{SIZE}}{{UNIT}}; border-bottom-width: {{SIZE}}{{UNIT}};',
195
- '{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2n+1)' => 'border-left-width: {{SIZE}}{{UNIT}};',
196
- '{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3n+1)' => 'border-left-width: {{SIZE}}{{UNIT}};',
197
- '{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4n+1)' => 'border-left-width: {{SIZE}}{{UNIT}};',
198
- '{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5n+1)' => 'border-left-width: {{SIZE}}{{UNIT}};',
199
- '{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6n+1)' => 'border-left-width: {{SIZE}}{{UNIT}};',
200
- '{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(-n+2)' => 'border-top-width: {{SIZE}}{{UNIT}};',
201
- '{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(-n+3)' => 'border-top-width: {{SIZE}}{{UNIT}};',
202
- '{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(-n+4)' => 'border-top-width: {{SIZE}}{{UNIT}};',
203
- '{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(-n+5)' => 'border-top-width: {{SIZE}}{{UNIT}};',
204
- '{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(-n+6)' => 'border-top-width: {{SIZE}}{{UNIT}};',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
205
 
206
  '{{WRAPPER}}.ha-logo-grid--tictactoe .ha-logo-grid-item' => 'border-top-width: {{SIZE}}{{UNIT}}; border-right-width: {{SIZE}}{{UNIT}};',
207
 
@@ -248,30 +313,77 @@ class Logo_Grid extends Base {
248
  '{{WRAPPER}}.ha-logo-grid--border .ha-logo-grid-wrapper, {{WRAPPER}}.ha-logo-grid--box .ha-logo-grid-item' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
249
  '{{WRAPPER}}.ha-logo-grid--border .ha-logo-grid-item:first-child' => 'border-top-left-radius: {{TOP}}{{UNIT}};',
250
  '{{WRAPPER}}.ha-logo-grid--border .ha-logo-grid-item:last-child' => 'border-bottom-right-radius: {{BOTTOM}}{{UNIT}};',
251
- '{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2)' => 'border-top-right-radius: {{RIGHT}}{{UNIT}};',
252
- '{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-last-child(2)' => 'border-bottom-left-radius: {{LEFT}}{{UNIT}};',
253
- '{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3)' => 'border-top-right-radius: {{RIGHT}}{{UNIT}};',
254
- '{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-last-child(3)' => 'border-bottom-left-radius: {{LEFT}}{{UNIT}};',
255
- '{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4)' => 'border-top-right-radius: {{RIGHT}}{{UNIT}};',
256
- '{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-last-child(4)' => 'border-bottom-left-radius: {{LEFT}}{{UNIT}};',
257
- '{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5)' => 'border-top-right-radius: {{RIGHT}}{{UNIT}};',
258
- '{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-last-child(5)' => 'border-bottom-left-radius: {{LEFT}}{{UNIT}};',
259
- '{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6)' => 'border-top-right-radius: {{RIGHT}}{{UNIT}};',
260
- '{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-last-child(6)' => 'border-bottom-left-radius: {{LEFT}}{{UNIT}};',
261
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
262
  '{{WRAPPER}}.ha-logo-grid--tictactoe .ha-logo-grid-wrapper' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
263
  '{{WRAPPER}}.ha-logo-grid--tictactoe .ha-logo-grid-item:first-child' => 'border-top-left-radius: {{TOP}}{{UNIT}};',
264
  '{{WRAPPER}}.ha-logo-grid--tictactoe .ha-logo-grid-item:last-child' => 'border-bottom-right-radius: {{BOTTOM}}{{UNIT}};',
265
- '{{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2)' => 'border-top-right-radius: {{RIGHT}}{{UNIT}};',
266
- '{{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-2 .ha-logo-grid-item:nth-last-child(2)' => 'border-bottom-left-radius: {{LEFT}}{{UNIT}};',
267
- '{{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3)' => 'border-top-right-radius: {{RIGHT}}{{UNIT}};',
268
- '{{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-3 .ha-logo-grid-item:nth-last-child(3)' => 'border-bottom-left-radius: {{LEFT}}{{UNIT}};',
269
- '{{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4)' => 'border-top-right-radius: {{RIGHT}}{{UNIT}};',
270
- '{{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-4 .ha-logo-grid-item:nth-last-child(4)' => 'border-bottom-left-radius: {{LEFT}}{{UNIT}};',
271
- '{{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5)' => 'border-top-right-radius: {{RIGHT}}{{UNIT}};',
272
- '{{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-5 .ha-logo-grid-item:nth-last-child(5)' => 'border-bottom-left-radius: {{LEFT}}{{UNIT}};',
273
- '{{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6)' => 'border-top-right-radius: {{RIGHT}}{{UNIT}};',
274
- '{{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-6 .ha-logo-grid-item:nth-last-child(6)' => 'border-bottom-left-radius: {{LEFT}}{{UNIT}};',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
275
  ],
276
  ]
277
  );
@@ -421,8 +533,8 @@ class Logo_Grid extends Base {
421
  }
422
  ?>
423
  <<?php echo $tag; ?> <?php $this->print_render_attribute_string( $repeater_key ); ?>>
424
- <figure class="ha-logo-grid-figure elementor-animation-<?php echo esc_attr( $settings['hover_animation'] ); ?>">
425
- <img class="ha-logo-grid-img" src="<?php echo esc_url( $image ); ?>" alt="<?php echo esc_attr( $item['name'] ); ?>">
426
  </figure>
427
  </<?php echo $tag; ?>>
428
  <?php endforeach; ?>
93
  'type' => Controls_Manager::REPEATER,
94
  'fields' => $repeater->get_controls(),
95
  'title_field' => '{{{ name }}}',
96
+ 'default' => [
97
+ ['image' => ['url' => Utils::get_placeholder_image_src()]],
98
+ ['image' => ['url' => Utils::get_placeholder_image_src()]],
99
+ ['image' => ['url' => Utils::get_placeholder_image_src()]],
100
+ ['image' => ['url' => Utils::get_placeholder_image_src()]],
101
+ ['image' => ['url' => Utils::get_placeholder_image_src()]],
102
+ ['image' => ['url' => Utils::get_placeholder_image_src()]],
103
+ ['image' => ['url' => Utils::get_placeholder_image_src()]],
104
+ ['image' => ['url' => Utils::get_placeholder_image_src()]],
105
+ ]
106
  ]
107
  );
108
 
174
  ]
175
  );
176
 
177
+ $this->add_responsive_control(
178
+ 'padding',
179
+ [
180
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
181
+ 'type' => Controls_Manager::DIMENSIONS,
182
+ 'size_units' => [ 'px', 'em', '%' ],
183
+ 'selectors' => [
184
+ '{{WRAPPER}} .ha-logo-grid-figure' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
185
+ ],
186
+ ]
187
+ );
188
+
189
+ $this->add_responsive_control(
190
+ 'height',
191
+ [
192
+ 'label' => __( 'Height', 'happy-elementor-addons' ),
193
+ 'type' => Controls_Manager::SLIDER,
194
+ 'size_units' => ['px'],
195
+ 'range' => [
196
+ 'px' => [
197
+ 'max' => 500,
198
+ 'min' => 100,
199
+ ]
200
+ ],
201
+ 'selectors' => [
202
+ '{{WRAPPER}} .ha-logo-grid-item' => 'height: {{SIZE}}{{UNIT}};'
203
+ ],
204
+ ]
205
+ );
206
+
207
  $this->add_control(
208
  'grid_border_type',
209
  [
231
  'type' => Controls_Manager::SLIDER,
232
  'size_units' => ['px'],
233
  'selectors' => [
234
+ '(desktop+){{WRAPPER}}.ha-logo-grid--border .ha-logo-grid-item' => 'border-right-width: {{grid_border_width.SIZE}}{{UNIT}}; border-bottom-width: {{grid_border_width.SIZE}}{{UNIT}};',
235
+ '(tablet){{WRAPPER}}.ha-logo-grid--border .ha-logo-grid-item' => 'border-right-width: {{grid_border_width_tablet.SIZE}}{{UNIT}}; border-bottom-width: {{grid_border_width_tablet.SIZE}}{{UNIT}};',
236
+ '(mobile){{WRAPPER}}.ha-logo-grid--border .ha-logo-grid-item' => 'border-right-width: {{grid_border_width_mobile.SIZE}}{{UNIT}}; border-bottom-width: {{grid_border_width_mobile.SIZE}}{{UNIT}};',
237
+
238
+ '(desktop+){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2n+1)' => 'border-left-width: {{grid_border_width.SIZE}}{{UNIT}};',
239
+ '(desktop+){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3n+1)' => 'border-left-width: {{grid_border_width.SIZE}}{{UNIT}};',
240
+ '(desktop+){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4n+1)' => 'border-left-width: {{grid_border_width.SIZE}}{{UNIT}};',
241
+ '(desktop+){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5n+1)' => 'border-left-width: {{grid_border_width.SIZE}}{{UNIT}};',
242
+ '(desktop+){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6n+1)' => 'border-left-width: {{grid_border_width.SIZE}}{{UNIT}};',
243
+ '(desktop+){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(-n+2)' => 'border-top-width: {{grid_border_width.SIZE}}{{UNIT}};',
244
+ '(desktop+){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(-n+3)' => 'border-top-width: {{grid_border_width.SIZE}}{{UNIT}};',
245
+ '(desktop+){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(-n+4)' => 'border-top-width: {{grid_border_width.SIZE}}{{UNIT}};',
246
+ '(desktop+){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(-n+5)' => 'border-top-width: {{grid_border_width.SIZE}}{{UNIT}};',
247
+ '(desktop+){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(-n+6)' => 'border-top-width: {{grid_border_width.SIZE}}{{UNIT}};',
248
+
249
+ '(tablet){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(2n+1)' => 'border-left-width: {{grid_border_width_tablet.SIZE}}{{UNIT}};',
250
+ '(tablet){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(3n+1)' => 'border-left-width: {{grid_border_width_tablet.SIZE}}{{UNIT}};',
251
+ '(tablet){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(4n+1)' => 'border-left-width: {{grid_border_width_tablet.SIZE}}{{UNIT}};',
252
+ '(tablet){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(5n+1)' => 'border-left-width: {{grid_border_width_tablet.SIZE}}{{UNIT}};',
253
+ '(tablet){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(6n+1)' => 'border-left-width: {{grid_border_width_tablet.SIZE}}{{UNIT}};',
254
+ '(tablet){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(-n+2)' => 'border-top-width: {{grid_border_width_tablet.SIZE}}{{UNIT}};',
255
+ '(tablet){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(-n+3)' => 'border-top-width: {{grid_border_width_tablet.SIZE}}{{UNIT}};',
256
+ '(tablet){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(-n+4)' => 'border-top-width: {{grid_border_width_tablet.SIZE}}{{UNIT}};',
257
+ '(tablet){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(-n+5)' => 'border-top-width: {{grid_border_width_tablet.SIZE}}{{UNIT}};',
258
+ '(tablet){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(-n+6)' => 'border-top-width: {{grid_border_width_tablet.SIZE}}{{UNIT}};',
259
+
260
+ '(mobile){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(2n+1)' => 'border-left-width: {{grid_border_width_mobile.SIZE}}{{UNIT}};',
261
+ '(mobile){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(3n+1)' => 'border-left-width: {{grid_border_width_mobile.SIZE}}{{UNIT}};',
262
+ '(mobile){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(4n+1)' => 'border-left-width: {{grid_border_width_mobile.SIZE}}{{UNIT}};',
263
+ '(mobile){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(5n+1)' => 'border-left-width: {{grid_border_width_mobile.SIZE}}{{UNIT}};',
264
+ '(mobile){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(6n+1)' => 'border-left-width: {{grid_border_width_mobile.SIZE}}{{UNIT}};',
265
+ '(mobile){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(-n+2)' => 'border-top-width: {{grid_border_width_mobile.SIZE}}{{UNIT}};',
266
+ '(mobile){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(-n+3)' => 'border-top-width: {{grid_border_width_mobile.SIZE}}{{UNIT}};',
267
+ '(mobile){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(-n+4)' => 'border-top-width: {{grid_border_width_mobile.SIZE}}{{UNIT}};',
268
+ '(mobile){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(-n+5)' => 'border-top-width: {{grid_border_width_mobile.SIZE}}{{UNIT}};',
269
+ '(mobile){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(-n+6)' => 'border-top-width: {{grid_border_width_mobile.SIZE}}{{UNIT}};',
270
 
271
  '{{WRAPPER}}.ha-logo-grid--tictactoe .ha-logo-grid-item' => 'border-top-width: {{SIZE}}{{UNIT}}; border-right-width: {{SIZE}}{{UNIT}};',
272
 
313
  '{{WRAPPER}}.ha-logo-grid--border .ha-logo-grid-wrapper, {{WRAPPER}}.ha-logo-grid--box .ha-logo-grid-item' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
314
  '{{WRAPPER}}.ha-logo-grid--border .ha-logo-grid-item:first-child' => 'border-top-left-radius: {{TOP}}{{UNIT}};',
315
  '{{WRAPPER}}.ha-logo-grid--border .ha-logo-grid-item:last-child' => 'border-bottom-right-radius: {{BOTTOM}}{{UNIT}};',
 
 
 
 
 
 
 
 
 
 
316
 
317
+ '(desktop+){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2)' => 'border-top-right-radius: {{grid_border_radius.RIGHT}}{{UNIT}};',
318
+ '(desktop+){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-last-child(2)' => 'border-bottom-left-radius: {{grid_border_radius.LEFT}}{{UNIT}};',
319
+ '(desktop+){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3)' => 'border-top-right-radius: {{grid_border_radius.RIGHT}}{{UNIT}};',
320
+ '(desktop+){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-last-child(3)' => 'border-bottom-left-radius: {{grid_border_radius.LEFT}}{{UNIT}};',
321
+ '(desktop+){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4)' => 'border-top-right-radius: {{grid_border_radius.RIGHT}}{{UNIT}};',
322
+ '(desktop+){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-last-child(4)' => 'border-bottom-left-radius: {{grid_border_radius.LEFT}}{{UNIT}};',
323
+ '(desktop+){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5)' => 'border-top-right-radius: {{grid_border_radius.RIGHT}}{{UNIT}};',
324
+ '(desktop+){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-last-child(5)' => 'border-bottom-left-radius: {{grid_border_radius.LEFT}}{{UNIT}};',
325
+ '(desktop+){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6)' => 'border-top-right-radius: {{grid_border_radius.RIGHT}}{{UNIT}};',
326
+ '(desktop+){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-last-child(6)' => 'border-bottom-left-radius: {{grid_border_radius.LEFT}}{{UNIT}};',
327
+
328
+ '(tablet){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(2)' => 'border-top-right-radius: {{grid_border_radius_tablet.RIGHT}}{{UNIT}};',
329
+ '(tablet){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-last-child(2)' => 'border-bottom-left-radius: {{grid_border_radius_tablet.LEFT}}{{UNIT}};',
330
+ '(tablet){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(3)' => 'border-top-right-radius: {{grid_border_radius_tablet.RIGHT}}{{UNIT}};',
331
+ '(tablet){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-last-child(3)' => 'border-bottom-left-radius: {{grid_border_radius_tablet.LEFT}}{{UNIT}};',
332
+ '(tablet){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(4)' => 'border-top-right-radius: {{grid_border_radius_tablet.RIGHT}}{{UNIT}};',
333
+ '(tablet){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-last-child(4)' => 'border-bottom-left-radius: {{grid_border_radius_tablet.LEFT}}{{UNIT}};',
334
+ '(tablet){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(5)' => 'border-top-right-radius: {{grid_border_radius_tablet.RIGHT}}{{UNIT}};',
335
+ '(tablet){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-last-child(5)' => 'border-bottom-left-radius: {{grid_border_radius_tablet.LEFT}}{{UNIT}};',
336
+ '(tablet){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(6)' => 'border-top-right-radius: {{grid_border_radius_tablet.RIGHT}}{{UNIT}};',
337
+ '(tablet){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-last-child(6)' => 'border-bottom-left-radius: {{grid_border_radius_tablet.LEFT}}{{UNIT}};',
338
+
339
+ '(mobile){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(2)' => 'border-top-right-radius: {{grid_border_radius_mobile.RIGHT}}{{UNIT}};',
340
+ '(mobile){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-last-child(2)' => 'border-bottom-left-radius: {{grid_border_radius_mobile.LEFT}}{{UNIT}};',
341
+ '(mobile){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(3)' => 'border-top-right-radius: {{grid_border_radius_mobile.RIGHT}}{{UNIT}};',
342
+ '(mobile){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-last-child(3)' => 'border-bottom-left-radius: {{grid_border_radius_mobile.LEFT}}{{UNIT}};',
343
+ '(mobile){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(4)' => 'border-top-right-radius: {{grid_border_radius_mobile.RIGHT}}{{UNIT}};',
344
+ '(mobile){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-last-child(4)' => 'border-bottom-left-radius: {{grid_border_radius_mobile.LEFT}}{{UNIT}};',
345
+ '(mobile){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(5)' => 'border-top-right-radius: {{grid_border_radius_mobile.RIGHT}}{{UNIT}};',
346
+ '(mobile){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-last-child(5)' => 'border-bottom-left-radius: {{grid_border_radius_mobile.LEFT}}{{UNIT}};',
347
+ '(mobile){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(6)' => 'border-top-right-radius: {{grid_border_radius_mobile.RIGHT}}{{UNIT}};',
348
+ '(mobile){{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-last-child(6)' => 'border-bottom-left-radius: {{grid_border_radius_mobile.LEFT}}{{UNIT}};',
349
+
350
+ // Tictactoe
351
  '{{WRAPPER}}.ha-logo-grid--tictactoe .ha-logo-grid-wrapper' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
352
  '{{WRAPPER}}.ha-logo-grid--tictactoe .ha-logo-grid-item:first-child' => 'border-top-left-radius: {{TOP}}{{UNIT}};',
353
  '{{WRAPPER}}.ha-logo-grid--tictactoe .ha-logo-grid-item:last-child' => 'border-bottom-right-radius: {{BOTTOM}}{{UNIT}};',
354
+
355
+ '(desktop+){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2)' => 'border-top-right-radius: {{grid_border_radius.RIGHT}}{{UNIT}};',
356
+ '(desktop+){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-2 .ha-logo-grid-item:nth-last-child(2)' => 'border-bottom-left-radius: {{grid_border_radius.LEFT}}{{UNIT}};',
357
+ '(desktop+){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3)' => 'border-top-right-radius: {{grid_border_radius.RIGHT}}{{UNIT}};',
358
+ '(desktop+){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-3 .ha-logo-grid-item:nth-last-child(3)' => 'border-bottom-left-radius: {{grid_border_radius.LEFT}}{{UNIT}};',
359
+ '(desktop+){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4)' => 'border-top-right-radius: {{grid_border_radius.RIGHT}}{{UNIT}};',
360
+ '(desktop+){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-4 .ha-logo-grid-item:nth-last-child(4)' => 'border-bottom-left-radius: {{grid_border_radius.LEFT}}{{UNIT}};',
361
+ '(desktop+){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5)' => 'border-top-right-radius: {{grid_border_radius.RIGHT}}{{UNIT}};',
362
+ '(desktop+){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-5 .ha-logo-grid-item:nth-last-child(5)' => 'border-bottom-left-radius: {{grid_border_radius.LEFT}}{{UNIT}};',
363
+ '(desktop+){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6)' => 'border-top-right-radius: {{grid_border_radius.RIGHT}}{{UNIT}};',
364
+ '(desktop+){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-6 .ha-logo-grid-item:nth-last-child(6)' => 'border-bottom-left-radius: {{grid_border_radius.LEFT}}{{UNIT}};',
365
+
366
+ '(tablet){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(2)' => 'border-top-right-radius: {{grid_border_radius_tablet.RIGHT}}{{UNIT}};',
367
+ '(tablet){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-last-child(2)' => 'border-bottom-left-radius: {{grid_border_radius_tablet.LEFT}}{{UNIT}};',
368
+ '(tablet){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(3)' => 'border-top-right-radius: {{grid_border_radius_tablet.RIGHT}}{{UNIT}};',
369
+ '(tablet){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-last-child(3)' => 'border-bottom-left-radius: {{grid_border_radius_tablet.LEFT}}{{UNIT}};',
370
+ '(tablet){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(4)' => 'border-top-right-radius: {{grid_border_radius_tablet.RIGHT}}{{UNIT}};',
371
+ '(tablet){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-last-child(4)' => 'border-bottom-left-radius: {{grid_border_radius_tablet.LEFT}}{{UNIT}};',
372
+ '(tablet){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(5)' => 'border-top-right-radius: {{grid_border_radius_tablet.RIGHT}}{{UNIT}};',
373
+ '(tablet){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-last-child(5)' => 'border-bottom-left-radius: {{grid_border_radius_tablet.LEFT}}{{UNIT}};',
374
+ '(tablet){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(6)' => 'border-top-right-radius: {{grid_border_radius_tablet.RIGHT}}{{UNIT}};',
375
+ '(tablet){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-last-child(6)' => 'border-bottom-left-radius: {{grid_border_radius_tablet.LEFT}}{{UNIT}};',
376
+
377
+ '(mobile){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(2)' => 'border-top-right-radius: {{grid_border_radius_mobile.RIGHT}}{{UNIT}};',
378
+ '(mobile){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-last-child(2)' => 'border-bottom-left-radius: {{grid_border_radius_mobile.LEFT}}{{UNIT}};',
379
+ '(mobile){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(3)' => 'border-top-right-radius: {{grid_border_radius_mobile.RIGHT}}{{UNIT}};',
380
+ '(mobile){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-last-child(3)' => 'border-bottom-left-radius: {{grid_border_radius_mobile.LEFT}}{{UNIT}};',
381
+ '(mobile){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(4)' => 'border-top-right-radius: {{grid_border_radius_mobile.RIGHT}}{{UNIT}};',
382
+ '(mobile){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-last-child(4)' => 'border-bottom-left-radius: {{grid_border_radius_mobile.LEFT}}{{UNIT}};',
383
+ '(mobile){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(5)' => 'border-top-right-radius: {{grid_border_radius_mobile.RIGHT}}{{UNIT}};',
384
+ '(mobile){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-last-child(5)' => 'border-bottom-left-radius: {{grid_border_radius_mobile.LEFT}}{{UNIT}};',
385
+ '(mobile){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(6)' => 'border-top-right-radius: {{grid_border_radius_mobile.RIGHT}}{{UNIT}};',
386
+ '(mobile){{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-last-child(6)' => 'border-bottom-left-radius: {{grid_border_radius_mobile.LEFT}}{{UNIT}};',
387
  ],
388
  ]
389
  );
533
  }
534
  ?>
535
  <<?php echo $tag; ?> <?php $this->print_render_attribute_string( $repeater_key ); ?>>
536
+ <figure class="ha-logo-grid-figure">
537
+ <img class="ha-logo-grid-img elementor-animation-<?php echo esc_attr( $settings['hover_animation'] ); ?>" src="<?php echo esc_url( $image ); ?>" alt="<?php echo esc_attr( $item['name'] ); ?>">
538
  </figure>
539
  </<?php echo $tag; ?>>
540
  <?php endforeach; ?>
widgets/ninjaform/widget.php CHANGED
@@ -10,6 +10,7 @@ use Elementor\Controls_Manager;
10
  use Elementor\Group_Control_Border;
11
  use Elementor\Group_Control_Box_Shadow;
12
  use Elementor\Group_Control_Typography;
 
13
 
14
  defined( 'ABSPATH' ) || die();
15
 
@@ -132,6 +133,7 @@ class NinjaForm extends Base {
132
  'name' => 'field_typography',
133
  'label' => __( 'Typography', 'happy-elementor-addons' ),
134
  'selector' => '{{WRAPPER}} .textbox-wrap input[type=text], {{WRAPPER}} .email-wrap input, {{WRAPPER}} .textarea-wrap textarea',
 
135
  ]
136
  );
137
 
@@ -286,6 +288,7 @@ class NinjaForm extends Base {
286
  'name' => 'label_typography',
287
  'label' => __( 'Label Typography', 'happy-elementor-addons' ),
288
  'selector' => '{{WRAPPER}} .textbox-wrap label, {{WRAPPER}} .email-wrap label, {{WRAPPER}} .textarea-wrap label',
 
289
  ]
290
  );
291
 
@@ -295,6 +298,7 @@ class NinjaForm extends Base {
295
  'name' => 'desc_typography',
296
  'label' => __( 'Description Typography', 'happy-elementor-addons' ),
297
  'selector' => '{{WRAPPER}} .nf-field-description p',
 
298
  ]
299
  );
300
 
@@ -398,6 +402,7 @@ class NinjaForm extends Base {
398
  [
399
  'name' => 'submit_typography',
400
  'selector' => '{{WRAPPER}} .submit-container input',
 
401
  ]
402
  );
403
 
10
  use Elementor\Group_Control_Border;
11
  use Elementor\Group_Control_Box_Shadow;
12
  use Elementor\Group_Control_Typography;
13
+ use Elementor\Scheme_Typography;
14
 
15
  defined( 'ABSPATH' ) || die();
16
 
133
  'name' => 'field_typography',
134
  'label' => __( 'Typography', 'happy-elementor-addons' ),
135
  'selector' => '{{WRAPPER}} .textbox-wrap input[type=text], {{WRAPPER}} .email-wrap input, {{WRAPPER}} .textarea-wrap textarea',
136
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3
137
  ]
138
  );
139
 
288
  'name' => 'label_typography',
289
  'label' => __( 'Label Typography', 'happy-elementor-addons' ),
290
  'selector' => '{{WRAPPER}} .textbox-wrap label, {{WRAPPER}} .email-wrap label, {{WRAPPER}} .textarea-wrap label',
291
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3
292
  ]
293
  );
294
 
298
  'name' => 'desc_typography',
299
  'label' => __( 'Description Typography', 'happy-elementor-addons' ),
300
  'selector' => '{{WRAPPER}} .nf-field-description p',
301
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3
302
  ]
303
  );
304
 
402
  [
403
  'name' => 'submit_typography',
404
  'selector' => '{{WRAPPER}} .submit-container input',
405
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_4
406
  ]
407
  );
408
 
widgets/number/widget.php CHANGED
@@ -6,6 +6,7 @@
6
  */
7
  namespace Happy_Addons\Elementor\Widget;
8
 
 
9
  use Elementor\Utils;
10
  use Elementor\Control_Media;
11
  use Elementor\Controls_Manager;
@@ -103,6 +104,7 @@ class Number extends Base {
103
  'name' => 'number_text_typography',
104
  'label' => __( 'Typography', 'happy-elementor-addons' ),
105
  'selector' => '{{WRAPPER}} .ha-number-border',
 
106
  ]
107
  );
108
 
6
  */
7
  namespace Happy_Addons\Elementor\Widget;
8
 
9
+ use Elementor\Scheme_Typography;
10
  use Elementor\Utils;
11
  use Elementor\Control_Media;
12
  use Elementor\Controls_Manager;
104
  'name' => 'number_text_typography',
105
  'label' => __( 'Typography', 'happy-elementor-addons' ),
106
  'selector' => '{{WRAPPER}} .ha-number-border',
107
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3
108
  ]
109
  );
110
 
widgets/review/widget.php CHANGED
@@ -732,7 +732,6 @@ class Review extends Base {
732
  public function _content_template() {
733
  ?>
734
  <#
735
- console.log(settings)
736
  view.addInlineEditingAttributes( 'title', 'none' );
737
  view.addRenderAttribute( 'title', 'class', 'ha-review-reviewer' );
738
 
732
  public function _content_template() {
733
  ?>
734
  <#
 
735
  view.addInlineEditingAttributes( 'title', 'none' );
736
  view.addRenderAttribute( 'title', 'class', 'ha-review-reviewer' );
737
 
widgets/slider/widget.php ADDED
@@ -0,0 +1,726 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Slider widget class
4
+ *
5
+ * @package Happy_Addons
6
+ */
7
+ namespace Happy_Addons\Elementor\Widget;
8
+
9
+ use Elementor\Group_Control_Background;
10
+ use Elementor\Repeater;
11
+ use Elementor\Controls_Manager;
12
+ use Elementor\Group_Control_Border;
13
+ use Elementor\Group_Control_Image_Size;
14
+ use Elementor\Group_Control_Typography;
15
+ use Elementor\Scheme_Typography;
16
+ use Elementor\Utils;
17
+
18
+ defined( 'ABSPATH' ) || die();
19
+
20
+ class Slider extends Base {
21
+
22
+ /**
23
+ * Get widget title.
24
+ *
25
+ * @since 1.0.0
26
+ * @access public
27
+ *
28
+ * @return string Widget title.
29
+ */
30
+ public function get_title() {
31
+ return __( 'Slider', 'happy-elementor-addons' );
32
+ }
33
+
34
+ /**
35
+ * Get widget icon.
36
+ *
37
+ * @since 1.0.0
38
+ * @access public
39
+ *
40
+ * @return string Widget icon.
41
+ */
42
+ public function get_icon() {
43
+ return 'hm hm-image-slider';
44
+ }
45
+
46
+ public function get_keywords() {
47
+ return [ 'slider', 'image', 'gallery', 'carousel' ];
48
+ }
49
+
50
+ protected function register_content_controls() {
51
+ $this->start_controls_section(
52
+ '_section_slides',
53
+ [
54
+ 'label' => __( 'Slides', 'happy-elementor-addons' ),
55
+ 'tab' => Controls_Manager::TAB_CONTENT,
56
+ ]
57
+ );
58
+
59
+ $repeater = new Repeater();
60
+
61
+ $repeater->add_control(
62
+ 'image',
63
+ [
64
+ 'type' => Controls_Manager::MEDIA,
65
+ 'label' => __( 'Image', 'happy-elementor-addons' ),
66
+ 'default' => [
67
+ 'url' => Utils::get_placeholder_image_src(),
68
+ ],
69
+ ]
70
+ );
71
+
72
+ $repeater->add_control(
73
+ 'title',
74
+ [
75
+ 'type' => Controls_Manager::TEXT,
76
+ 'label_block' => true,
77
+ 'label' => __( 'Title & Subtitle', 'happy-elementor-addons' ),
78
+ 'placeholder' => __( 'Type title here', 'happy-elementor-addons' )
79
+ ]
80
+ );
81
+
82
+ $repeater->add_control(
83
+ 'subtitle',
84
+ [
85
+ 'type' => Controls_Manager::TEXTAREA,
86
+ 'label_block' => true,
87
+ 'show_label' => false,
88
+ 'placeholder' => __( 'Type subtitle here', 'happy-elementor-addons' )
89
+ ]
90
+ );
91
+
92
+ $this->add_control(
93
+ 'slides',
94
+ [
95
+ 'show_label' => false,
96
+ 'type' => Controls_Manager::REPEATER,
97
+ 'fields' => $repeater->get_controls(),
98
+ 'title_field' => '<# print(title || "Carousel Item"); #>',
99
+ 'default' => [
100
+ [
101
+ 'image' => [
102
+ 'url' => Utils::get_placeholder_image_src(),
103
+ ],
104
+ ],
105
+ [
106
+ 'image' => [
107
+ 'url' => Utils::get_placeholder_image_src(),
108
+ ],
109
+ ],
110
+ [
111
+ 'image' => [
112
+ 'url' => Utils::get_placeholder_image_src(),
113
+ ],
114
+ ],
115
+ [
116
+ 'image' => [
117
+ 'url' => Utils::get_placeholder_image_src(),
118
+ ],
119
+ ],
120
+ [
121
+ 'image' => [
122
+ 'url' => Utils::get_placeholder_image_src(),
123
+ ],
124
+ ]
125
+ ]
126
+ ]
127
+ );
128
+
129
+ $this->add_group_control(
130
+ Group_Control_Image_Size::get_type(),
131
+ [
132
+ 'name' => 'thumbnail',
133
+ 'default' => 'medium_large',
134
+ 'separator' => 'before',
135
+ 'exclude' => [
136
+ 'custom'
137
+ ]
138
+ ]
139
+ );
140
+
141
+ $this->end_controls_section();
142
+
143
+ $this->start_controls_section(
144
+ '_section_settings',
145
+ [
146
+ 'label' => __( 'Settings', 'happy-elementor-addons' ),
147
+ 'tab' => Controls_Manager::TAB_CONTENT,
148
+ ]
149
+ );
150
+
151
+ $this->add_control(
152
+ 'animation_speed',
153
+ [
154
+ 'label' => __( 'Animation Speed', 'happy-elementor-addons' ),
155
+ 'type' => Controls_Manager::NUMBER,
156
+ 'min' => 100,
157
+ 'step' => 10,
158
+ 'max' => 10000,
159
+ 'default' => 300,
160
+ 'description' => __( 'Slide speed in milliseconds', 'happy-elementor-addons' ),
161
+ 'frontend_available' => true,
162
+ ]
163
+ );
164
+
165
+ $this->add_control(
166
+ 'autoplay',
167
+ [
168
+ 'label' => __( 'Autoplay?', 'happy-elementor-addons' ),
169
+ 'type' => Controls_Manager::SWITCHER,
170
+ 'label_on' => __( 'Yes', 'happy-elementor-addons' ),
171
+ 'label_off' => __( 'No', 'happy-elementor-addons' ),
172
+ 'return_value' => 'yes',
173
+ 'default' => 'yes',
174
+ 'frontend_available' => true,
175
+ ]
176
+ );
177
+
178
+ $this->add_control(
179
+ 'autoplay_speed',
180
+ [
181
+ 'label' => __( 'Autoplay Speed', 'happy-elementor-addons' ),
182
+ 'type' => Controls_Manager::NUMBER,
183
+ 'min' => 100,
184
+ 'step' => 100,
185
+ 'max' => 10000,
186
+ 'default' => 3000,
187
+ 'description' => __( 'Autoplay speed in milliseconds', 'happy-elementor-addons' ),
188
+ 'condition' => [
189
+ 'autoplay' => 'yes'
190
+ ],
191
+ 'frontend_available' => true,
192
+ ]
193
+ );
194
+
195
+ $this->add_control(
196
+ 'loop',
197
+ [
198
+ 'label' => __( 'Infinite Loop?', 'happy-elementor-addons' ),
199
+ 'type' => Controls_Manager::SWITCHER,
200
+ 'label_on' => __( 'Yes', 'happy-elementor-addons' ),
201
+ 'label_off' => __( 'No', 'happy-elementor-addons' ),
202
+ 'return_value' => 'yes',
203
+ 'default' => 'yes',
204
+ 'frontend_available' => true,
205
+ ]
206
+ );
207
+
208
+
209
+ $this->add_control(
210
+ 'vertical',
211
+ [
212
+ 'label' => __( 'Vertical Mode?', 'happy-elementor-addons' ),
213
+ 'type' => Controls_Manager::SWITCHER,
214
+ 'label_on' => __( 'Yes', 'happy-elementor-addons' ),
215
+ 'label_off' => __( 'No', 'happy-elementor-addons' ),
216
+ 'return_value' => 'yes',
217
+ 'frontend_available' => true,
218
+ ]
219
+ );
220
+
221
+ $this->add_control(
222
+ 'navigation',
223
+ [
224
+ 'label' => __( 'Navigation', 'happy-elementor-addons' ),
225
+ 'type' => Controls_Manager::SELECT,
226
+ 'options' => [
227
+ 'none' => __( 'None', 'happy-elementor-addons' ),
228
+ 'arrow' => __( 'Arrow', 'happy-elementor-addons' ),
229
+ 'dots' => __( 'Dots', 'happy-elementor-addons' ),
230
+ 'both' => __( 'Arrow & Dots', 'happy-elementor-addons' ),
231
+ ],
232
+ 'default' => 'arrow',
233
+ 'frontend_available' => true,
234
+ ]
235
+ );
236
+
237
+ $this->end_controls_section();
238
+ }
239
+
240
+ protected function register_style_controls() {
241
+ $this->start_controls_section(
242
+ '_section_style_item',
243
+ [
244
+ 'label' => __( 'Slider Item', 'happy-elementor-addons' ),
245
+ 'tab' => Controls_Manager::TAB_STYLE,
246
+ ]
247
+ );
248
+
249
+ $this->add_group_control(
250
+ Group_Control_Border::get_type(),
251
+ [
252
+ 'name' => 'item_border',
253
+ 'selector' => '{{WRAPPER}} .ha-slick-item',
254
+ ]
255
+ );
256
+
257
+ $this->add_responsive_control(
258
+ 'item_border_radius',
259
+ [
260
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
261
+ 'type' => Controls_Manager::DIMENSIONS,
262
+ 'size_units' => [ 'px', '%' ],
263
+ 'selectors' => [
264
+ '{{WRAPPER}} .ha-slick-item' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}; overflow: hidden;',
265
+ ],
266
+ ]
267
+ );
268
+
269
+ $this->end_controls_section();
270
+
271
+ $this->start_controls_section(
272
+ '_section_style_content',
273
+ [
274
+ 'label' => __( 'Slide Content', 'happy-elementor-addons' ),
275
+ 'tab' => Controls_Manager::TAB_STYLE,
276
+ ]
277
+ );
278
+
279
+ $this->add_responsive_control(
280
+ 'content_padding',
281
+ [
282
+ 'label' => __( 'Content Padding', 'happy-elementor-addons' ),
283
+ 'type' => Controls_Manager::DIMENSIONS,
284
+ 'size_units' => [ 'px', 'em', '%' ],
285
+ 'selectors' => [
286
+ '{{WRAPPER}} .ha-slick-content' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
287
+ ],
288
+ ]
289
+ );
290
+
291
+ $this->add_group_control(
292
+ Group_Control_Background::get_type(),
293
+ [
294
+ 'name' => 'content_background',
295
+ 'selector' => '{{WRAPPER}} .ha-slick-content',
296
+ 'exclude' => [
297
+ 'image'
298
+ ]
299
+ ]
300
+ );
301
+
302
+ $this->add_control(
303
+ '_heading_title',
304
+ [
305
+ 'type' => Controls_Manager::HEADING,
306
+ 'label' => __( 'Title', 'happy-elementor-addons' ),
307
+ 'separator' => 'before'
308
+ ]
309
+ );
310
+
311
+ $this->add_responsive_control(
312
+ 'title_spacing',
313
+ [
314
+ 'label' => __( 'Bottom Spacing', 'happy-elementor-addons' ),
315
+ 'type' => Controls_Manager::SLIDER,
316
+ 'size_units' => ['px'],
317
+ 'selectors' => [
318
+ '{{WRAPPER}} .ha-slick-title' => 'margin-bottom: {{SIZE}}{{UNIT}};',
319
+ ],
320
+ ]
321
+ );
322
+
323
+ $this->add_control(
324
+ 'title_color',
325
+ [
326
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
327
+ 'type' => Controls_Manager::COLOR,
328
+ 'selectors' => [
329
+ '{{WRAPPER}} .ha-slick-title' => 'color: {{VALUE}}',
330
+ ],
331
+ ]
332
+ );
333
+
334
+ $this->add_group_control(
335
+ Group_Control_Typography::get_type(),
336
+ [
337
+ 'name' => 'title',
338
+ 'selector' => '{{WRAPPER}} .ha-slick-title',
339
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_2,
340
+ ]
341
+ );
342
+
343
+ $this->add_control(
344
+ '_heading_subtitle',
345
+ [
346
+ 'type' => Controls_Manager::HEADING,
347
+ 'label' => __( 'Subtitle', 'happy-elementor-addons' ),
348
+ 'separator' => 'before'
349
+ ]
350
+ );
351
+
352
+ $this->add_responsive_control(
353
+ 'subtitle_spacing',
354
+ [
355
+ 'label' => __( 'Bottom Spacing', 'happy-elementor-addons' ),
356
+ 'type' => Controls_Manager::SLIDER,
357
+ 'size_units' => ['px'],
358
+ 'selectors' => [
359
+ '{{WRAPPER}} .ha-slick-subtitle' => 'margin-bottom: {{SIZE}}{{UNIT}};',
360
+ ],
361
+ ]
362
+ );
363
+
364
+ $this->add_control(
365
+ 'subtitle_color',
366
+ [
367
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
368
+ 'type' => Controls_Manager::COLOR,
369
+ 'selectors' => [
370
+ '{{WRAPPER}} .ha-slick-subtitle' => 'color: {{VALUE}}',
371
+ ],
372
+ ]
373
+ );
374
+
375
+ $this->add_group_control(
376
+ Group_Control_Typography::get_type(),
377
+ [
378
+ 'name' => 'subtitle',
379
+ 'selector' => '{{WRAPPER}} .ha-slick-subtitle',
380
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3,
381
+ ]
382
+ );
383
+
384
+ $this->end_controls_section();
385
+
386
+ $this->start_controls_section(
387
+ '_section_style_arrow',
388
+ [
389
+ 'label' => __( 'Navigation - Arrow', 'happy-elementor-addons' ),
390
+ 'tab' => Controls_Manager::TAB_STYLE,
391
+ ]
392
+ );
393
+
394
+ $this->add_control(
395
+ 'arrow_position_toggle',
396
+ [
397
+ 'label' => __( 'Position', 'happy-elementor-addons' ),
398
+ 'type' => Controls_Manager::POPOVER_TOGGLE,
399
+ 'label_off' => __( 'None', 'happy-elementor-addons' ),
400
+ 'label_on' => __( 'Custom', 'happy-elementor-addons' ),
401
+ 'return_value' => 'yes',
402
+ ]
403
+ );
404
+
405
+ $this->start_popover();
406
+
407
+ $this->add_responsive_control(
408
+ 'arrow_position_y',
409
+ [
410
+ 'label' => __( 'Vertical', 'happy-elementor-addons' ),
411
+ 'type' => Controls_Manager::SLIDER,
412
+ 'size_units' => ['px'],
413
+ 'condition' => [
414
+ 'arrow_position_toggle' => 'yes'
415
+ ],
416
+ 'range' => [
417
+ 'px' => [
418
+ 'min' => 0,
419
+ 'max' => 500,
420
+ ],
421
+ ],
422
+ 'selectors' => [
423
+ '{{WRAPPER}} .slick-prev, {{WRAPPER}} .slick-next' => 'top: {{SIZE}}{{UNIT}};',
424
+ ],
425
+ ]
426
+ );
427
+
428
+ $this->add_responsive_control(
429
+ 'arrow_position_x',
430
+ [
431
+ 'label' => __( 'Horizontal', 'happy-elementor-addons' ),
432
+ 'type' => Controls_Manager::SLIDER,
433
+ 'size_units' => ['px'],
434
+ 'condition' => [
435
+ 'arrow_position_toggle' => 'yes'
436
+ ],
437
+ 'range' => [
438
+ 'px' => [
439
+ 'min' => -100,
440
+ 'max' => 250,
441
+ ],
442
+ ],
443
+ 'selectors' => [
444
+ '{{WRAPPER}} .slick-prev' => 'left: {{SIZE}}{{UNIT}};',
445
+ '{{WRAPPER}} .slick-next' => 'right: {{SIZE}}{{UNIT}};',
446
+ ],
447
+ ]
448
+ );
449
+
450
+ $this->end_popover();
451
+
452
+ $this->add_group_control(
453
+ Group_Control_Border::get_type(),
454
+ [
455
+ 'name' => 'arrow_border',
456
+ 'selector' => '{{WRAPPER}} .slick-prev, {{WRAPPER}} .slick-next',
457
+ ]
458
+ );
459
+
460
+ $this->add_responsive_control(
461
+ 'arrow_border_radius',
462
+ [
463
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
464
+ 'type' => Controls_Manager::DIMENSIONS,
465
+ 'size_units' => [ 'px', '%' ],
466
+ 'selectors' => [
467
+ '{{WRAPPER}} .slick-prev, {{WRAPPER}} .slick-next' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}; overflow: hidden;',
468
+ ],
469
+ ]
470
+ );
471
+
472
+ $this->start_controls_tabs( '_tabs_arrow' );
473
+
474
+ $this->start_controls_tab(
475
+ '_tab_arrow_normal',
476
+ [
477
+ 'label' => __( 'Normal', 'happy-elementor-addons' ),
478
+ ]
479
+ );
480
+
481
+ $this->add_control(
482
+ 'arrow_color',
483
+ [
484
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
485
+ 'type' => Controls_Manager::COLOR,
486
+ 'default' => '',
487
+ 'selectors' => [
488
+ '{{WRAPPER}} .slick-prev, {{WRAPPER}} .slick-next' => 'color: {{VALUE}};',
489
+ ],
490
+ ]
491
+ );
492
+
493
+ $this->add_control(
494
+ 'arrow_bg_color',
495
+ [
496
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
497
+ 'type' => Controls_Manager::COLOR,
498
+ 'selectors' => [
499
+ '{{WRAPPER}} .slick-prev, {{WRAPPER}} .slick-next' => 'background-color: {{VALUE}};',
500
+ ],
501
+ ]
502
+ );
503
+
504
+ $this->end_controls_tab();
505
+
506
+ $this->start_controls_tab(
507
+ '_tab_arrow_hover',
508
+ [
509
+ 'label' => __( 'Hover', 'happy-elementor-addons' ),
510
+ ]
511
+ );
512
+
513
+ $this->add_control(
514
+ 'arrow_hover_color',
515
+ [
516
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
517
+ 'type' => Controls_Manager::COLOR,
518
+ 'selectors' => [
519
+ '{{WRAPPER}} .slick-prev:hover, {{WRAPPER}} .slick-next:hover' => 'color: {{VALUE}};',
520
+ ],
521
+ ]
522
+ );
523
+
524
+ $this->add_control(
525
+ 'arrow_hover_bg_color',
526
+ [
527
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
528
+ 'type' => Controls_Manager::COLOR,
529
+ 'selectors' => [
530
+ '{{WRAPPER}} .slick-prev:hover, {{WRAPPER}} .slick-next:hover' => 'background-color: {{VALUE}};',
531
+ ],
532
+ ]
533
+ );
534
+
535
+ $this->add_control(
536
+ 'arrow_hover_border_color',
537
+ [
538
+ 'label' => __( 'Border Color', 'happy-elementor-addons' ),
539
+ 'type' => Controls_Manager::COLOR,
540
+ 'condition' => [
541
+ 'arrow_border_border!' => '',
542
+ ],
543
+ 'selectors' => [
544
+ '{{WRAPPER}} .slick-prev:hover, {{WRAPPER}} .slick-next:hover' => 'border-color: {{VALUE}};',
545
+ ],
546
+ ]
547
+ );
548
+
549
+ $this->end_controls_tab();
550
+ $this->end_controls_tabs();
551
+
552
+ $this->end_controls_section();
553
+
554
+ $this->start_controls_section(
555
+ '_section_style_dots',
556
+ [
557
+ 'label' => __( 'Navigation - Dots', 'happy-elementor-addons' ),
558
+ 'tab' => Controls_Manager::TAB_STYLE,
559
+ ]
560
+ );
561
+
562
+ $this->add_responsive_control(
563
+ 'dots_nav_position_y',
564
+ [
565
+ 'label' => __( 'Vertical Position', 'happy-elementor-addons' ),
566
+ 'type' => Controls_Manager::SLIDER,
567
+ 'size_units' => ['px'],
568
+ 'range' => [
569
+ 'px' => [
570
+ 'min' => -100,
571
+ 'max' => 500,
572
+ ],
573
+ ],
574
+ 'selectors' => [
575
+ '{{WRAPPER}} .slick-dots' => 'bottom: {{SIZE}}{{UNIT}};',
576
+ ],
577
+ ]
578
+ );
579
+
580
+ $this->add_responsive_control(
581
+ 'dots_nav_spacing',
582
+ [
583
+ 'label' => __( 'Spacing', 'happy-elementor-addons' ),
584
+ 'type' => Controls_Manager::SLIDER,
585
+ 'size_units' => ['px'],
586
+ 'selectors' => [
587
+ '{{WRAPPER}} .slick-dots li' => 'margin-right: calc({{SIZE}}{{UNIT}} / 2); margin-left: calc({{SIZE}}{{UNIT}} / 2);',
588
+ ],
589
+ ]
590
+ );
591
+
592
+ $this->add_responsive_control(
593
+ 'dots_nav_align',
594
+ [
595
+ 'label' => __( 'Alignment', 'happy-elementor-addons' ),
596
+ 'type' => Controls_Manager::CHOOSE,
597
+ 'label_block' => false,
598
+ 'options' => [
599
+ 'left' => [
600
+ 'title' => __( 'Left', 'happy-elementor-addons' ),
601
+ 'icon' => 'eicon-h-align-left',
602
+ ],
603
+ 'center' => [
604
+ 'title' => __( 'Center', 'happy-elementor-addons' ),
605
+ 'icon' => 'eicon-h-align-center',
606
+ ],
607
+ 'right' => [
608
+ 'title' => __( 'Right', 'happy-elementor-addons' ),
609
+ 'icon' => 'eicon-h-align-right',
610
+ ],
611
+ ],
612
+ 'toggle' => true,
613
+ 'selectors' => [
614
+ '{{WRAPPER}} .slick-dots' => 'text-align: {{VALUE}}'
615
+ ]
616
+ ]
617
+ );
618
+
619
+ $this->start_controls_tabs( '_tabs_dots' );
620
+ $this->start_controls_tab(
621
+ '_tab_dots_normal',
622
+ [
623
+ 'label' => __( 'Normal', 'happy-elementor-addons' ),
624
+ ]
625
+ );
626
+
627
+ $this->add_control(
628
+ 'dots_nav_color',
629
+ [
630
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
631
+ 'type' => Controls_Manager::COLOR,
632
+ 'selectors' => [
633
+ '{{WRAPPER}} .slick-dots li button:before' => 'color: {{VALUE}};',
634
+ ],
635
+ ]
636
+ );
637
+
638
+ $this->end_controls_tab();
639
+
640
+ $this->start_controls_tab(
641
+ '_tab_dots_hover',
642
+ [
643
+ 'label' => __( 'Hover', 'happy-elementor-addons' ),
644
+ ]
645
+ );
646
+
647
+ $this->add_control(
648
+ 'dots_nav_hover_color',
649
+ [
650
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
651
+ 'type' => Controls_Manager::COLOR,
652
+ 'selectors' => [
653
+ '{{WRAPPER}} .slick-dots li button:hover:before' => 'color: {{VALUE}};',
654
+ ],
655
+ ]
656
+ );
657
+
658
+ $this->end_controls_tab();
659
+
660
+ $this->start_controls_tab(
661
+ '_tab_dots_active',
662
+ [
663
+ 'label' => __( 'Active', 'happy-elementor-addons' ),
664
+ ]
665
+ );
666
+
667
+ $this->add_control(
668
+ 'dots_nav_active_color',
669
+ [
670
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
671
+ 'type' => Controls_Manager::COLOR,
672
+ 'selectors' => [
673
+ '{{WRAPPER}} .slick-dots .slick-active button:before' => 'color: {{VALUE}};',
674
+ ],
675
+ ]
676
+ );
677
+
678
+ $this->end_controls_tab();
679
+ $this->end_controls_tabs();
680
+
681
+ $this->end_controls_section();
682
+ }
683
+
684
+ protected function render() {
685
+ $settings = $this->get_settings_for_display();
686
+
687
+ if ( empty( $settings['slides'] ) ) {
688
+ return;
689
+ }
690
+ ?>
691
+
692
+ <div class="hajs-slick ha-slick ha-slick--slider">
693
+
694
+ <?php foreach ( $settings['slides'] as $slide ) :
695
+ $image = wp_get_attachment_image_url( $slide['image']['id'], $settings['thumbnail_size'] );
696
+ if ( ! $image ) {
697
+ $image = $slide['image']['url'];
698
+ }
699
+ ?>
700
+
701
+ <div class="ha-slick-slide">
702
+ <div class="ha-slick-item">
703
+ <?php if ( $image ) : ?>
704
+ <img class="ha-slick-img" src="<?php echo esc_url( $image ); ?>" alt="<?php echo esc_attr( $slide['title'] ); ?>">
705
+ <?php endif; ?>
706
+
707
+ <?php if ( $slide['title'] || $slide['subtitle'] ) : ?>
708
+ <div class="ha-slick-content">
709
+ <?php if ( $slide['title'] ) : ?>
710
+ <h2 class="ha-slick-title"><?php echo esc_html( $slide['title'] ); ?></h2>
711
+ <?php endif; ?>
712
+ <?php if ( $slide['subtitle'] ) : ?>
713
+ <p class="ha-slick-subtitle"><?php echo esc_html( $slide['subtitle'] ); ?></p>
714
+ <?php endif; ?>
715
+ </div>
716
+ <?php endif; ?>
717
+ </div>
718
+ </div>
719
+
720
+ <?php endforeach; ?>
721
+
722
+ </div>
723
+
724
+ <?php
725
+ }
726
+ }
widgets/testimonial/widget.php CHANGED
@@ -345,7 +345,7 @@ class Testimonial extends Base {
345
  $this->start_controls_section(
346
  '_section_style_reviewer',
347
  [
348
- 'label' => __( 'Reviewer Data', 'happy-elementor-addons' ),
349
  'tab' => Controls_Manager::TAB_STYLE,
350
  ]
351
  );
@@ -396,7 +396,7 @@ class Testimonial extends Base {
396
  [
397
  'label' => __( 'Title', 'happy-elementor-addons' ),
398
  'type' => Controls_Manager::HEADING,
399
- 'separator' => 'after',
400
  ]
401
  );
402
 
345
  $this->start_controls_section(
346
  '_section_style_reviewer',
347
  [
348
+ 'label' => __( 'Reviewer', 'happy-elementor-addons' ),
349
  'tab' => Controls_Manager::TAB_STYLE,
350
  ]
351
  );
396
  [
397
  'label' => __( 'Title', 'happy-elementor-addons' ),
398
  'type' => Controls_Manager::HEADING,
399
+ 'separator' => 'before',
400
  ]
401
  );
402
 
widgets/weform/widget.php CHANGED
@@ -11,6 +11,7 @@ use Elementor\Group_Control_Border;
11
  use Elementor\Group_Control_Box_Shadow;
12
  use Elementor\Group_Control_Text_Shadow;
13
  use Elementor\Group_Control_Typography;
 
14
 
15
  defined( 'ABSPATH' ) || die();
16
 
@@ -167,6 +168,7 @@ class WeForm extends Base {
167
  'name' => 'field_typography',
168
  'label' => __( 'Typography', 'happy-elementor-addons' ),
169
  'selector' => '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields input:not(.weforms_submit_btn), .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields textarea',
 
170
  ]
171
  );
172
 
@@ -321,6 +323,7 @@ class WeForm extends Base {
321
  'name' => 'label_typography',
322
  'label' => __( 'Label Typography', 'happy-elementor-addons' ),
323
  'selector' => '{{WRAPPER}} .wpuf-label label, {{WRAPPER}} .wpuf-form-sub-label',
 
324
  ]
325
  );
326
 
@@ -330,6 +333,7 @@ class WeForm extends Base {
330
  'name' => 'desc_typography',
331
  'label' => __( 'Help Text Typography', 'happy-elementor-addons' ),
332
  'selector' => '{{WRAPPER}} .wpuf-fields .wpuf-help',
 
333
  ]
334
  );
335
 
@@ -477,6 +481,7 @@ class WeForm extends Base {
477
  [
478
  'name' => 'submit_typography',
479
  'selector' => '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]',
 
480
  ]
481
  );
482
 
11
  use Elementor\Group_Control_Box_Shadow;
12
  use Elementor\Group_Control_Text_Shadow;
13
  use Elementor\Group_Control_Typography;
14
+ use Elementor\Scheme_Typography;
15
 
16
  defined( 'ABSPATH' ) || die();
17
 
168
  'name' => 'field_typography',
169
  'label' => __( 'Typography', 'happy-elementor-addons' ),
170
  'selector' => '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields input:not(.weforms_submit_btn), .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields textarea',
171
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3
172
  ]
173
  );
174
 
323
  'name' => 'label_typography',
324
  'label' => __( 'Label Typography', 'happy-elementor-addons' ),
325
  'selector' => '{{WRAPPER}} .wpuf-label label, {{WRAPPER}} .wpuf-form-sub-label',
326
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3
327
  ]
328
  );
329
 
333
  'name' => 'desc_typography',
334
  'label' => __( 'Help Text Typography', 'happy-elementor-addons' ),
335
  'selector' => '{{WRAPPER}} .wpuf-fields .wpuf-help',
336
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3
337
  ]
338
  );
339
 
481
  [
482
  'name' => 'submit_typography',
483
  'selector' => '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]',
484
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_4
485
  ]
486
  );
487
 
widgets/wpform/widget.php CHANGED
@@ -10,6 +10,7 @@ use Elementor\Controls_Manager;
10
  use Elementor\Group_Control_Border;
11
  use Elementor\Group_Control_Box_Shadow;
12
  use Elementor\Group_Control_Typography;
 
13
 
14
  defined( 'ABSPATH' ) || die();
15
 
@@ -134,6 +135,7 @@ class WPForm extends Base {
134
  'name' => 'field_typography',
135
  'label' => __( 'Typography', 'happy-elementor-addons' ),
136
  'selector' => '{{WRAPPER}} .wpforms-field input, {{WRAPPER}} .wpforms-field-textarea textarea',
 
137
  ]
138
  );
139
 
@@ -287,6 +289,7 @@ class WPForm extends Base {
287
  'name' => 'label_typography',
288
  'label' => __( 'Label Typography', 'happy-elementor-addons' ),
289
  'selector' => '{{WRAPPER}} .wpforms-field-container label.wpforms-field-label',
 
290
  ]
291
  );
292
 
@@ -296,6 +299,7 @@ class WPForm extends Base {
296
  'name' => 'sublabel_typography',
297
  'label' => __( 'Sub Label Typography', 'happy-elementor-addons' ),
298
  'selector' => '{{WRAPPER}} .wpforms-field-sublabel',
 
299
  ]
300
  );
301
 
@@ -305,6 +309,7 @@ class WPForm extends Base {
305
  'name' => 'desc_typography',
306
  'label' => __( 'Description Typography', 'happy-elementor-addons' ),
307
  'selector' => '{{WRAPPER}} .wpforms-field-description',
 
308
  ]
309
  );
310
 
@@ -491,6 +496,7 @@ class WPForm extends Base {
491
  [
492
  'name' => 'submit_typography',
493
  'selector' => '{{WRAPPER}} .wpforms-submit',
 
494
  ]
495
  );
496
 
10
  use Elementor\Group_Control_Border;
11
  use Elementor\Group_Control_Box_Shadow;
12
  use Elementor\Group_Control_Typography;
13
+ use Elementor\Scheme_Typography;
14
 
15
  defined( 'ABSPATH' ) || die();
16
 
135
  'name' => 'field_typography',
136
  'label' => __( 'Typography', 'happy-elementor-addons' ),
137
  'selector' => '{{WRAPPER}} .wpforms-field input, {{WRAPPER}} .wpforms-field-textarea textarea',
138
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3
139
  ]
140
  );
141
 
289
  'name' => 'label_typography',
290
  'label' => __( 'Label Typography', 'happy-elementor-addons' ),
291
  'selector' => '{{WRAPPER}} .wpforms-field-container label.wpforms-field-label',
292
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3
293
  ]
294
  );
295
 
299
  'name' => 'sublabel_typography',
300
  'label' => __( 'Sub Label Typography', 'happy-elementor-addons' ),
301
  'selector' => '{{WRAPPER}} .wpforms-field-sublabel',
302
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3
303
  ]
304
  );
305
 
309
  'name' => 'desc_typography',
310
  'label' => __( 'Description Typography', 'happy-elementor-addons' ),
311
  'selector' => '{{WRAPPER}} .wpforms-field-description',
312
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3
313
  ]
314
  );
315
 
496
  [
497
  'name' => 'submit_typography',
498
  'selector' => '{{WRAPPER}} .wpforms-submit',
499
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_4
500
  ]
501
  );
502