├── My Image.png ├── Background1.png ├── fa-solid-900.eot ├── fa-solid-900.ttf ├── fa-brands-400.eot ├── fa-brands-400.ttf ├── fa-brands-400.woff ├── fa-regular-400.eot ├── fa-regular-400.ttf ├── fa-solid-900.woff ├── fa-solid-900.woff2 ├── fa-brands-400.woff2 ├── fa-regular-400.woff ├── fa-regular-400.woff2 ├── Harikishore Resume.pdf ├── index.js ├── responsive.css ├── index.html ├── main.css ├── typed.js └── all.min.css /My Image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Harikishore-Official/Personal-Portofolio/HEAD/My Image.png -------------------------------------------------------------------------------- /Background1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Harikishore-Official/Personal-Portofolio/HEAD/Background1.png -------------------------------------------------------------------------------- /fa-solid-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Harikishore-Official/Personal-Portofolio/HEAD/fa-solid-900.eot -------------------------------------------------------------------------------- /fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Harikishore-Official/Personal-Portofolio/HEAD/fa-solid-900.ttf -------------------------------------------------------------------------------- /fa-brands-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Harikishore-Official/Personal-Portofolio/HEAD/fa-brands-400.eot -------------------------------------------------------------------------------- /fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Harikishore-Official/Personal-Portofolio/HEAD/fa-brands-400.ttf -------------------------------------------------------------------------------- /fa-brands-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Harikishore-Official/Personal-Portofolio/HEAD/fa-brands-400.woff -------------------------------------------------------------------------------- /fa-regular-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Harikishore-Official/Personal-Portofolio/HEAD/fa-regular-400.eot -------------------------------------------------------------------------------- /fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Harikishore-Official/Personal-Portofolio/HEAD/fa-regular-400.ttf -------------------------------------------------------------------------------- /fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Harikishore-Official/Personal-Portofolio/HEAD/fa-solid-900.woff -------------------------------------------------------------------------------- /fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Harikishore-Official/Personal-Portofolio/HEAD/fa-solid-900.woff2 -------------------------------------------------------------------------------- /fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Harikishore-Official/Personal-Portofolio/HEAD/fa-brands-400.woff2 -------------------------------------------------------------------------------- /fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Harikishore-Official/Personal-Portofolio/HEAD/fa-regular-400.woff -------------------------------------------------------------------------------- /fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Harikishore-Official/Personal-Portofolio/HEAD/fa-regular-400.woff2 -------------------------------------------------------------------------------- /Harikishore Resume.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Harikishore-Official/Personal-Portofolio/HEAD/Harikishore Resume.pdf -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const fname = document.getElementById('form-name'); 2 | const lname = document.getElementById('form-email'); 3 | const submit = document.getElementById('submit'); 4 | 5 | submit.addEventListener('submit',(e)=>{ 6 | e.preventDefault(); 7 | let ebody = ` 8 |

First Name:

${fname.value} 9 |
10 |

Last Name:

${lname.value} 11 | `; 12 | 13 | Email.send({ 14 | SecureToken : "16794895-bf3c-4e71-bb27-75293a6e60d8", //add your token here 15 | To : 'harikishore651@gmail.com', 16 | From : "harikishore651@gmail.com", 17 | Subject : "This is the subject", 18 | Body : ebody 19 | }).then( 20 | message => alert(message) 21 | ); 22 | }); -------------------------------------------------------------------------------- /responsive.css: -------------------------------------------------------------------------------- 1 | /*--------------------- Responsive (Start) ---------------------*/ 2 | @media (max-width: 991px){ 3 | html{ 4 | font-size: 55%; 5 | } 6 | } 7 | 8 | @media (max-width: 768px){ 9 | header #menu-btn{ 10 | display: block; 11 | } 12 | 13 | .header .navbar{ 14 | width: 30rem; 15 | position: absolute; 16 | right: 0; 17 | top:100%; 18 | padding: 0rem 2rem; 19 | background: #F7F5F2; 20 | border: 0.1rem solid #BC8CF2; 21 | -webkit-transition: 0.2s linear; 22 | -moz-transition: 0.2s linear; 23 | -o-transition: 0.2s linear; 24 | transition: 0.2s linear; 25 | -webkit-transform: translateX(100%); 26 | transform: translateX(100%); 27 | height: calc(100vh - 6rem); 28 | overflow-y: auto; 29 | -webkit-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.1); 30 | box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.1); 31 | } 32 | 33 | .header .navbar.active{ 34 | -webkit-transform: translateX(0); 35 | transform: translateX(0); 36 | } 37 | 38 | .header .navbar a{ 39 | display: block; 40 | color: #000000; 41 | padding: 1.5rem 0; 42 | margin: 1rem 0; 43 | } 44 | 45 | .navbar::-webkit-scrollbar{ 46 | width: 0.8rem; 47 | } 48 | 49 | .navbar::-webkit-scrollbar-thumb{ 50 | border-radius: 1rem; 51 | background-color: #BC8CF2; 52 | } 53 | 54 | .navbar::-webkit-scrollbar-track{ 55 | background: transparent; 56 | } 57 | 58 | section, header{ 59 | padding: 2rem; 60 | } 61 | 62 | } 63 | 64 | @media (max-width: 450px){ 65 | html{ 66 | font-size: 50%; 67 | } 68 | 69 | section, header{ 70 | padding: 1rem; 71 | } 72 | 73 | 74 | 75 | } 76 | 77 | /*--------------------- Responsive (End) ---------------------*/ -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | HariKishore | Personal Portfolio 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 | 32 | 36 | 37 | 38 | 39 | 45 | 46 | 47 | 48 | 49 |
50 | 51 | 52 | 53 | 54 | 55 |
56 | 57 |
58 | 59 |
60 |
61 |

hi there!

62 |

I Am a

63 |

Creative web designer and developer offering 2+ years of experience providing high-impact web solutions for many different projects.

64 | about me 65 |
66 |
67 | 68 |
69 | Home-Image 70 |
71 | 72 |
73 | 74 |
75 | 76 | 77 | 78 | 79 | 80 | 81 |
82 | 83 |
84 | 85 |
86 | About-Image 87 |
88 | 89 |
90 | 91 |

My name is HariKishore.


92 |

I'm S. Harikishore, a dedicated student currently in my 3rd year of B.Tech specializing in Artificial Intelligence and Machine Learning at M. Kumarasamy College of Engineering. Alongside my studies, I have honed my skills in web development, designing, and app development, driven by my passion for creating intuitive and user-friendly digital experiences. Let's connect and collaborate to bring innovative ideas to life through cutting-edge technologies.

93 | 94 |
95 | 96 |
97 |

age: 20

98 |

gender: Male

99 |

language: Tamil, English

100 |

work: Front-End developer

101 |

freelance: available

102 | download CV 103 |
104 | 105 |
106 | 107 |
108 | 109 |
110 | 111 |
112 | 113 |
114 |

my skills

115 |
116 | 117 |
118 |
119 |
120 |

HTML5 70%

121 |
122 |
123 |
124 |

javascript 60%

125 |
126 |
127 |
128 |

Python 70%

129 |
130 |
131 |
132 | 133 |
134 |
135 |

CSS3 60%

136 |
137 |
138 |
139 |

PHP60%

140 |
141 |
142 |
143 | 144 |
145 | 146 |
147 | 148 |
149 | 150 | 151 | 152 | 153 |
154 | 155 |
156 |

my services

157 |
158 | 159 |
160 | 161 |
162 | 163 |

Web Design

164 |

165 |
166 | 167 |
168 | 169 |

Web Development

170 |

171 |
172 | 173 |
174 | 175 |

App Development

176 |

177 |
178 | 179 |
180 | 181 |
182 | 183 | 184 | 185 | 186 | 187 |
188 | 189 |
190 |

contact me

191 |
192 | 193 |
194 | 195 |
196 | 197 |

get in touch

198 | 199 | 200 |
201 |

Phone:

202 |
203 |
204 |

+919597989705

205 |
206 |
207 | 208 |
209 |

email:

210 |
211 |
212 |

harikishore.s.official@gmail.com

213 |
214 |
215 | 216 |
217 |

linkedin:

218 |
219 |
220 |

https://www.linkedin.com/in/harikishore-s-79628b23a/

221 |
222 |
223 | 224 |
225 |

github:

226 |
227 |
228 |

https://github.com/Harikishore-Official

229 |
230 |
231 |
232 | 233 |
234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 |
243 | 244 |
245 | 246 |
247 | 248 | 249 | 250 | 251 | 252 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 284 | 285 | 286 | 287 | 288 | -------------------------------------------------------------------------------- /main.css: -------------------------------------------------------------------------------- 1 | /* Table of Contents 2 | ---------------------------------- 3 | 4 | 0- Global CSS 5 | 1- Heading CSS 6 | 2- Button CSS 7 | 3- Header Area CSS 8 | 4- Home Area CSS 9 | 5- About Area CSS 10 | 6- Qualification Area CSS 11 | 7- Services Area CSS 12 | 8- Portfolio Area CSS 13 | 9- Testimonials Area CSS 14 | 10- Blog Area CSS 15 | 11- Contact Area CSS 16 | 12- Footer Area CSS 17 | 13- Scroll-Top Area CSS 18 | 19 | */ 20 | 21 | 22 | /*--------------------- 0- Global CSS (Start) ---------------------*/ 23 | @import url('https://fonts.googleapis.com/css2?family=Roboto:wght@100;300;400;500;700;900&display=swap'); 24 | 25 | :root{ 26 | --purple: #BC8CF2; 27 | --black: #000000; 28 | --white: #F7F5F2; 29 | --grey: #DFDFDE; 30 | } 31 | 32 | *{ 33 | font-family: 'Roboto', sans-serif; 34 | -webkit-box-sizing: border-box; 35 | box-sizing: border-box; 36 | margin: 0; 37 | padding: 0; 38 | text-decoration: none; 39 | text-transform: capitalize; 40 | border: none; 41 | outline: none; 42 | -webkit-transition: all 0.2s linear; 43 | -moz-transition: all 0.2s linear; 44 | -o-transition: all 0.2s linear; 45 | transition: all 0.2s linear; 46 | } 47 | 48 | *::selection{ 49 | color: var(--white); 50 | background-color: var(--purple); 51 | } 52 | 53 | html{ 54 | font-size: 62.5%; 55 | overflow-x: hidden; 56 | scroll-behavior: smooth; 57 | scroll-padding-top: 6rem; 58 | } 59 | 60 | body{ 61 | background-color: var(--black); 62 | } 63 | 64 | section{ 65 | padding: 2rem 5%; 66 | } 67 | 68 | ::-webkit-scrollbar{ 69 | width: 0.8rem; 70 | } 71 | 72 | ::-webkit-scrollbar-thumb{ 73 | border-radius: 1rem; 74 | background-color: var(--purple); 75 | } 76 | 77 | ::-webkit-scrollbar-track{ 78 | background-color: var(--black); 79 | } 80 | 81 | .swiper-pagination-bullet{ 82 | height: 1rem; 83 | width: 1rem; 84 | border-radius: 50rem; 85 | background-color: var(--grey); 86 | } 87 | 88 | .swiper-pagination-bullet-active{ 89 | width: 3rem; 90 | background: var(--purple); 91 | } 92 | 93 | /*--------------------- 0- Global CSS (End) ---------------------*/ 94 | 95 | 96 | 97 | /*--------------------- 1- Heading CSS (Start) ---------------------*/ 98 | .heading{ 99 | margin-bottom: 2rem; 100 | } 101 | 102 | .heading h2{ 103 | text-align: center; 104 | padding-bottom: 2rem; 105 | color:var(--purple); 106 | font-size: 4rem; 107 | } 108 | 109 | .heading h2 span{ 110 | position: relative; 111 | z-index: 0; 112 | color: var(--white); 113 | } 114 | 115 | .heading h2 span::before{ 116 | content: ''; 117 | position: absolute; 118 | bottom: -0.5rem; left: 0; 119 | z-index: -1; 120 | background: var(--purple); 121 | height: 0.2rem; 122 | width: 80%; 123 | margin-left: 10%; 124 | } 125 | 126 | /*--------------------- 1- Heading CSS (End) ---------------------*/ 127 | 128 | 129 | 130 | /*--------------------- 2- Button CSS (Start) ---------------------*/ 131 | .btn{ 132 | display: inline-block; 133 | padding: 1rem 2rem; 134 | font-size: 1.8rem; 135 | color: var(--purple); 136 | background-color: transparent; 137 | border: 0.2rem solid var(--purple); 138 | } 139 | 140 | .btn i{ 141 | padding-left: 1rem; 142 | } 143 | 144 | .btn:hover{ 145 | color: var(--white); 146 | background-color: var(--purple); 147 | cursor: pointer; 148 | } 149 | 150 | /*--------------------- 2- Button CSS (End) ---------------------*/ 151 | 152 | 153 | 154 | /*--------------------- 3- Header Area CSS (Start) ---------------------*/ 155 | header{ 156 | position: fixed; 157 | top: 0; 158 | left: 0; 159 | width: 100%; 160 | padding: 2rem 5%; 161 | display: -webkit-box; 162 | display: -ms-flexbox; 163 | display: flex; 164 | -webkit-box-pack: justify; 165 | -ms-flex-pack: justify; 166 | justify-content: space-between; 167 | -webkit-box-align: center; 168 | -ms-flex-align: center; 169 | align-items: center; 170 | background: transparent; 171 | -webkit-transition: all 0.5s linear; 172 | -moz-transition: all 0.5s linear; 173 | -o-transition: all 0.5s linear; 174 | transition: all 0.5s linear; 175 | z-index: 999; 176 | } 177 | 178 | header.sticky{ 179 | border-bottom: 0.1rem solid var(--grey); 180 | background: rgba(0, 0, 0, 0.8); 181 | } 182 | 183 | header .logo h2{ 184 | font-size: 2.5rem; 185 | font-weight: 900; 186 | color: var(--purple); 187 | text-transform: uppercase; 188 | letter-spacing: 0.2rem; 189 | } 190 | 191 | header .navbar a{ 192 | color: var(--white); 193 | font-size: 1.8rem; 194 | margin-left: 1rem; 195 | } 196 | 197 | header .navbar a:hover, 198 | header .navbar a.active{ 199 | color: var(--purple); 200 | } 201 | 202 | header #menu-btn{ 203 | font-size: 3rem; 204 | color: var(--white); 205 | cursor: pointer; 206 | -webkit-transition: all 0.5s linear; 207 | -moz-transition: all 0.5s linear; 208 | -o-transition: all 0.5s linear; 209 | transition: all 0.5s linear; 210 | display: none; 211 | } 212 | 213 | header .fa-times{ 214 | -webkit-transform: rotate(180deg); 215 | transform: rotate(180deg); 216 | } 217 | 218 | header #menu-btn:hover{ 219 | color: var(--purple); 220 | } 221 | 222 | /*--------------------- 3- Header Area CSS (End) ---------------------*/ 223 | 224 | 225 | 226 | /*--------------------- 4- Home Area CSS (Start) ---------------------*/ 227 | .home{ 228 | padding: 0rem 5%; 229 | background-color: var(--black); 230 | min-height: 100vh; 231 | } 232 | 233 | .home .box-container{ 234 | min-height: 100vh; 235 | display: -webkit-box; 236 | display: -ms-flexbox; 237 | display: flex; 238 | -webkit-box-pack: center; 239 | -ms-flex-pack: center; 240 | justify-content: center; 241 | -webkit-box-align: center; 242 | -ms-flex-align: center; 243 | align-items: center; 244 | -ms-flex-wrap: wrap; 245 | flex-wrap: wrap; 246 | gap: 4rem; 247 | } 248 | 249 | .home .image{ 250 | text-align: center; 251 | -webkit-box-flex: 1; 252 | -ms-flex: 1 1 40rem; 253 | flex: 1 1 40rem; 254 | 255 | } 256 | 257 | .home .image img{ 258 | height: 40rem; 259 | width: 40rem; 260 | border-radius: 50% 50% 50% 50% / 30% 30% 70% 70% ; 261 | object-fit:cover; 262 | } 263 | 264 | .home .content{ 265 | -webkit-box-flex: 1; 266 | -ms-flex: 1 1 40rem; 267 | flex: 1 1 40rem; 268 | 269 | display: -webkit-box; 270 | display: -ms-flexbox; 271 | display: flex; 272 | 273 | -webkit-box-pack: center; 274 | -ms-flex-pack: center; 275 | justify-content: center; 276 | 277 | -webkit-box-align: center; 278 | -ms-flex-align: center; 279 | align-items: center; 280 | 281 | margin-top: 7rem; 282 | } 283 | 284 | .home .content h2{ 285 | font-size: 2.5rem; 286 | font-weight: 400; 287 | color: var(--purple); 288 | } 289 | 290 | .home .content h1{ 291 | font-size: 4rem; 292 | color: var(--white); 293 | padding: 1rem 0; 294 | text-transform: none; 295 | } 296 | 297 | .home .content h1 span{ 298 | color: var(--purple); 299 | 300 | } 301 | 302 | .home .content p{ 303 | font-size: 1.7rem; 304 | font-weight: 400; 305 | color: var(--white); 306 | padding-bottom: 2rem; 307 | line-height: 1.5; 308 | } 309 | /*--------------------- 4- Home Area CSS (End) ---------------------*/ 310 | 311 | 312 | 313 | /*--------------------- 5- About Area CSS (Start) ---------------------*/ 314 | .about .box-container{ 315 | display: -webkit-box; 316 | display: -ms-flexbox; 317 | display: flex; 318 | -webkit-box-pack: center; 319 | -ms-flex-pack: center; 320 | justify-content: center; 321 | -ms-flex-wrap: wrap; 322 | flex-wrap: wrap; 323 | gap: 2rem; 324 | padding: 2rem 0; 325 | } 326 | 327 | .about .image{ 328 | width: 32rem; 329 | text-align: center; 330 | } 331 | 332 | .about .image img{ 333 | width: 100%; 334 | border: 1rem solid var(--purple); 335 | } 336 | 337 | .about .content{ 338 | -webkit-box-flex: 1; 339 | -ms-flex: 1 1 55rem; 340 | flex: 1 1 55rem; 341 | } 342 | 343 | .about .content h2{ 344 | font-size: 3rem; 345 | color: var(--white); 346 | padding-bottom: 1rem; 347 | } 348 | 349 | .about .content > p{ 350 | font-size: 1.6rem; 351 | color: var(--grey); 352 | line-height: 1.6; 353 | padding-bottom: 1rem; 354 | } 355 | 356 | .about .content .about-info{ 357 | display: -webkit-box; 358 | display: -ms-flexbox; 359 | display: flex; 360 | -webkit-box-pack: start; 361 | -ms-flex-pack: start; 362 | justify-content: flex-start; 363 | -webkit-box-align: center; 364 | -ms-flex-align: center; 365 | align-items: center; 366 | -ms-flex-wrap: wrap; 367 | flex-wrap: wrap; 368 | gap: 1rem; 369 | } 370 | 371 | .about .content .about-info .info{ 372 | -webkit-box-flex: 1; 373 | -ms-flex: 1 1 15rem; 374 | flex: 1 1 15rem; 375 | } 376 | 377 | .about .content .about-info .info h4{ 378 | font-size: 1.6rem; 379 | color: var(--white); 380 | padding-bottom: 1rem; 381 | } 382 | 383 | .about .content .about-info .info span{ 384 | font-size: 1.6rem; 385 | font-weight: 400; 386 | color: var(--grey); 387 | } 388 | 389 | .about .content .about-info .info .btn{ 390 | margin-top: 1rem; 391 | } 392 | 393 | .counting{ 394 | -webkit-box-flex: 1; 395 | -ms-flex: 1 1 35rem; 396 | flex: 1 1 35rem; 397 | display: -webkit-box; 398 | display: -ms-flexbox; 399 | display: flex; 400 | -webkit-box-align: center; 401 | -ms-flex-align: center; 402 | align-items: center; 403 | -webkit-box-pack: center; 404 | -ms-flex-pack: center; 405 | justify-content: center; 406 | -ms-flex-wrap: wrap; 407 | flex-wrap: wrap; 408 | gap: 1rem; 409 | } 410 | 411 | .counting .box{ 412 | -webkit-box-flex: 1; 413 | -ms-flex: 1 1 18rem; 414 | flex: 1 1 18rem; 415 | text-align: center; 416 | background-color: #222; 417 | padding: 2rem; 418 | } 419 | 420 | .counting .box .count{ 421 | font-size: 3.5rem; 422 | color: var(--purple); 423 | padding-bottom: 0.5rem; 424 | } 425 | 426 | .counting .box h3{ 427 | font-size: 1.8rem; 428 | color: var(--white); 429 | } 430 | 431 | .skill-container{ 432 | padding: 2rem 0; 433 | } 434 | 435 | .skills{ 436 | display: -webkit-box; 437 | display: -ms-flexbox; 438 | display: flex; 439 | -ms-flex-wrap: wrap; 440 | flex-wrap: wrap; 441 | } 442 | 443 | .skill-item{ 444 | -webkit-box-flex: 1; 445 | -ms-flex: 1 1 30rem; 446 | flex: 1 1 30rem; 447 | margin-right: 1.5rem; 448 | } 449 | 450 | .skill-item .box{ 451 | padding:1rem 0; 452 | } 453 | 454 | .skill-item .box h3{ 455 | display: -webkit-box; 456 | display: -ms-flexbox; 457 | display: flex; 458 | -webkit-box-pack: justify; 459 | -ms-flex-pack: justify; 460 | justify-content: space-between; 461 | padding:.7rem 0; 462 | font-size: 1.7rem; 463 | color: var(--white); 464 | font-weight: 400; 465 | } 466 | 467 | .skill-item .box .progress-bar{ 468 | width:100%; 469 | background:#222; 470 | overflow:hidden; 471 | height:1rem; 472 | border-radius: 50rem; 473 | } 474 | 475 | .skill-item .box .progress-bar span{ 476 | display:block; 477 | height:100%; 478 | background: var(--purple); 479 | } 480 | 481 | .skill-item.item1 .box:nth-child(1) .progress-bar span{ 482 | width:70%; 483 | } 484 | 485 | .skill-item.item1 .box:nth-child(2) .progress-bar span{ 486 | width:60%; 487 | } 488 | 489 | .skill-item.item1 .box:nth-child(3) .progress-bar span{ 490 | width:70%; 491 | } 492 | 493 | .skill-item.item2 .box:nth-child(1) .progress-bar span{ 494 | width:60%; 495 | } 496 | 497 | .skill-item.item2 .box:nth-child(2) .progress-bar span{ 498 | width:60%; 499 | } 500 | 501 | .skill-item.item2 .box:nth-child(3) .progress-bar span{ 502 | width:60%; 503 | } 504 | 505 | /*--------------------- 5- About Area CSS (End) ---------------------*/ 506 | 507 | 508 | 509 | /*--------------------- 6- Qualification Area CSS (Start) ---------------------*/ 510 | .qualification .box-container{ 511 | display: -webkit-box; 512 | display: -ms-flexbox; 513 | display: flex; 514 | -webkit-box-pack: center; 515 | -ms-flex-pack: center; 516 | justify-content: center; 517 | -webkit-box-align: center; 518 | -ms-flex-align: center; 519 | align-items: center; 520 | -ms-flex-wrap: wrap; 521 | flex-wrap: wrap; 522 | gap: 4rem; 523 | } 524 | 525 | .education, .experience{ 526 | -webkit-box-flex: 1; 527 | -ms-flex: 1 1 40rem; 528 | flex: 1 1 40rem; 529 | } 530 | 531 | .experience-item{ 532 | position: relative; 533 | -webkit-box-flex: 1; 534 | -ms-flex: 1 1 40rem; 535 | flex: 1 1 40rem; 536 | padding: 0 3rem 2rem 3rem; 537 | border-left: 0.2rem solid var(--purple); 538 | margin-left: 2rem; 539 | } 540 | 541 | .experience-item i{ 542 | position: absolute; 543 | top: 0; 544 | left: -2.5rem; 545 | height:5rem; 546 | width: 5rem; 547 | border-radius: 50%; 548 | line-height: 5rem; 549 | text-align: center; 550 | font-size: 2rem; 551 | color:var(--white); 552 | background:var(--purple); 553 | } 554 | 555 | .experience-item .content{ 556 | border-radius: 0.5rem; 557 | padding: 1rem 2rem; 558 | border-left: 2rem; 559 | } 560 | 561 | .experience-item span{ 562 | background: #222; 563 | color: var(--white); 564 | padding: 0.5rem 1.5rem; 565 | font-size: 1.8rem; 566 | border-radius: 50rem; 567 | } 568 | 569 | .experience-item h3{ 570 | font-size: 2.5rem; 571 | color: var(--white); 572 | padding: 2rem 0; 573 | } 574 | 575 | .experience-item p{ 576 | color: var(--grey); 577 | font-size: 1.6rem; 578 | line-height: 2.5rem; 579 | } 580 | 581 | /*--------------------- 6- Qualification Area CSS (End) ---------------------*/ 582 | 583 | 584 | 585 | /*--------------------- 7- Services Area CSS (Start) ---------------------*/ 586 | .service .box-container{ 587 | display: -webkit-box; 588 | display: -ms-flexbox; 589 | display: flex; 590 | -webkit-box-pack: center; 591 | -ms-flex-pack: center; 592 | justify-content: center; 593 | -webkit-box-align: center; 594 | -ms-flex-align: center; 595 | align-items: center; 596 | -ms-flex-wrap: wrap; 597 | flex-wrap: wrap; 598 | gap: 1.5rem; 599 | } 600 | 601 | .service-item{ 602 | -webkit-box-flex: 1; 603 | -ms-flex: 1 1 33rem; 604 | flex: 1 1 33rem; 605 | background-color: var(--black); 606 | padding: 4rem 3rem; 607 | text-align: center; 608 | border: 0.1rem solid rgba(255,255, 255, 0.3); 609 | border-radius: 0.5rem; 610 | -webkit-transition: all 0.5s linear; 611 | -moz-transition: all 0.5s linear; 612 | -o-transition: all 0.5s linear; 613 | transition: all 0.5s linear; 614 | } 615 | 616 | .service-item:hover{ 617 | background-color: var(--purple); 618 | } 619 | 620 | .service-item i{ 621 | color: var(--white); 622 | font-size: 4rem; 623 | } 624 | 625 | .service-item h3{ 626 | font-size: 2rem; 627 | color: var(--white); 628 | padding: 1.5rem 0; 629 | } 630 | 631 | .service-item p{ 632 | font-size: 1.6rem; 633 | color: var(--grey); 634 | line-height: 1.6; 635 | } 636 | 637 | .service-item:hover p{ 638 | color: var(--white); 639 | } 640 | 641 | /*--------------------- 7- Services Area CSS (End) ---------------------*/ 642 | 643 | 644 | 645 | /*--------------------- 8- Portfolio Area CSS (Start) ---------------------*/ 646 | .controls{ 647 | display: -webkit-box; 648 | display: -ms-flexbox; 649 | display: flex; 650 | -webkit-box-pack: center; 651 | -ms-flex-pack: center; 652 | justify-content: center; 653 | -webkit-box-align: center; 654 | -ms-flex-align: center; 655 | align-items: center; 656 | -ms-flex-wrap: wrap; 657 | flex-wrap: wrap; 658 | list-style-type: none; 659 | margin-top: 2rem; 660 | } 661 | 662 | .controls .button{ 663 | cursor: pointer; 664 | margin: 0.5rem; 665 | } 666 | 667 | .controls .button.active{ 668 | cursor: pointer; 669 | background-color: var(--purple); 670 | color: var(--white); 671 | } 672 | 673 | .portfolio .box-container{ 674 | display: -ms-grid; 675 | display: grid; 676 | grid-template-columns: repeat(auto-fit, minmax(33rem, 1fr)); 677 | gap: 0.5rem; 678 | padding: 2rem 0; 679 | } 680 | 681 | .portfolio-item{ 682 | border-radius: 0.5rem; 683 | height: 25rem; 684 | overflow: hidden; 685 | position: relative; 686 | } 687 | 688 | .portfolio-item img{ 689 | height: 100%; 690 | width: 100%; 691 | object-fit: cover; 692 | } 693 | 694 | .portfolio-item .content{ 695 | content: ''; 696 | position: absolute; 697 | top: 10%; 698 | left: 10%; 699 | height: 80%; 700 | width: 80%; 701 | border-radius: 0.5rem; 702 | background-color: rgba(0, 0, 0, 0.8); 703 | display: -webkit-box; 704 | display: -ms-flexbox; 705 | display: flex; 706 | -webkit-box-pack: center; 707 | -ms-flex-pack: center; 708 | justify-content: center; 709 | -webkit-box-align: center; 710 | -ms-flex-align: center; 711 | align-items: center; 712 | -webkit-box-orient: vertical; 713 | -webkit-box-direction: normal; 714 | -ms-flex-direction: column; 715 | flex-direction: column; 716 | -webkit-transform: scale(0); 717 | transform: scale(0); 718 | } 719 | 720 | .portfolio-item .content h4{ 721 | font-size: 2rem; 722 | font-weight: bold; 723 | color: var(--purple); 724 | transform-origin: top; 725 | -webkit-transform: translateY(-10rem); 726 | transform: translateY(-10rem); 727 | opacity: 0; 728 | padding-bottom: 1rem; 729 | -webkit-transition: all 0.4s linear; 730 | -moz-transition: all 0.4s linear; 731 | -o-transition: all 0.4s linear; 732 | transition: all 0.4s linear; 733 | } 734 | 735 | .portfolio-item .content p{ 736 | font-size: 1.8rem; 737 | font-weight: 400; 738 | color: var(--white); 739 | transform-origin: top; 740 | -webkit-transform: translateY(-10rem); 741 | transform: translateY(-10rem); 742 | opacity: 0; 743 | -webkit-transition: all 0.4s linear; 744 | -moz-transition: all 0.4s linear; 745 | -o-transition: all 0.4s linear; 746 | transition: all 0.4s linear; 747 | } 748 | 749 | .portfolio-item .content .view-btn{ 750 | font-size: 2rem; 751 | color: var(--purple); 752 | transform-origin: top; 753 | -webkit-transform: translateY(-10rem); 754 | transform: translateY(-10rem); 755 | opacity: 0; 756 | -webkit-transition: all 0.4s linear; 757 | -moz-transition: all 0.4s linear; 758 | -o-transition: all 0.4s linear; 759 | transition: all 0.4s linear; 760 | border-radius: 5rem; 761 | margin-top: 1.5rem; 762 | } 763 | 764 | .portfolio-item:hover .content{ 765 | -webkit-transform: scale(1); 766 | transform: scale(1); 767 | } 768 | 769 | .portfolio-item:hover .content h4{ 770 | -webkit-transform: translateY(0); 771 | transform: translateY(0); 772 | opacity: 1; 773 | } 774 | 775 | .portfolio-item:hover .content p{ 776 | -webkit-transform: translateY(0); 777 | transform: translateY(0); 778 | opacity: 1; 779 | } 780 | 781 | .portfolio-item:hover .content .view-btn{ 782 | -webkit-transform: translateY(0); 783 | transform: translateY(0); 784 | opacity: 1; 785 | } 786 | 787 | .portfolio-item:hover img{ 788 | -webkit-transform: scale(1.2); 789 | transform: scale(1.2); 790 | } 791 | 792 | /*CSS3 Animation Effects for Magnific Popup*/ 793 | 794 | /* start state */ 795 | .mfp-newspaper .mfp-with-anim { 796 | opacity: 0; 797 | -webkit-transition: all 0.2s ease-in-out; 798 | transition: all 0.2s ease-in-out; 799 | 800 | -webkit-transform: scale(0) rotate(500deg); 801 | transform: scale(0) rotate(500deg); 802 | } 803 | .mfp-newspaper.mfp-bg { 804 | opacity: 0; 805 | -webkit-transition: all 0.2s ease-in-out; 806 | transition: all 0.2s ease-in-out; 807 | } 808 | 809 | /* animate in */ 810 | .mfp-newspaper.mfp-ready .mfp-with-anim { 811 | opacity: 1; 812 | -webkit-transform: scale(1) rotate(0deg); 813 | transform: scale(1) rotate(0deg); 814 | } 815 | .mfp-newspaper.mfp-ready.mfp-bg { 816 | opacity: 0.8; 817 | } 818 | 819 | /* animate out */ 820 | .mfp-newspaper.mfp-removing .mfp-with-anim { 821 | -webkit-transform: scale(0) rotate(500deg); 822 | transform: scale(0) rotate(500deg); 823 | opacity: 0; 824 | } 825 | .mfp-newspaper.mfp-removing.mfp-bg { 826 | opacity: 0; 827 | } 828 | 829 | 830 | /*--------------------- 8- Portfolio Area CSS (End) ---------------------*/ 831 | 832 | 833 | 834 | /*--------------------- 9- Testimonials Area CSS (Start) ---------------------*/ 835 | .testimonial-slider{ 836 | position: relative; 837 | padding-bottom: 4rem; 838 | overflow: hidden; 839 | } 840 | 841 | .testi-item{ 842 | text-align: center; 843 | border: 0.1rem solid var(--grey); 844 | border-radius: 0.5rem; 845 | padding: 4rem 2rem; 846 | } 847 | 848 | .testi-item:hover{ 849 | border-color: var(--purple); 850 | } 851 | 852 | .testi-item img{ 853 | height: 10rem; 854 | width: 10rem; 855 | border-radius: 50%; 856 | border: 0.5rem solid var(--white); 857 | } 858 | 859 | .testi-item .fa-quote-left{ 860 | display: block; 861 | font-size: 3rem; 862 | color: var(--white); 863 | margin: 1rem 0; 864 | } 865 | 866 | .testi-item p{ 867 | color: var(--grey); 868 | font-size: 1.5rem; 869 | line-height: 1.5; 870 | } 871 | 872 | .testi-item .intro{ 873 | margin: 1rem 0; 874 | } 875 | 876 | .testi-item .intro h3{ 877 | font-size: 2rem; 878 | color: var(--white); 879 | padding-bottom: 0.5rem; 880 | } 881 | 882 | .testi-item .intro h5{ 883 | color: var(--purple); 884 | font-size: 1.4rem; 885 | font-weight: 400; 886 | } 887 | 888 | /*--------------------- 9- Testimonials Area CSS (End) ---------------------*/ 889 | 890 | 891 | 892 | /*--------------------- 10- Blog Area CSS (Start) ---------------------*/ 893 | .blog-slider{ 894 | position: relative; 895 | padding-bottom: 4rem; 896 | overflow: hidden; 897 | } 898 | 899 | .blog-item{ 900 | background-color: #222; 901 | border: 0.1rem solid rgba(0, 0, 0, 0.1); 902 | border-radius: 0.5rem; 903 | overflow: hidden; 904 | } 905 | 906 | .blog-item .image{ 907 | height: 25rem; 908 | overflow: hidden; 909 | } 910 | 911 | .blog-item:hover .image img{ 912 | -webkit-transform: scale(1.2); 913 | transform: scale(1.2); 914 | } 915 | 916 | .blog-item .image img{ 917 | height: 100%; 918 | width: 100%; 919 | object-fit: cover; 920 | } 921 | 922 | .blog-item .content{ 923 | padding: 2rem 1rem; 924 | } 925 | 926 | .blog-item .content .intro{ 927 | display: -webkit-box; 928 | display: -ms-flexbox; 929 | display: flex; 930 | -webkit-box-pack: justify; 931 | -ms-flex-pack: justify; 932 | justify-content: space-between; 933 | border-bottom: 0.2rem solid var(--grey); 934 | padding: 1rem 0; 935 | margin-bottom: 1.5rem; 936 | } 937 | 938 | .blog-item .content .intro h5{ 939 | font-size: 1.5rem; 940 | } 941 | 942 | .blog-item .content .intro h5 i{ 943 | color: var(--purple); 944 | padding-right: 0.5rem; 945 | } 946 | 947 | .blog-item .content .intro h5 span{ 948 | color: var(--grey); 949 | } 950 | 951 | .blog-item .content .main-heading{ 952 | font-size: 2rem; 953 | font-weight: bold; 954 | color: var(--white); 955 | } 956 | 957 | .blog-item p{ 958 | padding: 1rem 0; 959 | font-size: 1.6rem; 960 | color: var(--grey); 961 | } 962 | 963 | .blog-item .btn{ 964 | margin-top: 1rem; 965 | } 966 | 967 | /*--------------------- 10- Blog Area CSS (End) ---------------------*/ 968 | 969 | 970 | 971 | /*--------------------- 11- Contact Area CSS (Start) ---------------------*/ 972 | .contact .alert{ 973 | font-size: 2rem; 974 | color: var(--purple); 975 | border-radius: 0.5rem; 976 | padding-left: 1rem; 977 | } 978 | 979 | .contact .box-container{ 980 | display: -webkit-box; 981 | display: -ms-flexbox; 982 | display: flex; 983 | -webkit-box-pack: center; 984 | -ms-flex-pack: center; 985 | justify-content: center; 986 | -webkit-box-align: center; 987 | -ms-flex-align: center; 988 | align-items: center; 989 | -ms-flex-wrap: wrap; 990 | flex-wrap: wrap; 991 | gap: 2rem; 992 | } 993 | 994 | .contact-info{ 995 | -webkit-box-flex: 1; 996 | -ms-flex: 1 1 42rem; 997 | flex: 1 1 42rem; 998 | } 999 | 1000 | .contact-info h3{ 1001 | font-size: 3rem; 1002 | color: var(--white); 1003 | } 1004 | 1005 | .contact-info > p{ 1006 | font-size: 1.6rem; 1007 | color: var(--grey); 1008 | padding: 0.5rem 0; 1009 | } 1010 | 1011 | .contact-info .info-item{ 1012 | padding: 1rem 0; 1013 | } 1014 | 1015 | .contact-info .info-item .gmail, 1016 | .contact-info .info-item .linkedin, 1017 | .contact-info .info-item .github{ 1018 | text-transform: none; 1019 | } 1020 | 1021 | .contact-info .info-item h4{ 1022 | font-size: 1.8rem; 1023 | color: var(--white); 1024 | } 1025 | 1026 | .contact-info .info-item .detail{ 1027 | display: -webkit-box; 1028 | display: -ms-flexbox; 1029 | display: flex; 1030 | -webkit-box-align: center; 1031 | -ms-flex-align: center; 1032 | align-items: center; 1033 | } 1034 | 1035 | .contact-info .info-item .detail .fas, 1036 | .contact-info .info-item .detail .fab{ 1037 | border-radius: 50%; 1038 | color: var(--purple); 1039 | display: -webkit-box; 1040 | display: -ms-flexbox; 1041 | display: flex;; 1042 | -webkit-box-pack: center; 1043 | -ms-flex-pack: center; 1044 | justify-content: center; 1045 | -webkit-box-align: center; 1046 | -ms-flex-align: center; 1047 | align-items: center; 1048 | font-size: 1.5rem; 1049 | } 1050 | 1051 | .contact-info .info-item .detail p{ 1052 | font-size: 1.6rem; 1053 | color: var(--grey); 1054 | line-height: 1.6; 1055 | padding-left: 1rem; 1056 | } 1057 | 1058 | .contact-form{ 1059 | -webkit-box-flex: 1; 1060 | -ms-flex: 1 1 42rem; 1061 | flex: 1 1 42rem; 1062 | } 1063 | 1064 | .contact-form .box{ 1065 | width: 100%; 1066 | text-transform: none; 1067 | color: var(--grey); 1068 | font-size: 1.6rem; 1069 | border: 0.1rem solid rgba(0, 0, 0, 0.1); 1070 | padding: 1.5rem; 1071 | margin: 0.5rem 0; 1072 | background-color: #222; 1073 | } 1074 | 1075 | .contact-form .box:focus{ 1076 | border-color: var(--white); 1077 | } 1078 | 1079 | .contact-form .box::placeholder{ 1080 | color: var(--grey); 1081 | } 1082 | 1083 | .contact-form textarea{ 1084 | height: 15rem; 1085 | resize: none; 1086 | } 1087 | 1088 | .contact-form .btn{ 1089 | margin-top: 1rem; 1090 | } 1091 | 1092 | /*--------------------- 11- Contact Area CSS (End) ---------------------*/ 1093 | 1094 | 1095 | 1096 | /*--------------------- 12- Footer Area CSS (Start) ---------------------*/ 1097 | footer{ 1098 | background-color: var(--purple); 1099 | padding: 2rem 0; 1100 | text-align: center; 1101 | } 1102 | 1103 | footer .social{ 1104 | display: -webkit-box; 1105 | display: -ms-flexbox; 1106 | display: flex; 1107 | -webkit-box-pack: center; 1108 | -ms-flex-pack: center; 1109 | justify-content: center; 1110 | padding: 2rem 0; 1111 | } 1112 | 1113 | footer .social .fab{ 1114 | background-color: var(--black); 1115 | border-radius: 50%; 1116 | height: 4rem; 1117 | width: 4rem; 1118 | color: var(--white); 1119 | font-size: 2rem; 1120 | display: -webkit-box; 1121 | display: -ms-flexbox; 1122 | display: flex; 1123 | -webkit-box-pack: center; 1124 | -ms-flex-pack: center; 1125 | justify-content: center; 1126 | -webkit-box-align: center; 1127 | -ms-flex-align: center; 1128 | align-items: center; 1129 | margin: 0 0.5rem; 1130 | } 1131 | 1132 | footer .social .fab:hover{ 1133 | color: var(--black); 1134 | background-color: var(--white); 1135 | } 1136 | 1137 | footer .content p{ 1138 | font-size: 2rem; 1139 | color: var(--white); 1140 | } 1141 | 1142 | footer .content p span{ 1143 | color: var(--black); 1144 | } 1145 | 1146 | /*--------------------- 12- Footer Area CSS (End) ---------------------*/ 1147 | 1148 | 1149 | 1150 | /*--------------------- 13- Scroll-Top (Start) ---------------------*/ 1151 | .scroll-top{ 1152 | position: fixed; 1153 | bottom: 1rem; 1154 | right:1rem; 1155 | height: 5rem; 1156 | width: 5rem; 1157 | font-size: 3rem; 1158 | font-weight:lighter; 1159 | background: var(--black); 1160 | color: var(--white); 1161 | border: 0.2rem solid var(--white); 1162 | border-radius: 50%; 1163 | -webkit-transition: all 0.2s; 1164 | -moz-transition: all 0.2s; 1165 | -o-transition: all 0.2s; 1166 | transition: all 0.2s; 1167 | z-index: 999; 1168 | display: -webkit-box; 1169 | display: -ms-flexbox; 1170 | display: flex; 1171 | -webkit-box-pack: center; 1172 | -ms-flex-pack: center; 1173 | justify-content: center; 1174 | -webkit-box-align: center; 1175 | -ms-flex-align: center; 1176 | align-items: center; 1177 | } 1178 | 1179 | .scroll-top:hover{ 1180 | background: var(--white); 1181 | color:var(--black); 1182 | } 1183 | 1184 | /*--------------------- 13- Scroll-Top (End) ---------------------*/ -------------------------------------------------------------------------------- /typed.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * 3 | * typed.js - A JavaScript Typing Animation Library 4 | * Author: Matt Boldt 5 | * Version: v2.0.12 6 | * Url: https://github.com/mattboldt/typed.js 7 | * License(s): MIT 8 | * 9 | */ 10 | (function webpackUniversalModuleDefinition(root, factory) { 11 | if(typeof exports === 'object' && typeof module === 'object') 12 | module.exports = factory(); 13 | else if(typeof define === 'function' && define.amd) 14 | define([], factory); 15 | else if(typeof exports === 'object') 16 | exports["Typed"] = factory(); 17 | else 18 | root["Typed"] = factory(); 19 | })(this, function() { 20 | return /******/ (function(modules) { // webpackBootstrap 21 | /******/ // The module cache 22 | /******/ var installedModules = {}; 23 | /******/ 24 | /******/ // The require function 25 | /******/ function __webpack_require__(moduleId) { 26 | /******/ 27 | /******/ // Check if module is in cache 28 | /******/ if(installedModules[moduleId]) 29 | /******/ return installedModules[moduleId].exports; 30 | /******/ 31 | /******/ // Create a new module (and put it into the cache) 32 | /******/ var module = installedModules[moduleId] = { 33 | /******/ exports: {}, 34 | /******/ id: moduleId, 35 | /******/ loaded: false 36 | /******/ }; 37 | /******/ 38 | /******/ // Execute the module function 39 | /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 40 | /******/ 41 | /******/ // Flag the module as loaded 42 | /******/ module.loaded = true; 43 | /******/ 44 | /******/ // Return the exports of the module 45 | /******/ return module.exports; 46 | /******/ } 47 | /******/ 48 | /******/ 49 | /******/ // expose the modules object (__webpack_modules__) 50 | /******/ __webpack_require__.m = modules; 51 | /******/ 52 | /******/ // expose the module cache 53 | /******/ __webpack_require__.c = installedModules; 54 | /******/ 55 | /******/ // __webpack_public_path__ 56 | /******/ __webpack_require__.p = ""; 57 | /******/ 58 | /******/ // Load entry module and return exports 59 | /******/ return __webpack_require__(0); 60 | /******/ }) 61 | /************************************************************************/ 62 | /******/ ([ 63 | /* 0 */ 64 | /***/ (function(module, exports, __webpack_require__) { 65 | 66 | 'use strict'; 67 | 68 | Object.defineProperty(exports, '__esModule', { 69 | value: true 70 | }); 71 | 72 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 73 | 74 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } 75 | 76 | var _initializerJs = __webpack_require__(1); 77 | 78 | var _htmlParserJs = __webpack_require__(3); 79 | 80 | /** 81 | * Welcome to Typed.js! 82 | * @param {string} elementId HTML element ID _OR_ HTML element 83 | * @param {object} options options object 84 | * @returns {object} a new Typed object 85 | */ 86 | 87 | var Typed = (function () { 88 | function Typed(elementId, options) { 89 | _classCallCheck(this, Typed); 90 | 91 | // Initialize it up 92 | _initializerJs.initializer.load(this, options, elementId); 93 | // All systems go! 94 | this.begin(); 95 | } 96 | 97 | /** 98 | * Toggle start() and stop() of the Typed instance 99 | * @public 100 | */ 101 | 102 | _createClass(Typed, [{ 103 | key: 'toggle', 104 | value: function toggle() { 105 | this.pause.status ? this.start() : this.stop(); 106 | } 107 | 108 | /** 109 | * Stop typing / backspacing and enable cursor blinking 110 | * @public 111 | */ 112 | }, { 113 | key: 'stop', 114 | value: function stop() { 115 | if (this.typingComplete) return; 116 | if (this.pause.status) return; 117 | this.toggleBlinking(true); 118 | this.pause.status = true; 119 | this.options.onStop(this.arrayPos, this); 120 | } 121 | 122 | /** 123 | * Start typing / backspacing after being stopped 124 | * @public 125 | */ 126 | }, { 127 | key: 'start', 128 | value: function start() { 129 | if (this.typingComplete) return; 130 | if (!this.pause.status) return; 131 | this.pause.status = false; 132 | if (this.pause.typewrite) { 133 | this.typewrite(this.pause.curString, this.pause.curStrPos); 134 | } else { 135 | this.backspace(this.pause.curString, this.pause.curStrPos); 136 | } 137 | this.options.onStart(this.arrayPos, this); 138 | } 139 | 140 | /** 141 | * Destroy this instance of Typed 142 | * @public 143 | */ 144 | }, { 145 | key: 'destroy', 146 | value: function destroy() { 147 | this.reset(false); 148 | this.options.onDestroy(this); 149 | } 150 | 151 | /** 152 | * Reset Typed and optionally restarts 153 | * @param {boolean} restart 154 | * @public 155 | */ 156 | }, { 157 | key: 'reset', 158 | value: function reset() { 159 | var restart = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0]; 160 | 161 | clearInterval(this.timeout); 162 | this.replaceText(''); 163 | if (this.cursor && this.cursor.parentNode) { 164 | this.cursor.parentNode.removeChild(this.cursor); 165 | this.cursor = null; 166 | } 167 | this.strPos = 0; 168 | this.arrayPos = 0; 169 | this.curLoop = 0; 170 | if (restart) { 171 | this.insertCursor(); 172 | this.options.onReset(this); 173 | this.begin(); 174 | } 175 | } 176 | 177 | /** 178 | * Begins the typing animation 179 | * @private 180 | */ 181 | }, { 182 | key: 'begin', 183 | value: function begin() { 184 | var _this = this; 185 | 186 | this.options.onBegin(this); 187 | this.typingComplete = false; 188 | this.shuffleStringsIfNeeded(this); 189 | this.insertCursor(); 190 | if (this.bindInputFocusEvents) this.bindFocusEvents(); 191 | this.timeout = setTimeout(function () { 192 | // Check if there is some text in the element, if yes start by backspacing the default message 193 | if (!_this.currentElContent || _this.currentElContent.length === 0) { 194 | _this.typewrite(_this.strings[_this.sequence[_this.arrayPos]], _this.strPos); 195 | } else { 196 | // Start typing 197 | _this.backspace(_this.currentElContent, _this.currentElContent.length); 198 | } 199 | }, this.startDelay); 200 | } 201 | 202 | /** 203 | * Called for each character typed 204 | * @param {string} curString the current string in the strings array 205 | * @param {number} curStrPos the current position in the curString 206 | * @private 207 | */ 208 | }, { 209 | key: 'typewrite', 210 | value: function typewrite(curString, curStrPos) { 211 | var _this2 = this; 212 | 213 | if (this.fadeOut && this.el.classList.contains(this.fadeOutClass)) { 214 | this.el.classList.remove(this.fadeOutClass); 215 | if (this.cursor) this.cursor.classList.remove(this.fadeOutClass); 216 | } 217 | 218 | var humanize = this.humanizer(this.typeSpeed); 219 | var numChars = 1; 220 | 221 | if (this.pause.status === true) { 222 | this.setPauseStatus(curString, curStrPos, true); 223 | return; 224 | } 225 | 226 | // contain typing function in a timeout humanize'd delay 227 | this.timeout = setTimeout(function () { 228 | // skip over any HTML chars 229 | curStrPos = _htmlParserJs.htmlParser.typeHtmlChars(curString, curStrPos, _this2); 230 | 231 | var pauseTime = 0; 232 | var substr = curString.substr(curStrPos); 233 | // check for an escape character before a pause value 234 | // format: \^\d+ .. eg: ^1000 .. should be able to print the ^ too using ^^ 235 | // single ^ are removed from string 236 | if (substr.charAt(0) === '^') { 237 | if (/^\^\d+/.test(substr)) { 238 | var skip = 1; // skip at least 1 239 | substr = /\d+/.exec(substr)[0]; 240 | skip += substr.length; 241 | pauseTime = parseInt(substr); 242 | _this2.temporaryPause = true; 243 | _this2.options.onTypingPaused(_this2.arrayPos, _this2); 244 | // strip out the escape character and pause value so they're not printed 245 | curString = curString.substring(0, curStrPos) + curString.substring(curStrPos + skip); 246 | _this2.toggleBlinking(true); 247 | } 248 | } 249 | 250 | // check for skip characters formatted as 251 | // "this is a `string to print NOW` ..." 252 | if (substr.charAt(0) === '`') { 253 | while (curString.substr(curStrPos + numChars).charAt(0) !== '`') { 254 | numChars++; 255 | if (curStrPos + numChars > curString.length) break; 256 | } 257 | // strip out the escape characters and append all the string in between 258 | var stringBeforeSkip = curString.substring(0, curStrPos); 259 | var stringSkipped = curString.substring(stringBeforeSkip.length + 1, curStrPos + numChars); 260 | var stringAfterSkip = curString.substring(curStrPos + numChars + 1); 261 | curString = stringBeforeSkip + stringSkipped + stringAfterSkip; 262 | numChars--; 263 | } 264 | 265 | // timeout for any pause after a character 266 | _this2.timeout = setTimeout(function () { 267 | // Accounts for blinking while paused 268 | _this2.toggleBlinking(false); 269 | 270 | // We're done with this sentence! 271 | if (curStrPos >= curString.length) { 272 | _this2.doneTyping(curString, curStrPos); 273 | } else { 274 | _this2.keepTyping(curString, curStrPos, numChars); 275 | } 276 | // end of character pause 277 | if (_this2.temporaryPause) { 278 | _this2.temporaryPause = false; 279 | _this2.options.onTypingResumed(_this2.arrayPos, _this2); 280 | } 281 | }, pauseTime); 282 | 283 | // humanized value for typing 284 | }, humanize); 285 | } 286 | 287 | /** 288 | * Continue to the next string & begin typing 289 | * @param {string} curString the current string in the strings array 290 | * @param {number} curStrPos the current position in the curString 291 | * @private 292 | */ 293 | }, { 294 | key: 'keepTyping', 295 | value: function keepTyping(curString, curStrPos, numChars) { 296 | // call before functions if applicable 297 | if (curStrPos === 0) { 298 | this.toggleBlinking(false); 299 | this.options.preStringTyped(this.arrayPos, this); 300 | } 301 | // start typing each new char into existing string 302 | // curString: arg, this.el.html: original text inside element 303 | curStrPos += numChars; 304 | var nextString = curString.substr(0, curStrPos); 305 | this.replaceText(nextString); 306 | // loop the function 307 | this.typewrite(curString, curStrPos); 308 | } 309 | 310 | /** 311 | * We're done typing the current string 312 | * @param {string} curString the current string in the strings array 313 | * @param {number} curStrPos the current position in the curString 314 | * @private 315 | */ 316 | }, { 317 | key: 'doneTyping', 318 | value: function doneTyping(curString, curStrPos) { 319 | var _this3 = this; 320 | 321 | // fires callback function 322 | this.options.onStringTyped(this.arrayPos, this); 323 | this.toggleBlinking(true); 324 | // is this the final string 325 | if (this.arrayPos === this.strings.length - 1) { 326 | // callback that occurs on the last typed string 327 | this.complete(); 328 | // quit if we wont loop back 329 | if (this.loop === false || this.curLoop === this.loopCount) { 330 | return; 331 | } 332 | } 333 | this.timeout = setTimeout(function () { 334 | _this3.backspace(curString, curStrPos); 335 | }, this.backDelay); 336 | } 337 | 338 | /** 339 | * Backspaces 1 character at a time 340 | * @param {string} curString the current string in the strings array 341 | * @param {number} curStrPos the current position in the curString 342 | * @private 343 | */ 344 | }, { 345 | key: 'backspace', 346 | value: function backspace(curString, curStrPos) { 347 | var _this4 = this; 348 | 349 | if (this.pause.status === true) { 350 | this.setPauseStatus(curString, curStrPos, false); 351 | return; 352 | } 353 | if (this.fadeOut) return this.initFadeOut(); 354 | 355 | this.toggleBlinking(false); 356 | var humanize = this.humanizer(this.backSpeed); 357 | 358 | this.timeout = setTimeout(function () { 359 | curStrPos = _htmlParserJs.htmlParser.backSpaceHtmlChars(curString, curStrPos, _this4); 360 | // replace text with base text + typed characters 361 | var curStringAtPosition = curString.substr(0, curStrPos); 362 | _this4.replaceText(curStringAtPosition); 363 | 364 | // if smartBack is enabled 365 | if (_this4.smartBackspace) { 366 | // the remaining part of the current string is equal of the same part of the new string 367 | var nextString = _this4.strings[_this4.arrayPos + 1]; 368 | if (nextString && curStringAtPosition === nextString.substr(0, curStrPos)) { 369 | _this4.stopNum = curStrPos; 370 | } else { 371 | _this4.stopNum = 0; 372 | } 373 | } 374 | 375 | // if the number (id of character in current string) is 376 | // less than the stop number, keep going 377 | if (curStrPos > _this4.stopNum) { 378 | // subtract characters one by one 379 | curStrPos--; 380 | // loop the function 381 | _this4.backspace(curString, curStrPos); 382 | } else if (curStrPos <= _this4.stopNum) { 383 | // if the stop number has been reached, increase 384 | // array position to next string 385 | _this4.arrayPos++; 386 | // When looping, begin at the beginning after backspace complete 387 | if (_this4.arrayPos === _this4.strings.length) { 388 | _this4.arrayPos = 0; 389 | _this4.options.onLastStringBackspaced(); 390 | _this4.shuffleStringsIfNeeded(); 391 | _this4.begin(); 392 | } else { 393 | _this4.typewrite(_this4.strings[_this4.sequence[_this4.arrayPos]], curStrPos); 394 | } 395 | } 396 | // humanized value for typing 397 | }, humanize); 398 | } 399 | 400 | /** 401 | * Full animation is complete 402 | * @private 403 | */ 404 | }, { 405 | key: 'complete', 406 | value: function complete() { 407 | this.options.onComplete(this); 408 | if (this.loop) { 409 | this.curLoop++; 410 | } else { 411 | this.typingComplete = true; 412 | } 413 | } 414 | 415 | /** 416 | * Has the typing been stopped 417 | * @param {string} curString the current string in the strings array 418 | * @param {number} curStrPos the current position in the curString 419 | * @param {boolean} isTyping 420 | * @private 421 | */ 422 | }, { 423 | key: 'setPauseStatus', 424 | value: function setPauseStatus(curString, curStrPos, isTyping) { 425 | this.pause.typewrite = isTyping; 426 | this.pause.curString = curString; 427 | this.pause.curStrPos = curStrPos; 428 | } 429 | 430 | /** 431 | * Toggle the blinking cursor 432 | * @param {boolean} isBlinking 433 | * @private 434 | */ 435 | }, { 436 | key: 'toggleBlinking', 437 | value: function toggleBlinking(isBlinking) { 438 | if (!this.cursor) return; 439 | // if in paused state, don't toggle blinking a 2nd time 440 | if (this.pause.status) return; 441 | if (this.cursorBlinking === isBlinking) return; 442 | this.cursorBlinking = isBlinking; 443 | if (isBlinking) { 444 | this.cursor.classList.add('typed-cursor--blink'); 445 | } else { 446 | this.cursor.classList.remove('typed-cursor--blink'); 447 | } 448 | } 449 | 450 | /** 451 | * Speed in MS to type 452 | * @param {number} speed 453 | * @private 454 | */ 455 | }, { 456 | key: 'humanizer', 457 | value: function humanizer(speed) { 458 | return Math.round(Math.random() * speed / 2) + speed; 459 | } 460 | 461 | /** 462 | * Shuffle the sequence of the strings array 463 | * @private 464 | */ 465 | }, { 466 | key: 'shuffleStringsIfNeeded', 467 | value: function shuffleStringsIfNeeded() { 468 | if (!this.shuffle) return; 469 | this.sequence = this.sequence.sort(function () { 470 | return Math.random() - 0.5; 471 | }); 472 | } 473 | 474 | /** 475 | * Adds a CSS class to fade out current string 476 | * @private 477 | */ 478 | }, { 479 | key: 'initFadeOut', 480 | value: function initFadeOut() { 481 | var _this5 = this; 482 | 483 | this.el.className += ' ' + this.fadeOutClass; 484 | if (this.cursor) this.cursor.className += ' ' + this.fadeOutClass; 485 | return setTimeout(function () { 486 | _this5.arrayPos++; 487 | _this5.replaceText(''); 488 | 489 | // Resets current string if end of loop reached 490 | if (_this5.strings.length > _this5.arrayPos) { 491 | _this5.typewrite(_this5.strings[_this5.sequence[_this5.arrayPos]], 0); 492 | } else { 493 | _this5.typewrite(_this5.strings[0], 0); 494 | _this5.arrayPos = 0; 495 | } 496 | }, this.fadeOutDelay); 497 | } 498 | 499 | /** 500 | * Replaces current text in the HTML element 501 | * depending on element type 502 | * @param {string} str 503 | * @private 504 | */ 505 | }, { 506 | key: 'replaceText', 507 | value: function replaceText(str) { 508 | if (this.attr) { 509 | this.el.setAttribute(this.attr, str); 510 | } else { 511 | if (this.isInput) { 512 | this.el.value = str; 513 | } else if (this.contentType === 'html') { 514 | this.el.innerHTML = str; 515 | } else { 516 | this.el.textContent = str; 517 | } 518 | } 519 | } 520 | 521 | /** 522 | * If using input elements, bind focus in order to 523 | * start and stop the animation 524 | * @private 525 | */ 526 | }, { 527 | key: 'bindFocusEvents', 528 | value: function bindFocusEvents() { 529 | var _this6 = this; 530 | 531 | if (!this.isInput) return; 532 | this.el.addEventListener('focus', function (e) { 533 | _this6.stop(); 534 | }); 535 | this.el.addEventListener('blur', function (e) { 536 | if (_this6.el.value && _this6.el.value.length !== 0) { 537 | return; 538 | } 539 | _this6.start(); 540 | }); 541 | } 542 | 543 | /** 544 | * On init, insert the cursor element 545 | * @private 546 | */ 547 | }, { 548 | key: 'insertCursor', 549 | value: function insertCursor() { 550 | if (!this.showCursor) return; 551 | if (this.cursor) return; 552 | this.cursor = document.createElement('span'); 553 | this.cursor.className = 'typed-cursor'; 554 | this.cursor.setAttribute('aria-hidden', true); 555 | this.cursor.innerHTML = this.cursorChar; 556 | this.el.parentNode && this.el.parentNode.insertBefore(this.cursor, this.el.nextSibling); 557 | } 558 | }]); 559 | 560 | return Typed; 561 | })(); 562 | 563 | exports['default'] = Typed; 564 | module.exports = exports['default']; 565 | 566 | /***/ }), 567 | /* 1 */ 568 | /***/ (function(module, exports, __webpack_require__) { 569 | 570 | 'use strict'; 571 | 572 | Object.defineProperty(exports, '__esModule', { 573 | value: true 574 | }); 575 | 576 | var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; 577 | 578 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 579 | 580 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } 581 | 582 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } 583 | 584 | var _defaultsJs = __webpack_require__(2); 585 | 586 | var _defaultsJs2 = _interopRequireDefault(_defaultsJs); 587 | 588 | /** 589 | * Initialize the Typed object 590 | */ 591 | 592 | var Initializer = (function () { 593 | function Initializer() { 594 | _classCallCheck(this, Initializer); 595 | } 596 | 597 | _createClass(Initializer, [{ 598 | key: 'load', 599 | 600 | /** 601 | * Load up defaults & options on the Typed instance 602 | * @param {Typed} self instance of Typed 603 | * @param {object} options options object 604 | * @param {string} elementId HTML element ID _OR_ instance of HTML element 605 | * @private 606 | */ 607 | 608 | value: function load(self, options, elementId) { 609 | // chosen element to manipulate text 610 | if (typeof elementId === 'string') { 611 | self.el = document.querySelector(elementId); 612 | } else { 613 | self.el = elementId; 614 | } 615 | 616 | self.options = _extends({}, _defaultsJs2['default'], options); 617 | 618 | // attribute to type into 619 | self.isInput = self.el.tagName.toLowerCase() === 'input'; 620 | self.attr = self.options.attr; 621 | self.bindInputFocusEvents = self.options.bindInputFocusEvents; 622 | 623 | // show cursor 624 | self.showCursor = self.isInput ? false : self.options.showCursor; 625 | 626 | // custom cursor 627 | self.cursorChar = self.options.cursorChar; 628 | 629 | // Is the cursor blinking 630 | self.cursorBlinking = true; 631 | 632 | // text content of element 633 | self.elContent = self.attr ? self.el.getAttribute(self.attr) : self.el.textContent; 634 | 635 | // html or plain text 636 | self.contentType = self.options.contentType; 637 | 638 | // typing speed 639 | self.typeSpeed = self.options.typeSpeed; 640 | 641 | // add a delay before typing starts 642 | self.startDelay = self.options.startDelay; 643 | 644 | // backspacing speed 645 | self.backSpeed = self.options.backSpeed; 646 | 647 | // only backspace what doesn't match the previous string 648 | self.smartBackspace = self.options.smartBackspace; 649 | 650 | // amount of time to wait before backspacing 651 | self.backDelay = self.options.backDelay; 652 | 653 | // Fade out instead of backspace 654 | self.fadeOut = self.options.fadeOut; 655 | self.fadeOutClass = self.options.fadeOutClass; 656 | self.fadeOutDelay = self.options.fadeOutDelay; 657 | 658 | // variable to check whether typing is currently paused 659 | self.isPaused = false; 660 | 661 | // input strings of text 662 | self.strings = self.options.strings.map(function (s) { 663 | return s.trim(); 664 | }); 665 | 666 | // div containing strings 667 | if (typeof self.options.stringsElement === 'string') { 668 | self.stringsElement = document.querySelector(self.options.stringsElement); 669 | } else { 670 | self.stringsElement = self.options.stringsElement; 671 | } 672 | 673 | if (self.stringsElement) { 674 | self.strings = []; 675 | self.stringsElement.style.display = 'none'; 676 | var strings = Array.prototype.slice.apply(self.stringsElement.children); 677 | var stringsLength = strings.length; 678 | 679 | if (stringsLength) { 680 | for (var i = 0; i < stringsLength; i += 1) { 681 | var stringEl = strings[i]; 682 | self.strings.push(stringEl.innerHTML.trim()); 683 | } 684 | } 685 | } 686 | 687 | // character number position of current string 688 | self.strPos = 0; 689 | 690 | // current array position 691 | self.arrayPos = 0; 692 | 693 | // index of string to stop backspacing on 694 | self.stopNum = 0; 695 | 696 | // Looping logic 697 | self.loop = self.options.loop; 698 | self.loopCount = self.options.loopCount; 699 | self.curLoop = 0; 700 | 701 | // shuffle the strings 702 | self.shuffle = self.options.shuffle; 703 | // the order of strings 704 | self.sequence = []; 705 | 706 | self.pause = { 707 | status: false, 708 | typewrite: true, 709 | curString: '', 710 | curStrPos: 0 711 | }; 712 | 713 | // When the typing is complete (when not looped) 714 | self.typingComplete = false; 715 | 716 | // Set the order in which the strings are typed 717 | for (var i in self.strings) { 718 | self.sequence[i] = i; 719 | } 720 | 721 | // If there is some text in the element 722 | self.currentElContent = this.getCurrentElContent(self); 723 | 724 | self.autoInsertCss = self.options.autoInsertCss; 725 | 726 | this.appendAnimationCss(self); 727 | } 728 | }, { 729 | key: 'getCurrentElContent', 730 | value: function getCurrentElContent(self) { 731 | var elContent = ''; 732 | if (self.attr) { 733 | elContent = self.el.getAttribute(self.attr); 734 | } else if (self.isInput) { 735 | elContent = self.el.value; 736 | } else if (self.contentType === 'html') { 737 | elContent = self.el.innerHTML; 738 | } else { 739 | elContent = self.el.textContent; 740 | } 741 | return elContent; 742 | } 743 | }, { 744 | key: 'appendAnimationCss', 745 | value: function appendAnimationCss(self) { 746 | var cssDataName = 'data-typed-js-css'; 747 | if (!self.autoInsertCss) { 748 | return; 749 | } 750 | if (!self.showCursor && !self.fadeOut) { 751 | return; 752 | } 753 | if (document.querySelector('[' + cssDataName + ']')) { 754 | return; 755 | } 756 | 757 | var css = document.createElement('style'); 758 | css.type = 'text/css'; 759 | css.setAttribute(cssDataName, true); 760 | 761 | var innerCss = ''; 762 | if (self.showCursor) { 763 | innerCss += '\n .typed-cursor{\n opacity: 1;\n }\n .typed-cursor.typed-cursor--blink{\n animation: typedjsBlink 0.7s infinite;\n -webkit-animation: typedjsBlink 0.7s infinite;\n animation: typedjsBlink 0.7s infinite;\n }\n @keyframes typedjsBlink{\n 50% { opacity: 0.0; }\n }\n @-webkit-keyframes typedjsBlink{\n 0% { opacity: 1; }\n 50% { opacity: 0.0; }\n 100% { opacity: 1; }\n }\n '; 764 | } 765 | if (self.fadeOut) { 766 | innerCss += '\n .typed-fade-out{\n opacity: 0;\n transition: opacity .25s;\n }\n .typed-cursor.typed-cursor--blink.typed-fade-out{\n -webkit-animation: 0;\n animation: 0;\n }\n '; 767 | } 768 | if (css.length === 0) { 769 | return; 770 | } 771 | css.innerHTML = innerCss; 772 | document.body.appendChild(css); 773 | } 774 | }]); 775 | 776 | return Initializer; 777 | })(); 778 | 779 | exports['default'] = Initializer; 780 | var initializer = new Initializer(); 781 | exports.initializer = initializer; 782 | 783 | /***/ }), 784 | /* 2 */ 785 | /***/ (function(module, exports) { 786 | 787 | /** 788 | * Defaults & options 789 | * @returns {object} Typed defaults & options 790 | * @public 791 | */ 792 | 793 | 'use strict'; 794 | 795 | Object.defineProperty(exports, '__esModule', { 796 | value: true 797 | }); 798 | var defaults = { 799 | /** 800 | * @property {array} strings strings to be typed 801 | * @property {string} stringsElement ID of element containing string children 802 | */ 803 | strings: ['These are the default values...', 'You know what you should do?', 'Use your own!', 'Have a great day!'], 804 | stringsElement: null, 805 | 806 | /** 807 | * @property {number} typeSpeed type speed in milliseconds 808 | */ 809 | typeSpeed: 0, 810 | 811 | /** 812 | * @property {number} startDelay time before typing starts in milliseconds 813 | */ 814 | startDelay: 0, 815 | 816 | /** 817 | * @property {number} backSpeed backspacing speed in milliseconds 818 | */ 819 | backSpeed: 0, 820 | 821 | /** 822 | * @property {boolean} smartBackspace only backspace what doesn't match the previous string 823 | */ 824 | smartBackspace: true, 825 | 826 | /** 827 | * @property {boolean} shuffle shuffle the strings 828 | */ 829 | shuffle: false, 830 | 831 | /** 832 | * @property {number} backDelay time before backspacing in milliseconds 833 | */ 834 | backDelay: 700, 835 | 836 | /** 837 | * @property {boolean} fadeOut Fade out instead of backspace 838 | * @property {string} fadeOutClass css class for fade animation 839 | * @property {boolean} fadeOutDelay Fade out delay in milliseconds 840 | */ 841 | fadeOut: false, 842 | fadeOutClass: 'typed-fade-out', 843 | fadeOutDelay: 500, 844 | 845 | /** 846 | * @property {boolean} loop loop strings 847 | * @property {number} loopCount amount of loops 848 | */ 849 | loop: false, 850 | loopCount: Infinity, 851 | 852 | /** 853 | * @property {boolean} showCursor show cursor 854 | * @property {string} cursorChar character for cursor 855 | * @property {boolean} autoInsertCss insert CSS for cursor and fadeOut into HTML 856 | */ 857 | showCursor: true, 858 | cursorChar: '|', 859 | autoInsertCss: true, 860 | 861 | /** 862 | * @property {string} attr attribute for typing 863 | * Ex: input placeholder, value, or just HTML text 864 | */ 865 | attr: null, 866 | 867 | /** 868 | * @property {boolean} bindInputFocusEvents bind to focus and blur if el is text input 869 | */ 870 | bindInputFocusEvents: false, 871 | 872 | /** 873 | * @property {string} contentType 'html' or 'null' for plaintext 874 | */ 875 | contentType: 'html', 876 | 877 | /** 878 | * Before it begins typing 879 | * @param {Typed} self 880 | */ 881 | onBegin: function onBegin(self) {}, 882 | 883 | /** 884 | * All typing is complete 885 | * @param {Typed} self 886 | */ 887 | onComplete: function onComplete(self) {}, 888 | 889 | /** 890 | * Before each string is typed 891 | * @param {number} arrayPos 892 | * @param {Typed} self 893 | */ 894 | preStringTyped: function preStringTyped(arrayPos, self) {}, 895 | 896 | /** 897 | * After each string is typed 898 | * @param {number} arrayPos 899 | * @param {Typed} self 900 | */ 901 | onStringTyped: function onStringTyped(arrayPos, self) {}, 902 | 903 | /** 904 | * During looping, after last string is typed 905 | * @param {Typed} self 906 | */ 907 | onLastStringBackspaced: function onLastStringBackspaced(self) {}, 908 | 909 | /** 910 | * Typing has been stopped 911 | * @param {number} arrayPos 912 | * @param {Typed} self 913 | */ 914 | onTypingPaused: function onTypingPaused(arrayPos, self) {}, 915 | 916 | /** 917 | * Typing has been started after being stopped 918 | * @param {number} arrayPos 919 | * @param {Typed} self 920 | */ 921 | onTypingResumed: function onTypingResumed(arrayPos, self) {}, 922 | 923 | /** 924 | * After reset 925 | * @param {Typed} self 926 | */ 927 | onReset: function onReset(self) {}, 928 | 929 | /** 930 | * After stop 931 | * @param {number} arrayPos 932 | * @param {Typed} self 933 | */ 934 | onStop: function onStop(arrayPos, self) {}, 935 | 936 | /** 937 | * After start 938 | * @param {number} arrayPos 939 | * @param {Typed} self 940 | */ 941 | onStart: function onStart(arrayPos, self) {}, 942 | 943 | /** 944 | * After destroy 945 | * @param {Typed} self 946 | */ 947 | onDestroy: function onDestroy(self) {} 948 | }; 949 | 950 | exports['default'] = defaults; 951 | module.exports = exports['default']; 952 | 953 | /***/ }), 954 | /* 3 */ 955 | /***/ (function(module, exports) { 956 | 957 | /** 958 | * TODO: These methods can probably be combined somehow 959 | * Parse HTML tags & HTML Characters 960 | */ 961 | 962 | 'use strict'; 963 | 964 | Object.defineProperty(exports, '__esModule', { 965 | value: true 966 | }); 967 | 968 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 969 | 970 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } 971 | 972 | var HTMLParser = (function () { 973 | function HTMLParser() { 974 | _classCallCheck(this, HTMLParser); 975 | } 976 | 977 | _createClass(HTMLParser, [{ 978 | key: 'typeHtmlChars', 979 | 980 | /** 981 | * Type HTML tags & HTML Characters 982 | * @param {string} curString Current string 983 | * @param {number} curStrPos Position in current string 984 | * @param {Typed} self instance of Typed 985 | * @returns {number} a new string position 986 | * @private 987 | */ 988 | 989 | value: function typeHtmlChars(curString, curStrPos, self) { 990 | if (self.contentType !== 'html') return curStrPos; 991 | var curChar = curString.substr(curStrPos).charAt(0); 992 | if (curChar === '<' || curChar === '&') { 993 | var endTag = ''; 994 | if (curChar === '<') { 995 | endTag = '>'; 996 | } else { 997 | endTag = ';'; 998 | } 999 | while (curString.substr(curStrPos + 1).charAt(0) !== endTag) { 1000 | curStrPos++; 1001 | if (curStrPos + 1 > curString.length) { 1002 | break; 1003 | } 1004 | } 1005 | curStrPos++; 1006 | } 1007 | return curStrPos; 1008 | } 1009 | 1010 | /** 1011 | * Backspace HTML tags and HTML Characters 1012 | * @param {string} curString Current string 1013 | * @param {number} curStrPos Position in current string 1014 | * @param {Typed} self instance of Typed 1015 | * @returns {number} a new string position 1016 | * @private 1017 | */ 1018 | }, { 1019 | key: 'backSpaceHtmlChars', 1020 | value: function backSpaceHtmlChars(curString, curStrPos, self) { 1021 | if (self.contentType !== 'html') return curStrPos; 1022 | var curChar = curString.substr(curStrPos).charAt(0); 1023 | if (curChar === '>' || curChar === ';') { 1024 | var endTag = ''; 1025 | if (curChar === '>') { 1026 | endTag = '<'; 1027 | } else { 1028 | endTag = '&'; 1029 | } 1030 | while (curString.substr(curStrPos - 1).charAt(0) !== endTag) { 1031 | curStrPos--; 1032 | if (curStrPos < 0) { 1033 | break; 1034 | } 1035 | } 1036 | curStrPos--; 1037 | } 1038 | return curStrPos; 1039 | } 1040 | }]); 1041 | 1042 | return HTMLParser; 1043 | })(); 1044 | 1045 | exports['default'] = HTMLParser; 1046 | var htmlParser = new HTMLParser(); 1047 | exports.htmlParser = htmlParser; 1048 | 1049 | /***/ }) 1050 | /******/ ]) 1051 | }); 1052 | ; -------------------------------------------------------------------------------- /all.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | .fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\f952"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\f907"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\f913"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\f955"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\f91a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\f956"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\f91e"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\f957"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\f941"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\f949"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.fab,.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900} --------------------------------------------------------------------------------