├── README.md ├── assets ├── css │ ├── styles.css │ └── swiper-bundle.min.css ├── favicons │ ├── android-chrome-192x192.png │ ├── android-chrome-512x512.png │ ├── apple-touch-icon.png │ ├── browserconfig.xml │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon.ico │ ├── mstile-150x150.png │ ├── safari-pinned-tab.svg │ └── site.webmanifest ├── img │ ├── about.jpg │ ├── perfil.png │ ├── testimonial1.png │ ├── testimonial2.png │ ├── testimonial3.png │ ├── work1.jpg │ ├── work2.jpg │ ├── work3.jpg │ ├── work4.jpg │ └── work5.jpg ├── js │ ├── main.js │ ├── mixitup.min.js │ ├── scrollreveal.min.js │ └── swiper-bundle.min.js └── pdf │ └── hailee-Cv.pdf ├── index.html └── preview ├── hailee-dark.png └── hailee-light.png /README.md: -------------------------------------------------------------------------------- 1 | # Hailee portfolio webpage 2 | 3 | A portfolio web site completely made in html css and js from ground up. 4 | 5 | #### Watch it live here - [hailee.netlify.app](https://hailee.netlify.app/) 6 | 7 |
8 | 9 | ## This is how it looks 10 | 11 |
12 | 13 | ### In dark mode 14 | 15 | ![In dark mode](./preview/hailee-dark.png) 16 | 17 | ### In light mode 18 | 19 | ![In light mode](./preview/hailee-light.png) 20 | -------------------------------------------------------------------------------- /assets/css/styles.css: -------------------------------------------------------------------------------- 1 | /*=============== GOOGLE FONTS ===============*/ 2 | @import url("https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600&display=swap"); 3 | 4 | /*=============== VARIABLES CSS ===============*/ 5 | :root { 6 | --header-height: 3.5rem; 7 | 8 | /*========== Colors ==========*/ 9 | /*Color mode HSL(hue, saturation, lightness)*/ 10 | /* 11 | Purple: hsl(250, 66%, 75%) 12 | Blue: hsl(207, 90%, 72%) 13 | Pink: hsl(356, 66%, 75%) 14 | Teal: hsl(174, 63%, 62%) 15 | */ 16 | --first-hue: 250; 17 | --sat: 66%; 18 | --lig: 75%; 19 | --second-hue: 219; 20 | --first-color: hsl(var(--first-hue), var(--sat), var(--lig)); 21 | --first-color-alt: hsl(var(--first-hue), var(--sat), 71%); /* -4% */ 22 | --title-color: hsl(var(--second-hue), 15%, 95%); 23 | --text-color: hsl(var(--second-hue), 8%, 75%); 24 | --text-color-light: hsl(var(--second-hue), 4%, 55%); 25 | --body-color: hsl(var(--second-hue), 48%, 8%); 26 | --container-color: hsl(var(--second-hue), 32%, 12%); 27 | 28 | /*========== Font and typography ==========*/ 29 | /*.5rem = 8px | 1rem = 16px ...*/ 30 | --body-font: "Poppins", sans-serif; 31 | --biggest-font-size: 1.75rem; 32 | --h1-font-size: 1.5rem; 33 | --h2-font-size: 1.25rem; 34 | --h3-font-size: 1rem; 35 | --normal-font-size: 0.938rem; 36 | --small-font-size: 0.813rem; 37 | --smaller-font-size: 0.75rem; 38 | --tiny-font-size: 0.625rem; 39 | 40 | /*========== Font weight ==========*/ 41 | --font-medium: 500; 42 | --font-semibold: 600; 43 | 44 | /*========== z index ==========*/ 45 | --z-tooltip: 10; 46 | --z-fixed: 100; 47 | --z-modal: 1000; 48 | } 49 | 50 | /* Responsive typography */ 51 | @media screen and (min-width: 968px) { 52 | :root { 53 | --biggest-font-size: 2.5rem; 54 | --h1-font-size: 2.25rem; 55 | --h2-font-size: 1.5rem; 56 | --h3-font-size: 1.25rem; 57 | --normal-font-size: 1rem; 58 | --small-font-size: 0.875rem; 59 | --smaller-font-size: 0.813rem; 60 | } 61 | } 62 | 63 | /*=============== BASE ===============*/ 64 | * { 65 | box-sizing: border-box; 66 | padding: 0; 67 | margin: 0; 68 | } 69 | 70 | html { 71 | scroll-behavior: smooth; 72 | } 73 | 74 | body, 75 | button, 76 | input, 77 | textarea { 78 | font-family: var(--body-font); 79 | font-size: var(--normal-font-size); 80 | } 81 | 82 | body { 83 | background-color: var(--body-color); 84 | color: var(--text-color); 85 | transition: 0.4s; /* for light mode animation */ 86 | } 87 | 88 | h1, 89 | h2, 90 | h3 { 91 | color: var(--title-color); 92 | font-weight: var(--font-semibold); 93 | } 94 | 95 | ul { 96 | list-style: none; 97 | } 98 | 99 | a { 100 | text-decoration: none; 101 | } 102 | 103 | button { 104 | cursor: pointer; 105 | border: none; 106 | outline: none; 107 | } 108 | 109 | img { 110 | max-width: 100%; 111 | height: auto; 112 | } 113 | 114 | /*=============== THEME ===============*/ 115 | .change__theme { 116 | font-size: 1.25rem; 117 | cursor: pointer; 118 | transition: 0.3s; 119 | } 120 | 121 | .change__theme:hover { 122 | color: var(--first-color); 123 | } 124 | 125 | /*========== Variables light theme ==========*/ 126 | body.light-theme { 127 | --title-color: hsl(var(--second-hue), 15%, 15%); 128 | --text-color: hsl(var(--second-hue), 8%, 35%); 129 | --body-color: hsl(var(--second-hue), 100%, 99%); 130 | --container-color: #e9e9e9; 131 | } 132 | 133 | /*========== 134 | Color changes in some parts of 135 | the website, in light theme 136 | ==========*/ 137 | .light-theme .scroll-header { 138 | box-shadow: 0 2px 4px hsla(0, 0%, 1%, 0.1); 139 | } 140 | 141 | .light-theme .nav__menu { 142 | background-color: hsla(var(--second-hue), 32%, 90%, 0.8); 143 | } 144 | 145 | .light-theme .section__subtitle { 146 | color: var(--text-color); 147 | } 148 | 149 | .light-theme .home__social-link { 150 | box-shadow: 0 2px 16px hsla(var(--second-hue), 48%, 8%, 0.1); 151 | } 152 | 153 | .light-theme .home__social-link::after, 154 | .light-theme .footer__social-link { 155 | background-color: var(--title-color); 156 | } 157 | 158 | .light-theme .home__social-link, 159 | .light-theme .home__scroll, 160 | .light-theme .button, 161 | .light-theme .button:hover, 162 | .light-theme .active-work, 163 | .light-theme .footer__title, 164 | .light-theme .footer__link, 165 | .light-theme .footer__copy { 166 | color: var(--title-color); 167 | } 168 | 169 | .light-theme .about__box { 170 | box-shadow: 0 2px 16px hsla(var(--second-hue), 48%, 8%, 0.1); 171 | } 172 | 173 | .light-theme .button, 174 | .light-theme .skills__content, 175 | .light-theme .services__card, 176 | .light-theme .work__card, 177 | .light-theme .testimonial__card, 178 | .light-theme .contact__card, 179 | .light-theme .contact__form-div { 180 | box-shadow: 0 2px 16px hsla(var(--second-hue), 48%, 8%, 0.1); 181 | } 182 | 183 | .light-theme::-webkit-scrollbar { 184 | background-color: hsl(var(--second-hue), 8%, 80%); 185 | } 186 | /*=============== REUSABLE CSS CLASSES ===============*/ 187 | .container { 188 | max-width: 968px; 189 | margin-left: 1rem; 190 | margin-right: 1rem; 191 | } 192 | 193 | .grid { 194 | display: grid; 195 | gap: 1.25rem; 196 | } 197 | 198 | .main { 199 | overflow: hidden; 200 | } 201 | 202 | .section { 203 | padding: 4.5rem 0 1rem; 204 | } 205 | 206 | .section__title, 207 | .section__subtitle { 208 | text-align: center; 209 | } 210 | 211 | .section__title { 212 | font-size: var(--h2-font-size); 213 | color: var(--first-color); 214 | margin-bottom: 2rem; 215 | } 216 | 217 | .section__subtitle { 218 | display: block; 219 | font-size: var(--smaller-font-size); 220 | color: var(--text-color-light); 221 | } 222 | 223 | /*=============== HEADER & NAV===============*/ 224 | .header { 225 | position: fixed; 226 | top: 0; 227 | left: 0; 228 | width: 100%; 229 | /* height: var(--header-height); */ 230 | background-color: var(--body-color); 231 | z-index: var(--z-fixed); 232 | transition: 0.4s; 233 | } 234 | 235 | .nav { 236 | height: var(--header-height); 237 | display: flex; 238 | justify-content: space-between; 239 | align-items: center; 240 | } 241 | 242 | .nav__logo { 243 | color: var(--first-color); 244 | font-weight: var(--font-medium); 245 | transition: 0.4s; 246 | } 247 | 248 | .nav__logo:hover { 249 | color: var(--first-color-alt); 250 | } 251 | 252 | .nav__menu { 253 | position: fixed; 254 | bottom: 1rem; 255 | background-color: hsla(var(--second-hue), 32%, 16%, 0.8); 256 | width: 90%; 257 | border-radius: 4rem; 258 | padding: 1rem 2.25rem; 259 | backdrop-filter: blur(10px); 260 | transition: 0.4s; 261 | } 262 | 263 | .nav__list { 264 | display: flex; 265 | justify-content: space-between; 266 | align-items: center; 267 | } 268 | 269 | .nav__link { 270 | color: var(--text-color); 271 | font-size: 1.25rem; 272 | padding: 0.4rem; 273 | font-weight: var(--font-medium); 274 | text-decoration: none; 275 | transition: 0.4s; 276 | display: flex; 277 | border-radius: 5rem; 278 | } 279 | 280 | /* Active link */ 281 | .active-link { 282 | background: linear-gradient( 283 | 180deg, 284 | hsla(var(--first-hue), var(--sat), var(--lig), 0.5), 285 | hsla(var(--first-hue), var(--sat), var(--lig), 0.2) 286 | ); 287 | box-shadow: 0 0 16px hsla(var(--first-hue), var(--sat), var(--lig), 0.4); 288 | border-radius: 5rem; 289 | 290 | color: var(--title-color); 291 | } 292 | 293 | /* Change background header */ 294 | .scroll-header { 295 | box-shadow: 0 4px 4px hsla(0, 0%, 4%, 0.3); 296 | } 297 | 298 | /*=============== HOME ===============*/ 299 | .home__container { 300 | position: relative; 301 | row-gap: 4.5rem; 302 | padding-top: 2rem; 303 | } 304 | 305 | .home__data { 306 | text-align: center; 307 | } 308 | 309 | .home__greeting, 310 | .home__education { 311 | font-size: var(--small-font-size); 312 | font-weight: var(--font-medium); 313 | } 314 | 315 | .home__greeting { 316 | display: block; 317 | color: var(--title-color); 318 | margin-bottom: 0.25rem; 319 | } 320 | 321 | .home__education { 322 | color: var(--text-color); 323 | margin-bottom: 2.5rem; 324 | } 325 | 326 | .home__name { 327 | font-size: var(--biggest-font-size); 328 | color: var(--first-color); 329 | } 330 | 331 | .home__img { 332 | width: 160px; 333 | } 334 | 335 | .home__handle { 336 | justify-self: center; 337 | width: 190px; 338 | height: 293px; 339 | background: linear-gradient( 340 | 180deg, 341 | hsla(var(--first-hue), var(--sat), var(--lig), 0.5), 342 | hsla(var(--first-hue), var(--sat), var(--lig), 0.1) 343 | ); 344 | 345 | border-radius: 10rem 10rem 1rem 1rem; 346 | display: flex; 347 | align-items: flex-end; 348 | justify-content: center; 349 | overflow: hidden; 350 | } 351 | 352 | .home__button { 353 | display: flex; 354 | justify-content: center; 355 | align-items: center; 356 | gap: 1rem; 357 | } 358 | 359 | .home__social, 360 | .home__scroll { 361 | position: absolute; 362 | } 363 | 364 | .home__social { 365 | bottom: 4rem; 366 | left: 0; 367 | display: grid; 368 | row-gap: 0.5rem; 369 | } 370 | 371 | .home__social-link { 372 | width: max-content; 373 | background-color: var(--container-color); 374 | color: var(--first-color); 375 | padding: 0.25rem; 376 | border-radius: 0.5rem; 377 | display: flex; 378 | font-size: 1rem; 379 | transition: 0.4s; 380 | } 381 | 382 | .home__social-link:hover { 383 | background-color: var(--first-color); 384 | color: #ffffff; 385 | } 386 | 387 | .home__social::after { 388 | content: ""; 389 | width: 32px; 390 | height: 1px; 391 | background-color: var(--first-color); 392 | transform: rotate(90deg) translate(16px, 4px); 393 | } 394 | 395 | .home__scroll { 396 | color: var(--first-color); 397 | right: -1.5rem; 398 | bottom: 4rem; 399 | display: grid; 400 | row-gap: 2.25rem; 401 | justify-items: center; 402 | } 403 | 404 | .home__scroll-icon { 405 | font-size: 1.25rem; 406 | } 407 | 408 | .home__scroll-name { 409 | font-size: var(--smaller-font-size); 410 | transform: rotate(-90deg); 411 | } 412 | 413 | /*=============== BUTTONS ===============*/ 414 | .button { 415 | display: inline-block; 416 | background-color: var(--first-color); 417 | color: var(--body-color); 418 | padding: 0.75rem 1rem; 419 | border-radius: 0.8rem; 420 | font-weight: var(--font-medium); 421 | transition: 0.4s; 422 | } 423 | 424 | .button:hover { 425 | background-color: var(--first-color-alt); 426 | color: var(--body-color); 427 | } 428 | 429 | .button--ghost { 430 | background-color: transparent; 431 | color: var(--first-color); 432 | border: 1px solid var(--first-color); 433 | } 434 | 435 | /*=============== ABOUT ===============*/ 436 | .about__container { 437 | row-gap: 2.5rem; 438 | } 439 | 440 | .about__img { 441 | width: 220px; 442 | border-radius: 1.5rem; 443 | justify-self: center; 444 | } 445 | 446 | .about__data { 447 | text-align: center; 448 | } 449 | 450 | .about__info { 451 | display: grid; 452 | grid-template-columns: repeat(3, 1fr); 453 | gap: 0.5rem; 454 | margin-bottom: 2rem; 455 | } 456 | 457 | .about__box { 458 | background-color: var(--container-color); 459 | border-radius: 0.75rem; 460 | padding: 0.75rem 0.5rem; 461 | } 462 | 463 | .about__icon { 464 | font-size: 1.5rem; 465 | color: var(--first-color); 466 | margin-bottom: 0.5rem; 467 | } 468 | 469 | .about__title { 470 | font-size: var(--small-font-size); 471 | } 472 | 473 | .about__subtitle { 474 | font-size: var(--tiny-font-size); 475 | } 476 | 477 | .about__description { 478 | margin-bottom: 2rem; 479 | } 480 | 481 | /*=============== SKILLS ===============*/ 482 | .skills__container { 483 | row-gap: 2rem; 484 | padding-top: 1rem; 485 | } 486 | 487 | .skills__content { 488 | background-color: var(--container-color); 489 | padding: 1.5rem; 490 | border-radius: 1.25rem; 491 | } 492 | 493 | .skills__title { 494 | font-size: var(--normal-font-size); 495 | font-weight: var(--font-medium); 496 | color: var(--first-color); 497 | text-align: center; 498 | margin-bottom: 1.5rem; 499 | } 500 | 501 | .skills__box { 502 | display: flex; 503 | justify-content: center; 504 | column-gap: 2.5rem; 505 | } 506 | 507 | .skills__group { 508 | display: grid; 509 | align-content: flex-start; 510 | row-gap: 1rem; 511 | } 512 | 513 | .skills__data { 514 | display: flex; 515 | column-gap: 0.5rem; 516 | } 517 | 518 | .skills .bxs-badge-check { 519 | font-size: 1rem; 520 | color: var(--first-color); 521 | } 522 | 523 | .skills__name { 524 | font-size: var(--normal-font-size); 525 | font-weight: var(--font-medium); 526 | line-height: 18px; 527 | } 528 | 529 | .skills__level { 530 | font-size: var(--small-font-size); 531 | } 532 | 533 | /*=============== SERVICES ===============*/ 534 | .services__container { 535 | grid-template-columns: repeat(2, 1fr); 536 | gap: 1.5rem; 537 | padding-top: 1rem; 538 | } 539 | 540 | .services__card { 541 | background-color: var(--container-color); 542 | padding: 3rem 1.5rem 1.5em; 543 | border-radius: 1.25rem; 544 | } 545 | 546 | .services__title { 547 | font-size: var(--h3-font-size); 548 | margin-bottom: 2.5rem; 549 | } 550 | 551 | .services__button { 552 | color: var(--first-color); 553 | font-size: var(--small-font-size); 554 | display: flex; 555 | align-items: center; 556 | column-gap: 0.25rem; 557 | cursor: pointer; 558 | } 559 | 560 | .services__button:hover .services__icon { 561 | transform: translateX(0.25rem); 562 | } 563 | 564 | .services__icon { 565 | font-size: 1rem; 566 | transition: 0.4s; 567 | } 568 | 569 | /* Services modal */ 570 | .services__modal { 571 | position: fixed; 572 | inset: 0; 573 | background-color: hsl(var(--second-hue), 28%, 16%, 0.7); 574 | padding: 2rem 1rem; 575 | display: grid; 576 | place-items: center; 577 | transition: 0.4s; 578 | z-index: var(--z-modal); 579 | visibility: hidden; 580 | opacity: 0; 581 | } 582 | 583 | .services__modal-content { 584 | background-color: var(--body-color); 585 | padding: 4.5rem 1.5rem 2.5rem; 586 | border-radius: 1.5rem; 587 | position: relative; 588 | } 589 | 590 | .services__modal-title, 591 | .services__modal-description { 592 | text-align: center; 593 | } 594 | 595 | .services__modal-title { 596 | font-size: var(--h3-font-size); 597 | color: var(--first-color); 598 | margin-bottom: 1rem; 599 | } 600 | 601 | .services__modal-description { 602 | font-size: var(--small-font-size); 603 | margin-bottom: 2rem; 604 | } 605 | 606 | .services__modal-list { 607 | display: grid; 608 | row-gap: 0.75rem; 609 | } 610 | 611 | .services__modal-item { 612 | display: flex; 613 | align-items: flex-start; 614 | column-gap: 0.5rem; 615 | } 616 | 617 | .services__modal-icon { 618 | font-size: 1.5rem; 619 | color: var(--first-color); 620 | } 621 | 622 | .services__modal-info { 623 | font-size: var(--small-font-size); 624 | } 625 | 626 | .services__modal-close { 627 | position: absolute; 628 | top: 1.5rem; 629 | right: 1.5rem; 630 | font-size: 1.5rem; 631 | color: var(--first-color); 632 | cursor: pointer; 633 | } 634 | /*Active modal*/ 635 | 636 | .active-modal { 637 | visibility: visible; 638 | opacity: 1; 639 | } 640 | 641 | /*=============== WORK ===============*/ 642 | 643 | .work__container { 644 | padding-top: 1rem; 645 | } 646 | 647 | .work__filters { 648 | display: flex; 649 | justify-content: center; 650 | align-items: center; 651 | column-gap: 0.75rem; 652 | margin-bottom: 2rem; 653 | } 654 | 655 | .work__item { 656 | cursor: pointer; 657 | color: var(--title-color); 658 | padding: 0.25rem 0.75rem; 659 | font-weight: var(--font-medium); 660 | border-radius: 0.5rem; 661 | } 662 | 663 | .work__card { 664 | background-color: var(--container-color); 665 | padding: 1rem; 666 | border-radius: 1rem; 667 | } 668 | 669 | .work__img { 670 | border-radius: 1rem; 671 | margin-bottom: 0.75rem; 672 | } 673 | 674 | .work__title { 675 | font-size: var(--normal-font-size); 676 | font-weight: var(--font-medium); 677 | margin-bottom: 0.25rem; 678 | } 679 | 680 | .work__button { 681 | width: max-content; 682 | color: var(--first-color); 683 | font-size: var(--small-font-size); 684 | display: flex; 685 | align-items: center; 686 | column-gap: 0.25rem; 687 | cursor: pointer; 688 | } 689 | 690 | .work__button:hover .work__icon { 691 | transform: translateX(0.25rem); 692 | } 693 | 694 | .work__icon { 695 | font-size: 1rem; 696 | transition: 0.4s; 697 | } 698 | 699 | /* Active item work*/ 700 | .active-work { 701 | background-color: var(--first-color); 702 | color: var(--body-color); 703 | } 704 | 705 | /*=============== TESTIMONIAL ===============*/ 706 | .testimonial__card { 707 | background-color: var(--container-color); 708 | padding: 1.25rem 1.5rem; 709 | border-radius: 1.5rem; 710 | margin-bottom: 3rem; 711 | } 712 | 713 | .testimonial__img { 714 | width: 60px; 715 | border-radius: 3rem; 716 | margin-bottom: 1rem; 717 | } 718 | 719 | .testimonial__name { 720 | font-size: var(--normal-font-size); 721 | font-weight: var(--font-medium); 722 | margin-bottom: 0.25rem; 723 | } 724 | 725 | .testimonial__description { 726 | font-size: var(--small-font-size); 727 | margin-bottom: 0.15rem; 728 | } 729 | 730 | /* Swiper class */ 731 | .swiper-pagination-bullet { 732 | background-color: var(--text-color-light); 733 | } 734 | 735 | .swiper-pagination-bullet-active { 736 | background-color: var(--first-color); 737 | } 738 | 739 | /*=============== CONTACT ===============*/ 740 | .contact__container { 741 | row-gap: 3rem; 742 | padding-bottom: 3rem; 743 | } 744 | 745 | .contact__title { 746 | text-align: center; 747 | font-size: var(--h3-font-size); 748 | margin-bottom: 1.5rem; 749 | } 750 | 751 | .contact__info { 752 | display: grid; 753 | gap: 1rem; 754 | } 755 | 756 | .contact__card { 757 | background-color: var(--container-color); 758 | padding: 2rem 1rem; 759 | border-radius: 0.75rem; 760 | text-align: center; 761 | } 762 | 763 | .contact__card-icon { 764 | font-size: 2rem; 765 | color: var(--title-color); 766 | margin-bottom: 0.25rem; 767 | } 768 | 769 | .contact__card-title, 770 | .contact__card-data { 771 | font-size: var(--small-font-size); 772 | } 773 | 774 | .contact__card-title { 775 | font-weight: var(--font-medium); 776 | } 777 | 778 | .contact__card-data { 779 | display: block; 780 | margin-bottom: 0.75rem; 781 | } 782 | 783 | .contact__button { 784 | color: var(--first-color); 785 | font-size: var(--small-font-size); 786 | display: flex; 787 | align-items: center; 788 | justify-content: center; 789 | column-gap: 0.25rem; 790 | cursor: pointer; 791 | } 792 | 793 | .contact__button:hover .contact__button-icon { 794 | transform: translateX(0.25rem); 795 | } 796 | 797 | .contact__button-icon { 798 | font-size: 1rem; 799 | transition: 0.4s; 800 | } 801 | 802 | .contact__form-div { 803 | position: relative; 804 | margin-bottom: 2rem; 805 | height: 4rem; 806 | } 807 | 808 | .contact__form-input { 809 | position: absolute; 810 | top: 0; 811 | left: 0; 812 | width: 100%; 813 | height: 100%; 814 | border: 2px solid var(--text-color-light); 815 | background: none; 816 | border-radius: 0.75rem; 817 | padding: 1.5rem; 818 | font-size: var(--normal-font-size); 819 | color: var(--text-color); 820 | outline: none; 821 | z-index: 1; 822 | } 823 | 824 | .contact__form-tag { 825 | position: absolute; 826 | top: -0.75rem; 827 | left: 1.25rem; 828 | font-size: var(--smaller-font-size); 829 | padding: 0.25rem; 830 | background-color: var(--body-color); 831 | z-index: 10; 832 | } 833 | 834 | .contact__form-area { 835 | height: 17rem; 836 | } 837 | 838 | .contact__form-area textarea { 839 | resize: none; 840 | } 841 | /*=============== FOOTER ===============*/ 842 | .footer { 843 | background-color: var(--first-color); 844 | } 845 | 846 | .footer__container { 847 | padding: 2rem 0 6rem; 848 | } 849 | 850 | .footer__title, 851 | .footer__link { 852 | color: var(--body-color); 853 | } 854 | 855 | .footer__title { 856 | text-align: center; 857 | margin-bottom: 2rem; 858 | } 859 | 860 | .footer__list { 861 | display: flex; 862 | justify-content: center; 863 | align-items: center; 864 | column-gap: 1.5rem; 865 | margin-bottom: 2rem; 866 | } 867 | 868 | .footer__social { 869 | display: flex; 870 | justify-content: center; 871 | align-items: center; 872 | column-gap: 1.25rem; 873 | } 874 | 875 | .footer__social-link { 876 | background-color: var(--body-color); 877 | color: var(--first-color); 878 | padding: 0.35rem; 879 | border-radius: 0.25rem; 880 | font-size: 1rem; 881 | display: inline-flex; 882 | } 883 | 884 | .footer__copy { 885 | display: block; 886 | margin-top: 4.5rem; 887 | color: var(--container-color); 888 | text-align: center; 889 | font-size: var(--smaller-font-size); 890 | margin-bottom: 2rem; 891 | } 892 | 893 | /*=============== SCROLL BAR ===============*/ 894 | ::-webkit-scrollbar { 895 | width: 0.5rem; 896 | border-radius: 0.5rem; 897 | background-color: var(--container-color); 898 | } 899 | 900 | ::-webkit-scrollbar-track { 901 | border-radius: 1.5rem; 902 | } 903 | 904 | ::-webkit-scrollbar-thumb { 905 | background-color: var(--first-color); 906 | border-radius: 0.5rem; 907 | } 908 | 909 | ::-webkit-scrollbar-thumb:hover { 910 | background-color: var(--first-color-alt); 911 | } 912 | 913 | /*=============== BREAKPOINTS ===============*/ 914 | /* For small devices */ 915 | @media screen and (max-width: 320px) { 916 | .nav__menu { 917 | padding: 1rem 1.5rem; 918 | } 919 | 920 | .home__button { 921 | flex-direction: column; 922 | } 923 | 924 | .home__handle { 925 | width: 150px; 926 | height: 253px; 927 | } 928 | 929 | .home__img { 930 | width: 130px; 931 | } 932 | 933 | .about__info { 934 | grid-template-columns: repeat(2, 1fr); 935 | } 936 | 937 | .skills__box { 938 | column-gap: 1rem; 939 | } 940 | 941 | .skills__name { 942 | font-size: var(--small-font-size); 943 | } 944 | 945 | .skills__level { 946 | font-size: var(--smaller-font-size); 947 | } 948 | 949 | .services__container { 950 | grid-template-columns: 145px; 951 | justify-content: center; 952 | } 953 | 954 | .work__item { 955 | font-size: var(--small-font-size); 956 | } 957 | 958 | .work__filters { 959 | column-gap: 0.25rem; 960 | } 961 | } 962 | 963 | @media screen and (min-width: 435px) { 964 | .work__container { 965 | justify-content: center; 966 | grid-template-columns: repeat(2, max-content); 967 | } 968 | 969 | .work__img { 970 | width: 165px; 971 | } 972 | } 973 | 974 | /* For medium devices */ 975 | @media screen and (min-width: 630px) { 976 | .nav__menu { 977 | width: 328px; 978 | left: 0; 979 | right: 0; 980 | margin: 0 auto; 981 | } 982 | 983 | .about__info { 984 | grid-template-columns: repeat(3, 180px); 985 | justify-content: center; 986 | } 987 | 988 | .about__description { 989 | padding: 1rem 5rem; 990 | width: 600px; 991 | margin: 0 auto 2rem auto; 992 | } 993 | 994 | .about__box { 995 | padding: 1.75rem 0.95rem; 996 | } 997 | 998 | .skills__container { 999 | justify-content: center; 1000 | } 1001 | 1002 | .skills__content { 1003 | padding: 4rem 8.8rem; 1004 | } 1005 | 1006 | .skills__title { 1007 | font-size: var(--h3-font-size); 1008 | margin-bottom: 1.5rem; 1009 | } 1010 | 1011 | .skills__box { 1012 | column-gap: 5.5rem; 1013 | } 1014 | 1015 | .services__container { 1016 | grid-template-columns: repeat(3, 177px); 1017 | justify-content: center; 1018 | } 1019 | 1020 | .services__modal-content { 1021 | width: 500px; 1022 | padding: 4.5rem 2.5rem 2.5rem; 1023 | } 1024 | 1025 | .services__modal-description { 1026 | padding: 0 3.5rem; 1027 | } 1028 | 1029 | .work__container { 1030 | justify-content: center; 1031 | grid-template-columns: repeat(2, max-content); 1032 | } 1033 | 1034 | .work__img { 1035 | width: 250px; 1036 | } 1037 | 1038 | .testimonial__container { 1039 | width: 600px; 1040 | margin: auto; 1041 | } 1042 | 1043 | .contact__container { 1044 | display: grid; 1045 | grid-template-columns: 220px 340px; 1046 | column-gap: 2rem; 1047 | justify-content: center; 1048 | } 1049 | 1050 | .contact__info { 1051 | grid-template-columns: 200px; 1052 | gap: 1rem; 1053 | } 1054 | 1055 | .contact__form { 1056 | width: 340px; 1057 | } 1058 | /* .contact__info { 1059 | grid-template-columns: 350px; 1060 | justify-content: center; 1061 | } 1062 | 1063 | .contact__form { 1064 | width: 360px; 1065 | margin: 0 auto; 1066 | } */ 1067 | } 1068 | 1069 | /* @media screen and (min-width: 767px) { 1070 | /* .work__container { 1071 | grid-template-columns: repeat(2, max-content); 1072 | } */ 1073 | 1074 | /* .contact__info { 1075 | grid-template-columns: 300px; 1076 | } 1077 | 1078 | .contact__container { 1079 | grid-template-columns: repeat(2, 325px); 1080 | justify-content: center; 1081 | } 1082 | } */ 1083 | 1084 | /* For large devices */ 1085 | @media screen and (min-width: 992px) { 1086 | .container { 1087 | margin-left: auto; 1088 | margin-right: auto; 1089 | } 1090 | 1091 | .section { 1092 | padding: 6.5rem 0 1rem; 1093 | } 1094 | 1095 | .section__title { 1096 | margin-bottom: 3.5rem; 1097 | } 1098 | 1099 | .nav { 1100 | height: calc(var(--header-height) + 1rem); 1101 | } 1102 | 1103 | .home__handle { 1104 | width: 290px; 1105 | height: 400px; 1106 | } 1107 | 1108 | .home__img { 1109 | width: 220px; 1110 | } 1111 | .home__social-link { 1112 | padding: 0.4rem; 1113 | font-size: 1.25rem; 1114 | } 1115 | 1116 | .home__social::after { 1117 | transform: rotate(90deg) translate(16px, -1px); 1118 | } 1119 | 1120 | .home__scroll-icon { 1121 | font-size: 2rem; 1122 | } 1123 | 1124 | .about__container { 1125 | grid-template-columns: repeat(2, 1fr); 1126 | align-items: center; 1127 | column-gap: 4rem; 1128 | } 1129 | 1130 | .about__img { 1131 | width: 350px; 1132 | } 1133 | 1134 | .about__data { 1135 | text-align: initial; 1136 | } 1137 | 1138 | .about__info { 1139 | justify-content: initial; 1140 | gap: 2rem; 1141 | } 1142 | 1143 | .about__box { 1144 | text-align: center; 1145 | padding: 1rem 1.25rem; 1146 | } 1147 | 1148 | .about__description { 1149 | padding: 0 4rem 0 0; 1150 | margin-bottom: 2.5rem; 1151 | } 1152 | 1153 | .skills__container { 1154 | grid-template-columns: repeat(2, 460px); 1155 | column-gap: 3rem; 1156 | } 1157 | 1158 | .skills__title { 1159 | margin-bottom: 3.5rem; 1160 | } 1161 | 1162 | .services__container { 1163 | grid-template-columns: repeat(3, 300px); 1164 | column-gap: 2rem; 1165 | } 1166 | 1167 | .services__card { 1168 | padding: 5rem 2rem 1.5rem; 1169 | } 1170 | 1171 | .work__container { 1172 | grid-template-columns: repeat(3, max-content); 1173 | gap: 3rem; 1174 | } 1175 | 1176 | .work__card { 1177 | padding: 1.25rem; 1178 | } 1179 | 1180 | .work__img { 1181 | margin-bottom: 2rem; 1182 | } 1183 | 1184 | .work__title { 1185 | margin-bottom: 0.5rem; 1186 | } 1187 | 1188 | .testimonial__container { 1189 | width: 970px; 1190 | } 1191 | 1192 | .testimonial__card { 1193 | padding: 1.5rem 2rem; 1194 | } 1195 | 1196 | .contact__info { 1197 | grid-template-columns: 430px; 1198 | gap: 1rem; 1199 | } 1200 | 1201 | .contact__form { 1202 | width: 430px; 1203 | } 1204 | 1205 | .contact__form-area { 1206 | height: 18rem; 1207 | } 1208 | 1209 | .contact__container { 1210 | grid-template-columns: repeat(2, 430px); 1211 | column-gap: 6rem; 1212 | } 1213 | 1214 | .footer__social-link { 1215 | font-size: 1.25rem; 1216 | padding: 0.4rem; 1217 | border-radius: 0.5rem; 1218 | } 1219 | } 1220 | -------------------------------------------------------------------------------- /assets/css/swiper-bundle.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Swiper 7.4.1 3 | * Most modern mobile touch slider and framework with hardware accelerated transitions 4 | * https://swiperjs.com 5 | * 6 | * Copyright 2014-2021 Vladimir Kharlampidi 7 | * 8 | * Released under the MIT License 9 | * 10 | * Released on: December 24, 2021 11 | */ 12 | 13 | @font-face{font-family:swiper-icons;src:url('data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB/yIY09An6AH2Bdu/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z/PEJ6YOB5hKh4dj3EvXhxPqH/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN/d/gczfEimrE/fs/bOuq29Zmn8tloORaXgZgGa78yO9/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH//wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv/H9ezGI6Z5XBAw8CBK/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow/P/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA');font-weight:400;font-style:normal}:root{--swiper-theme-color:#007aff}.swiper{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1}.swiper-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;box-sizing:content-box}.swiper-android .swiper-slide,.swiper-wrapper{transform:translate3d(0px,0,0)}.swiper-pointer-events{touch-action:pan-y}.swiper-pointer-events.swiper-vertical{touch-action:pan-x}.swiper-slide{flex-shrink:0;width:100%;height:100%;position:relative;transition-property:transform}.swiper-slide-invisible-blank{visibility:hidden}.swiper-autoheight,.swiper-autoheight .swiper-slide{height:auto}.swiper-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-3d,.swiper-3d.swiper-css-mode .swiper-wrapper{perspective:1200px}.swiper-3d .swiper-cube-shadow,.swiper-3d .swiper-slide,.swiper-3d .swiper-slide-shadow,.swiper-3d .swiper-slide-shadow-bottom,.swiper-3d .swiper-slide-shadow-left,.swiper-3d .swiper-slide-shadow-right,.swiper-3d .swiper-slide-shadow-top,.swiper-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-3d .swiper-slide-shadow,.swiper-3d .swiper-slide-shadow-bottom,.swiper-3d .swiper-slide-shadow-left,.swiper-3d .swiper-slide-shadow-right,.swiper-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-3d .swiper-slide-shadow{background:rgba(0,0,0,.15)}.swiper-3d .swiper-slide-shadow-left{background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-3d .swiper-slide-shadow-right{background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-3d .swiper-slide-shadow-top{background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-3d .swiper-slide-shadow-bottom{background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-css-mode>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.swiper-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-css-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}.swiper-horizontal.swiper-css-mode>.swiper-wrapper{scroll-snap-type:x mandatory}.swiper-vertical.swiper-css-mode>.swiper-wrapper{scroll-snap-type:y mandatory}.swiper-centered>.swiper-wrapper::before{content:'';flex-shrink:0;order:9999}.swiper-centered.swiper-horizontal>.swiper-wrapper>.swiper-slide:first-child{margin-inline-start:var(--swiper-centered-offset-before)}.swiper-centered.swiper-horizontal>.swiper-wrapper::before{height:100%;min-height:1px;width:var(--swiper-centered-offset-after)}.swiper-centered.swiper-vertical>.swiper-wrapper>.swiper-slide:first-child{margin-block-start:var(--swiper-centered-offset-before)}.swiper-centered.swiper-vertical>.swiper-wrapper::before{width:100%;min-width:1px;height:var(--swiper-centered-offset-after)}.swiper-centered>.swiper-wrapper>.swiper-slide{scroll-snap-align:center center}.swiper-virtual.swiper-css-mode .swiper-wrapper::after{content:'';position:absolute;left:0;top:0;pointer-events:none}.swiper-virtual.swiper-css-mode.swiper-horizontal .swiper-wrapper::after{height:1px;width:var(--swiper-virtual-size)}.swiper-virtual.swiper-css-mode.swiper-vertical .swiper-wrapper::after{width:1px;height:var(--swiper-virtual-size)}:root{--swiper-navigation-size:44px}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:calc(var(--swiper-navigation-size)/ 44 * 27);height:var(--swiper-navigation-size);margin-top:calc(0px - (var(--swiper-navigation-size)/ 2));z-index:10;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--swiper-navigation-color,var(--swiper-theme-color))}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-next:after,.swiper-button-prev:after{font-family:swiper-icons;font-size:var(--swiper-navigation-size);text-transform:none!important;letter-spacing:0;text-transform:none;font-variant:initial;line-height:1}.swiper-button-prev,.swiper-rtl .swiper-button-next{left:10px;right:auto}.swiper-button-prev:after,.swiper-rtl .swiper-button-next:after{content:'prev'}.swiper-button-next,.swiper-rtl .swiper-button-prev{right:10px;left:auto}.swiper-button-next:after,.swiper-rtl .swiper-button-prev:after{content:'next'}.swiper-button-lock{display:none}.swiper-pagination{position:absolute;text-align:center;transition:.3s opacity;transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-horizontal>.swiper-pagination-bullets,.swiper-pagination-bullets.swiper-pagination-horizontal,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{transform:scale(.33)}.swiper-pagination-bullet{width:var(--swiper-pagination-bullet-width,var(--swiper-pagination-bullet-size,8px));height:var(--swiper-pagination-bullet-height,var(--swiper-pagination-bullet-size,8px));display:inline-block;border-radius:50%;background:var(--swiper-pagination-bullet-inactive-color,#000);opacity:var(--swiper-pagination-bullet-inactive-opacity, .2)}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-webkit-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet:only-child{display:none!important}.swiper-pagination-bullet-active{opacity:var(--swiper-pagination-bullet-opacity, 1);background:var(--swiper-pagination-color,var(--swiper-theme-color))}.swiper-pagination-vertical.swiper-pagination-bullets,.swiper-vertical>.swiper-pagination-bullets{right:10px;top:50%;transform:translate3d(0px,-50%,0)}.swiper-pagination-vertical.swiper-pagination-bullets .swiper-pagination-bullet,.swiper-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:var(--swiper-pagination-bullet-vertical-gap,6px) 0;display:block}.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic,.swiper-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;transform:translateY(-50%);width:8px}.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,.swiper-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;transition:.2s transform,.2s top}.swiper-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet,.swiper-pagination-horizontal.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 var(--swiper-pagination-bullet-horizontal-gap,4px)}.swiper-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic,.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;transform:translateX(-50%);white-space:nowrap}.swiper-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s left}.swiper-horizontal.swiper-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s right}.swiper-pagination-progressbar{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:var(--swiper-pagination-color,var(--swiper-theme-color));position:absolute;left:0;top:0;width:100%;height:100%;transform:scale(0);transform-origin:left top}.swiper-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{transform-origin:right top}.swiper-horizontal>.swiper-pagination-progressbar,.swiper-pagination-progressbar.swiper-pagination-horizontal,.swiper-pagination-progressbar.swiper-pagination-vertical.swiper-pagination-progressbar-opposite,.swiper-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite{width:100%;height:4px;left:0;top:0}.swiper-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-horizontal.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-vertical,.swiper-vertical>.swiper-pagination-progressbar{width:4px;height:100%;left:0;top:0}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}.swiper-zoom-container{width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;object-fit:contain}.swiper-slide-zoomed{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;transform-origin:50%;animation:swiper-preloader-spin 1s infinite linear;box-sizing:border-box;border:4px solid var(--swiper-preloader-color,var(--swiper-theme-color));border-radius:50%;border-top-color:transparent}.swiper-lazy-preloader-white{--swiper-preloader-color:#fff}.swiper-lazy-preloader-black{--swiper-preloader-color:#000}@keyframes swiper-preloader-spin{100%{transform:rotate(360deg)}}.swiper .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-free-mode>.swiper-wrapper{transition-timing-function:ease-out;margin:0 auto}.swiper-grid>.swiper-wrapper{flex-wrap:wrap}.swiper-grid-column>.swiper-wrapper{flex-wrap:wrap;flex-direction:column}.swiper-fade.swiper-free-mode .swiper-slide{transition-timing-function:ease-out}.swiper-fade .swiper-slide{pointer-events:none;transition-property:opacity}.swiper-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-fade .swiper-slide-active,.swiper-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-cube{overflow:visible}.swiper-cube .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1;visibility:hidden;transform-origin:0 0;width:100%;height:100%}.swiper-cube .swiper-slide .swiper-slide{pointer-events:none}.swiper-cube.swiper-rtl .swiper-slide{transform-origin:100% 0}.swiper-cube .swiper-slide-active,.swiper-cube .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-cube .swiper-slide-active,.swiper-cube .swiper-slide-next,.swiper-cube .swiper-slide-next+.swiper-slide,.swiper-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-cube .swiper-slide-shadow-bottom,.swiper-cube .swiper-slide-shadow-left,.swiper-cube .swiper-slide-shadow-right,.swiper-cube .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0px;width:100%;height:100%;opacity:.6;z-index:0}.swiper-cube .swiper-cube-shadow:before{content:'';background:#000;position:absolute;left:0;top:0;bottom:0;right:0;filter:blur(50px)}.swiper-flip{overflow:visible}.swiper-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-flip .swiper-slide-active,.swiper-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-flip .swiper-slide-shadow-bottom,.swiper-flip .swiper-slide-shadow-left,.swiper-flip .swiper-slide-shadow-right,.swiper-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-creative .swiper-slide{-webkit-backface-visibility:hidden;backface-visibility:hidden;overflow:hidden;transition-property:transform,opacity,height}.swiper-cards{overflow:visible}.swiper-cards .swiper-slide{transform-origin:center bottom;-webkit-backface-visibility:hidden;backface-visibility:hidden;overflow:hidden} -------------------------------------------------------------------------------- /assets/favicons/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/S44WN/hailee-portfolio-website/aef862a897ddb5185c4e3ab4f034c4f71f5744f2/assets/favicons/android-chrome-192x192.png -------------------------------------------------------------------------------- /assets/favicons/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/S44WN/hailee-portfolio-website/aef862a897ddb5185c4e3ab4f034c4f71f5744f2/assets/favicons/android-chrome-512x512.png -------------------------------------------------------------------------------- /assets/favicons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/S44WN/hailee-portfolio-website/aef862a897ddb5185c4e3ab4f034c4f71f5744f2/assets/favicons/apple-touch-icon.png -------------------------------------------------------------------------------- /assets/favicons/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #da532c 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /assets/favicons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/S44WN/hailee-portfolio-website/aef862a897ddb5185c4e3ab4f034c4f71f5744f2/assets/favicons/favicon-16x16.png -------------------------------------------------------------------------------- /assets/favicons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/S44WN/hailee-portfolio-website/aef862a897ddb5185c4e3ab4f034c4f71f5744f2/assets/favicons/favicon-32x32.png -------------------------------------------------------------------------------- /assets/favicons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/S44WN/hailee-portfolio-website/aef862a897ddb5185c4e3ab4f034c4f71f5744f2/assets/favicons/favicon.ico -------------------------------------------------------------------------------- /assets/favicons/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/S44WN/hailee-portfolio-website/aef862a897ddb5185c4e3ab4f034c4f71f5744f2/assets/favicons/mstile-150x150.png -------------------------------------------------------------------------------- /assets/favicons/safari-pinned-tab.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | Created by potrace 1.14, written by Peter Selinger 2001-2017 9 | 10 | 12 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /assets/favicons/site.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "name": "", 3 | "short_name": "", 4 | "icons": [ 5 | { 6 | "src": "android-chrome-192x192.png", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "android-chrome-512x512.png", 12 | "sizes": "512x512", 13 | "type": "image/png" 14 | } 15 | ], 16 | "theme_color": "#a789d4", 17 | "background_color": "#a789d4", 18 | "display": "standalone" 19 | } 20 | -------------------------------------------------------------------------------- /assets/img/about.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/S44WN/hailee-portfolio-website/aef862a897ddb5185c4e3ab4f034c4f71f5744f2/assets/img/about.jpg -------------------------------------------------------------------------------- /assets/img/perfil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/S44WN/hailee-portfolio-website/aef862a897ddb5185c4e3ab4f034c4f71f5744f2/assets/img/perfil.png -------------------------------------------------------------------------------- /assets/img/testimonial1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/S44WN/hailee-portfolio-website/aef862a897ddb5185c4e3ab4f034c4f71f5744f2/assets/img/testimonial1.png -------------------------------------------------------------------------------- /assets/img/testimonial2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/S44WN/hailee-portfolio-website/aef862a897ddb5185c4e3ab4f034c4f71f5744f2/assets/img/testimonial2.png -------------------------------------------------------------------------------- /assets/img/testimonial3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/S44WN/hailee-portfolio-website/aef862a897ddb5185c4e3ab4f034c4f71f5744f2/assets/img/testimonial3.png -------------------------------------------------------------------------------- /assets/img/work1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/S44WN/hailee-portfolio-website/aef862a897ddb5185c4e3ab4f034c4f71f5744f2/assets/img/work1.jpg -------------------------------------------------------------------------------- /assets/img/work2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/S44WN/hailee-portfolio-website/aef862a897ddb5185c4e3ab4f034c4f71f5744f2/assets/img/work2.jpg -------------------------------------------------------------------------------- /assets/img/work3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/S44WN/hailee-portfolio-website/aef862a897ddb5185c4e3ab4f034c4f71f5744f2/assets/img/work3.jpg -------------------------------------------------------------------------------- /assets/img/work4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/S44WN/hailee-portfolio-website/aef862a897ddb5185c4e3ab4f034c4f71f5744f2/assets/img/work4.jpg -------------------------------------------------------------------------------- /assets/img/work5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/S44WN/hailee-portfolio-website/aef862a897ddb5185c4e3ab4f034c4f71f5744f2/assets/img/work5.jpg -------------------------------------------------------------------------------- /assets/js/main.js: -------------------------------------------------------------------------------- 1 | /*=============== CHANGE BACKGROUND HEADER ===============*/ 2 | function scrollHeader() { 3 | const header = document.getElementById("header"); 4 | // When the scroll is greater than 50 viewport height, add the scroll-header class to the header tag 5 | if (this.scrollY >= 50) header.classList.add("scroll-header"); 6 | else header.classList.remove("scroll-header"); 7 | } 8 | window.addEventListener("scroll", scrollHeader); 9 | 10 | /*=============== SERVICES MODAL ===============*/ 11 | // Get the modal 12 | const modalViews = document.querySelectorAll(".services__modal"), 13 | modalBtns = document.querySelectorAll(".services__button"), 14 | modalClose = document.querySelectorAll(".services__modal-close"); 15 | 16 | // When the user clicks on the button, open the modal 17 | let modal = function (modalClick) { 18 | modalViews[modalClick].classList.add("active-modal"); 19 | }; 20 | 21 | modalBtns.forEach((mb, i) => { 22 | mb.addEventListener("click", () => { 23 | modal(i); 24 | }); 25 | }); 26 | 27 | modalClose.forEach((mc) => { 28 | mc.addEventListener("click", () => { 29 | modalViews.forEach((mv) => { 30 | mv.classList.remove("active-modal"); 31 | }); 32 | }); 33 | }); 34 | 35 | /*=============== MIXITUP FILTER PORTFOLIO ===============*/ 36 | 37 | let mixer = mixitup(".work__container", { 38 | selectors: { 39 | target: ".work__card", 40 | }, 41 | animation: { 42 | duration: 300, 43 | }, 44 | }); 45 | 46 | /* Link active work */ 47 | const workLinks = document.querySelectorAll(".work__item"); 48 | 49 | function activeWork(workLink) { 50 | workLinks.forEach((wl) => { 51 | wl.classList.remove("active-work"); 52 | }); 53 | workLink.classList.add("active-work"); 54 | } 55 | 56 | workLinks.forEach((wl) => { 57 | wl.addEventListener("click", () => { 58 | activeWork(wl); 59 | }); 60 | }); 61 | 62 | /*=============== SWIPER TESTIMONIAL ===============*/ 63 | 64 | let swiperTestimonial = new Swiper(".testimonial__container", { 65 | spaceBetween: 24, 66 | loop: true, 67 | grabCursor: true, 68 | 69 | pagination: { 70 | el: ".swiper-pagination", 71 | clickable: true, 72 | }, 73 | 74 | breakpoints: { 75 | 576: { 76 | slidesPerView: 2, 77 | }, 78 | 768: { 79 | slidesPerView: 2, 80 | spaceBetween: 48, 81 | }, 82 | }, 83 | }); 84 | 85 | /*=============== SCROLL SECTIONS ACTIVE LINK ===============*/ 86 | 87 | const sections = document.querySelectorAll("section[id]"); 88 | 89 | function scrollActive() { 90 | const scrollY = window.pageYOffset; 91 | 92 | sections.forEach((current) => { 93 | const sectionHeight = current.offsetHeight, 94 | sectionTop = current.offsetTop - 58, 95 | sectionId = current.getAttribute("id"); 96 | 97 | if (scrollY > sectionTop && scrollY <= sectionTop + sectionHeight) { 98 | document 99 | .querySelector(".nav__menu a[href*=" + sectionId + "]") 100 | .classList.add("active-link"); 101 | } else { 102 | document 103 | .querySelector(".nav__menu a[href*=" + sectionId + "]") 104 | .classList.remove("active-link"); 105 | } 106 | }); 107 | } 108 | window.addEventListener("scroll", scrollActive); 109 | 110 | /*=============== LIGHT DARK THEME ===============*/ 111 | const themeButton = document.getElementById("theme-button"); 112 | const lightTheme = "light-theme"; 113 | const iconTheme = "bx-sun"; 114 | 115 | // Previously selected topic (if user selected) 116 | const selectedTheme = localStorage.getItem("selected-theme"); 117 | const selectedIcon = localStorage.getItem("selected-icon"); 118 | 119 | // We obtain the current theme that the interface has by validating the light-theme class 120 | const getCurrentTheme = () => 121 | document.body.classList.contains(lightTheme) ? "dark" : "light"; 122 | const getCurrentIcon = () => 123 | themeButton.classList.contains(iconTheme) ? "bx bx-moon" : "bx bx-sun"; 124 | 125 | // We validate if the user previously chose a topic 126 | if (selectedTheme) { 127 | // If the validation is fulfilled, we ask what the issue was to know if we activated or deactivated the light 128 | document.body.classList[selectedTheme === "dark" ? "add" : "remove"]( 129 | lightTheme 130 | ); 131 | themeButton.classList[selectedIcon === "bx bx-moon" ? "add" : "remove"]( 132 | iconTheme 133 | ); 134 | } 135 | 136 | // Activate / deactivate the theme manually with the button 137 | themeButton.addEventListener("click", () => { 138 | // Add or remove the light / icon theme 139 | document.body.classList.toggle(lightTheme); 140 | themeButton.classList.toggle(iconTheme); 141 | // We save the theme and the current icon that the user chose 142 | localStorage.setItem("selected-theme", getCurrentTheme()); 143 | localStorage.setItem("selected-icon", getCurrentIcon()); 144 | }); 145 | 146 | /*=============== SCROLL REVEAL ANIMATION ===============*/ 147 | const sr = ScrollReveal({ 148 | origin: "top", 149 | distance: "60px", 150 | duration: 2500, 151 | delay: 400, 152 | reset: true, 153 | }); 154 | 155 | sr.reveal(`.nav__menu`, { 156 | delay: 100, 157 | scale: 0.1, 158 | origin: "bottom", 159 | distance: "300px", 160 | }); 161 | 162 | sr.reveal(`.home__data`); 163 | sr.reveal(`.home__handle`, { 164 | delay: 100, 165 | }); 166 | 167 | sr.reveal(`.home__social, .home__scroll`, { 168 | delay: 100, 169 | origin: "bottom", 170 | }); 171 | 172 | sr.reveal(`.about__img`, { 173 | delay: 100, 174 | origin: "left", 175 | scale: 0.9, 176 | distance: "30px", 177 | }); 178 | 179 | sr.reveal(`.about__data, .about__description, .about__button-contact`, { 180 | delay: 100, 181 | scale: 0.9, 182 | origin: "right", 183 | distance: "30px", 184 | }); 185 | 186 | sr.reveal(`.skills__content`, { 187 | delay: 100, 188 | scale: 0.9, 189 | origin: "bottom", 190 | distance: "30px", 191 | }); 192 | 193 | sr.reveal(`.services__title, services__button`, { 194 | delay: 100, 195 | scale: 0.9, 196 | origin: "top", 197 | distance: "30px", 198 | }); 199 | 200 | sr.reveal(`.work__card`, { 201 | delay: 100, 202 | scale: 0.9, 203 | origin: "bottom", 204 | distance: "30px", 205 | }); 206 | 207 | sr.reveal(`.testimonial__container`, { 208 | delay: 100, 209 | scale: 0.9, 210 | origin: "bottom", 211 | distance: "30px", 212 | }); 213 | 214 | sr.reveal(`.contact__info, .contact__title-info`, { 215 | delay: 100, 216 | scale: 0.9, 217 | origin: "left", 218 | distance: "30px", 219 | }); 220 | 221 | sr.reveal(`.contact__form, .contact__title-form`, { 222 | delay: 100, 223 | scale: 0.9, 224 | origin: "right", 225 | distance: "30px", 226 | }); 227 | 228 | sr.reveal(`.footer, footer__container`, { 229 | delay: 100, 230 | scale: 0.9, 231 | origin: "bottom", 232 | distance: "30px", 233 | }); 234 | -------------------------------------------------------------------------------- /assets/js/mixitup.min.js: -------------------------------------------------------------------------------- 1 | /**! 2 | * MixItUp v3.3.1 3 | * A high-performance, dependency-free library for animated filtering, sorting and more 4 | * Build 94e0fbf6-cd0b-4987-b3c0-14b59b67b8a0 5 | * 6 | * @copyright Copyright 2014-2018 KunkaLabs Limited. 7 | * @author KunkaLabs Limited. 8 | * @link https://www.kunkalabs.com/mixitup/ 9 | * 10 | * @license Commercial use requires a commercial license. 11 | * https://www.kunkalabs.com/mixitup/licenses/ 12 | * 13 | * Non-commercial use permitted under same terms as CC BY-NC 3.0 license. 14 | * http://creativecommons.org/licenses/by-nc/3.0/ 15 | */ 16 | !function(t){"use strict";var e=null,n=null;!function(){var e=["webkit","moz","o","ms"],n=t.document.createElement("div"),a=-1;for(a=0;a-1}}(t.Element.prototype),Object.keys||(Object.keys=function(){var t=Object.prototype.hasOwnProperty,e=!1,n=[],a=-1;return e=!{toString:null}.propertyIsEnumerable("toString"),n=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],a=n.length,function(i){var o=[],r="",s=-1;if("object"!=typeof i&&("function"!=typeof i||null===i))throw new TypeError("Object.keys called on non-object");for(r in i)t.call(i,r)&&o.push(r);if(e)for(s=0;s>>0,0===i)return-1;if(e=0,arguments.length>1&&(e=Number(arguments[1]),e!==e?e=0:0!==e&&e!==1/0&&e!==-(1/0)&&(e=(e>0||-1)*Math.floor(Math.abs(e)))),e>=i)return-1;for(n=e>=0?e:Math.max(i-Math.abs(e),0);n0)||s);g++)r.id?d=r.id:(d="MixItUp"+n.randomHex(),r.id=d),e.instances[d]instanceof e.Mixer?(l=e.instances[d],(!i||i&&i.debug&&i.debug.showWarnings!==!1)&&console.warn(e.messages.warningFactoryPreexistingInstance())):(l=new e.Mixer,l.attach(r,u,d,i),e.instances[d]=l),c=new e.Facade(l),i&&i.debug&&i.debug.enable?h.push(l):h.push(c);return f=s?new e.Collection(h):h[0]},e.use=function(t){e.Base.prototype.callActions.call(e,"beforeUse",arguments),"function"==typeof t&&"mixitup-extension"===t.TYPE?"undefined"==typeof e.extensions[t.NAME]&&(t(e),e.extensions[t.NAME]=t):t.fn&&t.fn.jquery&&(e.libraries.$=t),e.Base.prototype.callActions.call(e,"afterUse",arguments)},e.instances={},e.extensions={},e.libraries={},n={hasClass:function(t,e){return!!t.className.match(new RegExp("(\\s|^)"+e+"(\\s|$)"))},addClass:function(t,e){this.hasClass(t,e)||(t.className+=t.className?" "+e:e)},removeClass:function(t,e){if(this.hasClass(t,e)){var n=new RegExp("(\\s|^)"+e+"(\\s|$)");t.className=t.className.replace(n," ").trim()}},extend:function(t,e,n,a){var i=[],o="",r=-1;n=n||!1,a=a||!1;try{if(Array.isArray(e))for(r=0;ru&&(u=f,l=c)}throw u>1&&(s=e.messages.errorConfigInvalidPropertySuggestion({probableMatch:l})),r=e.messages.errorConfigInvalidProperty({erroneous:o,suggestion:s}),new TypeError(r)}throw t},template:function(t){for(var e=/\${([\w]*)}/g,n={},a=null;a=e.exec(t);)n[a[1]]=new RegExp("\\${"+a[1]+"}","g");return function(e){var a="",i=t;e=e||{};for(a in n)i=i.replace(n[a],"undefined"!=typeof e[a]?e[a]:"");return i}},on:function(e,n,a,i){e&&(e.addEventListener?e.addEventListener(n,a,i):e.attachEvent&&(e["e"+n+a]=a,e[n+a]=function(){e["e"+n+a](t.event)},e.attachEvent("on"+n,e[n+a])))},off:function(t,e,n){t&&(t.removeEventListener?t.removeEventListener(e,n,!1):t.detachEvent&&(t.detachEvent("on"+e,t[e+n]),t[e+n]=null))},getCustomEvent:function(e,n,a){var i=null;return a=a||t.document,"function"==typeof t.CustomEvent?i=new t.CustomEvent(e,{detail:n,bubbles:!0,cancelable:!0}):"function"==typeof a.createEvent?(i=a.createEvent("CustomEvent"),i.initCustomEvent(e,!0,!0,n)):(i=a.createEventObject(),i.type=e,i.returnValue=!1,i.cancelBubble=!1,i.detail=n),i},getOriginalEvent:function(t){return t.touches&&t.touches.length?t.touches[0]:t.changedTouches&&t.changedTouches.length?t.changedTouches[0]:t},index:function(t,e){for(var n=0;null!==(t=t.previousElementSibling);)e&&!t.matches(e)||++n;return n},camelCase:function(t){return t.toLowerCase().replace(/([_-][a-z])/g,function(t){return t.toUpperCase().replace(/[_-]/,"")})},pascalCase:function(t){return(t=this.camelCase(t)).charAt(0).toUpperCase()+t.slice(1)},dashCase:function(t){return t.replace(/([A-Z])/g,"-$1").replace(/^-/,"").toLowerCase()},isElement:function(e,n){return n=n||t.document,!!(t.HTMLElement&&e instanceof t.HTMLElement)||(!!(n.defaultView&&n.defaultView.HTMLElement&&e instanceof n.defaultView.HTMLElement)||null!==e&&1===e.nodeType&&"string"==typeof e.nodeName)},createElement:function(e,n){var a=null,i=null;for(n=n||t.document,a=n.createDocumentFragment(),i=n.createElement("div"),i.innerHTML=e.trim();i.firstChild;)a.appendChild(i.firstChild);return a},removeWhitespace:function(t){for(var e;t&&"#text"===t.nodeName;)e=t,t=t.previousSibling,e.parentElement&&e.parentElement.removeChild(e)},isEqualArray:function(t,e){var n=t.length;if(n!==e.length)return!1;for(;n--;)if(t[n]!==e[n])return!1;return!0},deepEquals:function(t,e){var n;if("object"==typeof t&&t&&"object"==typeof e&&e){if(Object.keys(t).length!==Object.keys(e).length)return!1;for(n in t)if(!e.hasOwnProperty(n)||!this.deepEquals(t[n],e[n]))return!1}else if(t!==e)return!1;return!0},arrayShuffle:function(t){for(var e=t.slice(),n=e.length,a=n,i=-1,o=[];a--;)i=~~(Math.random()*n),o=e[a],e[a]=e[i],e[i]=o;return e},arrayFromList:function(t){var e,n;try{return Array.prototype.slice.call(t)}catch(a){for(e=[],n=0;n "+n),o&&e.removeAttribute("id")),i},clean:function(t){var e=[],n=-1;for(n=0;ni)return!0}return!0},Deferred:function(){this.promise=null,this.resolve=null,this.reject=null,this.id=n.randomHex()},isEmptyObject:function(t){var e="";if("function"==typeof Object.keys)return 0===Object.keys(t).length;for(e in t)if(t.hasOwnProperty(e))return!1;return!0},getClassname:function(t,e,n){var a="";return a+=t.block,a.length&&(a+=t.delineatorElement),a+=t["element"+this.pascalCase(e)],n?(a.length&&(a+=t.delineatorModifier),a+=n):a},getProperty:function(t,e){var n=e.split("."),a=null,i="",o=0;if(!e)return t;for(a=function(t){return t?t[i]:null};o-1,e.callFilters("afterIsBound",n,arguments)},addBinding:function(t){var e=this;this.callActions("beforeAddBinding",arguments),e.isBound()||e.bound.push(t),this.callActions("afterAddBinding",arguments)},removeBinding:function(t){var n=this,a=-1;this.callActions("beforeRemoveBinding",arguments),(a=n.bound.indexOf(t))>-1&&n.bound.splice(a,1),n.bound.length<1&&(n.unbindClick(),a=e.controls.indexOf(n),e.controls.splice(a,1),"active"===n.status&&n.renderStatus(n.el,"inactive")),this.callActions("afterRemoveBinding",arguments)},bindClick:function(){var t=this;this.callActions("beforeBindClick",arguments),t.handler=function(e){t.handleClick(e)},n.on(t.el,"click",t.handler),this.callActions("afterBindClick",arguments)},unbindClick:function(){var t=this;this.callActions("beforeUnbindClick",arguments),n.off(t.el,"click",t.handler),t.handler=null,this.callActions("afterUnbindClick",arguments)},handleClick:function(t){var a=this,i=null,o=null,r=!1,s=void 0,l={},c=null,u=[],f=-1;if(this.callActions("beforeHandleClick",arguments),this.pending=0,o=a.bound[0],i=a.selector?n.closestParent(t.target,o.config.selectors.control+a.selector,!0,o.dom.document):a.el,!i)return void a.callActions("afterHandleClick",arguments);switch(a.type){case"filter":l.filter=a.filter||i.getAttribute("data-filter");break;case"sort":l.sort=a.sort||i.getAttribute("data-sort");break;case"multimix":l.filter=a.filter||i.getAttribute("data-filter"),l.sort=a.sort||i.getAttribute("data-sort");break;case"toggle":l.filter=a.filter||i.getAttribute("data-toggle"),r="live"===a.status?n.hasClass(i,a.classNames.active):"active"===a.status}for(f=0;f0||("live"===a.status?a.updateLive(t,n):(i.sort=a.sort,i.filter=a.filter,a.callFilters("actionsUpdate",i,arguments),a.parseStatusChange(a.el,t,i,n)),a.callActions("afterUpdate",arguments))},updateLive:function(t,n){var a=this,i=null,o=null,r=null,s=-1;if(a.callActions("beforeUpdateLive",arguments),a.el){for(i=a.el.querySelectorAll(a.selector),s=0;r=i[s];s++){switch(o=new e.CommandMultimix,a.type){case"filter":o.filter=r.getAttribute("data-filter");break;case"sort":o.sort=r.getAttribute("data-sort");break;case"multimix":o.filter=r.getAttribute("data-filter"),o.sort=r.getAttribute("data-sort");break;case"toggle":o.filter=r.getAttribute("data-toggle")}o=a.callFilters("actionsUpdateLive",o,arguments),a.parseStatusChange(r,t,o,n)}a.callActions("afterUpdateLive",arguments)}},parseStatusChange:function(t,e,n,a){var i=this,o="",r="",s=-1;switch(i.callActions("beforeParseStatusChange",arguments),i.type){case"filter":e.filter===n.filter?i.renderStatus(t,"active"):i.renderStatus(t,"inactive");break;case"multimix":e.sort===n.sort&&e.filter===n.filter?i.renderStatus(t,"active"):i.renderStatus(t,"inactive");break;case"sort":e.sort.match(/:asc/g)&&(o=e.sort.replace(/:asc/g,"")),e.sort===n.sort||o===n.sort?i.renderStatus(t,"active"):i.renderStatus(t,"inactive");break;case"toggle":for(a.length<1&&i.renderStatus(t,"inactive"),e.filter===n.filter&&i.renderStatus(t,"active"),s=0;s-1)throw new Error(e.messages.errorInsertPreexistingElement());c.style.display="none",s.appendChild(c),s.appendChild(i.dom.document.createTextNode(" ")),n.isElement(c,i.dom.document)&&c.matches(i.config.selectors.target)&&(l=new e.Target,l.init(c,i),l.isInDom=!0,i.targets.splice(r,0,l),r++)}i.dom.parent.insertBefore(s,o)}a.startOrder=i.origOrder=i.targets,i.callActions("afterInsertTargets",arguments)},getNextSibling:function(t,e,n){var a=this,i=null;return t=Math.max(t,0),e&&"before"===n?i=e:e&&"after"===n?i=e.nextElementSibling||null:a.targets.length>0&&"undefined"!=typeof t?i=t0&&(a.config.layout.siblingAfter?i=a.config.layout.siblingAfter:a.config.layout.siblingBefore?i=a.config.layout.siblingBefore.nextElementSibling:a.dom.parent.children[0]),a.callFilters("elementGetNextSibling",i,arguments)},filterOperation:function(t){var e=this,n=!1,a=-1,i="",o=null,r=-1;for(e.callActions("beforeFilterOperation",arguments),i=t.newFilter.action,r=0;o=t.newOrder[r];r++)n=t.newFilter.collection?t.newFilter.collection.indexOf(o.dom.el)>-1:""!==t.newFilter.selector&&o.dom.el.matches(t.newFilter.selector),e.evaluateHideShow(n,o,i,t);if(t.toRemove.length)for(r=0;o=t.show[r];r++)t.toRemove.indexOf(o)>-1&&(t.show.splice(r,1),(a=t.toShow.indexOf(o))>-1&&t.toShow.splice(a,1),t.toHide.push(o),t.hide.push(o),r--);t.matching=t.show.slice(),0===t.show.length&&""!==t.newFilter.selector&&0!==e.targets.length&&(t.hasFailed=!0),e.callActions("afterFilterOperation",arguments)},evaluateHideShow:function(t,e,n,a){var i=this,o=!1,r=Array.prototype.slice.call(arguments,1);o=i.callFilters("testResultEvaluateHideShow",t,r),i.callActions("beforeEvaluateHideShow",arguments),o===!0&&"show"===n||o===!1&&"hide"===n?(a.show.push(e),!e.isShown&&a.toShow.push(e)):(a.hide.push(e),e.isShown&&a.toHide.push(e)),i.callActions("afterEvaluateHideShow",arguments)},sortOperation:function(t){var a=this,i=[],o=null,r=null,s=-1;if(a.callActions("beforeSortOperation",arguments),t.startOrder=a.targets,t.newSort.collection){for(i=[],s=0;r=t.newSort.collection[s];s++){if(a.dom.targets.indexOf(r)<0)throw new Error(e.messages.errorSortNonExistentElement());o=new e.Target,o.init(r,a),o.isInDom=!0,i.push(o)}t.newOrder=i}else"random"===t.newSort.order?t.newOrder=n.arrayShuffle(t.startOrder):""===t.newSort.attribute?(t.newOrder=a.origOrder.slice(),"desc"===t.newSort.order&&t.newOrder.reverse()):(t.newOrder=t.startOrder.slice(),t.newOrder.sort(function(e,n){return a.compare(e,n,t.newSort)}));n.isEqualArray(t.newOrder,t.startOrder)&&(t.willSort=!1),a.callActions("afterSortOperation",arguments)},compare:function(t,e,n){var a=this,i=n.order,o=a.getAttributeValue(t,n.attribute),r=a.getAttributeValue(e,n.attribute);return isNaN(1*o)||isNaN(1*r)?(o=o.toLowerCase(),r=r.toLowerCase()):(o=1*o,r=1*r),or?"asc"===i?1:-1:o===r&&n.next?a.compare(t,e,n.next):0},getAttributeValue:function(t,n){var a=this,i="";return i=t.dom.el.getAttribute("data-"+n),null===i&&a.config.debug.showWarnings&&console.warn(e.messages.warningInconsistentSortingAttributes({attribute:"data-"+n})),a.callFilters("valueGetAttributeValue",i||0,arguments)},printSort:function(e,a){var i=this,o=e?a.newOrder:a.startOrder,r=e?a.startOrder:a.newOrder,s=o.length?o[o.length-1].dom.el.nextElementSibling:null,l=t.document.createDocumentFragment(),c=null,u=null,f=null,h=-1;for(i.callActions("beforePrintSort",arguments),h=0;u=o[h];h++)f=u.dom.el,"absolute"!==f.style.position&&(n.removeWhitespace(f.previousSibling),f.parentElement.removeChild(f));for(c=s?s.previousSibling:i.dom.parent.lastChild,c&&"#text"===c.nodeName&&n.removeWhitespace(c),h=0;u=r[h];h++)f=u.dom.el,n.isElement(l.lastChild)&&l.appendChild(t.document.createTextNode(" ")),l.appendChild(f);i.dom.parent.firstChild&&i.dom.parent.firstChild!==s&&l.insertBefore(t.document.createTextNode(" "),l.childNodes[0]),s?(l.appendChild(t.document.createTextNode(" ")),i.dom.parent.insertBefore(l,s)):i.dom.parent.appendChild(l),i.callActions("afterPrintSort",arguments)},parseSortString:function(t,a){var i=this,o=t.split(" "),r=a,s=[],l=-1;for(l=0;l-1&&(c=n.substring(l),u=s.exec(c),f=u[1]),t){case"fade":a.opacity=f?parseFloat(f):0;break;case"stagger":r.staggerDuration=f?parseFloat(f):100;break;default:if(o&&r.config.animation.reverseOut&&"scale"!==t?a[t].value=(f?parseFloat(f):e.transformDefaults[t].value)*-1:a[t].value=f?parseFloat(f):e.transformDefaults[t].value,f){for(m=0;d=h[m];m++)if(f.indexOf(d)>-1){a[t].unit=d;break}}else a[t].unit=e.transformDefaults[t].unit;i.push(t+"("+a[t].value+a[t].unit+")")}r.callActions("afterParseEffect",arguments)},buildState:function(t){var n=this,a=new e.State,i=null,o=-1;for(n.callActions("beforeBuildState",arguments),o=0;i=n.targets[o];o++)(!t.toRemove.length||t.toRemove.indexOf(i)<0)&&a.targets.push(i.dom.el);for(o=0;i=t.matching[o];o++)a.matching.push(i.dom.el);for(o=0;i=t.show[o];o++)a.show.push(i.dom.el);for(o=0;i=t.hide[o];o++)(!t.toRemove.length||t.toRemove.indexOf(i)<0)&&a.hide.push(i.dom.el);return a.id=n.id,a.container=n.dom.container,a.activeFilter=t.newFilter,a.activeSort=t.newSort,a.activeDataset=t.newDataset,a.activeContainerClassName=t.newContainerClassName,a.hasFailed=t.hasFailed,a.totalTargets=n.targets.length,a.totalShow=t.show.length,a.totalHide=t.hide.length,a.totalMatching=t.matching.length,a.triggerElement=t.triggerElement,n.callFilters("stateBuildState",a,arguments)},goMix:function(a,i){var o=this,r=null;return o.callActions("beforeGoMix",arguments),o.config.animation.duration&&o.config.animation.effects&&n.isVisible(o.dom.container)||(a=!1),i.toShow.length||i.toHide.length||i.willSort||i.willChangeLayout||(a=!1),i.startState.show.length||i.show.length||(a=!1),e.events.fire("mixStart",o.dom.container,{state:i.startState,futureState:i.newState,instance:o},o.dom.document),"function"==typeof o.config.callbacks.onMixStart&&o.config.callbacks.onMixStart.call(o.dom.container,i.startState,i.newState,o),n.removeClass(o.dom.container,n.getClassname(o.config.classNames,"container",o.config.classNames.modifierFailed)),r=o.userDeferred?o.userDeferred:o.userDeferred=n.defer(e.libraries),o.isBusy=!0,a&&e.features.has.transitions?(t.pageYOffset!==i.docState.scrollTop&&t.scrollTo(i.docState.scrollLeft,i.docState.scrollTop),o.config.animation.applyPerspective&&(o.dom.parent.style[e.features.perspectiveProp]=o.config.animation.perspectiveDistance,o.dom.parent.style[e.features.perspectiveOriginProp]=o.config.animation.perspectiveOrigin),o.config.animation.animateResizeContainer&&i.startHeight!==i.newHeight&&i.viewportDeltaY!==i.startHeight-i.newHeight&&(o.dom.parent.style.height=i.startHeight+"px"),o.config.animation.animateResizeContainer&&i.startWidth!==i.newWidth&&i.viewportDeltaX!==i.startWidth-i.newWidth&&(o.dom.parent.style.width=i.startWidth+"px"),i.startHeight===i.newHeight&&(o.dom.parent.style.height=i.startHeight+"px"),i.startWidth===i.newWidth&&(o.dom.parent.style.width=i.startWidth+"px"),i.startHeight===i.newHeight&&i.startWidth===i.newWidth&&(o.dom.parent.style.overflow="hidden"),requestAnimationFrame(function(){o.moveTargets(i)}),o.callFilters("promiseGoMix",r.promise,arguments)):(o.config.debug.fauxAsync?setTimeout(function(){o.cleanUp(i)},o.config.animation.duration):o.cleanUp(i),o.callFilters("promiseGoMix",r.promise,arguments))},getStartMixData:function(n){var a=this,i=t.getComputedStyle(a.dom.parent),o=a.dom.parent.getBoundingClientRect(),r=null,s={},l=-1,c=i[e.features.boxSizingProp];for(a.incPadding="border-box"===c,a.callActions("beforeGetStartMixData",arguments),l=0;r=n.show[l];l++)s=r.getPosData(),n.showPosData[l]={startPosData:s};for(l=0;r=n.toHide[l];l++)s=r.getPosData(),n.toHidePosData[l]={startPosData:s};n.startX=o.left,n.startY=o.top,n.startHeight=a.incPadding?o.height:o.height-parseFloat(i.paddingTop)-parseFloat(i.paddingBottom)-parseFloat(i.borderTop)-parseFloat(i.borderBottom),n.startWidth=a.incPadding?o.width:o.width-parseFloat(i.paddingLeft)-parseFloat(i.paddingRight)-parseFloat(i.borderLeft)-parseFloat(i.borderRight),a.callActions("afterGetStartMixData",arguments)},setInter:function(t){var e=this,a=null,i=-1;for(e.callActions("beforeSetInter",arguments),e.config.animation.clampHeight&&(e.dom.parent.style.height=t.startHeight+"px",e.dom.parent.style.overflow="hidden"),e.config.animation.clampWidth&&(e.dom.parent.style.width=t.startWidth+"px",e.dom.parent.style.overflow="hidden"),i=0;a=t.toShow[i];i++)a.show();t.willChangeLayout&&(n.removeClass(e.dom.container,t.startContainerClassName),n.addClass(e.dom.container,t.newContainerClassName)),e.callActions("afterSetInter",arguments)},getInterMixData:function(t){var e=this,n=null,a=-1;for(e.callActions("beforeGetInterMixData",arguments),a=0;n=t.show[a];a++)t.showPosData[a].interPosData=n.getPosData();for(a=0;n=t.toHide[a];a++)t.toHidePosData[a].interPosData=n.getPosData();e.callActions("afterGetInterMixData",arguments)},setFinal:function(t){var e=this,n=null,a=-1;for(e.callActions("beforeSetFinal",arguments),t.willSort&&e.printSort(!1,t),a=0;n=t.toHide[a];a++)n.hide();e.callActions("afterSetFinal",arguments)},getFinalMixData:function(e){var a=this,i=null,o=null,r=null,s=-1;for(a.callActions("beforeGetFinalMixData",arguments),s=0;r=e.show[s];s++)e.showPosData[s].finalPosData=r.getPosData();for(s=0;r=e.toHide[s];s++)e.toHidePosData[s].finalPosData=r.getPosData();for((a.config.animation.clampHeight||a.config.animation.clampWidth)&&(a.dom.parent.style.height=a.dom.parent.style.width=a.dom.parent.style.overflow=""),a.incPadding||(i=t.getComputedStyle(a.dom.parent)),o=a.dom.parent.getBoundingClientRect(),e.newX=o.left,e.newY=o.top,e.newHeight=a.incPadding?o.height:o.height-parseFloat(i.paddingTop)-parseFloat(i.paddingBottom)-parseFloat(i.borderTop)-parseFloat(i.borderBottom),e.newWidth=a.incPadding?o.width:o.width-parseFloat(i.paddingLeft)-parseFloat(i.paddingRight)-parseFloat(i.borderLeft)-parseFloat(i.borderRight),e.viewportDeltaX=e.docState.viewportWidth-this.dom.document.documentElement.clientWidth,e.viewportDeltaY=e.docState.viewportHeight-this.dom.document.documentElement.clientHeight,e.willSort&&a.printSort(!0,e),s=0;r=e.toShow[s];s++)r.hide();for(s=0;r=e.toHide[s];s++)r.show();e.willChangeLayout&&(n.removeClass(a.dom.container,e.newContainerClassName),n.addClass(a.dom.container,a.config.layout.containerClassName)),a.callActions("afterGetFinalMixData",arguments)},getTweenData:function(t){var n=this,a=null,i=null,o=Object.getOwnPropertyNames(n.effectsIn),r="",s=null,l=-1,c=-1,u=-1,f=-1;for(n.callActions("beforeGetTweenData",arguments),u=0;a=t.show[u];u++)for(i=t.showPosData[u],i.posIn=new e.StyleData,i.posOut=new e.StyleData,i.tweenData=new e.StyleData,a.isShown?(i.posIn.x=i.startPosData.x-i.interPosData.x,i.posIn.y=i.startPosData.y-i.interPosData.y):i.posIn.x=i.posIn.y=0,i.posOut.x=i.finalPosData.x-i.interPosData.x,i.posOut.y=i.finalPosData.y-i.interPosData.y,i.posIn.opacity=a.isShown?1:n.effectsIn.opacity,i.posOut.opacity=1,i.tweenData.opacity=i.posOut.opacity-i.posIn.opacity,a.isShown||n.config.animation.nudge||(i.posIn.x=i.posOut.x,i.posIn.y=i.posOut.y),i.tweenData.x=i.posOut.x-i.posIn.x,i.tweenData.y=i.posOut.y-i.posIn.y,n.config.animation.animateResizeTargets&&(i.posIn.width=i.startPosData.width,i.posIn.height=i.startPosData.height,l=(i.startPosData.width||i.finalPosData.width)-i.interPosData.width,i.posIn.marginRight=i.startPosData.marginRight-l,c=(i.startPosData.height||i.finalPosData.height)-i.interPosData.height,i.posIn.marginBottom=i.startPosData.marginBottom-c,i.posOut.width=i.finalPosData.width,i.posOut.height=i.finalPosData.height,l=(i.finalPosData.width||i.startPosData.width)-i.interPosData.width,i.posOut.marginRight=i.finalPosData.marginRight-l,c=(i.finalPosData.height||i.startPosData.height)-i.interPosData.height,i.posOut.marginBottom=i.finalPosData.marginBottom-c,i.tweenData.width=i.posOut.width-i.posIn.width,i.tweenData.height=i.posOut.height-i.posIn.height,i.tweenData.marginRight=i.posOut.marginRight-i.posIn.marginRight,i.tweenData.marginBottom=i.posOut.marginBottom-i.posIn.marginBottom),f=0;r=o[f];f++)s=n.effectsIn[r],s instanceof e.TransformData&&s.value&&(i.posIn[r].value=s.value,i.posOut[r].value=0,i.tweenData[r].value=i.posOut[r].value-i.posIn[r].value,i.posIn[r].unit=i.posOut[r].unit=i.tweenData[r].unit=s.unit);for(u=0;a=t.toHide[u];u++)for(i=t.toHidePosData[u],i.posIn=new e.StyleData,i.posOut=new e.StyleData,i.tweenData=new e.StyleData,i.posIn.x=a.isShown?i.startPosData.x-i.interPosData.x:0,i.posIn.y=a.isShown?i.startPosData.y-i.interPosData.y:0,i.posOut.x=n.config.animation.nudge?0:i.posIn.x,i.posOut.y=n.config.animation.nudge?0:i.posIn.y,i.tweenData.x=i.posOut.x-i.posIn.x,i.tweenData.y=i.posOut.y-i.posIn.y,n.config.animation.animateResizeTargets&&(i.posIn.width=i.startPosData.width,i.posIn.height=i.startPosData.height,l=i.startPosData.width-i.interPosData.width,i.posIn.marginRight=i.startPosData.marginRight-l,c=i.startPosData.height-i.interPosData.height,i.posIn.marginBottom=i.startPosData.marginBottom-c),i.posIn.opacity=1,i.posOut.opacity=n.effectsOut.opacity,i.tweenData.opacity=i.posOut.opacity-i.posIn.opacity,f=0;r=o[f];f++)s=n.effectsOut[r],s instanceof e.TransformData&&s.value&&(i.posIn[r].value=0,i.posOut[r].value=s.value,i.tweenData[r].value=i.posOut[r].value-i.posIn[r].value,i.posIn[r].unit=i.posOut[r].unit=i.tweenData[r].unit=s.unit);n.callActions("afterGetTweenData",arguments)},moveTargets:function(t){var a=this,i=null,o=null,r=null,s="",l=!1,c=-1,u=-1,f=a.checkProgress.bind(a);for(a.callActions("beforeMoveTargets",arguments),u=0;i=t.show[u];u++)o=new e.IMoveData,r=t.showPosData[u],s=i.isShown?"none":"show",l=a.willTransition(s,t.hasEffect,r.posIn,r.posOut),l&&c++,i.show(),o.posIn=r.posIn,o.posOut=r.posOut,o.statusChange=s,o.staggerIndex=c,o.operation=t,o.callback=l?f:null,i.move(o);for(u=0;i=t.toHide[u];u++)r=t.toHidePosData[u],o=new e.IMoveData,s="hide",l=a.willTransition(s,r.posIn,r.posOut),o.posIn=r.posIn,o.posOut=r.posOut,o.statusChange=s,o.staggerIndex=u,o.operation=t,o.callback=l?f:null,i.move(o);a.config.animation.animateResizeContainer&&(a.dom.parent.style[e.features.transitionProp]="height "+a.config.animation.duration+"ms ease, width "+a.config.animation.duration+"ms ease ",requestAnimationFrame(function(){t.startHeight!==t.newHeight&&t.viewportDeltaY!==t.startHeight-t.newHeight&&(a.dom.parent.style.height=t.newHeight+"px"),t.startWidth!==t.newWidth&&t.viewportDeltaX!==t.startWidth-t.newWidth&&(a.dom.parent.style.width=t.newWidth+"px")})),t.willChangeLayout&&(n.removeClass(a.dom.container,a.config.layout.ContainerClassName),n.addClass(a.dom.container,t.newContainerClassName)),a.callActions("afterMoveTargets",arguments)},hasEffect:function(){var t=this,e=["scale","translateX","translateY","translateZ","rotateX","rotateY","rotateZ"],n="",a=null,i=!1,o=-1,r=-1;if(1!==t.effectsIn.opacity)return t.callFilters("resultHasEffect",!0,arguments);for(r=0;n=e[r];r++)if(a=t.effectsIn[n],o="undefined"!==a.value?a.value:a,0!==o){i=!0;break}return t.callFilters("resultHasEffect",i,arguments)},willTransition:function(t,e,a,i){var o=this,r=!1;return r=!!n.isVisible(o.dom.container)&&(!!("none"!==t&&e||a.x!==i.x||a.y!==i.y)||!!o.config.animation.animateResizeTargets&&(a.width!==i.width||a.height!==i.height||a.marginRight!==i.marginRight||a.marginTop!==i.marginTop)),o.callFilters("resultWillTransition",r,arguments)},checkProgress:function(t){var e=this;e.targetsDone++,e.targetsBound===e.targetsDone&&e.cleanUp(t)},cleanUp:function(t){var a=this,i=null,o=null,r=null,s=null,l=-1;for(a.callActions("beforeCleanUp",arguments),a.targetsMoved=a.targetsImmovable=a.targetsBound=a.targetsDone=0,l=0;i=t.show[l];l++)i.cleanUp(),i.show();for(l=0;i=t.toHide[l];l++)i.cleanUp(),i.hide();if(t.willSort&&a.printSort(!1,t),a.dom.parent.style[e.features.transitionProp]=a.dom.parent.style.height=a.dom.parent.style.width=a.dom.parent.style.overflow=a.dom.parent.style[e.features.perspectiveProp]=a.dom.parent.style[e.features.perspectiveOriginProp]="",t.willChangeLayout&&(n.removeClass(a.dom.container,t.startContainerClassName),n.addClass(a.dom.container,t.newContainerClassName)),t.toRemove.length){for(l=0;i=a.targets[l];l++)t.toRemove.indexOf(i)>-1&&((o=i.dom.el.previousSibling)&&"#text"===o.nodeName&&(r=i.dom.el.nextSibling)&&"#text"===r.nodeName&&n.removeWhitespace(o),t.willSort||a.dom.parent.removeChild(i.dom.el),a.targets.splice(l,1),i.isInDom=!1,l--);a.origOrder=a.targets}t.willSort&&(a.targets=t.newOrder),a.state=t.newState,a.lastOperation=t,a.dom.targets=a.state.targets,e.events.fire("mixEnd",a.dom.container,{state:a.state,instance:a},a.dom.document),"function"==typeof a.config.callbacks.onMixEnd&&a.config.callbacks.onMixEnd.call(a.dom.container,a.state,a),t.hasFailed&&(e.events.fire("mixFail",a.dom.container,{state:a.state,instance:a},a.dom.document),"function"==typeof a.config.callbacks.onMixFail&&a.config.callbacks.onMixFail.call(a.dom.container,a.state,a),n.addClass(a.dom.container,n.getClassname(a.config.classNames,"container",a.config.classNames.modifierFailed))),"function"==typeof a.userCallback&&a.userCallback.call(a.dom.container,a.state,a),"function"==typeof a.userDeferred.resolve&&a.userDeferred.resolve(a.state),a.userCallback=null,a.userDeferred=null,a.lastClicked=null,a.isToggling=!1,a.isBusy=!1,a.queue.length&&(a.callActions("beforeReadQueueCleanUp",arguments),s=a.queue.shift(),a.userDeferred=s.deferred,a.isToggling=s.isToggling,a.lastClicked=s.triggerElement,s.instruction.command instanceof e.CommandMultimix?a.multimix.apply(a,s.args):a.dataset.apply(a,s.args)),a.callActions("afterCleanUp",arguments)},parseMultimixArgs:function(t){var a=this,i=new e.UserInstruction,o=null,r=-1;for(i.animate=a.config.animation.enable,i.command=new e.CommandMultimix,r=0;r-1?i.command.position=o:"string"==typeof o?i.command.collection=n.arrayFromList(n.createElement(o).childNodes):"object"==typeof o&&n.isElement(o,a.dom.document)?i.command.collection.length?i.command.sibling=o:i.command.collection=[o]:"object"==typeof o&&o.length?i.command.collection.length?i.command.sibling=o[0]:i.command.collection=o:"object"==typeof o&&o.childNodes&&o.childNodes.length?i.command.collection.length?i.command.sibling=o.childNodes[0]:i.command.collection=n.arrayFromList(o.childNodes):"object"==typeof o?n.extend(i.command,o):"boolean"==typeof o?i.animate=o:"function"==typeof o&&(i.callback=o));if(i.command.index&&i.command.sibling)throw new Error(e.messages.errorInsertInvalidArguments());return!i.command.collection.length&&a.config.debug.showWarnings&&console.warn(e.messages.warningInsertNoElements()),i=a.callFilters("instructionParseInsertArgs",i,arguments),n.freeze(i),i},parseRemoveArgs:function(t){var a=this,i=new e.UserInstruction,o=null,r=null,s=-1;for(i.animate=a.config.animation.enable,i.command=new e.CommandRemove,s=0;s-1&&i.command.targets.push(o);return!i.command.targets.length&&a.config.debug.showWarnings&&console.warn(e.messages.warningRemoveNoElements()),n.freeze(i),i},parseDatasetArgs:function(t){var a=this,i=new e.UserInstruction,o=null,r=-1;for(i.animate=a.config.animation.enable,i.command=new e.CommandDataset,r=0;r-1&&t.toggleArray.splice(a,1),i=t.getToggleSelector(),t.multimix({filter:i},e.animate,e.callback)},sort:function(){var t=this,e=t.parseSortArgs(arguments);return t.multimix({sort:e.command},e.animate,e.callback)},changeLayout:function(){var t=this,e=t.parseChangeLayoutArgs(arguments);return t.multimix({changeLayout:e.command},e.animate,e.callback)},dataset:function(){var t=this,n=t.parseDatasetArgs(arguments),a=null,i=null,o=!1;return t.callActions("beforeDataset",arguments),t.isBusy?(i=new e.QueueItem,i.args=arguments,i.instruction=n,t.queueMix(i)):(n.callback&&(t.userCallback=n.callback),o=n.animate^t.config.animation.enable?n.animate:t.config.animation.enable,a=t.getDataOperation(n.command.dataset),t.goMix(o,a))},multimix:function(){var t=this,n=null,a=!1,i=null,o=t.parseMultimixArgs(arguments);return t.callActions("beforeMultimix",arguments),t.isBusy?(i=new e.QueueItem,i.args=arguments,i.instruction=o,i.triggerElement=t.lastClicked,i.isToggling=t.isToggling,t.queueMix(i)):(n=t.getOperation(o.command),t.config.controls.enable&&(o.command.filter&&!t.isToggling&&(t.toggleArray.length=0,t.buildToggleArray(n.command)),t.queue.length<1&&t.updateControls(n.command)),o.callback&&(t.userCallback=o.callback),a=o.animate^t.config.animation.enable?o.animate:t.config.animation.enable,t.callFilters("operationMultimix",n,arguments),t.goMix(a,n))},getOperation:function(t){var a=this,i=t.sort,o=t.filter,r=t.changeLayout,s=t.remove,l=t.insert,c=new e.Operation;return c=a.callFilters("operationUnmappedGetOperation",c,arguments),c.id=n.randomHex(),c.command=t,c.startState=a.state,c.triggerElement=a.lastClicked,a.isBusy?(a.config.debug.showWarnings&&console.warn(e.messages.warningGetOperationInstanceBusy()),null):(l&&a.insertTargets(l,c),s&&(c.toRemove=s.targets),c.startSort=c.newSort=c.startState.activeSort,c.startOrder=c.newOrder=a.targets,i&&(c.startSort=c.startState.activeSort,c.newSort=i,c.willSort=a.willSort(i,c.startState.activeSort),c.willSort&&a.sortOperation(c)),c.startFilter=c.startState.activeFilter,o?c.newFilter=o:c.newFilter=n.extend(new e.CommandFilter,c.startFilter),"all"===c.newFilter.selector?c.newFilter.selector=a.config.selectors.target:"none"===c.newFilter.selector&&(c.newFilter.selector=""),a.filterOperation(c),c.startContainerClassName=c.startState.activeContainerClassName,r?(c.newContainerClassName=r.containerClassName,c.newContainerClassName!==c.startContainerClassName&&(c.willChangeLayout=!0)):c.newContainerClassName=c.startContainerClassName,a.config.animation.enable&&(a.getStartMixData(c),a.setInter(c),c.docState=n.getDocumentState(a.dom.document),a.getInterMixData(c),a.setFinal(c),a.getFinalMixData(c),a.parseEffects(),c.hasEffect=a.hasEffect(),a.getTweenData(c)),c.willSort&&(a.targets=c.newOrder),c.newState=a.buildState(c),a.callFilters("operationMappedGetOperation",c,arguments))},tween:function(t,e){var n=null,a=null,i=-1,o=-1;for(e=Math.min(e,1),e=Math.max(e,0),o=0;n=t.show[o];o++)a=t.showPosData[o],n.applyTween(a,e);for(o=0;n=t.hide[o];o++)n.isShown&&n.hide(),(i=t.toHide.indexOf(n))>-1&&(a=t.toHidePosData[i],n.isShown||n.show(),n.applyTween(a,e))},insert:function(){var t=this,e=t.parseInsertArgs(arguments);return t.multimix({insert:e.command},e.animate,e.callback)},insertBefore:function(){var t=this,e=t.parseInsertArgs(arguments);return t.insert(e.command.collection,"before",e.command.sibling,e.animate,e.callback)},insertAfter:function(){var t=this,e=t.parseInsertArgs(arguments);return t.insert(e.command.collection,"after",e.command.sibling,e.animate,e.callback)},prepend:function(){var t=this,e=t.parseInsertArgs(arguments);return t.insert(0,e.command.collection,e.animate,e.callback)},append:function(){var t=this,e=t.parseInsertArgs(arguments);return t.insert(t.state.totalTargets,e.command.collection,e.animate,e.callback)},remove:function(){var t=this,e=t.parseRemoveArgs(arguments);return t.multimix({remove:e.command},e.animate,e.callback)},getConfig:function(t){var e=this,a=null;return a=t?n.getProperty(e.config,t):e.config,e.callFilters("valueGetConfig",a,arguments)},configure:function(t){var e=this;e.callActions("beforeConfigure",arguments),n.extend(e.config,t,!0,!0),e.callActions("afterConfigure",arguments)},getState:function(){var t=this,a=null;return a=new e.State,n.extend(a,t.state),n.freeze(a),t.callFilters("stateGetState",a,arguments)},forceRefresh:function(){var t=this;t.indexTargets()},forceRender:function(){var t=this,e=null,n=null,a="";for(a in t.cache)e=t.cache[a],n=e.render(e.data),n!==e.dom.el&&(e.isInDom&&(e.unbindEvents(),t.dom.parent.replaceChild(n,e.dom.el)),e.isShown||(n.style.display="none"),e.dom.el=n,e.isInDom&&e.bindEvents());t.state=t.buildState(t.lastOperation)},destroy:function(t){var n=this,a=null,i=null,o=0;for(n.callActions("beforeDestroy",arguments),o=0;a=n.controls[o];o++)a.removeBinding(n);for(o=0;i=n.targets[o];o++)t&&i.show(),i.unbindEvents();n.dom.container.id.match(/^MixItUp/)&&n.dom.container.removeAttribute("id"),delete e.instances[n.id],n.callActions("afterDestroy",arguments)}}),e.IMoveData=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.posIn=null,this.posOut=null,this.operation=null,this.callback=null,this.statusChange="",this.duration=-1,this.staggerIndex=-1,this.callActions("afterConstruct"),n.seal(this)},e.BaseStatic.call(e.IMoveData),e.IMoveData.prototype=Object.create(e.Base.prototype),e.IMoveData.prototype.constructor=e.IMoveData,e.TargetDom=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.el=null,this.callActions("afterConstruct"),n.seal(this)},e.BaseStatic.call(e.TargetDom),e.TargetDom.prototype=Object.create(e.Base.prototype),e.TargetDom.prototype.constructor=e.TargetDom,e.Target=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.id="",this.sortString="",this.mixer=null,this.callback=null,this.isShown=!1,this.isBound=!1,this.isExcluded=!1,this.isInDom=!1,this.handler=null,this.operation=null,this.data=null,this.dom=new e.TargetDom,this.callActions("afterConstruct"),n.seal(this)},e.BaseStatic.call(e.Target),e.Target.prototype=Object.create(e.Base.prototype),n.extend(e.Target.prototype,{constructor:e.Target,init:function(t,n,a){var i=this,o="";if(i.callActions("beforeInit",arguments),i.mixer=n,t||(t=i.render(a)),i.cacheDom(t),i.bindEvents(),"none"!==i.dom.el.style.display&&(i.isShown=!0),a&&n.config.data.uidKey){if("undefined"==typeof(o=a[n.config.data.uidKey])||o.toString().length<1)throw new TypeError(e.messages.errorDatasetInvalidUidKey({uidKey:n.config.data.uidKey}));i.id=o,i.data=a,n.cache[o]=i}i.callActions("afterInit",arguments)},render:function(t){var a=this,i=null,o=null,r=null,s="";if(a.callActions("beforeRender",arguments),i=a.callFilters("renderRender",a.mixer.config.render.target,arguments),"function"!=typeof i)throw new TypeError(e.messages.errorDatasetRendererNotSet());return s=i(t),s&&"object"==typeof s&&n.isElement(s)?o=s:"string"==typeof s&&(r=document.createElement("div"),r.innerHTML=s,o=r.firstElementChild),a.callFilters("elRender",o,arguments)},cacheDom:function(t){var e=this;e.callActions("beforeCacheDom",arguments),e.dom.el=t,e.callActions("afterCacheDom",arguments)},getSortString:function(t){var e=this,n=e.dom.el.getAttribute("data-"+t)||"";e.callActions("beforeGetSortString",arguments),n=isNaN(1*n)?n.toLowerCase():1*n,e.sortString=n,e.callActions("afterGetSortString",arguments)},show:function(){var t=this;t.callActions("beforeShow",arguments),t.isShown||(t.dom.el.style.display="",t.isShown=!0),t.callActions("afterShow",arguments)},hide:function(){var t=this;t.callActions("beforeHide",arguments),t.isShown&&(t.dom.el.style.display="none",t.isShown=!1),t.callActions("afterHide",arguments)},move:function(t){var e=this;e.callActions("beforeMove",arguments),e.isExcluded||e.mixer.targetsMoved++,e.applyStylesIn(t),requestAnimationFrame(function(){e.applyStylesOut(t)}),e.callActions("afterMove",arguments)},applyTween:function(t,n){var a=this,i="",o=null,r=t.posIn,s=[],l=new e.StyleData,c=-1;for(a.callActions("beforeApplyTween",arguments),l.x=r.x,l.y=r.y,0===n?a.hide():a.isShown||a.show(),c=0;i=e.features.TWEENABLE[c];c++)if(o=t.tweenData[i],"x"===i){if(!o)continue;l.x=r.x+o*n}else if("y"===i){if(!o)continue;l.y=r.y+o*n}else if(o instanceof e.TransformData){if(!o.value)continue;l[i].value=r[i].value+o.value*n,l[i].unit=o.unit,s.push(i+"("+l[i].value+o.unit+")")}else{if(!o)continue;l[i]=r[i]+o*n,a.dom.el.style[i]=l[i]}(l.x||l.y)&&s.unshift("translate("+l.x+"px, "+l.y+"px)"),s.length&&(a.dom.el.style[e.features.transformProp]=s.join(" ")),a.callActions("afterApplyTween",arguments)},applyStylesIn:function(t){var n=this,a=t.posIn,i=1!==n.mixer.effectsIn.opacity,o=[];n.callActions("beforeApplyStylesIn",arguments),o.push("translate("+a.x+"px, "+a.y+"px)"),n.mixer.config.animation.animateResizeTargets&&("show"!==t.statusChange&&(n.dom.el.style.width=a.width+"px",n.dom.el.style.height=a.height+"px"),n.dom.el.style.marginRight=a.marginRight+"px",n.dom.el.style.marginBottom=a.marginBottom+"px"),i&&(n.dom.el.style.opacity=a.opacity),"show"===t.statusChange&&(o=o.concat(n.mixer.transformIn)),n.dom.el.style[e.features.transformProp]=o.join(" "),n.callActions("afterApplyStylesIn",arguments)},applyStylesOut:function(t){var n=this,a=[],i=[],o=n.mixer.config.animation.animateResizeTargets,r="undefined"!=typeof n.mixer.effectsIn.opacity;if(n.callActions("beforeApplyStylesOut",arguments),a.push(n.writeTransitionRule(e.features.transformRule,t.staggerIndex)),"none"!==t.statusChange&&a.push(n.writeTransitionRule("opacity",t.staggerIndex,t.duration)),o&&(a.push(n.writeTransitionRule("width",t.staggerIndex,t.duration)),a.push(n.writeTransitionRule("height",t.staggerIndex,t.duration)),a.push(n.writeTransitionRule("margin",t.staggerIndex,t.duration))),!t.callback)return n.mixer.targetsImmovable++,void(n.mixer.targetsMoved===n.mixer.targetsImmovable&&n.mixer.cleanUp(t.operation));switch(n.operation=t.operation,n.callback=t.callback,!n.isExcluded&&n.mixer.targetsBound++,n.isBound=!0,n.applyTransition(a),o&&t.posOut.width>0&&t.posOut.height>0&&(n.dom.el.style.width=t.posOut.width+"px",n.dom.el.style.height=t.posOut.height+"px",n.dom.el.style.marginRight=t.posOut.marginRight+"px",n.dom.el.style.marginBottom=t.posOut.marginBottom+"px"),n.mixer.config.animation.nudge||"hide"!==t.statusChange||i.push("translate("+t.posOut.x+"px, "+t.posOut.y+"px)"),t.statusChange){case"hide":r&&(n.dom.el.style.opacity=n.mixer.effectsOut.opacity),i=i.concat(n.mixer.transformOut);break;case"show":r&&(n.dom.el.style.opacity=1)}(n.mixer.config.animation.nudge||!n.mixer.config.animation.nudge&&"hide"!==t.statusChange)&&i.push("translate("+t.posOut.x+"px, "+t.posOut.y+"px)"),n.dom.el.style[e.features.transformProp]=i.join(" "),n.callActions("afterApplyStylesOut",arguments)},writeTransitionRule:function(t,e,n){var a=this,i=a.getDelay(e),o="";return o=t+" "+(n>0?n:a.mixer.config.animation.duration)+"ms "+i+"ms "+("opacity"===t?"linear":a.mixer.config.animation.easing),a.callFilters("ruleWriteTransitionRule",o,arguments)},getDelay:function(t){var e=this,n=-1;return"function"==typeof e.mixer.config.animation.staggerSequence&&(t=e.mixer.config.animation.staggerSequence.call(e,t,e.state)),n=e.mixer.staggerDuration?t*e.mixer.staggerDuration:0,e.callFilters("delayGetDelay",n,arguments)},applyTransition:function(t){var n=this,a=t.join(", ");n.callActions("beforeApplyTransition",arguments),n.dom.el.style[e.features.transitionProp]=a,n.callActions("afterApplyTransition",arguments)},handleTransitionEnd:function(t){var e=this,n=t.propertyName,a=e.mixer.config.animation.animateResizeTargets;e.callActions("beforeHandleTransitionEnd",arguments),e.isBound&&t.target.matches(e.mixer.config.selectors.target)&&(n.indexOf("transform")>-1||n.indexOf("opacity")>-1||a&&n.indexOf("height")>-1||a&&n.indexOf("width")>-1||a&&n.indexOf("margin")>-1)&&(e.callback.call(e,e.operation),e.isBound=!1,e.callback=null,e.operation=null),e.callActions("afterHandleTransitionEnd",arguments)},eventBus:function(t){var e=this;switch(e.callActions("beforeEventBus",arguments),t.type){case"webkitTransitionEnd":case"transitionend":e.handleTransitionEnd(t)}e.callActions("afterEventBus",arguments)},unbindEvents:function(){var t=this;t.callActions("beforeUnbindEvents",arguments),n.off(t.dom.el,"webkitTransitionEnd",t.handler),n.off(t.dom.el,"transitionend",t.handler),t.callActions("afterUnbindEvents",arguments)},bindEvents:function(){var t=this,a="";t.callActions("beforeBindEvents",arguments),a="webkit"===e.features.transitionPrefix?"webkitTransitionEnd":"transitionend",t.handler=function(e){return t.eventBus(e)},n.on(t.dom.el,a,t.handler),t.callActions("afterBindEvents",arguments)},getPosData:function(n){var a=this,i={},o=null,r=new e.StyleData;return a.callActions("beforeGetPosData",arguments),r.x=a.dom.el.offsetLeft,r.y=a.dom.el.offsetTop,(a.mixer.config.animation.animateResizeTargets||n)&&(o=a.dom.el.getBoundingClientRect(),r.top=o.top,r.right=o.right,r.bottom=o.bottom,r.left=o.left,r.width=o.width,r.height=o.height),a.mixer.config.animation.animateResizeTargets&&(i=t.getComputedStyle(a.dom.el),r.marginBottom=parseFloat(i.marginBottom),r.marginRight=parseFloat(i.marginRight)),a.callFilters("posDataGetPosData",r,arguments)},cleanUp:function(){var t=this;t.callActions("beforeCleanUp",arguments),t.dom.el.style[e.features.transformProp]="",t.dom.el.style[e.features.transitionProp]="",t.dom.el.style.opacity="",t.mixer.config.animation.animateResizeTargets&&(t.dom.el.style.width="",t.dom.el.style.height="",t.dom.el.style.marginRight="",t.dom.el.style.marginBottom=""),t.callActions("afterCleanUp",arguments)}}),e.Collection=function(t){var e=null,a=-1;for(this.callActions("beforeConstruct"),a=0;e=t[a];a++)this[a]=e;this.length=t.length,this.callActions("afterConstruct"),n.freeze(this)},e.BaseStatic.call(e.Collection),e.Collection.prototype=Object.create(e.Base.prototype),n.extend(e.Collection.prototype,{constructor:e.Collection,mixitup:function(t){var a=this,i=null,o=Array.prototype.slice.call(arguments),r=[],s=-1;for(this.callActions("beforeMixitup"),o.shift(),s=0;i=a[s];s++)r.push(i[t].apply(i,o));return a.callFilters("promiseMixitup",n.all(r,e.libraries),arguments)}}),e.Operation=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.id="",this.args=[],this.command=null,this.showPosData=[],this.toHidePosData=[],this.startState=null,this.newState=null,this.docState=null,this.willSort=!1,this.willChangeLayout=!1,this.hasEffect=!1,this.hasFailed=!1,this.triggerElement=null,this.show=[],this.hide=[],this.matching=[],this.toShow=[],this.toHide=[],this.toMove=[],this.toRemove=[],this.startOrder=[],this.newOrder=[],this.startSort=null,this.newSort=null,this.startFilter=null,this.newFilter=null,this.startDataset=null,this.newDataset=null,this.viewportDeltaX=0,this.viewportDeltaY=0,this.startX=0,this.startY=0,this.startHeight=0,this.startWidth=0,this.newX=0,this.newY=0,this.newHeight=0,this.newWidth=0,this.startContainerClassName="",this.startDisplay="",this.newContainerClassName="",this.newDisplay="",this.callActions("afterConstruct"),n.seal(this)},e.BaseStatic.call(e.Operation),e.Operation.prototype=Object.create(e.Base.prototype),e.Operation.prototype.constructor=e.Operation,e.State=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.id="",this.activeFilter=null,this.activeSort=null,this.activeContainerClassName="",this.container=null,this.targets=[],this.hide=[],this.show=[],this.matching=[],this.totalTargets=-1,this.totalShow=-1,this.totalHide=-1,this.totalMatching=-1,this.hasFailed=!1,this.triggerElement=null,this.activeDataset=null,this.callActions("afterConstruct"),n.seal(this)},e.BaseStatic.call(e.State),e.State.prototype=Object.create(e.Base.prototype),e.State.prototype.constructor=e.State,e.UserInstruction=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.command={},this.animate=!1,this.callback=null,this.callActions("afterConstruct"),n.seal(this)},e.BaseStatic.call(e.UserInstruction),e.UserInstruction.prototype=Object.create(e.Base.prototype),e.UserInstruction.prototype.constructor=e.UserInstruction,e.Messages=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.ERROR_FACTORY_INVALID_CONTAINER="[MixItUp] An invalid selector or element reference was passed to the mixitup factory function",this.ERROR_FACTORY_CONTAINER_NOT_FOUND="[MixItUp] The provided selector yielded no container element",this.ERROR_CONFIG_INVALID_ANIMATION_EFFECTS="[MixItUp] Invalid value for `animation.effects`",this.ERROR_CONFIG_INVALID_CONTROLS_SCOPE="[MixItUp] Invalid value for `controls.scope`",this.ERROR_CONFIG_INVALID_PROPERTY='[MixitUp] Invalid configuration object property "${erroneous}"${suggestion}',this.ERROR_CONFIG_INVALID_PROPERTY_SUGGESTION='. Did you mean "${probableMatch}"?',this.ERROR_CONFIG_DATA_UID_KEY_NOT_SET="[MixItUp] To use the dataset API, a UID key must be specified using `data.uidKey`",this.ERROR_DATASET_INVALID_UID_KEY='[MixItUp] The specified UID key "${uidKey}" is not present on one or more dataset items',this.ERROR_DATASET_DUPLICATE_UID='[MixItUp] The UID "${uid}" was found on two or more dataset items. UIDs must be unique.',this.ERROR_INSERT_INVALID_ARGUMENTS="[MixItUp] Please provider either an index or a sibling and position to insert, not both",this.ERROR_INSERT_PREEXISTING_ELEMENT="[MixItUp] An element to be inserted already exists in the container",this.ERROR_FILTER_INVALID_ARGUMENTS="[MixItUp] Please provide either a selector or collection `.filter()`, not both",this.ERROR_DATASET_NOT_SET="[MixItUp] To use the dataset API with pre-rendered targets, a starting dataset must be set using `load.dataset`",this.ERROR_DATASET_PRERENDERED_MISMATCH="[MixItUp] `load.dataset` does not match pre-rendered targets",this.ERROR_DATASET_RENDERER_NOT_SET="[MixItUp] To insert an element via the dataset API, a target renderer function must be provided to `render.target`",this.ERROR_SORT_NON_EXISTENT_ELEMENT="[MixItUp] An element to be sorted does not already exist in the container",this.WARNING_FACTORY_PREEXISTING_INSTANCE="[MixItUp] WARNING: This element already has an active MixItUp instance. The provided configuration object will be ignored. If you wish to perform additional methods on this instance, please create a reference.",this.WARNING_INSERT_NO_ELEMENTS="[MixItUp] WARNING: No valid elements were passed to `.insert()`",this.WARNING_REMOVE_NO_ELEMENTS="[MixItUp] WARNING: No valid elements were passed to `.remove()`",this.WARNING_MULTIMIX_INSTANCE_QUEUE_FULL="[MixItUp] WARNING: An operation was requested but the MixItUp instance was busy. The operation was rejected because the queue is full or queuing is disabled.",this.WARNING_GET_OPERATION_INSTANCE_BUSY="[MixItUp] WARNING: Operations can be be created while the MixItUp instance is busy.",this.WARNING_NO_PROMISE_IMPLEMENTATION="[MixItUp] WARNING: No Promise implementations could be found. If you wish to use promises with MixItUp please install an ES6 Promise polyfill.",this.WARNING_INCONSISTENT_SORTING_ATTRIBUTES='[MixItUp] WARNING: The requested sorting data attribute "${attribute}" was not present on one or more target elements which may product unexpected sort output',this.callActions("afterConstruct"),this.compileTemplates(),n.seal(this)},e.BaseStatic.call(e.Messages),e.Messages.prototype=Object.create(e.Base.prototype),e.Messages.prototype.constructor=e.Messages,e.Messages.prototype.compileTemplates=function(){var t="",e="";for(t in this)"string"==typeof(e=this[t])&&(this[n.camelCase(t)]=n.template(e))},e.messages=new e.Messages,e.Facade=function(t){e.Base.call(this),this.callActions("beforeConstruct",arguments),this.configure=t.configure.bind(t),this.show=t.show.bind(t),this.hide=t.hide.bind(t),this.filter=t.filter.bind(t),this.toggleOn=t.toggleOn.bind(t),this.toggleOff=t.toggleOff.bind(t),this.sort=t.sort.bind(t),this.changeLayout=t.changeLayout.bind(t),this.multimix=t.multimix.bind(t),this.dataset=t.dataset.bind(t),this.tween=t.tween.bind(t),this.insert=t.insert.bind(t),this.insertBefore=t.insertBefore.bind(t),this.insertAfter=t.insertAfter.bind(t),this.prepend=t.prepend.bind(t),this.append=t.append.bind(t),this.remove=t.remove.bind(t),this.destroy=t.destroy.bind(t),this.forceRefresh=t.forceRefresh.bind(t),this.forceRender=t.forceRender.bind(t),this.isMixing=t.isMixing.bind(t),this.getOperation=t.getOperation.bind(t),this.getConfig=t.getConfig.bind(t),this.getState=t.getState.bind(t),this.callActions("afterConstruct",arguments),n.freeze(this),n.seal(this)},e.BaseStatic.call(e.Facade),e.Facade.prototype=Object.create(e.Base.prototype),e.Facade.prototype.constructor=e.Facade,"object"==typeof exports&&"object"==typeof module?module.exports=e:"function"==typeof define&&define.amd?define(function(){return e}):"undefined"!=typeof t.mixitup&&"function"==typeof t.mixitup||(t.mixitup=e),e.BaseStatic.call(e.constructor),e.NAME="mixitup",e.CORE_VERSION="3.3.1"}(window); -------------------------------------------------------------------------------- /assets/js/scrollreveal.min.js: -------------------------------------------------------------------------------- 1 | /*! @license ScrollReveal v4.0.9 2 | 3 | Copyright 2021 Fisssion LLC. 4 | 5 | Licensed under the GNU General Public License 3.0 for 6 | compatible open source projects and non-commercial use. 7 | 8 | For commercial sites, themes, projects, and applications, 9 | keep your source code private/proprietary by purchasing 10 | a commercial license from https://scrollrevealjs.org/ 11 | */ 12 | var ScrollReveal = (function () { 13 | "use strict"; 14 | var r = { 15 | delay: 0, 16 | distance: "0", 17 | duration: 600, 18 | easing: "cubic-bezier(0.5, 0, 0, 1)", 19 | interval: 0, 20 | opacity: 0, 21 | origin: "bottom", 22 | rotate: { x: 0, y: 0, z: 0 }, 23 | scale: 1, 24 | cleanup: !1, 25 | container: document.documentElement, 26 | desktop: !0, 27 | mobile: !0, 28 | reset: !1, 29 | useDelay: "always", 30 | viewFactor: 0, 31 | viewOffset: { top: 0, right: 0, bottom: 0, left: 0 }, 32 | afterReset: function () {}, 33 | afterReveal: function () {}, 34 | beforeReset: function () {}, 35 | beforeReveal: function () {}, 36 | }; 37 | var n = { 38 | success: function () { 39 | document.documentElement.classList.add("sr"), 40 | document.body 41 | ? (document.body.style.height = "100%") 42 | : document.addEventListener("DOMContentLoaded", function () { 43 | document.body.style.height = "100%"; 44 | }); 45 | }, 46 | failure: function () { 47 | return ( 48 | document.documentElement.classList.remove("sr"), 49 | { 50 | clean: function () {}, 51 | destroy: function () {}, 52 | reveal: function () {}, 53 | sync: function () {}, 54 | get noop() { 55 | return !0; 56 | }, 57 | } 58 | ); 59 | }, 60 | }; 61 | function o(e) { 62 | return "object" == typeof window.Node 63 | ? e instanceof window.Node 64 | : null !== e && 65 | "object" == typeof e && 66 | "number" == typeof e.nodeType && 67 | "string" == typeof e.nodeName; 68 | } 69 | function u(e, t) { 70 | if ((void 0 === t && (t = document), e instanceof Array)) 71 | return e.filter(o); 72 | if (o(e)) return [e]; 73 | if ( 74 | ((n = e), 75 | (i = Object.prototype.toString.call(n)), 76 | "object" == typeof window.NodeList 77 | ? n instanceof window.NodeList 78 | : null !== n && 79 | "object" == typeof n && 80 | "number" == typeof n.length && 81 | /^\[object (HTMLCollection|NodeList|Object)\]$/.test(i) && 82 | (0 === n.length || o(n[0]))) 83 | ) 84 | return Array.prototype.slice.call(e); 85 | var n, i; 86 | if ("string" == typeof e) 87 | try { 88 | var r = t.querySelectorAll(e); 89 | return Array.prototype.slice.call(r); 90 | } catch (e) { 91 | return []; 92 | } 93 | return []; 94 | } 95 | function s(e) { 96 | return ( 97 | null !== e && 98 | e instanceof Object && 99 | (e.constructor === Object || 100 | "[object Object]" === Object.prototype.toString.call(e)) 101 | ); 102 | } 103 | function f(n, i) { 104 | if (s(n)) 105 | return Object.keys(n).forEach(function (e) { 106 | return i(n[e], e, n); 107 | }); 108 | if (n instanceof Array) 109 | return n.forEach(function (e, t) { 110 | return i(e, t, n); 111 | }); 112 | throw new TypeError("Expected either an array or object literal."); 113 | } 114 | function h(e) { 115 | for (var t = [], n = arguments.length - 1; 0 < n--; ) 116 | t[n] = arguments[n + 1]; 117 | if (this.constructor.debug && console) { 118 | var i = "%cScrollReveal: " + e; 119 | t.forEach(function (e) { 120 | return (i += "\n — " + e); 121 | }), 122 | console.log(i, "color: #ea654b;"); 123 | } 124 | } 125 | function t() { 126 | var n = this, 127 | i = { active: [], stale: [] }, 128 | t = { active: [], stale: [] }, 129 | r = { active: [], stale: [] }; 130 | try { 131 | f(u("[data-sr-id]"), function (e) { 132 | var t = parseInt(e.getAttribute("data-sr-id")); 133 | i.active.push(t); 134 | }); 135 | } catch (e) { 136 | throw e; 137 | } 138 | f(this.store.elements, function (e) { 139 | -1 === i.active.indexOf(e.id) && i.stale.push(e.id); 140 | }), 141 | f(i.stale, function (e) { 142 | return delete n.store.elements[e]; 143 | }), 144 | f(this.store.elements, function (e) { 145 | -1 === r.active.indexOf(e.containerId) && r.active.push(e.containerId), 146 | e.hasOwnProperty("sequence") && 147 | -1 === t.active.indexOf(e.sequence.id) && 148 | t.active.push(e.sequence.id); 149 | }), 150 | f(this.store.containers, function (e) { 151 | -1 === r.active.indexOf(e.id) && r.stale.push(e.id); 152 | }), 153 | f(r.stale, function (e) { 154 | var t = n.store.containers[e].node; 155 | t.removeEventListener("scroll", n.delegate), 156 | t.removeEventListener("resize", n.delegate), 157 | delete n.store.containers[e]; 158 | }), 159 | f(this.store.sequences, function (e) { 160 | -1 === t.active.indexOf(e.id) && t.stale.push(e.id); 161 | }), 162 | f(t.stale, function (e) { 163 | return delete n.store.sequences[e]; 164 | }); 165 | } 166 | function N(e) { 167 | if (e.constructor !== Array) throw new TypeError("Expected array."); 168 | if (16 === e.length) return e; 169 | if (6 !== e.length) 170 | throw new RangeError("Expected array with either 6 or 16 values."); 171 | var t = z(); 172 | return ( 173 | (t[0] = e[0]), 174 | (t[1] = e[1]), 175 | (t[4] = e[2]), 176 | (t[5] = e[3]), 177 | (t[12] = e[4]), 178 | (t[13] = e[5]), 179 | t 180 | ); 181 | } 182 | function z() { 183 | for (var e = [], t = 0; t < 16; t++) t % 5 == 0 ? e.push(1) : e.push(0); 184 | return e; 185 | } 186 | function F(e, t) { 187 | for (var n = N(e), i = N(t), r = [], o = 0; o < 4; o++) 188 | for (var s = [n[o], n[o + 4], n[o + 8], n[o + 12]], a = 0; a < 4; a++) { 189 | var c = 4 * a, 190 | l = [i[c], i[c + 1], i[c + 2], i[c + 3]], 191 | d = s[0] * l[0] + s[1] * l[1] + s[2] * l[2] + s[3] * l[3]; 192 | r[o + c] = d; 193 | } 194 | return r; 195 | } 196 | function D(e, t) { 197 | var n = z(); 198 | return (n[0] = e), (n[5] = "number" == typeof t ? t : e), n; 199 | } 200 | var S = (function () { 201 | var n = {}, 202 | i = document.documentElement.style; 203 | function e(e, t) { 204 | if ((void 0 === t && (t = i), e && "string" == typeof e)) { 205 | if (n[e]) return n[e]; 206 | if ("string" == typeof t[e]) return (n[e] = e); 207 | if ("string" == typeof t["-webkit-" + e]) 208 | return (n[e] = "-webkit-" + e); 209 | throw new RangeError('Unable to find "' + e + '" style property.'); 210 | } 211 | throw new TypeError("Expected a string."); 212 | } 213 | return ( 214 | (e.clearCache = function () { 215 | return (n = {}); 216 | }), 217 | e 218 | ); 219 | })(); 220 | function p(e) { 221 | var t = window.getComputedStyle(e.node), 222 | n = t.position, 223 | i = e.config, 224 | r = {}, 225 | o = 226 | (e.node.getAttribute("style") || "").match(/[\w-]+\s*:\s*[^;]+\s*/gi) || 227 | []; 228 | (r.computed = o 229 | ? o 230 | .map(function (e) { 231 | return e.trim(); 232 | }) 233 | .join("; ") + ";" 234 | : ""), 235 | (r.generated = o.some(function (e) { 236 | return e.match(/visibility\s?:\s?visible/i); 237 | }) 238 | ? r.computed 239 | : o 240 | .concat(["visibility: visible"]) 241 | .map(function (e) { 242 | return e.trim(); 243 | }) 244 | .join("; ") + ";"); 245 | var s, 246 | a, 247 | c, 248 | l, 249 | d, 250 | u, 251 | f, 252 | h, 253 | p, 254 | m, 255 | y, 256 | v, 257 | g, 258 | b = parseFloat(t.opacity), 259 | w = isNaN(parseFloat(i.opacity)) 260 | ? parseFloat(t.opacity) 261 | : parseFloat(i.opacity), 262 | E = { 263 | computed: b !== w ? "opacity: " + b + ";" : "", 264 | generated: b !== w ? "opacity: " + w + ";" : "", 265 | }, 266 | j = []; 267 | if (parseFloat(i.distance)) { 268 | var T = "top" === i.origin || "bottom" === i.origin ? "Y" : "X", 269 | k = i.distance; 270 | ("top" !== i.origin && "left" !== i.origin) || 271 | (k = /^-/.test(k) ? k.substr(1) : "-" + k); 272 | var O = k.match(/(^-?\d+\.?\d?)|(em$|px$|%$)/g), 273 | x = O[0]; 274 | switch (O[1]) { 275 | case "em": 276 | k = parseInt(t.fontSize) * x; 277 | break; 278 | case "px": 279 | k = x; 280 | break; 281 | case "%": 282 | k = 283 | "Y" === T 284 | ? (e.node.getBoundingClientRect().height * x) / 100 285 | : (e.node.getBoundingClientRect().width * x) / 100; 286 | break; 287 | default: 288 | throw new RangeError("Unrecognized or missing distance unit."); 289 | } 290 | "Y" === T 291 | ? j.push(((c = k), ((l = z())[13] = c), l)) 292 | : j.push(((s = k), ((a = z())[12] = s), a)); 293 | } 294 | i.rotate.x && 295 | j.push( 296 | ((d = i.rotate.x), 297 | (u = (Math.PI / 180) * d), 298 | ((f = z())[5] = f[10] = Math.cos(u)), 299 | (f[6] = f[9] = Math.sin(u)), 300 | (f[9] *= -1), 301 | f) 302 | ), 303 | i.rotate.y && 304 | j.push( 305 | ((h = i.rotate.y), 306 | (p = (Math.PI / 180) * h), 307 | ((m = z())[0] = m[10] = Math.cos(p)), 308 | (m[2] = m[8] = Math.sin(p)), 309 | (m[2] *= -1), 310 | m) 311 | ), 312 | i.rotate.z && 313 | j.push( 314 | ((y = i.rotate.z), 315 | (v = (Math.PI / 180) * y), 316 | ((g = z())[0] = g[5] = Math.cos(v)), 317 | (g[1] = g[4] = Math.sin(v)), 318 | (g[4] *= -1), 319 | g) 320 | ), 321 | 1 !== i.scale && (0 === i.scale ? j.push(D(2e-4)) : j.push(D(i.scale))); 322 | var R = {}; 323 | if (j.length) { 324 | (R.property = S("transform")), 325 | (R.computed = { 326 | raw: t[R.property], 327 | matrix: (function (e) { 328 | if ("string" == typeof e) { 329 | var t = e.match(/matrix(3d)?\(([^)]+)\)/); 330 | if (t) return N(t[2].split(", ").map(parseFloat)); 331 | } 332 | return z(); 333 | })(t[R.property]), 334 | }), 335 | j.unshift(R.computed.matrix); 336 | var q = j.reduce(F); 337 | R.generated = { 338 | initial: R.property + ": matrix3d(" + q.join(", ") + ");", 339 | final: R.property + ": matrix3d(" + R.computed.matrix.join(", ") + ");", 340 | }; 341 | } else R.generated = { initial: "", final: "" }; 342 | var A = {}; 343 | if (E.generated || R.generated.initial) { 344 | (A.property = S("transition")), 345 | (A.computed = t[A.property]), 346 | (A.fragments = []); 347 | var P = i.delay, 348 | L = i.duration, 349 | M = i.easing; 350 | E.generated && 351 | A.fragments.push({ 352 | delayed: "opacity " + L / 1e3 + "s " + M + " " + P / 1e3 + "s", 353 | instant: "opacity " + L / 1e3 + "s " + M + " 0s", 354 | }), 355 | R.generated.initial && 356 | A.fragments.push({ 357 | delayed: 358 | R.property + " " + L / 1e3 + "s " + M + " " + P / 1e3 + "s", 359 | instant: R.property + " " + L / 1e3 + "s " + M + " 0s", 360 | }), 361 | A.computed && 362 | !A.computed.match(/all 0s|none 0s/) && 363 | A.fragments.unshift({ delayed: A.computed, instant: A.computed }); 364 | var I = A.fragments.reduce( 365 | function (e, t, n) { 366 | return ( 367 | (e.delayed += 0 === n ? t.delayed : ", " + t.delayed), 368 | (e.instant += 0 === n ? t.instant : ", " + t.instant), 369 | e 370 | ); 371 | }, 372 | { delayed: "", instant: "" } 373 | ); 374 | A.generated = { 375 | delayed: A.property + ": " + I.delayed + ";", 376 | instant: A.property + ": " + I.instant + ";", 377 | }; 378 | } else A.generated = { delayed: "", instant: "" }; 379 | return { inline: r, opacity: E, position: n, transform: R, transition: A }; 380 | } 381 | function m(r, e) { 382 | e.split(";").forEach(function (e) { 383 | var t = e.split(":"), 384 | n = t[0], 385 | i = t.slice(1); 386 | n && i && (r.style[n.trim()] = i.join(":")); 387 | }); 388 | } 389 | function y(e) { 390 | var i, 391 | r = this; 392 | try { 393 | f(u(e), function (e) { 394 | var t = e.getAttribute("data-sr-id"); 395 | if (null !== t) { 396 | i = !0; 397 | var n = r.store.elements[t]; 398 | n.callbackTimer && window.clearTimeout(n.callbackTimer.clock), 399 | m(n.node, n.styles.inline.generated), 400 | e.removeAttribute("data-sr-id"), 401 | delete r.store.elements[t]; 402 | } 403 | }); 404 | } catch (e) { 405 | return h.call(this, "Clean failed.", e.message); 406 | } 407 | if (i) 408 | try { 409 | t.call(this); 410 | } catch (e) { 411 | return h.call(this, "Clean failed.", e.message); 412 | } 413 | } 414 | function v(n) { 415 | for (var e = [], t = arguments.length - 1; 0 < t--; ) 416 | e[t] = arguments[t + 1]; 417 | if (s(n)) 418 | return ( 419 | f(e, function (e) { 420 | f(e, function (e, t) { 421 | s(e) ? ((n[t] && s(n[t])) || (n[t] = {}), v(n[t], e)) : (n[t] = e); 422 | }); 423 | }), 424 | n 425 | ); 426 | throw new TypeError("Target must be an object literal."); 427 | } 428 | function g(e) { 429 | return ( 430 | void 0 === e && (e = navigator.userAgent), 431 | /Android|iPhone|iPad|iPod/i.test(e) 432 | ); 433 | } 434 | var e, 435 | b = 436 | ((e = 0), 437 | function () { 438 | return e++; 439 | }); 440 | function w() { 441 | var n = this; 442 | t.call(this), 443 | f(this.store.elements, function (e) { 444 | var t = [e.styles.inline.generated]; 445 | e.visible 446 | ? (t.push(e.styles.opacity.computed), 447 | t.push(e.styles.transform.generated.final), 448 | (e.revealed = !0)) 449 | : (t.push(e.styles.opacity.generated), 450 | t.push(e.styles.transform.generated.initial), 451 | (e.revealed = !1)), 452 | m( 453 | e.node, 454 | t 455 | .filter(function (e) { 456 | return "" !== e; 457 | }) 458 | .join(" ") 459 | ); 460 | }), 461 | f(this.store.containers, function (e) { 462 | var t = e.node === document.documentElement ? window : e.node; 463 | t.addEventListener("scroll", n.delegate), 464 | t.addEventListener("resize", n.delegate); 465 | }), 466 | this.delegate(), 467 | (this.initTimeout = null); 468 | } 469 | function c(e, t) { 470 | void 0 === t && (t = {}); 471 | var n = t.pristine || this.pristine, 472 | i = 473 | "always" === e.config.useDelay || 474 | ("onload" === e.config.useDelay && n) || 475 | ("once" === e.config.useDelay && !e.seen), 476 | r = e.visible && !e.revealed, 477 | o = !e.visible && e.revealed && e.config.reset; 478 | return t.reveal || r 479 | ? function (e, t) { 480 | var n = [ 481 | e.styles.inline.generated, 482 | e.styles.opacity.computed, 483 | e.styles.transform.generated.final, 484 | ]; 485 | t 486 | ? n.push(e.styles.transition.generated.delayed) 487 | : n.push(e.styles.transition.generated.instant); 488 | (e.revealed = e.seen = !0), 489 | m( 490 | e.node, 491 | n 492 | .filter(function (e) { 493 | return "" !== e; 494 | }) 495 | .join(" ") 496 | ), 497 | a.call(this, e, t); 498 | }.call(this, e, i) 499 | : t.reset || o 500 | ? function (e) { 501 | var t = [ 502 | e.styles.inline.generated, 503 | e.styles.opacity.generated, 504 | e.styles.transform.generated.initial, 505 | e.styles.transition.generated.instant, 506 | ]; 507 | (e.revealed = !1), 508 | m( 509 | e.node, 510 | t 511 | .filter(function (e) { 512 | return "" !== e; 513 | }) 514 | .join(" ") 515 | ), 516 | a.call(this, e); 517 | }.call(this, e) 518 | : void 0; 519 | } 520 | function a(e, t) { 521 | var n = this, 522 | i = t ? e.config.duration + e.config.delay : e.config.duration, 523 | r = e.revealed ? e.config.beforeReveal : e.config.beforeReset, 524 | o = e.revealed ? e.config.afterReveal : e.config.afterReset, 525 | s = 0; 526 | e.callbackTimer && 527 | ((s = Date.now() - e.callbackTimer.start), 528 | window.clearTimeout(e.callbackTimer.clock)), 529 | r(e.node), 530 | (e.callbackTimer = { 531 | start: Date.now(), 532 | clock: window.setTimeout(function () { 533 | o(e.node), 534 | (e.callbackTimer = null), 535 | e.revealed && 536 | !e.config.reset && 537 | e.config.cleanup && 538 | y.call(n, e.node); 539 | }, i - s), 540 | }); 541 | } 542 | function l(e, t) { 543 | if ( 544 | (void 0 === t && (t = this.pristine), 545 | !e.visible && e.revealed && e.config.reset) 546 | ) 547 | return c.call(this, e, { reset: !0 }); 548 | var n = this.store.sequences[e.sequence.id], 549 | i = e.sequence.index; 550 | if (n) { 551 | var r = new d(n, "visible", this.store), 552 | o = new d(n, "revealed", this.store); 553 | if (((n.models = { visible: r, revealed: o }), !o.body.length)) { 554 | var s = n.members[r.body[0]], 555 | a = this.store.elements[s]; 556 | if (a) 557 | return ( 558 | j.call(this, n, r.body[0], -1, t), 559 | j.call(this, n, r.body[0], 1, t), 560 | c.call(this, a, { reveal: !0, pristine: t }) 561 | ); 562 | } 563 | if ( 564 | !n.blocked.head && 565 | i === [].concat(o.head).pop() && 566 | i >= [].concat(r.body).shift() 567 | ) 568 | return ( 569 | j.call(this, n, i, -1, t), 570 | c.call(this, e, { reveal: !0, pristine: t }) 571 | ); 572 | if ( 573 | !n.blocked.foot && 574 | i === [].concat(o.foot).shift() && 575 | i <= [].concat(r.body).pop() 576 | ) 577 | return ( 578 | j.call(this, n, i, 1, t), c.call(this, e, { reveal: !0, pristine: t }) 579 | ); 580 | } 581 | } 582 | function E(e) { 583 | var t = Math.abs(e); 584 | if (isNaN(t)) throw new RangeError("Invalid sequence interval."); 585 | (this.id = b()), 586 | (this.interval = Math.max(t, 16)), 587 | (this.members = []), 588 | (this.models = {}), 589 | (this.blocked = { head: !1, foot: !1 }); 590 | } 591 | function d(e, i, r) { 592 | var o = this; 593 | (this.head = []), 594 | (this.body = []), 595 | (this.foot = []), 596 | f(e.members, function (e, t) { 597 | var n = r.elements[e]; 598 | n && n[i] && o.body.push(t); 599 | }), 600 | this.body.length && 601 | f(e.members, function (e, t) { 602 | var n = r.elements[e]; 603 | n && !n[i] && (t < o.body[0] ? o.head.push(t) : o.foot.push(t)); 604 | }); 605 | } 606 | function j(e, t, n, i) { 607 | var r = this, 608 | o = ["head", null, "foot"][1 + n], 609 | s = e.members[t + n], 610 | a = this.store.elements[s]; 611 | (e.blocked[o] = !0), 612 | setTimeout(function () { 613 | (e.blocked[o] = !1), a && l.call(r, a, i); 614 | }, e.interval); 615 | } 616 | function i(e, a, t) { 617 | var c = this; 618 | void 0 === a && (a = {}), void 0 === t && (t = !1); 619 | var l, 620 | d = [], 621 | n = a.interval || r.interval; 622 | try { 623 | n && (l = new E(n)); 624 | var i = u(e); 625 | if (!i.length) throw new Error("Invalid reveal target."); 626 | f( 627 | i.reduce(function (e, t) { 628 | var n = {}, 629 | i = t.getAttribute("data-sr-id"); 630 | i 631 | ? (v(n, c.store.elements[i]), m(n.node, n.styles.inline.computed)) 632 | : ((n.id = b()), 633 | (n.node = t), 634 | (n.seen = !1), 635 | (n.revealed = !1), 636 | (n.visible = !1)); 637 | var r = v({}, n.config || c.defaults, a); 638 | if ((!r.mobile && g()) || (!r.desktop && !g())) 639 | return i && y.call(c, n), e; 640 | var o, 641 | s = u(r.container)[0]; 642 | if (!s) throw new Error("Invalid container."); 643 | return ( 644 | s.contains(t) && 645 | (null === 646 | (o = (function (t) { 647 | var e = [], 648 | n = arguments.length - 1; 649 | for (; 0 < n--; ) e[n] = arguments[n + 1]; 650 | var i = null; 651 | return ( 652 | f(e, function (e) { 653 | f(e, function (e) { 654 | null === i && e.node === t && (i = e.id); 655 | }); 656 | }), 657 | i 658 | ); 659 | })(s, d, c.store.containers)) && 660 | ((o = b()), d.push({ id: o, node: s })), 661 | (n.config = r), 662 | (n.containerId = o), 663 | (n.styles = p(n)), 664 | l && 665 | ((n.sequence = { id: l.id, index: l.members.length }), 666 | l.members.push(n.id)), 667 | e.push(n)), 668 | e 669 | ); 670 | }, []), 671 | function (e) { 672 | (c.store.elements[e.id] = e).node.setAttribute("data-sr-id", e.id); 673 | } 674 | ); 675 | } catch (e) { 676 | return h.call(this, "Reveal failed.", e.message); 677 | } 678 | f(d, function (e) { 679 | c.store.containers[e.id] = { id: e.id, node: e.node }; 680 | }), 681 | l && (this.store.sequences[l.id] = l), 682 | !0 !== t && 683 | (this.store.history.push({ target: e, options: a }), 684 | this.initTimeout && window.clearTimeout(this.initTimeout), 685 | (this.initTimeout = window.setTimeout(w.bind(this), 0))); 686 | } 687 | var T, 688 | k = 689 | Math.sign || 690 | function (e) { 691 | return (0 < e) - (e < 0) || +e; 692 | }, 693 | O = 694 | ((T = Date.now()), 695 | function (e) { 696 | var t = Date.now(); 697 | 16 < t - T 698 | ? e((T = t)) 699 | : setTimeout(function () { 700 | return O(e); 701 | }, 0); 702 | }), 703 | x = 704 | window.requestAnimationFrame || 705 | window.webkitRequestAnimationFrame || 706 | window.mozRequestAnimationFrame || 707 | O; 708 | function R(e, t) { 709 | for ( 710 | var n = t ? e.node.clientHeight : e.node.offsetHeight, 711 | i = t ? e.node.clientWidth : e.node.offsetWidth, 712 | r = 0, 713 | o = 0, 714 | s = e.node; 715 | isNaN(s.offsetTop) || (r += s.offsetTop), 716 | isNaN(s.offsetLeft) || (o += s.offsetLeft), 717 | (s = s.offsetParent); 718 | 719 | ); 720 | return { 721 | bounds: { top: r, right: o + i, bottom: r + n, left: o }, 722 | height: n, 723 | width: i, 724 | }; 725 | } 726 | function q(e, t) { 727 | var i = this; 728 | void 0 === e && (e = { type: "init" }), 729 | void 0 === t && (t = this.store.elements), 730 | x(function () { 731 | var n = "init" === e.type || "resize" === e.type; 732 | f(i.store.containers, function (e) { 733 | n && (e.geometry = R.call(i, e, !0)); 734 | var t = function (e) { 735 | var t, n; 736 | return ( 737 | (n = 738 | e.node === document.documentElement 739 | ? ((t = window.pageYOffset), window.pageXOffset) 740 | : ((t = e.node.scrollTop), e.node.scrollLeft)), 741 | { top: t, left: n } 742 | ); 743 | }.call(i, e); 744 | e.scroll && 745 | (e.direction = { 746 | x: k(t.left - e.scroll.left), 747 | y: k(t.top - e.scroll.top), 748 | }), 749 | (e.scroll = t); 750 | }), 751 | f(t, function (e) { 752 | (n || void 0 === e.geometry) && (e.geometry = R.call(i, e)), 753 | (e.visible = function (e) { 754 | void 0 === e && (e = {}); 755 | var t = this.store.containers[e.containerId]; 756 | if (t) { 757 | var n = Math.max(0, Math.min(1, e.config.viewFactor)), 758 | i = e.config.viewOffset, 759 | r = e.geometry.bounds.top + e.geometry.height * n, 760 | o = e.geometry.bounds.right - e.geometry.width * n, 761 | s = e.geometry.bounds.bottom - e.geometry.height * n, 762 | a = e.geometry.bounds.left + e.geometry.width * n, 763 | c = t.geometry.bounds.top + t.scroll.top + i.top, 764 | l = t.geometry.bounds.right + t.scroll.left - i.right, 765 | d = t.geometry.bounds.bottom + t.scroll.top - i.bottom, 766 | u = t.geometry.bounds.left + t.scroll.left + i.left; 767 | return ( 768 | (r < d && u < o && c < s && a < l) || 769 | "fixed" === e.styles.position 770 | ); 771 | } 772 | }.call(i, e)); 773 | }), 774 | f(t, function (e) { 775 | e.sequence ? l.call(i, e) : c.call(i, e); 776 | }), 777 | (i.pristine = !1); 778 | }); 779 | } 780 | var A, 781 | P, 782 | L, 783 | M, 784 | I, 785 | C, 786 | W, 787 | Y, 788 | $ = "4.0.9"; 789 | function H(e) { 790 | var t; 791 | if ( 792 | (void 0 === e && (e = {}), 793 | void 0 === this || Object.getPrototypeOf(this) !== H.prototype) 794 | ) 795 | return new H(e); 796 | if (!H.isSupported()) 797 | return ( 798 | h.call(this, "Instantiation failed.", "This browser is not supported."), 799 | n.failure() 800 | ); 801 | try { 802 | t = v({}, C || r, e); 803 | } catch (e) { 804 | return h.call(this, "Invalid configuration.", e.message), n.failure(); 805 | } 806 | try { 807 | if (!u(t.container)[0]) throw new Error("Invalid container."); 808 | } catch (e) { 809 | return h.call(this, e.message), n.failure(); 810 | } 811 | return (!(C = t).mobile && g()) || (!C.desktop && !g()) 812 | ? (h.call( 813 | this, 814 | "This device is disabled.", 815 | "desktop: " + C.desktop, 816 | "mobile: " + C.mobile 817 | ), 818 | n.failure()) 819 | : (n.success(), 820 | (this.store = { 821 | containers: {}, 822 | elements: {}, 823 | history: [], 824 | sequences: {}, 825 | }), 826 | (this.pristine = !0), 827 | (A = A || q.bind(this)), 828 | (P = 829 | P || 830 | function () { 831 | var n = this; 832 | f(this.store.elements, function (e) { 833 | m(e.node, e.styles.inline.generated), 834 | e.node.removeAttribute("data-sr-id"); 835 | }), 836 | f(this.store.containers, function (e) { 837 | var t = e.node === document.documentElement ? window : e.node; 838 | t.removeEventListener("scroll", n.delegate), 839 | t.removeEventListener("resize", n.delegate); 840 | }), 841 | (this.store = { 842 | containers: {}, 843 | elements: {}, 844 | history: [], 845 | sequences: {}, 846 | }); 847 | }.bind(this)), 848 | (L = L || i.bind(this)), 849 | (M = M || y.bind(this)), 850 | (I = 851 | I || 852 | function () { 853 | var t = this; 854 | f(this.store.history, function (e) { 855 | i.call(t, e.target, e.options, !0); 856 | }), 857 | w.call(this); 858 | }.bind(this)), 859 | Object.defineProperty(this, "delegate", { 860 | get: function () { 861 | return A; 862 | }, 863 | }), 864 | Object.defineProperty(this, "destroy", { 865 | get: function () { 866 | return P; 867 | }, 868 | }), 869 | Object.defineProperty(this, "reveal", { 870 | get: function () { 871 | return L; 872 | }, 873 | }), 874 | Object.defineProperty(this, "clean", { 875 | get: function () { 876 | return M; 877 | }, 878 | }), 879 | Object.defineProperty(this, "sync", { 880 | get: function () { 881 | return I; 882 | }, 883 | }), 884 | Object.defineProperty(this, "defaults", { 885 | get: function () { 886 | return C; 887 | }, 888 | }), 889 | Object.defineProperty(this, "version", { 890 | get: function () { 891 | return $; 892 | }, 893 | }), 894 | Object.defineProperty(this, "noop", { 895 | get: function () { 896 | return !1; 897 | }, 898 | }), 899 | Y || (Y = this)); 900 | } 901 | return ( 902 | (H.isSupported = function () { 903 | return ( 904 | ("transform" in (t = document.documentElement.style) || 905 | "WebkitTransform" in t) && 906 | ("transition" in (e = document.documentElement.style) || 907 | "WebkitTransition" in e) 908 | ); 909 | var e, t; 910 | }), 911 | Object.defineProperty(H, "debug", { 912 | get: function () { 913 | return W || !1; 914 | }, 915 | set: function (e) { 916 | return (W = "boolean" == typeof e ? e : W); 917 | }, 918 | }), 919 | H(), 920 | H 921 | ); 922 | })(); 923 | -------------------------------------------------------------------------------- /assets/pdf/hailee-Cv.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/S44WN/hailee-portfolio-website/aef862a897ddb5185c4e3ab4f034c4f71f5744f2/assets/pdf/hailee-Cv.pdf -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | Hailee's Portfolio 29 | 30 | 31 | 32 | 33 | 76 | 77 | 78 |
79 | 80 |
81 |
82 |
83 | Hello, I'm 84 |

Haliee Keys

85 |

Frontend Developer

86 | 87 |
88 | 89 | Download CV 90 | 91 | 92 | About 93 |
94 |
95 | 96 |
97 | 98 |
99 | 100 | 111 | 112 | 113 | 114 | Scroll Down 115 | 116 |
117 |
118 | 119 | 120 |
121 | My Intro 122 |

About Me

123 | 124 |
125 | 126 | 127 |
128 |
129 |
130 | 131 |

Experience

132 | 8 Years Working 133 |
134 |
135 | 136 |

Completed

137 | 48+ Projects 138 |
139 |
140 | 141 |

Support

142 | Online 24/7 143 |
144 |
145 | 146 |

147 | Frontend Developer. I create web pages with UI / UX user interfaces, 148 | I have years of experience and many clients are happy with the woek i did. 149 |

150 | 151 | Contact Me 152 |
153 |
154 |
155 | 156 | 157 |
158 | My Abilities 159 |

My Experience

160 | 161 |
162 |
163 |

Frontend Development

164 | 165 |
166 |
167 |
168 | 169 | 170 |
171 |

HTML

172 | Advanced 173 |
174 |
175 | 176 |
177 | 178 | 179 |
180 |

CSS/SCSS

181 | Advanced 182 |
183 |
184 | 185 |
186 | 187 | 188 |
189 |

Javascript

190 | Advanced 191 |
192 |
193 | 194 |
195 |
196 |
197 | 198 | 199 |
200 |

Bootstrap

201 | Intermediate 202 |
203 |
204 | 205 |
206 | 207 | 208 |
209 |

Git

210 | Advanced 211 |
212 |
213 | 214 |
215 | 216 | 217 |
218 |

React

219 | Advanced 220 |
221 |
222 | 223 |
224 |
225 |
226 | 227 |
228 |

Backend Development

229 | 230 |
231 |
232 |
233 | 234 | 235 |
236 |

Node JS

237 | Advanced 238 |
239 |
240 | 241 |
242 | 243 | 244 |
245 |

Python

246 | Advanced 247 |
248 |
249 | 250 |
251 | 252 | 253 |
254 |

MySQL

255 | Advanced 256 |
257 |
258 | 259 |
260 |
261 |
262 | 263 | 264 |
265 |

PHP

266 | Intermediate 267 |
268 |
269 | 270 |
271 | 272 | 273 |
274 |

Firebase

275 | Advanced 276 |
277 |
278 | 279 |
280 | 281 | 282 |
283 |

Mongo DB

284 | Advanced 285 |
286 |
287 | 288 |
289 |
290 |
291 |
292 | 293 | 294 |
295 | My Services 296 |

What I Offer

297 | 298 |
299 |
300 |
301 |

Product
Designing

302 | 303 | 304 | See More 305 | 306 |
307 | 308 | 309 |
310 |
311 | 312 | 313 |

Product Designing

314 | 315 |

316 | I design and develop the consumer products with creative ability and 317 | hands-on approach which stisfies the customers' and markets' needs and trends. 318 |

319 | 320 |
    321 |
  • 322 | 323 |

    324 | I develop the user interfaces. 325 |

    326 |
  • 327 | 328 |
  • 329 | 330 |

    331 | Web Page design and development. 332 |

    333 |
  • 334 | 335 |
  • 336 | 337 |

    338 | I create the UX element interactions. 339 |

    340 |
  • 341 | 342 |
  • 343 | 344 |

    345 | I position your company brand. 346 |

    347 |
  • 348 | 349 |
  • 350 | 351 |

    352 | Create modern 3-D experiences. 353 |

    354 |
  • 355 |
356 |
357 |
358 |
359 | 360 |
361 |

UI/UX
Designing

362 | 363 | 364 | See More 365 | 366 | 367 |
368 |
369 | 370 | 371 |

UI/UX Designing

372 | 373 |

374 | I design and develop the consumer products with creative ability and 375 | hands-on approach which stisfies the customers' and markets' needs and trends. 376 |

377 | 378 |
    379 |
  • 380 | 381 |

    382 | I develop the user interfaces. 383 |

    384 |
  • 385 | 386 |
  • 387 | 388 |

    389 | Web Page design and development. 390 |

    391 |
  • 392 | 393 |
  • 394 | 395 |

    396 | I create the UX element interactions. 397 |

    398 |
  • 399 | 400 |
  • 401 | 402 |

    403 | I position your company brand. 404 |

    405 |
  • 406 | 407 |
  • 408 | 409 |

    410 | Create modern 3-D experiences. 411 |

    412 |
  • 413 |
414 |
415 |
416 |
417 | 418 |
419 |

Visual
Designing

420 | 421 | 422 | See More 423 | 424 | 425 |
426 |
427 | 428 | 429 |

Visual Designing

430 | 431 |

432 | I design and develop the consumer products with creative ability and 433 | hands-on approach which stisfies the customers' and markets' needs and trends. 434 |

435 | 436 |
    437 |
  • 438 | 439 |

    440 | I develop the user interfaces. 441 |

    442 |
  • 443 | 444 |
  • 445 | 446 |

    447 | Web Page design and development. 448 |

    449 |
  • 450 | 451 |
  • 452 | 453 |

    454 | I create the UX element interactions. 455 |

    456 |
  • 457 | 458 |
  • 459 | 460 |

    461 | I position your company brand. 462 |

    463 |
  • 464 | 465 |
  • 466 | 467 |

    468 | Create modern 3-D experiences. 469 |

    470 |
  • 471 |
472 |
473 |
474 |
475 |
476 |
477 | 478 | 479 |
480 | My Portfolio 481 |

Recent Works

482 | 483 |
484 | All 485 | Web 486 | Movil 487 | Design 488 |
489 | 490 |
491 |
492 | 493 | 494 |

Web Design

495 | 496 | 497 | Demo 498 | 499 |
500 | 501 |
502 | 503 | 504 |

App Movil

505 | 506 | 507 | Demo 508 | 509 |
510 | 511 |
512 | 513 | 514 |

Brand Design

515 | 516 | 517 | Demo 518 | 519 |
520 | 521 |
522 | 523 | 524 |

Web Design

525 | 526 | 527 | Demo 528 | 529 |
530 | 531 |
532 | 533 | 534 |

App Movil

535 | 536 | 537 | Demo 538 | 539 |
540 | 541 |
542 |
543 | 544 | 545 |
546 | My clients say 547 |

Testimonials

548 | 549 |
550 |
551 |
552 | 553 | 554 |

Jhon Doe

555 |

556 | A really good job, all aspects of the project were done well. 557 | Very creative and thoughtful. I was very impressed and would recommend this to anyone. 558 |

559 |
560 | 561 |
562 | 563 | 564 |

Ada Hill

565 |

566 | A really good job, all aspects of the project were done well. 567 | Very creative and thoughtful. I was very impressed and would recommend this to anyone. 568 |

569 |
570 | 571 |
572 | 573 | 574 |

Jessica Park

575 |

576 | A really good job, all aspects of the project were done well. 577 | Very creative and thoughtful. I was very impressed and would recommend this to anyone. 578 |

579 |
580 |
581 |
582 |
583 | 584 |
585 | 586 | 587 |
588 | Get in touch 589 |

Contact Me

590 | 591 |
592 |
593 |

Talk to me

594 | 595 |
596 |
597 | 598 |

Email

599 | user@gmail.com 600 | 601 | 602 | Write Me 603 | 604 |
605 | 606 |
607 | 608 |

Whatsapp

609 | 6969696969 610 | 611 | 613 | Write Me 614 | 615 |
616 | 617 |
618 | 619 |

Twitter

620 | usertw 621 | 622 | 623 | Write Me 624 | 625 |
626 |
627 |
628 | 629 |
630 |

Write Me your Message

631 | 632 |
633 |
634 | 635 | 636 |
637 | 638 |
639 | 640 | 641 |
642 | 643 |
644 | 645 | 647 |
648 | 649 | 650 | 653 |
654 | 655 |
656 | 657 |
658 |
659 | 660 | 661 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 725 | 726 | 727 | 728 | -------------------------------------------------------------------------------- /preview/hailee-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/S44WN/hailee-portfolio-website/aef862a897ddb5185c4e3ab4f034c4f71f5744f2/preview/hailee-dark.png -------------------------------------------------------------------------------- /preview/hailee-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/S44WN/hailee-portfolio-website/aef862a897ddb5185c4e3ab4f034c4f71f5744f2/preview/hailee-light.png --------------------------------------------------------------------------------