diff --git a/public/Readme.txt b/public/Readme.txt new file mode 100644 index 0000000000000000000000000000000000000000..4e315718c25b0725c8d80c19e19f96f9d6d698cd --- /dev/null +++ b/public/Readme.txt @@ -0,0 +1,6 @@ +Thanks for downloading this template! + +Template Name: FlexStart +Template URL: https://bootstrapmade.com/flexstart-bootstrap-startup-template/ +Author: BootstrapMade.com +License: https://bootstrapmade.com/license/ diff --git a/public/assets/css/main.css b/public/assets/css/main.css new file mode 100644 index 0000000000000000000000000000000000000000..dd337f4f2af66fd43c761f10e45cef5ae38903a7 --- /dev/null +++ b/public/assets/css/main.css @@ -0,0 +1,2766 @@ +/** +* Template Name: FlexStart +* Template URL: https://bootstrapmade.com/flexstart-bootstrap-startup-template/ +* Updated: Jun 29 2024 with Bootstrap v5.3.3 +* Author: BootstrapMade.com +* License: https://bootstrapmade.com/license/ +*/ + +/*-------------------------------------------------------------- +# Font & Color Variables +# Help: https://bootstrapmade.com/color-system/ +--------------------------------------------------------------*/ +/* Fonts */ +:root { + --default-font: "Roboto", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --heading-font: "Nunito", sans-serif; + --nav-font: "Poppins", sans-serif; +} + +/* Global Colors - The following color variables are used throughout the website. Updating them here will change the color scheme of the entire website */ +:root { + --background-color: #ffffff; /* Background color for the entire website, including individual sections */ + --default-color: #444444; /* Default color used for the majority of the text content across the entire website */ + --heading-color: #012970; /* Color for headings, subheadings and title throughout the website */ + --accent-color: #4154f1; /* Accent color that represents your brand on the website. It's used for buttons, links, and other elements that need to stand out */ + --surface-color: #ffffff; /* The surface color is used as a background of boxed elements within sections, such as cards, icon boxes, or other elements that require a visual separation from the global background. */ + --contrast-color: #ffffff; /* Contrast color for text, ensuring readability against backgrounds of accent, heading, or default colors. */ +} + +/* Nav Menu Colors - The following color variables are used specifically for the navigation menu. They are separate from the global colors to allow for more customization options */ +:root { + --nav-color: #012970; /* The default color of the main navmenu links */ + --nav-hover-color: #4154f1; /* Applied to main navmenu links when they are hovered over or active */ + --nav-mobile-background-color: #ffffff; /* Used as the background color for mobile navigation menu */ + --nav-dropdown-background-color: #ffffff; /* Used as the background color for dropdown items that appear when hovering over primary navigation items */ + --nav-dropdown-color: #212529; /* Used for navigation links of the dropdown items in the navigation menu. */ + --nav-dropdown-hover-color: #4154f1; /* Similar to --nav-hover-color, this color is applied to dropdown navigation links when they are hovered over. */ +} + +/* Color Presets - These classes override global colors when applied to any section or element, providing reuse of the sam color scheme. */ + +.light-background { + --background-color: #f9f9f9; + --surface-color: #ffffff; +} + +.dark-background { + --background-color: #060606; + --default-color: #ffffff; + --heading-color: #ffffff; + --surface-color: #252525; + --contrast-color: #ffffff; +} + +/* Smooth scroll */ +:root { + scroll-behavior: smooth; +} + +/*-------------------------------------------------------------- +# General Styling & Shared Classes +--------------------------------------------------------------*/ +body { + color: var(--default-color); + background-color: var(--background-color); + font-family: var(--default-font); +} + +a { + color: var(--accent-color); + text-decoration: none; + transition: 0.3s; +} + +a:hover { + color: color-mix(in srgb, var(--accent-color), transparent 25%); + text-decoration: none; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + color: var(--heading-color); + font-family: var(--heading-font); +} + +/* PHP Email Form Messages +------------------------------*/ +.php-email-form .error-message { + display: none; + background: #df1529; + color: #ffffff; + text-align: left; + padding: 15px; + margin-bottom: 24px; + font-weight: 600; +} + +.php-email-form .sent-message { + display: none; + color: #ffffff; + background: #059652; + text-align: center; + padding: 15px; + margin-bottom: 24px; + font-weight: 600; +} + +.php-email-form .loading { + display: none; + background: var(--surface-color); + text-align: center; + padding: 15px; + margin-bottom: 24px; +} + +.php-email-form .loading:before { + content: ""; + display: inline-block; + border-radius: 50%; + width: 24px; + height: 24px; + margin: 0 10px -6px 0; + border: 3px solid var(--accent-color); + border-top-color: var(--surface-color); + animation: php-email-form-loading 1s linear infinite; +} + +@keyframes php-email-form-loading { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } +} + +/*-------------------------------------------------------------- +# Global Header +--------------------------------------------------------------*/ +.header { + color: var(--default-color); + background-color: var(--background-color); + padding: 20px 0; + transition: all 0.5s; + z-index: 997; +} + +.header .logo { + line-height: 1; +} + +.header .logo img { + max-height: 36px; + margin-right: 8px; +} + +.header .logo h1 { + font-size: 30px; + margin: 0; + font-weight: 700; + color: var(--heading-color); +} + +.header .btn-getstarted, +.header .btn-getstarted:focus { + color: var(--contrast-color); + background: var(--accent-color); + font-size: 15px; + padding: 8px 25px; + margin: 0 0 0 30px; + border-radius: 4px; + transition: 0.3s; + font-weight: 500; +} + +.header .btn-getstarted:hover, +.header .btn-getstarted:focus:hover { + color: var(--contrast-color); + background: color-mix(in srgb, var(--accent-color), transparent 15%); +} + +@media (max-width: 1200px) { + .header .logo { + order: 1; + } + + .header .btn-getstarted { + order: 2; + margin: 0 15px 0 0; + padding: 6px 15px; + } + + .header .navmenu { + order: 3; + } +} + +.scrolled .header { + box-shadow: 0px 0 18px rgba(0, 0, 0, 0.1); +} + +/* Index Page Header +------------------------------*/ +.index-page .header { + --background-color: rgba(255, 255, 255, 0); +} + +/* Index Page Header on Scroll +------------------------------*/ +.index-page.scrolled .header { + --background-color: #ffffff; +} + +/*-------------------------------------------------------------- +# Navigation Menu +--------------------------------------------------------------*/ +/* Navmenu - Desktop */ +@media (min-width: 1200px) { + .navmenu { + padding: 0; + } + + .navmenu ul { + margin: 0; + padding: 0; + display: flex; + list-style: none; + align-items: center; + } + + .navmenu li { + position: relative; + } + + .navmenu a, + .navmenu a:focus { + color: var(--nav-color); + padding: 18px 12px; + font-size: 15px; + font-family: var(--nav-font); + font-weight: 500; + display: flex; + align-items: center; + justify-content: space-between; + white-space: nowrap; + transition: 0.3s; + } + + .navmenu a i, + .navmenu a:focus i { + font-size: 12px; + line-height: 0; + margin-left: 5px; + transition: 0.3s; + } + + .navmenu li:last-child a { + padding-right: 0; + } + + .navmenu li:hover>a, + .navmenu .active, + .navmenu .active:focus { + color: var(--nav-hover-color); + } + + .navmenu .dropdown ul { + margin: 0; + padding: 10px 0; + background: var(--nav-dropdown-background-color); + display: block; + position: absolute; + visibility: hidden; + left: 14px; + top: 130%; + opacity: 0; + transition: 0.3s; + border-radius: 4px; + z-index: 99; + box-shadow: 0px 0px 30px rgba(0, 0, 0, 0.1); + } + + .navmenu .dropdown ul li { + min-width: 200px; + } + + .navmenu .dropdown ul a { + padding: 10px 20px; + font-size: 15px; + text-transform: none; + color: var(--nav-dropdown-color); + } + + .navmenu .dropdown ul a i { + font-size: 12px; + } + + .navmenu .dropdown ul a:hover, + .navmenu .dropdown ul .active:hover, + .navmenu .dropdown ul li:hover>a { + color: var(--nav-dropdown-hover-color); + } + + .navmenu .dropdown:hover>ul { + opacity: 1; + top: 100%; + visibility: visible; + } + + .navmenu .dropdown .dropdown ul { + top: 0; + left: -90%; + visibility: hidden; + } + + .navmenu .dropdown .dropdown:hover>ul { + opacity: 1; + top: 0; + left: -100%; + visibility: visible; + } +} + +/* Navmenu - Mobile */ +@media (max-width: 1199px) { + .mobile-nav-toggle { + color: var(--nav-color); + font-size: 28px; + line-height: 0; + margin-right: 10px; + cursor: pointer; + transition: color 0.3s; + } + + .navmenu { + padding: 0; + z-index: 9997; + } + + .navmenu ul { + display: none; + position: absolute; + inset: 60px 20px 20px 20px; + padding: 10px 0; + margin: 0; + border-radius: 6px; + background-color: var(--nav-mbile-background-color); + overflow-y: auto; + transition: 0.3s; + z-index: 9998; + box-shadow: 0px 0px 30px rgba(0, 0, 0, 0.1); + } + + .navmenu a, + .navmenu a:focus { + color: var(--nav-dropdown-color); + padding: 10px 20px; + font-family: var(--nav-font); + font-size: 17px; + font-weight: 500; + display: flex; + align-items: center; + justify-content: space-between; + white-space: nowrap; + transition: 0.3s; + } + + .navmenu a i, + .navmenu a:focus i { + font-size: 12px; + line-height: 0; + margin-left: 5px; + width: 30px; + height: 30px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 50%; + transition: 0.3s; + background-color: color-mix(in srgb, var(--accent-color), transparent 90%); + } + + .navmenu a i:hover, + .navmenu a:focus i:hover { + background-color: var(--accent-color); + color: var(--contrast-color); + } + + .navmenu a:hover, + .navmenu .active, + .navmenu .active:focus { + color: var(--nav-dropdown-hover-color); + } + + .navmenu .active i, + .navmenu .active:focus i { + background-color: var(--accent-color); + color: var(--contrast-color); + transform: rotate(180deg); + } + + .navmenu .dropdown ul { + position: static; + display: none; + z-index: 99; + padding: 10px 0; + margin: 10px 20px; + background-color: var(--nav-dropdown-background-color); + border: 1px solid color-mix(in srgb, var(--default-color), transparent 90%); + box-shadow: none; + transition: all 0.5s ease-in-out; + } + + .navmenu .dropdown ul ul { + background-color: rgba(33, 37, 41, 0.1); + } + + .navmenu .dropdown>.dropdown-active { + display: block; + background-color: rgba(33, 37, 41, 0.03); + } + + .mobile-nav-active { + overflow: hidden; + } + + .mobile-nav-active .mobile-nav-toggle { + color: #fff; + position: absolute; + font-size: 32px; + top: 15px; + right: 15px; + margin-right: 0; + z-index: 9999; + } + + .mobile-nav-active .navmenu { + position: fixed; + overflow: hidden; + inset: 0; + background: rgba(33, 37, 41, 0.8); + transition: 0.3s; + } + + .mobile-nav-active .navmenu>ul { + display: block; + } +} + +/* Listing Dropdown - Desktop */ +@media (min-width: 1200px) { + .navmenu .listing-dropdown { + position: static; + } + + .navmenu .listing-dropdown ul { + margin: 0; + padding: 10px; + background: var(--nav-dropdown-background-color); + box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.1); + position: absolute; + top: 130%; + left: 0; + right: 0; + visibility: hidden; + opacity: 0; + display: flex; + transition: 0.3s; + border-radius: 4px; + z-index: 99; + } + + .navmenu .listing-dropdown ul li { + flex: 1; + } + + .navmenu .listing-dropdown ul li a, + .navmenu .listing-dropdown ul li:hover>a { + padding: 10px 20px; + font-size: 15px; + color: var(--nav-dropdown-color); + background-color: var(--nav-dropdown-background-color); + } + + .navmenu .listing-dropdown ul li a:hover, + .navmenu .listing-dropdown ul li .active, + .navmenu .listing-dropdown ul li .active:hover { + color: var(--nav-dropdown-hover-color); + background-color: var(--nav-dropdown-background-color); + } + + .navmenu .listing-dropdown:hover>ul { + opacity: 1; + top: 100%; + visibility: visible; + } +} + +/* Listing Dropdown - Mobile */ +@media (max-width: 1199px) { + .navmenu .listing-dropdown ul { + position: static; + display: none; + z-index: 99; + padding: 10px 0; + margin: 10px 20px; + background-color: var(--nav-dropdown-background-color); + border: 1px solid color-mix(in srgb, var(--default-color), transparent 90%); + box-shadow: none; + transition: all 0.5s ease-in-out; + } + + .navmenu .listing-dropdown ul ul { + background-color: rgba(33, 37, 41, 0.1); + } + + .navmenu .listing-dropdown>.dropdown-active { + display: block; + background-color: rgba(33, 37, 41, 0.03); + } +} + +/*-------------------------------------------------------------- +# Global Footer +--------------------------------------------------------------*/ +.footer { + color: var(--default-color); + background-color: var(--background-color); + font-size: 14px; + padding-bottom: 50px; + position: relative; +} + +.footer .footer-newsletter { + background-color: color-mix(in srgb, var(--accent-color), transparent 97%); + border-top: 1px solid color-mix(in srgb, var(--accent-color), transparent 85%); + border-bottom: 1px solid color-mix(in srgb, var(--accent-color), transparent 85%); + padding: 50px 0; +} + +.footer .footer-newsletter h4 { + font-size: 24px; +} + +.footer .footer-newsletter .newsletter-form { + margin-top: 30px; + margin-bottom: 15px; + padding: 6px 8px; + position: relative; + background-color: color-mix(in srgb, var(--background-color), transparent 50%); + border: 1px solid color-mix(in srgb, var(--default-color), transparent 90%); + box-shadow: 0px 2px 25px rgba(0, 0, 0, 0.1); + display: flex; + transition: 0.3s; + border-radius: 4px; +} + +.footer .footer-newsletter .newsletter-form:focus-within { + border-color: var(--accent-color); +} + +.footer .footer-newsletter .newsletter-form input[type=email] { + border: 0; + padding: 4px; + width: 100%; + background-color: color-mix(in srgb, var(--background-color), transparent 50%); + color: var(--default-color); +} + +.footer .footer-newsletter .newsletter-form input[type=email]:focus-visible { + outline: none; +} + +.footer .footer-newsletter .newsletter-form input[type=submit] { + border: 0; + font-size: 16px; + padding: 0 20px; + margin: -7px -8px -7px 0; + background: var(--accent-color); + color: var(--contrast-color); + transition: 0.3s; + border-radius: 0 4px 4px 0; +} + +.footer .footer-newsletter .newsletter-form input[type=submit]:hover { + background: color-mix(in srgb, var(--accent-color), transparent 20%); +} + +.footer .footer-top { + padding-top: 50px; +} + +.footer .social-links a { + display: flex; + align-items: center; + justify-content: center; + width: 40px; + height: 40px; + border-radius: 4px; + background-color: color-mix(in srgb, var(--accent-color), transparent 97%); + border: 1px solid color-mix(in srgb, var(--accent-color), transparent 85%); + font-size: 16px; + color: var(--accent-color); + margin-right: 10px; + transition: 0.3s; +} + +.footer .social-links a:hover { + color: var(--contrast-color); + background-color: var(--accent-color); +} + +.footer h4 { + font-size: 16px; + font-weight: bold; + position: relative; + padding-bottom: 12px; +} + +.footer .footer-links { + margin-bottom: 30px; +} + +.footer .footer-links ul { + list-style: none; + padding: 0; + margin: 0; +} + +.footer .footer-links ul i { + margin-right: 3px; + font-size: 12px; + line-height: 0; + color: var(--accent-color); +} + +.footer .footer-links ul li { + padding: 10px 0; + display: flex; + align-items: center; +} + +.footer .footer-links ul li:first-child { + padding-top: 0; +} + +.footer .footer-links ul a { + display: inline-block; + color: color-mix(in srgb, var(--default-color), transparent 20%); + line-height: 1; +} + +.footer .footer-links ul a:hover { + color: var(--accent-color); +} + +.footer .footer-about a { + color: var(--heading-color); + font-size: 24px; + font-weight: 600; + font-family: var(--heading-font); +} + +.footer .footer-contact p { + margin-bottom: 5px; +} + +.footer .copyright { + padding-top: 25px; + padding-bottom: 25px; + border-top: 1px solid color-mix(in srgb, var(--default-color), transparent 90%); +} + +.footer .copyright p { + margin-bottom: 0; +} + +.footer .credits { + margin-top: 6px; + font-size: 13px; +} + +/*-------------------------------------------------------------- +# Scroll Top Button +--------------------------------------------------------------*/ +.scroll-top { + position: fixed; + visibility: hidden; + opacity: 0; + right: 15px; + bottom: 15px; + z-index: 99999; + background-color: var(--accent-color); + width: 40px; + height: 40px; + border-radius: 4px; + transition: all 0.4s; +} + +.scroll-top i { + font-size: 24px; + color: var(--contrast-color); + line-height: 0; +} + +.scroll-top:hover { + background-color: color-mix(in srgb, var(--accent-color), transparent 20%); + color: var(--contrast-color); +} + +.scroll-top.active { + visibility: visible; + opacity: 1; +} + +/*-------------------------------------------------------------- +# Disable aos animation delay on mobile devices +--------------------------------------------------------------*/ +@media screen and (max-width: 768px) { + [data-aos-delay] { + transition-delay: 0 !important; + } +} + +/*-------------------------------------------------------------- +# Global Page Titles & Breadcrumbs +--------------------------------------------------------------*/ +.page-title { + color: var(--default-color); + background-color: var(--background-color); + position: relative; +} + +.page-title .heading { + padding: 80px 0; + border-top: 1px solid color-mix(in srgb, var(--default-color), transparent 90%); +} + +.page-title .heading h1 { + font-size: 38px; + font-weight: 700; +} + +.page-title nav { + background-color: color-mix(in srgb, var(--default-color), transparent 95%); + padding: 20px 0; +} + +.page-title nav ol { + display: flex; + flex-wrap: wrap; + list-style: none; + margin: 0; + font-size: 16px; + font-weight: 600; +} + +.page-title nav ol li+li { + padding-left: 10px; +} + +.page-title nav ol li+li::before { + content: "/"; + display: inline-block; + padding-right: 10px; + color: color-mix(in srgb, var(--default-color), transparent 70%); +} + +/*-------------------------------------------------------------- +# Global Sections +--------------------------------------------------------------*/ +section, +.section { + color: var(--default-color); + background-color: var(--background-color); + padding: 60px 0; + scroll-margin-top: 98px; + overflow: clip; +} + +@media (max-width: 1199px) { + + section, + .section { + scroll-margin-top: 56px; + } +} + +/*-------------------------------------------------------------- +# Global Section Titles +--------------------------------------------------------------*/ +.section-title { + text-align: center; + padding-bottom: 60px; + position: relative; +} + +.section-title h2 { + font-size: 13px; + letter-spacing: 1px; + font-weight: 700; + padding: 8px 20px; + margin: 0; + background: color-mix(in srgb, var(--accent-color), transparent 90%); + color: var(--accent-color); + display: inline-block; + text-transform: uppercase; + border-radius: 50px; + font-family: var(--default-font); +} + +.section-title p { + color: var(--heading-color); + margin: 10px 0 0 0; + font-size: 32px; + font-weight: 700; + font-family: var(--heading-font); +} + +.section-title p .description-title { + color: var(--accent-color); +} + +/*-------------------------------------------------------------- +# Hero Section +--------------------------------------------------------------*/ +.hero { + width: 100%; + min-height: 100vh; + position: relative; + padding: 80px 0 60px 0; + display: flex; + align-items: center; + background: url(../img/hero-bg.png) top center no-repeat; + background-size: cover; +} + +.hero h1 { + margin: 0; + font-size: 48px; + font-weight: 700; + line-height: 56px; +} + +.hero p { + color: color-mix(in srgb, var(--default-color), transparent 30%); + margin: 5px 0 30px 0; + font-size: 20px; + font-weight: 400; +} + +.hero .btn-get-started { + color: var(--contrast-color); + background: var(--accent-color); + font-family: var(--heading-font); + font-weight: 500; + font-size: 16px; + letter-spacing: 1px; + display: flex; + align-items: center; + justify-content: center; + padding: 12px 40px; + border-radius: 4px; + transition: 0.5s; + box-shadow: 0 8px 28px rgba(0, 0, 0, 0.1); +} + +.hero .btn-get-started i { + margin-left: 5px; + font-size: 18px; + transition: 0.3s; +} + +.hero .btn-get-started:hover { + color: var(--contrast-color); + background: color-mix(in srgb, var(--accent-color), transparent 15%); + box-shadow: 0 8px 28px rgba(0, 0, 0, 0.1); +} + +.hero .btn-get-started:hover i { + transform: translateX(5px); +} + +.hero .btn-watch-video { + font-size: 16px; + transition: 0.5s; + color: var(--default-color); + font-weight: 600; +} + +.hero .btn-watch-video i { + color: var(--accent-color); + font-size: 32px; + transition: 0.3s; + line-height: 0; + margin-right: 8px; +} + +.hero .btn-watch-video:hover { + color: var(--accent-color); +} + +.hero .btn-watch-video:hover i { + color: color-mix(in srgb, var(--accent-color), transparent 15%); +} + +.hero .animated { + animation: up-down 2s ease-in-out infinite alternate-reverse both; +} + +@media (max-width: 640px) { + .hero h1 { + font-size: 28px; + line-height: 36px; + } + + .hero p { + font-size: 18px; + line-height: 24px; + margin-bottom: 30px; + } +} + +@keyframes up-down { + 0% { + transform: translateY(10px); + } + + 100% { + transform: translateY(-10px); + } +} + +/*-------------------------------------------------------------- +# About Section +--------------------------------------------------------------*/ +.about .content { + background-color: color-mix(in srgb, var(--accent-color), transparent 95%); + padding: 40px; +} + +.about .content h3 { + font-size: 14px; + font-weight: 700; + color: var(--accent-color); + text-transform: uppercase; +} + +.about .content h2 { + font-size: 24px; + font-weight: 700; +} + +.about .content p { + margin: 15px 0 30px 0; + line-height: 24px; +} + +.about .content .btn-read-more { + color: var(--contrast-color); + background: var(--accent-color); + line-height: 0; + padding: 15px 40px; + border-radius: 4px; + transition: 0.5s; + box-shadow: 0px 5px 25px rgba(0, 0, 0, 0.1); +} + +.about .content .btn-read-more span { + font-family: var(--default-font); + font-weight: 600; + font-size: 16px; + letter-spacing: 1px; +} + +.about .content .btn-read-more i { + margin-left: 5px; + font-size: 18px; + transition: 0.3s; +} + +.about .content .btn-read-more:hover i { + transform: translateX(5px); +} + +/*-------------------------------------------------------------- +# Values Section +--------------------------------------------------------------*/ +.values .card { + background-color: var(--surface-color); + color: var(--default-color); + padding: 30px; + box-shadow: 0px 0 10px rgba(0, 0, 0, 0.1); + text-align: center; + transition: 0.3s; + height: 100%; + border: 0; +} + +.values .card img { + padding: 30px 50px; + transition: 0.5s; + transform: scale(1.1); +} + +.values .card h3 { + font-size: 24px; + font-weight: 700; + margin-bottom: 18px; +} + +.values .card:hover { + box-shadow: 0px 0 30px rgba(0, 0, 0, 0.1); +} + +.values .card:hover img { + transform: scale(1); +} + +/*-------------------------------------------------------------- +# Stats Section +--------------------------------------------------------------*/ +.stats .stats-item { + background-color: var(--surface-color); + box-shadow: 0px 0 30px rgba(0, 0, 0, 0.1); + padding: 30px; +} + +.stats .stats-item i { + color: var(--accent-color); + font-size: 42px; + line-height: 0; + margin-right: 20px; +} + +.stats .stats-item span { + color: var(--heading-color); + font-size: 36px; + display: block; + font-weight: 600; +} + +.stats .stats-item p { + padding: 0; + margin: 0; + font-family: var(--heading-font); + font-size: 16px; +} + +/*-------------------------------------------------------------- +# Features Section +--------------------------------------------------------------*/ +.features .feature-box { + padding: 24px 20px; + box-shadow: 0px 0 30px rgba(0, 0, 0, 0.1); + transition: 0.3s; + height: 100%; +} + +.features .feature-box h3 { + font-size: 18px; + font-weight: 700; + margin: 0; +} + +.features .feature-box i { + background: color-mix(in srgb, var(--accent-color), transparent 92%); + color: var(--accent-color); + line-height: 0; + padding: 4px; + margin-right: 10px; + font-size: 24px; + border-radius: 3px; + transition: 0.3s; +} + +.features .feature-box:hover i { + background: var(--accent-color); + color: var(--contrast-color); +} + +/*-------------------------------------------------------------- +# Alt Features Section +--------------------------------------------------------------*/ +.alt-features .icon-box { + display: flex; +} + +.alt-features .icon-box h4 { + font-size: 20px; + font-weight: 700; + margin: 0 0 10px 0; +} + +.alt-features .icon-box i { + font-size: 44px; + line-height: 44px; + color: var(--accent-color); + margin-right: 15px; +} + +.alt-features .icon-box p { + font-size: 15px; + color: color-mix(in srgb, var(--default-color), transparent 30%); + margin-bottom: 0; +} + +/*-------------------------------------------------------------- +# Services Section +--------------------------------------------------------------*/ +.services .service-item { + background-color: var(--surface-color); + box-shadow: 0px 0 30px rgba(0, 0, 0, 0.1); + height: 100%; + padding: 60px 30px; + text-align: center; + transition: 0.3s; + border-radius: 5px; +} + +.services .service-item .icon { + font-size: 36px; + padding: 20px 20px; + border-radius: 4px; + position: relative; + margin-bottom: 25px; + display: inline-block; + line-height: 0; + transition: 0.3s; +} + +.services .service-item h3 { + font-size: 24px; + font-weight: 700; +} + +.services .service-item .read-more { + display: inline-flex; + align-items: center; + justify-content: center; + font-weight: 600; + font-size: 16px; + padding: 8px 20px; +} + +.services .service-item .read-more i { + line-height: 0; + margin-left: 5px; + font-size: 18px; +} + +.services .service-item.item-cyan { + border-bottom: 3px solid #0dcaf0; +} + +.services .service-item.item-cyan .icon { + color: #0dcaf0; + background: rgba(13, 202, 240, 0.1); +} + +.services .service-item.item-cyan .read-more { + color: #0dcaf0; +} + +.services .service-item.item-cyan:hover { + background: #0dcaf0; +} + +.services .service-item.item-orange { + border-bottom: 3px solid #fd7e14; +} + +.services .service-item.item-orange .icon { + color: #fd7e14; + background: rgba(253, 126, 20, 0.1); +} + +.services .service-item.item-orange .read-more { + color: #fd7e14; +} + +.services .service-item.item-orange:hover { + background: #fd7e14; +} + +.services .service-item.item-teal { + border-bottom: 3px solid #20c997; +} + +.services .service-item.item-teal .icon { + color: #20c997; + background: rgba(32, 201, 151, 0.1); +} + +.services .service-item.item-teal .read-more { + color: #20c997; +} + +.services .service-item.item-teal:hover { + background: #20c997; +} + +.services .service-item.item-red { + border-bottom: 3px solid #df1529; +} + +.services .service-item.item-red .icon { + color: #df1529; + background: rgba(223, 21, 4, 0.1); +} + +.services .service-item.item-red .read-more { + color: #df1529; +} + +.services .service-item.item-red:hover { + background: #df1529; +} + +.services .service-item.item-indigo { + border-bottom: 3px solid #6610f2; +} + +.services .service-item.item-indigo .icon { + color: #6610f2; + background: rgba(102, 16, 242, 0.1); +} + +.services .service-item.item-indigo .read-more { + color: #6610f2; +} + +.services .service-item.item-indigo:hover { + background: #6610f2; +} + +.services .service-item.item-pink { + border-bottom: 3px solid #f3268c; +} + +.services .service-item.item-pink .icon { + color: #f3268c; + background: rgba(243, 38, 140, 0.1); +} + +.services .service-item.item-pink .read-more { + color: #f3268c; +} + +.services .service-item.item-pink:hover { + background: #f3268c; +} + +.services .service-item:hover h3, +.services .service-item:hover p, +.services .service-item:hover .read-more { + color: #fff; +} + +.services .service-item:hover .icon { + background: #fff; +} + +/*-------------------------------------------------------------- +# Pricing Section +--------------------------------------------------------------*/ +.pricing .pricing-tem { + background-color: var(--surface-color); + box-shadow: 0px 0 30px rgba(0, 0, 0, 0.1); + padding: 40px 20px; + text-align: center; + border-radius: 4px; + position: relative; + overflow: hidden; + transition: 0.3s; + height: 100%; +} + +@media (min-width: 1200px) { + .pricing .pricing-tem:hover { + transform: scale(1.1); + box-shadow: 0px 0 30px rgba(0, 0, 0, 0.1); + } +} + +.pricing h3 { + font-weight: 700; + font-size: 18px; + margin-bottom: 15px; +} + +.pricing .price { + font-size: 36px; + color: var(--heading-color); + font-weight: 600; + font-family: var(--heading-font); +} + +.pricing .price sup { + font-size: 20px; + top: -15px; + left: -3px; +} + +.pricing .price span { + color: color-mix(in srgb, var(--default-color), transparent 50%); + font-size: 16px; + font-weight: 300; +} + +.pricing .icon { + padding: 20px 0; +} + +.pricing .icon i { + font-size: 48px; +} + +.pricing ul { + padding: 0; + list-style: none; + color: var(--default-color); + text-align: center; + line-height: 26px; + font-size: 16px; + margin-bottom: 25px; +} + +.pricing ul li { + padding-bottom: 10px; +} + +.pricing ul .na { + color: color-mix(in srgb, var(--default-color), transparent 70%); + text-decoration: line-through; +} + +.pricing .btn-buy { + display: inline-block; + padding: 8px 40px 10px 40px; + border-radius: 50px; + color: var(--accent-color); + transition: none; + font-size: 16px; + font-weight: 400; + font-family: var(--heading-font); + font-weight: 600; + transition: 0.3s; + border: 1px solid var(--accent-color); +} + +.pricing .btn-buy:hover { + background: var(--accent-color); + color: var(--contrast-color); +} + +.pricing .featured { + width: 200px; + position: absolute; + top: 18px; + right: -68px; + transform: rotate(45deg); + z-index: 1; + font-size: 14px; + padding: 1px 0 3px 0; + background: var(--accent-color); + color: var(--contrast-color); +} + +/*-------------------------------------------------------------- +# Faq Section +--------------------------------------------------------------*/ +.faq .faq-container .faq-item { + position: relative; + padding: 20px 0; + border-bottom: 1px solid color-mix(in srgb, var(--default-color), transparent 85%); + overflow: hidden; +} + +.faq .faq-container .faq-item:last-child { + margin-bottom: 0; +} + +.faq .faq-container .faq-item h3 { + font-weight: 600; + font-size: 16px; + line-height: 24px; + margin: 0 30px 0 0; + transition: 0.3s; + cursor: pointer; + display: flex; + align-items: center; +} + +.faq .faq-container .faq-item h3 .num { + color: var(--accent-color); + padding-right: 5px; +} + +.faq .faq-container .faq-item h3:hover { + color: var(--accent-color); +} + +.faq .faq-container .faq-item .faq-content { + display: grid; + grid-template-rows: 0fr; + transition: 0.3s ease-in-out; + visibility: hidden; + opacity: 0; +} + +.faq .faq-container .faq-item .faq-content p { + margin-bottom: 0; + overflow: hidden; +} + +.faq .faq-container .faq-item .faq-toggle { + position: absolute; + top: 20px; + right: 20px; + font-size: 16px; + line-height: 0; + transition: 0.3s; + cursor: pointer; +} + +.faq .faq-container .faq-item .faq-toggle:hover { + color: var(--accent-color); +} + +.faq .faq-container .faq-active h3 { + color: var(--accent-color); +} + +.faq .faq-container .faq-active .faq-content { + grid-template-rows: 1fr; + visibility: visible; + opacity: 1; + padding-top: 10px; +} + +.faq .faq-container .faq-active .faq-toggle { + transform: rotate(90deg); + color: var(--accent-color); +} + +/*-------------------------------------------------------------- +# Portfolio Section +--------------------------------------------------------------*/ +.portfolio .portfolio-filters { + padding: 0; + margin: 0 auto 20px auto; + list-style: none; + text-align: center; +} + +.portfolio .portfolio-filters li { + cursor: pointer; + display: inline-block; + padding: 0; + font-size: 18px; + font-weight: 500; + margin: 0 10px; + line-height: 1; + margin-bottom: 5px; + transition: all 0.3s ease-in-out; +} + +.portfolio .portfolio-filters li:hover, +.portfolio .portfolio-filters li.filter-active { + color: var(--accent-color); +} + +.portfolio .portfolio-filters li:first-child { + margin-left: 0; +} + +.portfolio .portfolio-filters li:last-child { + margin-right: 0; +} + +@media (max-width: 575px) { + .portfolio .portfolio-filters li { + font-size: 14px; + margin: 0 5px; + } +} + +.portfolio .portfolio-content { + position: relative; + overflow: hidden; +} + +.portfolio .portfolio-content img { + transition: 0.3s; +} + +.portfolio .portfolio-content .portfolio-info { + opacity: 0; + position: absolute; + inset: 0; + z-index: 3; + transition: all ease-in-out 0.3s; + background: rgba(0, 0, 0, 0.6); + padding: 15px; +} + +.portfolio .portfolio-content .portfolio-info h4 { + font-size: 14px; + padding: 5px 10px; + font-weight: 400; + color: #ffffff; + display: inline-block; + background-color: var(--accent-color); +} + +.portfolio .portfolio-content .portfolio-info p { + position: absolute; + bottom: 10px; + text-align: center; + display: inline-block; + left: 0; + right: 0; + font-size: 16px; + font-weight: 600; + color: rgba(255, 255, 255, 0.8); +} + +.portfolio .portfolio-content .portfolio-info .preview-link, +.portfolio .portfolio-content .portfolio-info .details-link { + position: absolute; + left: calc(50% - 40px); + font-size: 26px; + top: calc(50% - 14px); + color: #fff; + transition: 0.3s; + line-height: 1.2; +} + +.portfolio .portfolio-content .portfolio-info .preview-link:hover, +.portfolio .portfolio-content .portfolio-info .details-link:hover { + color: var(--accent-color); +} + +.portfolio .portfolio-content .portfolio-info .details-link { + left: 50%; + font-size: 34px; + line-height: 0; +} + +.portfolio .portfolio-content:hover .portfolio-info { + opacity: 1; +} + +.portfolio .portfolio-content:hover img { + transform: scale(1.1); +} + +/*-------------------------------------------------------------- +# Testimonials Section +--------------------------------------------------------------*/ +.testimonials .testimonial-item { + background-color: var(--surface-color); + box-shadow: 0px 0 20px rgba(0, 0, 0, 0.1); + box-sizing: content-box; + padding: 30px; + margin: 40px 30px; + min-height: 320px; + display: flex; + flex-direction: column; + text-align: center; + transition: 0.3s; +} + +.testimonials .testimonial-item .stars { + margin-bottom: 15px; +} + +.testimonials .testimonial-item .stars i { + color: #ffc107; + margin: 0 1px; +} + +.testimonials .testimonial-item .testimonial-img { + width: 90px; + border-radius: 50%; + border: 4px solid var(--background-color); + margin: 0 auto; +} + +.testimonials .testimonial-item h3 { + font-size: 18px; + font-weight: bold; + margin: 10px 0 5px 0; +} + +.testimonials .testimonial-item h4 { + font-size: 14px; + color: color-mix(in srgb, var(--default-color), transparent 40%); + margin: 0; +} + +.testimonials .testimonial-item p { + font-style: italic; + margin: 0 auto 15px auto; +} + +.testimonials .swiper-wrapper { + height: auto; +} + +.testimonials .swiper-pagination { + margin-top: 20px; + position: relative; +} + +.testimonials .swiper-pagination .swiper-pagination-bullet { + width: 12px; + height: 12px; + background-color: color-mix(in srgb, var(--default-color), transparent 85%); + opacity: 1; +} + +.testimonials .swiper-pagination .swiper-pagination-bullet-active { + background-color: var(--accent-color); +} + +.testimonials .swiper-slide { + opacity: 0.3; +} + +@media (max-width: 1199px) { + .testimonials .swiper-slide-active { + opacity: 1; + } + + .testimonials .swiper-pagination { + margin-top: 0; + } + + .testimonials .testimonial-item { + margin: 40px 20px; + } +} + +@media (min-width: 1200px) { + .testimonials .swiper-slide-next { + opacity: 1; + transform: scale(1.12); + } +} + +/*-------------------------------------------------------------- +# Team Section +--------------------------------------------------------------*/ +.team .team-member { + box-shadow: 0px 0 30px rgba(0, 0, 0, 0.1); + overflow: hidden; + text-align: center; + border-radius: 5px; + transition: 0.3s; +} + +.team .team-member .member-img { + position: relative; + overflow: hidden; +} + +.team .team-member .member-img:after { + position: absolute; + content: ""; + left: -1px; + right: -1px; + bottom: -1px; + height: 100%; + background-color: var(--surface-color); + -webkit-mask: url("../img/team-shape.svg") no-repeat center bottom; + mask: url("../img/team-shape.svg") no-repeat center bottom; + -webkit-mask-size: contain; + mask-size: contain; + z-index: 1; +} + +.team .team-member .social { + position: absolute; + right: -100%; + top: 30px; + opacity: 0; + border-radius: 4px; + transition: 0.5s; + background: color-mix(in srgb, var(--background-color), transparent 60%); + z-index: 2; +} + +.team .team-member .social a { + transition: color 0.3s; + color: color-mix(in srgb, var(--default-color), transparent 50%); + margin: 15px 12px; + display: block; + line-height: 0; + text-align: center; +} + +.team .team-member .social a:hover { + color: var(--default-color); +} + +.team .team-member .social i { + font-size: 18px; +} + +.team .team-member .member-info { + padding: 10px 15px 20px 15px; +} + +.team .team-member .member-info h4 { + font-weight: 700; + margin-bottom: 5px; + font-size: 20px; +} + +.team .team-member .member-info span { + display: block; + font-size: 14px; + font-weight: 400; + color: color-mix(in srgb, var(--default-color), transparent 50%); +} + +.team .team-member .member-info p { + font-style: italic; + font-size: 14px; + padding-top: 15px; + line-height: 26px; + color: color-mix(in srgb, var(--default-color), transparent 30%); +} + +.team .team-member:hover { + transform: scale(1.08); + box-shadow: 0px 0 30px rgba(0, 0, 0, 0.1); +} + +.team .team-member:hover .social { + right: 8px; + opacity: 1; +} + +/*-------------------------------------------------------------- +# Clients Section +--------------------------------------------------------------*/ +.clients .swiper-slide img { + transition: 0.3s; + opacity: 0.5; +} + +.clients .swiper-slide img:hover { + opacity: 1; +} + +.clients .swiper-wrapper { + height: auto; +} + +.clients .swiper-pagination { + margin-top: 20px; + position: relative; +} + +.clients .swiper-pagination .swiper-pagination-bullet { + width: 12px; + height: 12px; + opacity: 1; + background-color: color-mix(in srgb, var(--default-color), transparent 80%); +} + +.clients .swiper-pagination .swiper-pagination-bullet-active { + background-color: var(--accent-color); +} + +/*-------------------------------------------------------------- +# Recent Posts Section +--------------------------------------------------------------*/ +.recent-posts .post-item { + background-color: var(--surface-color); + box-shadow: 0px 2px 20px rgba(0, 0, 0, 0.1); + transition: 0.3s; +} + +.recent-posts .post-item .post-img img { + transition: 0.5s; +} + +.recent-posts .post-item .post-date { + position: absolute; + right: 0; + bottom: 0; + background-color: var(--accent-color); + color: var(--contrast-color); + text-transform: uppercase; + font-size: 13px; + padding: 6px 12px; + font-weight: 500; +} + +.recent-posts .post-item .post-content { + padding: 30px; +} + +.recent-posts .post-item .post-title { + color: var(--heading-color); + font-size: 20px; + font-weight: 700; + transition: 0.3s; + margin-bottom: 15px; +} + +.recent-posts .post-item .meta i { + font-size: 16px; + color: var(--accent-color); +} + +.recent-posts .post-item .meta span { + font-size: 15px; + color: color-mix(in srgb, var(--default-color), transparent 50%); +} + +.recent-posts .post-item hr { + color: color-mix(in srgb, var(--default-color), transparent 80%); + margin: 20px 0; +} + +.recent-posts .post-item .readmore { + display: flex; + align-items: center; + font-weight: 600; + line-height: 1; + transition: 0.3s; + color: color-mix(in srgb, var(--default-color), transparent 40%); +} + +.recent-posts .post-item .readmore i { + line-height: 0; + margin-left: 6px; + font-size: 16px; +} + +.recent-posts .post-item:hover .post-title, +.recent-posts .post-item:hover .readmore { + color: var(--accent-color); +} + +.recent-posts .post-item:hover .post-img img { + transform: scale(1.1); +} + +/*-------------------------------------------------------------- +# Contact Section +--------------------------------------------------------------*/ +.contact .info-item { + background: color-mix(in srgb, var(--default-color), transparent 96%); + padding: 30px; +} + +.contact .info-item i { + font-size: 38px; + line-height: 0; + color: var(--accent-color); +} + +.contact .info-item h3 { + font-size: 20px; + font-weight: 700; + margin: 20px 0 10px 0; +} + +.contact .info-item p { + padding: 0; + line-height: 24px; + font-size: 14px; + margin-bottom: 0; +} + +.contact .php-email-form { + background: color-mix(in srgb, var(--default-color), transparent 96%); + padding: 30px; + height: 100%; +} + +.contact .php-email-form input[type=text], +.contact .php-email-form input[type=email], +.contact .php-email-form textarea { + font-size: 14px; + padding: 10px 15px; + box-shadow: none; + border-radius: 0; + color: var(--default-color); + background-color: color-mix(in srgb, var(--background-color), transparent 50%); + border-color: color-mix(in srgb, var(--default-color), transparent 80%); +} + +.contact .php-email-form input[type=text]:focus, +.contact .php-email-form input[type=email]:focus, +.contact .php-email-form textarea:focus { + border-color: var(--accent-color); +} + +.contact .php-email-form input[type=text]::placeholder, +.contact .php-email-form input[type=email]::placeholder, +.contact .php-email-form textarea::placeholder { + color: color-mix(in srgb, var(--default-color), transparent 70%); +} + +.contact .php-email-form button[type=submit] { + background: var(--accent-color); + color: var(--contrast-color); + border: 0; + padding: 10px 30px; + transition: 0.4s; + border-radius: 4px; +} + +.contact .php-email-form button[type=submit]:hover { + background: color-mix(in srgb, var(--accent-color), transparent 20%); +} + +/*-------------------------------------------------------------- +# Portfolio Details Section +--------------------------------------------------------------*/ +.portfolio-details .portfolio-details-slider img { + width: 100%; +} + +.portfolio-details .portfolio-details-slider .swiper-pagination { + margin-top: 20px; + position: relative; +} + +.portfolio-details .portfolio-details-slider .swiper-pagination .swiper-pagination-bullet { + width: 12px; + height: 12px; + background-color: color-mix(in srgb, var(--default-color), transparent 85%); + opacity: 1; +} + +.portfolio-details .portfolio-details-slider .swiper-pagination .swiper-pagination-bullet-active { + background-color: var(--accent-color); +} + +.portfolio-details .portfolio-info { + background-color: var(--surface-color); + padding: 30px; + box-shadow: 0px 0 30px rgba(0, 0, 0, 0.1); +} + +.portfolio-details .portfolio-info h3 { + font-size: 22px; + font-weight: 700; + margin-bottom: 20px; + padding-bottom: 20px; + border-bottom: 1px solid color-mix(in srgb, var(--default-color), transparent 85%); +} + +.portfolio-details .portfolio-info ul { + list-style: none; + padding: 0; + font-size: 15px; +} + +.portfolio-details .portfolio-info ul li+li { + margin-top: 10px; +} + +.portfolio-details .portfolio-description { + padding-top: 30px; +} + +.portfolio-details .portfolio-description h2 { + font-size: 26px; + font-weight: 700; + margin-bottom: 20px; +} + +.portfolio-details .portfolio-description p { + padding: 0; + color: color-mix(in srgb, var(--default-color), transparent 30%); +} + +/*-------------------------------------------------------------- +# Service Details Section +--------------------------------------------------------------*/ +.service-details .service-box { + background-color: var(--surface-color); + padding: 20px; + box-shadow: 0px 2px 20px rgba(0, 0, 0, 0.1); +} + +.service-details .service-box+.service-box { + margin-top: 30px; +} + +.service-details .service-box h4 { + font-size: 20px; + font-weight: 700; + border-bottom: 2px solid color-mix(in srgb, var(--default-color), transparent 92%); + padding-bottom: 15px; + margin-bottom: 15px; +} + +.service-details .services-list { + background-color: var(--surface-color); +} + +.service-details .services-list a { + color: color-mix(in srgb, var(--default-color), transparent 20%); + background-color: color-mix(in srgb, var(--default-color), transparent 96%); + display: flex; + align-items: center; + padding: 12px 15px; + margin-top: 15px; + transition: 0.3s; +} + +.service-details .services-list a:first-child { + margin-top: 0; +} + +.service-details .services-list a i { + font-size: 16px; + margin-right: 8px; + color: var(--accent-color); +} + +.service-details .services-list a.active { + color: var(--contrast-color); + background-color: var(--accent-color); +} + +.service-details .services-list a.active i { + color: var(--contrast-color); +} + +.service-details .services-list a:hover { + background-color: color-mix(in srgb, var(--accent-color), transparent 95%); + color: var(--accent-color); +} + +.service-details .download-catalog a { + color: var(--default-color); + display: flex; + align-items: center; + padding: 10px 0; + transition: 0.3s; + border-top: 1px solid color-mix(in srgb, var(--default-color), transparent 90%); +} + +.service-details .download-catalog a:first-child { + border-top: 0; + padding-top: 0; +} + +.service-details .download-catalog a:last-child { + padding-bottom: 0; +} + +.service-details .download-catalog a i { + font-size: 24px; + margin-right: 8px; + color: var(--accent-color); +} + +.service-details .download-catalog a:hover { + color: var(--accent-color); +} + +.service-details .help-box { + background-color: var(--accent-color); + color: var(--contrast-color); + margin-top: 30px; + padding: 30px 15px; +} + +.service-details .help-box .help-icon { + font-size: 48px; +} + +.service-details .help-box h4, +.service-details .help-box a { + color: var(--contrast-color); +} + +.service-details .services-img { + margin-bottom: 20px; +} + +.service-details h3 { + font-size: 26px; + font-weight: 700; +} + +.service-details p { + font-size: 15px; +} + +.service-details ul { + list-style: none; + padding: 0; + font-size: 15px; +} + +.service-details ul li { + padding: 5px 0; + display: flex; + align-items: center; +} + +.service-details ul i { + font-size: 20px; + margin-right: 8px; + color: var(--accent-color); +} + +/*-------------------------------------------------------------- +# Starter Section Section +--------------------------------------------------------------*/ +.starter-section { + /* Add your styles here */ +} + +/*-------------------------------------------------------------- +# Blog Posts Section +--------------------------------------------------------------*/ +.blog-posts article { + background-color: var(--surface-color); + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1); + padding: 30px; + height: 100%; +} + +.blog-posts .post-img { + max-height: 440px; + margin: -30px -30px 0 -30px; + overflow: hidden; +} + +.blog-posts .title { + font-size: 24px; + font-weight: 700; + padding: 0; + margin: 30px 0; +} + +.blog-posts .title a { + color: var(--heading-color); + transition: 0.3s; +} + +.blog-posts .title a:hover { + color: var(--accent-color); +} + +.blog-posts .meta-top { + margin-top: 20px; + color: color-mix(in srgb, var(--default-color), transparent 40%); +} + +.blog-posts .meta-top ul { + display: flex; + flex-wrap: wrap; + list-style: none; + align-items: center; + padding: 0; + margin: 0; +} + +.blog-posts .meta-top ul li+li { + padding-left: 20px; +} + +.blog-posts .meta-top i { + font-size: 16px; + margin-right: 8px; + line-height: 0; + color: color-mix(in srgb, var(--default-color), transparent 20%); +} + +.blog-posts .meta-top a { + color: color-mix(in srgb, var(--default-color), transparent 40%); + font-size: 14px; + display: inline-block; + line-height: 1; +} + +.blog-posts .content { + margin-top: 20px; +} + +.blog-posts .content .read-more { + text-align: right; +} + +.blog-posts .content .read-more a { + background: var(--accent-color); + color: var(--contrast-color); + display: inline-block; + padding: 8px 30px; + transition: 0.3s; + font-size: 14px; + border-radius: 4px; +} + +.blog-posts .content .read-more a:hover { + background: color-mix(in srgb, var(--accent-color), transparent 20%); +} + +/*-------------------------------------------------------------- +# Blog Pagination Section +--------------------------------------------------------------*/ +.blog-pagination { + padding-top: 0; + color: color-mix(in srgb, var(--default-color), transparent 40%); +} + +.blog-pagination ul { + display: flex; + padding: 0; + margin: 0; + list-style: none; +} + +.blog-pagination li { + margin: 0 5px; + transition: 0.3s; +} + +.blog-pagination li a { + color: color-mix(in srgb, var(--default-color), transparent 40%); + padding: 7px 16px; + display: flex; + align-items: center; + justify-content: center; +} + +.blog-pagination li a.active, +.blog-pagination li a:hover { + background: var(--accent-color); + color: var(--contrast-color); +} + +.blog-pagination li a.active a, +.blog-pagination li a:hover a { + color: var(--contrast-color); +} + +/*-------------------------------------------------------------- +# Blog Details Section +--------------------------------------------------------------*/ +.blog-details { + padding-bottom: 30px; +} + +.blog-details .article { + background-color: var(--surface-color); + padding: 30px; + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1); +} + +.blog-details .post-img { + margin: -30px -30px 20px -30px; + overflow: hidden; +} + +.blog-details .title { + color: var(--heading-color); + font-size: 28px; + font-weight: 700; + padding: 0; + margin: 30px 0; +} + +.blog-details .content { + margin-top: 20px; +} + +.blog-details .content h3 { + font-size: 22px; + margin-top: 30px; + font-weight: bold; +} + +.blog-details .content blockquote { + overflow: hidden; + background-color: color-mix(in srgb, var(--default-color), transparent 95%); + padding: 60px; + position: relative; + text-align: center; + margin: 20px 0; +} + +.blog-details .content blockquote p { + color: var(--default-color); + line-height: 1.6; + margin-bottom: 0; + font-style: italic; + font-weight: 500; + font-size: 22px; +} + +.blog-details .content blockquote:after { + content: ""; + position: absolute; + left: 0; + top: 0; + bottom: 0; + width: 3px; + background-color: var(--accent-color); + margin-top: 20px; + margin-bottom: 20px; +} + +.blog-details .meta-top { + margin-top: 20px; + color: color-mix(in srgb, var(--default-color), transparent 40%); +} + +.blog-details .meta-top ul { + display: flex; + flex-wrap: wrap; + list-style: none; + align-items: center; + padding: 0; + margin: 0; +} + +.blog-details .meta-top ul li+li { + padding-left: 20px; +} + +.blog-details .meta-top i { + font-size: 16px; + margin-right: 8px; + line-height: 0; + color: color-mix(in srgb, var(--default-color), transparent 40%); +} + +.blog-details .meta-top a { + color: color-mix(in srgb, var(--default-color), transparent 40%); + font-size: 14px; + display: inline-block; + line-height: 1; +} + +.blog-details .meta-bottom { + padding-top: 10px; + border-top: 1px solid color-mix(in srgb, var(--default-color), transparent 90%); +} + +.blog-details .meta-bottom i { + color: color-mix(in srgb, var(--default-color), transparent 40%); + display: inline; +} + +.blog-details .meta-bottom a { + color: color-mix(in srgb, var(--default-color), transparent 40%); + transition: 0.3s; +} + +.blog-details .meta-bottom a:hover { + color: var(--accent-color); +} + +.blog-details .meta-bottom .cats { + list-style: none; + display: inline; + padding: 0 20px 0 0; + font-size: 14px; +} + +.blog-details .meta-bottom .cats li { + display: inline-block; +} + +.blog-details .meta-bottom .tags { + list-style: none; + display: inline; + padding: 0; + font-size: 14px; +} + +.blog-details .meta-bottom .tags li { + display: inline-block; +} + +.blog-details .meta-bottom .tags li+li::before { + padding-right: 6px; + color: var(--default-color); + content: ","; +} + +.blog-details .meta-bottom .share { + font-size: 16px; +} + +.blog-details .meta-bottom .share i { + padding-left: 5px; +} + +/*-------------------------------------------------------------- +# Blog Author Section +--------------------------------------------------------------*/ +.blog-author { + padding: 10px 0 40px 0; +} + +.blog-author .author-container { + background-color: var(--surface-color); + padding: 20px; + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1); +} + +.blog-author img { + max-width: 120px; + margin-right: 20px; +} + +.blog-author h4 { + font-weight: 600; + font-size: 20px; + margin-bottom: 0px; + padding: 0; + color: color-mix(in srgb, var(--default-color), transparent 20%); +} + +.blog-author .social-links { + margin: 0 10px 10px 0; +} + +.blog-author .social-links a { + color: color-mix(in srgb, var(--default-color), transparent 60%); + margin-right: 5px; +} + +.blog-author p { + font-style: italic; + color: color-mix(in srgb, var(--default-color), transparent 30%); + margin-bottom: 0; +} + +/*-------------------------------------------------------------- +# Blog Comments Section +--------------------------------------------------------------*/ +.blog-comments { + padding: 10px 0; +} + +.blog-comments .comments-count { + font-weight: bold; +} + +.blog-comments .comment { + margin-top: 30px; + position: relative; +} + +.blog-comments .comment .comment-img { + margin-right: 14px; +} + +.blog-comments .comment .comment-img img { + width: 60px; +} + +.blog-comments .comment h5 { + font-size: 16px; + margin-bottom: 2px; +} + +.blog-comments .comment h5 a { + font-weight: bold; + color: var(--default-color); + transition: 0.3s; +} + +.blog-comments .comment h5 a:hover { + color: var(--accent-color); +} + +.blog-comments .comment h5 .reply { + padding-left: 10px; + color: color-mix(in srgb, var(--default-color), transparent 20%); +} + +.blog-comments .comment h5 .reply i { + font-size: 20px; +} + +.blog-comments .comment time { + display: block; + font-size: 14px; + color: color-mix(in srgb, var(--default-color), transparent 40%); + margin-bottom: 5px; +} + +.blog-comments .comment.comment-reply { + padding-left: 40px; +} + +/*-------------------------------------------------------------- +# Comment Form Section +--------------------------------------------------------------*/ +.comment-form { + padding-top: 10px; +} + +.comment-form form { + background-color: var(--surface-color); + margin-top: 30px; + padding: 30px; + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1); +} + +.comment-form form h4 { + font-weight: bold; + font-size: 22px; +} + +.comment-form form p { + font-size: 14px; +} + +.comment-form form input { + background-color: var(--surface-color); + color: var(--default-color); + border: 1px solid color-mix(in srgb, var(--default-color), transparent 70%); + font-size: 14px; + border-radius: 4px; + padding: 10px 10px; +} + +.comment-form form input:focus { + color: var(--default-color); + background-color: var(--surface-color); + box-shadow: none; + border-color: var(--accent-color); +} + +.comment-form form input::placeholder { + color: color-mix(in srgb, var(--default-color), transparent 50%); +} + +.comment-form form textarea { + background-color: var(--surface-color); + color: var(--default-color); + border: 1px solid color-mix(in srgb, var(--default-color), transparent 70%); + border-radius: 4px; + padding: 10px 10px; + font-size: 14px; + height: 120px; +} + +.comment-form form textarea:focus { + color: var(--default-color); + box-shadow: none; + border-color: var(--accent-color); + background-color: var(--surface-color); +} + +.comment-form form textarea::placeholder { + color: color-mix(in srgb, var(--default-color), transparent 50%); +} + +.comment-form form .form-group { + margin-bottom: 25px; +} + +.comment-form form .btn-primary { + border-radius: 4px; + padding: 10px 20px; + border: 0; + background-color: var(--accent-color); + color: var(--contrast-color); +} + +.comment-form form .btn-primary:hover { + color: var(--contrast-color); + background-color: color-mix(in srgb, var(--accent-color), transparent 20%); +} + +/*-------------------------------------------------------------- +# Widgets +--------------------------------------------------------------*/ +.widgets-container { + background-color: var(--surface-color); + padding: 30px; + margin: 60px 0 30px 0; + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1); +} + +.widget-title { + color: var(--heading-color); + font-size: 20px; + font-weight: 700; + padding: 0; + margin: 0 0 20px 0; +} + +.widget-item { + margin-bottom: 40px; +} + +.widget-item:last-child { + margin-bottom: 0; +} + +.search-widget form { + background: var(--background-color); + border: 1px solid color-mix(in srgb, var(--default-color), transparent 70%); + padding: 3px 10px; + position: relative; + transition: 0.3s; +} + +.search-widget form input[type=text] { + border: 0; + padding: 4px; + border-radius: 4px; + width: calc(100% - 40px); + background-color: var(--background-color); + color: var(--default-color); +} + +.search-widget form input[type=text]:focus { + outline: none; +} + +.search-widget form button { + background: var(--accent-color); + color: var(--contrast-color); + position: absolute; + top: 0; + right: 0; + bottom: 0; + border: 0; + font-size: 16px; + padding: 0 15px; + margin: -1px; + transition: 0.3s; + border-radius: 0 4px 4px 0; + line-height: 0; +} + +.search-widget form button i { + line-height: 0; +} + +.search-widget form button:hover { + background: color-mix(in srgb, var(--accent-color), transparent 20%); +} + +.search-widget form:is(:focus-within) { + border-color: var(--accent-color); +} + +.categories-widget ul { + list-style: none; + padding: 0; + margin: 0; +} + +.categories-widget ul li { + padding-bottom: 10px; +} + +.categories-widget ul li:last-child { + padding-bottom: 0; +} + +.categories-widget ul a { + color: color-mix(in srgb, var(--default-color), transparent 20%); + transition: 0.3s; +} + +.categories-widget ul a:hover { + color: var(--accent-color); +} + +.categories-widget ul a span { + padding-left: 5px; + color: color-mix(in srgb, var(--default-color), transparent 50%); + font-size: 14px; +} + +.recent-posts-widget .post-item { + display: flex; + margin-bottom: 15px; +} + +.recent-posts-widget .post-item:last-child { + margin-bottom: 0; +} + +.recent-posts-widget .post-item img { + width: 80px; + margin-right: 15px; +} + +.recent-posts-widget .post-item h4 { + font-size: 15px; + font-weight: bold; + margin-bottom: 5px; +} + +.recent-posts-widget .post-item h4 a { + color: var(--default-color); + transition: 0.3s; +} + +.recent-posts-widget .post-item h4 a:hover { + color: var(--accent-color); +} + +.recent-posts-widget .post-item time { + display: block; + font-style: italic; + font-size: 14px; + color: color-mix(in srgb, var(--default-color), transparent 50%); +} + +.tags-widget { + margin-bottom: -10px; +} + +.tags-widget ul { + list-style: none; + padding: 0; + margin: 0; +} + +.tags-widget ul li { + display: inline-block; +} + +.tags-widget ul a { + color: color-mix(in srgb, var(--default-color), transparent 30%); + font-size: 14px; + padding: 6px 14px; + margin: 0 6px 8px 0; + border: 1px solid color-mix(in srgb, var(--default-color), transparent 60%); + display: inline-block; + transition: 0.3s; +} + +.tags-widget ul a:hover { + background: var(--accent-color); + color: var(--contrast-color); + border: 1px solid var(--accent-color); +} + +.tags-widget ul a span { + padding-left: 5px; + color: color-mix(in srgb, var(--default-color), transparent 60%); + font-size: 14px; +} \ No newline at end of file diff --git a/public/assets/img/about.jpg b/public/assets/img/about.jpg new file mode 100644 index 0000000000000000000000000000000000000000..74ecdc9a0ca19b092f19ff3189bbeb8b07b6f439 Binary files /dev/null and b/public/assets/img/about.jpg differ diff --git a/public/assets/img/alt-features.png b/public/assets/img/alt-features.png new file mode 100644 index 0000000000000000000000000000000000000000..e05ea14edfa025679f4c2d9be3c7d2c3040f31f2 Binary files /dev/null and b/public/assets/img/alt-features.png differ diff --git a/public/assets/img/apple-touch-icon.png b/public/assets/img/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fbdc8f70bb637d34392ee698cae33b111c9f83da Binary files /dev/null and b/public/assets/img/apple-touch-icon.png differ diff --git a/public/assets/img/blog/blog-1.jpg b/public/assets/img/blog/blog-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bed70c5ccf1e2d4cce3c926886e9329c848719f3 Binary files /dev/null and b/public/assets/img/blog/blog-1.jpg differ diff --git a/public/assets/img/blog/blog-2.jpg b/public/assets/img/blog/blog-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2fec5c7f44893c572f941d0b7a027c88a27ada96 Binary files /dev/null and b/public/assets/img/blog/blog-2.jpg differ diff --git a/public/assets/img/blog/blog-3.jpg b/public/assets/img/blog/blog-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..779068f249e555e3bc2d8115a8d05a80ebc97462 Binary files /dev/null and b/public/assets/img/blog/blog-3.jpg differ diff --git a/public/assets/img/blog/blog-4.jpg b/public/assets/img/blog/blog-4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2237e926126f2dbf412975177c10c2012a9376be Binary files /dev/null and b/public/assets/img/blog/blog-4.jpg differ diff --git a/public/assets/img/blog/blog-author.jpg b/public/assets/img/blog/blog-author.jpg new file mode 100644 index 0000000000000000000000000000000000000000..07c4aa02a337eb56e190602e76ac306e88897cf3 Binary files /dev/null and b/public/assets/img/blog/blog-author.jpg differ diff --git a/public/assets/img/blog/blog-inside-post.jpg b/public/assets/img/blog/blog-inside-post.jpg new file mode 100644 index 0000000000000000000000000000000000000000..05f723a77de87080210b8721eae30e8a5fa9ee96 Binary files /dev/null and b/public/assets/img/blog/blog-inside-post.jpg differ diff --git a/public/assets/img/blog/blog-recent-1.jpg b/public/assets/img/blog/blog-recent-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a2c77f1da07dbbacd8bf54d556b4f3e77ed006b5 Binary files /dev/null and b/public/assets/img/blog/blog-recent-1.jpg differ diff --git a/public/assets/img/blog/blog-recent-2.jpg b/public/assets/img/blog/blog-recent-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a39581022a8a3ec11d932abd81747b5545a6702 Binary files /dev/null and b/public/assets/img/blog/blog-recent-2.jpg differ diff --git a/public/assets/img/blog/blog-recent-3.jpg b/public/assets/img/blog/blog-recent-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..710ec0ad807d51518ad67eb77f0d4e589ca8ba1f Binary files /dev/null and b/public/assets/img/blog/blog-recent-3.jpg differ diff --git a/public/assets/img/blog/blog-recent-4.jpg b/public/assets/img/blog/blog-recent-4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..81caaf3ddbe9ab3b12702e211cd82f990e90125d Binary files /dev/null and b/public/assets/img/blog/blog-recent-4.jpg differ diff --git a/public/assets/img/blog/blog-recent-5.jpg b/public/assets/img/blog/blog-recent-5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..779068f249e555e3bc2d8115a8d05a80ebc97462 Binary files /dev/null and b/public/assets/img/blog/blog-recent-5.jpg differ diff --git a/public/assets/img/blog/comments-1.jpg b/public/assets/img/blog/comments-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..172556ce55838ab0bb3d816194dd90c66ce8f45f Binary files /dev/null and b/public/assets/img/blog/comments-1.jpg differ diff --git a/public/assets/img/blog/comments-2.jpg b/public/assets/img/blog/comments-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2144d039cfa713b42b0ae156d2e3c695c7766642 Binary files /dev/null and b/public/assets/img/blog/comments-2.jpg differ diff --git a/public/assets/img/blog/comments-3.jpg b/public/assets/img/blog/comments-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f23e1424be13a6ad5c3e2a3d51fa4b182348e5e4 Binary files /dev/null and b/public/assets/img/blog/comments-3.jpg differ diff --git a/public/assets/img/blog/comments-4.jpg b/public/assets/img/blog/comments-4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e3be7c7a963b176553c452b2f1155983af960dd2 Binary files /dev/null and b/public/assets/img/blog/comments-4.jpg differ diff --git a/public/assets/img/blog/comments-5.jpg b/public/assets/img/blog/comments-5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9980301a2268036618bc009807ea5e661971cea4 Binary files /dev/null and b/public/assets/img/blog/comments-5.jpg differ diff --git a/public/assets/img/blog/comments-6.jpg b/public/assets/img/blog/comments-6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f9f6bfc8cec68bb579b72527c8377f3bcfd0f85e Binary files /dev/null and b/public/assets/img/blog/comments-6.jpg differ diff --git a/public/assets/img/clients/client-1.png b/public/assets/img/clients/client-1.png new file mode 100644 index 0000000000000000000000000000000000000000..6e9300c5235bb6eae6c4889b73b6bd5ce42b7d1d Binary files /dev/null and b/public/assets/img/clients/client-1.png differ diff --git a/public/assets/img/clients/client-2.png b/public/assets/img/clients/client-2.png new file mode 100644 index 0000000000000000000000000000000000000000..2c432571bf261cebcb8c0d3e167102ac28c1990d Binary files /dev/null and b/public/assets/img/clients/client-2.png differ diff --git a/public/assets/img/clients/client-3.png b/public/assets/img/clients/client-3.png new file mode 100644 index 0000000000000000000000000000000000000000..2cd1f00f2e2d9415d8dbf3dba78297dc24afacd3 Binary files /dev/null and b/public/assets/img/clients/client-3.png differ diff --git a/public/assets/img/clients/client-4.png b/public/assets/img/clients/client-4.png new file mode 100644 index 0000000000000000000000000000000000000000..6174f4e025be14eb50454fe5a31d73cccb8bba65 Binary files /dev/null and b/public/assets/img/clients/client-4.png differ diff --git a/public/assets/img/clients/client-5.png b/public/assets/img/clients/client-5.png new file mode 100644 index 0000000000000000000000000000000000000000..4c62cfa75e54018bafbb0c90d75641c143ced1a7 Binary files /dev/null and b/public/assets/img/clients/client-5.png differ diff --git a/public/assets/img/clients/client-6.png b/public/assets/img/clients/client-6.png new file mode 100644 index 0000000000000000000000000000000000000000..0c8e9c47fbee85005a46859a102e89e3dc170d06 Binary files /dev/null and b/public/assets/img/clients/client-6.png differ diff --git a/public/assets/img/clients/client-7.png b/public/assets/img/clients/client-7.png new file mode 100644 index 0000000000000000000000000000000000000000..96904fc3b275a77ebb5d5f0e4775bb2d9244219c Binary files /dev/null and b/public/assets/img/clients/client-7.png differ diff --git a/public/assets/img/clients/client-8.png b/public/assets/img/clients/client-8.png new file mode 100644 index 0000000000000000000000000000000000000000..6b8fcc0de870d19ef42fe4cfc468067d1f2a5e97 Binary files /dev/null and b/public/assets/img/clients/client-8.png differ diff --git a/public/assets/img/favicon.png b/public/assets/img/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..7c7f277a171737ec67755a0b795cf2c6b4e9ca18 Binary files /dev/null and b/public/assets/img/favicon.png differ diff --git a/public/assets/img/features.png b/public/assets/img/features.png new file mode 100644 index 0000000000000000000000000000000000000000..036cdb8557e4a407e6dec7646a686ca5d1070b5b Binary files /dev/null and b/public/assets/img/features.png differ diff --git a/public/assets/img/hero-bg.png b/public/assets/img/hero-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..db0759d6dc4b0fa5a0b076aec7c2b5f01c019119 Binary files /dev/null and b/public/assets/img/hero-bg.png differ diff --git a/public/assets/img/hero-img.png b/public/assets/img/hero-img.png new file mode 100644 index 0000000000000000000000000000000000000000..58924d6aed69e95d3df66428dc1d134f3c0de7b9 Binary files /dev/null and b/public/assets/img/hero-img.png differ diff --git a/public/assets/img/logo.png b/public/assets/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..dc3d62adf3781468bfccfb9dd425280351d88205 Binary files /dev/null and b/public/assets/img/logo.png differ diff --git a/public/assets/img/portfolio/app-1.jpg b/public/assets/img/portfolio/app-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9c81393dfab7fa7e68cefbd3e1ffe77b9ab06faa Binary files /dev/null and b/public/assets/img/portfolio/app-1.jpg differ diff --git a/public/assets/img/portfolio/app-2.jpg b/public/assets/img/portfolio/app-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d2f0588219d507440afb6e6510ed18b322f0c09 Binary files /dev/null and b/public/assets/img/portfolio/app-2.jpg differ diff --git a/public/assets/img/portfolio/app-3.jpg b/public/assets/img/portfolio/app-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3338cbd8b2c6e3eea915a223b2003d97a1499de5 Binary files /dev/null and b/public/assets/img/portfolio/app-3.jpg differ diff --git a/public/assets/img/portfolio/books-1.jpg b/public/assets/img/portfolio/books-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..601d2ec57b00a3024057a1ebea5f44f0f7cdc7c2 Binary files /dev/null and b/public/assets/img/portfolio/books-1.jpg differ diff --git a/public/assets/img/portfolio/books-2.jpg b/public/assets/img/portfolio/books-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..97dad98c7d298b8ee42681465912e829c57fe794 Binary files /dev/null and b/public/assets/img/portfolio/books-2.jpg differ diff --git a/public/assets/img/portfolio/books-3.jpg b/public/assets/img/portfolio/books-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4b9326baf356b770fd56bb180a7180172361037f Binary files /dev/null and b/public/assets/img/portfolio/books-3.jpg differ diff --git a/public/assets/img/portfolio/branding-1.jpg b/public/assets/img/portfolio/branding-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..edb6ede7765546f98dbd59d5a5d6519afb13a2b0 Binary files /dev/null and b/public/assets/img/portfolio/branding-1.jpg differ diff --git a/public/assets/img/portfolio/branding-2.jpg b/public/assets/img/portfolio/branding-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b3613499ee03c8ac893a3b58e9e31c5444d9a6ac Binary files /dev/null and b/public/assets/img/portfolio/branding-2.jpg differ diff --git a/public/assets/img/portfolio/branding-3.jpg b/public/assets/img/portfolio/branding-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5e3a8c2f0a4f4a57964acf30b0cbdd4e5aee4e76 Binary files /dev/null and b/public/assets/img/portfolio/branding-3.jpg differ diff --git a/public/assets/img/portfolio/product-1.jpg b/public/assets/img/portfolio/product-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b8605bdf190785bac5ef99110f338c14d1f766a6 Binary files /dev/null and b/public/assets/img/portfolio/product-1.jpg differ diff --git a/public/assets/img/portfolio/product-2.jpg b/public/assets/img/portfolio/product-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..05075aa035d33271882a0c19c0684158874989af Binary files /dev/null and b/public/assets/img/portfolio/product-2.jpg differ diff --git a/public/assets/img/portfolio/product-3.jpg b/public/assets/img/portfolio/product-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e58467f5795a176de3023d53205b6c1a47f592b9 Binary files /dev/null and b/public/assets/img/portfolio/product-3.jpg differ diff --git a/public/assets/img/services.jpg b/public/assets/img/services.jpg new file mode 100644 index 0000000000000000000000000000000000000000..674784d2c3ceb1249a370963459d28686ec0f8df Binary files /dev/null and b/public/assets/img/services.jpg differ diff --git a/public/assets/img/team-shape.svg b/public/assets/img/team-shape.svg new file mode 100644 index 0000000000000000000000000000000000000000..deff5be7105795824c43eeae708309d0ab03f56d --- /dev/null +++ b/public/assets/img/team-shape.svg @@ -0,0 +1 @@ + diff --git a/public/assets/img/testimonials/testimonials-1.jpg b/public/assets/img/testimonials/testimonials-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cf84417f58e3f2e8864c5cb4f29da84d518283b9 Binary files /dev/null and b/public/assets/img/testimonials/testimonials-1.jpg differ diff --git a/public/assets/img/testimonials/testimonials-2.jpg b/public/assets/img/testimonials/testimonials-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8adbd7b0094a081fae0f2ee6ece5751dff278021 Binary files /dev/null and b/public/assets/img/testimonials/testimonials-2.jpg differ diff --git a/public/assets/img/testimonials/testimonials-3.jpg b/public/assets/img/testimonials/testimonials-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..03e5938cf2ce6f618f175bbc2f2e011b06a20772 Binary files /dev/null and b/public/assets/img/testimonials/testimonials-3.jpg differ diff --git a/public/assets/img/testimonials/testimonials-4.jpg b/public/assets/img/testimonials/testimonials-4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6595cee4c281a61f18bbbe11983ca621f0f6da99 Binary files /dev/null and b/public/assets/img/testimonials/testimonials-4.jpg differ diff --git a/public/assets/img/testimonials/testimonials-5.jpg b/public/assets/img/testimonials/testimonials-5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cb0a6411d9c46067a63cdc58b03c846fe5f9f600 Binary files /dev/null and b/public/assets/img/testimonials/testimonials-5.jpg differ diff --git a/public/assets/img/values-1.png b/public/assets/img/values-1.png new file mode 100644 index 0000000000000000000000000000000000000000..6480b7c063622004bb14e2e97f24784a1d6749ed Binary files /dev/null and b/public/assets/img/values-1.png differ diff --git a/public/assets/img/values-2.png b/public/assets/img/values-2.png new file mode 100644 index 0000000000000000000000000000000000000000..82ce98df512ccb8846171bb034c33520a78a8538 Binary files /dev/null and b/public/assets/img/values-2.png differ diff --git a/public/assets/img/values-3.png b/public/assets/img/values-3.png new file mode 100644 index 0000000000000000000000000000000000000000..fe14c73ca295ee76c98bc0593e616b4a43283166 Binary files /dev/null and b/public/assets/img/values-3.png differ diff --git a/public/assets/js/main.js b/public/assets/js/main.js new file mode 100644 index 0000000000000000000000000000000000000000..a958d7e8d2a7514b594af159bfb8e2046f326333 --- /dev/null +++ b/public/assets/js/main.js @@ -0,0 +1,208 @@ +/** +* Template Name: FlexStart +* Template URL: https://bootstrapmade.com/flexstart-bootstrap-startup-template/ +* Updated: Jun 29 2024 with Bootstrap v5.3.3 +* Author: BootstrapMade.com +* License: https://bootstrapmade.com/license/ +*/ + +(function() { + "use strict"; + + /** + * Apply .scrolled class to the body as the page is scrolled down + */ + function toggleScrolled() { + const selectBody = document.querySelector('body'); + const selectHeader = document.querySelector('#header'); + if (!selectHeader.classList.contains('scroll-up-sticky') && !selectHeader.classList.contains('sticky-top') && !selectHeader.classList.contains('fixed-top')) return; + window.scrollY > 100 ? selectBody.classList.add('scrolled') : selectBody.classList.remove('scrolled'); + } + + document.addEventListener('scroll', toggleScrolled); + window.addEventListener('load', toggleScrolled); + + /** + * Mobile nav toggle + */ + const mobileNavToggleBtn = document.querySelector('.mobile-nav-toggle'); + + function mobileNavToogle() { + document.querySelector('body').classList.toggle('mobile-nav-active'); + mobileNavToggleBtn.classList.toggle('bi-list'); + mobileNavToggleBtn.classList.toggle('bi-x'); + } + mobileNavToggleBtn.addEventListener('click', mobileNavToogle); + + /** + * Hide mobile nav on same-page/hash links + */ + document.querySelectorAll('#navmenu a').forEach(navmenu => { + navmenu.addEventListener('click', () => { + if (document.querySelector('.mobile-nav-active')) { + mobileNavToogle(); + } + }); + + }); + + /** + * Toggle mobile nav dropdowns + */ + document.querySelectorAll('.navmenu .toggle-dropdown').forEach(navmenu => { + navmenu.addEventListener('click', function(e) { + e.preventDefault(); + this.parentNode.classList.toggle('active'); + this.parentNode.nextElementSibling.classList.toggle('dropdown-active'); + e.stopImmediatePropagation(); + }); + }); + + /** + * Scroll top button + */ + let scrollTop = document.querySelector('.scroll-top'); + + function toggleScrollTop() { + if (scrollTop) { + window.scrollY > 100 ? scrollTop.classList.add('active') : scrollTop.classList.remove('active'); + } + } + scrollTop.addEventListener('click', (e) => { + e.preventDefault(); + window.scrollTo({ + top: 0, + behavior: 'smooth' + }); + }); + + window.addEventListener('load', toggleScrollTop); + document.addEventListener('scroll', toggleScrollTop); + + /** + * Animation on scroll function and init + */ + function aosInit() { + AOS.init({ + duration: 600, + easing: 'ease-in-out', + once: true, + mirror: false + }); + } + window.addEventListener('load', aosInit); + + /** + * Initiate glightbox + */ + const glightbox = GLightbox({ + selector: '.glightbox' + }); + + /** + * Initiate Pure Counter + */ + new PureCounter(); + + /** + * Frequently Asked Questions Toggle + */ + document.querySelectorAll('.faq-item h3, .faq-item .faq-toggle').forEach((faqItem) => { + faqItem.addEventListener('click', () => { + faqItem.parentNode.classList.toggle('faq-active'); + }); + }); + + /** + * Init isotope layout and filters + */ + document.querySelectorAll('.isotope-layout').forEach(function(isotopeItem) { + let layout = isotopeItem.getAttribute('data-layout') ?? 'masonry'; + let filter = isotopeItem.getAttribute('data-default-filter') ?? '*'; + let sort = isotopeItem.getAttribute('data-sort') ?? 'original-order'; + + let initIsotope; + imagesLoaded(isotopeItem.querySelector('.isotope-container'), function() { + initIsotope = new Isotope(isotopeItem.querySelector('.isotope-container'), { + itemSelector: '.isotope-item', + layoutMode: layout, + filter: filter, + sortBy: sort + }); + }); + + isotopeItem.querySelectorAll('.isotope-filters li').forEach(function(filters) { + filters.addEventListener('click', function() { + isotopeItem.querySelector('.isotope-filters .filter-active').classList.remove('filter-active'); + this.classList.add('filter-active'); + initIsotope.arrange({ + filter: this.getAttribute('data-filter') + }); + if (typeof aosInit === 'function') { + aosInit(); + } + }, false); + }); + + }); + + /** + * Init swiper sliders + */ + function initSwiper() { + document.querySelectorAll(".init-swiper").forEach(function(swiperElement) { + let config = JSON.parse( + swiperElement.querySelector(".swiper-config").innerHTML.trim() + ); + + if (swiperElement.classList.contains("swiper-tab")) { + initSwiperWithCustomPagination(swiperElement, config); + } else { + new Swiper(swiperElement, config); + } + }); + } + + window.addEventListener("load", initSwiper); + + /** + * Correct scrolling position upon page load for URLs containing hash links. + */ + window.addEventListener('load', function(e) { + if (window.location.hash) { + if (document.querySelector(window.location.hash)) { + setTimeout(() => { + let section = document.querySelector(window.location.hash); + let scrollMarginTop = getComputedStyle(section).scrollMarginTop; + window.scrollTo({ + top: section.offsetTop - parseInt(scrollMarginTop), + behavior: 'smooth' + }); + }, 100); + } + } + }); + + /** + * Navmenu Scrollspy + */ + let navmenulinks = document.querySelectorAll('.navmenu a'); + + function navmenuScrollspy() { + navmenulinks.forEach(navmenulink => { + if (!navmenulink.hash) return; + let section = document.querySelector(navmenulink.hash); + if (!section) return; + let position = window.scrollY + 200; + if (position >= section.offsetTop && position <= (section.offsetTop + section.offsetHeight)) { + document.querySelectorAll('.navmenu a.active').forEach(link => link.classList.remove('active')); + navmenulink.classList.add('active'); + } else { + navmenulink.classList.remove('active'); + } + }) + } + window.addEventListener('load', navmenuScrollspy); + document.addEventListener('scroll', navmenuScrollspy); + +})(); \ No newline at end of file diff --git a/public/assets/scss/main.js b/public/assets/scss/main.js new file mode 100644 index 0000000000000000000000000000000000000000..a958d7e8d2a7514b594af159bfb8e2046f326333 --- /dev/null +++ b/public/assets/scss/main.js @@ -0,0 +1,208 @@ +/** +* Template Name: FlexStart +* Template URL: https://bootstrapmade.com/flexstart-bootstrap-startup-template/ +* Updated: Jun 29 2024 with Bootstrap v5.3.3 +* Author: BootstrapMade.com +* License: https://bootstrapmade.com/license/ +*/ + +(function() { + "use strict"; + + /** + * Apply .scrolled class to the body as the page is scrolled down + */ + function toggleScrolled() { + const selectBody = document.querySelector('body'); + const selectHeader = document.querySelector('#header'); + if (!selectHeader.classList.contains('scroll-up-sticky') && !selectHeader.classList.contains('sticky-top') && !selectHeader.classList.contains('fixed-top')) return; + window.scrollY > 100 ? selectBody.classList.add('scrolled') : selectBody.classList.remove('scrolled'); + } + + document.addEventListener('scroll', toggleScrolled); + window.addEventListener('load', toggleScrolled); + + /** + * Mobile nav toggle + */ + const mobileNavToggleBtn = document.querySelector('.mobile-nav-toggle'); + + function mobileNavToogle() { + document.querySelector('body').classList.toggle('mobile-nav-active'); + mobileNavToggleBtn.classList.toggle('bi-list'); + mobileNavToggleBtn.classList.toggle('bi-x'); + } + mobileNavToggleBtn.addEventListener('click', mobileNavToogle); + + /** + * Hide mobile nav on same-page/hash links + */ + document.querySelectorAll('#navmenu a').forEach(navmenu => { + navmenu.addEventListener('click', () => { + if (document.querySelector('.mobile-nav-active')) { + mobileNavToogle(); + } + }); + + }); + + /** + * Toggle mobile nav dropdowns + */ + document.querySelectorAll('.navmenu .toggle-dropdown').forEach(navmenu => { + navmenu.addEventListener('click', function(e) { + e.preventDefault(); + this.parentNode.classList.toggle('active'); + this.parentNode.nextElementSibling.classList.toggle('dropdown-active'); + e.stopImmediatePropagation(); + }); + }); + + /** + * Scroll top button + */ + let scrollTop = document.querySelector('.scroll-top'); + + function toggleScrollTop() { + if (scrollTop) { + window.scrollY > 100 ? scrollTop.classList.add('active') : scrollTop.classList.remove('active'); + } + } + scrollTop.addEventListener('click', (e) => { + e.preventDefault(); + window.scrollTo({ + top: 0, + behavior: 'smooth' + }); + }); + + window.addEventListener('load', toggleScrollTop); + document.addEventListener('scroll', toggleScrollTop); + + /** + * Animation on scroll function and init + */ + function aosInit() { + AOS.init({ + duration: 600, + easing: 'ease-in-out', + once: true, + mirror: false + }); + } + window.addEventListener('load', aosInit); + + /** + * Initiate glightbox + */ + const glightbox = GLightbox({ + selector: '.glightbox' + }); + + /** + * Initiate Pure Counter + */ + new PureCounter(); + + /** + * Frequently Asked Questions Toggle + */ + document.querySelectorAll('.faq-item h3, .faq-item .faq-toggle').forEach((faqItem) => { + faqItem.addEventListener('click', () => { + faqItem.parentNode.classList.toggle('faq-active'); + }); + }); + + /** + * Init isotope layout and filters + */ + document.querySelectorAll('.isotope-layout').forEach(function(isotopeItem) { + let layout = isotopeItem.getAttribute('data-layout') ?? 'masonry'; + let filter = isotopeItem.getAttribute('data-default-filter') ?? '*'; + let sort = isotopeItem.getAttribute('data-sort') ?? 'original-order'; + + let initIsotope; + imagesLoaded(isotopeItem.querySelector('.isotope-container'), function() { + initIsotope = new Isotope(isotopeItem.querySelector('.isotope-container'), { + itemSelector: '.isotope-item', + layoutMode: layout, + filter: filter, + sortBy: sort + }); + }); + + isotopeItem.querySelectorAll('.isotope-filters li').forEach(function(filters) { + filters.addEventListener('click', function() { + isotopeItem.querySelector('.isotope-filters .filter-active').classList.remove('filter-active'); + this.classList.add('filter-active'); + initIsotope.arrange({ + filter: this.getAttribute('data-filter') + }); + if (typeof aosInit === 'function') { + aosInit(); + } + }, false); + }); + + }); + + /** + * Init swiper sliders + */ + function initSwiper() { + document.querySelectorAll(".init-swiper").forEach(function(swiperElement) { + let config = JSON.parse( + swiperElement.querySelector(".swiper-config").innerHTML.trim() + ); + + if (swiperElement.classList.contains("swiper-tab")) { + initSwiperWithCustomPagination(swiperElement, config); + } else { + new Swiper(swiperElement, config); + } + }); + } + + window.addEventListener("load", initSwiper); + + /** + * Correct scrolling position upon page load for URLs containing hash links. + */ + window.addEventListener('load', function(e) { + if (window.location.hash) { + if (document.querySelector(window.location.hash)) { + setTimeout(() => { + let section = document.querySelector(window.location.hash); + let scrollMarginTop = getComputedStyle(section).scrollMarginTop; + window.scrollTo({ + top: section.offsetTop - parseInt(scrollMarginTop), + behavior: 'smooth' + }); + }, 100); + } + } + }); + + /** + * Navmenu Scrollspy + */ + let navmenulinks = document.querySelectorAll('.navmenu a'); + + function navmenuScrollspy() { + navmenulinks.forEach(navmenulink => { + if (!navmenulink.hash) return; + let section = document.querySelector(navmenulink.hash); + if (!section) return; + let position = window.scrollY + 200; + if (position >= section.offsetTop && position <= (section.offsetTop + section.offsetHeight)) { + document.querySelectorAll('.navmenu a.active').forEach(link => link.classList.remove('active')); + navmenulink.classList.add('active'); + } else { + navmenulink.classList.remove('active'); + } + }) + } + window.addEventListener('load', navmenuScrollspy); + document.addEventListener('scroll', navmenuScrollspy); + +})(); \ No newline at end of file diff --git a/public/assets/vendor/aos/aos.cjs.js b/public/assets/vendor/aos/aos.cjs.js new file mode 100644 index 0000000000000000000000000000000000000000..86119ba65eecd962c1f3faae5896c587ba08d06a --- /dev/null +++ b/public/assets/vendor/aos/aos.cjs.js @@ -0,0 +1,614 @@ +'use strict'; + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var throttle = _interopDefault(require('lodash.throttle')); +var debounce = _interopDefault(require('lodash.debounce')); + +var callback = function callback() {}; + +function containsAOSNode(nodes) { + var i = void 0, + currentNode = void 0, + result = void 0; + + for (i = 0; i < nodes.length; i += 1) { + currentNode = nodes[i]; + + if (currentNode.dataset && currentNode.dataset.aos) { + return true; + } + + result = currentNode.children && containsAOSNode(currentNode.children); + + if (result) { + return true; + } + } + + return false; +} + +function check(mutations) { + if (!mutations) return; + + mutations.forEach(function (mutation) { + var addedNodes = Array.prototype.slice.call(mutation.addedNodes); + var removedNodes = Array.prototype.slice.call(mutation.removedNodes); + var allNodes = addedNodes.concat(removedNodes); + + if (containsAOSNode(allNodes)) { + return callback(); + } + }); +} + +function getMutationObserver() { + return window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver; +} + +function isSupported() { + return !!getMutationObserver(); +} + +function ready(selector, fn) { + var doc = window.document; + var MutationObserver = getMutationObserver(); + + var observer = new MutationObserver(check); + callback = fn; + + observer.observe(doc.documentElement, { + childList: true, + subtree: true, + removedNodes: true + }); +} + +var observer = { isSupported: isSupported, ready: ready }; + +var classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +}; + +var createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; +}(); + +var _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; +}; + +/** + * Device detector + */ + +var fullNameRe = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i; +var prefixRe = /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i; +var fullNameMobileRe = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i; +var prefixMobileRe = /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i; + +function ua() { + return navigator.userAgent || navigator.vendor || window.opera || ''; +} + +var Detector = function () { + function Detector() { + classCallCheck(this, Detector); + } + + createClass(Detector, [{ + key: 'phone', + value: function phone() { + var a = ua(); + return !!(fullNameRe.test(a) || prefixRe.test(a.substr(0, 4))); + } + }, { + key: 'mobile', + value: function mobile() { + var a = ua(); + return !!(fullNameMobileRe.test(a) || prefixMobileRe.test(a.substr(0, 4))); + } + }, { + key: 'tablet', + value: function tablet() { + return this.mobile() && !this.phone(); + } + + // http://browserhacks.com/#hack-acea075d0ac6954f275a70023906050c + + }, { + key: 'ie11', + value: function ie11() { + return '-ms-scroll-limit' in document.documentElement.style && '-ms-ime-align' in document.documentElement.style; + } + }]); + return Detector; +}(); + +var detect = new Detector(); + +/** + * Adds multiple classes on node + * @param {DOMNode} node + * @param {array} classes + */ +var addClasses = function addClasses(node, classes) { + return classes && classes.forEach(function (className) { + return node.classList.add(className); + }); +}; + +/** + * Removes multiple classes from node + * @param {DOMNode} node + * @param {array} classes + */ +var removeClasses = function removeClasses(node, classes) { + return classes && classes.forEach(function (className) { + return node.classList.remove(className); + }); +}; + +var fireEvent = function fireEvent(eventName, data) { + var customEvent = void 0; + + if (detect.ie11()) { + customEvent = document.createEvent('CustomEvent'); + customEvent.initCustomEvent(eventName, true, true, { detail: data }); + } else { + customEvent = new CustomEvent(eventName, { + detail: data + }); + } + + return document.dispatchEvent(customEvent); +}; + +/** + * Set or remove aos-animate class + * @param {node} el element + * @param {int} top scrolled distance + */ +var applyClasses = function applyClasses(el, top) { + var options = el.options, + position = el.position, + node = el.node, + data = el.data; + + + var hide = function hide() { + if (!el.animated) return; + + removeClasses(node, options.animatedClassNames); + fireEvent('aos:out', node); + + if (el.options.id) { + fireEvent('aos:in:' + el.options.id, node); + } + + el.animated = false; + }; + + var show = function show() { + if (el.animated) return; + + addClasses(node, options.animatedClassNames); + + fireEvent('aos:in', node); + if (el.options.id) { + fireEvent('aos:in:' + el.options.id, node); + } + + el.animated = true; + }; + + if (options.mirror && top >= position.out && !options.once) { + hide(); + } else if (top >= position.in) { + show(); + } else if (el.animated && !options.once) { + hide(); + } +}; + +/** + * Scroll logic - add or remove 'aos-animate' class on scroll + * + * @param {array} $elements array of elements nodes + * @return {void} + */ +var handleScroll = function handleScroll($elements) { + return $elements.forEach(function (el, i) { + return applyClasses(el, window.pageYOffset); + }); +}; + +/** + * Get offset of DOM element + * like there were no transforms applied on it + * + * @param {Node} el [DOM element] + * @return {Object} [top and left offset] + */ +var offset = function offset(el) { + var _x = 0; + var _y = 0; + + while (el && !isNaN(el.offsetLeft) && !isNaN(el.offsetTop)) { + _x += el.offsetLeft - (el.tagName != 'BODY' ? el.scrollLeft : 0); + _y += el.offsetTop - (el.tagName != 'BODY' ? el.scrollTop : 0); + el = el.offsetParent; + } + + return { + top: _y, + left: _x + }; +}; + +/** + * Get inline option with a fallback. + * + * @param {Node} el [Dom element] + * @param {String} key [Option key] + * @param {String} fallback [Default (fallback) value] + * @return {Mixed} [Option set with inline attributes or fallback value if not set] + */ + +var getInlineOption = (function (el, key, fallback) { + var attr = el.getAttribute('data-aos-' + key); + + if (typeof attr !== 'undefined') { + if (attr === 'true') { + return true; + } else if (attr === 'false') { + return false; + } + } + + return attr || fallback; +}); + +/** + * Calculate offset + * basing on element's settings like: + * - anchor + * - offset + * + * @param {Node} el [Dom element] + * @return {Integer} [Final offset that will be used to trigger animation in good position] + */ + +var getPositionIn = function getPositionIn(el, defaultOffset, defaultAnchorPlacement) { + var windowHeight = window.innerHeight; + var anchor = getInlineOption(el, 'anchor'); + var inlineAnchorPlacement = getInlineOption(el, 'anchor-placement'); + var additionalOffset = Number(getInlineOption(el, 'offset', inlineAnchorPlacement ? 0 : defaultOffset)); + var anchorPlacement = inlineAnchorPlacement || defaultAnchorPlacement; + var finalEl = el; + + if (anchor && document.querySelectorAll(anchor)) { + finalEl = document.querySelectorAll(anchor)[0]; + } + + var triggerPoint = offset(finalEl).top - windowHeight; + + switch (anchorPlacement) { + case 'top-bottom': + // Default offset + break; + case 'center-bottom': + triggerPoint += finalEl.offsetHeight / 2; + break; + case 'bottom-bottom': + triggerPoint += finalEl.offsetHeight; + break; + case 'top-center': + triggerPoint += windowHeight / 2; + break; + case 'center-center': + triggerPoint += windowHeight / 2 + finalEl.offsetHeight / 2; + break; + case 'bottom-center': + triggerPoint += windowHeight / 2 + finalEl.offsetHeight; + break; + case 'top-top': + triggerPoint += windowHeight; + break; + case 'bottom-top': + triggerPoint += windowHeight + finalEl.offsetHeight; + break; + case 'center-top': + triggerPoint += windowHeight + finalEl.offsetHeight / 2; + break; + } + + return triggerPoint + additionalOffset; +}; + +var getPositionOut = function getPositionOut(el, defaultOffset) { + var windowHeight = window.innerHeight; + var anchor = getInlineOption(el, 'anchor'); + var additionalOffset = getInlineOption(el, 'offset', defaultOffset); + var finalEl = el; + + if (anchor && document.querySelectorAll(anchor)) { + finalEl = document.querySelectorAll(anchor)[0]; + } + + var elementOffsetTop = offset(finalEl).top; + + return elementOffsetTop + finalEl.offsetHeight - additionalOffset; +}; + +/* Clearing variables */ + +var prepare = function prepare($elements, options) { + $elements.forEach(function (el, i) { + var mirror = getInlineOption(el.node, 'mirror', options.mirror); + var once = getInlineOption(el.node, 'once', options.once); + var id = getInlineOption(el.node, 'id'); + var customClassNames = options.useClassNames && el.node.getAttribute('data-aos'); + + var animatedClassNames = [options.animatedClassName].concat(customClassNames ? customClassNames.split(' ') : []).filter(function (className) { + return typeof className === 'string'; + }); + + if (options.initClassName) { + el.node.classList.add(options.initClassName); + } + + el.position = { + in: getPositionIn(el.node, options.offset, options.anchorPlacement), + out: mirror && getPositionOut(el.node, options.offset) + }; + + el.options = { + once: once, + mirror: mirror, + animatedClassNames: animatedClassNames, + id: id + }; + }); + + return $elements; +}; + +/** + * Generate initial array with elements as objects + * This array will be extended later with elements attributes values + * like 'position' + */ +var elements = (function () { + var elements = document.querySelectorAll('[data-aos]'); + return Array.prototype.map.call(elements, function (node) { + return { node: node }; + }); +}); + +/** + * ******************************************************* + * AOS (Animate on scroll) - wowjs alternative + * made to animate elements on scroll in both directions + * ******************************************************* + */ + +/** + * Private variables + */ +var $aosElements = []; +var initialized = false; + +/** + * Default options + */ +var options = { + offset: 120, + delay: 0, + easing: 'ease', + duration: 400, + disable: false, + once: false, + mirror: false, + anchorPlacement: 'top-bottom', + startEvent: 'DOMContentLoaded', + animatedClassName: 'aos-animate', + initClassName: 'aos-init', + useClassNames: false, + disableMutationObserver: false, + throttleDelay: 99, + debounceDelay: 50 +}; + +// Detect not supported browsers (<=IE9) +// http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805 +var isBrowserNotSupported = function isBrowserNotSupported() { + return document.all && !window.atob; +}; + +var initializeScroll = function initializeScroll() { + // Extend elements objects in $aosElements with their positions + $aosElements = prepare($aosElements, options); + // Perform scroll event, to refresh view and show/hide elements + handleScroll($aosElements); + + /** + * Handle scroll event to animate elements on scroll + */ + window.addEventListener('scroll', throttle(function () { + handleScroll($aosElements, options.once); + }, options.throttleDelay)); + + return $aosElements; +}; + +/** + * Refresh AOS + */ +var refresh = function refresh() { + var initialize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + + // Allow refresh only when it was first initialized on startEvent + if (initialize) initialized = true; + if (initialized) initializeScroll(); +}; + +/** + * Hard refresh + * create array with new elements and trigger refresh + */ +var refreshHard = function refreshHard() { + $aosElements = elements(); + + if (isDisabled(options.disable) || isBrowserNotSupported()) { + return disable(); + } + + refresh(); +}; + +/** + * Disable AOS + * Remove all attributes to reset applied styles + */ +var disable = function disable() { + $aosElements.forEach(function (el, i) { + el.node.removeAttribute('data-aos'); + el.node.removeAttribute('data-aos-easing'); + el.node.removeAttribute('data-aos-duration'); + el.node.removeAttribute('data-aos-delay'); + + if (options.initClassName) { + el.node.classList.remove(options.initClassName); + } + + if (options.animatedClassName) { + el.node.classList.remove(options.animatedClassName); + } + }); +}; + +/** + * Check if AOS should be disabled based on provided setting + */ +var isDisabled = function isDisabled(optionDisable) { + return optionDisable === true || optionDisable === 'mobile' && detect.mobile() || optionDisable === 'phone' && detect.phone() || optionDisable === 'tablet' && detect.tablet() || typeof optionDisable === 'function' && optionDisable() === true; +}; + +/** + * Initializing AOS + * - Create options merging defaults with user defined options + * - Set attributes on
as global setting - css relies on it + * - Attach preparing elements to options.startEvent, + * window resize and orientation change + * - Attach function that handle scroll and everything connected to it + * to window scroll event and fire once document is ready to set initial state + */ +var init = function init(settings) { + options = _extends(options, settings); + + // Create initial array with elements -> to be fullfilled later with prepare() + $aosElements = elements(); + + /** + * Disable mutation observing if not supported + */ + if (!options.disableMutationObserver && !observer.isSupported()) { + console.info('\n aos: MutationObserver is not supported on this browser,\n code mutations observing has been disabled.\n You may have to call "refreshHard()" by yourself.\n '); + options.disableMutationObserver = true; + } + + /** + * Observe [aos] elements + * If something is loaded by AJAX + * it'll refresh plugin automatically + */ + if (!options.disableMutationObserver) { + observer.ready('[data-aos]', refreshHard); + } + + /** + * Don't init plugin if option `disable` is set + * or when browser is not supported + */ + if (isDisabled(options.disable) || isBrowserNotSupported()) { + return disable(); + } + + /** + * Set global settings on body, based on options + * so CSS can use it + */ + document.querySelector('body').setAttribute('data-aos-easing', options.easing); + + document.querySelector('body').setAttribute('data-aos-duration', options.duration); + + document.querySelector('body').setAttribute('data-aos-delay', options.delay); + + /** + * Handle initializing + */ + if (['DOMContentLoaded', 'load'].indexOf(options.startEvent) === -1) { + // Listen to options.startEvent and initialize AOS + document.addEventListener(options.startEvent, function () { + refresh(true); + }); + } else { + window.addEventListener('load', function () { + refresh(true); + }); + } + + if (options.startEvent === 'DOMContentLoaded' && ['complete', 'interactive'].indexOf(document.readyState) > -1) { + // Initialize AOS if default startEvent was already fired + refresh(true); + } + + /** + * Refresh plugin on window resize or orientation change + */ + window.addEventListener('resize', debounce(refresh, options.debounceDelay, true)); + + window.addEventListener('orientationchange', debounce(refresh, options.debounceDelay, true)); + + return $aosElements; +}; + +/** + * Export Public API + */ + +var aos = { + init: init, + refresh: refresh, + refreshHard: refreshHard +}; + +module.exports = aos; diff --git a/public/assets/vendor/aos/aos.css b/public/assets/vendor/aos/aos.css new file mode 100644 index 0000000000000000000000000000000000000000..2e1a9be7148cc41ac5ac4cbd5a0ada07f820f2fa --- /dev/null +++ b/public/assets/vendor/aos/aos.css @@ -0,0 +1 @@ +[data-aos][data-aos][data-aos-duration="50"],body[data-aos-duration="50"] [data-aos]{transition-duration:50ms}[data-aos][data-aos][data-aos-delay="50"],body[data-aos-delay="50"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="50"].aos-animate,body[data-aos-delay="50"] [data-aos].aos-animate{transition-delay:50ms}[data-aos][data-aos][data-aos-duration="100"],body[data-aos-duration="100"] [data-aos]{transition-duration:.1s}[data-aos][data-aos][data-aos-delay="100"],body[data-aos-delay="100"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="100"].aos-animate,body[data-aos-delay="100"] [data-aos].aos-animate{transition-delay:.1s}[data-aos][data-aos][data-aos-duration="150"],body[data-aos-duration="150"] [data-aos]{transition-duration:.15s}[data-aos][data-aos][data-aos-delay="150"],body[data-aos-delay="150"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="150"].aos-animate,body[data-aos-delay="150"] [data-aos].aos-animate{transition-delay:.15s}[data-aos][data-aos][data-aos-duration="200"],body[data-aos-duration="200"] [data-aos]{transition-duration:.2s}[data-aos][data-aos][data-aos-delay="200"],body[data-aos-delay="200"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="200"].aos-animate,body[data-aos-delay="200"] [data-aos].aos-animate{transition-delay:.2s}[data-aos][data-aos][data-aos-duration="250"],body[data-aos-duration="250"] [data-aos]{transition-duration:.25s}[data-aos][data-aos][data-aos-delay="250"],body[data-aos-delay="250"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="250"].aos-animate,body[data-aos-delay="250"] [data-aos].aos-animate{transition-delay:.25s}[data-aos][data-aos][data-aos-duration="300"],body[data-aos-duration="300"] [data-aos]{transition-duration:.3s}[data-aos][data-aos][data-aos-delay="300"],body[data-aos-delay="300"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="300"].aos-animate,body[data-aos-delay="300"] [data-aos].aos-animate{transition-delay:.3s}[data-aos][data-aos][data-aos-duration="350"],body[data-aos-duration="350"] [data-aos]{transition-duration:.35s}[data-aos][data-aos][data-aos-delay="350"],body[data-aos-delay="350"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="350"].aos-animate,body[data-aos-delay="350"] [data-aos].aos-animate{transition-delay:.35s}[data-aos][data-aos][data-aos-duration="400"],body[data-aos-duration="400"] [data-aos]{transition-duration:.4s}[data-aos][data-aos][data-aos-delay="400"],body[data-aos-delay="400"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="400"].aos-animate,body[data-aos-delay="400"] [data-aos].aos-animate{transition-delay:.4s}[data-aos][data-aos][data-aos-duration="450"],body[data-aos-duration="450"] [data-aos]{transition-duration:.45s}[data-aos][data-aos][data-aos-delay="450"],body[data-aos-delay="450"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="450"].aos-animate,body[data-aos-delay="450"] [data-aos].aos-animate{transition-delay:.45s}[data-aos][data-aos][data-aos-duration="500"],body[data-aos-duration="500"] [data-aos]{transition-duration:.5s}[data-aos][data-aos][data-aos-delay="500"],body[data-aos-delay="500"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="500"].aos-animate,body[data-aos-delay="500"] [data-aos].aos-animate{transition-delay:.5s}[data-aos][data-aos][data-aos-duration="550"],body[data-aos-duration="550"] [data-aos]{transition-duration:.55s}[data-aos][data-aos][data-aos-delay="550"],body[data-aos-delay="550"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="550"].aos-animate,body[data-aos-delay="550"] [data-aos].aos-animate{transition-delay:.55s}[data-aos][data-aos][data-aos-duration="600"],body[data-aos-duration="600"] [data-aos]{transition-duration:.6s}[data-aos][data-aos][data-aos-delay="600"],body[data-aos-delay="600"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="600"].aos-animate,body[data-aos-delay="600"] [data-aos].aos-animate{transition-delay:.6s}[data-aos][data-aos][data-aos-duration="650"],body[data-aos-duration="650"] [data-aos]{transition-duration:.65s}[data-aos][data-aos][data-aos-delay="650"],body[data-aos-delay="650"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="650"].aos-animate,body[data-aos-delay="650"] [data-aos].aos-animate{transition-delay:.65s}[data-aos][data-aos][data-aos-duration="700"],body[data-aos-duration="700"] [data-aos]{transition-duration:.7s}[data-aos][data-aos][data-aos-delay="700"],body[data-aos-delay="700"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="700"].aos-animate,body[data-aos-delay="700"] [data-aos].aos-animate{transition-delay:.7s}[data-aos][data-aos][data-aos-duration="750"],body[data-aos-duration="750"] [data-aos]{transition-duration:.75s}[data-aos][data-aos][data-aos-delay="750"],body[data-aos-delay="750"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="750"].aos-animate,body[data-aos-delay="750"] [data-aos].aos-animate{transition-delay:.75s}[data-aos][data-aos][data-aos-duration="800"],body[data-aos-duration="800"] [data-aos]{transition-duration:.8s}[data-aos][data-aos][data-aos-delay="800"],body[data-aos-delay="800"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="800"].aos-animate,body[data-aos-delay="800"] [data-aos].aos-animate{transition-delay:.8s}[data-aos][data-aos][data-aos-duration="850"],body[data-aos-duration="850"] [data-aos]{transition-duration:.85s}[data-aos][data-aos][data-aos-delay="850"],body[data-aos-delay="850"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="850"].aos-animate,body[data-aos-delay="850"] [data-aos].aos-animate{transition-delay:.85s}[data-aos][data-aos][data-aos-duration="900"],body[data-aos-duration="900"] [data-aos]{transition-duration:.9s}[data-aos][data-aos][data-aos-delay="900"],body[data-aos-delay="900"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="900"].aos-animate,body[data-aos-delay="900"] [data-aos].aos-animate{transition-delay:.9s}[data-aos][data-aos][data-aos-duration="950"],body[data-aos-duration="950"] [data-aos]{transition-duration:.95s}[data-aos][data-aos][data-aos-delay="950"],body[data-aos-delay="950"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="950"].aos-animate,body[data-aos-delay="950"] [data-aos].aos-animate{transition-delay:.95s}[data-aos][data-aos][data-aos-duration="1000"],body[data-aos-duration="1000"] [data-aos]{transition-duration:1s}[data-aos][data-aos][data-aos-delay="1000"],body[data-aos-delay="1000"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1000"].aos-animate,body[data-aos-delay="1000"] [data-aos].aos-animate{transition-delay:1s}[data-aos][data-aos][data-aos-duration="1050"],body[data-aos-duration="1050"] [data-aos]{transition-duration:1.05s}[data-aos][data-aos][data-aos-delay="1050"],body[data-aos-delay="1050"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1050"].aos-animate,body[data-aos-delay="1050"] [data-aos].aos-animate{transition-delay:1.05s}[data-aos][data-aos][data-aos-duration="1100"],body[data-aos-duration="1100"] [data-aos]{transition-duration:1.1s}[data-aos][data-aos][data-aos-delay="1100"],body[data-aos-delay="1100"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1100"].aos-animate,body[data-aos-delay="1100"] [data-aos].aos-animate{transition-delay:1.1s}[data-aos][data-aos][data-aos-duration="1150"],body[data-aos-duration="1150"] [data-aos]{transition-duration:1.15s}[data-aos][data-aos][data-aos-delay="1150"],body[data-aos-delay="1150"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1150"].aos-animate,body[data-aos-delay="1150"] [data-aos].aos-animate{transition-delay:1.15s}[data-aos][data-aos][data-aos-duration="1200"],body[data-aos-duration="1200"] [data-aos]{transition-duration:1.2s}[data-aos][data-aos][data-aos-delay="1200"],body[data-aos-delay="1200"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1200"].aos-animate,body[data-aos-delay="1200"] [data-aos].aos-animate{transition-delay:1.2s}[data-aos][data-aos][data-aos-duration="1250"],body[data-aos-duration="1250"] [data-aos]{transition-duration:1.25s}[data-aos][data-aos][data-aos-delay="1250"],body[data-aos-delay="1250"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1250"].aos-animate,body[data-aos-delay="1250"] [data-aos].aos-animate{transition-delay:1.25s}[data-aos][data-aos][data-aos-duration="1300"],body[data-aos-duration="1300"] [data-aos]{transition-duration:1.3s}[data-aos][data-aos][data-aos-delay="1300"],body[data-aos-delay="1300"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1300"].aos-animate,body[data-aos-delay="1300"] [data-aos].aos-animate{transition-delay:1.3s}[data-aos][data-aos][data-aos-duration="1350"],body[data-aos-duration="1350"] [data-aos]{transition-duration:1.35s}[data-aos][data-aos][data-aos-delay="1350"],body[data-aos-delay="1350"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1350"].aos-animate,body[data-aos-delay="1350"] [data-aos].aos-animate{transition-delay:1.35s}[data-aos][data-aos][data-aos-duration="1400"],body[data-aos-duration="1400"] [data-aos]{transition-duration:1.4s}[data-aos][data-aos][data-aos-delay="1400"],body[data-aos-delay="1400"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1400"].aos-animate,body[data-aos-delay="1400"] [data-aos].aos-animate{transition-delay:1.4s}[data-aos][data-aos][data-aos-duration="1450"],body[data-aos-duration="1450"] [data-aos]{transition-duration:1.45s}[data-aos][data-aos][data-aos-delay="1450"],body[data-aos-delay="1450"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1450"].aos-animate,body[data-aos-delay="1450"] [data-aos].aos-animate{transition-delay:1.45s}[data-aos][data-aos][data-aos-duration="1500"],body[data-aos-duration="1500"] [data-aos]{transition-duration:1.5s}[data-aos][data-aos][data-aos-delay="1500"],body[data-aos-delay="1500"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1500"].aos-animate,body[data-aos-delay="1500"] [data-aos].aos-animate{transition-delay:1.5s}[data-aos][data-aos][data-aos-duration="1550"],body[data-aos-duration="1550"] [data-aos]{transition-duration:1.55s}[data-aos][data-aos][data-aos-delay="1550"],body[data-aos-delay="1550"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1550"].aos-animate,body[data-aos-delay="1550"] [data-aos].aos-animate{transition-delay:1.55s}[data-aos][data-aos][data-aos-duration="1600"],body[data-aos-duration="1600"] [data-aos]{transition-duration:1.6s}[data-aos][data-aos][data-aos-delay="1600"],body[data-aos-delay="1600"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1600"].aos-animate,body[data-aos-delay="1600"] [data-aos].aos-animate{transition-delay:1.6s}[data-aos][data-aos][data-aos-duration="1650"],body[data-aos-duration="1650"] [data-aos]{transition-duration:1.65s}[data-aos][data-aos][data-aos-delay="1650"],body[data-aos-delay="1650"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1650"].aos-animate,body[data-aos-delay="1650"] [data-aos].aos-animate{transition-delay:1.65s}[data-aos][data-aos][data-aos-duration="1700"],body[data-aos-duration="1700"] [data-aos]{transition-duration:1.7s}[data-aos][data-aos][data-aos-delay="1700"],body[data-aos-delay="1700"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1700"].aos-animate,body[data-aos-delay="1700"] [data-aos].aos-animate{transition-delay:1.7s}[data-aos][data-aos][data-aos-duration="1750"],body[data-aos-duration="1750"] [data-aos]{transition-duration:1.75s}[data-aos][data-aos][data-aos-delay="1750"],body[data-aos-delay="1750"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1750"].aos-animate,body[data-aos-delay="1750"] [data-aos].aos-animate{transition-delay:1.75s}[data-aos][data-aos][data-aos-duration="1800"],body[data-aos-duration="1800"] [data-aos]{transition-duration:1.8s}[data-aos][data-aos][data-aos-delay="1800"],body[data-aos-delay="1800"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1800"].aos-animate,body[data-aos-delay="1800"] [data-aos].aos-animate{transition-delay:1.8s}[data-aos][data-aos][data-aos-duration="1850"],body[data-aos-duration="1850"] [data-aos]{transition-duration:1.85s}[data-aos][data-aos][data-aos-delay="1850"],body[data-aos-delay="1850"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1850"].aos-animate,body[data-aos-delay="1850"] [data-aos].aos-animate{transition-delay:1.85s}[data-aos][data-aos][data-aos-duration="1900"],body[data-aos-duration="1900"] [data-aos]{transition-duration:1.9s}[data-aos][data-aos][data-aos-delay="1900"],body[data-aos-delay="1900"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1900"].aos-animate,body[data-aos-delay="1900"] [data-aos].aos-animate{transition-delay:1.9s}[data-aos][data-aos][data-aos-duration="1950"],body[data-aos-duration="1950"] [data-aos]{transition-duration:1.95s}[data-aos][data-aos][data-aos-delay="1950"],body[data-aos-delay="1950"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1950"].aos-animate,body[data-aos-delay="1950"] [data-aos].aos-animate{transition-delay:1.95s}[data-aos][data-aos][data-aos-duration="2000"],body[data-aos-duration="2000"] [data-aos]{transition-duration:2s}[data-aos][data-aos][data-aos-delay="2000"],body[data-aos-delay="2000"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2000"].aos-animate,body[data-aos-delay="2000"] [data-aos].aos-animate{transition-delay:2s}[data-aos][data-aos][data-aos-duration="2050"],body[data-aos-duration="2050"] [data-aos]{transition-duration:2.05s}[data-aos][data-aos][data-aos-delay="2050"],body[data-aos-delay="2050"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2050"].aos-animate,body[data-aos-delay="2050"] [data-aos].aos-animate{transition-delay:2.05s}[data-aos][data-aos][data-aos-duration="2100"],body[data-aos-duration="2100"] [data-aos]{transition-duration:2.1s}[data-aos][data-aos][data-aos-delay="2100"],body[data-aos-delay="2100"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2100"].aos-animate,body[data-aos-delay="2100"] [data-aos].aos-animate{transition-delay:2.1s}[data-aos][data-aos][data-aos-duration="2150"],body[data-aos-duration="2150"] [data-aos]{transition-duration:2.15s}[data-aos][data-aos][data-aos-delay="2150"],body[data-aos-delay="2150"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2150"].aos-animate,body[data-aos-delay="2150"] [data-aos].aos-animate{transition-delay:2.15s}[data-aos][data-aos][data-aos-duration="2200"],body[data-aos-duration="2200"] [data-aos]{transition-duration:2.2s}[data-aos][data-aos][data-aos-delay="2200"],body[data-aos-delay="2200"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2200"].aos-animate,body[data-aos-delay="2200"] [data-aos].aos-animate{transition-delay:2.2s}[data-aos][data-aos][data-aos-duration="2250"],body[data-aos-duration="2250"] [data-aos]{transition-duration:2.25s}[data-aos][data-aos][data-aos-delay="2250"],body[data-aos-delay="2250"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2250"].aos-animate,body[data-aos-delay="2250"] [data-aos].aos-animate{transition-delay:2.25s}[data-aos][data-aos][data-aos-duration="2300"],body[data-aos-duration="2300"] [data-aos]{transition-duration:2.3s}[data-aos][data-aos][data-aos-delay="2300"],body[data-aos-delay="2300"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2300"].aos-animate,body[data-aos-delay="2300"] [data-aos].aos-animate{transition-delay:2.3s}[data-aos][data-aos][data-aos-duration="2350"],body[data-aos-duration="2350"] [data-aos]{transition-duration:2.35s}[data-aos][data-aos][data-aos-delay="2350"],body[data-aos-delay="2350"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2350"].aos-animate,body[data-aos-delay="2350"] [data-aos].aos-animate{transition-delay:2.35s}[data-aos][data-aos][data-aos-duration="2400"],body[data-aos-duration="2400"] [data-aos]{transition-duration:2.4s}[data-aos][data-aos][data-aos-delay="2400"],body[data-aos-delay="2400"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2400"].aos-animate,body[data-aos-delay="2400"] [data-aos].aos-animate{transition-delay:2.4s}[data-aos][data-aos][data-aos-duration="2450"],body[data-aos-duration="2450"] [data-aos]{transition-duration:2.45s}[data-aos][data-aos][data-aos-delay="2450"],body[data-aos-delay="2450"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2450"].aos-animate,body[data-aos-delay="2450"] [data-aos].aos-animate{transition-delay:2.45s}[data-aos][data-aos][data-aos-duration="2500"],body[data-aos-duration="2500"] [data-aos]{transition-duration:2.5s}[data-aos][data-aos][data-aos-delay="2500"],body[data-aos-delay="2500"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2500"].aos-animate,body[data-aos-delay="2500"] [data-aos].aos-animate{transition-delay:2.5s}[data-aos][data-aos][data-aos-duration="2550"],body[data-aos-duration="2550"] [data-aos]{transition-duration:2.55s}[data-aos][data-aos][data-aos-delay="2550"],body[data-aos-delay="2550"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2550"].aos-animate,body[data-aos-delay="2550"] [data-aos].aos-animate{transition-delay:2.55s}[data-aos][data-aos][data-aos-duration="2600"],body[data-aos-duration="2600"] [data-aos]{transition-duration:2.6s}[data-aos][data-aos][data-aos-delay="2600"],body[data-aos-delay="2600"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2600"].aos-animate,body[data-aos-delay="2600"] [data-aos].aos-animate{transition-delay:2.6s}[data-aos][data-aos][data-aos-duration="2650"],body[data-aos-duration="2650"] [data-aos]{transition-duration:2.65s}[data-aos][data-aos][data-aos-delay="2650"],body[data-aos-delay="2650"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2650"].aos-animate,body[data-aos-delay="2650"] [data-aos].aos-animate{transition-delay:2.65s}[data-aos][data-aos][data-aos-duration="2700"],body[data-aos-duration="2700"] [data-aos]{transition-duration:2.7s}[data-aos][data-aos][data-aos-delay="2700"],body[data-aos-delay="2700"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2700"].aos-animate,body[data-aos-delay="2700"] [data-aos].aos-animate{transition-delay:2.7s}[data-aos][data-aos][data-aos-duration="2750"],body[data-aos-duration="2750"] [data-aos]{transition-duration:2.75s}[data-aos][data-aos][data-aos-delay="2750"],body[data-aos-delay="2750"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2750"].aos-animate,body[data-aos-delay="2750"] [data-aos].aos-animate{transition-delay:2.75s}[data-aos][data-aos][data-aos-duration="2800"],body[data-aos-duration="2800"] [data-aos]{transition-duration:2.8s}[data-aos][data-aos][data-aos-delay="2800"],body[data-aos-delay="2800"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2800"].aos-animate,body[data-aos-delay="2800"] [data-aos].aos-animate{transition-delay:2.8s}[data-aos][data-aos][data-aos-duration="2850"],body[data-aos-duration="2850"] [data-aos]{transition-duration:2.85s}[data-aos][data-aos][data-aos-delay="2850"],body[data-aos-delay="2850"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2850"].aos-animate,body[data-aos-delay="2850"] [data-aos].aos-animate{transition-delay:2.85s}[data-aos][data-aos][data-aos-duration="2900"],body[data-aos-duration="2900"] [data-aos]{transition-duration:2.9s}[data-aos][data-aos][data-aos-delay="2900"],body[data-aos-delay="2900"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2900"].aos-animate,body[data-aos-delay="2900"] [data-aos].aos-animate{transition-delay:2.9s}[data-aos][data-aos][data-aos-duration="2950"],body[data-aos-duration="2950"] [data-aos]{transition-duration:2.95s}[data-aos][data-aos][data-aos-delay="2950"],body[data-aos-delay="2950"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2950"].aos-animate,body[data-aos-delay="2950"] [data-aos].aos-animate{transition-delay:2.95s}[data-aos][data-aos][data-aos-duration="3000"],body[data-aos-duration="3000"] [data-aos]{transition-duration:3s}[data-aos][data-aos][data-aos-delay="3000"],body[data-aos-delay="3000"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="3000"].aos-animate,body[data-aos-delay="3000"] [data-aos].aos-animate{transition-delay:3s}[data-aos]{pointer-events:none}[data-aos].aos-animate{pointer-events:auto}[data-aos][data-aos][data-aos-easing=linear],body[data-aos-easing=linear] [data-aos]{transition-timing-function:cubic-bezier(.25,.25,.75,.75)}[data-aos][data-aos][data-aos-easing=ease],body[data-aos-easing=ease] [data-aos]{transition-timing-function:ease}[data-aos][data-aos][data-aos-easing=ease-in],body[data-aos-easing=ease-in] [data-aos]{transition-timing-function:ease-in}[data-aos][data-aos][data-aos-easing=ease-out],body[data-aos-easing=ease-out] [data-aos]{transition-timing-function:ease-out}[data-aos][data-aos][data-aos-easing=ease-in-out],body[data-aos-easing=ease-in-out] [data-aos]{transition-timing-function:ease-in-out}[data-aos][data-aos][data-aos-easing=ease-in-back],body[data-aos-easing=ease-in-back] [data-aos]{transition-timing-function:cubic-bezier(.6,-.28,.735,.045)}[data-aos][data-aos][data-aos-easing=ease-out-back],body[data-aos-easing=ease-out-back] [data-aos]{transition-timing-function:cubic-bezier(.175,.885,.32,1.275)}[data-aos][data-aos][data-aos-easing=ease-in-out-back],body[data-aos-easing=ease-in-out-back] [data-aos]{transition-timing-function:cubic-bezier(.68,-.55,.265,1.55)}[data-aos][data-aos][data-aos-easing=ease-in-sine],body[data-aos-easing=ease-in-sine] [data-aos]{transition-timing-function:cubic-bezier(.47,0,.745,.715)}[data-aos][data-aos][data-aos-easing=ease-out-sine],body[data-aos-easing=ease-out-sine] [data-aos]{transition-timing-function:cubic-bezier(.39,.575,.565,1)}[data-aos][data-aos][data-aos-easing=ease-in-out-sine],body[data-aos-easing=ease-in-out-sine] [data-aos]{transition-timing-function:cubic-bezier(.445,.05,.55,.95)}[data-aos][data-aos][data-aos-easing=ease-in-quad],body[data-aos-easing=ease-in-quad] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-quad],body[data-aos-easing=ease-out-quad] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-quad],body[data-aos-easing=ease-in-out-quad] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos][data-aos][data-aos-easing=ease-in-cubic],body[data-aos-easing=ease-in-cubic] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-cubic],body[data-aos-easing=ease-out-cubic] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-cubic],body[data-aos-easing=ease-in-out-cubic] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos][data-aos][data-aos-easing=ease-in-quart],body[data-aos-easing=ease-in-quart] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-quart],body[data-aos-easing=ease-out-quart] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-quart],body[data-aos-easing=ease-in-out-quart] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}@media screen{html:not(.no-js) [data-aos^=fade][data-aos^=fade]{opacity:0;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}html:not(.no-js) [data-aos^=fade][data-aos^=fade].aos-animate{opacity:1;-webkit-transform:none;transform:none}html:not(.no-js) [data-aos=fade-up]{-webkit-transform:translate3d(0,100px,0);transform:translate3d(0,100px,0)}html:not(.no-js) [data-aos=fade-down]{-webkit-transform:translate3d(0,-100px,0);transform:translate3d(0,-100px,0)}html:not(.no-js) [data-aos=fade-right]{-webkit-transform:translate3d(-100px,0,0);transform:translate3d(-100px,0,0)}html:not(.no-js) [data-aos=fade-left]{-webkit-transform:translate3d(100px,0,0);transform:translate3d(100px,0,0)}html:not(.no-js) [data-aos=fade-up-right]{-webkit-transform:translate3d(-100px,100px,0);transform:translate3d(-100px,100px,0)}html:not(.no-js) [data-aos=fade-up-left]{-webkit-transform:translate3d(100px,100px,0);transform:translate3d(100px,100px,0)}html:not(.no-js) [data-aos=fade-down-right]{-webkit-transform:translate3d(-100px,-100px,0);transform:translate3d(-100px,-100px,0)}html:not(.no-js) [data-aos=fade-down-left]{-webkit-transform:translate3d(100px,-100px,0);transform:translate3d(100px,-100px,0)}html:not(.no-js) [data-aos^=zoom][data-aos^=zoom]{opacity:0;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}html:not(.no-js) [data-aos^=zoom][data-aos^=zoom].aos-animate{opacity:1;-webkit-transform:translateZ(0) scale(1);transform:translateZ(0) scale(1)}html:not(.no-js) [data-aos=zoom-in]{-webkit-transform:scale(.6);transform:scale(.6)}html:not(.no-js) [data-aos=zoom-in-up]{-webkit-transform:translate3d(0,100px,0) scale(.6);transform:translate3d(0,100px,0) scale(.6)}html:not(.no-js) [data-aos=zoom-in-down]{-webkit-transform:translate3d(0,-100px,0) scale(.6);transform:translate3d(0,-100px,0) scale(.6)}html:not(.no-js) [data-aos=zoom-in-right]{-webkit-transform:translate3d(-100px,0,0) scale(.6);transform:translate3d(-100px,0,0) scale(.6)}html:not(.no-js) [data-aos=zoom-in-left]{-webkit-transform:translate3d(100px,0,0) scale(.6);transform:translate3d(100px,0,0) scale(.6)}html:not(.no-js) [data-aos=zoom-out]{-webkit-transform:scale(1.2);transform:scale(1.2)}html:not(.no-js) [data-aos=zoom-out-up]{-webkit-transform:translate3d(0,100px,0) scale(1.2);transform:translate3d(0,100px,0) scale(1.2)}html:not(.no-js) [data-aos=zoom-out-down]{-webkit-transform:translate3d(0,-100px,0) scale(1.2);transform:translate3d(0,-100px,0) scale(1.2)}html:not(.no-js) [data-aos=zoom-out-right]{-webkit-transform:translate3d(-100px,0,0) scale(1.2);transform:translate3d(-100px,0,0) scale(1.2)}html:not(.no-js) [data-aos=zoom-out-left]{-webkit-transform:translate3d(100px,0,0) scale(1.2);transform:translate3d(100px,0,0) scale(1.2)}html:not(.no-js) [data-aos^=slide][data-aos^=slide]{transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;visibility:hidden}html:not(.no-js) [data-aos^=slide][data-aos^=slide].aos-animate{visibility:visible;-webkit-transform:translateZ(0);transform:translateZ(0)}html:not(.no-js) [data-aos=slide-up]{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}html:not(.no-js) [data-aos=slide-down]{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}html:not(.no-js) [data-aos=slide-right]{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}html:not(.no-js) [data-aos=slide-left]{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}html:not(.no-js) [data-aos^=flip][data-aos^=flip]{-webkit-backface-visibility:hidden;backface-visibility:hidden;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform}html:not(.no-js) [data-aos=flip-left]{-webkit-transform:perspective(2500px) rotateY(-100deg);transform:perspective(2500px) rotateY(-100deg)}html:not(.no-js) [data-aos=flip-left].aos-animate{-webkit-transform:perspective(2500px) rotateY(0);transform:perspective(2500px) rotateY(0)}html:not(.no-js) [data-aos=flip-right]{-webkit-transform:perspective(2500px) rotateY(100deg);transform:perspective(2500px) rotateY(100deg)}html:not(.no-js) [data-aos=flip-right].aos-animate{-webkit-transform:perspective(2500px) rotateY(0);transform:perspective(2500px) rotateY(0)}html:not(.no-js) [data-aos=flip-up]{-webkit-transform:perspective(2500px) rotateX(-100deg);transform:perspective(2500px) rotateX(-100deg)}html:not(.no-js) [data-aos=flip-up].aos-animate{-webkit-transform:perspective(2500px) rotateX(0);transform:perspective(2500px) rotateX(0)}html:not(.no-js) [data-aos=flip-down]{-webkit-transform:perspective(2500px) rotateX(100deg);transform:perspective(2500px) rotateX(100deg)}html:not(.no-js) [data-aos=flip-down].aos-animate{-webkit-transform:perspective(2500px) rotateX(0);transform:perspective(2500px) rotateX(0)}} \ No newline at end of file diff --git a/public/assets/vendor/aos/aos.esm.js b/public/assets/vendor/aos/aos.esm.js new file mode 100644 index 0000000000000000000000000000000000000000..d5597d43c754f43da86eaa8614e936cb86ae47b1 --- /dev/null +++ b/public/assets/vendor/aos/aos.esm.js @@ -0,0 +1,610 @@ +import throttle from 'lodash.throttle'; +import debounce from 'lodash.debounce'; + +var callback = function callback() {}; + +function containsAOSNode(nodes) { + var i = void 0, + currentNode = void 0, + result = void 0; + + for (i = 0; i < nodes.length; i += 1) { + currentNode = nodes[i]; + + if (currentNode.dataset && currentNode.dataset.aos) { + return true; + } + + result = currentNode.children && containsAOSNode(currentNode.children); + + if (result) { + return true; + } + } + + return false; +} + +function check(mutations) { + if (!mutations) return; + + mutations.forEach(function (mutation) { + var addedNodes = Array.prototype.slice.call(mutation.addedNodes); + var removedNodes = Array.prototype.slice.call(mutation.removedNodes); + var allNodes = addedNodes.concat(removedNodes); + + if (containsAOSNode(allNodes)) { + return callback(); + } + }); +} + +function getMutationObserver() { + return window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver; +} + +function isSupported() { + return !!getMutationObserver(); +} + +function ready(selector, fn) { + var doc = window.document; + var MutationObserver = getMutationObserver(); + + var observer = new MutationObserver(check); + callback = fn; + + observer.observe(doc.documentElement, { + childList: true, + subtree: true, + removedNodes: true + }); +} + +var observer = { isSupported: isSupported, ready: ready }; + +var classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +}; + +var createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; +}(); + +var _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; +}; + +/** + * Device detector + */ + +var fullNameRe = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i; +var prefixRe = /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i; +var fullNameMobileRe = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i; +var prefixMobileRe = /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i; + +function ua() { + return navigator.userAgent || navigator.vendor || window.opera || ''; +} + +var Detector = function () { + function Detector() { + classCallCheck(this, Detector); + } + + createClass(Detector, [{ + key: 'phone', + value: function phone() { + var a = ua(); + return !!(fullNameRe.test(a) || prefixRe.test(a.substr(0, 4))); + } + }, { + key: 'mobile', + value: function mobile() { + var a = ua(); + return !!(fullNameMobileRe.test(a) || prefixMobileRe.test(a.substr(0, 4))); + } + }, { + key: 'tablet', + value: function tablet() { + return this.mobile() && !this.phone(); + } + + // http://browserhacks.com/#hack-acea075d0ac6954f275a70023906050c + + }, { + key: 'ie11', + value: function ie11() { + return '-ms-scroll-limit' in document.documentElement.style && '-ms-ime-align' in document.documentElement.style; + } + }]); + return Detector; +}(); + +var detect = new Detector(); + +/** + * Adds multiple classes on node + * @param {DOMNode} node + * @param {array} classes + */ +var addClasses = function addClasses(node, classes) { + return classes && classes.forEach(function (className) { + return node.classList.add(className); + }); +}; + +/** + * Removes multiple classes from node + * @param {DOMNode} node + * @param {array} classes + */ +var removeClasses = function removeClasses(node, classes) { + return classes && classes.forEach(function (className) { + return node.classList.remove(className); + }); +}; + +var fireEvent = function fireEvent(eventName, data) { + var customEvent = void 0; + + if (detect.ie11()) { + customEvent = document.createEvent('CustomEvent'); + customEvent.initCustomEvent(eventName, true, true, { detail: data }); + } else { + customEvent = new CustomEvent(eventName, { + detail: data + }); + } + + return document.dispatchEvent(customEvent); +}; + +/** + * Set or remove aos-animate class + * @param {node} el element + * @param {int} top scrolled distance + */ +var applyClasses = function applyClasses(el, top) { + var options = el.options, + position = el.position, + node = el.node, + data = el.data; + + + var hide = function hide() { + if (!el.animated) return; + + removeClasses(node, options.animatedClassNames); + fireEvent('aos:out', node); + + if (el.options.id) { + fireEvent('aos:in:' + el.options.id, node); + } + + el.animated = false; + }; + + var show = function show() { + if (el.animated) return; + + addClasses(node, options.animatedClassNames); + + fireEvent('aos:in', node); + if (el.options.id) { + fireEvent('aos:in:' + el.options.id, node); + } + + el.animated = true; + }; + + if (options.mirror && top >= position.out && !options.once) { + hide(); + } else if (top >= position.in) { + show(); + } else if (el.animated && !options.once) { + hide(); + } +}; + +/** + * Scroll logic - add or remove 'aos-animate' class on scroll + * + * @param {array} $elements array of elements nodes + * @return {void} + */ +var handleScroll = function handleScroll($elements) { + return $elements.forEach(function (el, i) { + return applyClasses(el, window.pageYOffset); + }); +}; + +/** + * Get offset of DOM element + * like there were no transforms applied on it + * + * @param {Node} el [DOM element] + * @return {Object} [top and left offset] + */ +var offset = function offset(el) { + var _x = 0; + var _y = 0; + + while (el && !isNaN(el.offsetLeft) && !isNaN(el.offsetTop)) { + _x += el.offsetLeft - (el.tagName != 'BODY' ? el.scrollLeft : 0); + _y += el.offsetTop - (el.tagName != 'BODY' ? el.scrollTop : 0); + el = el.offsetParent; + } + + return { + top: _y, + left: _x + }; +}; + +/** + * Get inline option with a fallback. + * + * @param {Node} el [Dom element] + * @param {String} key [Option key] + * @param {String} fallback [Default (fallback) value] + * @return {Mixed} [Option set with inline attributes or fallback value if not set] + */ + +var getInlineOption = (function (el, key, fallback) { + var attr = el.getAttribute('data-aos-' + key); + + if (typeof attr !== 'undefined') { + if (attr === 'true') { + return true; + } else if (attr === 'false') { + return false; + } + } + + return attr || fallback; +}); + +/** + * Calculate offset + * basing on element's settings like: + * - anchor + * - offset + * + * @param {Node} el [Dom element] + * @return {Integer} [Final offset that will be used to trigger animation in good position] + */ + +var getPositionIn = function getPositionIn(el, defaultOffset, defaultAnchorPlacement) { + var windowHeight = window.innerHeight; + var anchor = getInlineOption(el, 'anchor'); + var inlineAnchorPlacement = getInlineOption(el, 'anchor-placement'); + var additionalOffset = Number(getInlineOption(el, 'offset', inlineAnchorPlacement ? 0 : defaultOffset)); + var anchorPlacement = inlineAnchorPlacement || defaultAnchorPlacement; + var finalEl = el; + + if (anchor && document.querySelectorAll(anchor)) { + finalEl = document.querySelectorAll(anchor)[0]; + } + + var triggerPoint = offset(finalEl).top - windowHeight; + + switch (anchorPlacement) { + case 'top-bottom': + // Default offset + break; + case 'center-bottom': + triggerPoint += finalEl.offsetHeight / 2; + break; + case 'bottom-bottom': + triggerPoint += finalEl.offsetHeight; + break; + case 'top-center': + triggerPoint += windowHeight / 2; + break; + case 'center-center': + triggerPoint += windowHeight / 2 + finalEl.offsetHeight / 2; + break; + case 'bottom-center': + triggerPoint += windowHeight / 2 + finalEl.offsetHeight; + break; + case 'top-top': + triggerPoint += windowHeight; + break; + case 'bottom-top': + triggerPoint += windowHeight + finalEl.offsetHeight; + break; + case 'center-top': + triggerPoint += windowHeight + finalEl.offsetHeight / 2; + break; + } + + return triggerPoint + additionalOffset; +}; + +var getPositionOut = function getPositionOut(el, defaultOffset) { + var windowHeight = window.innerHeight; + var anchor = getInlineOption(el, 'anchor'); + var additionalOffset = getInlineOption(el, 'offset', defaultOffset); + var finalEl = el; + + if (anchor && document.querySelectorAll(anchor)) { + finalEl = document.querySelectorAll(anchor)[0]; + } + + var elementOffsetTop = offset(finalEl).top; + + return elementOffsetTop + finalEl.offsetHeight - additionalOffset; +}; + +/* Clearing variables */ + +var prepare = function prepare($elements, options) { + $elements.forEach(function (el, i) { + var mirror = getInlineOption(el.node, 'mirror', options.mirror); + var once = getInlineOption(el.node, 'once', options.once); + var id = getInlineOption(el.node, 'id'); + var customClassNames = options.useClassNames && el.node.getAttribute('data-aos'); + + var animatedClassNames = [options.animatedClassName].concat(customClassNames ? customClassNames.split(' ') : []).filter(function (className) { + return typeof className === 'string'; + }); + + if (options.initClassName) { + el.node.classList.add(options.initClassName); + } + + el.position = { + in: getPositionIn(el.node, options.offset, options.anchorPlacement), + out: mirror && getPositionOut(el.node, options.offset) + }; + + el.options = { + once: once, + mirror: mirror, + animatedClassNames: animatedClassNames, + id: id + }; + }); + + return $elements; +}; + +/** + * Generate initial array with elements as objects + * This array will be extended later with elements attributes values + * like 'position' + */ +var elements = (function () { + var elements = document.querySelectorAll('[data-aos]'); + return Array.prototype.map.call(elements, function (node) { + return { node: node }; + }); +}); + +/** + * ******************************************************* + * AOS (Animate on scroll) - wowjs alternative + * made to animate elements on scroll in both directions + * ******************************************************* + */ + +/** + * Private variables + */ +var $aosElements = []; +var initialized = false; + +/** + * Default options + */ +var options = { + offset: 120, + delay: 0, + easing: 'ease', + duration: 400, + disable: false, + once: false, + mirror: false, + anchorPlacement: 'top-bottom', + startEvent: 'DOMContentLoaded', + animatedClassName: 'aos-animate', + initClassName: 'aos-init', + useClassNames: false, + disableMutationObserver: false, + throttleDelay: 99, + debounceDelay: 50 +}; + +// Detect not supported browsers (<=IE9) +// http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805 +var isBrowserNotSupported = function isBrowserNotSupported() { + return document.all && !window.atob; +}; + +var initializeScroll = function initializeScroll() { + // Extend elements objects in $aosElements with their positions + $aosElements = prepare($aosElements, options); + // Perform scroll event, to refresh view and show/hide elements + handleScroll($aosElements); + + /** + * Handle scroll event to animate elements on scroll + */ + window.addEventListener('scroll', throttle(function () { + handleScroll($aosElements, options.once); + }, options.throttleDelay)); + + return $aosElements; +}; + +/** + * Refresh AOS + */ +var refresh = function refresh() { + var initialize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + + // Allow refresh only when it was first initialized on startEvent + if (initialize) initialized = true; + if (initialized) initializeScroll(); +}; + +/** + * Hard refresh + * create array with new elements and trigger refresh + */ +var refreshHard = function refreshHard() { + $aosElements = elements(); + + if (isDisabled(options.disable) || isBrowserNotSupported()) { + return disable(); + } + + refresh(); +}; + +/** + * Disable AOS + * Remove all attributes to reset applied styles + */ +var disable = function disable() { + $aosElements.forEach(function (el, i) { + el.node.removeAttribute('data-aos'); + el.node.removeAttribute('data-aos-easing'); + el.node.removeAttribute('data-aos-duration'); + el.node.removeAttribute('data-aos-delay'); + + if (options.initClassName) { + el.node.classList.remove(options.initClassName); + } + + if (options.animatedClassName) { + el.node.classList.remove(options.animatedClassName); + } + }); +}; + +/** + * Check if AOS should be disabled based on provided setting + */ +var isDisabled = function isDisabled(optionDisable) { + return optionDisable === true || optionDisable === 'mobile' && detect.mobile() || optionDisable === 'phone' && detect.phone() || optionDisable === 'tablet' && detect.tablet() || typeof optionDisable === 'function' && optionDisable() === true; +}; + +/** + * Initializing AOS + * - Create options merging defaults with user defined options + * - Set attributes on as global setting - css relies on it + * - Attach preparing elements to options.startEvent, + * window resize and orientation change + * - Attach function that handle scroll and everything connected to it + * to window scroll event and fire once document is ready to set initial state + */ +var init = function init(settings) { + options = _extends(options, settings); + + // Create initial array with elements -> to be fullfilled later with prepare() + $aosElements = elements(); + + /** + * Disable mutation observing if not supported + */ + if (!options.disableMutationObserver && !observer.isSupported()) { + console.info('\n aos: MutationObserver is not supported on this browser,\n code mutations observing has been disabled.\n You may have to call "refreshHard()" by yourself.\n '); + options.disableMutationObserver = true; + } + + /** + * Observe [aos] elements + * If something is loaded by AJAX + * it'll refresh plugin automatically + */ + if (!options.disableMutationObserver) { + observer.ready('[data-aos]', refreshHard); + } + + /** + * Don't init plugin if option `disable` is set + * or when browser is not supported + */ + if (isDisabled(options.disable) || isBrowserNotSupported()) { + return disable(); + } + + /** + * Set global settings on body, based on options + * so CSS can use it + */ + document.querySelector('body').setAttribute('data-aos-easing', options.easing); + + document.querySelector('body').setAttribute('data-aos-duration', options.duration); + + document.querySelector('body').setAttribute('data-aos-delay', options.delay); + + /** + * Handle initializing + */ + if (['DOMContentLoaded', 'load'].indexOf(options.startEvent) === -1) { + // Listen to options.startEvent and initialize AOS + document.addEventListener(options.startEvent, function () { + refresh(true); + }); + } else { + window.addEventListener('load', function () { + refresh(true); + }); + } + + if (options.startEvent === 'DOMContentLoaded' && ['complete', 'interactive'].indexOf(document.readyState) > -1) { + // Initialize AOS if default startEvent was already fired + refresh(true); + } + + /** + * Refresh plugin on window resize or orientation change + */ + window.addEventListener('resize', debounce(refresh, options.debounceDelay, true)); + + window.addEventListener('orientationchange', debounce(refresh, options.debounceDelay, true)); + + return $aosElements; +}; + +/** + * Export Public API + */ + +var aos = { + init: init, + refresh: refresh, + refreshHard: refreshHard +}; + +export default aos; diff --git a/public/assets/vendor/aos/aos.js b/public/assets/vendor/aos/aos.js new file mode 100644 index 0000000000000000000000000000000000000000..74d35d999546b560598e72a6bef9cd0c2a8f80e2 --- /dev/null +++ b/public/assets/vendor/aos/aos.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.AOS=t()}(this,function(){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t="Expected a function",n=NaN,o="[object Symbol]",i=/^\s+|\s+$/g,a=/^[-+]0x[0-9a-f]+$/i,r=/^0b[01]+$/i,c=/^0o[0-7]+$/i,s=parseInt,u="object"==typeof e&&e&&e.Object===Object&&e,d="object"==typeof self&&self&&self.Object===Object&&self,l=u||d||Function("return this")(),f=Object.prototype.toString,m=Math.max,p=Math.min,b=function(){return l.Date.now()};function v(e,n,o){var i,a,r,c,s,u,d=0,l=!1,f=!1,v=!0;if("function"!=typeof e)throw new TypeError(t);function y(t){var n=i,o=a;return i=a=void 0,d=t,c=e.apply(o,n)}function h(e){var t=e-u;return void 0===u||t>=n||t<0||f&&e-d>=r}function k(){var e=b();if(h(e))return x(e);s=setTimeout(k,function(e){var t=n-(e-u);return f?p(t,r-(e-d)):t}(e))}function x(e){return s=void 0,v&&i?y(e):(i=a=void 0,c)}function O(){var e=b(),t=h(e);if(i=arguments,a=this,u=e,t){if(void 0===s)return function(e){return d=e,s=setTimeout(k,n),l?y(e):c}(u);if(f)return s=setTimeout(k,n),y(u)}return void 0===s&&(s=setTimeout(k,n)),c}return n=w(n)||0,g(o)&&(l=!!o.leading,r=(f="maxWait"in o)?m(w(o.maxWait)||0,n):r,v="trailing"in o?!!o.trailing:v),O.cancel=function(){void 0!==s&&clearTimeout(s),d=0,i=u=a=s=void 0},O.flush=function(){return void 0===s?c:x(b())},O}function g(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function w(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&f.call(e)==o}(e))return n;if(g(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=g(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(i,"");var u=r.test(e);return u||c.test(e)?s(e.slice(2),u?2:8):a.test(e)?n:+e}var y=function(e,n,o){var i=!0,a=!0;if("function"!=typeof e)throw new TypeError(t);return g(o)&&(i="leading"in o?!!o.leading:i,a="trailing"in o?!!o.trailing:a),v(e,n,{leading:i,maxWait:n,trailing:a})},h="Expected a function",k=NaN,x="[object Symbol]",O=/^\s+|\s+$/g,j=/^[-+]0x[0-9a-f]+$/i,E=/^0b[01]+$/i,N=/^0o[0-7]+$/i,z=parseInt,C="object"==typeof e&&e&&e.Object===Object&&e,A="object"==typeof self&&self&&self.Object===Object&&self,q=C||A||Function("return this")(),L=Object.prototype.toString,T=Math.max,M=Math.min,S=function(){return q.Date.now()};function D(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function H(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&L.call(e)==x}(e))return k;if(D(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=D(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(O,"");var n=E.test(e);return n||N.test(e)?z(e.slice(2),n?2:8):j.test(e)?k:+e}var $=function(e,t,n){var o,i,a,r,c,s,u=0,d=!1,l=!1,f=!0;if("function"!=typeof e)throw new TypeError(h);function m(t){var n=o,a=i;return o=i=void 0,u=t,r=e.apply(a,n)}function p(e){var n=e-s;return void 0===s||n>=t||n<0||l&&e-u>=a}function b(){var e=S();if(p(e))return v(e);c=setTimeout(b,function(e){var n=t-(e-s);return l?M(n,a-(e-u)):n}(e))}function v(e){return c=void 0,f&&o?m(e):(o=i=void 0,r)}function g(){var e=S(),n=p(e);if(o=arguments,i=this,s=e,n){if(void 0===c)return function(e){return u=e,c=setTimeout(b,t),d?m(e):r}(s);if(l)return c=setTimeout(b,t),m(s)}return void 0===c&&(c=setTimeout(b,t)),r}return t=H(t)||0,D(n)&&(d=!!n.leading,a=(l="maxWait"in n)?T(H(n.maxWait)||0,t):a,f="trailing"in n?!!n.trailing:f),g.cancel=function(){void 0!==c&&clearTimeout(c),u=0,o=s=i=c=void 0},g.flush=function(){return void 0===c?r:v(S())},g},W=function(){};function P(e){e&&e.forEach(function(e){var t=Array.prototype.slice.call(e.addedNodes),n=Array.prototype.slice.call(e.removedNodes);if(function e(t){var n=void 0,o=void 0;for(n=0;n`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n color: var(--#{$prefix}highlight-color);\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));\n text-decoration: $link-decoration;\n\n &:hover {\n --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `