├── .gitattributes ├── README.md ├── package-lock.json ├── package.json ├── public ├── css │ ├── style-green.css │ ├── style-orange.css │ ├── style-purple.css │ ├── style-red.css │ ├── style-sky-blue.css │ └── style.css ├── index.html ├── js │ └── main.js ├── lib │ ├── animate │ │ ├── animate.css │ │ └── animate.min.css │ ├── bootstrap │ │ ├── css │ │ │ ├── bootstrap.css │ │ │ ├── bootstrap.min.css │ │ │ └── bootstrap.min.css.map │ │ └── js │ │ │ ├── bootstrap.js │ │ │ ├── bootstrap.min.js │ │ │ └── bootstrap.min.js.map │ ├── counterup │ │ ├── jquery.counterup.js │ │ ├── jquery.counterup.min.js │ │ └── jquery.waypoints.min.js │ ├── easing │ │ ├── easing.js │ │ └── easing.min.js │ ├── font-awesome │ │ ├── css │ │ │ ├── font-awesome.css │ │ │ └── font-awesome.min.css │ │ └── fonts │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ └── fontawesome-webfont.woff2 │ ├── ionicons │ │ ├── css │ │ │ ├── ionicons.css │ │ │ └── ionicons.min.css │ │ └── fonts │ │ │ ├── ionicons.eot │ │ │ ├── ionicons.svg │ │ │ ├── ionicons.ttf │ │ │ └── ionicons.woff │ ├── jquery │ │ ├── jquery-migrate.min.js │ │ └── jquery.min.js │ ├── lightbox │ │ ├── css │ │ │ ├── lightbox.css │ │ │ └── lightbox.min.css │ │ ├── images │ │ │ ├── close.png │ │ │ ├── loading.gif │ │ │ ├── next.png │ │ │ └── prev.png │ │ ├── js │ │ │ ├── lightbox.js │ │ │ └── lightbox.min.js │ │ └── links.php │ ├── owlcarousel │ │ ├── LICENSE │ │ ├── assets │ │ │ ├── ajax-loader.gif │ │ │ ├── owl.carousel.css │ │ │ ├── owl.carousel.min.css │ │ │ ├── owl.theme.default.css │ │ │ ├── owl.theme.default.min.css │ │ │ ├── owl.theme.green.css │ │ │ ├── owl.theme.green.min.css │ │ │ └── owl.video.play.png │ │ ├── owl.carousel.js │ │ └── owl.carousel.min.js │ ├── popper │ │ ├── popper.min.js │ │ └── popper.min.js.map.json │ └── typed │ │ ├── typed.js │ │ ├── typed.min.js │ │ └── typed.min.js.map ├── manifest.json └── team.png ├── src ├── animate.css ├── components │ ├── about.jsx │ ├── back-top.jsx │ ├── contact.jsx │ ├── intro.jsx │ ├── navbar.jsx │ ├── portfolio.jsx │ ├── preloader.jsx │ └── stars.scss ├── img │ ├── earth.jpg │ ├── font-awesome │ │ ├── css │ │ │ ├── font-awesome.css │ │ │ └── font-awesome.min.css │ │ └── fonts │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ └── fontawesome-webfont.woff2 │ ├── icons │ │ ├── css │ │ │ ├── ionicons.css │ │ │ └── ionicons.min.css │ │ └── fonts │ │ │ ├── ionicons.eot │ │ │ ├── ionicons.svg │ │ │ ├── ionicons.ttf │ │ │ └── ionicons.woff │ ├── image1.jpg │ ├── image2.jpg │ ├── image3.jpg │ ├── image4.jpg │ ├── image5.jpg │ ├── image6.jpg │ ├── male.png │ ├── male1.png │ └── myImage.png ├── index.js ├── libs │ └── easing.js ├── serviceWorker.js └── style.css └── test.gif /.gitattributes: -------------------------------------------------------------------------------- 1 | *.css linguist-detectable=false 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # React-portfolio 2 | 3 | A boilrplate react portfolio to showcase your projects and work 4 | 5 | 6 | Dummy-portfolio link -> https://shloksomani.github.io/react-portfolio/ 7 | 8 | ![](test.gif) 9 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "portfolio", 3 | "version": "0.1.0", 4 | "private": true, 5 | "homepage": "https://shloksomani.github.io/react-portfolio/", 6 | "dependencies": { 7 | "bootstrap": "^4.3.1", 8 | "gh-pages": "^2.2.0", 9 | "jquery": "^3.4.1", 10 | "lightbox2": "^2.11.0", 11 | "node-sass": "^4.12.0", 12 | "normalize.css": "^8.0.1", 13 | "popper.js": "^1.15.0", 14 | "react": "^16.8.6", 15 | "react-dom": "^16.8.6", 16 | "react-scripts": "^3.3.0", 17 | "react-typed": "^1.1.2", 18 | "typed.js": "^2.0.10" 19 | }, 20 | "scripts": { 21 | "predeploy": "npm run build", 22 | "deploy": "gh-pages -d build", 23 | "start": "react-scripts start", 24 | "build": "react-scripts build", 25 | "test": "react-scripts test", 26 | "eject": "react-scripts eject" 27 | }, 28 | "eslintConfig": { 29 | "extends": "react-app" 30 | }, 31 | "browserslist": { 32 | "production": [ 33 | ">0.2%", 34 | "not dead", 35 | "not op_mini all" 36 | ], 37 | "development": [ 38 | "last 1 chrome version", 39 | "last 1 firefox version", 40 | "last 1 safari version" 41 | ] 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /public/css/style.css: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | GENERAL STYLING 4 | */ 5 | 6 | body { 7 | background-color: #f5f5f5; 8 | color: #4e4e4e; 9 | } 10 | 11 | h1, 12 | h2, 13 | h3, 14 | h4, 15 | h5, 16 | h6 { 17 | color: #1e1e1e; 18 | } 19 | 20 | a { 21 | color: #1e1e1e; 22 | transition: all 0.5s ease-in-out; 23 | } 24 | 25 | a:hover { 26 | color: #0078ff; 27 | text-decoration: none; 28 | transition: all 0.5s ease-in-out; 29 | } 30 | 31 | .p-r { 32 | position: relative; 33 | } 34 | 35 | .color-a { 36 | color: #0078ff; 37 | } 38 | 39 | .color-d { 40 | color: #f5f5f5; 41 | } 42 | 43 | .color-text-a { 44 | color: #4e4e4e; 45 | } 46 | 47 | .box-shadow, 48 | .paralax-mf, 49 | .service-box, 50 | .work-box, 51 | .card-blog { 52 | box-shadow: 0 13px 8px -10px rgba(0, 0, 0, 0.1); 53 | } 54 | 55 | .box-shadow-a, 56 | .button:hover { 57 | box-shadow: 0 0 0 4px #cde1f8; 58 | } 59 | 60 | .display-5 { 61 | font-size: 2.5rem; 62 | font-weight: 300; 63 | line-height: 1.1; 64 | } 65 | 66 | .display-6 { 67 | font-size: 2rem; 68 | font-weight: 300; 69 | line-height: 1.1; 70 | } 71 | 72 | .avatar { 73 | width: 32px; 74 | height: 32px; 75 | margin-right: 4px; 76 | overflow: hidden; 77 | } 78 | 79 | .bg-image { 80 | background-repeat: no-repeat; 81 | background-attachment: fixed; 82 | background-size: cover; 83 | background-position: center center; 84 | } 85 | 86 | .overlay-mf { 87 | background-color: #0078ff; 88 | } 89 | 90 | .overlay-mf { 91 | position: absolute; 92 | top: 0; 93 | left: 0px; 94 | padding: 0; 95 | height: 100%; 96 | width: 100%; 97 | opacity: .7; 98 | } 99 | 100 | .paralax-mf { 101 | position: relative; 102 | padding: 8rem 0; 103 | } 104 | 105 | .display-table { 106 | width: 100%; 107 | height: 100%; 108 | display: table; 109 | } 110 | 111 | .table-cell { 112 | display: table-cell; 113 | vertical-align: middle; 114 | } 115 | 116 | /* Sections */ 117 | 118 | .sect-4 { 119 | padding: 4rem 0; 120 | } 121 | 122 | .sect-pt4 { 123 | padding-top: 4rem; 124 | } 125 | 126 | .sect-mt4 { 127 | margin-top: 4rem; 128 | } 129 | 130 | /* Title S */ 131 | 132 | .title-s { 133 | font-weight: 600; 134 | color: #1e1e1e; 135 | font-size: 1.1rem; 136 | } 137 | 138 | /* Title A */ 139 | 140 | .title-box { 141 | margin-bottom: 4rem; 142 | } 143 | 144 | .title-a { 145 | font-size: 3rem; 146 | font-weight: bold; 147 | text-transform: uppercase; 148 | } 149 | 150 | .subtitle-a { 151 | color: #4e4e4e; 152 | } 153 | 154 | .line-mf { 155 | width: 40px; 156 | height: 5px; 157 | background-color: #0078ff; 158 | margin: 0 auto; 159 | } 160 | 161 | /* Title Left */ 162 | 163 | .title-box-2 { 164 | margin-bottom: 3rem; 165 | } 166 | 167 | .title-left { 168 | font-size: 2rem; 169 | position: relative; 170 | } 171 | 172 | .title-left:before { 173 | content: ''; 174 | position: absolute; 175 | height: 3px; 176 | background-color: #0078ff; 177 | width: 100px; 178 | bottom: -12px; 179 | } 180 | 181 | /* Box */ 182 | 183 | .box-pl2 { 184 | padding-left: 2rem; 185 | } 186 | 187 | .box-shadow-full { 188 | padding: 3rem 1.25rem; 189 | position: relative; 190 | background-color: #fff; 191 | margin-bottom: 3rem; 192 | z-index: 2; 193 | box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.06), 0 2px 5px 0 rgba(0, 0, 0, 0.2); 194 | } 195 | 196 | /* Socials */ 197 | 198 | .socials { 199 | padding: 1.5rem 0; 200 | } 201 | 202 | .socials ul li { 203 | display: inline-block; 204 | } 205 | 206 | .socials .ico-circle { 207 | height: 40px; 208 | width: 40px; 209 | font-size: 1.7rem; 210 | border-radius: 50%; 211 | line-height: 1.4; 212 | margin: 0 15px 0 0; 213 | box-shadow: 0 0 0 3px #0078ff; 214 | transition: all 500ms ease; 215 | } 216 | 217 | .socials .ico-circle:hover { 218 | background-color: #0078ff; 219 | color: #fff; 220 | box-shadow: 0 0 0 3px #cde1f8; 221 | transition: all 500ms ease; 222 | } 223 | 224 | /* Ul resect */ 225 | 226 | .ul-resect, 227 | .socials ul, 228 | .list-ico, 229 | .blog-wrapper .post-meta ul, 230 | .box-comments .list-comments, 231 | .widget-sidebar .list-sidebar, 232 | .widget-tags ul { 233 | list-style: none; 234 | padding-left: 0; 235 | margin-bottom: 0; 236 | } 237 | 238 | .list-ico { 239 | line-height: 2; 240 | } 241 | 242 | .list-ico span { 243 | color: #0078ff; 244 | margin-right: 10px; 245 | } 246 | 247 | /* Ico Circle */ 248 | 249 | .ico-circle { 250 | height: 100px; 251 | width: 100px; 252 | font-size: 2rem; 253 | border-radius: 50%; 254 | line-height: 1.55; 255 | margin: 0 auto; 256 | text-align: center; 257 | box-shadow: 0 0 0 10px #0078ff; 258 | display: block; 259 | } 260 | 261 | /* Owl Carousel */ 262 | 263 | .owl-theme .owl-dots { 264 | text-align: center; 265 | margin-top: 18px; 266 | } 267 | 268 | .owl-theme .owl-dots .owl-dot { 269 | display: inline-block; 270 | } 271 | 272 | .owl-theme .owl-dots .owl-dot span { 273 | width: 18px; 274 | height: 7px; 275 | margin: 5px 5px; 276 | background: #cde1f8; 277 | border: 0px solid #cde1f8; 278 | display: block; 279 | transition: all 0.6s ease-in-out; 280 | cursor: pointer; 281 | } 282 | 283 | .owl-theme .owl-dots .owl-dot:hover span { 284 | background-color: #cde1f8; 285 | } 286 | 287 | .owl-theme .owl-dots .owl-dot.active span { 288 | background-color: #1B1B1B; 289 | width: 25px; 290 | } 291 | 292 | /* Scrolltop S */ 293 | 294 | .scrolltop-mf { 295 | position: relative; 296 | display: none; 297 | } 298 | 299 | .scrolltop-mf span { 300 | z-index: 999; 301 | position: fixed; 302 | width: 42px; 303 | height: 42px; 304 | background-color: #0078ff; 305 | opacity: .7; 306 | font-size: 1.6rem; 307 | line-height: 1.5; 308 | text-align: center; 309 | color: #fff; 310 | top: auto; 311 | left: auto; 312 | right: 30px; 313 | bottom: 50px; 314 | cursor: pointer; 315 | border-radius: 50%; 316 | } 317 | 318 | /* Back to top button */ 319 | 320 | .back-to-top { 321 | position: fixed; 322 | display: none; 323 | background: #0078ff; 324 | color: #fff; 325 | width: 44px; 326 | height: 44px; 327 | text-align: center; 328 | line-height: 1; 329 | font-size: 16px; 330 | border-radius: 50%; 331 | right: 15px; 332 | bottom: 15px; 333 | transition: background 0.5s; 334 | z-index: 11; 335 | } 336 | 337 | .back-to-top i { 338 | padding-top: 12px; 339 | color: #fff; 340 | } 341 | 342 | /* Prelaoder */ 343 | 344 | #preloader { 345 | position: fixed; 346 | top: 0; 347 | left: 0; 348 | right: 0; 349 | bottom: 0; 350 | z-index: 9999; 351 | overflow: hidden; 352 | background: #fff; 353 | } 354 | 355 | #preloader:before { 356 | content: ""; 357 | position: fixed; 358 | top: calc(50% - 30px); 359 | left: calc(50% - 30px); 360 | border: 6px solid #f2f2f2; 361 | border-top: 6px solid #0078ff; 362 | border-radius: 50%; 363 | width: 60px; 364 | height: 60px; 365 | -webkit-animation: animate-preloader 1s linear infinite; 366 | animation: animate-preloader 1s linear infinite; 367 | } 368 | 369 | @-webkit-keyframes animate-preloader { 370 | 0% { 371 | -webkit-transform: rotate(0deg); 372 | transform: rotate(0deg); 373 | } 374 | 375 | 100% { 376 | -webkit-transform: rotate(360deg); 377 | transform: rotate(360deg); 378 | } 379 | } 380 | 381 | @keyframes animate-preloader { 382 | 0% { 383 | -webkit-transform: rotate(0deg); 384 | transform: rotate(0deg); 385 | } 386 | 387 | 100% { 388 | -webkit-transform: rotate(360deg); 389 | transform: rotate(360deg); 390 | } 391 | } 392 | 393 | /* 394 | NAVBAR 395 | */ 396 | 397 | .navbar-b { 398 | transition: all .5s ease-in-out; 399 | background-color: transparent; 400 | padding-top: 1.563rem; 401 | padding-bottom: 1.563rem; 402 | } 403 | 404 | .navbar-b.navbar-reduce { 405 | box-shadow: 0px 6px 9px 0px rgba(0, 0, 0, 0.06); 406 | } 407 | 408 | .navbar-b.navbar-trans .nav-item, 409 | .navbar-b.navbar-reduce .nav-item { 410 | position: relative; 411 | padding-right: 10px; 412 | padding-left: 0; 413 | } 414 | 415 | .navbar-b.navbar-trans .nav-link, 416 | .navbar-b.navbar-reduce .nav-link { 417 | color: #fff; 418 | text-transform: uppercase; 419 | font-weight: 600; 420 | } 421 | 422 | .navbar-b.navbar-trans .nav-link:before, 423 | .navbar-b.navbar-reduce .nav-link:before { 424 | content: ''; 425 | position: absolute; 426 | margin-left: 0px; 427 | width: 0%; 428 | bottom: 0; 429 | left: 0; 430 | height: 2px; 431 | transition: all 500ms ease; 432 | } 433 | 434 | .navbar-b.navbar-trans .nav-link:hover, 435 | .navbar-b.navbar-reduce .nav-link:hover { 436 | color: #1B1B1B; 437 | } 438 | 439 | .navbar-b.navbar-trans .nav-link:hover:before, 440 | .navbar-b.navbar-reduce .nav-link:hover:before { 441 | width: 35px; 442 | } 443 | 444 | .navbar-b.navbar-trans .show > .nav-link:before, 445 | .navbar-b.navbar-trans .active > .nav-link:before, 446 | .navbar-b.navbar-trans .nav-link.show:before, 447 | .navbar-b.navbar-trans .nav-link.active:before, 448 | .navbar-b.navbar-reduce .show > .nav-link:before, 449 | .navbar-b.navbar-reduce .active > .nav-link:before, 450 | .navbar-b.navbar-reduce .nav-link.show:before, 451 | .navbar-b.navbar-reduce .nav-link.active:before { 452 | width: 35px; 453 | } 454 | 455 | .navbar-b.navbar-trans .nav-link:before { 456 | background-color: #fff; 457 | } 458 | 459 | .navbar-b.navbar-trans .nav-link:hover { 460 | color: #fff; 461 | } 462 | 463 | .navbar-b.navbar-trans .show > .nav-link, 464 | .navbar-b.navbar-trans .active > .nav-link, 465 | .navbar-b.navbar-trans .nav-link.show, 466 | .navbar-b.navbar-trans .nav-link.active { 467 | color: #fff; 468 | } 469 | 470 | .navbar-b.navbar-reduce { 471 | transition: all .5s ease-in-out; 472 | background-color: #fff; 473 | padding-top: 15px; 474 | padding-bottom: 15px; 475 | } 476 | 477 | .navbar-b.navbar-reduce .nav-link { 478 | color: #0078ff; 479 | } 480 | 481 | .navbar-b.navbar-reduce .nav-link:before { 482 | background-color: #0078ff; 483 | } 484 | 485 | .navbar-b.navbar-reduce .nav-link:hover { 486 | color: #0078ff; 487 | } 488 | 489 | .navbar-b.navbar-reduce .show > .nav-link, 490 | .navbar-b.navbar-reduce .active > .nav-link, 491 | .navbar-b.navbar-reduce .nav-link.show, 492 | .navbar-b.navbar-reduce .nav-link.active { 493 | color: #0078ff; 494 | } 495 | 496 | .navbar-b.navbar-reduce .navbar-brand { 497 | color: #0078ff; 498 | } 499 | 500 | .navbar-b.navbar-reduce .navbar-toggler span { 501 | background-color: #1B1B1B; 502 | } 503 | 504 | .navbar-b .navbar-brand { 505 | color: #fff; 506 | font-size: 1.6rem; 507 | font-weight: 600; 508 | } 509 | 510 | .navbar-b .navbar-nav .dropdown-item.show .dropdown-menu, 511 | .navbar-b .dropdown.show .dropdown-menu, 512 | .navbar-b .dropdown-btn.show .dropdown-menu { 513 | -webkit-transform: translate3d(0px, 0px, 0px); 514 | transform: translate3d(0px, 0px, 0px); 515 | visibility: visible !important; 516 | } 517 | 518 | .navbar-b .dropdown-menu { 519 | margin: 1.12rem 0 0; 520 | border-radius: 0; 521 | } 522 | 523 | .navbar-b .dropdown-menu .dropdown-item { 524 | padding: .7rem 1.7rem; 525 | transition: all 500ms ease; 526 | } 527 | 528 | .navbar-b .dropdown-menu .dropdown-item:hover { 529 | background-color: #0078ff; 530 | color: #fff; 531 | transition: all 500ms ease; 532 | } 533 | 534 | .navbar-b .dropdown-menu .dropdown-item.active { 535 | background-color: #0078ff; 536 | } 537 | 538 | /* Hamburger Navbar */ 539 | 540 | .navbar-toggler { 541 | position: relative; 542 | } 543 | 544 | .navbar-toggler:focus, 545 | .navbar-toggler:active { 546 | outline: 0; 547 | } 548 | 549 | .navbar-toggler span { 550 | display: block; 551 | background-color: #fff; 552 | height: 3px; 553 | width: 25px; 554 | margin-top: 4px; 555 | margin-bottom: 4px; 556 | -webkit-transform: rotate(0deg); 557 | transform: rotate(0deg); 558 | left: 0; 559 | opacity: 1; 560 | } 561 | 562 | .navbar-toggler span:nth-child(1), 563 | .navbar-toggler span:nth-child(3) { 564 | transition: -webkit-transform .35s ease-in-out; 565 | transition: transform .35s ease-in-out; 566 | transition: transform .35s ease-in-out, -webkit-transform .35s ease-in-out; 567 | } 568 | 569 | .navbar-toggler:not(.collapsed) span:nth-child(1) { 570 | position: absolute; 571 | left: 12px; 572 | top: 10px; 573 | -webkit-transform: rotate(135deg); 574 | transform: rotate(135deg); 575 | opacity: 0.9; 576 | } 577 | 578 | .navbar-toggler:not(.collapsed) span:nth-child(2) { 579 | height: 12px; 580 | visibility: hidden; 581 | background-color: transparent; 582 | } 583 | 584 | .navbar-toggler:not(.collapsed) span:nth-child(3) { 585 | position: absolute; 586 | left: 12px; 587 | top: 10px; 588 | -webkit-transform: rotate(-135deg); 589 | transform: rotate(-135deg); 590 | opacity: 0.9; 591 | } 592 | 593 | /* 594 | INTRO 595 | */ 596 | 597 | .intro { 598 | height: 100vh; 599 | position: relative; 600 | color: #fff; 601 | } 602 | 603 | .intro .intro-content { 604 | text-align: center; 605 | position: absolute; 606 | } 607 | 608 | .intro .overlay-itro { 609 | background-color: rgba(0, 0, 0, 0.6); 610 | position: absolute; 611 | top: 0; 612 | left: 0px; 613 | padding: 0; 614 | height: 100%; 615 | width: 100%; 616 | opacity: .9; 617 | } 618 | 619 | .intro .intro-title { 620 | color: #fff; 621 | font-weight: 600; 622 | font-size: 3rem; 623 | } 624 | 625 | .intro .intro-subtitle { 626 | font-size: 1.5rem; 627 | font-weight: 300; 628 | } 629 | 630 | .intro .text-slider-items { 631 | display: none; 632 | } 633 | 634 | .intro-single { 635 | height: 350px; 636 | } 637 | 638 | .intro-single .intro-content { 639 | margin-top: 30px; 640 | } 641 | 642 | .intro-single .intro-title { 643 | text-transform: uppercase; 644 | font-size: 3rem; 645 | } 646 | 647 | .intro-single .breadcrumb { 648 | background-color: transparent; 649 | color: #0078ff; 650 | } 651 | 652 | .intro-single .breadcrumb .breadcrumb-item:before { 653 | color: #cde1f8; 654 | } 655 | 656 | .intro-single .breadcrumb .breadcrumb-item.active { 657 | color: #cde1f8; 658 | } 659 | 660 | .intro-single .breadcrumb a { 661 | color: #fff; 662 | } 663 | 664 | /* 665 | ABOUT 666 | */ 667 | 668 | .about-mf .box-shadow-full { 669 | padding-top: 4rem; 670 | padding-bottom: 4rem; 671 | } 672 | 673 | .about-mf .about-img { 674 | margin-bottom: 2rem; 675 | } 676 | 677 | .about-mf .about-img img { 678 | margin-left: 10px; 679 | } 680 | 681 | .skill-mf span { 682 | color: #4e4e4e; 683 | } 684 | 685 | .skill-mf .progress { 686 | background-color: #cde1f8; 687 | margin: .5rem 0 1.2rem 0; 688 | border-radius: 0; 689 | height: .7rem; 690 | } 691 | 692 | .skill-mf .progress .progress-bar { 693 | height: .7rem; 694 | background-color: #0078ff; 695 | } 696 | 697 | /* 698 | PORTFOLIO 699 | */ 700 | 701 | .work-box { 702 | margin-bottom: 3rem; 703 | -webkit-backface-visibility: hidden; 704 | backface-visibility: hidden; 705 | background-color: #fff; 706 | } 707 | 708 | .work-box:hover img { 709 | -webkit-transform: scale(1.3); 710 | transform: scale(1.3); 711 | } 712 | 713 | .work-img { 714 | display: block; 715 | overflow: hidden; 716 | } 717 | 718 | .work-img img { 719 | transition: all 1s; 720 | } 721 | 722 | .work-content { 723 | padding: 2rem 3% 1rem 4%; 724 | } 725 | 726 | .work-content .w-more { 727 | color: #4e4e4e; 728 | font-size: .8rem; 729 | } 730 | 731 | .work-content .w-more .w-ctegory { 732 | color: #0078ff; 733 | } 734 | 735 | .work-content .w-like { 736 | font-size: 2.5rem; 737 | color: #0078ff; 738 | float: right; 739 | } 740 | 741 | .work-content .w-like a { 742 | color: #0078ff; 743 | } 744 | 745 | .work-content .w-like .num-like { 746 | font-size: .7rem; 747 | } 748 | 749 | .w-title { 750 | font-size: 1.2rem; 751 | } 752 | 753 | /* 754 | TESTIMONIALS 755 | */ 756 | 757 | .testimonials .owl-carousel .owl-item img { 758 | width: auto; 759 | } 760 | 761 | .testimonial-box { 762 | color: #fff; 763 | text-align: center; 764 | } 765 | 766 | .testimonial-box .author-test { 767 | margin-top: 1rem; 768 | } 769 | 770 | .testimonial-box .author-test img { 771 | margin: 0 auto; 772 | } 773 | 774 | .testimonial-box .author { 775 | color: #fff; 776 | text-transform: uppercase; 777 | font-weight: 600; 778 | margin: 1rem 0; 779 | display: block; 780 | font-size: 1.4rem; 781 | } 782 | 783 | .testimonial-box .comit { 784 | font-size: 2rem; 785 | color: #0078ff; 786 | background-color: #fff; 787 | width: 52px; 788 | height: 52px; 789 | display: block; 790 | margin: 0 auto; 791 | border-radius: 50%; 792 | line-height: 1.6; 793 | } 794 | 795 | /* 796 | CONTACT 797 | */ 798 | 799 | .footer-paralax { 800 | padding: 4rem 0 0 0; 801 | } 802 | 803 | .contact-mf { 804 | margin-top: 4rem; 805 | } 806 | 807 | /* 808 | FOOTER 809 | */ 810 | 811 | footer { 812 | text-align: center; 813 | color: #fff; 814 | padding-bottom: 4rem; 815 | } 816 | 817 | footer .copyright { 818 | margin-bottom: .3rem; 819 | } 820 | 821 | footer .credits { 822 | margin-bottom: 0; 823 | } 824 | 825 | footer .credits a { 826 | color: #fff; 827 | } 828 | 829 | 830 | /* 831 | CONTACT 832 | */ 833 | 834 | #sendmessage { 835 | color: #0078ff; 836 | border: 1px solid #0078ff; 837 | display: none; 838 | text-align: center; 839 | padding: 15px; 840 | font-weight: 600; 841 | margin-bottom: 15px; 842 | } 843 | 844 | #errormessage { 845 | color: red; 846 | display: none; 847 | border: 1px solid red; 848 | text-align: center; 849 | padding: 15px; 850 | font-weight: 600; 851 | margin-bottom: 15px; 852 | } 853 | 854 | #sendmessage.show, 855 | #errormessage.show, 856 | .show { 857 | display: block; 858 | } 859 | 860 | .validation { 861 | color: red; 862 | display: none; 863 | margin: 0 0 20px; 864 | font-weight: 400; 865 | font-size: 13px; 866 | } 867 | 868 | /* 869 | BUTTON 870 | */ 871 | 872 | .button { 873 | display: inline-block; 874 | padding: .3rem .6rem; 875 | text-align: center; 876 | vertical-align: middle; 877 | -webkit-user-select: none; 878 | -moz-user-select: none; 879 | -ms-user-select: none; 880 | user-select: none; 881 | font-size: 1rem; 882 | border-radius: .3rem; 883 | border: 1px solid transparent; 884 | transition: all 500ms ease; 885 | cursor: pointer; 886 | } 887 | 888 | .button:focus { 889 | outline: 0; 890 | } 891 | 892 | .button:hover { 893 | background-color: #0062d3; 894 | color: #fff; 895 | transition: all 500ms ease; 896 | } 897 | 898 | .button-a { 899 | background-color: #0078ff; 900 | color: #fff; 901 | border-color: #cde1f8; 902 | } 903 | 904 | .button-big { 905 | padding: .9rem 2.3rem; 906 | font-size: 1.2rem; 907 | } 908 | 909 | .button-rouded { 910 | border-radius: 5rem; 911 | } 912 | 913 | .btn-lg { 914 | padding: .5rem 1rem; 915 | font-size: 1.25rem; 916 | line-height: 1.5; 917 | border-radius: .3rem; 918 | } 919 | 920 | @media (min-width: 577px) { 921 | .counter-box { 922 | margin-bottom: 1.8rem; 923 | } 924 | } 925 | 926 | @media (min-width: 767px) { 927 | .about-mf .box-pl2 { 928 | margin-top: 3rem; 929 | padding-left: 0rem; 930 | } 931 | 932 | .card-blog { 933 | margin-bottom: 3rem; 934 | } 935 | 936 | .contact-mf .box-pl2 { 937 | margin-top: 3rem; 938 | padding-left: 0rem; 939 | } 940 | } 941 | 942 | @media (min-width: 768px) { 943 | .box-shadow-full { 944 | padding: 3rem; 945 | } 946 | 947 | .navbar-b.navbar-trans .nav-item, 948 | .navbar-b.navbar-reduce .nav-item { 949 | padding-left: 10px; 950 | } 951 | 952 | .navbar-b.navbar-trans .nav-link:before, 953 | .navbar-b.navbar-reduce .nav-link:before { 954 | margin-left: 18px; 955 | } 956 | 957 | .intro .intro-title { 958 | font-size: 4.5rem; 959 | } 960 | 961 | .intro .intro-subtitle { 962 | font-size: 2.5rem; 963 | } 964 | 965 | .intro-single .intro-title { 966 | font-size: 3.5rem; 967 | } 968 | 969 | .testimonial-box .description { 970 | padding: 0 5rem; 971 | } 972 | 973 | .post-box, 974 | .form-comments, 975 | .box-comments, 976 | .widget-sidebar { 977 | padding: 3rem; 978 | } 979 | 980 | .blog-wrapper .article-title { 981 | font-size: 1.9rem; 982 | } 983 | 984 | .box-comments .list-comments .comment-author { 985 | font-size: 1.5rem; 986 | } 987 | } 988 | 989 | @media (min-width: 992px) { 990 | .testimonial-box .description { 991 | padding: 0 8rem; 992 | } 993 | } 994 | 995 | @media (min-width: 1200px) { 996 | .testimonial-box .description { 997 | padding: 0 13rem; 998 | } 999 | } 1000 | 1001 | @media (max-width: 1024px) { 1002 | .bg-image { 1003 | background-attachment: scroll; 1004 | } 1005 | } 1006 | 1007 | @media (max-width: 768px) { 1008 | .back-to-top { 1009 | bottom: 15px; 1010 | } 1011 | } -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Full Stack Web Developer 7 | 8 | 9 | 13 | 14 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 | -------------------------------------------------------------------------------- /public/js/main.js: -------------------------------------------------------------------------------- 1 | (function ($) { 2 | "use strict"; 3 | var nav = $('nav'); 4 | var navHeight = nav.outerHeight(); 5 | 6 | $('.navbar-toggler').on('click', function() { 7 | if( ! $('#mainNav').hasClass('navbar-reduce')) { 8 | $('#mainNav').addClass('navbar-reduce'); 9 | } 10 | }) 11 | 12 | // Preloader 13 | $(window).on('load', function () { 14 | if ($('#preloader').length) { 15 | $('#preloader').delay(100).fadeOut('slow', function () { 16 | $(this).remove(); 17 | }); 18 | } 19 | }); 20 | 21 | // Back to top button 22 | $(window).scroll(function() { 23 | if ($(this).scrollTop() > 100) { 24 | $('.back-to-top').fadeIn('slow'); 25 | } else { 26 | $('.back-to-top').fadeOut('slow'); 27 | } 28 | }); 29 | $('.back-to-top').click(function(){ 30 | $('html, body').animate({scrollTop : 0},1500, 'easeInOutExpo'); 31 | return false; 32 | }); 33 | 34 | /*--/ Star ScrollTop /--*/ 35 | $('.scrolltop-mf').on("click", function () { 36 | $('html, body').animate({ 37 | scrollTop: 0 38 | }, 1000); 39 | }); 40 | 41 | /*--/ Star Counter /--*/ 42 | $('.counter').counterUp({ 43 | delay: 15, 44 | time: 2000 45 | }); 46 | 47 | /*--/ Star Scrolling nav /--*/ 48 | $('a.js-scroll[href*="#"]:not([href="#"])').on("click", function () { 49 | if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) { 50 | var target = $(this.hash); 51 | target = target.length ? target : $('[name=' + this.hash.slice(1) + ']'); 52 | if (target.length) { 53 | $('html, body').animate({ 54 | scrollTop: (target.offset().top - navHeight + 5) 55 | }, 1000, "easeInOutExpo"); 56 | return false; 57 | } 58 | } 59 | }); 60 | 61 | // Closes responsive menu when a scroll trigger link is clicked 62 | $('.js-scroll').on("click", function () { 63 | $('.navbar-collapse').collapse('hide'); 64 | }); 65 | 66 | // Activate scrollspy to add active class to navbar items on scroll 67 | $('body').scrollspy({ 68 | target: '#mainNav', 69 | offset: navHeight 70 | }); 71 | /*--/ End Scrolling nav /--*/ 72 | 73 | /*--/ Navbar Menu Reduce /--*/ 74 | $(window).trigger('scroll'); 75 | $(window).on('scroll', function () { 76 | var pixels = 50; 77 | var top = 1200; 78 | if ($(window).scrollTop() > pixels) { 79 | $('.navbar-expand-md').addClass('navbar-reduce'); 80 | $('.navbar-expand-md').removeClass('navbar-trans'); 81 | } else { 82 | $('.navbar-expand-md').addClass('navbar-trans'); 83 | $('.navbar-expand-md').removeClass('navbar-reduce'); 84 | } 85 | if ($(window).scrollTop() > top) { 86 | $('.scrolltop-mf').fadeIn(1000, "easeInOutExpo"); 87 | } else { 88 | $('.scrolltop-mf').fadeOut(1000, "easeInOutExpo"); 89 | } 90 | }); 91 | 92 | /*--/ Star Typed /--*/ 93 | if ($('.text-slider').length == 1) { 94 | var typed_strings = $('.text-slider-items').text(); 95 | var typed = new Typed('.text-slider', { 96 | strings: typed_strings.split(','), 97 | typeSpeed: 80, 98 | loop: true, 99 | backDelay: 1100, 100 | backSpeed: 30 101 | }); 102 | } 103 | 104 | /*--/ Testimonials owl /--*/ 105 | $('#testimonial-mf').owlCarousel({ 106 | margin: 20, 107 | autoplay: true, 108 | autoplayTimeout: 4000, 109 | autoplayHoverPause: true, 110 | responsive: { 111 | 0: { 112 | items: 1, 113 | } 114 | } 115 | }); 116 | 117 | })(jQuery); 118 | -------------------------------------------------------------------------------- /public/lib/counterup/jquery.counterup.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * jquery.counterup.js 2.1.0 3 | * 4 | * Copyright 2013, Benjamin Intal http://gambit.ph @bfintal 5 | * Released under the GPL v2 License 6 | * 7 | * Amended by Jeremy Paris, Ciro Mattia Gonano and others 8 | * 9 | * Date: Feb 24, 2017 10 | */ 11 | (function ($) { 12 | "use strict"; 13 | 14 | $.fn.counterUp = function (options) { 15 | 16 | // Defaults 17 | var settings = $.extend({ 18 | 'time': 400, 19 | 'delay': 10, 20 | 'offset': 100, 21 | 'beginAt': 0, 22 | 'formatter': false, 23 | 'context': 'window', 24 | callback: function () { 25 | } 26 | }, options), 27 | s; 28 | 29 | return this.each(function () { 30 | 31 | // Store the object 32 | var $this = $(this), 33 | counter = { 34 | time: $(this).data('counterup-time') || settings.time, 35 | delay: $(this).data('counterup-delay') || settings.delay, 36 | offset: $(this).data('counterup-offset') || settings.offset, 37 | beginAt: $(this).data('counterup-beginat') || settings.beginAt, 38 | context: $(this).data('counterup-context') || settings.context 39 | }; 40 | 41 | var counterUpper = function () { 42 | var nums = []; 43 | var divisions = counter.time / counter.delay; 44 | var num = $this.attr('data-num') ? $this.attr('data-num') : $this.text(); 45 | var isComma = /[0-9]+,[0-9]+/.test(num); 46 | num = num.replace(/,/g, ''); 47 | var decimalPlaces = (num.split('.')[1] || []).length; 48 | if (counter.beginAt > num) 49 | counter.beginAt = num; 50 | 51 | var isTime = /[0-9]+:[0-9]+:[0-9]+/.test(num); 52 | 53 | // Convert time to total seconds 54 | if (isTime) { 55 | var times = num.split(':'), 56 | m = 1; 57 | s = 0; 58 | while (times.length > 0) { 59 | s += m * parseInt(times.pop(), 10); 60 | m *= 60; 61 | } 62 | } 63 | 64 | // Generate list of incremental numbers to display 65 | for (var i = divisions; i >= counter.beginAt / num * divisions; i--) { 66 | 67 | var newNum = parseFloat(num / divisions * i).toFixed(decimalPlaces); 68 | 69 | // Add incremental seconds and convert back to time 70 | if (isTime) { 71 | newNum = parseInt(s / divisions * i); 72 | var hours = parseInt(newNum / 3600) % 24; 73 | var minutes = parseInt(newNum / 60) % 60; 74 | var seconds = parseInt(newNum % 60, 10); 75 | newNum = (hours < 10 ? "0" + hours : hours) + ":" + (minutes < 10 ? "0" + minutes : minutes) + ":" + (seconds < 10 ? "0" + seconds : seconds); 76 | } 77 | 78 | // Preserve commas if input had commas 79 | if (isComma) { 80 | while (/(\d+)(\d{3})/.test(newNum.toString())) { 81 | newNum = newNum.toString().replace(/(\d+)(\d{3})/, '$1' + ',' + '$2'); 82 | } 83 | } 84 | if (settings.formatter) { 85 | newNum = settings.formatter.call(this, newNum); 86 | } 87 | nums.unshift(newNum); 88 | } 89 | 90 | $this.data('counterup-nums', nums); 91 | $this.text(counter.beginAt); 92 | 93 | // Updates the number until we're done 94 | var f = function () { 95 | if (!$this.data('counterup-nums')) { 96 | settings.callback.call(this); 97 | return; 98 | } 99 | $this.html($this.data('counterup-nums').shift()); 100 | if ($this.data('counterup-nums').length) { 101 | setTimeout($this.data('counterup-func'), counter.delay); 102 | } else { 103 | $this.data('counterup-nums', null); 104 | $this.data('counterup-func', null); 105 | settings.callback.call(this); 106 | } 107 | }; 108 | $this.data('counterup-func', f); 109 | 110 | // Start the count up 111 | setTimeout($this.data('counterup-func'), counter.delay); 112 | }; 113 | 114 | // Perform counts when the element gets into view 115 | $this.waypoint(function (direction) { 116 | counterUpper(); 117 | this.destroy(); //-- Waypoint 3.0 version of triggerOnce 118 | }, {offset: counter.offset + "%", context: counter.context}); 119 | }); 120 | 121 | }; 122 | 123 | })(jQuery); 124 | -------------------------------------------------------------------------------- /public/lib/counterup/jquery.counterup.min.js: -------------------------------------------------------------------------------- 1 | (function($){"use strict";$.fn.counterUp=function(options){var settings=$.extend({time:400,delay:10,offset:100,beginAt:0,formatter:false,context:"window",callback:function(){}},options),s;return this.each(function(){var $this=$(this),counter={time:$(this).data("counterup-time")||settings.time,delay:$(this).data("counterup-delay")||settings.delay,offset:$(this).data("counterup-offset")||settings.offset,beginAt:$(this).data("counterup-beginat")||settings.beginAt,context:$(this).data("counterup-context")||settings.context};var counterUpper=function(){var nums=[];var divisions=counter.time/counter.delay;var num=$(this).attr("data-num")?$(this).attr("data-num"):$this.text();var isComma=/[0-9]+,[0-9]+/.test(num);num=num.replace(/,/g,"");var decimalPlaces=(num.split(".")[1]||[]).length;if(counter.beginAt>num)counter.beginAt=num;var isTime=/[0-9]+:[0-9]+:[0-9]+/.test(num);if(isTime){var times=num.split(":"),m=1;s=0;while(times.length>0){s+=m*parseInt(times.pop(),10);m*=60}}for(var i=divisions;i>=counter.beginAt/num*divisions;i--){var newNum=parseFloat(num/divisions*i).toFixed(decimalPlaces);if(isTime){newNum=parseInt(s/divisions*i);var hours=parseInt(newNum/3600)%24;var minutes=parseInt(newNum/60)%60;var seconds=parseInt(newNum%60,10);newNum=(hours<10?"0"+hours:hours)+":"+(minutes<10?"0"+minutes:minutes)+":"+(seconds<10?"0"+seconds:seconds)}if(isComma){while(/(\d+)(\d{3})/.test(newNum.toString())){newNum=newNum.toString().replace(/(\d+)(\d{3})/,"$1"+","+"$2")}}if(settings.formatter){newNum=settings.formatter.call(this,newNum)}nums.unshift(newNum)}$this.data("counterup-nums",nums);$this.text(counter.beginAt);var f=function(){if(!$this.data("counterup-nums")){settings.callback.call(this);return}$this.html($this.data("counterup-nums").shift());if($this.data("counterup-nums").length){setTimeout($this.data("counterup-func"),counter.delay)}else{$this.data("counterup-nums",null);$this.data("counterup-func",null);settings.callback.call(this)}};$this.data("counterup-func",f);setTimeout($this.data("counterup-func"),counter.delay)};$this.waypoint(function(direction){counterUpper();this.destroy()},{offset:counter.offset+"%",context:counter.context})})}})(jQuery); 2 | -------------------------------------------------------------------------------- /public/lib/counterup/jquery.waypoints.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | Waypoints - 4.0.0 3 | Copyright © 2011-2015 Caleb Troughton 4 | Licensed under the MIT license. 5 | https://github.com/imakewebthings/waypoints/blog/master/licenses.txt 6 | */ 7 | !function(){"use strict";function t(o){if(!o)throw new Error("No options passed to Waypoint constructor");if(!o.element)throw new Error("No element option passed to Waypoint constructor");if(!o.handler)throw new Error("No handler option passed to Waypoint constructor");this.key="waypoint-"+e,this.options=t.Adapter.extend({},t.defaults,o),this.element=this.options.element,this.adapter=new t.Adapter(this.element),this.callback=o.handler,this.axis=this.options.horizontal?"horizontal":"vertical",this.enabled=this.options.enabled,this.triggerPoint=null,this.group=t.Group.findOrCreate({name:this.options.group,axis:this.axis}),this.context=t.Context.findOrCreateByElement(this.options.context),t.offsetAliases[this.options.offset]&&(this.options.offset=t.offsetAliases[this.options.offset]),this.group.add(this),this.context.add(this),i[this.key]=this,e+=1}var e=0,i={};t.prototype.queueTrigger=function(t){this.group.queueTrigger(this,t)},t.prototype.trigger=function(t){this.enabled&&this.callback&&this.callback.apply(this,t)},t.prototype.destroy=function(){this.context.remove(this),this.group.remove(this),delete i[this.key]},t.prototype.disable=function(){return this.enabled=!1,this},t.prototype.enable=function(){return this.context.refresh(),this.enabled=!0,this},t.prototype.next=function(){return this.group.next(this)},t.prototype.previous=function(){return this.group.previous(this)},t.invokeAll=function(t){var e=[];for(var o in i)e.push(i[o]);for(var n=0,r=e.length;r>n;n++)e[n][t]()},t.destroyAll=function(){t.invokeAll("destroy")},t.disableAll=function(){t.invokeAll("disable")},t.enableAll=function(){t.invokeAll("enable")},t.refreshAll=function(){t.Context.refreshAll()},t.viewportHeight=function(){return window.innerHeight||document.documentElement.clientHeight},t.viewportWidth=function(){return document.documentElement.clientWidth},t.adapters=[],t.defaults={context:window,continuous:!0,enabled:!0,group:"default",horizontal:!1,offset:0},t.offsetAliases={"bottom-in-view":function(){return this.context.innerHeight()-this.adapter.outerHeight()},"right-in-view":function(){return this.context.innerWidth()-this.adapter.outerWidth()}},window.Waypoint=t}(),function(){"use strict";function t(t){window.setTimeout(t,1e3/60)}function e(t){this.element=t,this.Adapter=n.Adapter,this.adapter=new this.Adapter(t),this.key="waypoint-context-"+i,this.didScroll=!1,this.didResize=!1,this.oldScroll={x:this.adapter.scrollLeft(),y:this.adapter.scrollTop()},this.waypoints={vertical:{},horizontal:{}},t.waypointContextKey=this.key,o[t.waypointContextKey]=this,i+=1,this.createThrottledScrollHandler(),this.createThrottledResizeHandler()}var i=0,o={},n=window.Waypoint,r=window.onload;e.prototype.add=function(t){var e=t.options.horizontal?"horizontal":"vertical";this.waypoints[e][t.key]=t,this.refresh()},e.prototype.checkEmpty=function(){var t=this.Adapter.isEmptyObject(this.waypoints.horizontal),e=this.Adapter.isEmptyObject(this.waypoints.vertical);t&&e&&(this.adapter.off(".waypoints"),delete o[this.key])},e.prototype.createThrottledResizeHandler=function(){function t(){e.handleResize(),e.didResize=!1}var e=this;this.adapter.on("resize.waypoints",function(){e.didResize||(e.didResize=!0,n.requestAnimationFrame(t))})},e.prototype.createThrottledScrollHandler=function(){function t(){e.handleScroll(),e.didScroll=!1}var e=this;this.adapter.on("scroll.waypoints",function(){(!e.didScroll||n.isTouch)&&(e.didScroll=!0,n.requestAnimationFrame(t))})},e.prototype.handleResize=function(){n.Context.refreshAll()},e.prototype.handleScroll=function(){var t={},e={horizontal:{newScroll:this.adapter.scrollLeft(),oldScroll:this.oldScroll.x,forward:"right",backward:"left"},vertical:{newScroll:this.adapter.scrollTop(),oldScroll:this.oldScroll.y,forward:"down",backward:"up"}};for(var i in e){var o=e[i],n=o.newScroll>o.oldScroll,r=n?o.forward:o.backward;for(var s in this.waypoints[i]){var a=this.waypoints[i][s],l=o.oldScroll=a.triggerPoint,p=l&&h,u=!l&&!h;(p||u)&&(a.queueTrigger(r),t[a.group.id]=a.group)}}for(var c in t)t[c].flushTriggers();this.oldScroll={x:e.horizontal.newScroll,y:e.vertical.newScroll}},e.prototype.innerHeight=function(){return this.element==this.element.window?n.viewportHeight():this.adapter.innerHeight()},e.prototype.remove=function(t){delete this.waypoints[t.axis][t.key],this.checkEmpty()},e.prototype.innerWidth=function(){return this.element==this.element.window?n.viewportWidth():this.adapter.innerWidth()},e.prototype.destroy=function(){var t=[];for(var e in this.waypoints)for(var i in this.waypoints[e])t.push(this.waypoints[e][i]);for(var o=0,n=t.length;n>o;o++)t[o].destroy()},e.prototype.refresh=function(){var t,e=this.element==this.element.window,i=e?void 0:this.adapter.offset(),o={};this.handleScroll(),t={horizontal:{contextOffset:e?0:i.left,contextScroll:e?0:this.oldScroll.x,contextDimension:this.innerWidth(),oldScroll:this.oldScroll.x,forward:"right",backward:"left",offsetProp:"left"},vertical:{contextOffset:e?0:i.top,contextScroll:e?0:this.oldScroll.y,contextDimension:this.innerHeight(),oldScroll:this.oldScroll.y,forward:"down",backward:"up",offsetProp:"top"}};for(var r in t){var s=t[r];for(var a in this.waypoints[r]){var l,h,p,u,c,d=this.waypoints[r][a],f=d.options.offset,w=d.triggerPoint,y=0,g=null==w;d.element!==d.element.window&&(y=d.adapter.offset()[s.offsetProp]),"function"==typeof f?f=f.apply(d):"string"==typeof f&&(f=parseFloat(f),d.options.offset.indexOf("%")>-1&&(f=Math.ceil(s.contextDimension*f/100))),l=s.contextScroll-s.contextOffset,d.triggerPoint=y+l-f,h=w=s.oldScroll,u=h&&p,c=!h&&!p,!g&&u?(d.queueTrigger(s.backward),o[d.group.id]=d.group):!g&&c?(d.queueTrigger(s.forward),o[d.group.id]=d.group):g&&s.oldScroll>=d.triggerPoint&&(d.queueTrigger(s.forward),o[d.group.id]=d.group)}}return n.requestAnimationFrame(function(){for(var t in o)o[t].flushTriggers()}),this},e.findOrCreateByElement=function(t){return e.findByElement(t)||new e(t)},e.refreshAll=function(){for(var t in o)o[t].refresh()},e.findByElement=function(t){return o[t.waypointContextKey]},window.onload=function(){r&&r(),e.refreshAll()},n.requestAnimationFrame=function(e){var i=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||t;i.call(window,e)},n.Context=e}(),function(){"use strict";function t(t,e){return t.triggerPoint-e.triggerPoint}function e(t,e){return e.triggerPoint-t.triggerPoint}function i(t){this.name=t.name,this.axis=t.axis,this.id=this.name+"-"+this.axis,this.waypoints=[],this.clearTriggerQueues(),o[this.axis][this.name]=this}var o={vertical:{},horizontal:{}},n=window.Waypoint;i.prototype.add=function(t){this.waypoints.push(t)},i.prototype.clearTriggerQueues=function(){this.triggerQueues={up:[],down:[],left:[],right:[]}},i.prototype.flushTriggers=function(){for(var i in this.triggerQueues){var o=this.triggerQueues[i],n="up"===i||"left"===i;o.sort(n?e:t);for(var r=0,s=o.length;s>r;r+=1){var a=o[r];(a.options.continuous||r===o.length-1)&&a.trigger([i])}}this.clearTriggerQueues()},i.prototype.next=function(e){this.waypoints.sort(t);var i=n.Adapter.inArray(e,this.waypoints),o=i===this.waypoints.length-1;return o?null:this.waypoints[i+1]},i.prototype.previous=function(e){this.waypoints.sort(t);var i=n.Adapter.inArray(e,this.waypoints);return i?this.waypoints[i-1]:null},i.prototype.queueTrigger=function(t,e){this.triggerQueues[e].push(t)},i.prototype.remove=function(t){var e=n.Adapter.inArray(t,this.waypoints);e>-1&&this.waypoints.splice(e,1)},i.prototype.first=function(){return this.waypoints[0]},i.prototype.last=function(){return this.waypoints[this.waypoints.length-1]},i.findOrCreate=function(t){return o[t.axis][t.name]||new i(t)},n.Group=i}(),function(){"use strict";function t(t){this.$element=e(t)}var e=window.jQuery,i=window.Waypoint;e.each(["innerHeight","innerWidth","off","offset","on","outerHeight","outerWidth","scrollLeft","scrollTop"],function(e,i){t.prototype[i]=function(){var t=Array.prototype.slice.call(arguments);return this.$element[i].apply(this.$element,t)}}),e.each(["extend","inArray","isEmptyObject"],function(i,o){t[o]=e[o]}),i.adapters.push({name:"jquery",Adapter:t}),i.Adapter=t}(),function(){"use strict";function t(t){return function(){var i=[],o=arguments[0];return t.isFunction(arguments[0])&&(o=t.extend({},arguments[1]),o.handler=arguments[0]),this.each(function(){var n=t.extend({},o,{element:this});"string"==typeof n.context&&(n.context=t(this).closest(n.context)[0]),i.push(new e(n))}),i}}var e=window.Waypoint;window.jQuery&&(window.jQuery.fn.waypoint=t(window.jQuery)),window.Zepto&&(window.Zepto.fn.waypoint=t(window.Zepto))}(); -------------------------------------------------------------------------------- /public/lib/easing/easing.js: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery Easing v1.4.1 - http://gsgd.co.uk/sandbox/jquery/easing/ 3 | * Open source under the BSD License. 4 | * Copyright © 2008 George McGinley Smith 5 | * All rights reserved. 6 | * https://raw.github.com/gdsmith/jquery-easing/master/LICENSE 7 | */ 8 | 9 | (function (factory) { 10 | if (typeof define === "function" && define.amd) { 11 | define(['jquery'], function ($) { 12 | return factory($); 13 | }); 14 | } else if (typeof module === "object" && typeof module.exports === "object") { 15 | exports = factory(require('jquery')); 16 | } else { 17 | factory(jQuery); 18 | } 19 | })(function($){ 20 | 21 | // Preserve the original jQuery "swing" easing as "jswing" 22 | if (typeof $.easing !== 'undefined') { 23 | $.easing['jswing'] = $.easing['swing']; 24 | } 25 | 26 | var pow = Math.pow, 27 | sqrt = Math.sqrt, 28 | sin = Math.sin, 29 | cos = Math.cos, 30 | PI = Math.PI, 31 | c1 = 1.70158, 32 | c2 = c1 * 1.525, 33 | c3 = c1 + 1, 34 | c4 = ( 2 * PI ) / 3, 35 | c5 = ( 2 * PI ) / 4.5; 36 | 37 | // x is the fraction of animation progress, in the range 0..1 38 | function bounceOut(x) { 39 | var n1 = 7.5625, 40 | d1 = 2.75; 41 | if ( x < 1/d1 ) { 42 | return n1*x*x; 43 | } else if ( x < 2/d1 ) { 44 | return n1*(x-=(1.5/d1))*x + .75; 45 | } else if ( x < 2.5/d1 ) { 46 | return n1*(x-=(2.25/d1))*x + .9375; 47 | } else { 48 | return n1*(x-=(2.625/d1))*x + .984375; 49 | } 50 | } 51 | 52 | $.extend( $.easing, 53 | { 54 | def: 'easeOutQuad', 55 | swing: function (x) { 56 | return $.easing[$.easing.def](x); 57 | }, 58 | easeInQuad: function (x) { 59 | return x * x; 60 | }, 61 | easeOutQuad: function (x) { 62 | return 1 - ( 1 - x ) * ( 1 - x ); 63 | }, 64 | easeInOutQuad: function (x) { 65 | return x < 0.5 ? 66 | 2 * x * x : 67 | 1 - pow( -2 * x + 2, 2 ) / 2; 68 | }, 69 | easeInCubic: function (x) { 70 | return x * x * x; 71 | }, 72 | easeOutCubic: function (x) { 73 | return 1 - pow( 1 - x, 3 ); 74 | }, 75 | easeInOutCubic: function (x) { 76 | return x < 0.5 ? 77 | 4 * x * x * x : 78 | 1 - pow( -2 * x + 2, 3 ) / 2; 79 | }, 80 | easeInQuart: function (x) { 81 | return x * x * x * x; 82 | }, 83 | easeOutQuart: function (x) { 84 | return 1 - pow( 1 - x, 4 ); 85 | }, 86 | easeInOutQuart: function (x) { 87 | return x < 0.5 ? 88 | 8 * x * x * x * x : 89 | 1 - pow( -2 * x + 2, 4 ) / 2; 90 | }, 91 | easeInQuint: function (x) { 92 | return x * x * x * x * x; 93 | }, 94 | easeOutQuint: function (x) { 95 | return 1 - pow( 1 - x, 5 ); 96 | }, 97 | easeInOutQuint: function (x) { 98 | return x < 0.5 ? 99 | 16 * x * x * x * x * x : 100 | 1 - pow( -2 * x + 2, 5 ) / 2; 101 | }, 102 | easeInSine: function (x) { 103 | return 1 - cos( x * PI/2 ); 104 | }, 105 | easeOutSine: function (x) { 106 | return sin( x * PI/2 ); 107 | }, 108 | easeInOutSine: function (x) { 109 | return -( cos( PI * x ) - 1 ) / 2; 110 | }, 111 | easeInExpo: function (x) { 112 | return x === 0 ? 0 : pow( 2, 10 * x - 10 ); 113 | }, 114 | easeOutExpo: function (x) { 115 | return x === 1 ? 1 : 1 - pow( 2, -10 * x ); 116 | }, 117 | easeInOutExpo: function (x) { 118 | return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ? 119 | pow( 2, 20 * x - 10 ) / 2 : 120 | ( 2 - pow( 2, -20 * x + 10 ) ) / 2; 121 | }, 122 | easeInCirc: function (x) { 123 | return 1 - sqrt( 1 - pow( x, 2 ) ); 124 | }, 125 | easeOutCirc: function (x) { 126 | return sqrt( 1 - pow( x - 1, 2 ) ); 127 | }, 128 | easeInOutCirc: function (x) { 129 | return x < 0.5 ? 130 | ( 1 - sqrt( 1 - pow( 2 * x, 2 ) ) ) / 2 : 131 | ( sqrt( 1 - pow( -2 * x + 2, 2 ) ) + 1 ) / 2; 132 | }, 133 | easeInElastic: function (x) { 134 | return x === 0 ? 0 : x === 1 ? 1 : 135 | -pow( 2, 10 * x - 10 ) * sin( ( x * 10 - 10.75 ) * c4 ); 136 | }, 137 | easeOutElastic: function (x) { 138 | return x === 0 ? 0 : x === 1 ? 1 : 139 | pow( 2, -10 * x ) * sin( ( x * 10 - 0.75 ) * c4 ) + 1; 140 | }, 141 | easeInOutElastic: function (x) { 142 | return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ? 143 | -( pow( 2, 20 * x - 10 ) * sin( ( 20 * x - 11.125 ) * c5 )) / 2 : 144 | pow( 2, -20 * x + 10 ) * sin( ( 20 * x - 11.125 ) * c5 ) / 2 + 1; 145 | }, 146 | easeInBack: function (x) { 147 | return c3 * x * x * x - c1 * x * x; 148 | }, 149 | easeOutBack: function (x) { 150 | return 1 + c3 * pow( x - 1, 3 ) + c1 * pow( x - 1, 2 ); 151 | }, 152 | easeInOutBack: function (x) { 153 | return x < 0.5 ? 154 | ( pow( 2 * x, 2 ) * ( ( c2 + 1 ) * 2 * x - c2 ) ) / 2 : 155 | ( pow( 2 * x - 2, 2 ) *( ( c2 + 1 ) * ( x * 2 - 2 ) + c2 ) + 2 ) / 2; 156 | }, 157 | easeInBounce: function (x) { 158 | return 1 - bounceOut( 1 - x ); 159 | }, 160 | easeOutBounce: bounceOut, 161 | easeInOutBounce: function (x) { 162 | return x < 0.5 ? 163 | ( 1 - bounceOut( 1 - 2 * x ) ) / 2 : 164 | ( 1 + bounceOut( 2 * x - 1 ) ) / 2; 165 | } 166 | }); 167 | 168 | }); 169 | -------------------------------------------------------------------------------- /public/lib/easing/easing.min.js: -------------------------------------------------------------------------------- 1 | !function(n){"function"==typeof define&&define.amd?define(["jquery"],function(e){return n(e)}):"object"==typeof module&&"object"==typeof module.exports?exports=n(require("jquery")):n(jQuery)}(function(n){function e(n){var e=7.5625,t=2.75;return n<1/t?e*n*n:n<2/t?e*(n-=1.5/t)*n+.75:n<2.5/t?e*(n-=2.25/t)*n+.9375:e*(n-=2.625/t)*n+.984375}void 0!==n.easing&&(n.easing.jswing=n.easing.swing);var t=Math.pow,u=Math.sqrt,r=Math.sin,i=Math.cos,a=Math.PI,c=1.70158,o=1.525*c,s=2*a/3,f=2*a/4.5;n.extend(n.easing,{def:"easeOutQuad",swing:function(e){return n.easing[n.easing.def](e)},easeInQuad:function(n){return n*n},easeOutQuad:function(n){return 1-(1-n)*(1-n)},easeInOutQuad:function(n){return n<.5?2*n*n:1-t(-2*n+2,2)/2},easeInCubic:function(n){return n*n*n},easeOutCubic:function(n){return 1-t(1-n,3)},easeInOutCubic:function(n){return n<.5?4*n*n*n:1-t(-2*n+2,3)/2},easeInQuart:function(n){return n*n*n*n},easeOutQuart:function(n){return 1-t(1-n,4)},easeInOutQuart:function(n){return n<.5?8*n*n*n*n:1-t(-2*n+2,4)/2},easeInQuint:function(n){return n*n*n*n*n},easeOutQuint:function(n){return 1-t(1-n,5)},easeInOutQuint:function(n){return n<.5?16*n*n*n*n*n:1-t(-2*n+2,5)/2},easeInSine:function(n){return 1-i(n*a/2)},easeOutSine:function(n){return r(n*a/2)},easeInOutSine:function(n){return-(i(a*n)-1)/2},easeInExpo:function(n){return 0===n?0:t(2,10*n-10)},easeOutExpo:function(n){return 1===n?1:1-t(2,-10*n)},easeInOutExpo:function(n){return 0===n?0:1===n?1:n<.5?t(2,20*n-10)/2:(2-t(2,-20*n+10))/2},easeInCirc:function(n){return 1-u(1-t(n,2))},easeOutCirc:function(n){return u(1-t(n-1,2))},easeInOutCirc:function(n){return n<.5?(1-u(1-t(2*n,2)))/2:(u(1-t(-2*n+2,2))+1)/2},easeInElastic:function(n){return 0===n?0:1===n?1:-t(2,10*n-10)*r((10*n-10.75)*s)},easeOutElastic:function(n){return 0===n?0:1===n?1:t(2,-10*n)*r((10*n-.75)*s)+1},easeInOutElastic:function(n){return 0===n?0:1===n?1:n<.5?-(t(2,20*n-10)*r((20*n-11.125)*f))/2:t(2,-20*n+10)*r((20*n-11.125)*f)/2+1},easeInBack:function(n){return(c+1)*n*n*n-c*n*n},easeOutBack:function(n){return 1+(c+1)*t(n-1,3)+c*t(n-1,2)},easeInOutBack:function(n){return n<.5?t(2*n,2)*(7.189819*n-o)/2:(t(2*n-2,2)*((o+1)*(2*n-2)+o)+2)/2},easeInBounce:function(n){return 1-e(1-n)},easeOutBounce:e,easeInOutBounce:function(n){return n<.5?(1-e(1-2*n))/2:(1+e(2*n-1))/2}})}); 2 | -------------------------------------------------------------------------------- /public/lib/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/public/lib/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /public/lib/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/public/lib/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /public/lib/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/public/lib/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /public/lib/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/public/lib/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /public/lib/font-awesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/public/lib/font-awesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /public/lib/ionicons/fonts/ionicons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/public/lib/ionicons/fonts/ionicons.eot -------------------------------------------------------------------------------- /public/lib/ionicons/fonts/ionicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/public/lib/ionicons/fonts/ionicons.ttf -------------------------------------------------------------------------------- /public/lib/ionicons/fonts/ionicons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/public/lib/ionicons/fonts/ionicons.woff -------------------------------------------------------------------------------- /public/lib/jquery/jquery-migrate.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery Migrate v3.0.0 | (c) jQuery Foundation and other contributors | jquery.org/license */ 2 | "undefined"==typeof jQuery.migrateMute&&(jQuery.migrateMute=!0),function(a,b){"use strict";function c(c){var d=b.console;e[c]||(e[c]=!0,a.migrateWarnings.push(c),d&&d.warn&&!a.migrateMute&&(d.warn("JQMIGRATE: "+c),a.migrateTrace&&d.trace&&d.trace()))}function d(a,b,d,e){Object.defineProperty(a,b,{configurable:!0,enumerable:!0,get:function(){return c(e),d}})}a.migrateVersion="3.0.0",function(){var c=b.console&&b.console.log&&function(){b.console.log.apply(b.console,arguments)},d=/^[12]\./;c&&(a&&!d.test(a.fn.jquery)||c("JQMIGRATE: jQuery 3.0.0+ REQUIRED"),a.migrateWarnings&&c("JQMIGRATE: Migrate plugin loaded multiple times"),c("JQMIGRATE: Migrate is installed"+(a.migrateMute?"":" with logging active")+", version "+a.migrateVersion))}();var e={};a.migrateWarnings=[],void 0===a.migrateTrace&&(a.migrateTrace=!0),a.migrateReset=function(){e={},a.migrateWarnings.length=0},"BackCompat"===document.compatMode&&c("jQuery is not compatible with Quirks Mode");var f=a.fn.init,g=a.isNumeric,h=a.find,i=/\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/,j=/\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/g;a.fn.init=function(a){var b=Array.prototype.slice.call(arguments);return"string"==typeof a&&"#"===a&&(c("jQuery( '#' ) is not a valid selector"),b[0]=[]),f.apply(this,b)},a.fn.init.prototype=a.fn,a.find=function(a){var b=Array.prototype.slice.call(arguments);if("string"==typeof a&&i.test(a))try{document.querySelector(a)}catch(d){a=a.replace(j,function(a,b,c,d){return"["+b+c+'"'+d+'"]'});try{document.querySelector(a),c("Attribute selector with '#' must be quoted: "+b[0]),b[0]=a}catch(e){c("Attribute selector with '#' was not fixed: "+b[0])}}return h.apply(this,b)};var k;for(k in h)Object.prototype.hasOwnProperty.call(h,k)&&(a.find[k]=h[k]);a.fn.size=function(){return c("jQuery.fn.size() is deprecated; use the .length property"),this.length},a.parseJSON=function(){return c("jQuery.parseJSON is deprecated; use JSON.parse"),JSON.parse.apply(null,arguments)},a.isNumeric=function(b){function d(b){var c=b&&b.toString();return!a.isArray(b)&&c-parseFloat(c)+1>=0}var e=g(b),f=d(b);return e!==f&&c("jQuery.isNumeric() should not be called on constructed objects"),f},d(a,"unique",a.uniqueSort,"jQuery.unique is deprecated, use jQuery.uniqueSort"),d(a.expr,"filters",a.expr.pseudos,"jQuery.expr.filters is now jQuery.expr.pseudos"),d(a.expr,":",a.expr.pseudos,'jQuery.expr[":"] is now jQuery.expr.pseudos');var l=a.ajax;a.ajax=function(){var a=l.apply(this,arguments);return a.promise&&(d(a,"success",a.done,"jQXHR.success is deprecated and removed"),d(a,"error",a.fail,"jQXHR.error is deprecated and removed"),d(a,"complete",a.always,"jQXHR.complete is deprecated and removed")),a};var m=a.fn.removeAttr,n=a.fn.toggleClass,o=/\S+/g;a.fn.removeAttr=function(b){var d=this;return a.each(b.match(o),function(b,e){a.expr.match.bool.test(e)&&(c("jQuery.fn.removeAttr no longer sets boolean properties: "+e),d.prop(e,!1))}),m.apply(this,arguments)},a.fn.toggleClass=function(b){return void 0!==b&&"boolean"!=typeof b?n.apply(this,arguments):(c("jQuery.fn.toggleClass( boolean ) is deprecated"),this.each(function(){var c=this.getAttribute&&this.getAttribute("class")||"";c&&a.data(this,"__className__",c),this.setAttribute&&this.setAttribute("class",c||b===!1?"":a.data(this,"__className__")||"")}))};var p=!1;a.swap&&a.each(["height","width","reliableMarginRight"],function(b,c){var d=a.cssHooks[c]&&a.cssHooks[c].get;d&&(a.cssHooks[c].get=function(){var a;return p=!0,a=d.apply(this,arguments),p=!1,a})}),a.swap=function(a,b,d,e){var f,g,h={};p||c("jQuery.swap() is undocumented and deprecated");for(g in b)h[g]=a.style[g],a.style[g]=b[g];f=d.apply(a,e||[]);for(g in b)a.style[g]=h[g];return f};var q=a.data;a.data=function(b,d,e){var f;return d&&d!==a.camelCase(d)&&(f=a.hasData(b)&&q.call(this,b),f&&d in f)?(c("jQuery.data() always sets/gets camelCased names: "+d),arguments.length>2&&(f[d]=e),f[d]):q.apply(this,arguments)};var r=a.Tween.prototype.run;a.Tween.prototype.run=function(b){a.easing[this.easing].length>1&&(c('easing function "jQuery.easing.'+this.easing.toString()+'" should use only first argument'),a.easing[this.easing]=a.easing[this.easing].bind(a.easing,b,this.options.duration*b,0,1,this.options.duration)),r.apply(this,arguments)};var s=a.fn.load,t=a.event.fix;a.event.props=[],a.event.fixHooks={},a.event.fix=function(b){var d,e=b.type,f=this.fixHooks[e],g=a.event.props;if(g.length)for(c("jQuery.event.props are deprecated and removed: "+g.join());g.length;)a.event.addProp(g.pop());if(f&&!f._migrated_&&(f._migrated_=!0,c("jQuery.event.fixHooks are deprecated and removed: "+e),(g=f.props)&&g.length))for(;g.length;)a.event.addProp(g.pop());return d=t.call(this,b),f&&f.filter?f.filter(d,b):d},a.each(["load","unload","error"],function(b,d){a.fn[d]=function(){var a=Array.prototype.slice.call(arguments,0);return"load"===d&&"string"==typeof a[0]?s.apply(this,a):(c("jQuery.fn."+d+"() is deprecated"),a.splice(0,0,d),arguments.length?this.on.apply(this,a):(this.triggerHandler.apply(this,a),this))}}),a(function(){a(document).triggerHandler("ready")}),a.event.special.ready={setup:function(){this===document&&c("'ready' event is deprecated")}},a.fn.extend({bind:function(a,b,d){return c("jQuery.fn.bind() is deprecated"),this.on(a,null,b,d)},unbind:function(a,b){return c("jQuery.fn.unbind() is deprecated"),this.off(a,null,b)},delegate:function(a,b,d,e){return c("jQuery.fn.delegate() is deprecated"),this.on(b,a,d,e)},undelegate:function(a,b,d){return c("jQuery.fn.undelegate() is deprecated"),1===arguments.length?this.off(a,"**"):this.off(b,a||"**",d)}});var u=a.fn.offset;a.fn.offset=function(){var b,d=this[0],e={top:0,left:0};return d&&d.nodeType?(b=(d.ownerDocument||document).documentElement,a.contains(b,d)?u.apply(this,arguments):(c("jQuery.fn.offset() requires an element connected to a document"),e)):(c("jQuery.fn.offset() requires a valid DOM element"),e)};var v=a.param;a.param=function(b,d){var e=a.ajaxSettings&&a.ajaxSettings.traditional;return void 0===d&&e&&(c("jQuery.param() no longer uses jQuery.ajaxSettings.traditional"),d=e),v.call(this,b,d)};var w=a.fn.andSelf||a.fn.addBack;a.fn.andSelf=function(){return c("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()"),w.apply(this,arguments)};var x=a.Deferred,y=[["resolve","done",a.Callbacks("once memory"),a.Callbacks("once memory"),"resolved"],["reject","fail",a.Callbacks("once memory"),a.Callbacks("once memory"),"rejected"],["notify","progress",a.Callbacks("memory"),a.Callbacks("memory")]];a.Deferred=function(b){var d=x(),e=d.promise();return d.pipe=e.pipe=function(){var b=arguments;return c("deferred.pipe() is deprecated"),a.Deferred(function(c){a.each(y,function(f,g){var h=a.isFunction(b[f])&&b[f];d[g[1]](function(){var b=h&&h.apply(this,arguments);b&&a.isFunction(b.promise)?b.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[g[0]+"With"](this===e?c.promise():this,h?[b]:arguments)})}),b=null}).promise()},b&&b.call(d,d),d}}(jQuery,window); -------------------------------------------------------------------------------- /public/lib/lightbox/css/lightbox.css: -------------------------------------------------------------------------------- 1 | html.lb-disable-scrolling { 2 | overflow: hidden; 3 | /* Position fixed required for iOS. Just putting overflow: hidden; on the body is not enough. */ 4 | position: fixed; 5 | height: 100vh; 6 | width: 100vw; 7 | } 8 | 9 | .lightboxOverlay { 10 | position: absolute; 11 | top: 0; 12 | left: 0; 13 | z-index: 9999; 14 | background-color: black; 15 | filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80); 16 | opacity: 0.8; 17 | display: none; 18 | } 19 | 20 | .lightbox { 21 | position: absolute; 22 | left: 0; 23 | width: 100%; 24 | z-index: 10000; 25 | text-align: center; 26 | line-height: 0; 27 | font-weight: normal; 28 | } 29 | 30 | .lightbox .lb-image { 31 | display: block; 32 | height: auto; 33 | max-width: inherit; 34 | max-height: none; 35 | border-radius: 3px; 36 | 37 | /* Image border */ 38 | border: 4px solid white; 39 | } 40 | 41 | .lightbox a img { 42 | border: none; 43 | } 44 | 45 | .lb-outerContainer { 46 | position: relative; 47 | *zoom: 1; 48 | width: 250px; 49 | height: 250px; 50 | margin: 0 auto; 51 | border-radius: 4px; 52 | 53 | /* Background color behind image. 54 | This is visible during transitions. */ 55 | background-color: white; 56 | } 57 | 58 | .lb-outerContainer:after { 59 | content: ""; 60 | display: table; 61 | clear: both; 62 | } 63 | 64 | .lb-loader { 65 | position: absolute; 66 | top: 43%; 67 | left: 0; 68 | height: 25%; 69 | width: 100%; 70 | text-align: center; 71 | line-height: 0; 72 | } 73 | 74 | .lb-cancel { 75 | display: block; 76 | width: 32px; 77 | height: 32px; 78 | margin: 0 auto; 79 | background: url(../images/loading.gif) no-repeat; 80 | } 81 | 82 | .lb-nav { 83 | position: absolute; 84 | top: 0; 85 | left: 0; 86 | height: 100%; 87 | width: 100%; 88 | z-index: 10; 89 | } 90 | 91 | .lb-container > .nav { 92 | left: 0; 93 | } 94 | 95 | .lb-nav a { 96 | outline: none; 97 | background-image: url('data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=='); 98 | } 99 | 100 | .lb-prev, .lb-next { 101 | height: 100%; 102 | cursor: pointer; 103 | display: block; 104 | } 105 | 106 | .lb-nav a.lb-prev { 107 | width: 34%; 108 | left: 0; 109 | float: left; 110 | background: url(../images/prev.png) left 48% no-repeat; 111 | filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); 112 | opacity: 0; 113 | -webkit-transition: opacity 0.6s; 114 | -moz-transition: opacity 0.6s; 115 | -o-transition: opacity 0.6s; 116 | transition: opacity 0.6s; 117 | } 118 | 119 | .lb-nav a.lb-prev:hover { 120 | filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); 121 | opacity: 1; 122 | } 123 | 124 | .lb-nav a.lb-next { 125 | width: 64%; 126 | right: 0; 127 | float: right; 128 | background: url(../images/next.png) right 48% no-repeat; 129 | filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); 130 | opacity: 0; 131 | -webkit-transition: opacity 0.6s; 132 | -moz-transition: opacity 0.6s; 133 | -o-transition: opacity 0.6s; 134 | transition: opacity 0.6s; 135 | } 136 | 137 | .lb-nav a.lb-next:hover { 138 | filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); 139 | opacity: 1; 140 | } 141 | 142 | .lb-dataContainer { 143 | margin: 0 auto; 144 | padding-top: 5px; 145 | *zoom: 1; 146 | width: 100%; 147 | border-bottom-left-radius: 4px; 148 | border-bottom-right-radius: 4px; 149 | } 150 | 151 | .lb-dataContainer:after { 152 | content: ""; 153 | display: table; 154 | clear: both; 155 | } 156 | 157 | .lb-data { 158 | padding: 0 4px; 159 | color: #ccc; 160 | } 161 | 162 | .lb-data .lb-details { 163 | width: 85%; 164 | float: left; 165 | text-align: left; 166 | line-height: 1.1em; 167 | } 168 | 169 | .lb-data .lb-caption { 170 | font-size: 13px; 171 | font-weight: bold; 172 | line-height: 1em; 173 | } 174 | 175 | .lb-data .lb-caption a { 176 | color: #4ae; 177 | } 178 | 179 | .lb-data .lb-number { 180 | display: block; 181 | clear: left; 182 | padding-bottom: 1em; 183 | font-size: 12px; 184 | color: #999999; 185 | } 186 | 187 | .lb-data .lb-close { 188 | display: block; 189 | float: right; 190 | width: 30px; 191 | height: 30px; 192 | background: url(../images/close.png) top right no-repeat; 193 | text-align: right; 194 | outline: none; 195 | filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=70); 196 | opacity: 0.7; 197 | -webkit-transition: opacity 0.2s; 198 | -moz-transition: opacity 0.2s; 199 | -o-transition: opacity 0.2s; 200 | transition: opacity 0.2s; 201 | } 202 | 203 | .lb-data .lb-close:hover { 204 | cursor: pointer; 205 | filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); 206 | opacity: 1; 207 | } 208 | -------------------------------------------------------------------------------- /public/lib/lightbox/css/lightbox.min.css: -------------------------------------------------------------------------------- 1 | .lb-loader,.lightbox{text-align:center;line-height:0}.lb-dataContainer:after,.lb-outerContainer:after{content:"";clear:both}html.lb-disable-scrolling{overflow:hidden;position:fixed;height:100vh;width:100vw}.lightboxOverlay{position:absolute;top:0;left:0;z-index:9999;background-color:#000;filter:alpha(Opacity=80);opacity:.8;display:none}.lightbox{position:absolute;left:0;width:100%;z-index:10000;font-weight:400}.lightbox .lb-image{display:block;height:auto;max-width:inherit;max-height:none;border-radius:3px;border:4px solid #fff}.lightbox a img{border:none}.lb-outerContainer{position:relative;width:250px;height:250px;margin:0 auto;border-radius:4px;background-color:#fff}.lb-loader,.lb-nav{position:absolute;left:0}.lb-outerContainer:after{display:table}.lb-loader{top:43%;height:25%;width:100%}.lb-cancel{display:block;width:32px;height:32px;margin:0 auto;background:url(../images/loading.gif) no-repeat}.lb-nav{top:0;height:100%;width:100%;z-index:10}.lb-container>.nav{left:0}.lb-nav a{outline:0;background-image:url(data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==)}.lb-next,.lb-prev{height:100%;cursor:pointer;display:block}.lb-nav a.lb-prev{width:34%;left:0;float:left;background:url(../images/prev.png) left 48% no-repeat;filter:alpha(Opacity=0);opacity:0;-webkit-transition:opacity .6s;-moz-transition:opacity .6s;-o-transition:opacity .6s;transition:opacity .6s}.lb-nav a.lb-prev:hover{filter:alpha(Opacity=100);opacity:1}.lb-nav a.lb-next{width:64%;right:0;float:right;background:url(../images/next.png) right 48% no-repeat;filter:alpha(Opacity=0);opacity:0;-webkit-transition:opacity .6s;-moz-transition:opacity .6s;-o-transition:opacity .6s;transition:opacity .6s}.lb-nav a.lb-next:hover{filter:alpha(Opacity=100);opacity:1}.lb-dataContainer{margin:0 auto;padding-top:5px;width:100%;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.lb-dataContainer:after{display:table}.lb-data{padding:0 4px;color:#ccc}.lb-data .lb-details{width:85%;float:left;text-align:left;line-height:1.1em}.lb-data .lb-caption{font-size:13px;font-weight:700;line-height:1em}.lb-data .lb-caption a{color:#4ae}.lb-data .lb-number{display:block;clear:left;padding-bottom:1em;font-size:12px;color:#999}.lb-data .lb-close{display:block;float:right;width:30px;height:30px;background:url(../images/close.png) top right no-repeat;text-align:right;outline:0;filter:alpha(Opacity=70);opacity:.7;-webkit-transition:opacity .2s;-moz-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}.lb-data .lb-close:hover{cursor:pointer;filter:alpha(Opacity=100);opacity:1} -------------------------------------------------------------------------------- /public/lib/lightbox/images/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/public/lib/lightbox/images/close.png -------------------------------------------------------------------------------- /public/lib/lightbox/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/public/lib/lightbox/images/loading.gif -------------------------------------------------------------------------------- /public/lib/lightbox/images/next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/public/lib/lightbox/images/next.png -------------------------------------------------------------------------------- /public/lib/lightbox/images/prev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/public/lib/lightbox/images/prev.png -------------------------------------------------------------------------------- /public/lib/lightbox/js/lightbox.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Lightbox v2.10.0 3 | * by Lokesh Dhakar 4 | * 5 | * More info: 6 | * http://lokeshdhakar.com/projects/lightbox2/ 7 | * 8 | * Copyright 2007, 2018 Lokesh Dhakar 9 | * Released under the MIT license 10 | * https://github.com/lokesh/lightbox2/blob/master/LICENSE 11 | * 12 | * @preserve 13 | */ 14 | 15 | // Uses Node, AMD or browser globals to create a module. 16 | (function (root, factory) { 17 | if (typeof define === 'function' && define.amd) { 18 | // AMD. Register as an anonymous module. 19 | define(['jquery'], factory); 20 | } else if (typeof exports === 'object') { 21 | // Node. Does not work with strict CommonJS, but 22 | // only CommonJS-like environments that support module.exports, 23 | // like Node. 24 | module.exports = factory(require('jquery')); 25 | } else { 26 | // Browser globals (root is window) 27 | root.lightbox = factory(root.jQuery); 28 | } 29 | }(this, function ($) { 30 | 31 | function Lightbox(options) { 32 | this.album = []; 33 | this.currentImageIndex = void 0; 34 | this.init(); 35 | 36 | // options 37 | this.options = $.extend({}, this.constructor.defaults); 38 | this.option(options); 39 | } 40 | 41 | // Descriptions of all options available on the demo site: 42 | // http://lokeshdhakar.com/projects/lightbox2/index.html#options 43 | Lightbox.defaults = { 44 | albumLabel: 'Image %1 of %2', 45 | alwaysShowNavOnTouchDevices: false, 46 | fadeDuration: 600, 47 | fitImagesInViewport: true, 48 | imageFadeDuration: 600, 49 | // maxWidth: 800, 50 | // maxHeight: 600, 51 | positionFromTop: 50, 52 | resizeDuration: 700, 53 | showImageNumberLabel: true, 54 | wrapAround: false, 55 | disableScrolling: false, 56 | /* 57 | Sanitize Title 58 | If the caption data is trusted, for example you are hardcoding it in, then leave this to false. 59 | This will free you to add html tags, such as links, in the caption. 60 | 61 | If the caption data is user submitted or from some other untrusted source, then set this to true 62 | to prevent xss and other injection attacks. 63 | */ 64 | sanitizeTitle: false 65 | }; 66 | 67 | Lightbox.prototype.option = function(options) { 68 | $.extend(this.options, options); 69 | }; 70 | 71 | Lightbox.prototype.imageCountLabel = function(currentImageNum, totalImages) { 72 | return this.options.albumLabel.replace(/%1/g, currentImageNum).replace(/%2/g, totalImages); 73 | }; 74 | 75 | Lightbox.prototype.init = function() { 76 | var self = this; 77 | // Both enable and build methods require the body tag to be in the DOM. 78 | $(document).ready(function() { 79 | self.enable(); 80 | self.build(); 81 | }); 82 | }; 83 | 84 | // Loop through anchors and areamaps looking for either data-lightbox attributes or rel attributes 85 | // that contain 'lightbox'. When these are clicked, start lightbox. 86 | Lightbox.prototype.enable = function() { 87 | var self = this; 88 | $('body').on('click', 'a[rel^=lightbox], area[rel^=lightbox], a[data-lightbox], area[data-lightbox]', function(event) { 89 | self.start($(event.currentTarget)); 90 | return false; 91 | }); 92 | }; 93 | 94 | // Build html for the lightbox and the overlay. 95 | // Attach event handlers to the new DOM elements. click click click 96 | Lightbox.prototype.build = function() { 97 | if ($('#lightbox').length > 0) { 98 | return; 99 | } 100 | 101 | var self = this; 102 | $('
').appendTo($('body')); 103 | 104 | // Cache jQuery objects 105 | this.$lightbox = $('#lightbox'); 106 | this.$overlay = $('#lightboxOverlay'); 107 | this.$outerContainer = this.$lightbox.find('.lb-outerContainer'); 108 | this.$container = this.$lightbox.find('.lb-container'); 109 | this.$image = this.$lightbox.find('.lb-image'); 110 | this.$nav = this.$lightbox.find('.lb-nav'); 111 | 112 | // Store css values for future lookup 113 | this.containerPadding = { 114 | top: parseInt(this.$container.css('padding-top'), 10), 115 | right: parseInt(this.$container.css('padding-right'), 10), 116 | bottom: parseInt(this.$container.css('padding-bottom'), 10), 117 | left: parseInt(this.$container.css('padding-left'), 10) 118 | }; 119 | 120 | this.imageBorderWidth = { 121 | top: parseInt(this.$image.css('border-top-width'), 10), 122 | right: parseInt(this.$image.css('border-right-width'), 10), 123 | bottom: parseInt(this.$image.css('border-bottom-width'), 10), 124 | left: parseInt(this.$image.css('border-left-width'), 10) 125 | }; 126 | 127 | // Attach event handlers to the newly minted DOM elements 128 | this.$overlay.hide().on('click', function() { 129 | self.end(); 130 | return false; 131 | }); 132 | 133 | this.$lightbox.hide().on('click', function(event) { 134 | if ($(event.target).attr('id') === 'lightbox') { 135 | self.end(); 136 | } 137 | return false; 138 | }); 139 | 140 | this.$outerContainer.on('click', function(event) { 141 | if ($(event.target).attr('id') === 'lightbox') { 142 | self.end(); 143 | } 144 | return false; 145 | }); 146 | 147 | this.$lightbox.find('.lb-prev').on('click', function() { 148 | if (self.currentImageIndex === 0) { 149 | self.changeImage(self.album.length - 1); 150 | } else { 151 | self.changeImage(self.currentImageIndex - 1); 152 | } 153 | return false; 154 | }); 155 | 156 | this.$lightbox.find('.lb-next').on('click', function() { 157 | if (self.currentImageIndex === self.album.length - 1) { 158 | self.changeImage(0); 159 | } else { 160 | self.changeImage(self.currentImageIndex + 1); 161 | } 162 | return false; 163 | }); 164 | 165 | /* 166 | Show context menu for image on right-click 167 | 168 | There is a div containing the navigation that spans the entire image and lives above of it. If 169 | you right-click, you are right clicking this div and not the image. This prevents users from 170 | saving the image or using other context menu actions with the image. 171 | 172 | To fix this, when we detect the right mouse button is pressed down, but not yet clicked, we 173 | set pointer-events to none on the nav div. This is so that the upcoming right-click event on 174 | the next mouseup will bubble down to the image. Once the right-click/contextmenu event occurs 175 | we set the pointer events back to auto for the nav div so it can capture hover and left-click 176 | events as usual. 177 | */ 178 | this.$nav.on('mousedown', function(event) { 179 | if (event.which === 3) { 180 | self.$nav.css('pointer-events', 'none'); 181 | 182 | self.$lightbox.one('contextmenu', function() { 183 | setTimeout(function() { 184 | this.$nav.css('pointer-events', 'auto'); 185 | }.bind(self), 0); 186 | }); 187 | } 188 | }); 189 | 190 | 191 | this.$lightbox.find('.lb-loader, .lb-close').on('click', function() { 192 | self.end(); 193 | return false; 194 | }); 195 | }; 196 | 197 | // Show overlay and lightbox. If the image is part of a set, add siblings to album array. 198 | Lightbox.prototype.start = function($link) { 199 | var self = this; 200 | var $window = $(window); 201 | 202 | $window.on('resize', $.proxy(this.sizeOverlay, this)); 203 | 204 | $('select, object, embed').css({ 205 | visibility: 'hidden' 206 | }); 207 | 208 | this.sizeOverlay(); 209 | 210 | this.album = []; 211 | var imageNumber = 0; 212 | 213 | function addToAlbum($link) { 214 | self.album.push({ 215 | alt: $link.attr('data-alt'), 216 | link: $link.attr('href'), 217 | title: $link.attr('data-title') || $link.attr('title') 218 | }); 219 | } 220 | 221 | // Support both data-lightbox attribute and rel attribute implementations 222 | var dataLightboxValue = $link.attr('data-lightbox'); 223 | var $links; 224 | 225 | if (dataLightboxValue) { 226 | $links = $($link.prop('tagName') + '[data-lightbox="' + dataLightboxValue + '"]'); 227 | for (var i = 0; i < $links.length; i = ++i) { 228 | addToAlbum($($links[i])); 229 | if ($links[i] === $link[0]) { 230 | imageNumber = i; 231 | } 232 | } 233 | } else { 234 | if ($link.attr('rel') === 'lightbox') { 235 | // If image is not part of a set 236 | addToAlbum($link); 237 | } else { 238 | // If image is part of a set 239 | $links = $($link.prop('tagName') + '[rel="' + $link.attr('rel') + '"]'); 240 | for (var j = 0; j < $links.length; j = ++j) { 241 | addToAlbum($($links[j])); 242 | if ($links[j] === $link[0]) { 243 | imageNumber = j; 244 | } 245 | } 246 | } 247 | } 248 | 249 | // Position Lightbox 250 | var top = $window.scrollTop() + this.options.positionFromTop; 251 | var left = $window.scrollLeft(); 252 | this.$lightbox.css({ 253 | top: top + 'px', 254 | left: left + 'px' 255 | }).fadeIn(this.options.fadeDuration); 256 | 257 | // Disable scrolling of the page while open 258 | if (this.options.disableScrolling) { 259 | $('html').addClass('lb-disable-scrolling'); 260 | } 261 | 262 | this.changeImage(imageNumber); 263 | }; 264 | 265 | // Hide most UI elements in preparation for the animated resizing of the lightbox. 266 | Lightbox.prototype.changeImage = function(imageNumber) { 267 | var self = this; 268 | 269 | this.disableKeyboardNav(); 270 | var $image = this.$lightbox.find('.lb-image'); 271 | 272 | this.$overlay.fadeIn(this.options.fadeDuration); 273 | 274 | $('.lb-loader').fadeIn('slow'); 275 | this.$lightbox.find('.lb-image, .lb-nav, .lb-prev, .lb-next, .lb-dataContainer, .lb-numbers, .lb-caption').hide(); 276 | 277 | this.$outerContainer.addClass('animating'); 278 | 279 | // When image to show is preloaded, we send the width and height to sizeContainer() 280 | var preloader = new Image(); 281 | preloader.onload = function() { 282 | var $preloader; 283 | var imageHeight; 284 | var imageWidth; 285 | var maxImageHeight; 286 | var maxImageWidth; 287 | var windowHeight; 288 | var windowWidth; 289 | 290 | $image.attr({ 291 | 'alt': self.album[imageNumber].alt, 292 | 'src': self.album[imageNumber].link 293 | }); 294 | 295 | $preloader = $(preloader); 296 | 297 | $image.width(preloader.width); 298 | $image.height(preloader.height); 299 | 300 | if (self.options.fitImagesInViewport) { 301 | // Fit image inside the viewport. 302 | // Take into account the border around the image and an additional 10px gutter on each side. 303 | 304 | windowWidth = $(window).width(); 305 | windowHeight = $(window).height(); 306 | maxImageWidth = windowWidth - self.containerPadding.left - self.containerPadding.right - self.imageBorderWidth.left - self.imageBorderWidth.right - 20; 307 | maxImageHeight = windowHeight - self.containerPadding.top - self.containerPadding.bottom - self.imageBorderWidth.top - self.imageBorderWidth.bottom - 120; 308 | 309 | // Check if image size is larger then maxWidth|maxHeight in settings 310 | if (self.options.maxWidth && self.options.maxWidth < maxImageWidth) { 311 | maxImageWidth = self.options.maxWidth; 312 | } 313 | if (self.options.maxHeight && self.options.maxHeight < maxImageWidth) { 314 | maxImageHeight = self.options.maxHeight; 315 | } 316 | 317 | // Is the current image's width or height is greater than the maxImageWidth or maxImageHeight 318 | // option than we need to size down while maintaining the aspect ratio. 319 | if ((preloader.width > maxImageWidth) || (preloader.height > maxImageHeight)) { 320 | if ((preloader.width / maxImageWidth) > (preloader.height / maxImageHeight)) { 321 | imageWidth = maxImageWidth; 322 | imageHeight = parseInt(preloader.height / (preloader.width / imageWidth), 10); 323 | $image.width(imageWidth); 324 | $image.height(imageHeight); 325 | } else { 326 | imageHeight = maxImageHeight; 327 | imageWidth = parseInt(preloader.width / (preloader.height / imageHeight), 10); 328 | $image.width(imageWidth); 329 | $image.height(imageHeight); 330 | } 331 | } 332 | } 333 | self.sizeContainer($image.width(), $image.height()); 334 | }; 335 | 336 | preloader.src = this.album[imageNumber].link; 337 | this.currentImageIndex = imageNumber; 338 | }; 339 | 340 | // Stretch overlay to fit the viewport 341 | Lightbox.prototype.sizeOverlay = function() { 342 | this.$overlay 343 | .width($(document).width()) 344 | .height($(document).height()); 345 | }; 346 | 347 | // Animate the size of the lightbox to fit the image we are showing 348 | Lightbox.prototype.sizeContainer = function(imageWidth, imageHeight) { 349 | var self = this; 350 | 351 | var oldWidth = this.$outerContainer.outerWidth(); 352 | var oldHeight = this.$outerContainer.outerHeight(); 353 | var newWidth = imageWidth + this.containerPadding.left + this.containerPadding.right + this.imageBorderWidth.left + this.imageBorderWidth.right; 354 | var newHeight = imageHeight + this.containerPadding.top + this.containerPadding.bottom + this.imageBorderWidth.top + this.imageBorderWidth.bottom; 355 | 356 | function postResize() { 357 | self.$lightbox.find('.lb-dataContainer').width(newWidth); 358 | self.$lightbox.find('.lb-prevLink').height(newHeight); 359 | self.$lightbox.find('.lb-nextLink').height(newHeight); 360 | self.showImage(); 361 | } 362 | 363 | if (oldWidth !== newWidth || oldHeight !== newHeight) { 364 | this.$outerContainer.animate({ 365 | width: newWidth, 366 | height: newHeight 367 | }, this.options.resizeDuration, 'swing', function() { 368 | postResize(); 369 | }); 370 | } else { 371 | postResize(); 372 | } 373 | }; 374 | 375 | // Display the image and its details and begin preload neighboring images. 376 | Lightbox.prototype.showImage = function() { 377 | this.$lightbox.find('.lb-loader').stop(true).hide(); 378 | this.$lightbox.find('.lb-image').fadeIn(this.options.imageFadeDuration); 379 | 380 | this.updateNav(); 381 | this.updateDetails(); 382 | this.preloadNeighboringImages(); 383 | this.enableKeyboardNav(); 384 | }; 385 | 386 | // Display previous and next navigation if appropriate. 387 | Lightbox.prototype.updateNav = function() { 388 | // Check to see if the browser supports touch events. If so, we take the conservative approach 389 | // and assume that mouse hover events are not supported and always show prev/next navigation 390 | // arrows in image sets. 391 | var alwaysShowNav = false; 392 | try { 393 | document.createEvent('TouchEvent'); 394 | alwaysShowNav = (this.options.alwaysShowNavOnTouchDevices) ? true : false; 395 | } catch (e) {} 396 | 397 | this.$lightbox.find('.lb-nav').show(); 398 | 399 | if (this.album.length > 1) { 400 | if (this.options.wrapAround) { 401 | if (alwaysShowNav) { 402 | this.$lightbox.find('.lb-prev, .lb-next').css('opacity', '1'); 403 | } 404 | this.$lightbox.find('.lb-prev, .lb-next').show(); 405 | } else { 406 | if (this.currentImageIndex > 0) { 407 | this.$lightbox.find('.lb-prev').show(); 408 | if (alwaysShowNav) { 409 | this.$lightbox.find('.lb-prev').css('opacity', '1'); 410 | } 411 | } 412 | if (this.currentImageIndex < this.album.length - 1) { 413 | this.$lightbox.find('.lb-next').show(); 414 | if (alwaysShowNav) { 415 | this.$lightbox.find('.lb-next').css('opacity', '1'); 416 | } 417 | } 418 | } 419 | } 420 | }; 421 | 422 | // Display caption, image number, and closing button. 423 | Lightbox.prototype.updateDetails = function() { 424 | var self = this; 425 | 426 | // Enable anchor clicks in the injected caption html. 427 | // Thanks Nate Wright for the fix. @https://github.com/NateWr 428 | if (typeof this.album[this.currentImageIndex].title !== 'undefined' && 429 | this.album[this.currentImageIndex].title !== '') { 430 | var $caption = this.$lightbox.find('.lb-caption'); 431 | if (this.options.sanitizeTitle) { 432 | $caption.text(this.album[this.currentImageIndex].title); 433 | } else { 434 | $caption.html(this.album[this.currentImageIndex].title); 435 | } 436 | $caption.fadeIn('fast') 437 | .find('a').on('click', function(event) { 438 | if ($(this).attr('target') !== undefined) { 439 | window.open($(this).attr('href'), $(this).attr('target')); 440 | } else { 441 | location.href = $(this).attr('href'); 442 | } 443 | }); 444 | } 445 | 446 | if (this.album.length > 1 && this.options.showImageNumberLabel) { 447 | var labelText = this.imageCountLabel(this.currentImageIndex + 1, this.album.length); 448 | this.$lightbox.find('.lb-number').text(labelText).fadeIn('fast'); 449 | } else { 450 | this.$lightbox.find('.lb-number').hide(); 451 | } 452 | 453 | this.$outerContainer.removeClass('animating'); 454 | 455 | this.$lightbox.find('.lb-dataContainer').fadeIn(this.options.resizeDuration, function() { 456 | return self.sizeOverlay(); 457 | }); 458 | }; 459 | 460 | // Preload previous and next images in set. 461 | Lightbox.prototype.preloadNeighboringImages = function() { 462 | if (this.album.length > this.currentImageIndex + 1) { 463 | var preloadNext = new Image(); 464 | preloadNext.src = this.album[this.currentImageIndex + 1].link; 465 | } 466 | if (this.currentImageIndex > 0) { 467 | var preloadPrev = new Image(); 468 | preloadPrev.src = this.album[this.currentImageIndex - 1].link; 469 | } 470 | }; 471 | 472 | Lightbox.prototype.enableKeyboardNav = function() { 473 | $(document).on('keyup.keyboard', $.proxy(this.keyboardAction, this)); 474 | }; 475 | 476 | Lightbox.prototype.disableKeyboardNav = function() { 477 | $(document).off('.keyboard'); 478 | }; 479 | 480 | Lightbox.prototype.keyboardAction = function(event) { 481 | var KEYCODE_ESC = 27; 482 | var KEYCODE_LEFTARROW = 37; 483 | var KEYCODE_RIGHTARROW = 39; 484 | 485 | var keycode = event.keyCode; 486 | var key = String.fromCharCode(keycode).toLowerCase(); 487 | if (keycode === KEYCODE_ESC || key.match(/x|o|c/)) { 488 | this.end(); 489 | } else if (key === 'p' || keycode === KEYCODE_LEFTARROW) { 490 | if (this.currentImageIndex !== 0) { 491 | this.changeImage(this.currentImageIndex - 1); 492 | } else if (this.options.wrapAround && this.album.length > 1) { 493 | this.changeImage(this.album.length - 1); 494 | } 495 | } else if (key === 'n' || keycode === KEYCODE_RIGHTARROW) { 496 | if (this.currentImageIndex !== this.album.length - 1) { 497 | this.changeImage(this.currentImageIndex + 1); 498 | } else if (this.options.wrapAround && this.album.length > 1) { 499 | this.changeImage(0); 500 | } 501 | } 502 | }; 503 | 504 | // Closing time. :-( 505 | Lightbox.prototype.end = function() { 506 | this.disableKeyboardNav(); 507 | $(window).off('resize', this.sizeOverlay); 508 | this.$lightbox.fadeOut(this.options.fadeDuration); 509 | this.$overlay.fadeOut(this.options.fadeDuration); 510 | $('select, object, embed').css({ 511 | visibility: 'visible' 512 | }); 513 | if (this.options.disableScrolling) { 514 | $('html').removeClass('lb-disable-scrolling'); 515 | } 516 | }; 517 | 518 | return new Lightbox(); 519 | })); 520 | -------------------------------------------------------------------------------- /public/lib/lightbox/js/lightbox.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Lightbox v2.10.0 3 | * by Lokesh Dhakar 4 | * 5 | * More info: 6 | * http://lokeshdhakar.com/projects/lightbox2/ 7 | * 8 | * Copyright 2007, 2018 Lokesh Dhakar 9 | * Released under the MIT license 10 | * https://github.com/lokesh/lightbox2/blob/master/LICENSE 11 | * 12 | * @preserve 13 | */ 14 | !function(a,b){"function"==typeof define&&define.amd?define(["jquery"],b):"object"==typeof exports?module.exports=b(require("jquery")):a.lightbox=b(a.jQuery)}(this,function(a){function b(b){this.album=[],this.currentImageIndex=void 0,this.init(),this.options=a.extend({},this.constructor.defaults),this.option(b)}return b.defaults={albumLabel:"Image %1 of %2",alwaysShowNavOnTouchDevices:!1,fadeDuration:600,fitImagesInViewport:!0,imageFadeDuration:600,positionFromTop:50,resizeDuration:700,showImageNumberLabel:!0,wrapAround:!1,disableScrolling:!1,sanitizeTitle:!1},b.prototype.option=function(b){a.extend(this.options,b)},b.prototype.imageCountLabel=function(a,b){return this.options.albumLabel.replace(/%1/g,a).replace(/%2/g,b)},b.prototype.init=function(){var b=this;a(document).ready(function(){b.enable(),b.build()})},b.prototype.enable=function(){var b=this;a("body").on("click","a[rel^=lightbox], area[rel^=lightbox], a[data-lightbox], area[data-lightbox]",function(c){return b.start(a(c.currentTarget)),!1})},b.prototype.build=function(){if(!(a("#lightbox").length>0)){var b=this;a('
').appendTo(a("body")),this.$lightbox=a("#lightbox"),this.$overlay=a("#lightboxOverlay"),this.$outerContainer=this.$lightbox.find(".lb-outerContainer"),this.$container=this.$lightbox.find(".lb-container"),this.$image=this.$lightbox.find(".lb-image"),this.$nav=this.$lightbox.find(".lb-nav"),this.containerPadding={top:parseInt(this.$container.css("padding-top"),10),right:parseInt(this.$container.css("padding-right"),10),bottom:parseInt(this.$container.css("padding-bottom"),10),left:parseInt(this.$container.css("padding-left"),10)},this.imageBorderWidth={top:parseInt(this.$image.css("border-top-width"),10),right:parseInt(this.$image.css("border-right-width"),10),bottom:parseInt(this.$image.css("border-bottom-width"),10),left:parseInt(this.$image.css("border-left-width"),10)},this.$overlay.hide().on("click",function(){return b.end(),!1}),this.$lightbox.hide().on("click",function(c){return"lightbox"===a(c.target).attr("id")&&b.end(),!1}),this.$outerContainer.on("click",function(c){return"lightbox"===a(c.target).attr("id")&&b.end(),!1}),this.$lightbox.find(".lb-prev").on("click",function(){return 0===b.currentImageIndex?b.changeImage(b.album.length-1):b.changeImage(b.currentImageIndex-1),!1}),this.$lightbox.find(".lb-next").on("click",function(){return b.currentImageIndex===b.album.length-1?b.changeImage(0):b.changeImage(b.currentImageIndex+1),!1}),this.$nav.on("mousedown",function(a){3===a.which&&(b.$nav.css("pointer-events","none"),b.$lightbox.one("contextmenu",function(){setTimeout(function(){this.$nav.css("pointer-events","auto")}.bind(b),0)}))}),this.$lightbox.find(".lb-loader, .lb-close").on("click",function(){return b.end(),!1})}},b.prototype.start=function(b){function c(a){d.album.push({alt:a.attr("data-alt"),link:a.attr("href"),title:a.attr("data-title")||a.attr("title")})}var d=this,e=a(window);e.on("resize",a.proxy(this.sizeOverlay,this)),a("select, object, embed").css({visibility:"hidden"}),this.sizeOverlay(),this.album=[];var f,g=0,h=b.attr("data-lightbox");if(h){f=a(b.prop("tagName")+'[data-lightbox="'+h+'"]');for(var i=0;ii||e.height>h)&&(e.width/i>e.height/h?(g=i,f=parseInt(e.height/(e.width/g),10),d.width(g),d.height(f)):(f=h,g=parseInt(e.width/(e.height/f),10),d.width(g),d.height(f)))),c.sizeContainer(d.width(),d.height())},e.src=this.album[b].link,this.currentImageIndex=b},b.prototype.sizeOverlay=function(){this.$overlay.width(a(document).width()).height(a(document).height())},b.prototype.sizeContainer=function(a,b){function c(){d.$lightbox.find(".lb-dataContainer").width(g),d.$lightbox.find(".lb-prevLink").height(h),d.$lightbox.find(".lb-nextLink").height(h),d.showImage()}var d=this,e=this.$outerContainer.outerWidth(),f=this.$outerContainer.outerHeight(),g=a+this.containerPadding.left+this.containerPadding.right+this.imageBorderWidth.left+this.imageBorderWidth.right,h=b+this.containerPadding.top+this.containerPadding.bottom+this.imageBorderWidth.top+this.imageBorderWidth.bottom;e!==g||f!==h?this.$outerContainer.animate({width:g,height:h},this.options.resizeDuration,"swing",function(){c()}):c()},b.prototype.showImage=function(){this.$lightbox.find(".lb-loader").stop(!0).hide(),this.$lightbox.find(".lb-image").fadeIn(this.options.imageFadeDuration),this.updateNav(),this.updateDetails(),this.preloadNeighboringImages(),this.enableKeyboardNav()},b.prototype.updateNav=function(){var a=!1;try{document.createEvent("TouchEvent"),a=!!this.options.alwaysShowNavOnTouchDevices}catch(a){}this.$lightbox.find(".lb-nav").show(),this.album.length>1&&(this.options.wrapAround?(a&&this.$lightbox.find(".lb-prev, .lb-next").css("opacity","1"),this.$lightbox.find(".lb-prev, .lb-next").show()):(this.currentImageIndex>0&&(this.$lightbox.find(".lb-prev").show(),a&&this.$lightbox.find(".lb-prev").css("opacity","1")),this.currentImageIndex1&&this.options.showImageNumberLabel){var d=this.imageCountLabel(this.currentImageIndex+1,this.album.length);this.$lightbox.find(".lb-number").text(d).fadeIn("fast")}else this.$lightbox.find(".lb-number").hide();this.$outerContainer.removeClass("animating"),this.$lightbox.find(".lb-dataContainer").fadeIn(this.options.resizeDuration,function(){return b.sizeOverlay()})},b.prototype.preloadNeighboringImages=function(){if(this.album.length>this.currentImageIndex+1){(new Image).src=this.album[this.currentImageIndex+1].link}if(this.currentImageIndex>0){(new Image).src=this.album[this.currentImageIndex-1].link}},b.prototype.enableKeyboardNav=function(){a(document).on("keyup.keyboard",a.proxy(this.keyboardAction,this))},b.prototype.disableKeyboardNav=function(){a(document).off(".keyboard")},b.prototype.keyboardAction=function(a){var b=a.keyCode,c=String.fromCharCode(b).toLowerCase();27===b||c.match(/x|o|c/)?this.end():"p"===c||37===b?0!==this.currentImageIndex?this.changeImage(this.currentImageIndex-1):this.options.wrapAround&&this.album.length>1&&this.changeImage(this.album.length-1):"n"!==c&&39!==b||(this.currentImageIndex!==this.album.length-1?this.changeImage(this.currentImageIndex+1):this.options.wrapAround&&this.album.length>1&&this.changeImage(0))},b.prototype.end=function(){this.disableKeyboardNav(),a(window).off("resize",this.sizeOverlay),this.$lightbox.fadeOut(this.options.fadeDuration),this.$overlay.fadeOut(this.options.fadeDuration),a("select, object, embed").css({visibility:"visible"}),this.options.disableScrolling&&a("html").removeClass("lb-disable-scrolling")},new b}); 15 | //# sourceMappingURL=lightbox.min.map -------------------------------------------------------------------------------- /public/lib/lightbox/links.php: -------------------------------------------------------------------------------- 1 | 'lib/lightbox/css/lightbox.min.css', 4 | 'js' => 'lib/lightbox/js/lightbox.min.js' 5 | ); 6 | ?> 7 | -------------------------------------------------------------------------------- /public/lib/owlcarousel/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014 Owl 2 | Modified work Copyright 2016-2018 David Deutsch 3 | 4 | Permission is hereby granted, free of charge, to any person 5 | obtaining a copy of this software and associated documentation 6 | files (the "Software"), to deal in the Software without 7 | restriction, including without limitation the rights to use, 8 | copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the 10 | Software is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 18 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 20 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 21 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23 | OTHER DEALINGS IN THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /public/lib/owlcarousel/assets/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/public/lib/owlcarousel/assets/ajax-loader.gif -------------------------------------------------------------------------------- /public/lib/owlcarousel/assets/owl.carousel.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.3.4 3 | * Copyright 2013-2018 David Deutsch 4 | * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE 5 | */ 6 | /* 7 | * Owl Carousel - Core 8 | */ 9 | .owl-carousel { 10 | display: none; 11 | width: 100%; 12 | -webkit-tap-highlight-color: transparent; 13 | /* position relative and z-index fix webkit rendering fonts issue */ 14 | position: relative; 15 | z-index: 1; } 16 | .owl-carousel .owl-stage { 17 | position: relative; 18 | -ms-touch-action: pan-Y; 19 | touch-action: manipulation; 20 | -moz-backface-visibility: hidden; 21 | /* fix firefox animation glitch */ } 22 | .owl-carousel .owl-stage:after { 23 | content: "."; 24 | display: block; 25 | clear: both; 26 | visibility: hidden; 27 | line-height: 0; 28 | height: 0; } 29 | .owl-carousel .owl-stage-outer { 30 | position: relative; 31 | overflow: hidden; 32 | /* fix for flashing background */ 33 | -webkit-transform: translate3d(0px, 0px, 0px); } 34 | .owl-carousel .owl-wrapper, 35 | .owl-carousel .owl-item { 36 | -webkit-backface-visibility: hidden; 37 | -moz-backface-visibility: hidden; 38 | -ms-backface-visibility: hidden; 39 | -webkit-transform: translate3d(0, 0, 0); 40 | -moz-transform: translate3d(0, 0, 0); 41 | -ms-transform: translate3d(0, 0, 0); } 42 | .owl-carousel .owl-item { 43 | position: relative; 44 | min-height: 1px; 45 | float: left; 46 | -webkit-backface-visibility: hidden; 47 | -webkit-tap-highlight-color: transparent; 48 | -webkit-touch-callout: none; } 49 | .owl-carousel .owl-item img { 50 | display: block; 51 | width: 100%; } 52 | .owl-carousel .owl-nav.disabled, 53 | .owl-carousel .owl-dots.disabled { 54 | display: none; } 55 | .owl-carousel .owl-nav .owl-prev, 56 | .owl-carousel .owl-nav .owl-next, 57 | .owl-carousel .owl-dot { 58 | cursor: pointer; 59 | -webkit-user-select: none; 60 | -khtml-user-select: none; 61 | -moz-user-select: none; 62 | -ms-user-select: none; 63 | user-select: none; } 64 | .owl-carousel .owl-nav button.owl-prev, 65 | .owl-carousel .owl-nav button.owl-next, 66 | .owl-carousel button.owl-dot { 67 | background: none; 68 | color: inherit; 69 | border: none; 70 | padding: 0 !important; 71 | font: inherit; } 72 | .owl-carousel.owl-loaded { 73 | display: block; } 74 | .owl-carousel.owl-loading { 75 | opacity: 0; 76 | display: block; } 77 | .owl-carousel.owl-hidden { 78 | opacity: 0; } 79 | .owl-carousel.owl-refresh .owl-item { 80 | visibility: hidden; } 81 | .owl-carousel.owl-drag .owl-item { 82 | -ms-touch-action: pan-y; 83 | touch-action: pan-y; 84 | -webkit-user-select: none; 85 | -moz-user-select: none; 86 | -ms-user-select: none; 87 | user-select: none; } 88 | .owl-carousel.owl-grab { 89 | cursor: move; 90 | cursor: grab; } 91 | .owl-carousel.owl-rtl { 92 | direction: rtl; } 93 | .owl-carousel.owl-rtl .owl-item { 94 | float: right; } 95 | 96 | /* No Js */ 97 | .no-js .owl-carousel { 98 | display: block; } 99 | 100 | /* 101 | * Owl Carousel - Animate Plugin 102 | */ 103 | .owl-carousel .animated { 104 | animation-duration: 1000ms; 105 | animation-fill-mode: both; } 106 | 107 | .owl-carousel .owl-animated-in { 108 | z-index: 0; } 109 | 110 | .owl-carousel .owl-animated-out { 111 | z-index: 1; } 112 | 113 | .owl-carousel .fadeOut { 114 | animation-name: fadeOut; } 115 | 116 | @keyframes fadeOut { 117 | 0% { 118 | opacity: 1; } 119 | 100% { 120 | opacity: 0; } } 121 | 122 | /* 123 | * Owl Carousel - Auto Height Plugin 124 | */ 125 | .owl-height { 126 | transition: height 500ms ease-in-out; } 127 | 128 | /* 129 | * Owl Carousel - Lazy Load Plugin 130 | */ 131 | .owl-carousel .owl-item { 132 | /** 133 | This is introduced due to a bug in IE11 where lazy loading combined with autoheight plugin causes a wrong 134 | calculation of the height of the owl-item that breaks page layouts 135 | */ } 136 | .owl-carousel .owl-item .owl-lazy { 137 | opacity: 0; 138 | transition: opacity 400ms ease; } 139 | .owl-carousel .owl-item .owl-lazy[src^=""], .owl-carousel .owl-item .owl-lazy:not([src]) { 140 | max-height: 0; } 141 | .owl-carousel .owl-item img.owl-lazy { 142 | transform-style: preserve-3d; } 143 | 144 | /* 145 | * Owl Carousel - Video Plugin 146 | */ 147 | .owl-carousel .owl-video-wrapper { 148 | position: relative; 149 | height: 100%; 150 | background: #000; } 151 | 152 | .owl-carousel .owl-video-play-icon { 153 | position: absolute; 154 | height: 80px; 155 | width: 80px; 156 | left: 50%; 157 | top: 50%; 158 | margin-left: -40px; 159 | margin-top: -40px; 160 | background: url("owl.video.play.png") no-repeat; 161 | cursor: pointer; 162 | z-index: 1; 163 | -webkit-backface-visibility: hidden; 164 | transition: transform 100ms ease; } 165 | 166 | .owl-carousel .owl-video-play-icon:hover { 167 | -ms-transform: scale(1.3, 1.3); 168 | transform: scale(1.3, 1.3); } 169 | 170 | .owl-carousel .owl-video-playing .owl-video-tn, 171 | .owl-carousel .owl-video-playing .owl-video-play-icon { 172 | display: none; } 173 | 174 | .owl-carousel .owl-video-tn { 175 | opacity: 0; 176 | height: 100%; 177 | background-position: center center; 178 | background-repeat: no-repeat; 179 | background-size: contain; 180 | transition: opacity 400ms ease; } 181 | 182 | .owl-carousel .owl-video-frame { 183 | position: relative; 184 | z-index: 1; 185 | height: 100%; 186 | width: 100%; } 187 | -------------------------------------------------------------------------------- /public/lib/owlcarousel/assets/owl.carousel.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.3.4 3 | * Copyright 2013-2018 David Deutsch 4 | * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE 5 | */ 6 | .owl-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{display:none;width:100%;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y;touch-action:manipulation;-moz-backface-visibility:hidden}.owl-carousel .owl-stage:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0,0,0)}.owl-carousel .owl-item,.owl-carousel .owl-wrapper{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;width:100%}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.no-js .owl-carousel,.owl-carousel.owl-loaded{display:block}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel .owl-nav button.owl-next,.owl-carousel .owl-nav button.owl-prev,.owl-carousel button.owl-dot{background:0 0;color:inherit;border:none;padding:0!important;font:inherit}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-ms-touch-action:pan-y;touch-action:pan-y;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.owl-carousel .animated{animation-duration:1s;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{animation-name:fadeOut}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item .owl-lazy:not([src]),.owl-carousel .owl-item .owl-lazy[src^=""]{max-height:0}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%} -------------------------------------------------------------------------------- /public/lib/owlcarousel/assets/owl.theme.default.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.3.4 3 | * Copyright 2013-2018 David Deutsch 4 | * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE 5 | */ 6 | /* 7 | * Default theme - Owl Carousel CSS File 8 | */ 9 | .owl-theme .owl-nav { 10 | margin-top: 10px; 11 | text-align: center; 12 | -webkit-tap-highlight-color: transparent; } 13 | .owl-theme .owl-nav [class*='owl-'] { 14 | color: #FFF; 15 | font-size: 14px; 16 | margin: 5px; 17 | padding: 4px 7px; 18 | background: #D6D6D6; 19 | display: inline-block; 20 | cursor: pointer; 21 | border-radius: 3px; } 22 | .owl-theme .owl-nav [class*='owl-']:hover { 23 | background: #869791; 24 | color: #FFF; 25 | text-decoration: none; } 26 | .owl-theme .owl-nav .disabled { 27 | opacity: 0.5; 28 | cursor: default; } 29 | 30 | .owl-theme .owl-nav.disabled + .owl-dots { 31 | margin-top: 10px; } 32 | 33 | .owl-theme .owl-dots { 34 | text-align: center; 35 | -webkit-tap-highlight-color: transparent; } 36 | .owl-theme .owl-dots .owl-dot { 37 | display: inline-block; 38 | zoom: 1; 39 | *display: inline; } 40 | .owl-theme .owl-dots .owl-dot span { 41 | width: 10px; 42 | height: 10px; 43 | margin: 5px 7px; 44 | background: #D6D6D6; 45 | display: block; 46 | -webkit-backface-visibility: visible; 47 | transition: opacity 200ms ease; 48 | border-radius: 30px; } 49 | .owl-theme .owl-dots .owl-dot.active span, .owl-theme .owl-dots .owl-dot:hover span { 50 | background: #869791; } 51 | -------------------------------------------------------------------------------- /public/lib/owlcarousel/assets/owl.theme.default.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.3.4 3 | * Copyright 2013-2018 David Deutsch 4 | * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE 5 | */ 6 | .owl-theme .owl-dots,.owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent}.owl-theme .owl-nav{margin-top:10px}.owl-theme .owl-nav [class*=owl-]{color:#FFF;font-size:14px;margin:5px;padding:4px 7px;background:#D6D6D6;display:inline-block;cursor:pointer;border-radius:3px}.owl-theme .owl-nav [class*=owl-]:hover{background:#869791;color:#FFF;text-decoration:none}.owl-theme .owl-nav .disabled{opacity:.5;cursor:default}.owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px}.owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1}.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#D6D6D6;display:block;-webkit-backface-visibility:visible;transition:opacity .2s ease;border-radius:30px}.owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#869791} -------------------------------------------------------------------------------- /public/lib/owlcarousel/assets/owl.theme.green.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.3.4 3 | * Copyright 2013-2018 David Deutsch 4 | * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE 5 | */ 6 | /* 7 | * Green theme - Owl Carousel CSS File 8 | */ 9 | .owl-theme .owl-nav { 10 | margin-top: 10px; 11 | text-align: center; 12 | -webkit-tap-highlight-color: transparent; } 13 | .owl-theme .owl-nav [class*='owl-'] { 14 | color: #FFF; 15 | font-size: 14px; 16 | margin: 5px; 17 | padding: 4px 7px; 18 | background: #D6D6D6; 19 | display: inline-block; 20 | cursor: pointer; 21 | border-radius: 3px; } 22 | .owl-theme .owl-nav [class*='owl-']:hover { 23 | background: #4DC7A0; 24 | color: #FFF; 25 | text-decoration: none; } 26 | .owl-theme .owl-nav .disabled { 27 | opacity: 0.5; 28 | cursor: default; } 29 | 30 | .owl-theme .owl-nav.disabled + .owl-dots { 31 | margin-top: 10px; } 32 | 33 | .owl-theme .owl-dots { 34 | text-align: center; 35 | -webkit-tap-highlight-color: transparent; } 36 | .owl-theme .owl-dots .owl-dot { 37 | display: inline-block; 38 | zoom: 1; 39 | *display: inline; } 40 | .owl-theme .owl-dots .owl-dot span { 41 | width: 10px; 42 | height: 10px; 43 | margin: 5px 7px; 44 | background: #D6D6D6; 45 | display: block; 46 | -webkit-backface-visibility: visible; 47 | transition: opacity 200ms ease; 48 | border-radius: 30px; } 49 | .owl-theme .owl-dots .owl-dot.active span, .owl-theme .owl-dots .owl-dot:hover span { 50 | background: #4DC7A0; } 51 | -------------------------------------------------------------------------------- /public/lib/owlcarousel/assets/owl.theme.green.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.3.4 3 | * Copyright 2013-2018 David Deutsch 4 | * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE 5 | */ 6 | .owl-theme .owl-dots,.owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent}.owl-theme .owl-nav{margin-top:10px}.owl-theme .owl-nav [class*=owl-]{color:#FFF;font-size:14px;margin:5px;padding:4px 7px;background:#D6D6D6;display:inline-block;cursor:pointer;border-radius:3px}.owl-theme .owl-nav [class*=owl-]:hover{background:#4DC7A0;color:#FFF;text-decoration:none}.owl-theme .owl-nav .disabled{opacity:.5;cursor:default}.owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px}.owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1}.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#D6D6D6;display:block;-webkit-backface-visibility:visible;transition:opacity .2s ease;border-radius:30px}.owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#4DC7A0} -------------------------------------------------------------------------------- /public/lib/owlcarousel/assets/owl.video.play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/public/lib/owlcarousel/assets/owl.video.play.png -------------------------------------------------------------------------------- /public/lib/popper/popper.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (C) Federico Zivolo 2018 3 | Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT). 4 | */(function(e,t){'object'==typeof exports&&'undefined'!=typeof module?module.exports=t():'function'==typeof define&&define.amd?define(t):e.Popper=t()})(this,function(){'use strict';function e(e){return e&&'[object Function]'==={}.toString.call(e)}function t(e,t){if(1!==e.nodeType)return[];var o=e.ownerDocument.defaultView,n=o.getComputedStyle(e,null);return t?n[t]:n}function o(e){return'HTML'===e.nodeName?e:e.parentNode||e.host}function n(e){if(!e)return document.body;switch(e.nodeName){case'HTML':case'BODY':return e.ownerDocument.body;case'#document':return e.body;}var i=t(e),r=i.overflow,p=i.overflowX,s=i.overflowY;return /(auto|scroll|overlay)/.test(r+s+p)?e:n(o(e))}function r(e){return 11===e?pe:10===e?se:pe||se}function p(e){if(!e)return document.documentElement;for(var o=r(10)?document.body:null,n=e.offsetParent||null;n===o&&e.nextElementSibling;)n=(e=e.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&'BODY'!==i&&'HTML'!==i?-1!==['TH','TD','TABLE'].indexOf(n.nodeName)&&'static'===t(n,'position')?p(n):n:e?e.ownerDocument.documentElement:document.documentElement}function s(e){var t=e.nodeName;return'BODY'!==t&&('HTML'===t||p(e.firstElementChild)===e)}function d(e){return null===e.parentNode?e:d(e.parentNode)}function a(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return document.documentElement;var o=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,n=o?e:t,i=o?t:e,r=document.createRange();r.setStart(n,0),r.setEnd(i,0);var l=r.commonAncestorContainer;if(e!==l&&t!==l||n.contains(i))return s(l)?l:p(l);var f=d(e);return f.host?a(f.host,t):a(e,d(t).host)}function l(e){var t=1=o.clientWidth&&n>=o.clientHeight}),l=0a[e]&&!t.escapeWithReference&&(n=Q(f[o],a[e]-('right'===e?f.width:f.height))),le({},o,n)}};return l.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';f=fe({},f,m[t](e))}),e.offsets.popper=f,e},priority:['left','right','top','bottom'],padding:5,boundariesElement:'scrollParent'},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,o=t.popper,n=t.reference,i=e.placement.split('-')[0],r=Z,p=-1!==['top','bottom'].indexOf(i),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]r(n[s])&&(e.offsets.popper[d]=r(n[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,o){var n;if(!K(e.instance.modifiers,'arrow','keepTogether'))return e;var i=o.element;if('string'==typeof i){if(i=e.instance.popper.querySelector(i),!i)return e;}else if(!e.instance.popper.contains(i))return console.warn('WARNING: `arrow.element` must be child of its popper element!'),e;var r=e.placement.split('-')[0],p=e.offsets,s=p.popper,d=p.reference,a=-1!==['left','right'].indexOf(r),l=a?'height':'width',f=a?'Top':'Left',m=f.toLowerCase(),h=a?'left':'top',c=a?'bottom':'right',u=S(i)[l];d[c]-us[c]&&(e.offsets.popper[m]+=d[m]+u-s[c]),e.offsets.popper=g(e.offsets.popper);var b=d[m]+d[l]/2-u/2,w=t(e.instance.popper),y=parseFloat(w['margin'+f],10),E=parseFloat(w['border'+f+'Width'],10),v=b-e.offsets.popper[m]-y-E;return v=ee(Q(s[l]-u,v),0),e.arrowElement=i,e.offsets.arrow=(n={},le(n,m,$(v)),le(n,h,''),n),e},element:'[x-arrow]'},flip:{order:600,enabled:!0,fn:function(e,t){if(W(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var o=v(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),n=e.placement.split('-')[0],i=T(n),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case ge.FLIP:p=[n,i];break;case ge.CLOCKWISE:p=G(n);break;case ge.COUNTERCLOCKWISE:p=G(n,!0);break;default:p=t.behavior;}return p.forEach(function(s,d){if(n!==s||p.length===d+1)return e;n=e.placement.split('-')[0],i=T(n);var a=e.offsets.popper,l=e.offsets.reference,f=Z,m='left'===n&&f(a.right)>f(l.left)||'right'===n&&f(a.left)f(l.top)||'bottom'===n&&f(a.top)f(o.right),g=f(a.top)f(o.bottom),b='left'===n&&h||'right'===n&&c||'top'===n&&g||'bottom'===n&&u,w=-1!==['top','bottom'].indexOf(n),y=!!t.flipVariations&&(w&&'start'===r&&h||w&&'end'===r&&c||!w&&'start'===r&&g||!w&&'end'===r&&u);(m||b||y)&&(e.flipped=!0,(m||b)&&(n=p[d+1]),y&&(r=z(r)),e.placement=n+(r?'-'+r:''),e.offsets.popper=fe({},e.offsets.popper,D(e.instance.popper,e.offsets.reference,e.placement)),e=P(e.instance.modifiers,e,'flip'))}),e},behavior:'flip',padding:5,boundariesElement:'viewport'},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,o=t.split('-')[0],n=e.offsets,i=n.popper,r=n.reference,p=-1!==['left','right'].indexOf(o),s=-1===['top','left'].indexOf(o);return i[p?'left':'top']=r[o]-(s?i[p?'width':'height']:0),e.placement=T(t),e.offsets.popper=g(i),e}},hide:{order:800,enabled:!0,fn:function(e){if(!K(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=C(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottomo.right||t.top>o.bottom||t.rightwindow.devicePixelRatio||!me),c='bottom'===o?'top':'bottom',g='right'===n?'left':'right',b=H('transform');if(d='bottom'==c?'HTML'===l.nodeName?-l.clientHeight+h.bottom:-f.height+h.bottom:h.top,s='right'==g?'HTML'===l.nodeName?-l.clientWidth+h.right:-f.width+h.right:h.left,a&&b)m[b]='translate3d('+s+'px, '+d+'px, 0)',m[c]=0,m[g]=0,m.willChange='transform';else{var w='bottom'==c?-1:1,y='right'==g?-1:1;m[c]=d*w,m[g]=s*y,m.willChange=c+', '+g}var E={"x-placement":e.placement};return e.attributes=fe({},E,e.attributes),e.styles=fe({},m,e.styles),e.arrowStyles=fe({},e.offsets.arrow,e.arrowStyles),e},gpuAcceleration:!0,x:'bottom',y:'right'},applyStyle:{order:900,enabled:!0,fn:function(e){return j(e.instance.popper,e.styles),V(e.instance.popper,e.attributes),e.arrowElement&&Object.keys(e.arrowStyles).length&&j(e.arrowElement,e.arrowStyles),e},onLoad:function(e,t,o,n,i){var r=L(i,t,e,o.positionFixed),p=O(o.placement,r,t,e,o.modifiers.flip.boundariesElement,o.modifiers.flip.padding);return t.setAttribute('x-placement',p),j(t,{position:o.positionFixed?'fixed':'absolute'}),o},gpuAcceleration:void 0}}},ue}); 5 | //# sourceMappingURL=popper.min.js.map 6 | -------------------------------------------------------------------------------- /public/lib/typed/typed.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * 3 | * typed.js - A JavaScript Typing Animation Library 4 | * Author: Matt Boldt 5 | * Version: v2.0.6 6 | * Url: https://github.com/mattboldt/typed.js 7 | * License(s): MIT 8 | * 9 | */ 10 | (function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Typed=e():t.Typed=e()})(this,function(){return function(t){function e(n){if(s[n])return s[n].exports;var i=s[n]={exports:{},id:n,loaded:!1};return t[n].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var s={};return e.m=t,e.c=s,e.p="",e(0)}([function(t,e,s){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var s=0;st.length)););var u=t.substring(0,e),l=t.substring(u.length+1,e+i),c=t.substring(e+i+1);t=u+l+c,i--}s.timeout=setTimeout(function(){s.toggleBlinking(!1),e===t.length?s.doneTyping(t,e):s.keepTyping(t,e,i),s.temporaryPause&&(s.temporaryPause=!1,s.options.onTypingResumed(s.arrayPos,s))},n)},n))}},{key:"keepTyping",value:function(t,e,s){0===e&&(this.toggleBlinking(!1),this.options.preStringTyped(this.arrayPos,this)),e+=s;var n=t.substr(0,e);this.replaceText(n),this.typewrite(t,e)}},{key:"doneTyping",value:function(t,e){var s=this;this.options.onStringTyped(this.arrayPos,this),this.toggleBlinking(!0),this.arrayPos===this.strings.length-1&&(this.complete(),this.loop===!1||this.curLoop===this.loopCount)||(this.timeout=setTimeout(function(){s.backspace(t,e)},this.backDelay))}},{key:"backspace",value:function(t,e){var s=this;if(this.pause.status===!0)return void this.setPauseStatus(t,e,!0);if(this.fadeOut)return this.initFadeOut();this.toggleBlinking(!1);var n=this.humanizer(this.backSpeed);this.timeout=setTimeout(function(){e=o.htmlParser.backSpaceHtmlChars(t,e,s);var n=t.substr(0,e);if(s.replaceText(n),s.smartBackspace){var i=s.strings[s.arrayPos+1];i&&n===i.substr(0,e)?s.stopNum=e:s.stopNum=0}e>s.stopNum?(e--,s.backspace(t,e)):e<=s.stopNum&&(s.arrayPos++,s.arrayPos===s.strings.length?(s.arrayPos=0,s.options.onLastStringBackspaced(),s.shuffleStringsIfNeeded(),s.begin()):s.typewrite(s.strings[s.sequence[s.arrayPos]],e))},n)}},{key:"complete",value:function(){this.options.onComplete(this),this.loop?this.curLoop++:this.typingComplete=!0}},{key:"setPauseStatus",value:function(t,e,s){this.pause.typewrite=s,this.pause.curString=t,this.pause.curStrPos=e}},{key:"toggleBlinking",value:function(t){if(this.cursor&&!this.pause.status&&this.cursorBlinking!==t){this.cursorBlinking=t;var e=t?"infinite":0;this.cursor.style.animationIterationCount=e}}},{key:"humanizer",value:function(t){return Math.round(Math.random()*t/2)+t}},{key:"shuffleStringsIfNeeded",value:function(){this.shuffle&&(this.sequence=this.sequence.sort(function(){return Math.random()-.5}))}},{key:"initFadeOut",value:function(){var t=this;return this.el.className+=" "+this.fadeOutClass,this.cursor&&(this.cursor.className+=" "+this.fadeOutClass),setTimeout(function(){t.arrayPos++,t.replaceText(""),t.strings.length>t.arrayPos?t.typewrite(t.strings[t.sequence[t.arrayPos]],0):(t.typewrite(t.strings[0],0),t.arrayPos=0)},this.fadeOutDelay)}},{key:"replaceText",value:function(t){this.attr?this.el.setAttribute(this.attr,t):this.isInput?this.el.value=t:"html"===this.contentType?this.el.innerHTML=t:this.el.textContent=t}},{key:"bindFocusEvents",value:function(){var t=this;this.isInput&&(this.el.addEventListener("focus",function(e){t.stop()}),this.el.addEventListener("blur",function(e){t.el.value&&0!==t.el.value.length||t.start()}))}},{key:"insertCursor",value:function(){this.showCursor&&(this.cursor||(this.cursor=document.createElement("span"),this.cursor.className="typed-cursor",this.cursor.innerHTML=this.cursorChar,this.el.parentNode&&this.el.parentNode.insertBefore(this.cursor,this.el.nextSibling)))}}]),t}();e["default"]=a,t.exports=e["default"]},function(t,e,s){"use strict";function n(t){return t&&t.__esModule?t:{"default":t}}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var r=Object.assign||function(t){for(var e=1;e":";";t.substr(e+1).charAt(0)!==i&&(e++,!(e+1>t.length)););e++}return e}},{key:"backSpaceHtmlChars",value:function(t,e,s){if("html"!==s.contentType)return e;var n=t.substr(e).charAt(0);if(">"===n||";"===n){var i="";for(i=">"===n?"<":"&";t.substr(e-1).charAt(0)!==i&&(e--,!(e<0)););e--}return e}}]),t}();e["default"]=i;var r=new i;e.htmlParser=r}])}); 11 | //# sourceMappingURL=typed.min.js.map 12 | -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "Protfolio App", 3 | "name": "Frank Izquierdo", 4 | "icons": [ 5 | { 6 | "src": "tab-logo.png", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | } 10 | ], 11 | "start_url": ".", 12 | "display": "standalone", 13 | "theme_color": "#000000", 14 | "background_color": "#ffffff" 15 | } 16 | -------------------------------------------------------------------------------- /public/team.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/public/team.png -------------------------------------------------------------------------------- /src/components/about.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import myImage from "../img/myImage.png"; 3 | 4 | class About extends React.Component { 5 | constructor() { 6 | super(); 7 | this.state = { 8 | skills: [ 9 | { id: "HTML5_skill", content: "HTML5", porcentage: "80%", value: "80" }, 10 | { id: "CSS3_skill", content: "CSS3", porcentage: "75%", value: "75" }, 11 | { 12 | id: "JavaScript_skill", 13 | content: "JavaScript", 14 | porcentage: "90%", 15 | value: "90" 16 | }, 17 | { id: "PHP_skill", content: "PHP", porcentage: "70%", value: "70" }, 18 | { 19 | id: "ReactJS_skill", 20 | content: "ReactJS", 21 | porcentage: "80%", 22 | value: "80" 23 | }, 24 | { 25 | id: "Python_skill", 26 | content: "Python", 27 | porcentage: "75%", 28 | value: "75" 29 | }, 30 | { 31 | id: "VanillaJS_skill", 32 | content: "VanillaJS", 33 | porcentage: "85%", 34 | value: "85" 35 | }, 36 | { 37 | id: "Wordpress_skill", 38 | content: "Wordpress", 39 | porcentage: "80%", 40 | value: "80" 41 | } 42 | ], 43 | about_me: [ 44 | { 45 | id: "first-p-about", 46 | content: 47 | "Lorem ipsum pariatur consectetur laboris occaecat nulla aliqua irure ad deserunt duis. Eiusmod nulla cupidatat labore sint sit aute dolore irure nostrud ut incididunt. Anim laborum reprehenderit labore magna ut dolore quis irure. Labore ea duis deserunt ullamco irure fugiat deserunt ut nisi ea minim proident. Nisi consectetur do non magna duis aliqua minim minim veniam. In occaecat minim qui consequat elit mollit consectetur non id tempor. Amet adipisicing occaecat tempor culpa quis est duis." 48 | }, 49 | { 50 | id: "second-p-about", 51 | content: 52 | "Lorem ipsum pariatur consectetur laboris occaecat nulla aliqua irure ad deserunt duis. Eiusmod nulla cupidatat labore sint sit aute dolore irure nostrud ut incididunt. Anim laborum reprehenderit labore magna ut dolore quis irure. Labore ea duis deserunt ullamco irure fugiat deserunt ut nisi ea minim proident. Nisi consectetur do non magna duis aliqua minim minim veniam. In occaecat minim qui consequat elit mollit consectetur non id tempor. Amet adipisicing occaecat tempor culpa quis est duis." 53 | }, 54 | { 55 | id: "third-p-about", 56 | content: 57 | "Lorem ipsum pariatur consectetur laboris occaecat nulla aliqua irure ad deserunt duis. Eiusmod nulla cupidatat labore sint sit aute dolore irure nostrud ut incididunt. Anim laborum reprehenderit labore magna ut dolore quis irure. Labore ea duis deserunt ullamco irure fugiat deserunt ut nisi ea minim proident. Nisi consectetur do non magna duis aliqua minim minim veniam. In occaecat minim qui consequat elit mollit consectetur non id tempor. Amet adipisicing occaecat tempor culpa quis est duis." 58 | } 59 | ] 60 | }; 61 | } 62 | 63 | render() { 64 | return ( 65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
77 |
81 | 85 |
86 |
87 |
88 |
89 | {/*

Skill

*/} 90 | {this.state.skills.map(skill => { 91 | return ( 92 | 93 | {skill.content}{" "} 94 | 95 | {skill.porcentage} 96 | 97 |
98 |
106 |
107 |
108 | ); 109 | })} 110 |
111 |
112 |
113 |
114 |
115 |
About Me
116 |
117 | {this.state.about_me.map(content => { 118 | return ( 119 |

120 | {content.content} 121 |

122 | ); 123 | })} 124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 | ); 133 | } 134 | } 135 | 136 | export default About; 137 | -------------------------------------------------------------------------------- /src/components/back-top.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import $ from 'jquery'; 3 | import '../libs/easing.js' 4 | 5 | class BackToTop extends React.Component { 6 | componentDidMount(){ 7 | $('.back-to-top').click(function(){ 8 | $('html, body').animate({scrollTop : 0},1500, 'easeInOutExpo'); 9 | return false; 10 | }); 11 | window.addEventListener('scroll', ()=>{ 12 | if(window.pageYOffset > 100){ 13 | document.querySelector('.back-to-top').classList.remove("fadeOut"); 14 | document.querySelector('.back-to-top').style.display = "block"; 15 | document.querySelector('.back-to-top').classList.add("fadeIn"); 16 | }else { 17 | document.querySelector('.back-to-top').classList.remove("fadeIn"); 18 | document.querySelector('.back-to-top').classList.add("fadeOut"); 19 | } 20 | }); 21 | } 22 | 23 | render(){ 24 | return ; 25 | } 26 | } 27 | 28 | export default BackToTop; 29 | 30 | 31 | -------------------------------------------------------------------------------- /src/components/contact.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import imageOverlay from "../img/earth.jpg"; 3 | 4 | class Contact extends React.Component { 5 | render() { 6 | return ( 7 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
Send A Message
21 |
22 |
23 |
28 |
29 | Your message has been sent. Thank you! 30 |
31 |
32 |
33 |
34 |
35 | 44 |
45 |
46 |
47 |
48 |
49 | 58 |
59 |
60 |
61 |
62 |
63 | 72 |
73 |
74 |
75 |
76 |
77 | 85 |
86 |
87 |
88 |
89 | 95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
Get in Touch
103 |
104 |
105 |

106 | Whether you want to get in touch, talk about a project 107 | collaboration, or just say hi, I'd love to hear from 108 | you. 109 |
110 | Simply fill the from and send me an email. 111 |

112 | {/* */} 117 |
118 |
119 | 154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 | ); 174 | } 175 | } 176 | 177 | export default Contact; 178 | -------------------------------------------------------------------------------- /src/components/intro.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import "./stars.scss"; 3 | import Typed from "react-typed"; 4 | 5 | class Intro extends React.Component { 6 | render() { 7 | return ( 8 | //
9 |
10 |
11 |
12 |
13 | 14 |
15 |
16 |
17 |

Hello, I am XYZ

18 |

19 | 20 | 21 | 32 | 33 |

34 |

35 | 40 | View My Work 41 | 42 |

43 |
44 |
45 |
46 |
47 | ); 48 | } 49 | } 50 | 51 | export default Intro; 52 | -------------------------------------------------------------------------------- /src/components/navbar.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import $ from "jquery"; 3 | 4 | import logo1 from "../img/male1.png"; 5 | import logo2 from "../img/male.png"; 6 | 7 | class Navbar extends React.Component { 8 | constructor() { 9 | super(); 10 | this.state = { 11 | logo: logo1 12 | }; 13 | } 14 | 15 | componentDidMount() { 16 | const nav = $("nav"); 17 | let navHeight = nav.outerHeight(); 18 | 19 | $(".navbar-toggler").on("click", function() { 20 | if (!$("#mainNav").hasClass("navbar-reduce")) { 21 | $("#mainNav").addClass("navbar-reduce"); 22 | } 23 | }); 24 | 25 | $("body").scrollspy({ 26 | target: "#mainNav", 27 | offset: navHeight 28 | }); 29 | 30 | $(".js-scroll").on("click", function() { 31 | $(".navbar-collapse").collapse("hide"); 32 | }); 33 | 34 | window.addEventListener("scroll", () => { 35 | if (window.pageYOffset > 50) { 36 | document 37 | .querySelector(".navbar-expand-md") 38 | .classList.add("navbar-reduce"); 39 | document 40 | .querySelector(".navbar-expand-md") 41 | .classList.remove("navbar-trans"); 42 | this.setState({ logo: logo2 }); 43 | } else { 44 | document 45 | .querySelector(".navbar-expand-md") 46 | .classList.add("navbar-trans"); 47 | document 48 | .querySelector(".navbar-expand-md") 49 | .classList.remove("navbar-reduce"); 50 | this.setState({ logo: logo1 }); 51 | } 52 | }); 53 | 54 | $('a.js-scroll[href*="#"]:not([href="#"])').on("click", function() { 55 | if ( 56 | window.location.pathname.replace(/^\//, "") === 57 | this.pathname.replace(/^\//, "") && 58 | window.location.hostname === this.hostname 59 | ) { 60 | var target = $(this.hash); 61 | target = target.length 62 | ? target 63 | : $("[name=" + this.hash.slice(1) + "]"); 64 | if (target.length) { 65 | $("html, body").animate( 66 | { 67 | scrollTop: target.offset().top - navHeight + 5 68 | }, 69 | 1000, 70 | "easeInExpo" 71 | ); 72 | return false; 73 | } 74 | } 75 | }); 76 | 77 | $(".js-scroll").on("click", function() { 78 | $(".navbar-collapse").collapse("hide"); 79 | }); 80 | } 81 | 82 | render() { 83 | return ( 84 | 138 | ); 139 | } 140 | } 141 | 142 | export default Navbar; 143 | -------------------------------------------------------------------------------- /src/components/portfolio.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | //import stock 4 | import stock from "../img/image1.jpg"; 5 | import stock1 from "../img/image2.jpg"; 6 | import stock2 from "../img/image3.jpg"; 7 | import stock3 from "../img/image4.jpg"; 8 | import stock4 from "../img/image5.jpg"; 9 | import stock5 from "../img/image6.jpg"; 10 | 11 | class Portfolio extends React.Component { 12 | render() { 13 | return ( 14 |
15 |
16 |
17 |
18 |
19 |

Portfolio

20 |

21 | Incididunt nostrud id aute culpa excepteur pariatur consequat 22 | elit culpa nulla enim anim incididunt. 23 |

24 |
25 |
26 |
27 |
28 |
29 | 90 | 152 | 214 | 275 | 334 | 395 |
396 |
397 |
398 | ); 399 | } 400 | } 401 | 402 | export default Portfolio; 403 | -------------------------------------------------------------------------------- /src/components/preloader.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import $ from 'jquery'; 3 | 4 | class Preloader extends React.Component { 5 | componentDidMount(){ 6 | $(window).on('load', function () { 7 | if ($('#preloader').length) { 8 | $('#preloader').delay(100).fadeOut('slow', function () { 9 | $(this).remove(); 10 | }); 11 | } 12 | }); 13 | } 14 | 15 | render(){ 16 | return
; 17 | } 18 | } 19 | 20 | export default Preloader; 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/img/earth.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/src/img/earth.jpg -------------------------------------------------------------------------------- /src/img/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/src/img/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /src/img/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/src/img/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /src/img/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/src/img/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /src/img/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/src/img/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /src/img/font-awesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/src/img/font-awesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /src/img/icons/fonts/ionicons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/src/img/icons/fonts/ionicons.eot -------------------------------------------------------------------------------- /src/img/icons/fonts/ionicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/src/img/icons/fonts/ionicons.ttf -------------------------------------------------------------------------------- /src/img/icons/fonts/ionicons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/src/img/icons/fonts/ionicons.woff -------------------------------------------------------------------------------- /src/img/image1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/src/img/image1.jpg -------------------------------------------------------------------------------- /src/img/image2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/src/img/image2.jpg -------------------------------------------------------------------------------- /src/img/image3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/src/img/image3.jpg -------------------------------------------------------------------------------- /src/img/image4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/src/img/image4.jpg -------------------------------------------------------------------------------- /src/img/image5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/src/img/image5.jpg -------------------------------------------------------------------------------- /src/img/image6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/src/img/image6.jpg -------------------------------------------------------------------------------- /src/img/male.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/src/img/male.png -------------------------------------------------------------------------------- /src/img/male1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/src/img/male1.png -------------------------------------------------------------------------------- /src/img/myImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/src/img/myImage.png -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | 4 | //import css in order 5 | import 'normalize.css'; 6 | import './animate.css'; 7 | import 'bootstrap/dist/css/bootstrap.css'; 8 | import './img/icons/css/ionicons.css'; 9 | import './img/font-awesome/css/font-awesome.css'; 10 | import 'lightbox2/dist/css/lightbox.min.css' 11 | import './style.css'; 12 | 13 | //import js libraries 14 | import 'jquery/dist/jquery.min.js'; 15 | import 'popper.js/dist/popper.min.js'; 16 | import 'bootstrap/dist/js/bootstrap.min.js'; 17 | import './libs/easing.js'; 18 | import 'lightbox2/dist/js/lightbox.min.js'; 19 | 20 | import * as serviceWorker from './serviceWorker'; 21 | 22 | //import components 23 | import Navbar from './components/navbar.jsx'; 24 | import Intro from './components/intro.jsx'; 25 | import About from './components/about.jsx'; 26 | import Portfolio from './components/portfolio.jsx'; 27 | import Contact from './components/contact.jsx'; 28 | import BackToTop from './components/back-top.jsx'; 29 | import Preloader from './components/preloader'; 30 | 31 | 32 | 33 | ReactDOM.render( 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | , 43 | document.getElementById('root')); 44 | 45 | // If you want your app to work offline and load faster, you can change 46 | // unregister() to register() below. Note this comes with some pitfalls. 47 | // Learn more about service workers: https://bit.ly/CRA-PWA 48 | serviceWorker.unregister(); 49 | -------------------------------------------------------------------------------- /src/libs/easing.js: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ 3 | * 4 | * Uses the built in easing capabilities added In jQuery 1.1 5 | * to offer multiple easing options 6 | * 7 | * TERMS OF USE - jQuery Easing 8 | * 9 | * Open source under the BSD License. 10 | * 11 | * Copyright 2008 George McGinley Smith 12 | * All rights reserved. 13 | * 14 | * Redistribution and use in source and binary forms, with or without modification, 15 | * are permitted provided that the following conditions are met: 16 | * 17 | * Redistributions of source code must retain the above copyright notice, this list of 18 | * conditions and the following disclaimer. 19 | * Redistributions in binary form must reproduce the above copyright notice, this list 20 | * of conditions and the following disclaimer in the documentation and/or other materials 21 | * provided with the distribution. 22 | * 23 | * Neither the name of the author nor the names of contributors may be used to endorse 24 | * or promote products derived from this software without specific prior written permission. 25 | * 26 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 27 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 28 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 29 | * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 30 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 31 | * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 32 | * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 33 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 34 | * OF THE POSSIBILITY OF SUCH DAMAGE. 35 | * 36 | */ 37 | import $ from 'jquery'; 38 | // t: current time, b: begInnIng value, c: change In value, d: duration 39 | $.easing.jswing = $.easing.swing; 40 | 41 | $.extend($.easing, 42 | { 43 | def: 'easeOutQuad', 44 | swing: function (x, t, b, c, d) { 45 | //alert($.easing.default); 46 | return $.easing[$.easing.def](x, t, b, c, d); 47 | }, 48 | easeInQuad: function (x, t, b, c, d) { 49 | return c*(t/=d)*t + b; 50 | }, 51 | easeOutQuad: function (x, t, b, c, d) { 52 | return -c *(t/=d)*(t-2) + b; 53 | }, 54 | easeInOutQuad: function (x, t, b, c, d) { 55 | if ((t/=d/2) < 1) return c/2*t*t + b; 56 | return -c/2 * ((--t)*(t-2) - 1) + b; 57 | }, 58 | easeInCubic: function (x, t, b, c, d) { 59 | return c*(t/=d)*t*t + b; 60 | }, 61 | easeOutCubic: function (x, t, b, c, d) { 62 | return c*((t=t/d-1)*t*t + 1) + b; 63 | }, 64 | easeInOutCubic: function (x, t, b, c, d) { 65 | if ((t/=d/2) < 1) return c/2*t*t*t + b; 66 | return c/2*((t-=2)*t*t + 2) + b; 67 | }, 68 | easeInQuart: function (x, t, b, c, d) { 69 | return c*(t/=d)*t*t*t + b; 70 | }, 71 | easeOutQuart: function (x, t, b, c, d) { 72 | return -c * ((t=t/d-1)*t*t*t - 1) + b; 73 | }, 74 | easeInOutQuart: function (x, t, b, c, d) { 75 | if ((t/=d/2) < 1) return c/2*t*t*t*t + b; 76 | return -c/2 * ((t-=2)*t*t*t - 2) + b; 77 | }, 78 | easeInQuint: function (x, t, b, c, d) { 79 | return c*(t/=d)*t*t*t*t + b; 80 | }, 81 | easeOutQuint: function (x, t, b, c, d) { 82 | return c*((t=t/d-1)*t*t*t*t + 1) + b; 83 | }, 84 | easeInOutQuint: function (x, t, b, c, d) { 85 | if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; 86 | return c/2*((t-=2)*t*t*t*t + 2) + b; 87 | }, 88 | easeInSine: function (x, t, b, c, d) { 89 | return -c * Math.cos(t/d * (Math.PI/2)) + c + b; 90 | }, 91 | easeOutSine: function (x, t, b, c, d) { 92 | return c * Math.sin(t/d * (Math.PI/2)) + b; 93 | }, 94 | easeInOutSine: function (x, t, b, c, d) { 95 | return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; 96 | }, 97 | easeInExpo: function (x, t, b, c, d) { 98 | return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; 99 | }, 100 | easeOutExpo: function (x, t, b, c, d) { 101 | return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; 102 | }, 103 | easeInOutExpo: function (x, t, b, c, d) { 104 | if (t==0) return b; 105 | if (t==d) return b+c; 106 | if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; 107 | return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; 108 | }, 109 | easeInCirc: function (x, t, b, c, d) { 110 | return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; 111 | }, 112 | easeOutCirc: function (x, t, b, c, d) { 113 | return c * Math.sqrt(1 - (t=t/d-1)*t) + b; 114 | }, 115 | easeInOutCirc: function (x, t, b, c, d) { 116 | if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; 117 | return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; 118 | }, 119 | easeInElastic: function (x, t, b, c, d) { 120 | var s=1.70158;var p=0;var a=c; 121 | if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; 122 | if (a < Math.abs(c)) { a=c; var s=p/4; } 123 | else var s = p/(2*Math.PI) * Math.asin (c/a); 124 | return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; 125 | }, 126 | easeOutElastic: function (x, t, b, c, d) { 127 | var s=1.70158;var p=0;var a=c; 128 | if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; 129 | if (a < Math.abs(c)) { a=c; var s=p/4; } 130 | else var s = p/(2*Math.PI) * Math.asin (c/a); 131 | return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; 132 | }, 133 | easeInOutElastic: function (x, t, b, c, d) { 134 | var s=1.70158;var p=0;var a=c; 135 | if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5); 136 | if (a < Math.abs(c)) { a=c; var s=p/4; } 137 | else var s = p/(2*Math.PI) * Math.asin (c/a); 138 | if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; 139 | return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; 140 | }, 141 | easeInBack: function (x, t, b, c, d, s) { 142 | if (s == undefined) s = 1.70158; 143 | return c*(t/=d)*t*((s+1)*t - s) + b; 144 | }, 145 | easeOutBack: function (x, t, b, c, d, s) { 146 | if (s == undefined) s = 1.70158; 147 | return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; 148 | }, 149 | easeInOutBack: function (x, t, b, c, d, s) { 150 | if (s == undefined) s = 1.70158; 151 | if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; 152 | return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; 153 | }, 154 | easeInBounce: function (x, t, b, c, d) { 155 | return c - $.easing.easeOutBounce (x, d-t, 0, c, d) + b; 156 | }, 157 | easeOutBounce: function (x, t, b, c, d) { 158 | if ((t/=d) < (1/2.75)) { 159 | return c*(7.5625*t*t) + b; 160 | } else if (t < (2/2.75)) { 161 | return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; 162 | } else if (t < (2.5/2.75)) { 163 | return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; 164 | } else { 165 | return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; 166 | } 167 | }, 168 | easeInOutBounce: function (x, t, b, c, d) { 169 | if (t < d/2) return $.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; 170 | return $.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; 171 | } 172 | }); 173 | 174 | /* 175 | * 176 | * TERMS OF USE - EASING EQUATIONS 177 | * 178 | * Open source under the BSD License. 179 | * 180 | * Copyright 2001 Robert Penner 181 | * All rights reserved. 182 | * 183 | * Redistribution and use in source and binary forms, with or without modification, 184 | * are permitted provided that the following conditions are met: 185 | * 186 | * Redistributions of source code must retain the above copyright notice, this list of 187 | * conditions and the following disclaimer. 188 | * Redistributions in binary form must reproduce the above copyright notice, this list 189 | * of conditions and the following disclaimer in the documentation and/or other materials 190 | * provided with the distribution. 191 | * 192 | * Neither the name of the author nor the names of contributors may be used to endorse 193 | * or promote products derived from this software without specific prior written permission. 194 | * 195 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 196 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 197 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 198 | * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 199 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 200 | * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 201 | * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 202 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 203 | * OF THE POSSIBILITY OF SUCH DAMAGE. 204 | * 205 | */ -------------------------------------------------------------------------------- /src/serviceWorker.js: -------------------------------------------------------------------------------- 1 | // This optional code is used to register a service worker. 2 | // register() is not called by default. 3 | 4 | // This lets the app load faster on subsequent visits in production, and gives 5 | // it offline capabilities. However, it also means that developers (and users) 6 | // will only see deployed updates on subsequent visits to a page, after all the 7 | // existing tabs open on the page have been closed, since previously cached 8 | // resources are updated in the background. 9 | 10 | // To learn more about the benefits of this model and instructions on how to 11 | // opt-in, read https://bit.ly/CRA-PWA 12 | 13 | const isLocalhost = Boolean( 14 | window.location.hostname === 'localhost' || 15 | // [::1] is the IPv6 localhost address. 16 | window.location.hostname === '[::1]' || 17 | // 127.0.0.1/8 is considered localhost for IPv4. 18 | window.location.hostname.match( 19 | /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ 20 | ) 21 | ); 22 | 23 | export function register(config) { 24 | if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { 25 | // The URL constructor is available in all browsers that support SW. 26 | const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href); 27 | if (publicUrl.origin !== window.location.origin) { 28 | // Our service worker won't work if PUBLIC_URL is on a different origin 29 | // from what our page is served on. This might happen if a CDN is used to 30 | // serve assets; see https://github.com/facebook/create-react-app/issues/2374 31 | return; 32 | } 33 | 34 | window.addEventListener('load', () => { 35 | const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; 36 | 37 | if (isLocalhost) { 38 | // This is running on localhost. Let's check if a service worker still exists or not. 39 | checkValidServiceWorker(swUrl, config); 40 | 41 | // Add some additional logging to localhost, pointing developers to the 42 | // service worker/PWA documentation. 43 | navigator.serviceWorker.ready.then(() => { 44 | console.log( 45 | 'This web app is being served cache-first by a service ' + 46 | 'worker. To learn more, visit https://bit.ly/CRA-PWA' 47 | ); 48 | }); 49 | } else { 50 | // Is not localhost. Just register service worker 51 | registerValidSW(swUrl, config); 52 | } 53 | }); 54 | } 55 | } 56 | 57 | function registerValidSW(swUrl, config) { 58 | navigator.serviceWorker 59 | .register(swUrl) 60 | .then(registration => { 61 | registration.onupdatefound = () => { 62 | const installingWorker = registration.installing; 63 | if (installingWorker == null) { 64 | return; 65 | } 66 | installingWorker.onstatechange = () => { 67 | if (installingWorker.state === 'installed') { 68 | if (navigator.serviceWorker.controller) { 69 | // At this point, the updated precached content has been fetched, 70 | // but the previous service worker will still serve the older 71 | // content until all client tabs are closed. 72 | console.log( 73 | 'New content is available and will be used when all ' + 74 | 'tabs for this page are closed. See https://bit.ly/CRA-PWA.' 75 | ); 76 | 77 | // Execute callback 78 | if (config && config.onUpdate) { 79 | config.onUpdate(registration); 80 | } 81 | } else { 82 | // At this point, everything has been precached. 83 | // It's the perfect time to display a 84 | // "Content is cached for offline use." message. 85 | console.log('Content is cached for offline use.'); 86 | 87 | // Execute callback 88 | if (config && config.onSuccess) { 89 | config.onSuccess(registration); 90 | } 91 | } 92 | } 93 | }; 94 | }; 95 | }) 96 | .catch(error => { 97 | console.error('Error during service worker registration:', error); 98 | }); 99 | } 100 | 101 | function checkValidServiceWorker(swUrl, config) { 102 | // Check if the service worker can be found. If it can't reload the page. 103 | fetch(swUrl) 104 | .then(response => { 105 | // Ensure service worker exists, and that we really are getting a JS file. 106 | const contentType = response.headers.get('content-type'); 107 | if ( 108 | response.status === 404 || 109 | (contentType != null && contentType.indexOf('javascript') === -1) 110 | ) { 111 | // No service worker found. Probably a different app. Reload the page. 112 | navigator.serviceWorker.ready.then(registration => { 113 | registration.unregister().then(() => { 114 | window.location.reload(); 115 | }); 116 | }); 117 | } else { 118 | // Service worker found. Proceed as normal. 119 | registerValidSW(swUrl, config); 120 | } 121 | }) 122 | .catch(() => { 123 | console.log( 124 | 'No internet connection found. App is running in offline mode.' 125 | ); 126 | }); 127 | } 128 | 129 | export function unregister() { 130 | if ('serviceWorker' in navigator) { 131 | navigator.serviceWorker.ready.then(registration => { 132 | registration.unregister(); 133 | }); 134 | } 135 | } 136 | -------------------------------------------------------------------------------- /src/style.css: -------------------------------------------------------------------------------- 1 | /* 2 | GENERAL STYLING 3 | */ 4 | body { 5 | background-color: #f5f5f5!important; 6 | color: #4e4e4e!important; 7 | } 8 | 9 | h1, 10 | h2, 11 | h3, 12 | h4, 13 | h5, 14 | h6 { 15 | color: #1e1e1e; 16 | } 17 | 18 | a { 19 | color: #1e1e1e; 20 | transition: all 0.5s ease-in-out; 21 | } 22 | 23 | a:hover { 24 | color: #0078ff; 25 | text-decoration: none; 26 | transition: all 0.5s ease-in-out; 27 | } 28 | 29 | .p-r { 30 | position: relative; 31 | } 32 | 33 | .color-a { 34 | color: #0078ff; 35 | } 36 | 37 | .color-d { 38 | color: #f5f5f5; 39 | } 40 | 41 | .color-text-a { 42 | color: #4e4e4e; 43 | } 44 | 45 | .box-shadow, 46 | .paralax-mf, 47 | .service-box, 48 | .work-box, 49 | .card-blog { 50 | box-shadow: 0 13px 8px -10px rgba(0, 0, 0, 0.1); 51 | } 52 | 53 | .box-shadow-a, 54 | .button:hover { 55 | box-shadow: 0 0 0 4px #cde1f8; 56 | } 57 | 58 | .display-5 { 59 | font-size: 2.5rem; 60 | font-weight: 300; 61 | line-height: 1.1; 62 | } 63 | 64 | .display-6 { 65 | font-size: 2rem; 66 | font-weight: 300; 67 | line-height: 1.1; 68 | } 69 | 70 | .avatar { 71 | width: 32px; 72 | height: 32px; 73 | margin-right: 4px; 74 | overflow: hidden; 75 | } 76 | 77 | .bg-image { 78 | background-repeat: no-repeat; 79 | background-attachment: fixed; 80 | background-size: cover; 81 | background-position: center center; 82 | } 83 | 84 | .overlay-mf { 85 | background-color: #0078ff; 86 | } 87 | 88 | .overlay-mf { 89 | position: absolute; 90 | top: 0; 91 | left: 0px; 92 | padding: 0; 93 | height: 100%; 94 | width: 100%; 95 | opacity: .7; 96 | } 97 | 98 | .paralax-mf { 99 | position: relative; 100 | padding: 8rem 0; 101 | } 102 | 103 | .display-table { 104 | width: 100%; 105 | height: 100%; 106 | display: table; 107 | } 108 | 109 | .table-cell { 110 | display: table-cell; 111 | vertical-align: middle; 112 | } 113 | 114 | /* Sections */ 115 | 116 | .sect-4 { 117 | padding: 4rem 0; 118 | } 119 | 120 | .sect-pt4 { 121 | padding-top: 4rem; 122 | } 123 | 124 | .sect-mt4 { 125 | margin-top: 4rem; 126 | } 127 | 128 | /* Title S */ 129 | 130 | .title-s { 131 | font-weight: 600; 132 | color: #1e1e1e; 133 | font-size: 1.1rem; 134 | } 135 | 136 | /* Title A */ 137 | 138 | .title-box { 139 | margin-bottom: 4rem; 140 | } 141 | 142 | .title-a { 143 | font-size: 3rem; 144 | font-weight: bold; 145 | text-transform: uppercase; 146 | } 147 | 148 | .subtitle-a { 149 | color: #4e4e4e; 150 | } 151 | 152 | .line-mf { 153 | width: 40px; 154 | height: 5px; 155 | background-color: #0078ff; 156 | margin: 0 auto; 157 | } 158 | 159 | /* Title Left */ 160 | 161 | .title-box-2 { 162 | margin-bottom: 3rem; 163 | } 164 | 165 | .title-left { 166 | font-size: 2rem; 167 | position: relative; 168 | } 169 | 170 | .title-left:before { 171 | content: ''; 172 | position: absolute; 173 | height: 3px; 174 | background-color: #0078ff; 175 | width: 100px; 176 | bottom: -12px; 177 | } 178 | 179 | /* Box */ 180 | 181 | .box-pl2 { 182 | padding-left: 2rem; 183 | } 184 | 185 | .box-shadow-full { 186 | padding: 3rem 1.25rem; 187 | position: relative; 188 | background-color: #fff; 189 | margin-bottom: 3rem; 190 | z-index: 2; 191 | box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.06), 0 2px 5px 0 rgba(0, 0, 0, 0.2); 192 | } 193 | 194 | /* Socials */ 195 | 196 | .socials { 197 | padding: 1.5rem 0; 198 | } 199 | 200 | .socials ul li { 201 | display: inline-block; 202 | } 203 | 204 | .socials .ico-circle { 205 | height: 40px; 206 | width: 40px; 207 | font-size: 1.7rem; 208 | border-radius: 50%; 209 | line-height: 1.4; 210 | margin: 0 15px 0 0; 211 | box-shadow: 0 0 0 3px #0078ff; 212 | transition: all 500ms ease; 213 | } 214 | 215 | .socials .ico-circle:hover { 216 | background-color: #0078ff; 217 | color: #fff; 218 | box-shadow: 0 0 0 3px #cde1f8; 219 | transition: all 500ms ease; 220 | } 221 | 222 | /* Ul resect */ 223 | 224 | .ul-resect, 225 | .socials ul, 226 | .list-ico, 227 | .blog-wrapper .post-meta ul, 228 | .box-comments .list-comments, 229 | .widget-sidebar .list-sidebar, 230 | .widget-tags ul { 231 | list-style: none; 232 | padding-left: 0; 233 | margin-bottom: 0; 234 | } 235 | 236 | .list-ico { 237 | line-height: 2; 238 | } 239 | 240 | .list-ico span { 241 | color: #0078ff; 242 | margin-right: 10px; 243 | } 244 | 245 | /* Ico Circle */ 246 | 247 | .ico-circle { 248 | height: 100px; 249 | width: 100px; 250 | font-size: 2rem; 251 | border-radius: 50%; 252 | line-height: 1.55; 253 | margin: 0 auto; 254 | text-align: center; 255 | box-shadow: 0 0 0 10px #0078ff; 256 | display: block; 257 | } 258 | 259 | /* Owl Carousel */ 260 | 261 | .owl-theme .owl-dots { 262 | text-align: center; 263 | margin-top: 18px; 264 | } 265 | 266 | .owl-theme .owl-dots .owl-dot { 267 | display: inline-block; 268 | } 269 | 270 | .owl-theme .owl-dots .owl-dot span { 271 | width: 18px; 272 | height: 7px; 273 | margin: 5px 5px; 274 | background: #cde1f8; 275 | border: 0px solid #cde1f8; 276 | display: block; 277 | transition: all 0.6s ease-in-out; 278 | cursor: pointer; 279 | } 280 | 281 | .owl-theme .owl-dots .owl-dot:hover span { 282 | background-color: #cde1f8; 283 | } 284 | 285 | .owl-theme .owl-dots .owl-dot.active span { 286 | background-color: #1B1B1B; 287 | width: 25px; 288 | } 289 | 290 | /* Scrolltop S */ 291 | 292 | .scrolltop-mf { 293 | position: relative; 294 | display: none; 295 | } 296 | 297 | .scrolltop-mf span { 298 | z-index: 999; 299 | position: fixed; 300 | width: 42px; 301 | height: 42px; 302 | background-color: #0078ff; 303 | opacity: .7; 304 | font-size: 1.6rem; 305 | line-height: 1.5; 306 | text-align: center; 307 | color: #fff; 308 | top: auto; 309 | left: auto; 310 | right: 30px; 311 | bottom: 50px; 312 | cursor: pointer; 313 | border-radius: 50%; 314 | } 315 | 316 | /* Back to top button */ 317 | 318 | .back-to-top { 319 | position: fixed; 320 | display: none; 321 | background: #0078ff; 322 | color: #fff; 323 | width: 44px; 324 | height: 44px; 325 | text-align: center; 326 | line-height: 1; 327 | font-size: 16px; 328 | border-radius: 50%; 329 | right: 15px; 330 | bottom: 15px; 331 | transition: background 0.5s; 332 | z-index: 11; 333 | } 334 | 335 | .back-to-top i { 336 | padding-top: 12px; 337 | color: #fff; 338 | } 339 | 340 | /* Prelaoder */ 341 | 342 | #preloader { 343 | position: fixed; 344 | top: 0; 345 | left: 0; 346 | right: 0; 347 | bottom: 0; 348 | z-index: 9999; 349 | overflow: hidden; 350 | background: #fff; 351 | } 352 | 353 | #preloader:before { 354 | content: ""; 355 | position: fixed; 356 | top: calc(50% - 30px); 357 | left: calc(50% - 30px); 358 | border: 6px solid #f2f2f2; 359 | border-top: 6px solid #0078ff; 360 | border-radius: 50%; 361 | width: 60px; 362 | height: 60px; 363 | -webkit-animation: animate-preloader 1s linear infinite; 364 | animation: animate-preloader 1s linear infinite; 365 | } 366 | 367 | @-webkit-keyframes animate-preloader { 368 | 0% { 369 | -webkit-transform: rotate(0deg); 370 | transform: rotate(0deg); 371 | } 372 | 373 | 100% { 374 | -webkit-transform: rotate(360deg); 375 | transform: rotate(360deg); 376 | } 377 | } 378 | 379 | @keyframes animate-preloader { 380 | 0% { 381 | -webkit-transform: rotate(0deg); 382 | transform: rotate(0deg); 383 | } 384 | 385 | 100% { 386 | -webkit-transform: rotate(360deg); 387 | transform: rotate(360deg); 388 | } 389 | } 390 | 391 | /* 392 | NAVBAR 393 | */ 394 | 395 | .navbar-b { 396 | transition: all .5s ease-in-out; 397 | background-color: transparent; 398 | padding-top: 1.563rem; 399 | padding-bottom: 1.563rem; 400 | } 401 | 402 | .navbar-b.navbar-reduce { 403 | box-shadow: 0px 6px 9px 0px rgba(0, 0, 0, 0.06); 404 | } 405 | 406 | .navbar-b.navbar-trans .nav-item, 407 | .navbar-b.navbar-reduce .nav-item { 408 | position: relative; 409 | padding-right: 10px; 410 | padding-left: 0; 411 | } 412 | 413 | .navbar-b.navbar-trans .nav-link, 414 | .navbar-b.navbar-reduce .nav-link { 415 | color: #fff; 416 | text-transform: uppercase; 417 | font-weight: 600; 418 | } 419 | 420 | .navbar-b.navbar-trans .nav-link:before, 421 | .navbar-b.navbar-reduce .nav-link:before { 422 | content: ''; 423 | position: absolute; 424 | margin-left: 0px; 425 | width: 0%; 426 | bottom: 0; 427 | left: 0; 428 | height: 2px; 429 | transition: all 500ms ease; 430 | } 431 | 432 | .navbar-b.navbar-trans .nav-link:hover, 433 | .navbar-b.navbar-reduce .nav-link:hover { 434 | color: #1B1B1B; 435 | } 436 | 437 | .navbar-b.navbar-trans .nav-link:hover:before, 438 | .navbar-b.navbar-reduce .nav-link:hover:before { 439 | width: 35px; 440 | } 441 | 442 | .navbar-b.navbar-trans .show > .nav-link:before, 443 | .navbar-b.navbar-trans .active > .nav-link:before, 444 | .navbar-b.navbar-trans .nav-link.show:before, 445 | .navbar-b.navbar-trans .nav-link.active:before, 446 | .navbar-b.navbar-reduce .show > .nav-link:before, 447 | .navbar-b.navbar-reduce .active > .nav-link:before, 448 | .navbar-b.navbar-reduce .nav-link.show:before, 449 | .navbar-b.navbar-reduce .nav-link.active:before { 450 | width: 35px; 451 | } 452 | 453 | .navbar-b.navbar-trans .nav-link:before { 454 | background-color: #fff; 455 | } 456 | 457 | .navbar-b.navbar-trans .nav-link:hover { 458 | color: #fff; 459 | } 460 | 461 | .navbar-b.navbar-trans .show > .nav-link, 462 | .navbar-b.navbar-trans .active > .nav-link, 463 | .navbar-b.navbar-trans .nav-link.show, 464 | .navbar-b.navbar-trans .nav-link.active { 465 | color: #fff; 466 | } 467 | 468 | .navbar-b.navbar-reduce { 469 | transition: all .5s ease-in-out; 470 | background-color: #fff; 471 | padding-top: 15px; 472 | padding-bottom: 15px; 473 | } 474 | 475 | .navbar-b.navbar-reduce .nav-link { 476 | color: #0078ff; 477 | } 478 | 479 | .navbar-b.navbar-reduce .nav-link:before { 480 | background-color: #0078ff; 481 | } 482 | 483 | .navbar-b.navbar-reduce .nav-link:hover { 484 | color: #0078ff; 485 | } 486 | 487 | .navbar-b.navbar-reduce .show > .nav-link, 488 | .navbar-b.navbar-reduce .active > .nav-link, 489 | .navbar-b.navbar-reduce .nav-link.show, 490 | .navbar-b.navbar-reduce .nav-link.active { 491 | color: #0078ff; 492 | } 493 | 494 | .navbar-b.navbar-reduce .navbar-brand { 495 | color: #0078ff; 496 | } 497 | 498 | .navbar-b.navbar-reduce .navbar-toggler span { 499 | background-color: #1B1B1B; 500 | } 501 | 502 | .navbar-b .navbar-brand { 503 | color: #fff; 504 | font-size: 1.6rem; 505 | font-weight: 600; 506 | } 507 | 508 | .navbar-b .navbar-nav .dropdown-item.show .dropdown-menu, 509 | .navbar-b .dropdown.show .dropdown-menu, 510 | .navbar-b .dropdown-btn.show .dropdown-menu { 511 | -webkit-transform: translate3d(0px, 0px, 0px); 512 | transform: translate3d(0px, 0px, 0px); 513 | visibility: visible !important; 514 | } 515 | 516 | .navbar-b .dropdown-menu { 517 | margin: 1.12rem 0 0; 518 | border-radius: 0; 519 | } 520 | 521 | .navbar-b .dropdown-menu .dropdown-item { 522 | padding: .7rem 1.7rem; 523 | transition: all 500ms ease; 524 | } 525 | 526 | .navbar-b .dropdown-menu .dropdown-item:hover { 527 | background-color: #0078ff; 528 | color: #fff; 529 | transition: all 500ms ease; 530 | } 531 | 532 | .navbar-b .dropdown-menu .dropdown-item.active { 533 | background-color: #0078ff; 534 | } 535 | 536 | /* Hamburger Navbar */ 537 | 538 | .navbar-toggler { 539 | position: relative; 540 | } 541 | 542 | .navbar-toggler:focus, 543 | .navbar-toggler:active { 544 | outline: 0; 545 | } 546 | 547 | .navbar-toggler span { 548 | display: block; 549 | background-color: #fff; 550 | height: 3px; 551 | width: 25px; 552 | margin-top: 4px; 553 | margin-bottom: 4px; 554 | -webkit-transform: rotate(0deg); 555 | transform: rotate(0deg); 556 | left: 0; 557 | opacity: 1; 558 | } 559 | 560 | .navbar-toggler span:nth-child(1), 561 | .navbar-toggler span:nth-child(3) { 562 | transition: -webkit-transform .35s ease-in-out; 563 | transition: transform .35s ease-in-out; 564 | transition: transform .35s ease-in-out, -webkit-transform .35s ease-in-out; 565 | } 566 | 567 | .navbar-toggler:not(.collapsed) span:nth-child(1) { 568 | position: absolute; 569 | left: 12px; 570 | top: 10px; 571 | -webkit-transform: rotate(135deg); 572 | transform: rotate(135deg); 573 | opacity: 0.9; 574 | } 575 | 576 | .navbar-toggler:not(.collapsed) span:nth-child(2) { 577 | height: 12px; 578 | visibility: hidden; 579 | background-color: transparent; 580 | } 581 | 582 | .navbar-toggler:not(.collapsed) span:nth-child(3) { 583 | position: absolute; 584 | left: 12px; 585 | top: 10px; 586 | -webkit-transform: rotate(-135deg); 587 | transform: rotate(-135deg); 588 | opacity: 0.9; 589 | } 590 | 591 | /* 592 | INTRO 593 | */ 594 | 595 | .intro { 596 | height: 100vh; 597 | position: relative; 598 | color: #fff; 599 | } 600 | 601 | .intro .intro-content { 602 | text-align: center; 603 | position: absolute; 604 | } 605 | 606 | .intro .overlay-intro { 607 | background-color: rgba(0, 0, 0, 0.6); 608 | position: absolute; 609 | top: 0; 610 | left: 0px; 611 | padding: 0; 612 | height: 100%; 613 | width: 100%; 614 | opacity: .9; 615 | } 616 | 617 | .intro .intro-title { 618 | color: #fff; 619 | font-weight: 600; 620 | font-size: 3rem; 621 | } 622 | 623 | .intro .intro-subtitle { 624 | font-size: 1.5rem; 625 | font-weight: 300; 626 | } 627 | 628 | /* .intro .text-slider-items { 629 | font-weight: bolder; 630 | } */ 631 | 632 | .intro-single { 633 | height: 350px; 634 | } 635 | 636 | .intro-single .intro-content { 637 | margin-top: 30px; 638 | } 639 | 640 | .intro-single .intro-title { 641 | text-transform: uppercase; 642 | font-size: 3rem; 643 | } 644 | 645 | .intro-single .breadcrumb { 646 | background-color: transparent; 647 | color: #0078ff; 648 | } 649 | 650 | .intro-single .breadcrumb .breadcrumb-item:before { 651 | color: #cde1f8; 652 | } 653 | 654 | .intro-single .breadcrumb .breadcrumb-item.active { 655 | color: #cde1f8; 656 | } 657 | 658 | .intro-single .breadcrumb a { 659 | color: #fff; 660 | } 661 | 662 | /* 663 | ABOUT 664 | */ 665 | 666 | .about-mf .box-shadow-full { 667 | padding-top: 4rem; 668 | padding-bottom: 4rem; 669 | } 670 | 671 | .about-mf .about-img { 672 | margin-bottom: 2rem; 673 | } 674 | 675 | .about-mf .about-img img { 676 | margin-left: 10px; 677 | } 678 | 679 | .skill-mf span { 680 | color: #4e4e4e; 681 | } 682 | 683 | .skill-mf .progress { 684 | background-color: #cde1f8; 685 | margin: .5rem 0 1.2rem 0; 686 | border-radius: 0; 687 | height: .7rem; 688 | } 689 | 690 | .skill-mf .progress .progress-bar { 691 | height: .7rem; 692 | background-color: #0078ff; 693 | } 694 | 695 | /* 696 | PORTFOLIO 697 | */ 698 | 699 | .work-box { 700 | margin-bottom: 3rem; 701 | -webkit-backface-visibility: hidden; 702 | backface-visibility: hidden; 703 | background-color: #fff; 704 | } 705 | 706 | .work-box:hover img { 707 | -webkit-transform: scale(1.3); 708 | transform: scale(1.3); 709 | } 710 | 711 | .work-img { 712 | display: block; 713 | overflow: hidden; 714 | } 715 | 716 | .work-img img { 717 | transition: all 1s; 718 | } 719 | 720 | .work-content { 721 | padding: 2rem 3% 1rem 4%; 722 | } 723 | 724 | .work-content .w-more { 725 | color: #4e4e4e; 726 | font-size: .8rem; 727 | } 728 | 729 | .work-content .w-more .w-ctegory { 730 | color: #0078ff; 731 | } 732 | 733 | .work-content .w-like { 734 | font-size: 2.5rem; 735 | color: #0078ff; 736 | float: right; 737 | } 738 | 739 | .work-content .w-like a { 740 | color: #0078ff; 741 | } 742 | 743 | .work-content .w-like .num-like { 744 | font-size: .7rem; 745 | } 746 | 747 | .w-title { 748 | font-size: 1.2rem; 749 | } 750 | 751 | /* 752 | TESTIMONIALS 753 | */ 754 | 755 | .testimonials .owl-carousel .owl-item img { 756 | width: auto; 757 | } 758 | 759 | .testimonial-box { 760 | color: #fff; 761 | text-align: center; 762 | } 763 | 764 | .testimonial-box .author-test { 765 | margin-top: 1rem; 766 | } 767 | 768 | .testimonial-box .author-test img { 769 | margin: 0 auto; 770 | } 771 | 772 | .testimonial-box .author { 773 | color: #fff; 774 | text-transform: uppercase; 775 | font-weight: 600; 776 | margin: 1rem 0; 777 | display: block; 778 | font-size: 1.4rem; 779 | } 780 | 781 | .testimonial-box .comit { 782 | font-size: 2rem; 783 | color: #0078ff; 784 | background-color: #fff; 785 | width: 52px; 786 | height: 52px; 787 | display: block; 788 | margin: 0 auto; 789 | border-radius: 50%; 790 | line-height: 1.6; 791 | } 792 | 793 | /* 794 | CONTACT 795 | */ 796 | 797 | .footer-paralax { 798 | padding: 4rem 0 0 0; 799 | } 800 | 801 | .contact-mf { 802 | margin-top: 4rem; 803 | } 804 | 805 | /* 806 | FOOTER 807 | */ 808 | 809 | footer { 810 | text-align: center; 811 | color: #fff; 812 | padding-bottom: 4rem; 813 | } 814 | 815 | footer .copyright { 816 | margin-bottom: .3rem; 817 | } 818 | 819 | /* 820 | CONTACT 821 | */ 822 | 823 | #sendmessage { 824 | color: #0078ff; 825 | border: 1px solid #0078ff; 826 | display: none; 827 | text-align: center; 828 | padding: 15px; 829 | font-weight: 600; 830 | margin-bottom: 15px; 831 | } 832 | 833 | #errormessage { 834 | color: red; 835 | display: none; 836 | border: 1px solid red; 837 | text-align: center; 838 | padding: 15px; 839 | font-weight: 600; 840 | margin-bottom: 15px; 841 | } 842 | 843 | #sendmessage.show, 844 | #errormessage.show, 845 | .show { 846 | display: block; 847 | } 848 | 849 | .validation { 850 | color: red; 851 | display: none; 852 | margin: 0 0 20px; 853 | font-weight: 400; 854 | font-size: 13px; 855 | } 856 | 857 | /* 858 | BUTTON 859 | */ 860 | 861 | .button { 862 | display: inline-block; 863 | padding: .3rem .6rem; 864 | text-align: center; 865 | vertical-align: middle; 866 | -webkit-user-select: none; 867 | -moz-user-select: none; 868 | -ms-user-select: none; 869 | user-select: none; 870 | font-size: 1rem; 871 | border-radius: .3rem; 872 | border: 1px solid transparent; 873 | transition: all 500ms ease; 874 | cursor: pointer; 875 | } 876 | 877 | .button:focus { 878 | outline: 0; 879 | } 880 | 881 | .button:hover { 882 | background-color: #0062d3; 883 | color: #fff; 884 | transition: all 500ms ease; 885 | } 886 | 887 | .button-a { 888 | background-color: #0078ff; 889 | color: #fff; 890 | border-color: #cde1f8; 891 | } 892 | 893 | .button-big { 894 | padding: .9rem 2.3rem; 895 | font-size: 1.2rem; 896 | } 897 | 898 | .button-rouded { 899 | border-radius: 5rem; 900 | } 901 | 902 | .btn-lg { 903 | padding: .5rem 1rem; 904 | font-size: 1.25rem; 905 | line-height: 1.5; 906 | border-radius: .3rem; 907 | } 908 | 909 | @media (min-width: 577px) { 910 | .counter-box { 911 | margin-bottom: 1.8rem; 912 | } 913 | } 914 | 915 | @media (min-width: 767px) { 916 | .about-mf .box-pl2 { 917 | margin-top: 3rem; 918 | padding-left: 0rem; 919 | } 920 | 921 | .card-blog { 922 | margin-bottom: 3rem; 923 | } 924 | 925 | .contact-mf .box-pl2 { 926 | margin-top: 3rem; 927 | padding-left: 0rem; 928 | } 929 | } 930 | 931 | @media (min-width: 768px) { 932 | .box-shadow-full { 933 | padding: 3rem; 934 | } 935 | 936 | .navbar-b.navbar-trans .nav-item, 937 | .navbar-b.navbar-reduce .nav-item { 938 | padding-left: 10px; 939 | } 940 | 941 | .navbar-b.navbar-trans .nav-link:before, 942 | .navbar-b.navbar-reduce .nav-link:before { 943 | margin-left: 18px; 944 | } 945 | 946 | .intro .intro-title { 947 | font-size: 4.5rem; 948 | } 949 | 950 | .intro .intro-subtitle { 951 | font-size: 2.5rem; 952 | } 953 | 954 | .intro-single .intro-title { 955 | font-size: 3.5rem; 956 | } 957 | 958 | .testimonial-box .description { 959 | padding: 0 5rem; 960 | } 961 | 962 | .post-box, 963 | .form-comments, 964 | .box-comments, 965 | .widget-sidebar { 966 | padding: 3rem; 967 | } 968 | 969 | .blog-wrapper .article-title { 970 | font-size: 1.9rem; 971 | } 972 | 973 | .box-comments .list-comments .comment-author { 974 | font-size: 1.5rem; 975 | } 976 | } 977 | 978 | @media (min-width: 992px) { 979 | .testimonial-box .description { 980 | padding: 0 8rem; 981 | } 982 | } 983 | 984 | @media (min-width: 1200px) { 985 | .testimonial-box .description { 986 | padding: 0 13rem; 987 | } 988 | } 989 | 990 | @media (max-width: 1024px) { 991 | .bg-image { 992 | background-attachment: scroll; 993 | } 994 | } 995 | 996 | @media (max-width: 768px) { 997 | .back-to-top { 998 | bottom: 15px; 999 | } 1000 | } -------------------------------------------------------------------------------- /test.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shloksomani/react-portfolio/07ad1f11d9688d8c27bed9ba02c50d7d2be16d7c/test.gif --------------------------------------------------------------------------------