PBWR commited on
Commit
e84331d
·
verified ·
1 Parent(s): ff3ba2e

Upload 121 files

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +7 -0
  2. Readme.txt +6 -0
  3. assets/css/main.css +1846 -0
  4. assets/img/about-2.jpg +3 -0
  5. assets/img/about.jpg +3 -0
  6. assets/img/apple-touch-icon.png +0 -0
  7. assets/img/clients/client-1.png +0 -0
  8. assets/img/clients/client-2.png +0 -0
  9. assets/img/clients/client-3.png +0 -0
  10. assets/img/clients/client-4.png +0 -0
  11. assets/img/clients/client-5.png +0 -0
  12. assets/img/clients/client-6.png +0 -0
  13. assets/img/favicon.png +0 -0
  14. assets/img/hero-bg.jpg +3 -0
  15. assets/img/logo.png +0 -0
  16. assets/img/page-title-bg.webp +0 -0
  17. assets/img/portfolio/app-1.jpg +0 -0
  18. assets/img/portfolio/app-2.jpg +0 -0
  19. assets/img/portfolio/app-3.jpg +0 -0
  20. assets/img/portfolio/books-1.jpg +0 -0
  21. assets/img/portfolio/books-2.jpg +0 -0
  22. assets/img/portfolio/books-3.jpg +0 -0
  23. assets/img/portfolio/branding-1.jpg +0 -0
  24. assets/img/portfolio/branding-2.jpg +0 -0
  25. assets/img/portfolio/branding-3.jpg +0 -0
  26. assets/img/portfolio/product-1.jpg +0 -0
  27. assets/img/portfolio/product-2.jpg +0 -0
  28. assets/img/portfolio/product-3.jpg +0 -0
  29. assets/img/services-1.jpg +0 -0
  30. assets/img/services-2.jpg +0 -0
  31. assets/img/services-3.jpg +0 -0
  32. assets/img/services.jpg +0 -0
  33. assets/img/team/team-1.jpg +0 -0
  34. assets/img/team/team-2.jpg +0 -0
  35. assets/img/team/team-3.jpg +0 -0
  36. assets/img/testimonials-bg.jpg +3 -0
  37. assets/img/testimonials/testimonials-1.jpg +0 -0
  38. assets/img/testimonials/testimonials-2.jpg +0 -0
  39. assets/img/testimonials/testimonials-3.jpg +0 -0
  40. assets/img/testimonials/testimonials-4.jpg +0 -0
  41. assets/img/testimonials/testimonials-5.jpg +0 -0
  42. assets/img/working-1.jpg +3 -0
  43. assets/img/working-2.jpg +0 -0
  44. assets/img/working-3.jpg +0 -0
  45. assets/img/working-4.jpg +0 -0
  46. assets/js/main.js +209 -0
  47. assets/scss/Readme.txt +2 -0
  48. assets/vendor/aos/aos.cjs.js +614 -0
  49. assets/vendor/aos/aos.css +1 -0
  50. assets/vendor/aos/aos.esm.js +610 -0
.gitattributes CHANGED
@@ -33,3 +33,10 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ assets/img/about-2.jpg filter=lfs diff=lfs merge=lfs -text
37
+ assets/img/about.jpg filter=lfs diff=lfs merge=lfs -text
38
+ assets/img/hero-bg.jpg filter=lfs diff=lfs merge=lfs -text
39
+ assets/img/testimonials-bg.jpg filter=lfs diff=lfs merge=lfs -text
40
+ assets/img/working-1.jpg filter=lfs diff=lfs merge=lfs -text
41
+ assets/vendor/bootstrap-icons/fonts/bootstrap-icons.woff filter=lfs diff=lfs merge=lfs -text
42
+ assets/vendor/bootstrap-icons/fonts/bootstrap-icons.woff2 filter=lfs diff=lfs merge=lfs -text
Readme.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ Thanks for downloading this template!
2
+
3
+ Template Name: Dewi
4
+ Template URL: https://bootstrapmade.com/dewi-free-multi-purpose-html-template/
5
+ Author: BootstrapMade.com
6
+ License: https://bootstrapmade.com/license/
assets/css/main.css ADDED
@@ -0,0 +1,1846 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Template Name: Dewi
3
+ * Template URL: https://bootstrapmade.com/dewi-free-multi-purpose-html-template/
4
+ * Updated: Aug 07 2024 with Bootstrap v5.3.3
5
+ * Author: BootstrapMade.com
6
+ * License: https://bootstrapmade.com/license/
7
+ */
8
+
9
+ /*--------------------------------------------------------------
10
+ # Font & Color Variables
11
+ # Help: https://bootstrapmade.com/color-system/
12
+ --------------------------------------------------------------*/
13
+ /* Fonts */
14
+ :root {
15
+ --default-font: "Roboto", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
16
+ --heading-font: "Raleway", sans-serif;
17
+ --nav-font: "Inter", sans-serif;
18
+ }
19
+
20
+ /* Global Colors - The following color variables are used throughout the website. Updating them here will change the color scheme of the entire website */
21
+ :root {
22
+ --background-color: #ffffff; /* Background color for the entire website, including individual sections */
23
+ --default-color: #444444; /* Default color used for the majority of the text content across the entire website */
24
+ --heading-color: #273d4e; /* Color for headings, subheadings and title throughout the website */
25
+ --accent-color: #ff4a17; /* Accent color that represents your brand on the website. It's used for buttons, links, and other elements that need to stand out */
26
+ --surface-color: #ffffff; /* The surface color is used as a background of boxed elements within sections, such as cards, icon boxes, or other elements that require a visual separation from the global background. */
27
+ --contrast-color: #ffffff; /* Contrast color for text, ensuring readability against backgrounds of accent, heading, or default colors. */
28
+ }
29
+
30
+ /* Nav Menu Colors - The following color variables are used specifically for the navigation menu. They are separate from the global colors to allow for more customization options */
31
+ :root {
32
+ --nav-color: #e5eaee; /* The default color of the main navmenu links */
33
+ --nav-hover-color: #ff4a17; /* Applied to main navmenu links when they are hovered over or active */
34
+ --nav-mobile-background-color: #ffffff; /* Used as the background color for mobile navigation menu */
35
+ --nav-dropdown-background-color: #ffffff; /* Used as the background color for dropdown items that appear when hovering over primary navigation items */
36
+ --nav-dropdown-color: #444444; /* Used for navigation links of the dropdown items in the navigation menu. */
37
+ --nav-dropdown-hover-color: #ff4a17; /* Similar to --nav-hover-color, this color is applied to dropdown navigation links when they are hovered over. */
38
+ }
39
+
40
+ /* Color Presets - These classes override global colors when applied to any section or element, providing reuse of the sam color scheme. */
41
+
42
+ .light-background {
43
+ --background-color: #f1f4fa;
44
+ --surface-color: #ffffff;
45
+ }
46
+
47
+ .dark-background {
48
+ --background-color: #000910;
49
+ --default-color: #ffffff;
50
+ --heading-color: #ffffff;
51
+ --surface-color: #28323a;
52
+ --contrast-color: #ffffff;
53
+ }
54
+
55
+ /* Smooth scroll */
56
+ :root {
57
+ scroll-behavior: smooth;
58
+ }
59
+
60
+ /*--------------------------------------------------------------
61
+ # General Styling & Shared Classes
62
+ --------------------------------------------------------------*/
63
+ body {
64
+ color: var(--default-color);
65
+ background-color: var(--background-color);
66
+ font-family: var(--default-font);
67
+ }
68
+
69
+ a {
70
+ color: var(--accent-color);
71
+ text-decoration: none;
72
+ transition: 0.3s;
73
+ }
74
+
75
+ a:hover {
76
+ color: color-mix(in srgb, var(--accent-color), transparent 25%);
77
+ text-decoration: none;
78
+ }
79
+
80
+ h1,
81
+ h2,
82
+ h3,
83
+ h4,
84
+ h5,
85
+ h6 {
86
+ color: var(--heading-color);
87
+ font-family: var(--heading-font);
88
+ }
89
+
90
+ /* PHP Email Form Messages
91
+ ------------------------------*/
92
+ .php-email-form .error-message {
93
+ display: none;
94
+ background: #df1529;
95
+ color: #ffffff;
96
+ text-align: left;
97
+ padding: 15px;
98
+ margin-bottom: 24px;
99
+ font-weight: 600;
100
+ }
101
+
102
+ .php-email-form .sent-message {
103
+ display: none;
104
+ color: #ffffff;
105
+ background: #059652;
106
+ text-align: center;
107
+ padding: 15px;
108
+ margin-bottom: 24px;
109
+ font-weight: 600;
110
+ }
111
+
112
+ .php-email-form .loading {
113
+ display: none;
114
+ background: var(--surface-color);
115
+ text-align: center;
116
+ padding: 15px;
117
+ margin-bottom: 24px;
118
+ }
119
+
120
+ .php-email-form .loading:before {
121
+ content: "";
122
+ display: inline-block;
123
+ border-radius: 50%;
124
+ width: 24px;
125
+ height: 24px;
126
+ margin: 0 10px -6px 0;
127
+ border: 3px solid var(--accent-color);
128
+ border-top-color: var(--surface-color);
129
+ animation: php-email-form-loading 1s linear infinite;
130
+ }
131
+
132
+ @keyframes php-email-form-loading {
133
+ 0% {
134
+ transform: rotate(0deg);
135
+ }
136
+
137
+ 100% {
138
+ transform: rotate(360deg);
139
+ }
140
+ }
141
+
142
+ /* Pulsating Play Button
143
+ ------------------------------*/
144
+ .pulsating-play-btn {
145
+ width: 94px;
146
+ height: 94px;
147
+ background: radial-gradient(var(--accent-color) 50%, color-mix(in srgb, var(--accent-color), transparent 75%) 52%);
148
+ border-radius: 50%;
149
+ display: block;
150
+ position: relative;
151
+ overflow: hidden;
152
+ }
153
+
154
+ .pulsating-play-btn:before {
155
+ content: "";
156
+ position: absolute;
157
+ width: 120px;
158
+ height: 120px;
159
+ animation-delay: 0s;
160
+ animation: pulsate-play-btn 2s;
161
+ animation-direction: forwards;
162
+ animation-iteration-count: infinite;
163
+ animation-timing-function: steps;
164
+ opacity: 1;
165
+ border-radius: 50%;
166
+ border: 5px solid color-mix(in srgb, var(--accent-color), transparent 30%);
167
+ top: -15%;
168
+ left: -15%;
169
+ background: rgba(198, 16, 0, 0);
170
+ }
171
+
172
+ .pulsating-play-btn:after {
173
+ content: "";
174
+ position: absolute;
175
+ left: 50%;
176
+ top: 50%;
177
+ transform: translateX(-40%) translateY(-50%);
178
+ width: 0;
179
+ height: 0;
180
+ border-top: 10px solid transparent;
181
+ border-bottom: 10px solid transparent;
182
+ border-left: 15px solid #fff;
183
+ z-index: 100;
184
+ transition: all 400ms cubic-bezier(0.55, 0.055, 0.675, 0.19);
185
+ }
186
+
187
+ .pulsating-play-btn:hover:before {
188
+ content: "";
189
+ position: absolute;
190
+ left: 50%;
191
+ top: 50%;
192
+ transform: translateX(-40%) translateY(-50%);
193
+ width: 0;
194
+ height: 0;
195
+ border: none;
196
+ border-top: 10px solid transparent;
197
+ border-bottom: 10px solid transparent;
198
+ border-left: 15px solid #fff;
199
+ z-index: 200;
200
+ animation: none;
201
+ border-radius: 0;
202
+ }
203
+
204
+ .pulsating-play-btn:hover:after {
205
+ border-left: 15px solid var(--accent-color);
206
+ transform: scale(20);
207
+ }
208
+
209
+ @keyframes pulsate-play-btn {
210
+ 0% {
211
+ transform: scale(0.6, 0.6);
212
+ opacity: 1;
213
+ }
214
+
215
+ 100% {
216
+ transform: scale(1, 1);
217
+ opacity: 0;
218
+ }
219
+ }
220
+
221
+ /*--------------------------------------------------------------
222
+ # Global Header
223
+ --------------------------------------------------------------*/
224
+ .header {
225
+ --background-color: rgba(0, 0, 0, 0);
226
+ --default-color: #ffffff;
227
+ --heading-color: #ffffff;
228
+ color: var(--default-color);
229
+ background-color: var(--background-color);
230
+ padding: 20px 0;
231
+ transition: all 0.5s;
232
+ z-index: 997;
233
+ }
234
+
235
+ .header .logo {
236
+ line-height: 1;
237
+ }
238
+
239
+ .header .logo img {
240
+ max-height: 36px;
241
+ margin-right: 8px;
242
+ }
243
+
244
+ .header .logo h1 {
245
+ font-size: 30px;
246
+ margin: 0;
247
+ font-weight: 700;
248
+ color: var(--heading-color);
249
+ }
250
+
251
+ .header .cta-btn,
252
+ .header .cta-btn:focus {
253
+ color: var(--contrast-color);
254
+ font-size: 13px;
255
+ padding: 7px 25px;
256
+ margin: 0 0 0 30px;
257
+ border-radius: 4px;
258
+ transition: 0.3s;
259
+ text-transform: uppercase;
260
+ border: 2px solid var(--contrast-color);
261
+ }
262
+
263
+ .header .cta-btn:hover,
264
+ .header .cta-btn:focus:hover {
265
+ color: var(--contrast-color);
266
+ background: var(--accent-color);
267
+ border-color: var(--accent-color);
268
+ }
269
+
270
+ @media (max-width: 1200px) {
271
+ .header .logo {
272
+ order: 1;
273
+ }
274
+
275
+ .header .cta-btn {
276
+ order: 2;
277
+ margin: 0 15px 0 0;
278
+ padding: 6px 15px;
279
+ }
280
+
281
+ .header .navmenu {
282
+ order: 3;
283
+ }
284
+ }
285
+
286
+ .scrolled .header {
287
+ box-shadow: 0px 0 18px rgba(0, 0, 0, 0.1);
288
+ }
289
+
290
+ /* Global Header on Scroll
291
+ ------------------------------*/
292
+ .scrolled .header {
293
+ --background-color: rgba(21, 34, 43, 0.85);
294
+ }
295
+
296
+ /*--------------------------------------------------------------
297
+ # Navigation Menu
298
+ --------------------------------------------------------------*/
299
+ /* Desktop Navigation */
300
+ @media (min-width: 1200px) {
301
+ .navmenu {
302
+ padding: 0;
303
+ }
304
+
305
+ .navmenu ul {
306
+ margin: 0;
307
+ padding: 0;
308
+ display: flex;
309
+ list-style: none;
310
+ align-items: center;
311
+ }
312
+
313
+ .navmenu li {
314
+ position: relative;
315
+ }
316
+
317
+ .navmenu>ul>li {
318
+ white-space: nowrap;
319
+ padding: 15px 14px;
320
+ }
321
+
322
+ .navmenu>ul>li:last-child {
323
+ padding-right: 0;
324
+ }
325
+
326
+ .navmenu a,
327
+ .navmenu a:focus {
328
+ color: var(--nav-color);
329
+ font-size: 13px;
330
+ padding: 0 2px;
331
+ font-family: var(--nav-font);
332
+ font-weight: 500;
333
+ display: flex;
334
+ align-items: center;
335
+ justify-content: space-between;
336
+ white-space: nowrap;
337
+ transition: 0.3s;
338
+ position: relative;
339
+ text-transform: uppercase;
340
+ }
341
+
342
+ .navmenu a i,
343
+ .navmenu a:focus i {
344
+ font-size: 12px;
345
+ line-height: 0;
346
+ margin-left: 5px;
347
+ transition: 0.3s;
348
+ }
349
+
350
+ .navmenu>ul>li>a:before {
351
+ content: "";
352
+ position: absolute;
353
+ height: 2px;
354
+ bottom: -6px;
355
+ left: 0;
356
+ background-color: var(--nav-hover-color);
357
+ visibility: hidden;
358
+ width: 0px;
359
+ transition: all 0.3s ease-in-out 0s;
360
+ }
361
+
362
+ .navmenu a:hover:before,
363
+ .navmenu li:hover>a:before,
364
+ .navmenu .active:before {
365
+ visibility: visible;
366
+ width: 100%;
367
+ }
368
+
369
+ .navmenu li:hover>a,
370
+ .navmenu .active,
371
+ .navmenu .active:focus {
372
+ color: color-mix(in srgb, var(--nav-color) 90%, white 15%);
373
+ }
374
+
375
+ .navmenu .dropdown ul {
376
+ margin: 0;
377
+ padding: 10px 0;
378
+ background: var(--nav-dropdown-background-color);
379
+ display: block;
380
+ position: absolute;
381
+ visibility: hidden;
382
+ left: 14px;
383
+ top: 130%;
384
+ opacity: 0;
385
+ transition: 0.3s;
386
+ border-radius: 4px;
387
+ z-index: 99;
388
+ box-shadow: 0px 0px 30px rgba(0, 0, 0, 0.1);
389
+ }
390
+
391
+ .navmenu .dropdown ul li {
392
+ min-width: 200px;
393
+ }
394
+
395
+ .navmenu .dropdown ul a {
396
+ padding: 10px 20px;
397
+ font-size: 15px;
398
+ text-transform: none;
399
+ color: var(--nav-dropdown-color);
400
+ }
401
+
402
+ .navmenu .dropdown ul a i {
403
+ font-size: 12px;
404
+ }
405
+
406
+ .navmenu .dropdown ul a:hover,
407
+ .navmenu .dropdown ul .active:hover,
408
+ .navmenu .dropdown ul li:hover>a {
409
+ color: var(--nav-dropdown-hover-color);
410
+ }
411
+
412
+ .navmenu .dropdown:hover>ul {
413
+ opacity: 1;
414
+ top: 100%;
415
+ visibility: visible;
416
+ }
417
+
418
+ .navmenu .dropdown .dropdown ul {
419
+ top: 0;
420
+ left: -90%;
421
+ visibility: hidden;
422
+ }
423
+
424
+ .navmenu .dropdown .dropdown:hover>ul {
425
+ opacity: 1;
426
+ top: 0;
427
+ left: -100%;
428
+ visibility: visible;
429
+ }
430
+ }
431
+
432
+ /* Mobile Navigation */
433
+ @media (max-width: 1199px) {
434
+ .mobile-nav-toggle {
435
+ color: var(--nav-color);
436
+ font-size: 28px;
437
+ line-height: 0;
438
+ margin-right: 10px;
439
+ cursor: pointer;
440
+ transition: color 0.3s;
441
+ }
442
+
443
+ .navmenu {
444
+ padding: 0;
445
+ z-index: 9997;
446
+ }
447
+
448
+ .navmenu ul {
449
+ display: none;
450
+ list-style: none;
451
+ position: absolute;
452
+ inset: 60px 20px 20px 20px;
453
+ padding: 10px 0;
454
+ margin: 0;
455
+ border-radius: 6px;
456
+ background-color: var(--nav-mobile-background-color);
457
+ border: 1px solid color-mix(in srgb, var(--default-color), transparent 90%);
458
+ box-shadow: none;
459
+ overflow-y: auto;
460
+ transition: 0.3s;
461
+ z-index: 9998;
462
+ }
463
+
464
+ .navmenu a,
465
+ .navmenu a:focus {
466
+ color: var(--nav-dropdown-color);
467
+ padding: 10px 20px;
468
+ font-family: var(--nav-font);
469
+ font-size: 17px;
470
+ font-weight: 500;
471
+ display: flex;
472
+ align-items: center;
473
+ justify-content: space-between;
474
+ white-space: nowrap;
475
+ transition: 0.3s;
476
+ }
477
+
478
+ .navmenu a i,
479
+ .navmenu a:focus i {
480
+ font-size: 12px;
481
+ line-height: 0;
482
+ margin-left: 5px;
483
+ width: 30px;
484
+ height: 30px;
485
+ display: flex;
486
+ align-items: center;
487
+ justify-content: center;
488
+ border-radius: 50%;
489
+ transition: 0.3s;
490
+ background-color: color-mix(in srgb, var(--accent-color), transparent 90%);
491
+ }
492
+
493
+ .navmenu a i:hover,
494
+ .navmenu a:focus i:hover {
495
+ background-color: var(--accent-color);
496
+ color: var(--contrast-color);
497
+ }
498
+
499
+ .navmenu a:hover,
500
+ .navmenu .active,
501
+ .navmenu .active:focus {
502
+ color: var(--nav-dropdown-hover-color);
503
+ }
504
+
505
+ .navmenu .active i,
506
+ .navmenu .active:focus i {
507
+ background-color: var(--accent-color);
508
+ color: var(--contrast-color);
509
+ transform: rotate(180deg);
510
+ }
511
+
512
+ .navmenu .dropdown ul {
513
+ position: static;
514
+ display: none;
515
+ z-index: 99;
516
+ padding: 10px 0;
517
+ margin: 10px 20px;
518
+ background-color: var(--nav-dropdown-background-color);
519
+ transition: all 0.5s ease-in-out;
520
+ }
521
+
522
+ .navmenu .dropdown ul ul {
523
+ background-color: rgba(33, 37, 41, 0.1);
524
+ }
525
+
526
+ .navmenu .dropdown>.dropdown-active {
527
+ display: block;
528
+ background-color: rgba(33, 37, 41, 0.03);
529
+ }
530
+
531
+ .mobile-nav-active {
532
+ overflow: hidden;
533
+ }
534
+
535
+ .mobile-nav-active .mobile-nav-toggle {
536
+ color: #fff;
537
+ position: absolute;
538
+ font-size: 32px;
539
+ top: 15px;
540
+ right: 15px;
541
+ margin-right: 0;
542
+ z-index: 9999;
543
+ }
544
+
545
+ .mobile-nav-active .navmenu {
546
+ position: fixed;
547
+ overflow: hidden;
548
+ inset: 0;
549
+ background: rgba(33, 37, 41, 0.8);
550
+ transition: 0.3s;
551
+ }
552
+
553
+ .mobile-nav-active .navmenu>ul {
554
+ display: block;
555
+ }
556
+ }
557
+
558
+ /*--------------------------------------------------------------
559
+ # Global Footer
560
+ --------------------------------------------------------------*/
561
+ .footer {
562
+ color: var(--default-color);
563
+ background-color: var(--background-color);
564
+ font-size: 14px;
565
+ position: relative;
566
+ }
567
+
568
+ .footer .footer-top {
569
+ padding-top: 50px;
570
+ border-top: 1px solid color-mix(in srgb, var(--default-color), transparent 90%);
571
+ }
572
+
573
+ .footer .footer-about .logo {
574
+ line-height: 1;
575
+ margin-bottom: 25px;
576
+ }
577
+
578
+ .footer .footer-about .logo img {
579
+ max-height: 40px;
580
+ margin-right: 6px;
581
+ }
582
+
583
+ .footer .footer-about .logo span {
584
+ font-size: 26px;
585
+ font-weight: 700;
586
+ letter-spacing: 1px;
587
+ font-family: var(--heading-font);
588
+ color: var(--heading-color);
589
+ }
590
+
591
+ .footer .footer-about p {
592
+ font-size: 14px;
593
+ font-family: var(--heading-font);
594
+ }
595
+
596
+ .footer .social-links a {
597
+ display: flex;
598
+ align-items: center;
599
+ justify-content: center;
600
+ width: 40px;
601
+ height: 40px;
602
+ border-radius: 50%;
603
+ border: 1px solid color-mix(in srgb, var(--default-color), transparent 50%);
604
+ font-size: 16px;
605
+ color: color-mix(in srgb, var(--default-color), transparent 30%);
606
+ margin-right: 10px;
607
+ transition: 0.3s;
608
+ }
609
+
610
+ .footer .social-links a:hover {
611
+ color: var(--accent-color);
612
+ border-color: var(--accent-color);
613
+ }
614
+
615
+ .footer h4 {
616
+ font-size: 16px;
617
+ font-weight: bold;
618
+ position: relative;
619
+ padding-bottom: 12px;
620
+ }
621
+
622
+ .footer .footer-links {
623
+ margin-bottom: 30px;
624
+ }
625
+
626
+ .footer .footer-links ul {
627
+ list-style: none;
628
+ padding: 0;
629
+ margin: 0;
630
+ }
631
+
632
+ .footer .footer-links ul i {
633
+ padding-right: 3px;
634
+ font-size: 13px;
635
+ line-height: 0;
636
+ color: var(--accent-color);
637
+ }
638
+
639
+ .footer .footer-links ul li {
640
+ padding: 10px 0;
641
+ display: flex;
642
+ align-items: center;
643
+ }
644
+
645
+ .footer .footer-links ul li:first-child {
646
+ padding-top: 0;
647
+ }
648
+
649
+ .footer .footer-links ul a {
650
+ color: color-mix(in srgb, var(--default-color), transparent 30%);
651
+ display: inline-block;
652
+ line-height: 1;
653
+ }
654
+
655
+ .footer .footer-links ul a:hover {
656
+ color: var(--accent-color);
657
+ }
658
+
659
+ .footer .footer-contact p {
660
+ margin-bottom: 5px;
661
+ }
662
+
663
+ .footer .footer-newsletter .newsletter-form {
664
+ margin-top: 30px;
665
+ margin-bottom: 15px;
666
+ padding: 6px 8px;
667
+ position: relative;
668
+ border-radius: 4px;
669
+ border: 1px solid color-mix(in srgb, var(--default-color), transparent 80%);
670
+ display: flex;
671
+ background-color: var(--background-color);
672
+ transition: 0.3s;
673
+ }
674
+
675
+ .footer .footer-newsletter .newsletter-form:focus-within {
676
+ border-color: var(--accent-color);
677
+ }
678
+
679
+ .footer .footer-newsletter .newsletter-form input[type=email] {
680
+ border: 0;
681
+ padding: 4px;
682
+ width: 100%;
683
+ background-color: var(--background-color);
684
+ color: var(--default-color);
685
+ }
686
+
687
+ .footer .footer-newsletter .newsletter-form input[type=email]:focus-visible {
688
+ outline: none;
689
+ }
690
+
691
+ .footer .footer-newsletter .newsletter-form input[type=submit] {
692
+ border: 0;
693
+ font-size: 16px;
694
+ padding: 0 20px;
695
+ margin: -7px -8px -7px 0;
696
+ background: var(--accent-color);
697
+ color: var(--contrast-color);
698
+ transition: 0.3s;
699
+ border-radius: 0 4px 4px 0;
700
+ }
701
+
702
+ .footer .footer-newsletter .newsletter-form input[type=submit]:hover {
703
+ background: color-mix(in srgb, var(--accent-color), transparent 20%);
704
+ }
705
+
706
+ .footer .copyright {
707
+ padding: 25px 0;
708
+ border-top: 1px solid color-mix(in srgb, var(--default-color), transparent 90%);
709
+ }
710
+
711
+ .footer .copyright p {
712
+ margin-bottom: 0;
713
+ }
714
+
715
+ .footer .credits {
716
+ margin-top: 6px;
717
+ font-size: 13px;
718
+ }
719
+
720
+ /*--------------------------------------------------------------
721
+ # Preloader
722
+ --------------------------------------------------------------*/
723
+ #preloader {
724
+ position: fixed;
725
+ inset: 0;
726
+ z-index: 999999;
727
+ overflow: hidden;
728
+ background: var(--background-color);
729
+ transition: all 0.6s ease-out;
730
+ }
731
+
732
+ #preloader:before {
733
+ content: "";
734
+ position: fixed;
735
+ top: calc(50% - 30px);
736
+ left: calc(50% - 30px);
737
+ border: 6px solid #ffffff;
738
+ border-color: var(--accent-color) transparent var(--accent-color) transparent;
739
+ border-radius: 50%;
740
+ width: 60px;
741
+ height: 60px;
742
+ animation: animate-preloader 1.5s linear infinite;
743
+ }
744
+
745
+ @keyframes animate-preloader {
746
+ 0% {
747
+ transform: rotate(0deg);
748
+ }
749
+
750
+ 100% {
751
+ transform: rotate(360deg);
752
+ }
753
+ }
754
+
755
+ /*--------------------------------------------------------------
756
+ # Scroll Top Button
757
+ --------------------------------------------------------------*/
758
+ .scroll-top {
759
+ position: fixed;
760
+ visibility: hidden;
761
+ opacity: 0;
762
+ right: 15px;
763
+ bottom: 15px;
764
+ z-index: 99999;
765
+ background-color: var(--accent-color);
766
+ width: 40px;
767
+ height: 40px;
768
+ border-radius: 4px;
769
+ transition: all 0.4s;
770
+ }
771
+
772
+ .scroll-top i {
773
+ font-size: 24px;
774
+ color: var(--contrast-color);
775
+ line-height: 0;
776
+ }
777
+
778
+ .scroll-top:hover {
779
+ background-color: color-mix(in srgb, var(--accent-color), transparent 20%);
780
+ color: var(--contrast-color);
781
+ }
782
+
783
+ .scroll-top.active {
784
+ visibility: visible;
785
+ opacity: 1;
786
+ }
787
+
788
+ /*--------------------------------------------------------------
789
+ # Disable aos animation delay on mobile devices
790
+ --------------------------------------------------------------*/
791
+ @media screen and (max-width: 768px) {
792
+ [data-aos-delay] {
793
+ transition-delay: 0 !important;
794
+ }
795
+ }
796
+
797
+ /*--------------------------------------------------------------
798
+ # Global Page Titles & Breadcrumbs
799
+ --------------------------------------------------------------*/
800
+ .page-title {
801
+ color: var(--default-color);
802
+ background-color: var(--background-color);
803
+ background-size: cover;
804
+ background-position: center;
805
+ background-repeat: no-repeat;
806
+ padding: 160px 0 80px 0;
807
+ text-align: center;
808
+ position: relative;
809
+ }
810
+
811
+ .page-title:before {
812
+ content: "";
813
+ background: color-mix(in srgb, var(--background-color), transparent 30%);
814
+ position: absolute;
815
+ inset: 0;
816
+ }
817
+
818
+ .page-title h1 {
819
+ font-size: 42px;
820
+ font-weight: 700;
821
+ margin-bottom: 10px;
822
+ }
823
+
824
+ .page-title .breadcrumbs ol {
825
+ display: flex;
826
+ flex-wrap: wrap;
827
+ list-style: none;
828
+ justify-content: center;
829
+ padding: 0;
830
+ margin: 0;
831
+ font-size: 16px;
832
+ font-weight: 400;
833
+ }
834
+
835
+ .page-title .breadcrumbs ol li+li {
836
+ padding-left: 10px;
837
+ }
838
+
839
+ .page-title .breadcrumbs ol li+li::before {
840
+ content: "/";
841
+ display: inline-block;
842
+ padding-right: 10px;
843
+ color: color-mix(in srgb, var(--default-color), transparent 50%);
844
+ }
845
+
846
+ /*--------------------------------------------------------------
847
+ # Global Sections
848
+ --------------------------------------------------------------*/
849
+ section,
850
+ .section {
851
+ color: var(--default-color);
852
+ background-color: var(--background-color);
853
+ padding: 60px 0;
854
+ scroll-margin-top: 90px;
855
+ overflow: clip;
856
+ }
857
+
858
+ @media (max-width: 1199px) {
859
+
860
+ section,
861
+ .section {
862
+ scroll-margin-top: 76px;
863
+ }
864
+ }
865
+
866
+ /*--------------------------------------------------------------
867
+ # Global Section Titles
868
+ --------------------------------------------------------------*/
869
+ .section-title {
870
+ padding-bottom: 60px;
871
+ position: relative;
872
+ }
873
+
874
+ .section-title h2 {
875
+ font-size: 14px;
876
+ font-weight: 500;
877
+ padding: 0;
878
+ line-height: 1px;
879
+ margin: 0;
880
+ letter-spacing: 1.5px;
881
+ text-transform: uppercase;
882
+ color: color-mix(in srgb, var(--default-color), transparent 50%);
883
+ position: relative;
884
+ }
885
+
886
+ .section-title h2::after {
887
+ content: "";
888
+ width: 120px;
889
+ height: 1px;
890
+ display: inline-block;
891
+ background: var(--accent-color);
892
+ margin: 4px 10px;
893
+ }
894
+
895
+ .section-title p {
896
+ color: var(--heading-color);
897
+ margin: 0;
898
+ font-size: 36px;
899
+ font-weight: 800;
900
+ text-transform: uppercase;
901
+ font-family: var(--heading-font);
902
+ }
903
+
904
+ @media (max-width: 768px) {
905
+ .section-title p {
906
+ font-size: 24px;
907
+ }
908
+ }
909
+
910
+ /*--------------------------------------------------------------
911
+ # Hero Section
912
+ --------------------------------------------------------------*/
913
+ .hero {
914
+ width: 100%;
915
+ min-height: 100vh;
916
+ position: relative;
917
+ padding: 80px 0;
918
+ display: flex;
919
+ align-items: center;
920
+ justify-content: center;
921
+ }
922
+
923
+ .hero img {
924
+ position: absolute;
925
+ inset: 0;
926
+ display: block;
927
+ width: 100%;
928
+ height: 100%;
929
+ object-fit: cover;
930
+ z-index: 1;
931
+ }
932
+
933
+ .hero:before {
934
+ content: "";
935
+ background: color-mix(in srgb, var(--background-color), transparent 30%);
936
+ position: absolute;
937
+ inset: 0;
938
+ z-index: 2;
939
+ }
940
+
941
+ .hero .container {
942
+ position: relative;
943
+ z-index: 3;
944
+ }
945
+
946
+ .hero h2 {
947
+ margin: 0;
948
+ font-size: 48px;
949
+ font-weight: 700;
950
+ text-transform: uppercase;
951
+ }
952
+
953
+ .hero p {
954
+ color: color-mix(in srgb, var(--default-color), transparent 20%);
955
+ margin: 10px 0 0 0;
956
+ font-size: 24px;
957
+ }
958
+
959
+ .hero .btn-get-started {
960
+ background: var(--accent-color);
961
+ color: var(--contrast-color);
962
+ font-weight: 400;
963
+ font-size: 14px;
964
+ letter-spacing: 1px;
965
+ display: inline-block;
966
+ padding: 10px 30px;
967
+ border-radius: 4px;
968
+ transition: 0.3s;
969
+ text-transform: uppercase;
970
+ }
971
+
972
+ .hero .btn-get-started:hover {
973
+ background: color-mix(in srgb, var(--accent-color), transparent 20%);
974
+ }
975
+
976
+ .hero .btn-watch-video {
977
+ font-size: 16px;
978
+ transition: 0.5s;
979
+ margin-left: 25px;
980
+ font-weight: 400;
981
+ color: var(--default-color);
982
+ }
983
+
984
+ .hero .btn-watch-video i {
985
+ color: var(--accent-color);
986
+ font-size: 32px;
987
+ transition: 0.3s;
988
+ line-height: 0;
989
+ margin-right: 8px;
990
+ }
991
+
992
+ .hero .btn-watch-video:hover {
993
+ color: var(--accent-color);
994
+ }
995
+
996
+ .hero .btn-watch-video:hover i {
997
+ color: color-mix(in srgb, var(--accent-color), transparent 20%);
998
+ }
999
+
1000
+ @media (max-width: 768px) {
1001
+ .hero h2 {
1002
+ font-size: 32px;
1003
+ }
1004
+
1005
+ .hero p {
1006
+ font-size: 18px;
1007
+ }
1008
+ }
1009
+
1010
+ /*--------------------------------------------------------------
1011
+ # About Section
1012
+ --------------------------------------------------------------*/
1013
+ .about h3 {
1014
+ font-weight: 700;
1015
+ font-size: 28px;
1016
+ margin-bottom: 20px;
1017
+ }
1018
+
1019
+ .about .fst-italic {
1020
+ color: color-mix(in srgb, var(--default-color), var(--contrast-color) 50%);
1021
+ }
1022
+
1023
+ .about .content ul {
1024
+ list-style: none;
1025
+ padding: 0;
1026
+ }
1027
+
1028
+ .about .content ul li {
1029
+ padding: 0 0 10px 30px;
1030
+ position: relative;
1031
+ }
1032
+
1033
+ .about .content ul i {
1034
+ position: absolute;
1035
+ font-size: 20px;
1036
+ left: 0;
1037
+ top: -3px;
1038
+ color: var(--accent-color);
1039
+ }
1040
+
1041
+ .about .content p:last-child {
1042
+ margin-bottom: 0;
1043
+ }
1044
+
1045
+ .about .pulsating-play-btn {
1046
+ position: absolute;
1047
+ left: calc(50% - 47px);
1048
+ top: calc(50% - 47px);
1049
+ }
1050
+
1051
+ /*--------------------------------------------------------------
1052
+ # Stats Section
1053
+ --------------------------------------------------------------*/
1054
+ .stats .stats-item {
1055
+ background-color: var(--surface-color);
1056
+ box-shadow: 0px 0 30px rgba(0, 0, 0, 0.1);
1057
+ padding: 30px;
1058
+ }
1059
+
1060
+ .stats .stats-item i {
1061
+ color: var(--accent-color);
1062
+ font-size: 42px;
1063
+ line-height: 0;
1064
+ margin-right: 20px;
1065
+ }
1066
+
1067
+ .stats .stats-item span {
1068
+ color: var(--heading-color);
1069
+ font-size: 36px;
1070
+ display: block;
1071
+ font-weight: 600;
1072
+ }
1073
+
1074
+ .stats .stats-item p {
1075
+ padding: 0;
1076
+ margin: 0;
1077
+ font-family: var(--heading-font);
1078
+ font-size: 16px;
1079
+ }
1080
+
1081
+ /*--------------------------------------------------------------
1082
+ # Services Section
1083
+ --------------------------------------------------------------*/
1084
+ .services .img {
1085
+ border-radius: 8px;
1086
+ overflow: hidden;
1087
+ }
1088
+
1089
+ .services .img img {
1090
+ transition: 0.6s;
1091
+ }
1092
+
1093
+ .services .details {
1094
+ background: color-mix(in srgb, var(--surface-color), transparent 5%);
1095
+ padding: 50px 30px;
1096
+ margin: -100px 30px 0 30px;
1097
+ transition: all ease-in-out 0.3s;
1098
+ position: relative;
1099
+ text-align: center;
1100
+ border-radius: 8px;
1101
+ box-shadow: 0px 0 25px rgba(0, 0, 0, 0.1);
1102
+ }
1103
+
1104
+ .services .details .icon {
1105
+ margin: 0;
1106
+ width: 72px;
1107
+ height: 72px;
1108
+ background: var(--accent-color);
1109
+ color: var(--contrast-color);
1110
+ border: 6px solid var(--contrast-color);
1111
+ border-radius: 50px;
1112
+ display: flex;
1113
+ align-items: center;
1114
+ justify-content: center;
1115
+ margin-bottom: 20px;
1116
+ font-size: 28px;
1117
+ transition: ease-in-out 0.3s;
1118
+ position: absolute;
1119
+ top: -36px;
1120
+ left: calc(50% - 36px);
1121
+ }
1122
+
1123
+ .services .details h3 {
1124
+ font-weight: 700;
1125
+ margin: 10px 0 15px 0;
1126
+ font-size: 22px;
1127
+ transition: ease-in-out 0.3s;
1128
+ }
1129
+
1130
+ .services .details p {
1131
+ color: color-mix(in srgb, var(--default-color), transparent 10%);
1132
+ line-height: 24px;
1133
+ font-size: 14px;
1134
+ margin-bottom: 0;
1135
+ }
1136
+
1137
+ .services .service-item:hover .details h3 {
1138
+ color: var(--accent-color);
1139
+ }
1140
+
1141
+ .services .service-item:hover .details .icon {
1142
+ background: var(--surface-color);
1143
+ border: 2px solid var(--accent-color);
1144
+ }
1145
+
1146
+ .services .service-item:hover .details .icon i {
1147
+ color: var(--accent-color);
1148
+ }
1149
+
1150
+ .services .service-item:hover .img img {
1151
+ transform: scale(1.2);
1152
+ }
1153
+
1154
+ /*--------------------------------------------------------------
1155
+ # Clients Section
1156
+ --------------------------------------------------------------*/
1157
+ .clients {
1158
+ padding: 20px 0;
1159
+ }
1160
+
1161
+ .clients .client-logo {
1162
+ display: flex;
1163
+ justify-content: center;
1164
+ align-items: center;
1165
+ overflow: hidden;
1166
+ }
1167
+
1168
+ .clients .client-logo img {
1169
+ padding: 20px 40px;
1170
+ max-width: 90%;
1171
+ transition: 0.3s;
1172
+ opacity: 0.5;
1173
+ filter: grayscale(100);
1174
+ }
1175
+
1176
+ .clients .client-logo img:hover {
1177
+ filter: none;
1178
+ opacity: 1;
1179
+ }
1180
+
1181
+ @media (max-width: 640px) {
1182
+ .clients .client-logo img {
1183
+ padding: 20px;
1184
+ }
1185
+ }
1186
+
1187
+ /*--------------------------------------------------------------
1188
+ # Features Section
1189
+ --------------------------------------------------------------*/
1190
+ .features .nav-tabs {
1191
+ border: 0;
1192
+ }
1193
+
1194
+ .features .nav-link {
1195
+ background-color: var(--surface-color);
1196
+ color: var(--heading-color);
1197
+ border: 1px solid color-mix(in srgb, var(--default-color), transparent 85%);
1198
+ padding: 15px 20px;
1199
+ transition: 0.3s;
1200
+ border-radius: 0;
1201
+ display: flex;
1202
+ align-items: center;
1203
+ justify-content: center;
1204
+ cursor: pointer;
1205
+ height: 100%;
1206
+ }
1207
+
1208
+ .features .nav-link i {
1209
+ padding-right: 15px;
1210
+ font-size: 48px;
1211
+ }
1212
+
1213
+ .features .nav-link h4 {
1214
+ font-size: 18px;
1215
+ font-weight: 600;
1216
+ margin: 0;
1217
+ }
1218
+
1219
+ .features .nav-link:hover {
1220
+ color: var(--accent-color);
1221
+ border-color: var(--accent-color);
1222
+ }
1223
+
1224
+ .features .nav-link.active {
1225
+ background: var(--accent-color);
1226
+ color: var(--contrast-color);
1227
+ border-color: var(--accent-color);
1228
+ }
1229
+
1230
+ .features .nav-link.active h4 {
1231
+ color: var(--contrast-color);
1232
+ }
1233
+
1234
+ @media (max-width: 768px) {
1235
+ .features .nav-link i {
1236
+ padding: 0;
1237
+ line-height: 1;
1238
+ font-size: 36px;
1239
+ }
1240
+ }
1241
+
1242
+ @media (max-width: 575px) {
1243
+ .features .nav-link {
1244
+ padding: 15px;
1245
+ }
1246
+
1247
+ .features .nav-link i {
1248
+ font-size: 24px;
1249
+ }
1250
+ }
1251
+
1252
+ .features .tab-content {
1253
+ margin-top: 30px;
1254
+ }
1255
+
1256
+ .features .tab-pane h3 {
1257
+ color: var(--heading-color);
1258
+ font-weight: 700;
1259
+ font-size: 26px;
1260
+ }
1261
+
1262
+ .features .tab-pane ul {
1263
+ list-style: none;
1264
+ padding: 0;
1265
+ }
1266
+
1267
+ .features .tab-pane ul li {
1268
+ padding-bottom: 10px;
1269
+ }
1270
+
1271
+ .features .tab-pane ul i {
1272
+ font-size: 20px;
1273
+ padding-right: 4px;
1274
+ color: var(--accent-color);
1275
+ }
1276
+
1277
+ .features .tab-pane p:last-child {
1278
+ margin-bottom: 0;
1279
+ }
1280
+
1281
+ /*--------------------------------------------------------------
1282
+ # Services 2 Section
1283
+ --------------------------------------------------------------*/
1284
+ .services-2 .service-item {
1285
+ background-color: var(--surface-color);
1286
+ padding: 30px;
1287
+ border: 1px solid color-mix(in srgb, var(--default-color), transparent 85%);
1288
+ transition: 0.3s;
1289
+ }
1290
+
1291
+ .services-2 .service-item .icon {
1292
+ font-size: 36px;
1293
+ line-height: 0;
1294
+ margin-right: 30px;
1295
+ color: var(--accent-color);
1296
+ }
1297
+
1298
+ .services-2 .service-item .title {
1299
+ font-weight: 700;
1300
+ margin-bottom: 15px;
1301
+ font-size: 20px;
1302
+ }
1303
+
1304
+ .services-2 .service-item .title a {
1305
+ color: var(--heading-color);
1306
+ }
1307
+
1308
+ .services-2 .service-item .description {
1309
+ line-height: 24px;
1310
+ font-size: 14px;
1311
+ margin: 0;
1312
+ }
1313
+
1314
+ .services-2 .service-item:hover {
1315
+ border-color: var(--accent-color);
1316
+ }
1317
+
1318
+ .services-2 .service-item:hover .title a {
1319
+ color: var(--accent-color);
1320
+ }
1321
+
1322
+ /*--------------------------------------------------------------
1323
+ # Testimonials Section
1324
+ --------------------------------------------------------------*/
1325
+ .testimonials {
1326
+ padding: 80px 0;
1327
+ position: relative;
1328
+ }
1329
+
1330
+ .testimonials:before {
1331
+ content: "";
1332
+ background: color-mix(in srgb, var(--background-color), transparent 30%);
1333
+ position: absolute;
1334
+ inset: 0;
1335
+ z-index: 2;
1336
+ }
1337
+
1338
+ .testimonials .testimonials-bg {
1339
+ position: absolute;
1340
+ inset: 0;
1341
+ display: block;
1342
+ width: 100%;
1343
+ height: 100%;
1344
+ object-fit: cover;
1345
+ z-index: 1;
1346
+ }
1347
+
1348
+ .testimonials .container {
1349
+ position: relative;
1350
+ z-index: 3;
1351
+ }
1352
+
1353
+ .testimonials .testimonials-carousel,
1354
+ .testimonials .testimonials-slider {
1355
+ overflow: hidden;
1356
+ }
1357
+
1358
+ .testimonials .testimonial-item {
1359
+ text-align: center;
1360
+ }
1361
+
1362
+ .testimonials .testimonial-item .testimonial-img {
1363
+ width: 100px;
1364
+ border-radius: 50%;
1365
+ border: 6px solid color-mix(in srgb, var(--default-color), transparent 85%);
1366
+ margin: 0 auto;
1367
+ }
1368
+
1369
+ .testimonials .testimonial-item h3 {
1370
+ font-size: 20px;
1371
+ font-weight: bold;
1372
+ margin: 10px 0 5px 0;
1373
+ }
1374
+
1375
+ .testimonials .testimonial-item h4 {
1376
+ font-size: 14px;
1377
+ margin: 0 0 15px 0;
1378
+ color: color-mix(in srgb, var(--default-color), transparent 40%);
1379
+ }
1380
+
1381
+ .testimonials .testimonial-item .stars {
1382
+ margin-bottom: 15px;
1383
+ }
1384
+
1385
+ .testimonials .testimonial-item .stars i {
1386
+ color: #ffc107;
1387
+ margin: 0 1px;
1388
+ }
1389
+
1390
+ .testimonials .testimonial-item .quote-icon-left,
1391
+ .testimonials .testimonial-item .quote-icon-right {
1392
+ color: color-mix(in srgb, var(--default-color), transparent 40%);
1393
+ font-size: 26px;
1394
+ line-height: 0;
1395
+ }
1396
+
1397
+ .testimonials .testimonial-item .quote-icon-left {
1398
+ display: inline-block;
1399
+ left: -5px;
1400
+ position: relative;
1401
+ }
1402
+
1403
+ .testimonials .testimonial-item .quote-icon-right {
1404
+ display: inline-block;
1405
+ right: -5px;
1406
+ position: relative;
1407
+ top: 10px;
1408
+ transform: scale(-1, -1);
1409
+ }
1410
+
1411
+ .testimonials .testimonial-item p {
1412
+ font-style: italic;
1413
+ margin: 0 auto 15px auto;
1414
+ }
1415
+
1416
+ .testimonials .swiper-wrapper {
1417
+ height: auto;
1418
+ }
1419
+
1420
+ .testimonials .swiper-pagination {
1421
+ margin-top: 20px;
1422
+ position: relative;
1423
+ }
1424
+
1425
+ .testimonials .swiper-pagination .swiper-pagination-bullet {
1426
+ width: 12px;
1427
+ height: 12px;
1428
+ background-color: color-mix(in srgb, var(--default-color), transparent 50%);
1429
+ opacity: 0.5;
1430
+ }
1431
+
1432
+ .testimonials .swiper-pagination .swiper-pagination-bullet-active {
1433
+ background-color: var(--default-color);
1434
+ opacity: 1;
1435
+ }
1436
+
1437
+ @media (min-width: 992px) {
1438
+ .testimonials .testimonial-item p {
1439
+ width: 80%;
1440
+ }
1441
+ }
1442
+
1443
+ /*--------------------------------------------------------------
1444
+ # Portfolio Section
1445
+ --------------------------------------------------------------*/
1446
+ .portfolio .portfolio-filters {
1447
+ padding: 0;
1448
+ margin: 0 auto 20px auto;
1449
+ list-style: none;
1450
+ text-align: center;
1451
+ }
1452
+
1453
+ .portfolio .portfolio-filters li {
1454
+ cursor: pointer;
1455
+ display: inline-block;
1456
+ padding: 0;
1457
+ font-size: 18px;
1458
+ font-weight: 500;
1459
+ margin: 0 10px;
1460
+ line-height: 1;
1461
+ margin-bottom: 5px;
1462
+ transition: all 0.3s ease-in-out;
1463
+ }
1464
+
1465
+ .portfolio .portfolio-filters li:hover,
1466
+ .portfolio .portfolio-filters li.filter-active {
1467
+ color: var(--accent-color);
1468
+ }
1469
+
1470
+ .portfolio .portfolio-filters li:first-child {
1471
+ margin-left: 0;
1472
+ }
1473
+
1474
+ .portfolio .portfolio-filters li:last-child {
1475
+ margin-right: 0;
1476
+ }
1477
+
1478
+ @media (max-width: 575px) {
1479
+ .portfolio .portfolio-filters li {
1480
+ font-size: 14px;
1481
+ margin: 0 5px;
1482
+ }
1483
+ }
1484
+
1485
+ .portfolio .portfolio-content {
1486
+ position: relative;
1487
+ overflow: hidden;
1488
+ }
1489
+
1490
+ .portfolio .portfolio-content img {
1491
+ transition: 0.3s;
1492
+ }
1493
+
1494
+ .portfolio .portfolio-content .portfolio-info {
1495
+ opacity: 0;
1496
+ position: absolute;
1497
+ inset: 0;
1498
+ z-index: 3;
1499
+ transition: all ease-in-out 0.3s;
1500
+ background: rgba(0, 0, 0, 0.6);
1501
+ padding: 15px;
1502
+ }
1503
+
1504
+ .portfolio .portfolio-content .portfolio-info h4 {
1505
+ font-size: 14px;
1506
+ padding: 5px 10px;
1507
+ font-weight: 400;
1508
+ color: #ffffff;
1509
+ display: inline-block;
1510
+ background-color: var(--accent-color);
1511
+ }
1512
+
1513
+ .portfolio .portfolio-content .portfolio-info p {
1514
+ position: absolute;
1515
+ bottom: 10px;
1516
+ text-align: center;
1517
+ display: inline-block;
1518
+ left: 0;
1519
+ right: 0;
1520
+ font-size: 16px;
1521
+ font-weight: 600;
1522
+ color: rgba(255, 255, 255, 0.8);
1523
+ }
1524
+
1525
+ .portfolio .portfolio-content .portfolio-info .preview-link,
1526
+ .portfolio .portfolio-content .portfolio-info .details-link {
1527
+ position: absolute;
1528
+ left: calc(50% - 40px);
1529
+ font-size: 26px;
1530
+ top: calc(50% - 14px);
1531
+ color: #fff;
1532
+ transition: 0.3s;
1533
+ line-height: 1.2;
1534
+ }
1535
+
1536
+ .portfolio .portfolio-content .portfolio-info .preview-link:hover,
1537
+ .portfolio .portfolio-content .portfolio-info .details-link:hover {
1538
+ color: var(--accent-color);
1539
+ }
1540
+
1541
+ .portfolio .portfolio-content .portfolio-info .details-link {
1542
+ left: 50%;
1543
+ font-size: 34px;
1544
+ line-height: 0;
1545
+ }
1546
+
1547
+ .portfolio .portfolio-content:hover .portfolio-info {
1548
+ opacity: 1;
1549
+ }
1550
+
1551
+ .portfolio .portfolio-content:hover img {
1552
+ transform: scale(1.1);
1553
+ }
1554
+
1555
+ /*--------------------------------------------------------------
1556
+ # Team Section
1557
+ --------------------------------------------------------------*/
1558
+ .team .member {
1559
+ position: relative;
1560
+ }
1561
+
1562
+ .team .member .pic {
1563
+ overflow: hidden;
1564
+ margin-bottom: 50px;
1565
+ }
1566
+
1567
+ .team .member .member-info {
1568
+ background-color: var(--surface-color);
1569
+ color: color-mix(in srgb, var(--default-color), transparent 20%);
1570
+ box-shadow: 0px 2px 15px rgba(0, 0, 0, 0.1);
1571
+ position: absolute;
1572
+ bottom: -50px;
1573
+ left: 20px;
1574
+ right: 20px;
1575
+ padding: 20px 15px;
1576
+ overflow: hidden;
1577
+ transition: 0.5s;
1578
+ }
1579
+
1580
+ .team .member h4 {
1581
+ font-weight: 700;
1582
+ margin-bottom: 10px;
1583
+ font-size: 16px;
1584
+ position: relative;
1585
+ padding-bottom: 10px;
1586
+ }
1587
+
1588
+ .team .member h4::after {
1589
+ content: "";
1590
+ position: absolute;
1591
+ display: block;
1592
+ width: 50px;
1593
+ height: 1px;
1594
+ background: color-mix(in srgb, var(--default-color), transparent 60%);
1595
+ bottom: 0;
1596
+ left: 0;
1597
+ }
1598
+
1599
+ .team .member span {
1600
+ font-style: italic;
1601
+ display: block;
1602
+ font-size: 13px;
1603
+ }
1604
+
1605
+ .team .member .social {
1606
+ position: absolute;
1607
+ right: 15px;
1608
+ bottom: 15px;
1609
+ }
1610
+
1611
+ .team .member .social a {
1612
+ transition: color 0.3s;
1613
+ color: color-mix(in srgb, var(--default-color), transparent 70%);
1614
+ }
1615
+
1616
+ .team .member .social a:hover {
1617
+ color: var(--accent-color);
1618
+ }
1619
+
1620
+ .team .member .social i {
1621
+ font-size: 16px;
1622
+ margin: 0 2px;
1623
+ }
1624
+
1625
+ /*--------------------------------------------------------------
1626
+ # Contact Section
1627
+ --------------------------------------------------------------*/
1628
+ .contact .info-item {
1629
+ background-color: var(--surface-color);
1630
+ box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.1);
1631
+ padding: 24px 0 30px 0;
1632
+ }
1633
+
1634
+ .contact .info-item i {
1635
+ font-size: 20px;
1636
+ color: var(--accent-color);
1637
+ width: 56px;
1638
+ height: 56px;
1639
+ font-size: 24px;
1640
+ display: flex;
1641
+ justify-content: center;
1642
+ align-items: center;
1643
+ border-radius: 4px;
1644
+ transition: all 0.3s ease-in-out;
1645
+ border-radius: 50%;
1646
+ border: 2px dotted color-mix(in srgb, var(--accent-color), transparent 40%);
1647
+ }
1648
+
1649
+ .contact .info-item h3 {
1650
+ font-size: 20px;
1651
+ color: color-mix(in srgb, var(--default-color), transparent 20%);
1652
+ font-size: 18px;
1653
+ font-weight: 700;
1654
+ margin: 10px 0;
1655
+ }
1656
+
1657
+ .contact .info-item p {
1658
+ padding: 0;
1659
+ margin-bottom: 0;
1660
+ font-size: 14px;
1661
+ }
1662
+
1663
+ .contact .php-email-form {
1664
+ background-color: var(--surface-color);
1665
+ box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.1);
1666
+ height: 100%;
1667
+ padding: 30px;
1668
+ }
1669
+
1670
+ @media (max-width: 575px) {
1671
+ .contact .php-email-form {
1672
+ padding: 20px;
1673
+ }
1674
+ }
1675
+
1676
+ .contact .php-email-form input[type=text],
1677
+ .contact .php-email-form input[type=email],
1678
+ .contact .php-email-form textarea {
1679
+ font-size: 14px;
1680
+ padding: 10px 15px;
1681
+ box-shadow: none;
1682
+ border-radius: 0;
1683
+ color: var(--default-color);
1684
+ background-color: var(--surface-color);
1685
+ border-color: color-mix(in srgb, var(--default-color), transparent 80%);
1686
+ }
1687
+
1688
+ .contact .php-email-form input[type=text]:focus,
1689
+ .contact .php-email-form input[type=email]:focus,
1690
+ .contact .php-email-form textarea:focus {
1691
+ border-color: var(--accent-color);
1692
+ }
1693
+
1694
+ .contact .php-email-form input[type=text]::placeholder,
1695
+ .contact .php-email-form input[type=email]::placeholder,
1696
+ .contact .php-email-form textarea::placeholder {
1697
+ color: color-mix(in srgb, var(--default-color), transparent 70%);
1698
+ }
1699
+
1700
+ .contact .php-email-form button[type=submit] {
1701
+ color: var(--contrast-color);
1702
+ background: var(--accent-color);
1703
+ border: 0;
1704
+ padding: 10px 30px;
1705
+ transition: 0.4s;
1706
+ border-radius: 50px;
1707
+ }
1708
+
1709
+ .contact .php-email-form button[type=submit]:hover {
1710
+ background: color-mix(in srgb, var(--accent-color), transparent 20%);
1711
+ }
1712
+
1713
+ /*--------------------------------------------------------------
1714
+ # Portfolio Details Section
1715
+ --------------------------------------------------------------*/
1716
+ .portfolio-details .portfolio-details-slider img {
1717
+ width: 100%;
1718
+ }
1719
+
1720
+ .portfolio-details .portfolio-details-slider .swiper-pagination {
1721
+ margin-top: 20px;
1722
+ position: relative;
1723
+ }
1724
+
1725
+ .portfolio-details .portfolio-details-slider .swiper-pagination .swiper-pagination-bullet {
1726
+ width: 12px;
1727
+ height: 12px;
1728
+ background-color: color-mix(in srgb, var(--default-color), transparent 85%);
1729
+ opacity: 1;
1730
+ }
1731
+
1732
+ .portfolio-details .portfolio-details-slider .swiper-pagination .swiper-pagination-bullet-active {
1733
+ background-color: var(--accent-color);
1734
+ }
1735
+
1736
+ .portfolio-details .portfolio-info {
1737
+ background-color: var(--surface-color);
1738
+ padding: 30px;
1739
+ box-shadow: 0px 0 30px rgba(0, 0, 0, 0.1);
1740
+ }
1741
+
1742
+ .portfolio-details .portfolio-info h3 {
1743
+ font-size: 22px;
1744
+ font-weight: 700;
1745
+ margin-bottom: 20px;
1746
+ padding-bottom: 20px;
1747
+ border-bottom: 1px solid color-mix(in srgb, var(--default-color), transparent 85%);
1748
+ }
1749
+
1750
+ .portfolio-details .portfolio-info ul {
1751
+ list-style: none;
1752
+ padding: 0;
1753
+ font-size: 15px;
1754
+ }
1755
+
1756
+ .portfolio-details .portfolio-info ul li+li {
1757
+ margin-top: 10px;
1758
+ }
1759
+
1760
+ .portfolio-details .portfolio-description {
1761
+ padding-top: 30px;
1762
+ }
1763
+
1764
+ .portfolio-details .portfolio-description h2 {
1765
+ font-size: 26px;
1766
+ font-weight: 700;
1767
+ margin-bottom: 20px;
1768
+ }
1769
+
1770
+ .portfolio-details .portfolio-description p {
1771
+ padding: 0;
1772
+ color: color-mix(in srgb, var(--default-color), transparent 30%);
1773
+ }
1774
+
1775
+ /*--------------------------------------------------------------
1776
+ # Service Details Section
1777
+ --------------------------------------------------------------*/
1778
+ .service-details .services-list {
1779
+ background-color: var(--surface-color);
1780
+ padding: 10px 30px;
1781
+ border: 1px solid color-mix(in srgb, var(--default-color), transparent 90%);
1782
+ margin-bottom: 20px;
1783
+ }
1784
+
1785
+ .service-details .services-list a {
1786
+ display: block;
1787
+ line-height: 1;
1788
+ padding: 8px 0 8px 15px;
1789
+ border-left: 3px solid color-mix(in srgb, var(--default-color), transparent 70%);
1790
+ margin: 20px 0;
1791
+ color: color-mix(in srgb, var(--default-color), transparent 20%);
1792
+ transition: 0.3s;
1793
+ }
1794
+
1795
+ .service-details .services-list a.active {
1796
+ color: var(--heading-color);
1797
+ font-weight: 700;
1798
+ border-color: var(--accent-color);
1799
+ }
1800
+
1801
+ .service-details .services-list a:hover {
1802
+ border-color: var(--accent-color);
1803
+ }
1804
+
1805
+ .service-details .services-img {
1806
+ margin-bottom: 20px;
1807
+ }
1808
+
1809
+ .service-details h3 {
1810
+ font-size: 26px;
1811
+ font-weight: 700;
1812
+ }
1813
+
1814
+ .service-details h4 {
1815
+ font-size: 20px;
1816
+ font-weight: 700;
1817
+ }
1818
+
1819
+ .service-details p {
1820
+ font-size: 15px;
1821
+ }
1822
+
1823
+ .service-details ul {
1824
+ list-style: none;
1825
+ padding: 0;
1826
+ font-size: 15px;
1827
+ }
1828
+
1829
+ .service-details ul li {
1830
+ padding: 5px 0;
1831
+ display: flex;
1832
+ align-items: center;
1833
+ }
1834
+
1835
+ .service-details ul i {
1836
+ font-size: 20px;
1837
+ margin-right: 8px;
1838
+ color: var(--accent-color);
1839
+ }
1840
+
1841
+ /*--------------------------------------------------------------
1842
+ # Starter Section Section
1843
+ --------------------------------------------------------------*/
1844
+ .starter-section {
1845
+ /* Add your styles here */
1846
+ }
assets/img/about-2.jpg ADDED

Git LFS Details

  • SHA256: c52440a2d20f29ad5e6802463ca1e6464f2d591a504d44eb25b006825d7b7729
  • Pointer size: 131 Bytes
  • Size of remote file: 100 kB
assets/img/about.jpg ADDED

Git LFS Details

  • SHA256: 509a7ea273dd3ccac4cd7c0956074bb5f304db6a3332474e808cb185fa8cc832
  • Pointer size: 131 Bytes
  • Size of remote file: 104 kB
assets/img/apple-touch-icon.png ADDED
assets/img/clients/client-1.png ADDED
assets/img/clients/client-2.png ADDED
assets/img/clients/client-3.png ADDED
assets/img/clients/client-4.png ADDED
assets/img/clients/client-5.png ADDED
assets/img/clients/client-6.png ADDED
assets/img/favicon.png ADDED
assets/img/hero-bg.jpg ADDED

Git LFS Details

  • SHA256: 850340c418e685139d65ab621e17acfa389741260e1507c06a523675a9a35e31
  • Pointer size: 131 Bytes
  • Size of remote file: 252 kB
assets/img/logo.png ADDED
assets/img/page-title-bg.webp ADDED
assets/img/portfolio/app-1.jpg ADDED
assets/img/portfolio/app-2.jpg ADDED
assets/img/portfolio/app-3.jpg ADDED
assets/img/portfolio/books-1.jpg ADDED
assets/img/portfolio/books-2.jpg ADDED
assets/img/portfolio/books-3.jpg ADDED
assets/img/portfolio/branding-1.jpg ADDED
assets/img/portfolio/branding-2.jpg ADDED
assets/img/portfolio/branding-3.jpg ADDED
assets/img/portfolio/product-1.jpg ADDED
assets/img/portfolio/product-2.jpg ADDED
assets/img/portfolio/product-3.jpg ADDED
assets/img/services-1.jpg ADDED
assets/img/services-2.jpg ADDED
assets/img/services-3.jpg ADDED
assets/img/services.jpg ADDED
assets/img/team/team-1.jpg ADDED
assets/img/team/team-2.jpg ADDED
assets/img/team/team-3.jpg ADDED
assets/img/testimonials-bg.jpg ADDED

Git LFS Details

  • SHA256: e0539e587b86a6293dba72b5a5237eea53b14ef4c11d0606f773675be4bf0b9a
  • Pointer size: 131 Bytes
  • Size of remote file: 363 kB
assets/img/testimonials/testimonials-1.jpg ADDED
assets/img/testimonials/testimonials-2.jpg ADDED
assets/img/testimonials/testimonials-3.jpg ADDED
assets/img/testimonials/testimonials-4.jpg ADDED
assets/img/testimonials/testimonials-5.jpg ADDED
assets/img/working-1.jpg ADDED

Git LFS Details

  • SHA256: 2880ad683968d73b378307265b3a76cf50000e1ce05da2d92416deb45b044e7c
  • Pointer size: 131 Bytes
  • Size of remote file: 122 kB
assets/img/working-2.jpg ADDED
assets/img/working-3.jpg ADDED
assets/img/working-4.jpg ADDED
assets/js/main.js ADDED
@@ -0,0 +1,209 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Template Name: Dewi
3
+ * Template URL: https://bootstrapmade.com/dewi-free-multi-purpose-html-template/
4
+ * Updated: Aug 07 2024 with Bootstrap v5.3.3
5
+ * Author: BootstrapMade.com
6
+ * License: https://bootstrapmade.com/license/
7
+ */
8
+
9
+ (function() {
10
+ "use strict";
11
+
12
+ /**
13
+ * Apply .scrolled class to the body as the page is scrolled down
14
+ */
15
+ function toggleScrolled() {
16
+ const selectBody = document.querySelector('body');
17
+ const selectHeader = document.querySelector('#header');
18
+ if (!selectHeader.classList.contains('scroll-up-sticky') && !selectHeader.classList.contains('sticky-top') && !selectHeader.classList.contains('fixed-top')) return;
19
+ window.scrollY > 100 ? selectBody.classList.add('scrolled') : selectBody.classList.remove('scrolled');
20
+ }
21
+
22
+ document.addEventListener('scroll', toggleScrolled);
23
+ window.addEventListener('load', toggleScrolled);
24
+
25
+ /**
26
+ * Mobile nav toggle
27
+ */
28
+ const mobileNavToggleBtn = document.querySelector('.mobile-nav-toggle');
29
+
30
+ function mobileNavToogle() {
31
+ document.querySelector('body').classList.toggle('mobile-nav-active');
32
+ mobileNavToggleBtn.classList.toggle('bi-list');
33
+ mobileNavToggleBtn.classList.toggle('bi-x');
34
+ }
35
+ mobileNavToggleBtn.addEventListener('click', mobileNavToogle);
36
+
37
+ /**
38
+ * Hide mobile nav on same-page/hash links
39
+ */
40
+ document.querySelectorAll('#navmenu a').forEach(navmenu => {
41
+ navmenu.addEventListener('click', () => {
42
+ if (document.querySelector('.mobile-nav-active')) {
43
+ mobileNavToogle();
44
+ }
45
+ });
46
+
47
+ });
48
+
49
+ /**
50
+ * Toggle mobile nav dropdowns
51
+ */
52
+ document.querySelectorAll('.navmenu .toggle-dropdown').forEach(navmenu => {
53
+ navmenu.addEventListener('click', function(e) {
54
+ e.preventDefault();
55
+ this.parentNode.classList.toggle('active');
56
+ this.parentNode.nextElementSibling.classList.toggle('dropdown-active');
57
+ e.stopImmediatePropagation();
58
+ });
59
+ });
60
+
61
+ /**
62
+ * Preloader
63
+ */
64
+ const preloader = document.querySelector('#preloader');
65
+ if (preloader) {
66
+ window.addEventListener('load', () => {
67
+ preloader.remove();
68
+ });
69
+ }
70
+
71
+ /**
72
+ * Scroll top button
73
+ */
74
+ let scrollTop = document.querySelector('.scroll-top');
75
+
76
+ function toggleScrollTop() {
77
+ if (scrollTop) {
78
+ window.scrollY > 100 ? scrollTop.classList.add('active') : scrollTop.classList.remove('active');
79
+ }
80
+ }
81
+ scrollTop.addEventListener('click', (e) => {
82
+ e.preventDefault();
83
+ window.scrollTo({
84
+ top: 0,
85
+ behavior: 'smooth'
86
+ });
87
+ });
88
+
89
+ window.addEventListener('load', toggleScrollTop);
90
+ document.addEventListener('scroll', toggleScrollTop);
91
+
92
+ /**
93
+ * Animation on scroll function and init
94
+ */
95
+ function aosInit() {
96
+ AOS.init({
97
+ duration: 600,
98
+ easing: 'ease-in-out',
99
+ once: true,
100
+ mirror: false
101
+ });
102
+ }
103
+ window.addEventListener('load', aosInit);
104
+
105
+ /**
106
+ * Initiate glightbox
107
+ */
108
+ const glightbox = GLightbox({
109
+ selector: '.glightbox'
110
+ });
111
+
112
+ /**
113
+ * Initiate Pure Counter
114
+ */
115
+ new PureCounter();
116
+
117
+ /**
118
+ * Init swiper sliders
119
+ */
120
+ function initSwiper() {
121
+ document.querySelectorAll(".init-swiper").forEach(function(swiperElement) {
122
+ let config = JSON.parse(
123
+ swiperElement.querySelector(".swiper-config").innerHTML.trim()
124
+ );
125
+
126
+ if (swiperElement.classList.contains("swiper-tab")) {
127
+ initSwiperWithCustomPagination(swiperElement, config);
128
+ } else {
129
+ new Swiper(swiperElement, config);
130
+ }
131
+ });
132
+ }
133
+
134
+ window.addEventListener("load", initSwiper);
135
+
136
+ /**
137
+ * Init isotope layout and filters
138
+ */
139
+ document.querySelectorAll('.isotope-layout').forEach(function(isotopeItem) {
140
+ let layout = isotopeItem.getAttribute('data-layout') ?? 'masonry';
141
+ let filter = isotopeItem.getAttribute('data-default-filter') ?? '*';
142
+ let sort = isotopeItem.getAttribute('data-sort') ?? 'original-order';
143
+
144
+ let initIsotope;
145
+ imagesLoaded(isotopeItem.querySelector('.isotope-container'), function() {
146
+ initIsotope = new Isotope(isotopeItem.querySelector('.isotope-container'), {
147
+ itemSelector: '.isotope-item',
148
+ layoutMode: layout,
149
+ filter: filter,
150
+ sortBy: sort
151
+ });
152
+ });
153
+
154
+ isotopeItem.querySelectorAll('.isotope-filters li').forEach(function(filters) {
155
+ filters.addEventListener('click', function() {
156
+ isotopeItem.querySelector('.isotope-filters .filter-active').classList.remove('filter-active');
157
+ this.classList.add('filter-active');
158
+ initIsotope.arrange({
159
+ filter: this.getAttribute('data-filter')
160
+ });
161
+ if (typeof aosInit === 'function') {
162
+ aosInit();
163
+ }
164
+ }, false);
165
+ });
166
+
167
+ });
168
+
169
+ /**
170
+ * Correct scrolling position upon page load for URLs containing hash links.
171
+ */
172
+ window.addEventListener('load', function(e) {
173
+ if (window.location.hash) {
174
+ if (document.querySelector(window.location.hash)) {
175
+ setTimeout(() => {
176
+ let section = document.querySelector(window.location.hash);
177
+ let scrollMarginTop = getComputedStyle(section).scrollMarginTop;
178
+ window.scrollTo({
179
+ top: section.offsetTop - parseInt(scrollMarginTop),
180
+ behavior: 'smooth'
181
+ });
182
+ }, 100);
183
+ }
184
+ }
185
+ });
186
+
187
+ /**
188
+ * Navmenu Scrollspy
189
+ */
190
+ let navmenulinks = document.querySelectorAll('.navmenu a');
191
+
192
+ function navmenuScrollspy() {
193
+ navmenulinks.forEach(navmenulink => {
194
+ if (!navmenulink.hash) return;
195
+ let section = document.querySelector(navmenulink.hash);
196
+ if (!section) return;
197
+ let position = window.scrollY + 200;
198
+ if (position >= section.offsetTop && position <= (section.offsetTop + section.offsetHeight)) {
199
+ document.querySelectorAll('.navmenu a.active').forEach(link => link.classList.remove('active'));
200
+ navmenulink.classList.add('active');
201
+ } else {
202
+ navmenulink.classList.remove('active');
203
+ }
204
+ })
205
+ }
206
+ window.addEventListener('load', navmenuScrollspy);
207
+ document.addEventListener('scroll', navmenuScrollspy);
208
+
209
+ })();
assets/scss/Readme.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ The .scss (Sass) files are only available in the pro version.
2
+ You can buy it from: https://bootstrapmade.com/dewi-free-multi-purpose-html-template/
assets/vendor/aos/aos.cjs.js ADDED
@@ -0,0 +1,614 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 'use strict';
2
+
3
+ function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
4
+
5
+ var throttle = _interopDefault(require('lodash.throttle'));
6
+ var debounce = _interopDefault(require('lodash.debounce'));
7
+
8
+ var callback = function callback() {};
9
+
10
+ function containsAOSNode(nodes) {
11
+ var i = void 0,
12
+ currentNode = void 0,
13
+ result = void 0;
14
+
15
+ for (i = 0; i < nodes.length; i += 1) {
16
+ currentNode = nodes[i];
17
+
18
+ if (currentNode.dataset && currentNode.dataset.aos) {
19
+ return true;
20
+ }
21
+
22
+ result = currentNode.children && containsAOSNode(currentNode.children);
23
+
24
+ if (result) {
25
+ return true;
26
+ }
27
+ }
28
+
29
+ return false;
30
+ }
31
+
32
+ function check(mutations) {
33
+ if (!mutations) return;
34
+
35
+ mutations.forEach(function (mutation) {
36
+ var addedNodes = Array.prototype.slice.call(mutation.addedNodes);
37
+ var removedNodes = Array.prototype.slice.call(mutation.removedNodes);
38
+ var allNodes = addedNodes.concat(removedNodes);
39
+
40
+ if (containsAOSNode(allNodes)) {
41
+ return callback();
42
+ }
43
+ });
44
+ }
45
+
46
+ function getMutationObserver() {
47
+ return window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
48
+ }
49
+
50
+ function isSupported() {
51
+ return !!getMutationObserver();
52
+ }
53
+
54
+ function ready(selector, fn) {
55
+ var doc = window.document;
56
+ var MutationObserver = getMutationObserver();
57
+
58
+ var observer = new MutationObserver(check);
59
+ callback = fn;
60
+
61
+ observer.observe(doc.documentElement, {
62
+ childList: true,
63
+ subtree: true,
64
+ removedNodes: true
65
+ });
66
+ }
67
+
68
+ var observer = { isSupported: isSupported, ready: ready };
69
+
70
+ var classCallCheck = function (instance, Constructor) {
71
+ if (!(instance instanceof Constructor)) {
72
+ throw new TypeError("Cannot call a class as a function");
73
+ }
74
+ };
75
+
76
+ var createClass = function () {
77
+ function defineProperties(target, props) {
78
+ for (var i = 0; i < props.length; i++) {
79
+ var descriptor = props[i];
80
+ descriptor.enumerable = descriptor.enumerable || false;
81
+ descriptor.configurable = true;
82
+ if ("value" in descriptor) descriptor.writable = true;
83
+ Object.defineProperty(target, descriptor.key, descriptor);
84
+ }
85
+ }
86
+
87
+ return function (Constructor, protoProps, staticProps) {
88
+ if (protoProps) defineProperties(Constructor.prototype, protoProps);
89
+ if (staticProps) defineProperties(Constructor, staticProps);
90
+ return Constructor;
91
+ };
92
+ }();
93
+
94
+ var _extends = Object.assign || function (target) {
95
+ for (var i = 1; i < arguments.length; i++) {
96
+ var source = arguments[i];
97
+
98
+ for (var key in source) {
99
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
100
+ target[key] = source[key];
101
+ }
102
+ }
103
+ }
104
+
105
+ return target;
106
+ };
107
+
108
+ /**
109
+ * Device detector
110
+ */
111
+
112
+ var fullNameRe = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i;
113
+ var prefixRe = /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i;
114
+ var fullNameMobileRe = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i;
115
+ var prefixMobileRe = /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i;
116
+
117
+ function ua() {
118
+ return navigator.userAgent || navigator.vendor || window.opera || '';
119
+ }
120
+
121
+ var Detector = function () {
122
+ function Detector() {
123
+ classCallCheck(this, Detector);
124
+ }
125
+
126
+ createClass(Detector, [{
127
+ key: 'phone',
128
+ value: function phone() {
129
+ var a = ua();
130
+ return !!(fullNameRe.test(a) || prefixRe.test(a.substr(0, 4)));
131
+ }
132
+ }, {
133
+ key: 'mobile',
134
+ value: function mobile() {
135
+ var a = ua();
136
+ return !!(fullNameMobileRe.test(a) || prefixMobileRe.test(a.substr(0, 4)));
137
+ }
138
+ }, {
139
+ key: 'tablet',
140
+ value: function tablet() {
141
+ return this.mobile() && !this.phone();
142
+ }
143
+
144
+ // http://browserhacks.com/#hack-acea075d0ac6954f275a70023906050c
145
+
146
+ }, {
147
+ key: 'ie11',
148
+ value: function ie11() {
149
+ return '-ms-scroll-limit' in document.documentElement.style && '-ms-ime-align' in document.documentElement.style;
150
+ }
151
+ }]);
152
+ return Detector;
153
+ }();
154
+
155
+ var detect = new Detector();
156
+
157
+ /**
158
+ * Adds multiple classes on node
159
+ * @param {DOMNode} node
160
+ * @param {array} classes
161
+ */
162
+ var addClasses = function addClasses(node, classes) {
163
+ return classes && classes.forEach(function (className) {
164
+ return node.classList.add(className);
165
+ });
166
+ };
167
+
168
+ /**
169
+ * Removes multiple classes from node
170
+ * @param {DOMNode} node
171
+ * @param {array} classes
172
+ */
173
+ var removeClasses = function removeClasses(node, classes) {
174
+ return classes && classes.forEach(function (className) {
175
+ return node.classList.remove(className);
176
+ });
177
+ };
178
+
179
+ var fireEvent = function fireEvent(eventName, data) {
180
+ var customEvent = void 0;
181
+
182
+ if (detect.ie11()) {
183
+ customEvent = document.createEvent('CustomEvent');
184
+ customEvent.initCustomEvent(eventName, true, true, { detail: data });
185
+ } else {
186
+ customEvent = new CustomEvent(eventName, {
187
+ detail: data
188
+ });
189
+ }
190
+
191
+ return document.dispatchEvent(customEvent);
192
+ };
193
+
194
+ /**
195
+ * Set or remove aos-animate class
196
+ * @param {node} el element
197
+ * @param {int} top scrolled distance
198
+ */
199
+ var applyClasses = function applyClasses(el, top) {
200
+ var options = el.options,
201
+ position = el.position,
202
+ node = el.node,
203
+ data = el.data;
204
+
205
+
206
+ var hide = function hide() {
207
+ if (!el.animated) return;
208
+
209
+ removeClasses(node, options.animatedClassNames);
210
+ fireEvent('aos:out', node);
211
+
212
+ if (el.options.id) {
213
+ fireEvent('aos:in:' + el.options.id, node);
214
+ }
215
+
216
+ el.animated = false;
217
+ };
218
+
219
+ var show = function show() {
220
+ if (el.animated) return;
221
+
222
+ addClasses(node, options.animatedClassNames);
223
+
224
+ fireEvent('aos:in', node);
225
+ if (el.options.id) {
226
+ fireEvent('aos:in:' + el.options.id, node);
227
+ }
228
+
229
+ el.animated = true;
230
+ };
231
+
232
+ if (options.mirror && top >= position.out && !options.once) {
233
+ hide();
234
+ } else if (top >= position.in) {
235
+ show();
236
+ } else if (el.animated && !options.once) {
237
+ hide();
238
+ }
239
+ };
240
+
241
+ /**
242
+ * Scroll logic - add or remove 'aos-animate' class on scroll
243
+ *
244
+ * @param {array} $elements array of elements nodes
245
+ * @return {void}
246
+ */
247
+ var handleScroll = function handleScroll($elements) {
248
+ return $elements.forEach(function (el, i) {
249
+ return applyClasses(el, window.pageYOffset);
250
+ });
251
+ };
252
+
253
+ /**
254
+ * Get offset of DOM element
255
+ * like there were no transforms applied on it
256
+ *
257
+ * @param {Node} el [DOM element]
258
+ * @return {Object} [top and left offset]
259
+ */
260
+ var offset = function offset(el) {
261
+ var _x = 0;
262
+ var _y = 0;
263
+
264
+ while (el && !isNaN(el.offsetLeft) && !isNaN(el.offsetTop)) {
265
+ _x += el.offsetLeft - (el.tagName != 'BODY' ? el.scrollLeft : 0);
266
+ _y += el.offsetTop - (el.tagName != 'BODY' ? el.scrollTop : 0);
267
+ el = el.offsetParent;
268
+ }
269
+
270
+ return {
271
+ top: _y,
272
+ left: _x
273
+ };
274
+ };
275
+
276
+ /**
277
+ * Get inline option with a fallback.
278
+ *
279
+ * @param {Node} el [Dom element]
280
+ * @param {String} key [Option key]
281
+ * @param {String} fallback [Default (fallback) value]
282
+ * @return {Mixed} [Option set with inline attributes or fallback value if not set]
283
+ */
284
+
285
+ var getInlineOption = (function (el, key, fallback) {
286
+ var attr = el.getAttribute('data-aos-' + key);
287
+
288
+ if (typeof attr !== 'undefined') {
289
+ if (attr === 'true') {
290
+ return true;
291
+ } else if (attr === 'false') {
292
+ return false;
293
+ }
294
+ }
295
+
296
+ return attr || fallback;
297
+ });
298
+
299
+ /**
300
+ * Calculate offset
301
+ * basing on element's settings like:
302
+ * - anchor
303
+ * - offset
304
+ *
305
+ * @param {Node} el [Dom element]
306
+ * @return {Integer} [Final offset that will be used to trigger animation in good position]
307
+ */
308
+
309
+ var getPositionIn = function getPositionIn(el, defaultOffset, defaultAnchorPlacement) {
310
+ var windowHeight = window.innerHeight;
311
+ var anchor = getInlineOption(el, 'anchor');
312
+ var inlineAnchorPlacement = getInlineOption(el, 'anchor-placement');
313
+ var additionalOffset = Number(getInlineOption(el, 'offset', inlineAnchorPlacement ? 0 : defaultOffset));
314
+ var anchorPlacement = inlineAnchorPlacement || defaultAnchorPlacement;
315
+ var finalEl = el;
316
+
317
+ if (anchor && document.querySelectorAll(anchor)) {
318
+ finalEl = document.querySelectorAll(anchor)[0];
319
+ }
320
+
321
+ var triggerPoint = offset(finalEl).top - windowHeight;
322
+
323
+ switch (anchorPlacement) {
324
+ case 'top-bottom':
325
+ // Default offset
326
+ break;
327
+ case 'center-bottom':
328
+ triggerPoint += finalEl.offsetHeight / 2;
329
+ break;
330
+ case 'bottom-bottom':
331
+ triggerPoint += finalEl.offsetHeight;
332
+ break;
333
+ case 'top-center':
334
+ triggerPoint += windowHeight / 2;
335
+ break;
336
+ case 'center-center':
337
+ triggerPoint += windowHeight / 2 + finalEl.offsetHeight / 2;
338
+ break;
339
+ case 'bottom-center':
340
+ triggerPoint += windowHeight / 2 + finalEl.offsetHeight;
341
+ break;
342
+ case 'top-top':
343
+ triggerPoint += windowHeight;
344
+ break;
345
+ case 'bottom-top':
346
+ triggerPoint += windowHeight + finalEl.offsetHeight;
347
+ break;
348
+ case 'center-top':
349
+ triggerPoint += windowHeight + finalEl.offsetHeight / 2;
350
+ break;
351
+ }
352
+
353
+ return triggerPoint + additionalOffset;
354
+ };
355
+
356
+ var getPositionOut = function getPositionOut(el, defaultOffset) {
357
+ var windowHeight = window.innerHeight;
358
+ var anchor = getInlineOption(el, 'anchor');
359
+ var additionalOffset = getInlineOption(el, 'offset', defaultOffset);
360
+ var finalEl = el;
361
+
362
+ if (anchor && document.querySelectorAll(anchor)) {
363
+ finalEl = document.querySelectorAll(anchor)[0];
364
+ }
365
+
366
+ var elementOffsetTop = offset(finalEl).top;
367
+
368
+ return elementOffsetTop + finalEl.offsetHeight - additionalOffset;
369
+ };
370
+
371
+ /* Clearing variables */
372
+
373
+ var prepare = function prepare($elements, options) {
374
+ $elements.forEach(function (el, i) {
375
+ var mirror = getInlineOption(el.node, 'mirror', options.mirror);
376
+ var once = getInlineOption(el.node, 'once', options.once);
377
+ var id = getInlineOption(el.node, 'id');
378
+ var customClassNames = options.useClassNames && el.node.getAttribute('data-aos');
379
+
380
+ var animatedClassNames = [options.animatedClassName].concat(customClassNames ? customClassNames.split(' ') : []).filter(function (className) {
381
+ return typeof className === 'string';
382
+ });
383
+
384
+ if (options.initClassName) {
385
+ el.node.classList.add(options.initClassName);
386
+ }
387
+
388
+ el.position = {
389
+ in: getPositionIn(el.node, options.offset, options.anchorPlacement),
390
+ out: mirror && getPositionOut(el.node, options.offset)
391
+ };
392
+
393
+ el.options = {
394
+ once: once,
395
+ mirror: mirror,
396
+ animatedClassNames: animatedClassNames,
397
+ id: id
398
+ };
399
+ });
400
+
401
+ return $elements;
402
+ };
403
+
404
+ /**
405
+ * Generate initial array with elements as objects
406
+ * This array will be extended later with elements attributes values
407
+ * like 'position'
408
+ */
409
+ var elements = (function () {
410
+ var elements = document.querySelectorAll('[data-aos]');
411
+ return Array.prototype.map.call(elements, function (node) {
412
+ return { node: node };
413
+ });
414
+ });
415
+
416
+ /**
417
+ * *******************************************************
418
+ * AOS (Animate on scroll) - wowjs alternative
419
+ * made to animate elements on scroll in both directions
420
+ * *******************************************************
421
+ */
422
+
423
+ /**
424
+ * Private variables
425
+ */
426
+ var $aosElements = [];
427
+ var initialized = false;
428
+
429
+ /**
430
+ * Default options
431
+ */
432
+ var options = {
433
+ offset: 120,
434
+ delay: 0,
435
+ easing: 'ease',
436
+ duration: 400,
437
+ disable: false,
438
+ once: false,
439
+ mirror: false,
440
+ anchorPlacement: 'top-bottom',
441
+ startEvent: 'DOMContentLoaded',
442
+ animatedClassName: 'aos-animate',
443
+ initClassName: 'aos-init',
444
+ useClassNames: false,
445
+ disableMutationObserver: false,
446
+ throttleDelay: 99,
447
+ debounceDelay: 50
448
+ };
449
+
450
+ // Detect not supported browsers (<=IE9)
451
+ // http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805
452
+ var isBrowserNotSupported = function isBrowserNotSupported() {
453
+ return document.all && !window.atob;
454
+ };
455
+
456
+ var initializeScroll = function initializeScroll() {
457
+ // Extend elements objects in $aosElements with their positions
458
+ $aosElements = prepare($aosElements, options);
459
+ // Perform scroll event, to refresh view and show/hide elements
460
+ handleScroll($aosElements);
461
+
462
+ /**
463
+ * Handle scroll event to animate elements on scroll
464
+ */
465
+ window.addEventListener('scroll', throttle(function () {
466
+ handleScroll($aosElements, options.once);
467
+ }, options.throttleDelay));
468
+
469
+ return $aosElements;
470
+ };
471
+
472
+ /**
473
+ * Refresh AOS
474
+ */
475
+ var refresh = function refresh() {
476
+ var initialize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
477
+
478
+ // Allow refresh only when it was first initialized on startEvent
479
+ if (initialize) initialized = true;
480
+ if (initialized) initializeScroll();
481
+ };
482
+
483
+ /**
484
+ * Hard refresh
485
+ * create array with new elements and trigger refresh
486
+ */
487
+ var refreshHard = function refreshHard() {
488
+ $aosElements = elements();
489
+
490
+ if (isDisabled(options.disable) || isBrowserNotSupported()) {
491
+ return disable();
492
+ }
493
+
494
+ refresh();
495
+ };
496
+
497
+ /**
498
+ * Disable AOS
499
+ * Remove all attributes to reset applied styles
500
+ */
501
+ var disable = function disable() {
502
+ $aosElements.forEach(function (el, i) {
503
+ el.node.removeAttribute('data-aos');
504
+ el.node.removeAttribute('data-aos-easing');
505
+ el.node.removeAttribute('data-aos-duration');
506
+ el.node.removeAttribute('data-aos-delay');
507
+
508
+ if (options.initClassName) {
509
+ el.node.classList.remove(options.initClassName);
510
+ }
511
+
512
+ if (options.animatedClassName) {
513
+ el.node.classList.remove(options.animatedClassName);
514
+ }
515
+ });
516
+ };
517
+
518
+ /**
519
+ * Check if AOS should be disabled based on provided setting
520
+ */
521
+ var isDisabled = function isDisabled(optionDisable) {
522
+ return optionDisable === true || optionDisable === 'mobile' && detect.mobile() || optionDisable === 'phone' && detect.phone() || optionDisable === 'tablet' && detect.tablet() || typeof optionDisable === 'function' && optionDisable() === true;
523
+ };
524
+
525
+ /**
526
+ * Initializing AOS
527
+ * - Create options merging defaults with user defined options
528
+ * - Set attributes on <body> as global setting - css relies on it
529
+ * - Attach preparing elements to options.startEvent,
530
+ * window resize and orientation change
531
+ * - Attach function that handle scroll and everything connected to it
532
+ * to window scroll event and fire once document is ready to set initial state
533
+ */
534
+ var init = function init(settings) {
535
+ options = _extends(options, settings);
536
+
537
+ // Create initial array with elements -> to be fullfilled later with prepare()
538
+ $aosElements = elements();
539
+
540
+ /**
541
+ * Disable mutation observing if not supported
542
+ */
543
+ if (!options.disableMutationObserver && !observer.isSupported()) {
544
+ console.info('\n aos: MutationObserver is not supported on this browser,\n code mutations observing has been disabled.\n You may have to call "refreshHard()" by yourself.\n ');
545
+ options.disableMutationObserver = true;
546
+ }
547
+
548
+ /**
549
+ * Observe [aos] elements
550
+ * If something is loaded by AJAX
551
+ * it'll refresh plugin automatically
552
+ */
553
+ if (!options.disableMutationObserver) {
554
+ observer.ready('[data-aos]', refreshHard);
555
+ }
556
+
557
+ /**
558
+ * Don't init plugin if option `disable` is set
559
+ * or when browser is not supported
560
+ */
561
+ if (isDisabled(options.disable) || isBrowserNotSupported()) {
562
+ return disable();
563
+ }
564
+
565
+ /**
566
+ * Set global settings on body, based on options
567
+ * so CSS can use it
568
+ */
569
+ document.querySelector('body').setAttribute('data-aos-easing', options.easing);
570
+
571
+ document.querySelector('body').setAttribute('data-aos-duration', options.duration);
572
+
573
+ document.querySelector('body').setAttribute('data-aos-delay', options.delay);
574
+
575
+ /**
576
+ * Handle initializing
577
+ */
578
+ if (['DOMContentLoaded', 'load'].indexOf(options.startEvent) === -1) {
579
+ // Listen to options.startEvent and initialize AOS
580
+ document.addEventListener(options.startEvent, function () {
581
+ refresh(true);
582
+ });
583
+ } else {
584
+ window.addEventListener('load', function () {
585
+ refresh(true);
586
+ });
587
+ }
588
+
589
+ if (options.startEvent === 'DOMContentLoaded' && ['complete', 'interactive'].indexOf(document.readyState) > -1) {
590
+ // Initialize AOS if default startEvent was already fired
591
+ refresh(true);
592
+ }
593
+
594
+ /**
595
+ * Refresh plugin on window resize or orientation change
596
+ */
597
+ window.addEventListener('resize', debounce(refresh, options.debounceDelay, true));
598
+
599
+ window.addEventListener('orientationchange', debounce(refresh, options.debounceDelay, true));
600
+
601
+ return $aosElements;
602
+ };
603
+
604
+ /**
605
+ * Export Public API
606
+ */
607
+
608
+ var aos = {
609
+ init: init,
610
+ refresh: refresh,
611
+ refreshHard: refreshHard
612
+ };
613
+
614
+ module.exports = aos;
assets/vendor/aos/aos.css ADDED
@@ -0,0 +1 @@
 
 
1
+ [data-aos][data-aos][data-aos-duration="50"],body[data-aos-duration="50"] [data-aos]{transition-duration:50ms}[data-aos][data-aos][data-aos-delay="50"],body[data-aos-delay="50"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="50"].aos-animate,body[data-aos-delay="50"] [data-aos].aos-animate{transition-delay:50ms}[data-aos][data-aos][data-aos-duration="100"],body[data-aos-duration="100"] [data-aos]{transition-duration:.1s}[data-aos][data-aos][data-aos-delay="100"],body[data-aos-delay="100"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="100"].aos-animate,body[data-aos-delay="100"] [data-aos].aos-animate{transition-delay:.1s}[data-aos][data-aos][data-aos-duration="150"],body[data-aos-duration="150"] [data-aos]{transition-duration:.15s}[data-aos][data-aos][data-aos-delay="150"],body[data-aos-delay="150"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="150"].aos-animate,body[data-aos-delay="150"] [data-aos].aos-animate{transition-delay:.15s}[data-aos][data-aos][data-aos-duration="200"],body[data-aos-duration="200"] [data-aos]{transition-duration:.2s}[data-aos][data-aos][data-aos-delay="200"],body[data-aos-delay="200"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="200"].aos-animate,body[data-aos-delay="200"] [data-aos].aos-animate{transition-delay:.2s}[data-aos][data-aos][data-aos-duration="250"],body[data-aos-duration="250"] [data-aos]{transition-duration:.25s}[data-aos][data-aos][data-aos-delay="250"],body[data-aos-delay="250"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="250"].aos-animate,body[data-aos-delay="250"] [data-aos].aos-animate{transition-delay:.25s}[data-aos][data-aos][data-aos-duration="300"],body[data-aos-duration="300"] [data-aos]{transition-duration:.3s}[data-aos][data-aos][data-aos-delay="300"],body[data-aos-delay="300"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="300"].aos-animate,body[data-aos-delay="300"] [data-aos].aos-animate{transition-delay:.3s}[data-aos][data-aos][data-aos-duration="350"],body[data-aos-duration="350"] [data-aos]{transition-duration:.35s}[data-aos][data-aos][data-aos-delay="350"],body[data-aos-delay="350"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="350"].aos-animate,body[data-aos-delay="350"] [data-aos].aos-animate{transition-delay:.35s}[data-aos][data-aos][data-aos-duration="400"],body[data-aos-duration="400"] [data-aos]{transition-duration:.4s}[data-aos][data-aos][data-aos-delay="400"],body[data-aos-delay="400"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="400"].aos-animate,body[data-aos-delay="400"] [data-aos].aos-animate{transition-delay:.4s}[data-aos][data-aos][data-aos-duration="450"],body[data-aos-duration="450"] [data-aos]{transition-duration:.45s}[data-aos][data-aos][data-aos-delay="450"],body[data-aos-delay="450"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="450"].aos-animate,body[data-aos-delay="450"] [data-aos].aos-animate{transition-delay:.45s}[data-aos][data-aos][data-aos-duration="500"],body[data-aos-duration="500"] [data-aos]{transition-duration:.5s}[data-aos][data-aos][data-aos-delay="500"],body[data-aos-delay="500"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="500"].aos-animate,body[data-aos-delay="500"] [data-aos].aos-animate{transition-delay:.5s}[data-aos][data-aos][data-aos-duration="550"],body[data-aos-duration="550"] [data-aos]{transition-duration:.55s}[data-aos][data-aos][data-aos-delay="550"],body[data-aos-delay="550"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="550"].aos-animate,body[data-aos-delay="550"] [data-aos].aos-animate{transition-delay:.55s}[data-aos][data-aos][data-aos-duration="600"],body[data-aos-duration="600"] [data-aos]{transition-duration:.6s}[data-aos][data-aos][data-aos-delay="600"],body[data-aos-delay="600"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="600"].aos-animate,body[data-aos-delay="600"] [data-aos].aos-animate{transition-delay:.6s}[data-aos][data-aos][data-aos-duration="650"],body[data-aos-duration="650"] [data-aos]{transition-duration:.65s}[data-aos][data-aos][data-aos-delay="650"],body[data-aos-delay="650"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="650"].aos-animate,body[data-aos-delay="650"] [data-aos].aos-animate{transition-delay:.65s}[data-aos][data-aos][data-aos-duration="700"],body[data-aos-duration="700"] [data-aos]{transition-duration:.7s}[data-aos][data-aos][data-aos-delay="700"],body[data-aos-delay="700"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="700"].aos-animate,body[data-aos-delay="700"] [data-aos].aos-animate{transition-delay:.7s}[data-aos][data-aos][data-aos-duration="750"],body[data-aos-duration="750"] [data-aos]{transition-duration:.75s}[data-aos][data-aos][data-aos-delay="750"],body[data-aos-delay="750"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="750"].aos-animate,body[data-aos-delay="750"] [data-aos].aos-animate{transition-delay:.75s}[data-aos][data-aos][data-aos-duration="800"],body[data-aos-duration="800"] [data-aos]{transition-duration:.8s}[data-aos][data-aos][data-aos-delay="800"],body[data-aos-delay="800"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="800"].aos-animate,body[data-aos-delay="800"] [data-aos].aos-animate{transition-delay:.8s}[data-aos][data-aos][data-aos-duration="850"],body[data-aos-duration="850"] [data-aos]{transition-duration:.85s}[data-aos][data-aos][data-aos-delay="850"],body[data-aos-delay="850"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="850"].aos-animate,body[data-aos-delay="850"] [data-aos].aos-animate{transition-delay:.85s}[data-aos][data-aos][data-aos-duration="900"],body[data-aos-duration="900"] [data-aos]{transition-duration:.9s}[data-aos][data-aos][data-aos-delay="900"],body[data-aos-delay="900"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="900"].aos-animate,body[data-aos-delay="900"] [data-aos].aos-animate{transition-delay:.9s}[data-aos][data-aos][data-aos-duration="950"],body[data-aos-duration="950"] [data-aos]{transition-duration:.95s}[data-aos][data-aos][data-aos-delay="950"],body[data-aos-delay="950"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="950"].aos-animate,body[data-aos-delay="950"] [data-aos].aos-animate{transition-delay:.95s}[data-aos][data-aos][data-aos-duration="1000"],body[data-aos-duration="1000"] [data-aos]{transition-duration:1s}[data-aos][data-aos][data-aos-delay="1000"],body[data-aos-delay="1000"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1000"].aos-animate,body[data-aos-delay="1000"] [data-aos].aos-animate{transition-delay:1s}[data-aos][data-aos][data-aos-duration="1050"],body[data-aos-duration="1050"] [data-aos]{transition-duration:1.05s}[data-aos][data-aos][data-aos-delay="1050"],body[data-aos-delay="1050"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1050"].aos-animate,body[data-aos-delay="1050"] [data-aos].aos-animate{transition-delay:1.05s}[data-aos][data-aos][data-aos-duration="1100"],body[data-aos-duration="1100"] [data-aos]{transition-duration:1.1s}[data-aos][data-aos][data-aos-delay="1100"],body[data-aos-delay="1100"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1100"].aos-animate,body[data-aos-delay="1100"] [data-aos].aos-animate{transition-delay:1.1s}[data-aos][data-aos][data-aos-duration="1150"],body[data-aos-duration="1150"] [data-aos]{transition-duration:1.15s}[data-aos][data-aos][data-aos-delay="1150"],body[data-aos-delay="1150"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1150"].aos-animate,body[data-aos-delay="1150"] [data-aos].aos-animate{transition-delay:1.15s}[data-aos][data-aos][data-aos-duration="1200"],body[data-aos-duration="1200"] [data-aos]{transition-duration:1.2s}[data-aos][data-aos][data-aos-delay="1200"],body[data-aos-delay="1200"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1200"].aos-animate,body[data-aos-delay="1200"] [data-aos].aos-animate{transition-delay:1.2s}[data-aos][data-aos][data-aos-duration="1250"],body[data-aos-duration="1250"] [data-aos]{transition-duration:1.25s}[data-aos][data-aos][data-aos-delay="1250"],body[data-aos-delay="1250"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1250"].aos-animate,body[data-aos-delay="1250"] [data-aos].aos-animate{transition-delay:1.25s}[data-aos][data-aos][data-aos-duration="1300"],body[data-aos-duration="1300"] [data-aos]{transition-duration:1.3s}[data-aos][data-aos][data-aos-delay="1300"],body[data-aos-delay="1300"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1300"].aos-animate,body[data-aos-delay="1300"] [data-aos].aos-animate{transition-delay:1.3s}[data-aos][data-aos][data-aos-duration="1350"],body[data-aos-duration="1350"] [data-aos]{transition-duration:1.35s}[data-aos][data-aos][data-aos-delay="1350"],body[data-aos-delay="1350"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1350"].aos-animate,body[data-aos-delay="1350"] [data-aos].aos-animate{transition-delay:1.35s}[data-aos][data-aos][data-aos-duration="1400"],body[data-aos-duration="1400"] [data-aos]{transition-duration:1.4s}[data-aos][data-aos][data-aos-delay="1400"],body[data-aos-delay="1400"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1400"].aos-animate,body[data-aos-delay="1400"] [data-aos].aos-animate{transition-delay:1.4s}[data-aos][data-aos][data-aos-duration="1450"],body[data-aos-duration="1450"] [data-aos]{transition-duration:1.45s}[data-aos][data-aos][data-aos-delay="1450"],body[data-aos-delay="1450"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1450"].aos-animate,body[data-aos-delay="1450"] [data-aos].aos-animate{transition-delay:1.45s}[data-aos][data-aos][data-aos-duration="1500"],body[data-aos-duration="1500"] [data-aos]{transition-duration:1.5s}[data-aos][data-aos][data-aos-delay="1500"],body[data-aos-delay="1500"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1500"].aos-animate,body[data-aos-delay="1500"] [data-aos].aos-animate{transition-delay:1.5s}[data-aos][data-aos][data-aos-duration="1550"],body[data-aos-duration="1550"] [data-aos]{transition-duration:1.55s}[data-aos][data-aos][data-aos-delay="1550"],body[data-aos-delay="1550"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1550"].aos-animate,body[data-aos-delay="1550"] [data-aos].aos-animate{transition-delay:1.55s}[data-aos][data-aos][data-aos-duration="1600"],body[data-aos-duration="1600"] [data-aos]{transition-duration:1.6s}[data-aos][data-aos][data-aos-delay="1600"],body[data-aos-delay="1600"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1600"].aos-animate,body[data-aos-delay="1600"] [data-aos].aos-animate{transition-delay:1.6s}[data-aos][data-aos][data-aos-duration="1650"],body[data-aos-duration="1650"] [data-aos]{transition-duration:1.65s}[data-aos][data-aos][data-aos-delay="1650"],body[data-aos-delay="1650"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1650"].aos-animate,body[data-aos-delay="1650"] [data-aos].aos-animate{transition-delay:1.65s}[data-aos][data-aos][data-aos-duration="1700"],body[data-aos-duration="1700"] [data-aos]{transition-duration:1.7s}[data-aos][data-aos][data-aos-delay="1700"],body[data-aos-delay="1700"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1700"].aos-animate,body[data-aos-delay="1700"] [data-aos].aos-animate{transition-delay:1.7s}[data-aos][data-aos][data-aos-duration="1750"],body[data-aos-duration="1750"] [data-aos]{transition-duration:1.75s}[data-aos][data-aos][data-aos-delay="1750"],body[data-aos-delay="1750"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1750"].aos-animate,body[data-aos-delay="1750"] [data-aos].aos-animate{transition-delay:1.75s}[data-aos][data-aos][data-aos-duration="1800"],body[data-aos-duration="1800"] [data-aos]{transition-duration:1.8s}[data-aos][data-aos][data-aos-delay="1800"],body[data-aos-delay="1800"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1800"].aos-animate,body[data-aos-delay="1800"] [data-aos].aos-animate{transition-delay:1.8s}[data-aos][data-aos][data-aos-duration="1850"],body[data-aos-duration="1850"] [data-aos]{transition-duration:1.85s}[data-aos][data-aos][data-aos-delay="1850"],body[data-aos-delay="1850"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1850"].aos-animate,body[data-aos-delay="1850"] [data-aos].aos-animate{transition-delay:1.85s}[data-aos][data-aos][data-aos-duration="1900"],body[data-aos-duration="1900"] [data-aos]{transition-duration:1.9s}[data-aos][data-aos][data-aos-delay="1900"],body[data-aos-delay="1900"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1900"].aos-animate,body[data-aos-delay="1900"] [data-aos].aos-animate{transition-delay:1.9s}[data-aos][data-aos][data-aos-duration="1950"],body[data-aos-duration="1950"] [data-aos]{transition-duration:1.95s}[data-aos][data-aos][data-aos-delay="1950"],body[data-aos-delay="1950"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1950"].aos-animate,body[data-aos-delay="1950"] [data-aos].aos-animate{transition-delay:1.95s}[data-aos][data-aos][data-aos-duration="2000"],body[data-aos-duration="2000"] [data-aos]{transition-duration:2s}[data-aos][data-aos][data-aos-delay="2000"],body[data-aos-delay="2000"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2000"].aos-animate,body[data-aos-delay="2000"] [data-aos].aos-animate{transition-delay:2s}[data-aos][data-aos][data-aos-duration="2050"],body[data-aos-duration="2050"] [data-aos]{transition-duration:2.05s}[data-aos][data-aos][data-aos-delay="2050"],body[data-aos-delay="2050"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2050"].aos-animate,body[data-aos-delay="2050"] [data-aos].aos-animate{transition-delay:2.05s}[data-aos][data-aos][data-aos-duration="2100"],body[data-aos-duration="2100"] [data-aos]{transition-duration:2.1s}[data-aos][data-aos][data-aos-delay="2100"],body[data-aos-delay="2100"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2100"].aos-animate,body[data-aos-delay="2100"] [data-aos].aos-animate{transition-delay:2.1s}[data-aos][data-aos][data-aos-duration="2150"],body[data-aos-duration="2150"] [data-aos]{transition-duration:2.15s}[data-aos][data-aos][data-aos-delay="2150"],body[data-aos-delay="2150"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2150"].aos-animate,body[data-aos-delay="2150"] [data-aos].aos-animate{transition-delay:2.15s}[data-aos][data-aos][data-aos-duration="2200"],body[data-aos-duration="2200"] [data-aos]{transition-duration:2.2s}[data-aos][data-aos][data-aos-delay="2200"],body[data-aos-delay="2200"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2200"].aos-animate,body[data-aos-delay="2200"] [data-aos].aos-animate{transition-delay:2.2s}[data-aos][data-aos][data-aos-duration="2250"],body[data-aos-duration="2250"] [data-aos]{transition-duration:2.25s}[data-aos][data-aos][data-aos-delay="2250"],body[data-aos-delay="2250"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2250"].aos-animate,body[data-aos-delay="2250"] [data-aos].aos-animate{transition-delay:2.25s}[data-aos][data-aos][data-aos-duration="2300"],body[data-aos-duration="2300"] [data-aos]{transition-duration:2.3s}[data-aos][data-aos][data-aos-delay="2300"],body[data-aos-delay="2300"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2300"].aos-animate,body[data-aos-delay="2300"] [data-aos].aos-animate{transition-delay:2.3s}[data-aos][data-aos][data-aos-duration="2350"],body[data-aos-duration="2350"] [data-aos]{transition-duration:2.35s}[data-aos][data-aos][data-aos-delay="2350"],body[data-aos-delay="2350"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2350"].aos-animate,body[data-aos-delay="2350"] [data-aos].aos-animate{transition-delay:2.35s}[data-aos][data-aos][data-aos-duration="2400"],body[data-aos-duration="2400"] [data-aos]{transition-duration:2.4s}[data-aos][data-aos][data-aos-delay="2400"],body[data-aos-delay="2400"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2400"].aos-animate,body[data-aos-delay="2400"] [data-aos].aos-animate{transition-delay:2.4s}[data-aos][data-aos][data-aos-duration="2450"],body[data-aos-duration="2450"] [data-aos]{transition-duration:2.45s}[data-aos][data-aos][data-aos-delay="2450"],body[data-aos-delay="2450"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2450"].aos-animate,body[data-aos-delay="2450"] [data-aos].aos-animate{transition-delay:2.45s}[data-aos][data-aos][data-aos-duration="2500"],body[data-aos-duration="2500"] [data-aos]{transition-duration:2.5s}[data-aos][data-aos][data-aos-delay="2500"],body[data-aos-delay="2500"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2500"].aos-animate,body[data-aos-delay="2500"] [data-aos].aos-animate{transition-delay:2.5s}[data-aos][data-aos][data-aos-duration="2550"],body[data-aos-duration="2550"] [data-aos]{transition-duration:2.55s}[data-aos][data-aos][data-aos-delay="2550"],body[data-aos-delay="2550"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2550"].aos-animate,body[data-aos-delay="2550"] [data-aos].aos-animate{transition-delay:2.55s}[data-aos][data-aos][data-aos-duration="2600"],body[data-aos-duration="2600"] [data-aos]{transition-duration:2.6s}[data-aos][data-aos][data-aos-delay="2600"],body[data-aos-delay="2600"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2600"].aos-animate,body[data-aos-delay="2600"] [data-aos].aos-animate{transition-delay:2.6s}[data-aos][data-aos][data-aos-duration="2650"],body[data-aos-duration="2650"] [data-aos]{transition-duration:2.65s}[data-aos][data-aos][data-aos-delay="2650"],body[data-aos-delay="2650"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2650"].aos-animate,body[data-aos-delay="2650"] [data-aos].aos-animate{transition-delay:2.65s}[data-aos][data-aos][data-aos-duration="2700"],body[data-aos-duration="2700"] [data-aos]{transition-duration:2.7s}[data-aos][data-aos][data-aos-delay="2700"],body[data-aos-delay="2700"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2700"].aos-animate,body[data-aos-delay="2700"] [data-aos].aos-animate{transition-delay:2.7s}[data-aos][data-aos][data-aos-duration="2750"],body[data-aos-duration="2750"] [data-aos]{transition-duration:2.75s}[data-aos][data-aos][data-aos-delay="2750"],body[data-aos-delay="2750"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2750"].aos-animate,body[data-aos-delay="2750"] [data-aos].aos-animate{transition-delay:2.75s}[data-aos][data-aos][data-aos-duration="2800"],body[data-aos-duration="2800"] [data-aos]{transition-duration:2.8s}[data-aos][data-aos][data-aos-delay="2800"],body[data-aos-delay="2800"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2800"].aos-animate,body[data-aos-delay="2800"] [data-aos].aos-animate{transition-delay:2.8s}[data-aos][data-aos][data-aos-duration="2850"],body[data-aos-duration="2850"] [data-aos]{transition-duration:2.85s}[data-aos][data-aos][data-aos-delay="2850"],body[data-aos-delay="2850"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2850"].aos-animate,body[data-aos-delay="2850"] [data-aos].aos-animate{transition-delay:2.85s}[data-aos][data-aos][data-aos-duration="2900"],body[data-aos-duration="2900"] [data-aos]{transition-duration:2.9s}[data-aos][data-aos][data-aos-delay="2900"],body[data-aos-delay="2900"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2900"].aos-animate,body[data-aos-delay="2900"] [data-aos].aos-animate{transition-delay:2.9s}[data-aos][data-aos][data-aos-duration="2950"],body[data-aos-duration="2950"] [data-aos]{transition-duration:2.95s}[data-aos][data-aos][data-aos-delay="2950"],body[data-aos-delay="2950"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2950"].aos-animate,body[data-aos-delay="2950"] [data-aos].aos-animate{transition-delay:2.95s}[data-aos][data-aos][data-aos-duration="3000"],body[data-aos-duration="3000"] [data-aos]{transition-duration:3s}[data-aos][data-aos][data-aos-delay="3000"],body[data-aos-delay="3000"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="3000"].aos-animate,body[data-aos-delay="3000"] [data-aos].aos-animate{transition-delay:3s}[data-aos]{pointer-events:none}[data-aos].aos-animate{pointer-events:auto}[data-aos][data-aos][data-aos-easing=linear],body[data-aos-easing=linear] [data-aos]{transition-timing-function:cubic-bezier(.25,.25,.75,.75)}[data-aos][data-aos][data-aos-easing=ease],body[data-aos-easing=ease] [data-aos]{transition-timing-function:ease}[data-aos][data-aos][data-aos-easing=ease-in],body[data-aos-easing=ease-in] [data-aos]{transition-timing-function:ease-in}[data-aos][data-aos][data-aos-easing=ease-out],body[data-aos-easing=ease-out] [data-aos]{transition-timing-function:ease-out}[data-aos][data-aos][data-aos-easing=ease-in-out],body[data-aos-easing=ease-in-out] [data-aos]{transition-timing-function:ease-in-out}[data-aos][data-aos][data-aos-easing=ease-in-back],body[data-aos-easing=ease-in-back] [data-aos]{transition-timing-function:cubic-bezier(.6,-.28,.735,.045)}[data-aos][data-aos][data-aos-easing=ease-out-back],body[data-aos-easing=ease-out-back] [data-aos]{transition-timing-function:cubic-bezier(.175,.885,.32,1.275)}[data-aos][data-aos][data-aos-easing=ease-in-out-back],body[data-aos-easing=ease-in-out-back] [data-aos]{transition-timing-function:cubic-bezier(.68,-.55,.265,1.55)}[data-aos][data-aos][data-aos-easing=ease-in-sine],body[data-aos-easing=ease-in-sine] [data-aos]{transition-timing-function:cubic-bezier(.47,0,.745,.715)}[data-aos][data-aos][data-aos-easing=ease-out-sine],body[data-aos-easing=ease-out-sine] [data-aos]{transition-timing-function:cubic-bezier(.39,.575,.565,1)}[data-aos][data-aos][data-aos-easing=ease-in-out-sine],body[data-aos-easing=ease-in-out-sine] [data-aos]{transition-timing-function:cubic-bezier(.445,.05,.55,.95)}[data-aos][data-aos][data-aos-easing=ease-in-quad],body[data-aos-easing=ease-in-quad] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-quad],body[data-aos-easing=ease-out-quad] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-quad],body[data-aos-easing=ease-in-out-quad] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos][data-aos][data-aos-easing=ease-in-cubic],body[data-aos-easing=ease-in-cubic] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-cubic],body[data-aos-easing=ease-out-cubic] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-cubic],body[data-aos-easing=ease-in-out-cubic] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos][data-aos][data-aos-easing=ease-in-quart],body[data-aos-easing=ease-in-quart] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-quart],body[data-aos-easing=ease-out-quart] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-quart],body[data-aos-easing=ease-in-out-quart] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}@media screen{html:not(.no-js) [data-aos^=fade][data-aos^=fade]{opacity:0;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}html:not(.no-js) [data-aos^=fade][data-aos^=fade].aos-animate{opacity:1;-webkit-transform:none;transform:none}html:not(.no-js) [data-aos=fade-up]{-webkit-transform:translate3d(0,100px,0);transform:translate3d(0,100px,0)}html:not(.no-js) [data-aos=fade-down]{-webkit-transform:translate3d(0,-100px,0);transform:translate3d(0,-100px,0)}html:not(.no-js) [data-aos=fade-right]{-webkit-transform:translate3d(-100px,0,0);transform:translate3d(-100px,0,0)}html:not(.no-js) [data-aos=fade-left]{-webkit-transform:translate3d(100px,0,0);transform:translate3d(100px,0,0)}html:not(.no-js) [data-aos=fade-up-right]{-webkit-transform:translate3d(-100px,100px,0);transform:translate3d(-100px,100px,0)}html:not(.no-js) [data-aos=fade-up-left]{-webkit-transform:translate3d(100px,100px,0);transform:translate3d(100px,100px,0)}html:not(.no-js) [data-aos=fade-down-right]{-webkit-transform:translate3d(-100px,-100px,0);transform:translate3d(-100px,-100px,0)}html:not(.no-js) [data-aos=fade-down-left]{-webkit-transform:translate3d(100px,-100px,0);transform:translate3d(100px,-100px,0)}html:not(.no-js) [data-aos^=zoom][data-aos^=zoom]{opacity:0;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}html:not(.no-js) [data-aos^=zoom][data-aos^=zoom].aos-animate{opacity:1;-webkit-transform:translateZ(0) scale(1);transform:translateZ(0) scale(1)}html:not(.no-js) [data-aos=zoom-in]{-webkit-transform:scale(.6);transform:scale(.6)}html:not(.no-js) [data-aos=zoom-in-up]{-webkit-transform:translate3d(0,100px,0) scale(.6);transform:translate3d(0,100px,0) scale(.6)}html:not(.no-js) [data-aos=zoom-in-down]{-webkit-transform:translate3d(0,-100px,0) scale(.6);transform:translate3d(0,-100px,0) scale(.6)}html:not(.no-js) [data-aos=zoom-in-right]{-webkit-transform:translate3d(-100px,0,0) scale(.6);transform:translate3d(-100px,0,0) scale(.6)}html:not(.no-js) [data-aos=zoom-in-left]{-webkit-transform:translate3d(100px,0,0) scale(.6);transform:translate3d(100px,0,0) scale(.6)}html:not(.no-js) [data-aos=zoom-out]{-webkit-transform:scale(1.2);transform:scale(1.2)}html:not(.no-js) [data-aos=zoom-out-up]{-webkit-transform:translate3d(0,100px,0) scale(1.2);transform:translate3d(0,100px,0) scale(1.2)}html:not(.no-js) [data-aos=zoom-out-down]{-webkit-transform:translate3d(0,-100px,0) scale(1.2);transform:translate3d(0,-100px,0) scale(1.2)}html:not(.no-js) [data-aos=zoom-out-right]{-webkit-transform:translate3d(-100px,0,0) scale(1.2);transform:translate3d(-100px,0,0) scale(1.2)}html:not(.no-js) [data-aos=zoom-out-left]{-webkit-transform:translate3d(100px,0,0) scale(1.2);transform:translate3d(100px,0,0) scale(1.2)}html:not(.no-js) [data-aos^=slide][data-aos^=slide]{transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;visibility:hidden}html:not(.no-js) [data-aos^=slide][data-aos^=slide].aos-animate{visibility:visible;-webkit-transform:translateZ(0);transform:translateZ(0)}html:not(.no-js) [data-aos=slide-up]{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}html:not(.no-js) [data-aos=slide-down]{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}html:not(.no-js) [data-aos=slide-right]{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}html:not(.no-js) [data-aos=slide-left]{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}html:not(.no-js) [data-aos^=flip][data-aos^=flip]{-webkit-backface-visibility:hidden;backface-visibility:hidden;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform}html:not(.no-js) [data-aos=flip-left]{-webkit-transform:perspective(2500px) rotateY(-100deg);transform:perspective(2500px) rotateY(-100deg)}html:not(.no-js) [data-aos=flip-left].aos-animate{-webkit-transform:perspective(2500px) rotateY(0);transform:perspective(2500px) rotateY(0)}html:not(.no-js) [data-aos=flip-right]{-webkit-transform:perspective(2500px) rotateY(100deg);transform:perspective(2500px) rotateY(100deg)}html:not(.no-js) [data-aos=flip-right].aos-animate{-webkit-transform:perspective(2500px) rotateY(0);transform:perspective(2500px) rotateY(0)}html:not(.no-js) [data-aos=flip-up]{-webkit-transform:perspective(2500px) rotateX(-100deg);transform:perspective(2500px) rotateX(-100deg)}html:not(.no-js) [data-aos=flip-up].aos-animate{-webkit-transform:perspective(2500px) rotateX(0);transform:perspective(2500px) rotateX(0)}html:not(.no-js) [data-aos=flip-down]{-webkit-transform:perspective(2500px) rotateX(100deg);transform:perspective(2500px) rotateX(100deg)}html:not(.no-js) [data-aos=flip-down].aos-animate{-webkit-transform:perspective(2500px) rotateX(0);transform:perspective(2500px) rotateX(0)}}
assets/vendor/aos/aos.esm.js ADDED
@@ -0,0 +1,610 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import throttle from 'lodash.throttle';
2
+ import debounce from 'lodash.debounce';
3
+
4
+ var callback = function callback() {};
5
+
6
+ function containsAOSNode(nodes) {
7
+ var i = void 0,
8
+ currentNode = void 0,
9
+ result = void 0;
10
+
11
+ for (i = 0; i < nodes.length; i += 1) {
12
+ currentNode = nodes[i];
13
+
14
+ if (currentNode.dataset && currentNode.dataset.aos) {
15
+ return true;
16
+ }
17
+
18
+ result = currentNode.children && containsAOSNode(currentNode.children);
19
+
20
+ if (result) {
21
+ return true;
22
+ }
23
+ }
24
+
25
+ return false;
26
+ }
27
+
28
+ function check(mutations) {
29
+ if (!mutations) return;
30
+
31
+ mutations.forEach(function (mutation) {
32
+ var addedNodes = Array.prototype.slice.call(mutation.addedNodes);
33
+ var removedNodes = Array.prototype.slice.call(mutation.removedNodes);
34
+ var allNodes = addedNodes.concat(removedNodes);
35
+
36
+ if (containsAOSNode(allNodes)) {
37
+ return callback();
38
+ }
39
+ });
40
+ }
41
+
42
+ function getMutationObserver() {
43
+ return window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
44
+ }
45
+
46
+ function isSupported() {
47
+ return !!getMutationObserver();
48
+ }
49
+
50
+ function ready(selector, fn) {
51
+ var doc = window.document;
52
+ var MutationObserver = getMutationObserver();
53
+
54
+ var observer = new MutationObserver(check);
55
+ callback = fn;
56
+
57
+ observer.observe(doc.documentElement, {
58
+ childList: true,
59
+ subtree: true,
60
+ removedNodes: true
61
+ });
62
+ }
63
+
64
+ var observer = { isSupported: isSupported, ready: ready };
65
+
66
+ var classCallCheck = function (instance, Constructor) {
67
+ if (!(instance instanceof Constructor)) {
68
+ throw new TypeError("Cannot call a class as a function");
69
+ }
70
+ };
71
+
72
+ var createClass = function () {
73
+ function defineProperties(target, props) {
74
+ for (var i = 0; i < props.length; i++) {
75
+ var descriptor = props[i];
76
+ descriptor.enumerable = descriptor.enumerable || false;
77
+ descriptor.configurable = true;
78
+ if ("value" in descriptor) descriptor.writable = true;
79
+ Object.defineProperty(target, descriptor.key, descriptor);
80
+ }
81
+ }
82
+
83
+ return function (Constructor, protoProps, staticProps) {
84
+ if (protoProps) defineProperties(Constructor.prototype, protoProps);
85
+ if (staticProps) defineProperties(Constructor, staticProps);
86
+ return Constructor;
87
+ };
88
+ }();
89
+
90
+ var _extends = Object.assign || function (target) {
91
+ for (var i = 1; i < arguments.length; i++) {
92
+ var source = arguments[i];
93
+
94
+ for (var key in source) {
95
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
96
+ target[key] = source[key];
97
+ }
98
+ }
99
+ }
100
+
101
+ return target;
102
+ };
103
+
104
+ /**
105
+ * Device detector
106
+ */
107
+
108
+ var fullNameRe = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i;
109
+ var prefixRe = /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i;
110
+ var fullNameMobileRe = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i;
111
+ var prefixMobileRe = /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i;
112
+
113
+ function ua() {
114
+ return navigator.userAgent || navigator.vendor || window.opera || '';
115
+ }
116
+
117
+ var Detector = function () {
118
+ function Detector() {
119
+ classCallCheck(this, Detector);
120
+ }
121
+
122
+ createClass(Detector, [{
123
+ key: 'phone',
124
+ value: function phone() {
125
+ var a = ua();
126
+ return !!(fullNameRe.test(a) || prefixRe.test(a.substr(0, 4)));
127
+ }
128
+ }, {
129
+ key: 'mobile',
130
+ value: function mobile() {
131
+ var a = ua();
132
+ return !!(fullNameMobileRe.test(a) || prefixMobileRe.test(a.substr(0, 4)));
133
+ }
134
+ }, {
135
+ key: 'tablet',
136
+ value: function tablet() {
137
+ return this.mobile() && !this.phone();
138
+ }
139
+
140
+ // http://browserhacks.com/#hack-acea075d0ac6954f275a70023906050c
141
+
142
+ }, {
143
+ key: 'ie11',
144
+ value: function ie11() {
145
+ return '-ms-scroll-limit' in document.documentElement.style && '-ms-ime-align' in document.documentElement.style;
146
+ }
147
+ }]);
148
+ return Detector;
149
+ }();
150
+
151
+ var detect = new Detector();
152
+
153
+ /**
154
+ * Adds multiple classes on node
155
+ * @param {DOMNode} node
156
+ * @param {array} classes
157
+ */
158
+ var addClasses = function addClasses(node, classes) {
159
+ return classes && classes.forEach(function (className) {
160
+ return node.classList.add(className);
161
+ });
162
+ };
163
+
164
+ /**
165
+ * Removes multiple classes from node
166
+ * @param {DOMNode} node
167
+ * @param {array} classes
168
+ */
169
+ var removeClasses = function removeClasses(node, classes) {
170
+ return classes && classes.forEach(function (className) {
171
+ return node.classList.remove(className);
172
+ });
173
+ };
174
+
175
+ var fireEvent = function fireEvent(eventName, data) {
176
+ var customEvent = void 0;
177
+
178
+ if (detect.ie11()) {
179
+ customEvent = document.createEvent('CustomEvent');
180
+ customEvent.initCustomEvent(eventName, true, true, { detail: data });
181
+ } else {
182
+ customEvent = new CustomEvent(eventName, {
183
+ detail: data
184
+ });
185
+ }
186
+
187
+ return document.dispatchEvent(customEvent);
188
+ };
189
+
190
+ /**
191
+ * Set or remove aos-animate class
192
+ * @param {node} el element
193
+ * @param {int} top scrolled distance
194
+ */
195
+ var applyClasses = function applyClasses(el, top) {
196
+ var options = el.options,
197
+ position = el.position,
198
+ node = el.node,
199
+ data = el.data;
200
+
201
+
202
+ var hide = function hide() {
203
+ if (!el.animated) return;
204
+
205
+ removeClasses(node, options.animatedClassNames);
206
+ fireEvent('aos:out', node);
207
+
208
+ if (el.options.id) {
209
+ fireEvent('aos:in:' + el.options.id, node);
210
+ }
211
+
212
+ el.animated = false;
213
+ };
214
+
215
+ var show = function show() {
216
+ if (el.animated) return;
217
+
218
+ addClasses(node, options.animatedClassNames);
219
+
220
+ fireEvent('aos:in', node);
221
+ if (el.options.id) {
222
+ fireEvent('aos:in:' + el.options.id, node);
223
+ }
224
+
225
+ el.animated = true;
226
+ };
227
+
228
+ if (options.mirror && top >= position.out && !options.once) {
229
+ hide();
230
+ } else if (top >= position.in) {
231
+ show();
232
+ } else if (el.animated && !options.once) {
233
+ hide();
234
+ }
235
+ };
236
+
237
+ /**
238
+ * Scroll logic - add or remove 'aos-animate' class on scroll
239
+ *
240
+ * @param {array} $elements array of elements nodes
241
+ * @return {void}
242
+ */
243
+ var handleScroll = function handleScroll($elements) {
244
+ return $elements.forEach(function (el, i) {
245
+ return applyClasses(el, window.pageYOffset);
246
+ });
247
+ };
248
+
249
+ /**
250
+ * Get offset of DOM element
251
+ * like there were no transforms applied on it
252
+ *
253
+ * @param {Node} el [DOM element]
254
+ * @return {Object} [top and left offset]
255
+ */
256
+ var offset = function offset(el) {
257
+ var _x = 0;
258
+ var _y = 0;
259
+
260
+ while (el && !isNaN(el.offsetLeft) && !isNaN(el.offsetTop)) {
261
+ _x += el.offsetLeft - (el.tagName != 'BODY' ? el.scrollLeft : 0);
262
+ _y += el.offsetTop - (el.tagName != 'BODY' ? el.scrollTop : 0);
263
+ el = el.offsetParent;
264
+ }
265
+
266
+ return {
267
+ top: _y,
268
+ left: _x
269
+ };
270
+ };
271
+
272
+ /**
273
+ * Get inline option with a fallback.
274
+ *
275
+ * @param {Node} el [Dom element]
276
+ * @param {String} key [Option key]
277
+ * @param {String} fallback [Default (fallback) value]
278
+ * @return {Mixed} [Option set with inline attributes or fallback value if not set]
279
+ */
280
+
281
+ var getInlineOption = (function (el, key, fallback) {
282
+ var attr = el.getAttribute('data-aos-' + key);
283
+
284
+ if (typeof attr !== 'undefined') {
285
+ if (attr === 'true') {
286
+ return true;
287
+ } else if (attr === 'false') {
288
+ return false;
289
+ }
290
+ }
291
+
292
+ return attr || fallback;
293
+ });
294
+
295
+ /**
296
+ * Calculate offset
297
+ * basing on element's settings like:
298
+ * - anchor
299
+ * - offset
300
+ *
301
+ * @param {Node} el [Dom element]
302
+ * @return {Integer} [Final offset that will be used to trigger animation in good position]
303
+ */
304
+
305
+ var getPositionIn = function getPositionIn(el, defaultOffset, defaultAnchorPlacement) {
306
+ var windowHeight = window.innerHeight;
307
+ var anchor = getInlineOption(el, 'anchor');
308
+ var inlineAnchorPlacement = getInlineOption(el, 'anchor-placement');
309
+ var additionalOffset = Number(getInlineOption(el, 'offset', inlineAnchorPlacement ? 0 : defaultOffset));
310
+ var anchorPlacement = inlineAnchorPlacement || defaultAnchorPlacement;
311
+ var finalEl = el;
312
+
313
+ if (anchor && document.querySelectorAll(anchor)) {
314
+ finalEl = document.querySelectorAll(anchor)[0];
315
+ }
316
+
317
+ var triggerPoint = offset(finalEl).top - windowHeight;
318
+
319
+ switch (anchorPlacement) {
320
+ case 'top-bottom':
321
+ // Default offset
322
+ break;
323
+ case 'center-bottom':
324
+ triggerPoint += finalEl.offsetHeight / 2;
325
+ break;
326
+ case 'bottom-bottom':
327
+ triggerPoint += finalEl.offsetHeight;
328
+ break;
329
+ case 'top-center':
330
+ triggerPoint += windowHeight / 2;
331
+ break;
332
+ case 'center-center':
333
+ triggerPoint += windowHeight / 2 + finalEl.offsetHeight / 2;
334
+ break;
335
+ case 'bottom-center':
336
+ triggerPoint += windowHeight / 2 + finalEl.offsetHeight;
337
+ break;
338
+ case 'top-top':
339
+ triggerPoint += windowHeight;
340
+ break;
341
+ case 'bottom-top':
342
+ triggerPoint += windowHeight + finalEl.offsetHeight;
343
+ break;
344
+ case 'center-top':
345
+ triggerPoint += windowHeight + finalEl.offsetHeight / 2;
346
+ break;
347
+ }
348
+
349
+ return triggerPoint + additionalOffset;
350
+ };
351
+
352
+ var getPositionOut = function getPositionOut(el, defaultOffset) {
353
+ var windowHeight = window.innerHeight;
354
+ var anchor = getInlineOption(el, 'anchor');
355
+ var additionalOffset = getInlineOption(el, 'offset', defaultOffset);
356
+ var finalEl = el;
357
+
358
+ if (anchor && document.querySelectorAll(anchor)) {
359
+ finalEl = document.querySelectorAll(anchor)[0];
360
+ }
361
+
362
+ var elementOffsetTop = offset(finalEl).top;
363
+
364
+ return elementOffsetTop + finalEl.offsetHeight - additionalOffset;
365
+ };
366
+
367
+ /* Clearing variables */
368
+
369
+ var prepare = function prepare($elements, options) {
370
+ $elements.forEach(function (el, i) {
371
+ var mirror = getInlineOption(el.node, 'mirror', options.mirror);
372
+ var once = getInlineOption(el.node, 'once', options.once);
373
+ var id = getInlineOption(el.node, 'id');
374
+ var customClassNames = options.useClassNames && el.node.getAttribute('data-aos');
375
+
376
+ var animatedClassNames = [options.animatedClassName].concat(customClassNames ? customClassNames.split(' ') : []).filter(function (className) {
377
+ return typeof className === 'string';
378
+ });
379
+
380
+ if (options.initClassName) {
381
+ el.node.classList.add(options.initClassName);
382
+ }
383
+
384
+ el.position = {
385
+ in: getPositionIn(el.node, options.offset, options.anchorPlacement),
386
+ out: mirror && getPositionOut(el.node, options.offset)
387
+ };
388
+
389
+ el.options = {
390
+ once: once,
391
+ mirror: mirror,
392
+ animatedClassNames: animatedClassNames,
393
+ id: id
394
+ };
395
+ });
396
+
397
+ return $elements;
398
+ };
399
+
400
+ /**
401
+ * Generate initial array with elements as objects
402
+ * This array will be extended later with elements attributes values
403
+ * like 'position'
404
+ */
405
+ var elements = (function () {
406
+ var elements = document.querySelectorAll('[data-aos]');
407
+ return Array.prototype.map.call(elements, function (node) {
408
+ return { node: node };
409
+ });
410
+ });
411
+
412
+ /**
413
+ * *******************************************************
414
+ * AOS (Animate on scroll) - wowjs alternative
415
+ * made to animate elements on scroll in both directions
416
+ * *******************************************************
417
+ */
418
+
419
+ /**
420
+ * Private variables
421
+ */
422
+ var $aosElements = [];
423
+ var initialized = false;
424
+
425
+ /**
426
+ * Default options
427
+ */
428
+ var options = {
429
+ offset: 120,
430
+ delay: 0,
431
+ easing: 'ease',
432
+ duration: 400,
433
+ disable: false,
434
+ once: false,
435
+ mirror: false,
436
+ anchorPlacement: 'top-bottom',
437
+ startEvent: 'DOMContentLoaded',
438
+ animatedClassName: 'aos-animate',
439
+ initClassName: 'aos-init',
440
+ useClassNames: false,
441
+ disableMutationObserver: false,
442
+ throttleDelay: 99,
443
+ debounceDelay: 50
444
+ };
445
+
446
+ // Detect not supported browsers (<=IE9)
447
+ // http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805
448
+ var isBrowserNotSupported = function isBrowserNotSupported() {
449
+ return document.all && !window.atob;
450
+ };
451
+
452
+ var initializeScroll = function initializeScroll() {
453
+ // Extend elements objects in $aosElements with their positions
454
+ $aosElements = prepare($aosElements, options);
455
+ // Perform scroll event, to refresh view and show/hide elements
456
+ handleScroll($aosElements);
457
+
458
+ /**
459
+ * Handle scroll event to animate elements on scroll
460
+ */
461
+ window.addEventListener('scroll', throttle(function () {
462
+ handleScroll($aosElements, options.once);
463
+ }, options.throttleDelay));
464
+
465
+ return $aosElements;
466
+ };
467
+
468
+ /**
469
+ * Refresh AOS
470
+ */
471
+ var refresh = function refresh() {
472
+ var initialize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
473
+
474
+ // Allow refresh only when it was first initialized on startEvent
475
+ if (initialize) initialized = true;
476
+ if (initialized) initializeScroll();
477
+ };
478
+
479
+ /**
480
+ * Hard refresh
481
+ * create array with new elements and trigger refresh
482
+ */
483
+ var refreshHard = function refreshHard() {
484
+ $aosElements = elements();
485
+
486
+ if (isDisabled(options.disable) || isBrowserNotSupported()) {
487
+ return disable();
488
+ }
489
+
490
+ refresh();
491
+ };
492
+
493
+ /**
494
+ * Disable AOS
495
+ * Remove all attributes to reset applied styles
496
+ */
497
+ var disable = function disable() {
498
+ $aosElements.forEach(function (el, i) {
499
+ el.node.removeAttribute('data-aos');
500
+ el.node.removeAttribute('data-aos-easing');
501
+ el.node.removeAttribute('data-aos-duration');
502
+ el.node.removeAttribute('data-aos-delay');
503
+
504
+ if (options.initClassName) {
505
+ el.node.classList.remove(options.initClassName);
506
+ }
507
+
508
+ if (options.animatedClassName) {
509
+ el.node.classList.remove(options.animatedClassName);
510
+ }
511
+ });
512
+ };
513
+
514
+ /**
515
+ * Check if AOS should be disabled based on provided setting
516
+ */
517
+ var isDisabled = function isDisabled(optionDisable) {
518
+ return optionDisable === true || optionDisable === 'mobile' && detect.mobile() || optionDisable === 'phone' && detect.phone() || optionDisable === 'tablet' && detect.tablet() || typeof optionDisable === 'function' && optionDisable() === true;
519
+ };
520
+
521
+ /**
522
+ * Initializing AOS
523
+ * - Create options merging defaults with user defined options
524
+ * - Set attributes on <body> as global setting - css relies on it
525
+ * - Attach preparing elements to options.startEvent,
526
+ * window resize and orientation change
527
+ * - Attach function that handle scroll and everything connected to it
528
+ * to window scroll event and fire once document is ready to set initial state
529
+ */
530
+ var init = function init(settings) {
531
+ options = _extends(options, settings);
532
+
533
+ // Create initial array with elements -> to be fullfilled later with prepare()
534
+ $aosElements = elements();
535
+
536
+ /**
537
+ * Disable mutation observing if not supported
538
+ */
539
+ if (!options.disableMutationObserver && !observer.isSupported()) {
540
+ console.info('\n aos: MutationObserver is not supported on this browser,\n code mutations observing has been disabled.\n You may have to call "refreshHard()" by yourself.\n ');
541
+ options.disableMutationObserver = true;
542
+ }
543
+
544
+ /**
545
+ * Observe [aos] elements
546
+ * If something is loaded by AJAX
547
+ * it'll refresh plugin automatically
548
+ */
549
+ if (!options.disableMutationObserver) {
550
+ observer.ready('[data-aos]', refreshHard);
551
+ }
552
+
553
+ /**
554
+ * Don't init plugin if option `disable` is set
555
+ * or when browser is not supported
556
+ */
557
+ if (isDisabled(options.disable) || isBrowserNotSupported()) {
558
+ return disable();
559
+ }
560
+
561
+ /**
562
+ * Set global settings on body, based on options
563
+ * so CSS can use it
564
+ */
565
+ document.querySelector('body').setAttribute('data-aos-easing', options.easing);
566
+
567
+ document.querySelector('body').setAttribute('data-aos-duration', options.duration);
568
+
569
+ document.querySelector('body').setAttribute('data-aos-delay', options.delay);
570
+
571
+ /**
572
+ * Handle initializing
573
+ */
574
+ if (['DOMContentLoaded', 'load'].indexOf(options.startEvent) === -1) {
575
+ // Listen to options.startEvent and initialize AOS
576
+ document.addEventListener(options.startEvent, function () {
577
+ refresh(true);
578
+ });
579
+ } else {
580
+ window.addEventListener('load', function () {
581
+ refresh(true);
582
+ });
583
+ }
584
+
585
+ if (options.startEvent === 'DOMContentLoaded' && ['complete', 'interactive'].indexOf(document.readyState) > -1) {
586
+ // Initialize AOS if default startEvent was already fired
587
+ refresh(true);
588
+ }
589
+
590
+ /**
591
+ * Refresh plugin on window resize or orientation change
592
+ */
593
+ window.addEventListener('resize', debounce(refresh, options.debounceDelay, true));
594
+
595
+ window.addEventListener('orientationchange', debounce(refresh, options.debounceDelay, true));
596
+
597
+ return $aosElements;
598
+ };
599
+
600
+ /**
601
+ * Export Public API
602
+ */
603
+
604
+ var aos = {
605
+ init: init,
606
+ refresh: refresh,
607
+ refreshHard: refreshHard
608
+ };
609
+
610
+ export default aos;