├── css ├── _functions.css ├── _mixins.css ├── _site-blocks.css ├── mixins │ ├── _base.css │ ├── _deprecate.css │ └── _nav-divider.css ├── owl.theme.default.min.css ├── owl.carousel.min.css └── jquery.fancybox.min.css ├── scss ├── mixins │ ├── _base.scss │ ├── _clearfix.scss │ ├── _size.scss │ ├── _lists.scss │ ├── _text-truncate.scss │ ├── _resize.scss │ ├── _visibility.scss │ ├── _alert.scss │ ├── _text-hide.scss │ ├── _badge.scss │ ├── _nav-divider.scss │ ├── _transition.scss │ ├── _float.scss │ ├── _list-group.scss │ ├── _text-emphasis.scss │ ├── _reset-text.scss │ ├── _pagination.scss │ ├── _box-shadow.scss │ ├── _deprecate.scss │ ├── _background-variant.scss │ ├── _hover.scss │ ├── _screen-reader.scss │ ├── _table-row.scss │ ├── _image.scss │ ├── _border-radius.scss │ ├── _caret.scss │ ├── _grid-framework.scss │ ├── _gradients.scss │ ├── _grid.scss │ ├── _buttons.scss │ ├── _breakpoints.scss │ └── _forms.scss ├── style.scss ├── _mixins.scss ├── _site-footer.scss ├── _site-base.scss ├── _functions.scss ├── _site-elements.scss └── _site-navbar.scss ├── favicon.png ├── images ├── dotted.png ├── hero-min.jpg ├── logo-puma.png ├── img_h_1-min.jpg ├── img_h_2-min.jpg ├── img_h_3-min.jpg ├── img_h_4-min.jpg ├── img_h_5-min.jpg ├── img_h_6-min.jpg ├── img_h_7-min.jpg ├── img_h_8-min.jpg ├── img_v_1-min.jpg ├── img_v_2-min.jpg ├── img_v_3-min.jpg ├── img_v_4-min.jpg ├── img_v_5-min.jpg ├── img_v_6-min.jpg ├── img_v_7-min.jpg ├── img_v_8-min.jpg ├── logo-adobe.png ├── logo-google.png ├── logo-paypal.png ├── person_1-min.jpg ├── person_2-min.jpg ├── person_3-min.jpg ├── person_4-min.jpg ├── person_5-min.jpg ├── person_6-min.jpg ├── overlay.svg ├── slant.svg ├── slant-grey.svg └── undraw_snap_the_moment_re_88cu.svg ├── fonts ├── feather │ ├── fonts │ │ ├── feather.eot │ │ ├── feather.ttf │ │ └── feather.woff │ ├── Read Me.txt │ └── demo-files │ │ ├── demo.js │ │ └── demo.css ├── flaticon │ ├── font │ │ ├── Flaticon.eot │ │ ├── Flaticon.ttf │ │ ├── Flaticon.woff │ │ ├── Flaticon.woff2 │ │ ├── _flaticon.css │ │ ├── flaticon.css │ │ └── _flaticon.scss │ └── backup.txt └── icomoon │ ├── fonts │ ├── icomoon.eot │ ├── icomoon.ttf │ └── icomoon.woff │ ├── Read Me.txt │ └── demo-files │ ├── demo.js │ └── demo.css ├── LICENSE ├── js ├── jquery.animateNumber.min.js ├── jquery-migrate-3.0.0.min.js ├── custom.js ├── jquery.waypoints.min.js ├── jquery.stellar.min.js ├── aos.js └── imagesloaded.pkgd.js ├── .github └── workflows │ └── static.yml ├── README.md ├── prepros-6.config └── contact.html /css/_functions.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /css/_mixins.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /css/_site-blocks.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /css/mixins/_base.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scss/mixins/_base.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /css/mixins/_deprecate.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /css/mixins/_nav-divider.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/favicon.png -------------------------------------------------------------------------------- /images/dotted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/dotted.png -------------------------------------------------------------------------------- /images/hero-min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/hero-min.jpg -------------------------------------------------------------------------------- /images/logo-puma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/logo-puma.png -------------------------------------------------------------------------------- /images/img_h_1-min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/img_h_1-min.jpg -------------------------------------------------------------------------------- /images/img_h_2-min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/img_h_2-min.jpg -------------------------------------------------------------------------------- /images/img_h_3-min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/img_h_3-min.jpg -------------------------------------------------------------------------------- /images/img_h_4-min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/img_h_4-min.jpg -------------------------------------------------------------------------------- /images/img_h_5-min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/img_h_5-min.jpg -------------------------------------------------------------------------------- /images/img_h_6-min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/img_h_6-min.jpg -------------------------------------------------------------------------------- /images/img_h_7-min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/img_h_7-min.jpg -------------------------------------------------------------------------------- /images/img_h_8-min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/img_h_8-min.jpg -------------------------------------------------------------------------------- /images/img_v_1-min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/img_v_1-min.jpg -------------------------------------------------------------------------------- /images/img_v_2-min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/img_v_2-min.jpg -------------------------------------------------------------------------------- /images/img_v_3-min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/img_v_3-min.jpg -------------------------------------------------------------------------------- /images/img_v_4-min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/img_v_4-min.jpg -------------------------------------------------------------------------------- /images/img_v_5-min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/img_v_5-min.jpg -------------------------------------------------------------------------------- /images/img_v_6-min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/img_v_6-min.jpg -------------------------------------------------------------------------------- /images/img_v_7-min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/img_v_7-min.jpg -------------------------------------------------------------------------------- /images/img_v_8-min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/img_v_8-min.jpg -------------------------------------------------------------------------------- /images/logo-adobe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/logo-adobe.png -------------------------------------------------------------------------------- /images/logo-google.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/logo-google.png -------------------------------------------------------------------------------- /images/logo-paypal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/logo-paypal.png -------------------------------------------------------------------------------- /images/person_1-min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/person_1-min.jpg -------------------------------------------------------------------------------- /images/person_2-min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/person_2-min.jpg -------------------------------------------------------------------------------- /images/person_3-min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/person_3-min.jpg -------------------------------------------------------------------------------- /images/person_4-min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/person_4-min.jpg -------------------------------------------------------------------------------- /images/person_5-min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/person_5-min.jpg -------------------------------------------------------------------------------- /images/person_6-min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/images/person_6-min.jpg -------------------------------------------------------------------------------- /fonts/feather/fonts/feather.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/fonts/feather/fonts/feather.eot -------------------------------------------------------------------------------- /fonts/feather/fonts/feather.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/fonts/feather/fonts/feather.ttf -------------------------------------------------------------------------------- /fonts/feather/fonts/feather.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/fonts/feather/fonts/feather.woff -------------------------------------------------------------------------------- /fonts/flaticon/font/Flaticon.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/fonts/flaticon/font/Flaticon.eot -------------------------------------------------------------------------------- /fonts/flaticon/font/Flaticon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/fonts/flaticon/font/Flaticon.ttf -------------------------------------------------------------------------------- /fonts/flaticon/font/Flaticon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/fonts/flaticon/font/Flaticon.woff -------------------------------------------------------------------------------- /fonts/icomoon/fonts/icomoon.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/fonts/icomoon/fonts/icomoon.eot -------------------------------------------------------------------------------- /fonts/icomoon/fonts/icomoon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/fonts/icomoon/fonts/icomoon.ttf -------------------------------------------------------------------------------- /fonts/icomoon/fonts/icomoon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/fonts/icomoon/fonts/icomoon.woff -------------------------------------------------------------------------------- /fonts/flaticon/font/Flaticon.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Krypto-etox/service-website-template/HEAD/fonts/flaticon/font/Flaticon.woff2 -------------------------------------------------------------------------------- /scss/mixins/_clearfix.scss: -------------------------------------------------------------------------------- 1 | @mixin clearfix() { 2 | &::after { 3 | display: block; 4 | clear: both; 5 | content: ""; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /scss/mixins/_size.scss: -------------------------------------------------------------------------------- 1 | // Sizing shortcuts 2 | 3 | @mixin size($width, $height: $width) { 4 | width: $width; 5 | height: $height; 6 | @include deprecate("`size()`", "v4.3.0", "v5"); 7 | } 8 | -------------------------------------------------------------------------------- /scss/mixins/_lists.scss: -------------------------------------------------------------------------------- 1 | // Lists 2 | 3 | // Unstyled keeps list items block level, just removes default browser padding and list-style 4 | @mixin list-unstyled() { 5 | padding-left: 0; 6 | list-style: none; 7 | } 8 | -------------------------------------------------------------------------------- /scss/mixins/_text-truncate.scss: -------------------------------------------------------------------------------- 1 | // Text truncate 2 | // Requires inline-block or block for proper styling 3 | 4 | @mixin text-truncate() { 5 | overflow: hidden; 6 | text-overflow: ellipsis; 7 | white-space: nowrap; 8 | } 9 | -------------------------------------------------------------------------------- /scss/mixins/_resize.scss: -------------------------------------------------------------------------------- 1 | // Resize anything 2 | 3 | @mixin resizable($direction) { 4 | overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible` 5 | resize: $direction; // Options: horizontal, vertical, both 6 | } 7 | -------------------------------------------------------------------------------- /scss/mixins/_visibility.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // Visibility 4 | 5 | @mixin invisible($visibility) { 6 | visibility: $visibility !important; 7 | @include deprecate("`invisible()`", "v4.3.0", "v5"); 8 | } 9 | -------------------------------------------------------------------------------- /images/overlay.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /scss/mixins/_alert.scss: -------------------------------------------------------------------------------- 1 | @mixin alert-variant($background, $border, $color) { 2 | color: $color; 3 | @include gradient-bg($background); 4 | border-color: $border; 5 | 6 | hr { 7 | border-top-color: darken($border, 5%); 8 | } 9 | 10 | .alert-link { 11 | color: darken($color, 10%); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /scss/mixins/_text-hide.scss: -------------------------------------------------------------------------------- 1 | // CSS image replacement 2 | @mixin text-hide($ignore-warning: false) { 3 | // stylelint-disable-next-line font-family-no-missing-generic-family-keyword 4 | font: 0/0 a; 5 | color: transparent; 6 | text-shadow: none; 7 | background-color: transparent; 8 | border: 0; 9 | 10 | @include deprecate("`text-hide()`", "v4.1.0", "v5", $ignore-warning); 11 | } 12 | -------------------------------------------------------------------------------- /scss/mixins/_badge.scss: -------------------------------------------------------------------------------- 1 | @mixin badge-variant($bg) { 2 | color: color-yiq($bg); 3 | background-color: $bg; 4 | 5 | @at-root a#{&} { 6 | @include hover-focus() { 7 | color: color-yiq($bg); 8 | background-color: darken($bg, 10%); 9 | } 10 | 11 | &:focus, 12 | &.focus { 13 | outline: 0; 14 | box-shadow: 0 0 0 $badge-focus-width rgba($bg, .5); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /scss/mixins/_nav-divider.scss: -------------------------------------------------------------------------------- 1 | // Horizontal dividers 2 | // 3 | // Dividers (basically an hr) within dropdowns and nav lists 4 | 5 | @mixin nav-divider($color: $nav-divider-color, $margin-y: $nav-divider-margin-y, $ignore-warning: false) { 6 | height: 0; 7 | margin: $margin-y 0; 8 | overflow: hidden; 9 | border-top: 1px solid $color; 10 | @include deprecate("The `nav-divider()` mixin", "v4.4.0", "v5", $ignore-warning); 11 | } 12 | -------------------------------------------------------------------------------- /scss/mixins/_transition.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable property-blacklist 2 | @mixin transition($transition...) { 3 | @if $enable-transitions { 4 | @if length($transition) == 0 { 5 | transition: $transition-base; 6 | } @else { 7 | transition: $transition; 8 | } 9 | } 10 | 11 | @if $enable-prefers-reduced-motion-media-query { 12 | @media (prefers-reduced-motion: reduce) { 13 | transition: none; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /scss/mixins/_float.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | @mixin float-left() { 4 | float: left !important; 5 | @include deprecate("The `float-left` mixin", "v4.3.0", "v5"); 6 | } 7 | @mixin float-right() { 8 | float: right !important; 9 | @include deprecate("The `float-right` mixin", "v4.3.0", "v5"); 10 | } 11 | @mixin float-none() { 12 | float: none !important; 13 | @include deprecate("The `float-none` mixin", "v4.3.0", "v5"); 14 | } 15 | -------------------------------------------------------------------------------- /images/slant.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /images/slant-grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /scss/mixins/_list-group.scss: -------------------------------------------------------------------------------- 1 | // List Groups 2 | 3 | @mixin list-group-item-variant($state, $background, $color) { 4 | .list-group-item-#{$state} { 5 | color: $color; 6 | background-color: $background; 7 | 8 | &.list-group-item-action { 9 | @include hover-focus() { 10 | color: $color; 11 | background-color: darken($background, 5%); 12 | } 13 | 14 | &.active { 15 | color: $white; 16 | background-color: $color; 17 | border-color: $color; 18 | } 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /scss/mixins/_text-emphasis.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // Typography 4 | 5 | @mixin text-emphasis-variant($parent, $color, $ignore-warning: false) { 6 | #{$parent} { 7 | color: $color !important; 8 | } 9 | @if $emphasized-link-hover-darken-percentage != 0 { 10 | a#{$parent} { 11 | @include hover-focus() { 12 | color: darken($color, $emphasized-link-hover-darken-percentage) !important; 13 | } 14 | } 15 | } 16 | @include deprecate("`text-emphasis-variant()`", "v4.4.0", "v5", $ignore-warning); 17 | } 18 | -------------------------------------------------------------------------------- /scss/mixins/_reset-text.scss: -------------------------------------------------------------------------------- 1 | @mixin reset-text() { 2 | font-family: $font-family-base; 3 | // We deliberately do NOT reset font-size or word-wrap. 4 | font-style: normal; 5 | font-weight: $font-weight-normal; 6 | line-height: $line-height-base; 7 | text-align: left; // Fallback for where `start` is not supported 8 | text-align: start; 9 | text-decoration: none; 10 | text-shadow: none; 11 | text-transform: none; 12 | letter-spacing: normal; 13 | word-break: normal; 14 | word-spacing: normal; 15 | white-space: normal; 16 | line-break: auto; 17 | } 18 | -------------------------------------------------------------------------------- /scss/mixins/_pagination.scss: -------------------------------------------------------------------------------- 1 | // Pagination 2 | 3 | @mixin pagination-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) { 4 | .page-link { 5 | padding: $padding-y $padding-x; 6 | @include font-size($font-size); 7 | line-height: $line-height; 8 | } 9 | 10 | .page-item { 11 | &:first-child { 12 | .page-link { 13 | @include border-left-radius($border-radius); 14 | } 15 | } 16 | &:last-child { 17 | .page-link { 18 | @include border-right-radius($border-radius); 19 | } 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /scss/mixins/_box-shadow.scss: -------------------------------------------------------------------------------- 1 | @mixin box-shadow($shadow...) { 2 | @if $enable-shadows { 3 | $result: (); 4 | 5 | @if (length($shadow) == 1) { 6 | // We can pass `@include box-shadow(none);` 7 | $result: $shadow; 8 | } @else { 9 | // Filter to avoid invalid properties for example `box-shadow: none, 1px 1px black;` 10 | @for $i from 1 through length($shadow) { 11 | @if nth($shadow, $i) != "none" { 12 | $result: append($result, nth($shadow, $i), "comma"); 13 | } 14 | } 15 | } 16 | @if (length($result) > 0) { 17 | box-shadow: $result; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /scss/mixins/_deprecate.scss: -------------------------------------------------------------------------------- 1 | // Deprecate mixin 2 | // 3 | // This mixin can be used to deprecate mixins or functions. 4 | // `$enable-deprecation-messages` is a global variable, `$ignore-warning` is a variable that can be passed to 5 | // some deprecated mixins to suppress the warning (for example if the mixin is still be used in the current version of Bootstrap) 6 | @mixin deprecate($name, $deprecate-version, $remove-version, $ignore-warning: false) { 7 | @if ($enable-deprecation-messages != false and $ignore-warning != true) { 8 | @warn "#{$name} has been deprecated as of #{$deprecate-version}. It will be removed entirely in #{$remove-version}."; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /scss/mixins/_background-variant.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // Contextual backgrounds 4 | 5 | @mixin bg-variant($parent, $color, $ignore-warning: false) { 6 | #{$parent} { 7 | background-color: $color !important; 8 | } 9 | a#{$parent}, 10 | button#{$parent} { 11 | @include hover-focus() { 12 | background-color: darken($color, 10%) !important; 13 | } 14 | } 15 | @include deprecate("The `bg-variant` mixin", "v4.4.0", "v5", $ignore-warning); 16 | } 17 | 18 | @mixin bg-gradient-variant($parent, $color) { 19 | #{$parent} { 20 | background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x !important; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /scss/style.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Template Name: Append 3 | * Template Author: Untree.co 4 | * Template License: https://creativecommons.org/licenses/by/3.0/ 5 | * Author URI: https://untree.co/ 6 | 7 | * Twitter: https://twitter.com/Untree_co 8 | * Facebook: https://web.facebook.com/Untree.co/ 9 | */ 10 | 11 | @import "functions"; 12 | @import "variables"; 13 | @import "mixins"; 14 | 15 | $primary: #e84545; 16 | $black: #000000; 17 | $white: #ffffff; 18 | $heading_color: #000839; 19 | $heading_light_color: rgba($heading_color, .5); 20 | $font-family: 'Montserrat', sans-serif; 21 | 22 | @import 'site-base'; 23 | @import 'site-navbar'; 24 | @import 'site-blocks'; 25 | @import 'site-elements'; 26 | @import 'site-footer'; -------------------------------------------------------------------------------- /fonts/feather/Read Me.txt: -------------------------------------------------------------------------------- 1 | Open *demo.html* to see a list of all the glyphs in your font along with their codes/ligatures. 2 | 3 | To use the generated font in desktop programs, you can install the TTF font. In order to copy the character associated with each icon, refer to the text box at the bottom right corner of each glyph in demo.html. The character inside this text box may be invisible; but it can still be copied. See this guide for more info: https://icomoon.io/#docs/local-fonts 4 | 5 | You won't need any of the files located under the *demo-files* directory when including the generated font in your own projects. 6 | 7 | You can import *selection.json* back to the IcoMoon app using the *Import Icons* button (or via Main Menu → Manage Projects) to retrieve your icon selection. 8 | -------------------------------------------------------------------------------- /fonts/icomoon/Read Me.txt: -------------------------------------------------------------------------------- 1 | Open *demo.html* to see a list of all the glyphs in your font along with their codes/ligatures. 2 | 3 | To use the generated font in desktop programs, you can install the TTF font. In order to copy the character associated with each icon, refer to the text box at the bottom right corner of each glyph in demo.html. The character inside this text box may be invisible; but it can still be copied. See this guide for more info: https://icomoon.io/#docs/local-fonts 4 | 5 | You won't need any of the files located under the *demo-files* directory when including the generated font in your own projects. 6 | 7 | You can import *selection.json* back to the IcoMoon app using the *Import Icons* button (or via Main Menu → Manage Projects) to retrieve your icon selection. 8 | -------------------------------------------------------------------------------- /fonts/flaticon/backup.txt: -------------------------------------------------------------------------------- 1 | eyI4Ijp7IklEIjo4LCJuYW1lIjoiTXkgaWNvbnMgY29sbGVjdGlvbiIsImJvb2ttYXJrX2lkIjoxNTI2Njc0MSwiY3JlYXRlZCI6MTYwODQyNDk5MywidXBkYXRlZCI6MTYxMTA1NDU2MiwiYWN0aXZlIjoxLCJzb3VyY2UiOiJyZW1vdGUiLCJvcmRlciI6MCwiY29sb3IiOiIwMDAwMDAiLCJzdGF0dXMiOjF9LCIxNTI2Njc0MSI6W3siaWQiOjc4NjcyNCwibmFtZSI6ImpvYi1zZWFyY2giLCJjb2xvciI6IiMwMDAwMDAiLCJwcmVtaXVtIjoiMCIsInNvcnQiOjF9LHsiaWQiOjc4Njc0NiwibmFtZSI6InN0YXRpc3RpY3MiLCJjb2xvciI6IiMwMDAwMDAiLCJwcmVtaXVtIjoiMCIsInNvcnQiOjJ9LHsiaWQiOjEzOTE5ODAsIm5hbWUiOiJyb2NrZXQiLCJjb2xvciI6IiMwMDAwMDAiLCJwcmVtaXVtIjoiMCIsInNvcnQiOjN9LHsiaWQiOjgyNzk1MywibmFtZSI6Imdyb3d0aCIsImNvbG9yIjoiIzAwMDAwMCIsInByZW1pdW0iOiIwIiwic29ydCI6NH0seyJpZCI6ODI3OTE4LCJuYW1lIjoib2JqZWN0aXZlIiwiY29sb3IiOiIjMDAwMDAwIiwicHJlbWl1bSI6IjAiLCJzb3J0Ijo1fSx7ImlkIjoyMjA5OTY0LCJuYW1lIjoiY29kaW5nIiwiY29sb3IiOiIjMDAwMDAwIiwicHJlbWl1bSI6IjAiLCJzb3J0Ijo2fV19 -------------------------------------------------------------------------------- /scss/mixins/_hover.scss: -------------------------------------------------------------------------------- 1 | // Hover mixin and `$enable-hover-media-query` are deprecated. 2 | // 3 | // Originally added during our alphas and maintained during betas, this mixin was 4 | // designed to prevent `:hover` stickiness on iOS-an issue where hover styles 5 | // would persist after initial touch. 6 | // 7 | // For backward compatibility, we've kept these mixins and updated them to 8 | // always return their regular pseudo-classes instead of a shimmed media query. 9 | // 10 | // Issue: https://github.com/twbs/bootstrap/issues/25195 11 | 12 | @mixin hover() { 13 | &:hover { @content; } 14 | } 15 | 16 | @mixin hover-focus() { 17 | &:hover, 18 | &:focus { 19 | @content; 20 | } 21 | } 22 | 23 | @mixin plain-hover-focus() { 24 | &, 25 | &:hover, 26 | &:focus { 27 | @content; 28 | } 29 | } 30 | 31 | @mixin hover-focus-active() { 32 | &:hover, 33 | &:focus, 34 | &:active { 35 | @content; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /scss/mixins/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // Only display content to screen readers 2 | // 3 | // See: https://a11yproject.com/posts/how-to-hide-content/ 4 | // See: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/ 5 | 6 | @mixin sr-only() { 7 | position: absolute; 8 | width: 1px; 9 | height: 1px; 10 | padding: 0; 11 | margin: -1px; // Fix for https://github.com/twbs/bootstrap/issues/25686 12 | overflow: hidden; 13 | clip: rect(0, 0, 0, 0); 14 | white-space: nowrap; 15 | border: 0; 16 | } 17 | 18 | // Use in conjunction with .sr-only to only display content when it's focused. 19 | // 20 | // Useful for "Skip to main content" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 21 | // 22 | // Credit: HTML5 Boilerplate 23 | 24 | @mixin sr-only-focusable() { 25 | &:active, 26 | &:focus { 27 | position: static; 28 | width: auto; 29 | height: auto; 30 | overflow: visible; 31 | clip: auto; 32 | white-space: normal; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /scss/mixins/_table-row.scss: -------------------------------------------------------------------------------- 1 | // Tables 2 | 3 | @mixin table-row-variant($state, $background, $border: null) { 4 | // Exact selectors below required to override `.table-striped` and prevent 5 | // inheritance to nested tables. 6 | .table-#{$state} { 7 | &, 8 | > th, 9 | > td { 10 | background-color: $background; 11 | } 12 | 13 | @if $border != null { 14 | th, 15 | td, 16 | thead th, 17 | tbody + tbody { 18 | border-color: $border; 19 | } 20 | } 21 | } 22 | 23 | // Hover states for `.table-hover` 24 | // Note: this is not available for cells or rows within `thead` or `tfoot`. 25 | .table-hover { 26 | $hover-background: darken($background, 5%); 27 | 28 | .table-#{$state} { 29 | @include hover() { 30 | background-color: $hover-background; 31 | 32 | > td, 33 | > th { 34 | background-color: $hover-background; 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /css/owl.theme.default.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.2.1 3 | * Copyright 2013-2017 David Deutsch 4 | * Licensed under () 5 | */ 6 | .owl-theme .owl-dots, 7 | .owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent} 8 | .owl-theme .owl-nav{margin-top:10px} 9 | .owl-theme .owl-nav [class*=owl-]{color:#FFF;font-size:14px;margin:5px;padding:4px 7px;background:#D6D6D6;display:inline-block;cursor:pointer;border-radius:3px;position: absolute;} 10 | .owl-theme .owl-nav [class*=owl-]:hover{background:#869791;color:#FFF;text-decoration:none} 11 | .owl-theme .owl-nav .disabled{opacity:.5;cursor:default} 12 | .owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px} 13 | .owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1} 14 | .owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#D6D6D6;display:block;-webkit-backface-visibility:visible;transition:opacity .2s ease;border-radius:30px} 15 | .owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#869791} -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Krypto-etox 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /fonts/feather/demo-files/demo.js: -------------------------------------------------------------------------------- 1 | if (!('boxShadow' in document.body.style)) { 2 | document.body.setAttribute('class', 'noBoxShadow'); 3 | } 4 | 5 | document.body.addEventListener("click", function(e) { 6 | var target = e.target; 7 | if (target.tagName === "INPUT" && 8 | target.getAttribute('class').indexOf('liga') === -1) { 9 | target.select(); 10 | } 11 | }); 12 | 13 | (function() { 14 | var fontSize = document.getElementById('fontSize'), 15 | testDrive = document.getElementById('testDrive'), 16 | testText = document.getElementById('testText'); 17 | function updateTest() { 18 | testDrive.innerHTML = testText.value || String.fromCharCode(160); 19 | if (window.icomoonLiga) { 20 | window.icomoonLiga(testDrive); 21 | } 22 | } 23 | function updateSize() { 24 | testDrive.style.fontSize = fontSize.value + 'px'; 25 | } 26 | fontSize.addEventListener('change', updateSize, false); 27 | testText.addEventListener('input', updateTest, false); 28 | testText.addEventListener('change', updateTest, false); 29 | updateSize(); 30 | }()); 31 | -------------------------------------------------------------------------------- /fonts/icomoon/demo-files/demo.js: -------------------------------------------------------------------------------- 1 | if (!('boxShadow' in document.body.style)) { 2 | document.body.setAttribute('class', 'noBoxShadow'); 3 | } 4 | 5 | document.body.addEventListener("click", function(e) { 6 | var target = e.target; 7 | if (target.tagName === "INPUT" && 8 | target.getAttribute('class').indexOf('liga') === -1) { 9 | target.select(); 10 | } 11 | }); 12 | 13 | (function() { 14 | var fontSize = document.getElementById('fontSize'), 15 | testDrive = document.getElementById('testDrive'), 16 | testText = document.getElementById('testText'); 17 | function updateTest() { 18 | testDrive.innerHTML = testText.value || String.fromCharCode(160); 19 | if (window.icomoonLiga) { 20 | window.icomoonLiga(testDrive); 21 | } 22 | } 23 | function updateSize() { 24 | testDrive.style.fontSize = fontSize.value + 'px'; 25 | } 26 | fontSize.addEventListener('change', updateSize, false); 27 | testText.addEventListener('input', updateTest, false); 28 | testText.addEventListener('change', updateTest, false); 29 | updateSize(); 30 | }()); 31 | -------------------------------------------------------------------------------- /scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Toggles 2 | // 3 | // Used in conjunction with global variables to enable certain theme features. 4 | 5 | // Vendor 6 | // @import "vendor/rfs"; 7 | 8 | // Deprecate 9 | @import "mixins/deprecate"; 10 | 11 | // Utilities 12 | @import "mixins/breakpoints"; 13 | @import "mixins/hover"; 14 | @import "mixins/image"; 15 | @import "mixins/badge"; 16 | @import "mixins/resize"; 17 | @import "mixins/screen-reader"; 18 | @import "mixins/size"; 19 | @import "mixins/reset-text"; 20 | @import "mixins/text-emphasis"; 21 | @import "mixins/text-hide"; 22 | @import "mixins/text-truncate"; 23 | @import "mixins/visibility"; 24 | 25 | // Components 26 | @import "mixins/alert"; 27 | @import "mixins/buttons"; 28 | @import "mixins/caret"; 29 | @import "mixins/pagination"; 30 | @import "mixins/lists"; 31 | @import "mixins/list-group"; 32 | @import "mixins/nav-divider"; 33 | @import "mixins/forms"; 34 | @import "mixins/table-row"; 35 | 36 | // Skins 37 | @import "mixins/background-variant"; 38 | @import "mixins/border-radius"; 39 | @import "mixins/box-shadow"; 40 | @import "mixins/gradients"; 41 | @import "mixins/transition"; 42 | 43 | // Layout 44 | @import "mixins/clearfix"; 45 | @import "mixins/grid-framework"; 46 | @import "mixins/grid"; 47 | @import "mixins/float"; 48 | -------------------------------------------------------------------------------- /scss/mixins/_image.scss: -------------------------------------------------------------------------------- 1 | // Image Mixins 2 | // - Responsive image 3 | // - Retina image 4 | 5 | 6 | // Responsive image 7 | // 8 | // Keep images from scaling beyond the width of their parents. 9 | 10 | @mixin img-fluid() { 11 | // Part 1: Set a maximum relative to the parent 12 | max-width: 100%; 13 | // Part 2: Override the height to auto, otherwise images will be stretched 14 | // when setting a width and height attribute on the img element. 15 | height: auto; 16 | } 17 | 18 | 19 | // Retina image 20 | // 21 | // Short retina mixin for setting background-image and -size. 22 | 23 | @mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) { 24 | background-image: url($file-1x); 25 | 26 | // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio, 27 | // but doesn't convert dppx=>dpi. 28 | // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard. 29 | // Compatibility info: https://caniuse.com/#feat=css-media-resolution 30 | @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx 31 | only screen and (min-resolution: 2dppx) { // Standardized 32 | background-image: url($file-2x); 33 | background-size: $width-1x $height-1x; 34 | } 35 | @include deprecate("`img-retina()`", "v4.3.0", "v5"); 36 | } 37 | -------------------------------------------------------------------------------- /js/jquery.animateNumber.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | jQuery animateNumber plugin v0.0.14 3 | (c) 2013, Alexandr Borisov. 4 | https://github.com/aishek/jquery-animateNumber 5 | */ 6 | (function(d){var r=function(b){return b.split("").reverse().join("")},m={numberStep:function(b,a){var e=Math.floor(b);d(a.elem).text(e)}},g=function(b){var a=b.elem;a.nodeType&&a.parentNode&&(a=a._animateNumberSetter,a||(a=m.numberStep),a(b.now,b))};d.Tween&&d.Tween.propHooks?d.Tween.propHooks.number={set:g}:d.fx.step.number=g;d.animateNumber={numberStepFactories:{append:function(b){return function(a,e){var f=Math.floor(a);d(e.elem).prop("number",a).text(f+b)}},separator:function(b,a,e){b=b||" "; 7 | a=a||3;e=e||"";return function(f,k){var u=0>f,c=Math.floor((u?-1:1)*f).toString(),n=d(k.elem);if(c.length>a){for(var h=c,l=a,m=h.split("").reverse(),c=[],p,s,q,t=0,g=Math.ceil(h.length/l);t * { 66 | flex: 0 0 100% / $count; 67 | max-width: 100% / $count; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /fonts/feather/demo-files/demo.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding: 0; 3 | margin: 0; 4 | font-family: sans-serif; 5 | font-size: 1em; 6 | line-height: 1.5; 7 | color: #555; 8 | background: #fff; 9 | } 10 | h1 { 11 | font-size: 1.5em; 12 | font-weight: normal; 13 | } 14 | small { 15 | font-size: .66666667em; 16 | } 17 | a { 18 | color: #e74c3c; 19 | text-decoration: none; 20 | } 21 | a:hover, a:focus { 22 | box-shadow: 0 1px #e74c3c; 23 | } 24 | .bshadow0, input { 25 | box-shadow: inset 0 -2px #e7e7e7; 26 | } 27 | input:hover { 28 | box-shadow: inset 0 -2px #ccc; 29 | } 30 | input, fieldset { 31 | font-family: sans-serif; 32 | font-size: 1em; 33 | margin: 0; 34 | padding: 0; 35 | border: 0; 36 | } 37 | input { 38 | color: inherit; 39 | line-height: 1.5; 40 | height: 1.5em; 41 | padding: .25em 0; 42 | } 43 | input:focus { 44 | outline: none; 45 | box-shadow: inset 0 -2px #449fdb; 46 | } 47 | .glyph { 48 | font-size: 16px; 49 | width: 15em; 50 | padding-bottom: 1em; 51 | margin-right: 4em; 52 | margin-bottom: 1em; 53 | float: left; 54 | overflow: hidden; 55 | } 56 | .liga { 57 | width: 80%; 58 | width: calc(100% - 2.5em); 59 | } 60 | .talign-right { 61 | text-align: right; 62 | } 63 | .talign-center { 64 | text-align: center; 65 | } 66 | .bgc1 { 67 | background: #f1f1f1; 68 | } 69 | .fgc1 { 70 | color: #999; 71 | } 72 | .fgc0 { 73 | color: #000; 74 | } 75 | p { 76 | margin-top: 1em; 77 | margin-bottom: 1em; 78 | } 79 | .mvm { 80 | margin-top: .75em; 81 | margin-bottom: .75em; 82 | } 83 | .mtn { 84 | margin-top: 0; 85 | } 86 | .mtl, .mal { 87 | margin-top: 1.5em; 88 | } 89 | .mbl, .mal { 90 | margin-bottom: 1.5em; 91 | } 92 | .mal, .mhl { 93 | margin-left: 1.5em; 94 | margin-right: 1.5em; 95 | } 96 | .mhmm { 97 | margin-left: 1em; 98 | margin-right: 1em; 99 | } 100 | .mls { 101 | margin-left: .25em; 102 | } 103 | .ptl { 104 | padding-top: 1.5em; 105 | } 106 | .pbs, .pvs { 107 | padding-bottom: .25em; 108 | } 109 | .pvs, .pts { 110 | padding-top: .25em; 111 | } 112 | .unit { 113 | float: left; 114 | } 115 | .unitRight { 116 | float: right; 117 | } 118 | .size1of2 { 119 | width: 50%; 120 | } 121 | .size1of1 { 122 | width: 100%; 123 | } 124 | .clearfix:before, .clearfix:after { 125 | content: " "; 126 | display: table; 127 | } 128 | .clearfix:after { 129 | clear: both; 130 | } 131 | .hidden-true { 132 | display: none; 133 | } 134 | .textbox0 { 135 | width: 3em; 136 | background: #f1f1f1; 137 | padding: .25em .5em; 138 | line-height: 1.5; 139 | height: 1.5em; 140 | } 141 | #testDrive { 142 | display: block; 143 | padding-top: 24px; 144 | line-height: 1.5; 145 | } 146 | .fs0 { 147 | font-size: 16px; 148 | } 149 | .fs1 { 150 | font-size: 24px; 151 | } 152 | 153 | -------------------------------------------------------------------------------- /css/owl.carousel.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.2.1 3 | * Copyright 2013-2017 David Deutsch 4 | * Licensed under () 5 | */ 6 | .owl-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{display:none;width:100%;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y;-moz-backface-visibility:hidden}.owl-carousel .owl-stage:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0,0,0)}.owl-carousel .owl-item,.owl-carousel .owl-wrapper{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;width:100%}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.no-js .owl-carousel,.owl-carousel.owl-loaded{display:block}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;cursor:hand;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.owl-carousel .animated{animation-duration:1s;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{animation-name:fadeOut}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%} -------------------------------------------------------------------------------- /fonts/icomoon/demo-files/demo.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding: 0; 3 | margin: 0; 4 | font-family: sans-serif; 5 | font-size: 1em; 6 | line-height: 1.5; 7 | color: #555; 8 | background: #fff; 9 | } 10 | h1 { 11 | font-size: 1.5em; 12 | font-weight: normal; 13 | } 14 | small { 15 | font-size: .66666667em; 16 | } 17 | a { 18 | color: #e74c3c; 19 | text-decoration: none; 20 | } 21 | a:hover, a:focus { 22 | box-shadow: 0 1px #e74c3c; 23 | } 24 | .bshadow0, input { 25 | box-shadow: inset 0 -2px #e7e7e7; 26 | } 27 | input:hover { 28 | box-shadow: inset 0 -2px #ccc; 29 | } 30 | input, fieldset { 31 | font-family: sans-serif; 32 | font-size: 1em; 33 | margin: 0; 34 | padding: 0; 35 | border: 0; 36 | } 37 | input { 38 | color: inherit; 39 | line-height: 1.5; 40 | height: 1.5em; 41 | padding: .25em 0; 42 | } 43 | input:focus { 44 | outline: none; 45 | box-shadow: inset 0 -2px #449fdb; 46 | } 47 | .glyph { 48 | font-size: 16px; 49 | width: 15em; 50 | padding-bottom: 1em; 51 | margin-right: 4em; 52 | margin-bottom: 1em; 53 | float: left; 54 | overflow: hidden; 55 | } 56 | .liga { 57 | width: 80%; 58 | width: calc(100% - 2.5em); 59 | } 60 | .talign-right { 61 | text-align: right; 62 | } 63 | .talign-center { 64 | text-align: center; 65 | } 66 | .bgc1 { 67 | background: #f1f1f1; 68 | } 69 | .fgc1 { 70 | color: #999; 71 | } 72 | .fgc0 { 73 | color: #000; 74 | } 75 | p { 76 | margin-top: 1em; 77 | margin-bottom: 1em; 78 | } 79 | .mvm { 80 | margin-top: .75em; 81 | margin-bottom: .75em; 82 | } 83 | .mtn { 84 | margin-top: 0; 85 | } 86 | .mtl, .mal { 87 | margin-top: 1.5em; 88 | } 89 | .mbl, .mal { 90 | margin-bottom: 1.5em; 91 | } 92 | .mal, .mhl { 93 | margin-left: 1.5em; 94 | margin-right: 1.5em; 95 | } 96 | .mhmm { 97 | margin-left: 1em; 98 | margin-right: 1em; 99 | } 100 | .mls { 101 | margin-left: .25em; 102 | } 103 | .ptl { 104 | padding-top: 1.5em; 105 | } 106 | .pbs, .pvs { 107 | padding-bottom: .25em; 108 | } 109 | .pvs, .pts { 110 | padding-top: .25em; 111 | } 112 | .unit { 113 | float: left; 114 | } 115 | .unitRight { 116 | float: right; 117 | } 118 | .size1of2 { 119 | width: 50%; 120 | } 121 | .size1of1 { 122 | width: 100%; 123 | } 124 | .clearfix:before, .clearfix:after { 125 | content: " "; 126 | display: table; 127 | } 128 | .clearfix:after { 129 | clear: both; 130 | } 131 | .hidden-true { 132 | display: none; 133 | } 134 | .textbox0 { 135 | width: 3em; 136 | background: #f1f1f1; 137 | padding: .25em .5em; 138 | line-height: 1.5; 139 | height: 1.5em; 140 | } 141 | #testDrive { 142 | display: block; 143 | padding-top: 24px; 144 | line-height: 1.5; 145 | } 146 | .fs0 { 147 | font-size: 16px; 148 | } 149 | .fs1 { 150 | font-size: 28px; 151 | } 152 | .fs2 { 153 | font-size: 24px; 154 | } 155 | 156 | -------------------------------------------------------------------------------- /scss/_site-base.scss: -------------------------------------------------------------------------------- 1 | 2 | html { 3 | overflow-x: hidden; 4 | } 5 | body { 6 | font-family: $font-family; 7 | line-height: 1.8; 8 | font-size: 15px; 9 | color: #7a7a7a; 10 | background: #fff; 11 | overflow-x: hidden; 12 | &:before { 13 | content: ""; 14 | position: absolute; 15 | top: 0; 16 | left: 0; 17 | z-index: 99; 18 | right: 0; 19 | bottom: 0; 20 | background:rgba($black, .2); 21 | opacity: 0; 22 | visibility: hidden; 23 | transition: .3s all ease; 24 | } 25 | &.offcanvas-menu { 26 | &:before { 27 | opacity: 1; 28 | visibility: visible; 29 | } 30 | } 31 | } 32 | a { 33 | color: $primary; 34 | transition: .3s all ease; 35 | &:hover { 36 | color: $primary; 37 | text-decoration: none; 38 | } 39 | } 40 | h1, h2, h3, h4, h5 { 41 | color: $heading_color; 42 | } 43 | .text-primary { 44 | color: $primary!important; 45 | } 46 | 47 | .text-black { 48 | color: $black!important; 49 | } 50 | a.text-primary { 51 | color: $primary!important; 52 | &:hover { 53 | color: $primary!important; 54 | } 55 | } 56 | .bg-primary { 57 | background-color: $primary!important; 58 | } 59 | 60 | h1, .h1, h2, .h2, h3, .h3, h4, .h4 { 61 | font-family: $font-family; 62 | } 63 | 64 | 65 | .btn { 66 | padding-top: 12px; 67 | padding-bottom: 12px; 68 | padding-left: 30px; 69 | padding-right: 30px; 70 | border-radius: 4px; 71 | font-size: 14px; 72 | &:active, &:focus { 73 | outline: none; 74 | box-shadow: none; 75 | } 76 | &.btn-primary { 77 | background: $primary; 78 | border-color: $primary; 79 | &:hover { 80 | border-color: lighten($primary, 4%); 81 | background: lighten($primary, 4%); 82 | } 83 | } 84 | &.btn-white { 85 | background-color: $white; 86 | &:hover { 87 | background-color: transparent; 88 | border-color: $white; 89 | color: $white; 90 | } 91 | } 92 | &.btn-outline-white { 93 | border: 1px solid $white; 94 | &:hover { 95 | background: $white; 96 | color: $primary!important; 97 | } 98 | } 99 | 100 | &.btn-outline-black { 101 | border: 1px solid rgba($black, .1); 102 | &:hover { 103 | background: transparent; 104 | color: $primary!important; 105 | } 106 | } 107 | 108 | } 109 | 110 | .form-control, .custom-select { 111 | border: 2px solid darken($light, 5%); 112 | font-size: 16px; 113 | height: 45px; 114 | &:active, &:focus { 115 | border-color: $primary; 116 | box-shadow: none; 117 | } 118 | } 119 | 120 | .gutter-v1 { 121 | margin-right: -20px; 122 | margin-left: -20px; 123 | @include media-breakpoint-down(md) { 124 | margin-left: -15px; 125 | margin-right: -15px; 126 | } 127 | > .col, 128 | > [class*="col-"] { 129 | padding-right: 20px; 130 | padding-left: 20px; 131 | @include media-breakpoint-down(md) { 132 | padding-right: 15px; 133 | padding-left: 15px; 134 | } 135 | } 136 | } 137 | 138 | .spinner-border { 139 | color: $primary; 140 | } 141 | /*PRELOADING------------ */ 142 | #overlayer { 143 | width:100%; 144 | height:100%; 145 | position:fixed; 146 | z-index:7100; 147 | background: $white; 148 | top: 0; 149 | left: 0; 150 | right: 0; 151 | bottom: 0; 152 | } 153 | 154 | .loader { 155 | z-index:7700; 156 | position: fixed; 157 | top: 50%; 158 | left: 50%; 159 | transform: translate(-50%, -50%); 160 | } 161 | .position-relative { 162 | position: relative; 163 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 🚀 Apex Service Website Template 2 | 3 | Welcome to Apex, a sleek and professional service website template designed to elevate your online presence. This README provides essential information about the template, its features, and how to utilize it effectively. 4 | 5 | ## 🌟 Overview 6 | 7 | **Apex** is a versatile and customizable website template tailored for service-based businesses, agencies, freelancers, and professionals who want to showcase their services, portfolio, and expertise in a modern and engaging manner. With its clean design, smooth animations, and responsive layout, Apex ensures an optimal viewing experience across various devices and screen sizes. 8 | 9 | ## ✨ Features 10 | 11 | - **Responsive Design**: Ensure your website looks great on desktops, tablets, and mobile devices. 12 | - **Clean and Modern**: A minimalistic design with a focus on content and user experience. 13 | - **Easy Customization**: Customize colors, fonts, content, and images to match your brand identity. 14 | - **Service Sections**: Clearly highlight your services with dedicated sections and descriptions. 15 | - **Portfolio Showcase**: Showcase your projects or portfolio with image galleries and descriptions. 16 | - **Client Testimonials**: Build trust and credibility with client testimonials and reviews. 17 | - **Contact Form**: Allow visitors to easily get in touch with you through a contact form. 18 | - **Smooth Animations**: Enhance user experience with subtle animations and transitions. 19 | 20 | ## 🛠️ Usage 21 | 22 | To use the Apex service website template, simply follow these steps: 23 | 24 | 1. **Download**: Download the template files from the [GitHub repository](https://github.com/krypto-etox/service-website-template). 25 | 26 | 2. **Customize Content**: Replace placeholder content with your own text, images, and information. Customize colors, fonts, and styles to match your branding. 27 | 28 | 3. **Service Sections**: Modify the service sections to reflect the services you offer. Provide detailed descriptions and any relevant information. 29 | 30 | 4. **Portfolio Showcase**: Populate the portfolio section with images and descriptions of your projects or work samples. 31 | 32 | 5. **Client Testimonials**: Add client testimonials to build credibility and trust. Include client names and their feedback. 33 | 34 | 6. **Contact Form Integration**: Configure the contact form to send inquiries to your preferred email address. Make sure to test the form to ensure proper functionality. 35 | 36 | 7. **Deploy**: Once you've customized the template to your satisfaction, deploy it to your web hosting provider or use GitHub Pages for hosting. 37 | 38 | 8. **Maintenance**: Periodically update content, portfolio items, and testimonials to keep your website fresh and relevant. 39 | 40 | ## 📞 Support and Feedback 41 | 42 | If you have any questions, feedback, or need assistance with the Apex service website template, feel free to reach out to the template author through the GitHub repository's [issue tracker](https://github.com/krypto-etox/service-website-template/issues). 43 | 44 | ## 🙌 Credits 45 | 46 | - **Author**: [Krypto Etox](https://github.com/krypto-etox) 47 | - **License**: MIT License 48 | 49 | ## 🚀 Demo 50 | 51 | Explore a live demo of the Apex service website template [here](https://krypto-etox.github.io/service-website-template/). 52 | 53 | ## 🤝 Contribute 54 | 55 | Contributions to improve and enhance the Apex service website template are welcome. Fork the repository, make your changes, and submit a pull request. 56 | 57 | ## 📄 License 58 | 59 | This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. 60 | -------------------------------------------------------------------------------- /scss/mixins/_buttons.scss: -------------------------------------------------------------------------------- 1 | // Button variants 2 | // 3 | // Easily pump out default styles, as well as :hover, :focus, :active, 4 | // and disabled options for all buttons 5 | 6 | @mixin button-variant($background, $border, $hover-background: darken($background, 7.5%), $hover-border: darken($border, 10%), $active-background: darken($background, 10%), $active-border: darken($border, 12.5%)) { 7 | color: color-yiq($background); 8 | @include gradient-bg($background); 9 | border-color: $border; 10 | @include box-shadow($btn-box-shadow); 11 | 12 | @include hover() { 13 | color: color-yiq($hover-background); 14 | @include gradient-bg($hover-background); 15 | border-color: $hover-border; 16 | } 17 | 18 | &:focus, 19 | &.focus { 20 | color: color-yiq($hover-background); 21 | @include gradient-bg($hover-background); 22 | border-color: $hover-border; 23 | // Avoid using mixin so we can pass custom focus shadow properly 24 | @if $enable-shadows { 25 | box-shadow: $btn-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5); 26 | } @else { 27 | box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5); 28 | } 29 | } 30 | 31 | // Disabled comes first so active can properly restyle 32 | &.disabled, 33 | &:disabled { 34 | color: color-yiq($background); 35 | background-color: $background; 36 | border-color: $border; 37 | // Remove CSS gradients if they're enabled 38 | @if $enable-gradients { 39 | background-image: none; 40 | } 41 | } 42 | 43 | &:not(:disabled):not(.disabled):active, 44 | &:not(:disabled):not(.disabled).active, 45 | .show > &.dropdown-toggle { 46 | color: color-yiq($active-background); 47 | background-color: $active-background; 48 | @if $enable-gradients { 49 | background-image: none; // Remove the gradient for the pressed/active state 50 | } 51 | border-color: $active-border; 52 | 53 | &:focus { 54 | // Avoid using mixin so we can pass custom focus shadow properly 55 | @if $enable-shadows and $btn-active-box-shadow != none { 56 | box-shadow: $btn-active-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5); 57 | } @else { 58 | box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5); 59 | } 60 | } 61 | } 62 | } 63 | 64 | @mixin button-outline-variant($color, $color-hover: color-yiq($color), $active-background: $color, $active-border: $color) { 65 | color: $color; 66 | border-color: $color; 67 | 68 | @include hover() { 69 | color: $color-hover; 70 | background-color: $active-background; 71 | border-color: $active-border; 72 | } 73 | 74 | &:focus, 75 | &.focus { 76 | box-shadow: 0 0 0 $btn-focus-width rgba($color, .5); 77 | } 78 | 79 | &.disabled, 80 | &:disabled { 81 | color: $color; 82 | background-color: transparent; 83 | } 84 | 85 | &:not(:disabled):not(.disabled):active, 86 | &:not(:disabled):not(.disabled).active, 87 | .show > &.dropdown-toggle { 88 | color: color-yiq($active-background); 89 | background-color: $active-background; 90 | border-color: $active-border; 91 | 92 | &:focus { 93 | // Avoid using mixin so we can pass custom focus shadow properly 94 | @if $enable-shadows and $btn-active-box-shadow != none { 95 | box-shadow: $btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($color, .5); 96 | } @else { 97 | box-shadow: 0 0 0 $btn-focus-width rgba($color, .5); 98 | } 99 | } 100 | } 101 | } 102 | 103 | // Button sizes 104 | @mixin button-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) { 105 | padding: $padding-y $padding-x; 106 | @include font-size($font-size); 107 | line-height: $line-height; 108 | // Manually declare to provide an override to the browser default 109 | @include border-radius($border-radius, 0); 110 | } 111 | -------------------------------------------------------------------------------- /scss/_functions.scss: -------------------------------------------------------------------------------- 1 | // Bootstrap functions 2 | // 3 | // Utility mixins and functions for evaluating source code across our variables, maps, and mixins. 4 | 5 | // Ascending 6 | // Used to evaluate Sass maps like our grid breakpoints. 7 | @mixin _assert-ascending($map, $map-name) { 8 | $prev-key: null; 9 | $prev-num: null; 10 | @each $key, $num in $map { 11 | @if $prev-num == null or unit($num) == "%" or unit($prev-num) == "%" { 12 | // Do nothing 13 | } @else if not comparable($prev-num, $num) { 14 | @warn "Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !"; 15 | } @else if $prev-num >= $num { 16 | @warn "Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !"; 17 | } 18 | $prev-key: $key; 19 | $prev-num: $num; 20 | } 21 | } 22 | 23 | // Starts at zero 24 | // Used to ensure the min-width of the lowest breakpoint starts at 0. 25 | @mixin _assert-starts-at-zero($map, $map-name: "$grid-breakpoints") { 26 | $values: map-values($map); 27 | $first-value: nth($values, 1); 28 | @if $first-value != 0 { 29 | @warn "First breakpoint in #{$map-name} must start at 0, but starts at #{$first-value}."; 30 | } 31 | } 32 | 33 | // Replace `$search` with `$replace` in `$string` 34 | // Used on our SVG icon backgrounds for custom forms. 35 | // 36 | // @author Hugo Giraudel 37 | // @param {String} $string - Initial string 38 | // @param {String} $search - Substring to replace 39 | // @param {String} $replace ('') - New value 40 | // @return {String} - Updated string 41 | @function str-replace($string, $search, $replace: "") { 42 | $index: str-index($string, $search); 43 | 44 | @if $index { 45 | @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace); 46 | } 47 | 48 | @return $string; 49 | } 50 | 51 | // See https://codepen.io/kevinweber/pen/dXWoRw 52 | @function escape-svg($string) { 53 | @if str-index($string, "data:image/svg+xml") { 54 | @each $char, $encoded in $escaped-characters { 55 | $string: str-replace($string, $char, $encoded); 56 | } 57 | } 58 | 59 | @return $string; 60 | } 61 | 62 | // Color contrast 63 | @function color-yiq($color, $dark: $yiq-text-dark, $light: $yiq-text-light) { 64 | $r: red($color); 65 | $g: green($color); 66 | $b: blue($color); 67 | 68 | $yiq: (($r * 299) + ($g * 587) + ($b * 114)) / 1000; 69 | 70 | @if ($yiq >= $yiq-contrasted-threshold) { 71 | @return $dark; 72 | } @else { 73 | @return $light; 74 | } 75 | } 76 | 77 | // Retrieve color Sass maps 78 | @function color($key: "blue") { 79 | @return map-get($colors, $key); 80 | } 81 | 82 | @function theme-color($key: "primary") { 83 | @return map-get($theme-colors, $key); 84 | } 85 | 86 | @function gray($key: "100") { 87 | @return map-get($grays, $key); 88 | } 89 | 90 | // Request a theme color level 91 | @function theme-color-level($color-name: "primary", $level: 0) { 92 | $color: theme-color($color-name); 93 | $color-base: if($level > 0, $black, $white); 94 | $level: abs($level); 95 | 96 | @return mix($color-base, $color, $level * $theme-color-interval); 97 | } 98 | 99 | // Return valid calc 100 | @function add($value1, $value2, $return-calc: true) { 101 | @if $value1 == null { 102 | @return $value2; 103 | } 104 | 105 | @if $value2 == null { 106 | @return $value1; 107 | } 108 | 109 | @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) { 110 | @return $value1 + $value2; 111 | } 112 | 113 | @return if($return-calc == true, calc(#{$value1} + #{$value2}), $value1 + unquote(" + ") + $value2); 114 | } 115 | 116 | @function subtract($value1, $value2, $return-calc: true) { 117 | @if $value1 == null and $value2 == null { 118 | @return null; 119 | } 120 | 121 | @if $value1 == null { 122 | @return -$value2; 123 | } 124 | 125 | @if $value2 == null { 126 | @return $value1; 127 | } 128 | 129 | @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) { 130 | @return $value1 - $value2; 131 | } 132 | 133 | @return if($return-calc == true, calc(#{$value1} - #{$value2}), $value1 + unquote(" - ") + $value2); 134 | } 135 | -------------------------------------------------------------------------------- /scss/mixins/_breakpoints.scss: -------------------------------------------------------------------------------- 1 | // Breakpoint viewport sizes and media queries. 2 | // 3 | // Breakpoints are defined as a map of (name: minimum width), order from small to large: 4 | // 5 | // (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px) 6 | // 7 | // The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default. 8 | 9 | // Name of the next breakpoint, or null for the last breakpoint. 10 | // 11 | // >> breakpoint-next(sm) 12 | // md 13 | // >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)) 14 | // md 15 | // >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl)) 16 | // md 17 | @function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) { 18 | $n: index($breakpoint-names, $name); 19 | @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null); 20 | } 21 | 22 | // Minimum breakpoint width. Null for the smallest (first) breakpoint. 23 | // 24 | // >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)) 25 | // 576px 26 | @function breakpoint-min($name, $breakpoints: $grid-breakpoints) { 27 | $min: map-get($breakpoints, $name); 28 | @return if($min != 0, $min, null); 29 | } 30 | 31 | // Maximum breakpoint width. Null for the largest (last) breakpoint. 32 | // The maximum value is calculated as the minimum of the next one less 0.02px 33 | // to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths. 34 | // See https://www.w3.org/TR/mediaqueries-4/#mq-min-max 35 | // Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari. 36 | // See https://bugs.webkit.org/show_bug.cgi?id=178261 37 | // 38 | // >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)) 39 | // 767.98px 40 | @function breakpoint-max($name, $breakpoints: $grid-breakpoints) { 41 | $next: breakpoint-next($name, $breakpoints); 42 | @return if($next, breakpoint-min($next, $breakpoints) - .02, null); 43 | } 44 | 45 | // Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front. 46 | // Useful for making responsive utilities. 47 | // 48 | // >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)) 49 | // "" (Returns a blank string) 50 | // >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)) 51 | // "-sm" 52 | @function breakpoint-infix($name, $breakpoints: $grid-breakpoints) { 53 | @return if(breakpoint-min($name, $breakpoints) == null, "", "-#{$name}"); 54 | } 55 | 56 | // Media of at least the minimum breakpoint width. No query for the smallest breakpoint. 57 | // Makes the @content apply to the given breakpoint and wider. 58 | @mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) { 59 | $min: breakpoint-min($name, $breakpoints); 60 | @if $min { 61 | @media (min-width: $min) { 62 | @content; 63 | } 64 | } @else { 65 | @content; 66 | } 67 | } 68 | 69 | // Media of at most the maximum breakpoint width. No query for the largest breakpoint. 70 | // Makes the @content apply to the given breakpoint and narrower. 71 | @mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) { 72 | $max: breakpoint-max($name, $breakpoints); 73 | @if $max { 74 | @media (max-width: $max) { 75 | @content; 76 | } 77 | } @else { 78 | @content; 79 | } 80 | } 81 | 82 | // Media that spans multiple breakpoint widths. 83 | // Makes the @content apply between the min and max breakpoints 84 | @mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) { 85 | $min: breakpoint-min($lower, $breakpoints); 86 | $max: breakpoint-max($upper, $breakpoints); 87 | 88 | @if $min != null and $max != null { 89 | @media (min-width: $min) and (max-width: $max) { 90 | @content; 91 | } 92 | } @else if $max == null { 93 | @include media-breakpoint-up($lower, $breakpoints) { 94 | @content; 95 | } 96 | } @else if $min == null { 97 | @include media-breakpoint-down($upper, $breakpoints) { 98 | @content; 99 | } 100 | } 101 | } 102 | 103 | // Media between the breakpoint's minimum and maximum widths. 104 | // No minimum for the smallest breakpoint, and no maximum for the largest one. 105 | // Makes the @content apply only to the given breakpoint, not viewports any wider or narrower. 106 | @mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) { 107 | $min: breakpoint-min($name, $breakpoints); 108 | $max: breakpoint-max($name, $breakpoints); 109 | 110 | @if $min != null and $max != null { 111 | @media (min-width: $min) and (max-width: $max) { 112 | @content; 113 | } 114 | } @else if $max == null { 115 | @include media-breakpoint-up($name, $breakpoints) { 116 | @content; 117 | } 118 | } @else if $min == null { 119 | @include media-breakpoint-down($name, $breakpoints) { 120 | @content; 121 | } 122 | } 123 | } 124 | -------------------------------------------------------------------------------- /scss/mixins/_forms.scss: -------------------------------------------------------------------------------- 1 | // Form control focus state 2 | // 3 | // Generate a customized focus state and for any input with the specified color, 4 | // which defaults to the `$input-focus-border-color` variable. 5 | // 6 | // We highly encourage you to not customize the default value, but instead use 7 | // this to tweak colors on an as-needed basis. This aesthetic change is based on 8 | // WebKit's default styles, but applicable to a wider range of browsers. Its 9 | // usability and accessibility should be taken into account with any change. 10 | // 11 | // Example usage: change the default blue border and shadow to white for better 12 | // contrast against a dark gray background. 13 | @mixin form-control-focus($ignore-warning: false) { 14 | &:focus { 15 | color: $input-focus-color; 16 | background-color: $input-focus-bg; 17 | border-color: $input-focus-border-color; 18 | outline: 0; 19 | // Avoid using mixin so we can pass custom focus shadow properly 20 | @if $enable-shadows { 21 | box-shadow: $input-box-shadow, $input-focus-box-shadow; 22 | } @else { 23 | box-shadow: $input-focus-box-shadow; 24 | } 25 | } 26 | @include deprecate("The `form-control-focus()` mixin", "v4.4.0", "v5", $ignore-warning); 27 | } 28 | 29 | // This mixin uses an `if()` technique to be compatible with Dart Sass 30 | // See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details 31 | @mixin form-validation-state-selector($state) { 32 | @if ($state == "valid" or $state == "invalid") { 33 | .was-validated #{if(&, "&", "")}:#{$state}, 34 | #{if(&, "&", "")}.is-#{$state} { 35 | @content; 36 | } 37 | } @else { 38 | #{if(&, "&", "")}.is-#{$state} { 39 | @content; 40 | } 41 | } 42 | } 43 | 44 | @mixin form-validation-state($state, $color, $icon) { 45 | .#{$state}-feedback { 46 | display: none; 47 | width: 100%; 48 | margin-top: $form-feedback-margin-top; 49 | @include font-size($form-feedback-font-size); 50 | color: $color; 51 | } 52 | 53 | .#{$state}-tooltip { 54 | position: absolute; 55 | top: 100%; 56 | z-index: 5; 57 | display: none; 58 | max-width: 100%; // Contain to parent when possible 59 | padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x; 60 | margin-top: .1rem; 61 | @include font-size($form-feedback-tooltip-font-size); 62 | line-height: $form-feedback-tooltip-line-height; 63 | color: color-yiq($color); 64 | background-color: rgba($color, $form-feedback-tooltip-opacity); 65 | @include border-radius($form-feedback-tooltip-border-radius); 66 | } 67 | 68 | @include form-validation-state-selector($state) { 69 | ~ .#{$state}-feedback, 70 | ~ .#{$state}-tooltip { 71 | display: block; 72 | } 73 | } 74 | 75 | .form-control { 76 | @include form-validation-state-selector($state) { 77 | border-color: $color; 78 | 79 | @if $enable-validation-icons { 80 | padding-right: $input-height-inner; 81 | background-image: escape-svg($icon); 82 | background-repeat: no-repeat; 83 | background-position: right $input-height-inner-quarter center; 84 | background-size: $input-height-inner-half $input-height-inner-half; 85 | } 86 | 87 | &:focus { 88 | border-color: $color; 89 | box-shadow: 0 0 0 $input-focus-width rgba($color, .25); 90 | } 91 | } 92 | } 93 | 94 | // stylelint-disable-next-line selector-no-qualifying-type 95 | textarea.form-control { 96 | @include form-validation-state-selector($state) { 97 | @if $enable-validation-icons { 98 | padding-right: $input-height-inner; 99 | background-position: top $input-height-inner-quarter right $input-height-inner-quarter; 100 | } 101 | } 102 | } 103 | 104 | .custom-select { 105 | @include form-validation-state-selector($state) { 106 | border-color: $color; 107 | 108 | @if $enable-validation-icons { 109 | padding-right: $custom-select-feedback-icon-padding-right; 110 | background: $custom-select-background, escape-svg($icon) $custom-select-bg no-repeat $custom-select-feedback-icon-position / $custom-select-feedback-icon-size; 111 | } 112 | 113 | &:focus { 114 | border-color: $color; 115 | box-shadow: 0 0 0 $input-focus-width rgba($color, .25); 116 | } 117 | } 118 | } 119 | 120 | .form-check-input { 121 | @include form-validation-state-selector($state) { 122 | ~ .form-check-label { 123 | color: $color; 124 | } 125 | 126 | ~ .#{$state}-feedback, 127 | ~ .#{$state}-tooltip { 128 | display: block; 129 | } 130 | } 131 | } 132 | 133 | .custom-control-input { 134 | @include form-validation-state-selector($state) { 135 | ~ .custom-control-label { 136 | color: $color; 137 | 138 | &::before { 139 | border-color: $color; 140 | } 141 | } 142 | 143 | &:checked { 144 | ~ .custom-control-label::before { 145 | border-color: lighten($color, 10%); 146 | @include gradient-bg(lighten($color, 10%)); 147 | } 148 | } 149 | 150 | &:focus { 151 | ~ .custom-control-label::before { 152 | box-shadow: 0 0 0 $input-focus-width rgba($color, .25); 153 | } 154 | 155 | &:not(:checked) ~ .custom-control-label::before { 156 | border-color: $color; 157 | } 158 | } 159 | } 160 | } 161 | 162 | // custom file 163 | .custom-file-input { 164 | @include form-validation-state-selector($state) { 165 | ~ .custom-file-label { 166 | border-color: $color; 167 | } 168 | 169 | &:focus { 170 | ~ .custom-file-label { 171 | border-color: $color; 172 | box-shadow: 0 0 0 $input-focus-width rgba($color, .25); 173 | } 174 | } 175 | } 176 | } 177 | } 178 | -------------------------------------------------------------------------------- /scss/_site-elements.scss: -------------------------------------------------------------------------------- 1 | 2 | // accordion 3 | .custom-accordion { 4 | .accordion-item { 5 | background-color: lighten(#efefef, 4%); 6 | margin-bottom: 0px; 7 | position: relative; 8 | border-radius: 0px; 9 | overflow: hidden; 10 | .btn-link { 11 | display: block; 12 | width: 100%; 13 | padding: 15px 0; 14 | text-decoration: none; 15 | text-align: left; 16 | color: #999; 17 | border: none; 18 | padding-left: 40px; 19 | border-radius: 0; 20 | position: relative; 21 | background: $white; 22 | &:before { 23 | font-family: 'icomoon'; 24 | content: "\f196"; 25 | position: absolute; 26 | top: 50%; 27 | transform: translateY(-50%); 28 | left: 15px; 29 | } 30 | &[aria-expanded="true"] { 31 | font-weight: 700; 32 | color: $primary; 33 | 34 | &:before { 35 | font-family: 'icomoon'; 36 | content: "\f147"; 37 | position: absolute; 38 | color: $primary; 39 | top: 50%; 40 | transform: translateY(-50%); 41 | } 42 | } 43 | 44 | 45 | 46 | } 47 | &.active { 48 | z-index: 2; 49 | .btn-link { 50 | color: $primary; 51 | box-shadow: 0 1px 10px 0 rgba($black, .1); 52 | } 53 | } 54 | 55 | .accordion-body { 56 | padding: 20px 20px 20px 20px; 57 | color: #888; 58 | } 59 | 60 | } 61 | } 62 | 63 | 64 | //checkbox 65 | .control { 66 | display: block; 67 | position: relative; 68 | padding-left: 30px; 69 | margin-bottom: 15px; 70 | cursor: pointer; 71 | font-size: 18px; 72 | 73 | .caption { 74 | position: relative; 75 | top: -3px; 76 | font-size: 16px; 77 | } 78 | } 79 | .control input { 80 | position: absolute; 81 | z-index: -1; 82 | opacity: 0; 83 | } 84 | .control__indicator { 85 | position: absolute; 86 | top: 2px; 87 | left: 0; 88 | height: 20px; 89 | width: 20px; 90 | background: #e6e6e6; 91 | border-radius: 4px; 92 | } 93 | .control--radio .control__indicator { 94 | border-radius: 50%; 95 | } 96 | .control:hover input ~ .control__indicator, 97 | .control input:focus ~ .control__indicator { 98 | background: #ccc; 99 | } 100 | .control input:checked ~ .control__indicator { 101 | background: $primary; 102 | } 103 | .control:hover input:not([disabled]):checked ~ .control__indicator, 104 | .control input:checked:focus ~ .control__indicator { 105 | background: lighten($primary, 5%); 106 | } 107 | .control input:disabled ~ .control__indicator { 108 | background: #e6e6e6; 109 | opacity: 0.9; 110 | pointer-events: none; 111 | } 112 | .control__indicator:after { 113 | font-family: 'icomoon'; 114 | content: '\e5ca'; 115 | position: absolute; 116 | display: none; 117 | font-size: 14px; 118 | transition: .3s all ease; 119 | } 120 | .control input:checked ~ .control__indicator:after { 121 | display: block; 122 | color: #fff; 123 | } 124 | .control--checkbox .control__indicator:after { 125 | top: 50%; 126 | left: 50%; 127 | transform: translate(-50%, -50%); 128 | } 129 | .control--checkbox input:disabled ~ .control__indicator:after { 130 | border-color: #7b7b7b; 131 | } 132 | .control--checkbox input:disabled:checked ~ .control__indicator { 133 | background-color: $primary; 134 | opacity: .2; 135 | } 136 | 137 | 138 | // gallery 139 | .gal-item { 140 | display: block; 141 | margin-bottom: 8px; 142 | img { 143 | border-radius: 4px; 144 | transition: .3s all ease; 145 | opacity: 1; 146 | } 147 | &:hover { 148 | img { 149 | opacity: .5; 150 | } 151 | } 152 | } 153 | 154 | // social 155 | .social-icons { 156 | li { 157 | display: inline-block; 158 | a { 159 | color: rgba($white, .5%); 160 | display: inline-block; 161 | width: 40px; 162 | height: 40px; 163 | position: relative; 164 | border-radius: 50%; 165 | background: #303030; 166 | span { 167 | position: absolute; 168 | top: 50%; 169 | left: 50%; 170 | transform: translate(-50%, -50%); 171 | } 172 | &:hover { 173 | color: $white; 174 | } 175 | } 176 | &:first-child { 177 | a { 178 | padding-left: 0; 179 | } 180 | } 181 | } 182 | &.light { 183 | li { 184 | a { 185 | color: $black; 186 | display: inline-block; 187 | width: 40px; 188 | height: 40px; 189 | position: relative; 190 | border-radius: 50%; 191 | background: $light; 192 | } 193 | } 194 | } 195 | } 196 | 197 | // video 198 | .video-wrap { 199 | position: relative; 200 | .play-wrap { 201 | position: absolute; 202 | top: 50%; 203 | left: 50%; 204 | transform: translate(-50%, -50%); 205 | width: 50px; 206 | height: 50px; 207 | background: rgba($black, .05); 208 | border-radius: 50%; 209 | transition: .3s all ease; 210 | > span { 211 | position: absolute; 212 | top: 50%; 213 | left: 50%; 214 | transform: translate(-50%, -50%); 215 | } 216 | } 217 | &:hover { 218 | .play-wrap { 219 | width: 60px; 220 | height: 60px; 221 | } 222 | } 223 | } 224 | 225 | // testimonial 226 | .owl-single { 227 | &.dots-absolute { 228 | .owl-dots { 229 | bottom: 40px; 230 | .owl-dot { 231 | span { 232 | background: rgba($white, .5); 233 | } 234 | } 235 | } 236 | } 237 | .owl-dots { 238 | text-align: center; 239 | position: absolute; 240 | width: 100%; 241 | 242 | .owl-dot { 243 | display: inline-block; 244 | margin: 5px; 245 | span { 246 | display: inline-block; 247 | width: 8px; 248 | height: 8px; 249 | border-radius: 50%; 250 | background: rgba($black, .2); 251 | } 252 | &.active { 253 | span { 254 | background: $primary; 255 | } 256 | } 257 | } 258 | } 259 | } 260 | .testimonial { 261 | max-width: 500px; 262 | text-align: center; 263 | margin-bottom: 30px; 264 | .name { 265 | font-size: 18px; 266 | color: $black; 267 | } 268 | .img-wrap { 269 | img { 270 | margin: 0 auto; 271 | width: 70px; 272 | border-radius: 50%; 273 | } 274 | } 275 | } 276 | 277 | 278 | .list-check { 279 | li { 280 | display: block; 281 | padding-left: 30px; 282 | position: relative; 283 | &:before { 284 | content: "\e5ca"; 285 | font-family: 'icomoon'; 286 | position: absolute; 287 | top: -.3rem; 288 | font-size: 20px; 289 | left: 0; 290 | } 291 | } 292 | &.primary { 293 | li { 294 | &:before { 295 | color: $primary; 296 | } 297 | } 298 | } 299 | } 300 | -------------------------------------------------------------------------------- /js/jquery-migrate-3.0.0.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery Migrate v3.0.0 | (c) jQuery Foundation and other contributors | jquery.org/license */ 2 | "undefined"==typeof jQuery.migrateMute&&(jQuery.migrateMute=!0),function(a,b){"use strict";function c(c){var d=b.console;e[c]||(e[c]=!0,a.migrateWarnings.push(c),d&&d.warn&&!a.migrateMute&&(d.warn("JQMIGRATE: "+c),a.migrateTrace&&d.trace&&d.trace()))}function d(a,b,d,e){Object.defineProperty(a,b,{configurable:!0,enumerable:!0,get:function(){return c(e),d}})}a.migrateVersion="3.0.0",function(){var c=b.console&&b.console.log&&function(){b.console.log.apply(b.console,arguments)},d=/^[12]\./;c&&(a&&!d.test(a.fn.jquery)||c("JQMIGRATE: jQuery 3.0.0+ REQUIRED"),a.migrateWarnings&&c("JQMIGRATE: Migrate plugin loaded multiple times"),c("JQMIGRATE: Migrate is installed"+(a.migrateMute?"":" with logging active")+", version "+a.migrateVersion))}();var e={};a.migrateWarnings=[],void 0===a.migrateTrace&&(a.migrateTrace=!0),a.migrateReset=function(){e={},a.migrateWarnings.length=0},"BackCompat"===document.compatMode&&c("jQuery is not compatible with Quirks Mode");var f=a.fn.init,g=a.isNumeric,h=a.find,i=/\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/,j=/\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/g;a.fn.init=function(a){var b=Array.prototype.slice.call(arguments);return"string"==typeof a&&"#"===a&&(c("jQuery( '#' ) is not a valid selector"),b[0]=[]),f.apply(this,b)},a.fn.init.prototype=a.fn,a.find=function(a){var b=Array.prototype.slice.call(arguments);if("string"==typeof a&&i.test(a))try{document.querySelector(a)}catch(d){a=a.replace(j,function(a,b,c,d){return"["+b+c+'"'+d+'"]'});try{document.querySelector(a),c("Attribute selector with '#' must be quoted: "+b[0]),b[0]=a}catch(e){c("Attribute selector with '#' was not fixed: "+b[0])}}return h.apply(this,b)};var k;for(k in h)Object.prototype.hasOwnProperty.call(h,k)&&(a.find[k]=h[k]);a.fn.size=function(){return c("jQuery.fn.size() is deprecated; use the .length property"),this.length},a.parseJSON=function(){return c("jQuery.parseJSON is deprecated; use JSON.parse"),JSON.parse.apply(null,arguments)},a.isNumeric=function(b){function d(b){var c=b&&b.toString();return!a.isArray(b)&&c-parseFloat(c)+1>=0}var e=g(b),f=d(b);return e!==f&&c("jQuery.isNumeric() should not be called on constructed objects"),f},d(a,"unique",a.uniqueSort,"jQuery.unique is deprecated, use jQuery.uniqueSort"),d(a.expr,"filters",a.expr.pseudos,"jQuery.expr.filters is now jQuery.expr.pseudos"),d(a.expr,":",a.expr.pseudos,'jQuery.expr[":"] is now jQuery.expr.pseudos');var l=a.ajax;a.ajax=function(){var a=l.apply(this,arguments);return a.promise&&(d(a,"success",a.done,"jQXHR.success is deprecated and removed"),d(a,"error",a.fail,"jQXHR.error is deprecated and removed"),d(a,"complete",a.always,"jQXHR.complete is deprecated and removed")),a};var m=a.fn.removeAttr,n=a.fn.toggleClass,o=/\S+/g;a.fn.removeAttr=function(b){var d=this;return a.each(b.match(o),function(b,e){a.expr.match.bool.test(e)&&(c("jQuery.fn.removeAttr no longer sets boolean properties: "+e),d.prop(e,!1))}),m.apply(this,arguments)},a.fn.toggleClass=function(b){return void 0!==b&&"boolean"!=typeof b?n.apply(this,arguments):(c("jQuery.fn.toggleClass( boolean ) is deprecated"),this.each(function(){var c=this.getAttribute&&this.getAttribute("class")||"";c&&a.data(this,"__className__",c),this.setAttribute&&this.setAttribute("class",c||b===!1?"":a.data(this,"__className__")||"")}))};var p=!1;a.swap&&a.each(["height","width","reliableMarginRight"],function(b,c){var d=a.cssHooks[c]&&a.cssHooks[c].get;d&&(a.cssHooks[c].get=function(){var a;return p=!0,a=d.apply(this,arguments),p=!1,a})}),a.swap=function(a,b,d,e){var f,g,h={};p||c("jQuery.swap() is undocumented and deprecated");for(g in b)h[g]=a.style[g],a.style[g]=b[g];f=d.apply(a,e||[]);for(g in b)a.style[g]=h[g];return f};var q=a.data;a.data=function(b,d,e){var f;return d&&d!==a.camelCase(d)&&(f=a.hasData(b)&&q.call(this,b),f&&d in f)?(c("jQuery.data() always sets/gets camelCased names: "+d),arguments.length>2&&(f[d]=e),f[d]):q.apply(this,arguments)};var r=a.Tween.prototype.run;a.Tween.prototype.run=function(b){a.easing[this.easing].length>1&&(c('easing function "jQuery.easing.'+this.easing.toString()+'" should use only first argument'),a.easing[this.easing]=a.easing[this.easing].bind(a.easing,b,this.options.duration*b,0,1,this.options.duration)),r.apply(this,arguments)};var s=a.fn.load,t=a.event.fix;a.event.props=[],a.event.fixHooks={},a.event.fix=function(b){var d,e=b.type,f=this.fixHooks[e],g=a.event.props;if(g.length)for(c("jQuery.event.props are deprecated and removed: "+g.join());g.length;)a.event.addProp(g.pop());if(f&&!f._migrated_&&(f._migrated_=!0,c("jQuery.event.fixHooks are deprecated and removed: "+e),(g=f.props)&&g.length))for(;g.length;)a.event.addProp(g.pop());return d=t.call(this,b),f&&f.filter?f.filter(d,b):d},a.each(["load","unload","error"],function(b,d){a.fn[d]=function(){var a=Array.prototype.slice.call(arguments,0);return"load"===d&&"string"==typeof a[0]?s.apply(this,a):(c("jQuery.fn."+d+"() is deprecated"),a.splice(0,0,d),arguments.length?this.on.apply(this,a):(this.triggerHandler.apply(this,a),this))}}),a(function(){a(document).triggerHandler("ready")}),a.event.special.ready={setup:function(){this===document&&c("'ready' event is deprecated")}},a.fn.extend({bind:function(a,b,d){return c("jQuery.fn.bind() is deprecated"),this.on(a,null,b,d)},unbind:function(a,b){return c("jQuery.fn.unbind() is deprecated"),this.off(a,null,b)},delegate:function(a,b,d,e){return c("jQuery.fn.delegate() is deprecated"),this.on(b,a,d,e)},undelegate:function(a,b,d){return c("jQuery.fn.undelegate() is deprecated"),1===arguments.length?this.off(a,"**"):this.off(b,a||"**",d)}});var u=a.fn.offset;a.fn.offset=function(){var b,d=this[0],e={top:0,left:0};return d&&d.nodeType?(b=(d.ownerDocument||document).documentElement,a.contains(b,d)?u.apply(this,arguments):(c("jQuery.fn.offset() requires an element connected to a document"),e)):(c("jQuery.fn.offset() requires a valid DOM element"),e)};var v=a.param;a.param=function(b,d){var e=a.ajaxSettings&&a.ajaxSettings.traditional;return void 0===d&&e&&(c("jQuery.param() no longer uses jQuery.ajaxSettings.traditional"),d=e),v.call(this,b,d)};var w=a.fn.andSelf||a.fn.addBack;a.fn.andSelf=function(){return c("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()"),w.apply(this,arguments)};var x=a.Deferred,y=[["resolve","done",a.Callbacks("once memory"),a.Callbacks("once memory"),"resolved"],["reject","fail",a.Callbacks("once memory"),a.Callbacks("once memory"),"rejected"],["notify","progress",a.Callbacks("memory"),a.Callbacks("memory")]];a.Deferred=function(b){var d=x(),e=d.promise();return d.pipe=e.pipe=function(){var b=arguments;return c("deferred.pipe() is deprecated"),a.Deferred(function(c){a.each(y,function(f,g){var h=a.isFunction(b[f])&&b[f];d[g[1]](function(){var b=h&&h.apply(this,arguments);b&&a.isFunction(b.promise)?b.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[g[0]+"With"](this===e?c.promise():this,h?[b]:arguments)})}),b=null}).promise()},b&&b.call(d,d),d}}(jQuery,window); -------------------------------------------------------------------------------- /images/undraw_snap_the_moment_re_88cu.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /js/custom.js: -------------------------------------------------------------------------------- 1 | AOS.init({ 2 | duration: 800, 3 | easing: 'slide', 4 | once: true 5 | }); 6 | 7 | $(function(){ 8 | 9 | 'use strict'; 10 | 11 | $(".loader").delay(0).fadeOut("slow"); 12 | $("#overlayer").delay(0).fadeOut("slow"); 13 | 14 | var siteMenuClone = function() { 15 | 16 | $('.js-clone-nav').each(function() { 17 | var $this = $(this); 18 | $this.clone().attr('class', 'site-nav-wrap').appendTo('.site-mobile-menu-body'); 19 | }); 20 | 21 | 22 | setTimeout(function() { 23 | 24 | var counter = 0; 25 | $('.site-mobile-menu .has-children').each(function(){ 26 | var $this = $(this); 27 | 28 | $this.prepend(''); 29 | 30 | $this.find('.arrow-collapse').attr({ 31 | 'data-toggle' : 'collapse', 32 | 'data-target' : '#collapseItem' + counter, 33 | }); 34 | 35 | $this.find('> ul').attr({ 36 | 'class' : 'collapse', 37 | 'id' : 'collapseItem' + counter, 38 | }); 39 | 40 | counter++; 41 | 42 | }); 43 | 44 | }, 1000); 45 | 46 | $('body').on('click', '.arrow-collapse', function(e) { 47 | var $this = $(this); 48 | if ( $this.closest('li').find('.collapse').hasClass('show') ) { 49 | $this.removeClass('active'); 50 | } else { 51 | $this.addClass('active'); 52 | } 53 | e.preventDefault(); 54 | 55 | }); 56 | 57 | $(window).resize(function() { 58 | var $this = $(this), 59 | w = $this.width(); 60 | 61 | if ( w > 768 ) { 62 | if ( $('body').hasClass('offcanvas-menu') ) { 63 | $('body').removeClass('offcanvas-menu'); 64 | } 65 | } 66 | }) 67 | 68 | $('body').on('click', '.js-menu-toggle', function(e) { 69 | var $this = $(this); 70 | e.preventDefault(); 71 | 72 | if ( $('body').hasClass('offcanvas-menu') ) { 73 | $('body').removeClass('offcanvas-menu'); 74 | $('body').find('.js-menu-toggle').removeClass('active'); 75 | } else { 76 | $('body').addClass('offcanvas-menu'); 77 | $('body').find('.js-menu-toggle').addClass('active'); 78 | } 79 | }) 80 | 81 | // click outisde offcanvas 82 | $(document).mouseup(function(e) { 83 | var container = $(".site-mobile-menu"); 84 | if (!container.is(e.target) && container.has(e.target).length === 0) { 85 | if ( $('body').hasClass('offcanvas-menu') ) { 86 | $('body').removeClass('offcanvas-menu'); 87 | $('body').find('.js-menu-toggle').removeClass('active'); 88 | } 89 | } 90 | }); 91 | }; 92 | siteMenuClone(); 93 | 94 | var owlPlugin = function() { 95 | if ( $('.owl-single').length > 0 ) { 96 | var owl = $('.owl-single').owlCarousel({ 97 | loop: true, 98 | autoHeight: true, 99 | margin: 0, 100 | autoplay: true, 101 | smartSpeed: 1000, 102 | items: 1, 103 | nav: true, 104 | navText: ['',''] 105 | }); 106 | 107 | owl.on('initialized.owl.carousel', function() { 108 | owl.trigger('refresh.owl.carousel'); 109 | }); 110 | 111 | $('.custom-owl-next').click(function(e) { 112 | e.preventDefault(); 113 | owl.trigger('next.owl.carousel'); 114 | }) 115 | $('.custom-owl-prev').click(function(e) { 116 | e.preventDefault(); 117 | owl.trigger('prev.owl.carousel'); 118 | }) 119 | } 120 | 121 | 122 | if ( $('.owl-logos').length > 0 ) { 123 | var owl3 = $('.owl-logos').owlCarousel({ 124 | loop: true, 125 | autoHeight: true, 126 | margin: 10, 127 | autoplay: true, 128 | smartSpeed: 700, 129 | items: 4, 130 | stagePadding: 0, 131 | nav: true, 132 | dots: true, 133 | navText: ['',''], 134 | responsive:{ 135 | 0:{ 136 | items:1 137 | }, 138 | 600:{ 139 | items:1 140 | }, 141 | 800: { 142 | items:2 143 | }, 144 | 1000:{ 145 | items:3 146 | }, 147 | 1100:{ 148 | items:5 149 | } 150 | } 151 | }); 152 | } 153 | 154 | if ( $('.owl-3-slider').length > 0 ) { 155 | var owl3 = $('.owl-3-slider').owlCarousel({ 156 | loop: true, 157 | autoHeight: true, 158 | margin: 10, 159 | autoplay: true, 160 | smartSpeed: 700, 161 | items: 4, 162 | stagePadding: 0, 163 | nav: true, 164 | dots: true, 165 | navText: ['',''], 166 | responsive:{ 167 | 0:{ 168 | items:1 169 | }, 170 | 600:{ 171 | items:1 172 | }, 173 | 800: { 174 | items:2 175 | }, 176 | 1000:{ 177 | items:2 178 | }, 179 | 1100:{ 180 | items:3 181 | } 182 | } 183 | }); 184 | } 185 | $('.js-custom-next-v2').click(function(e) { 186 | e.preventDefault(); 187 | owl3.trigger('next.owl.carousel'); 188 | }) 189 | $('.js-custom-prev-v2').click(function(e) { 190 | e.preventDefault(); 191 | owl3.trigger('prev.owl.carousel'); 192 | }) 193 | } 194 | owlPlugin(); 195 | 196 | var counter = function() { 197 | 198 | $('.count-numbers').waypoint( function( direction ) { 199 | 200 | if( direction === 'down' && !$(this.element).hasClass('ut-animated') ) { 201 | 202 | var comma_separator_number_step = $.animateNumber.numberStepFactories.separator(',') 203 | $('.counter > span').each(function(){ 204 | var $this = $(this), 205 | num = $this.data('number'); 206 | $this.animateNumber( 207 | { 208 | number: num, 209 | numberStep: comma_separator_number_step 210 | }, 10000, 211 | function() { 212 | // $('.counter-caption').addClass('active') 213 | } 214 | ); 215 | }); 216 | 217 | } 218 | 219 | } , { offset: '95%' } ); 220 | 221 | } 222 | counter(); 223 | 224 | var portfolioMasonry = function() { 225 | $('.filters ul li').click(function(){ 226 | $('.filters ul li').removeClass('active'); 227 | $(this).addClass('active'); 228 | 229 | var data = $(this).attr('data-filter'); 230 | $grid.isotope({ 231 | filter: data 232 | }) 233 | }); 234 | 235 | 236 | if(document.getElementById("portfolio-section")){ 237 | var $grid = $(".grid").isotope({ 238 | itemSelector: ".all", 239 | percentPosition: true, 240 | masonry: { 241 | columnWidth: ".all" 242 | } 243 | }) 244 | 245 | $grid.imagesLoaded().progress( function() { 246 | $grid.isotope('layout'); 247 | }); 248 | 249 | }; 250 | 251 | 252 | }; 253 | portfolioMasonry(); 254 | 255 | $('.js-search-toggle').on('click', function() { 256 | $('.search-wrap').toggleClass('active'); 257 | 258 | setTimeout(function() { 259 | $('#s').focus(); 260 | }, 400); 261 | }) 262 | 263 | $(document).mouseup(function(e) { 264 | var container = $(".search-wrap form"); 265 | if (!container.is(e.target) && container.has(e.target).length === 0) { 266 | if ( $('.search-wrap').hasClass('active') ) { 267 | $('.search-wrap').removeClass('active'); 268 | } 269 | } 270 | }); 271 | 272 | var siteStellar = function() { 273 | $(window).stellar({ 274 | responsive: false, 275 | parallaxBackgrounds: true, 276 | parallaxElements: true, 277 | horizontalScrolling: false, 278 | hideDistantElements: false, 279 | scrollProperty: 'scroll' 280 | }); 281 | }; 282 | siteStellar(); 283 | 284 | var pricing = function() { 285 | $('.js-period-toggle').on('click', function(e) { 286 | var $this = $(this), 287 | pricingItem = $('.pricing-item'); 288 | if ( $('.period-toggle').hasClass('active') ) { 289 | $this.removeClass('active'); 290 | pricingItem.removeClass('yearly'); 291 | } else { 292 | $this.addClass('active'); 293 | pricingItem.addClass('yearly'); 294 | } 295 | e.preventDefault(); 296 | }) 297 | } 298 | pricing(); 299 | 300 | }) -------------------------------------------------------------------------------- /js/jquery.waypoints.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | Waypoints - 4.0.1 3 | Copyright © 2011-2016 Caleb Troughton 4 | Licensed under the MIT license. 5 | https://github.com/imakewebthings/waypoints/blob/master/licenses.txt 6 | */ 7 | !function(){"use strict";function t(o){if(!o)throw new Error("No options passed to Waypoint constructor");if(!o.element)throw new Error("No element option passed to Waypoint constructor");if(!o.handler)throw new Error("No handler option passed to Waypoint constructor");this.key="waypoint-"+e,this.options=t.Adapter.extend({},t.defaults,o),this.element=this.options.element,this.adapter=new t.Adapter(this.element),this.callback=o.handler,this.axis=this.options.horizontal?"horizontal":"vertical",this.enabled=this.options.enabled,this.triggerPoint=null,this.group=t.Group.findOrCreate({name:this.options.group,axis:this.axis}),this.context=t.Context.findOrCreateByElement(this.options.context),t.offsetAliases[this.options.offset]&&(this.options.offset=t.offsetAliases[this.options.offset]),this.group.add(this),this.context.add(this),i[this.key]=this,e+=1}var e=0,i={};t.prototype.queueTrigger=function(t){this.group.queueTrigger(this,t)},t.prototype.trigger=function(t){this.enabled&&this.callback&&this.callback.apply(this,t)},t.prototype.destroy=function(){this.context.remove(this),this.group.remove(this),delete i[this.key]},t.prototype.disable=function(){return this.enabled=!1,this},t.prototype.enable=function(){return this.context.refresh(),this.enabled=!0,this},t.prototype.next=function(){return this.group.next(this)},t.prototype.previous=function(){return this.group.previous(this)},t.invokeAll=function(t){var e=[];for(var o in i)e.push(i[o]);for(var n=0,r=e.length;r>n;n++)e[n][t]()},t.destroyAll=function(){t.invokeAll("destroy")},t.disableAll=function(){t.invokeAll("disable")},t.enableAll=function(){t.Context.refreshAll();for(var e in i)i[e].enabled=!0;return this},t.refreshAll=function(){t.Context.refreshAll()},t.viewportHeight=function(){return window.innerHeight||document.documentElement.clientHeight},t.viewportWidth=function(){return document.documentElement.clientWidth},t.adapters=[],t.defaults={context:window,continuous:!0,enabled:!0,group:"default",horizontal:!1,offset:0},t.offsetAliases={"bottom-in-view":function(){return this.context.innerHeight()-this.adapter.outerHeight()},"right-in-view":function(){return this.context.innerWidth()-this.adapter.outerWidth()}},window.Waypoint=t}(),function(){"use strict";function t(t){window.setTimeout(t,1e3/60)}function e(t){this.element=t,this.Adapter=n.Adapter,this.adapter=new this.Adapter(t),this.key="waypoint-context-"+i,this.didScroll=!1,this.didResize=!1,this.oldScroll={x:this.adapter.scrollLeft(),y:this.adapter.scrollTop()},this.waypoints={vertical:{},horizontal:{}},t.waypointContextKey=this.key,o[t.waypointContextKey]=this,i+=1,n.windowContext||(n.windowContext=!0,n.windowContext=new e(window)),this.createThrottledScrollHandler(),this.createThrottledResizeHandler()}var i=0,o={},n=window.Waypoint,r=window.onload;e.prototype.add=function(t){var e=t.options.horizontal?"horizontal":"vertical";this.waypoints[e][t.key]=t,this.refresh()},e.prototype.checkEmpty=function(){var t=this.Adapter.isEmptyObject(this.waypoints.horizontal),e=this.Adapter.isEmptyObject(this.waypoints.vertical),i=this.element==this.element.window;t&&e&&!i&&(this.adapter.off(".waypoints"),delete o[this.key])},e.prototype.createThrottledResizeHandler=function(){function t(){e.handleResize(),e.didResize=!1}var e=this;this.adapter.on("resize.waypoints",function(){e.didResize||(e.didResize=!0,n.requestAnimationFrame(t))})},e.prototype.createThrottledScrollHandler=function(){function t(){e.handleScroll(),e.didScroll=!1}var e=this;this.adapter.on("scroll.waypoints",function(){(!e.didScroll||n.isTouch)&&(e.didScroll=!0,n.requestAnimationFrame(t))})},e.prototype.handleResize=function(){n.Context.refreshAll()},e.prototype.handleScroll=function(){var t={},e={horizontal:{newScroll:this.adapter.scrollLeft(),oldScroll:this.oldScroll.x,forward:"right",backward:"left"},vertical:{newScroll:this.adapter.scrollTop(),oldScroll:this.oldScroll.y,forward:"down",backward:"up"}};for(var i in e){var o=e[i],n=o.newScroll>o.oldScroll,r=n?o.forward:o.backward;for(var s in this.waypoints[i]){var a=this.waypoints[i][s];if(null!==a.triggerPoint){var l=o.oldScroll=a.triggerPoint,p=l&&h,u=!l&&!h;(p||u)&&(a.queueTrigger(r),t[a.group.id]=a.group)}}}for(var c in t)t[c].flushTriggers();this.oldScroll={x:e.horizontal.newScroll,y:e.vertical.newScroll}},e.prototype.innerHeight=function(){return this.element==this.element.window?n.viewportHeight():this.adapter.innerHeight()},e.prototype.remove=function(t){delete this.waypoints[t.axis][t.key],this.checkEmpty()},e.prototype.innerWidth=function(){return this.element==this.element.window?n.viewportWidth():this.adapter.innerWidth()},e.prototype.destroy=function(){var t=[];for(var e in this.waypoints)for(var i in this.waypoints[e])t.push(this.waypoints[e][i]);for(var o=0,n=t.length;n>o;o++)t[o].destroy()},e.prototype.refresh=function(){var t,e=this.element==this.element.window,i=e?void 0:this.adapter.offset(),o={};this.handleScroll(),t={horizontal:{contextOffset:e?0:i.left,contextScroll:e?0:this.oldScroll.x,contextDimension:this.innerWidth(),oldScroll:this.oldScroll.x,forward:"right",backward:"left",offsetProp:"left"},vertical:{contextOffset:e?0:i.top,contextScroll:e?0:this.oldScroll.y,contextDimension:this.innerHeight(),oldScroll:this.oldScroll.y,forward:"down",backward:"up",offsetProp:"top"}};for(var r in t){var s=t[r];for(var a in this.waypoints[r]){var l,h,p,u,c,d=this.waypoints[r][a],f=d.options.offset,w=d.triggerPoint,y=0,g=null==w;d.element!==d.element.window&&(y=d.adapter.offset()[s.offsetProp]),"function"==typeof f?f=f.apply(d):"string"==typeof f&&(f=parseFloat(f),d.options.offset.indexOf("%")>-1&&(f=Math.ceil(s.contextDimension*f/100))),l=s.contextScroll-s.contextOffset,d.triggerPoint=Math.floor(y+l-f),h=w=s.oldScroll,u=h&&p,c=!h&&!p,!g&&u?(d.queueTrigger(s.backward),o[d.group.id]=d.group):!g&&c?(d.queueTrigger(s.forward),o[d.group.id]=d.group):g&&s.oldScroll>=d.triggerPoint&&(d.queueTrigger(s.forward),o[d.group.id]=d.group)}}return n.requestAnimationFrame(function(){for(var t in o)o[t].flushTriggers()}),this},e.findOrCreateByElement=function(t){return e.findByElement(t)||new e(t)},e.refreshAll=function(){for(var t in o)o[t].refresh()},e.findByElement=function(t){return o[t.waypointContextKey]},window.onload=function(){r&&r(),e.refreshAll()},n.requestAnimationFrame=function(e){var i=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||t;i.call(window,e)},n.Context=e}(),function(){"use strict";function t(t,e){return t.triggerPoint-e.triggerPoint}function e(t,e){return e.triggerPoint-t.triggerPoint}function i(t){this.name=t.name,this.axis=t.axis,this.id=this.name+"-"+this.axis,this.waypoints=[],this.clearTriggerQueues(),o[this.axis][this.name]=this}var o={vertical:{},horizontal:{}},n=window.Waypoint;i.prototype.add=function(t){this.waypoints.push(t)},i.prototype.clearTriggerQueues=function(){this.triggerQueues={up:[],down:[],left:[],right:[]}},i.prototype.flushTriggers=function(){for(var i in this.triggerQueues){var o=this.triggerQueues[i],n="up"===i||"left"===i;o.sort(n?e:t);for(var r=0,s=o.length;s>r;r+=1){var a=o[r];(a.options.continuous||r===o.length-1)&&a.trigger([i])}}this.clearTriggerQueues()},i.prototype.next=function(e){this.waypoints.sort(t);var i=n.Adapter.inArray(e,this.waypoints),o=i===this.waypoints.length-1;return o?null:this.waypoints[i+1]},i.prototype.previous=function(e){this.waypoints.sort(t);var i=n.Adapter.inArray(e,this.waypoints);return i?this.waypoints[i-1]:null},i.prototype.queueTrigger=function(t,e){this.triggerQueues[e].push(t)},i.prototype.remove=function(t){var e=n.Adapter.inArray(t,this.waypoints);e>-1&&this.waypoints.splice(e,1)},i.prototype.first=function(){return this.waypoints[0]},i.prototype.last=function(){return this.waypoints[this.waypoints.length-1]},i.findOrCreate=function(t){return o[t.axis][t.name]||new i(t)},n.Group=i}(),function(){"use strict";function t(t){this.$element=e(t)}var e=window.jQuery,i=window.Waypoint;e.each(["innerHeight","innerWidth","off","offset","on","outerHeight","outerWidth","scrollLeft","scrollTop"],function(e,i){t.prototype[i]=function(){var t=Array.prototype.slice.call(arguments);return this.$element[i].apply(this.$element,t)}}),e.each(["extend","inArray","isEmptyObject"],function(i,o){t[o]=e[o]}),i.adapters.push({name:"jquery",Adapter:t}),i.Adapter=t}(),function(){"use strict";function t(t){return function(){var i=[],o=arguments[0];return t.isFunction(arguments[0])&&(o=t.extend({},arguments[1]),o.handler=arguments[0]),this.each(function(){var n=t.extend({},o,{element:this});"string"==typeof n.context&&(n.context=t(this).closest(n.context)[0]),i.push(new e(n))}),i}}var e=window.Waypoint;window.jQuery&&(window.jQuery.fn.waypoint=t(window.jQuery)),window.Zepto&&(window.Zepto.fn.waypoint=t(window.Zepto))}(); -------------------------------------------------------------------------------- /prepros-6.config: -------------------------------------------------------------------------------- 1 | { 2 | "name": "05-untree-append", 3 | "firstRun": false, 4 | "exportConfig": true, 5 | "fileConfigs": [ 6 | { 7 | "path": "untree.co-story/scss/style.scss", 8 | "configJson": "{\"forceCompile\":false,\"customOutput\":\"untree.co-story/css/style.css\",\"autoCompile\":true,\"sourceMap\":false,\"compiler-node-sass\":{\"enabled\":true,\"outputStyle\":\"nested\"},\"compiler-autoprefixer\":{\"enabled\":true},\"compiler-minify-css\":{\"enabled\":false}}" 9 | } 10 | ], 11 | "fileTree": { 12 | "expandedDirs": [ 13 | "untree.co-story", 14 | "untree.co-story/scss", 15 | "scss" 16 | ], 17 | "hideSystemFiles": true, 18 | "systemFiles": [ 19 | ".*", 20 | "desktop.ini", 21 | "prepros.config", 22 | "$RECYCLE.BIN", 23 | "prepros.cfg", 24 | "prepros-6.config", 25 | "Prepros Export" 26 | ], 27 | "hideUnwatchedFiles": false 28 | }, 29 | "imports": [ 30 | { 31 | "path": "scss/style.scss", 32 | "imports": [ 33 | "scss/_functions.scss", 34 | "scss/_variables.scss", 35 | "scss/_mixins.scss", 36 | "scss/_site-base.scss", 37 | "scss/_site-navbar.scss", 38 | "scss/_site-blocks.scss", 39 | "scss/_site-elements.scss", 40 | "scss/_site-footer.scss", 41 | "scss/mixins/_deprecate.scss", 42 | "scss/mixins/_breakpoints.scss", 43 | "scss/mixins/_hover.scss", 44 | "scss/mixins/_image.scss", 45 | "scss/mixins/_badge.scss", 46 | "scss/mixins/_resize.scss", 47 | "scss/mixins/_screen-reader.scss", 48 | "scss/mixins/_size.scss", 49 | "scss/mixins/_reset-text.scss", 50 | "scss/mixins/_text-emphasis.scss", 51 | "scss/mixins/_text-hide.scss", 52 | "scss/mixins/_text-truncate.scss", 53 | "scss/mixins/_visibility.scss", 54 | "scss/mixins/_alert.scss", 55 | "scss/mixins/_buttons.scss", 56 | "scss/mixins/_caret.scss", 57 | "scss/mixins/_pagination.scss", 58 | "scss/mixins/_lists.scss", 59 | "scss/mixins/_list-group.scss", 60 | "scss/mixins/_nav-divider.scss", 61 | "scss/mixins/_forms.scss", 62 | "scss/mixins/_table-row.scss", 63 | "scss/mixins/_background-variant.scss", 64 | "scss/mixins/_border-radius.scss", 65 | "scss/mixins/_box-shadow.scss", 66 | "scss/mixins/_gradients.scss", 67 | "scss/mixins/_transition.scss", 68 | "scss/mixins/_clearfix.scss", 69 | "scss/mixins/_grid-framework.scss", 70 | "scss/mixins/_grid.scss", 71 | "scss/mixins/_float.scss" 72 | ] 73 | } 74 | ], 75 | "projectView": { 76 | "selectedView": "log" 77 | }, 78 | "fileWatcher": { 79 | "enabled": true, 80 | "watchedExtensions": [ 81 | "less", 82 | "sass", 83 | "scss", 84 | "styl", 85 | "md", 86 | "markdown", 87 | "coffee", 88 | "js", 89 | "jade", 90 | "haml", 91 | "slim", 92 | "ls", 93 | "kit", 94 | "png", 95 | "jpg", 96 | "jpeg", 97 | "ts", 98 | "pug", 99 | "css", 100 | "html", 101 | "htm", 102 | "php" 103 | ] 104 | }, 105 | "pathFilters": [ 106 | "node_modules", 107 | ".*", 108 | "bower_components", 109 | "prepros.config", 110 | "Prepros Export", 111 | "prepros-6.config", 112 | "prepros.cfg", 113 | "wp-admin", 114 | "wp-includes" 115 | ], 116 | "server": { 117 | "port": 8064, 118 | "assignNewPortAutomatically": true, 119 | "enable": true, 120 | "proxy": { 121 | "enable": false, 122 | "url": "" 123 | } 124 | }, 125 | "browser-sync": { 126 | "enable": false, 127 | "clicks": true, 128 | "forms": true, 129 | "scroll": true 130 | }, 131 | "live-reload": { 132 | "enable": true, 133 | "animate": true, 134 | "delay": 0 135 | }, 136 | "ftp-deploy": { 137 | "connectionType": "ftp", 138 | "remotePath": "", 139 | "uploadTimeout": 20000, 140 | "uploadOnChange": false, 141 | "ftp": { 142 | "secure": false, 143 | "keepAlive": true, 144 | "host": "", 145 | "port": 21, 146 | "user": "", 147 | "password": "" 148 | }, 149 | "sftp": { 150 | "host": "", 151 | "port": 22, 152 | "usePrivateKey": false, 153 | "username": "", 154 | "password": "", 155 | "privateKey": "", 156 | "passphrase": "" 157 | }, 158 | "pathFilters": [ 159 | "config.rb", 160 | "prepros.config", 161 | "prepros-6.config", 162 | "node_modules", 163 | "Prepros Export", 164 | ".git", 165 | ".idea", 166 | ".sass-cache", 167 | ".hg", 168 | ".svn", 169 | ".cache", 170 | ".DS_Store", 171 | "*.sass", 172 | "*.scss", 173 | "*.less", 174 | "*.pug", 175 | "*.jade", 176 | "*.styl", 177 | "*.haml", 178 | "*.slim", 179 | "*.coffee", 180 | "*.ls", 181 | "*.kit", 182 | "*.ts" 183 | ], 184 | "history": [] 185 | }, 186 | "file-type-sass": "{\"compilers\":[\"node-sass\",\"autoprefixer\",\"minify-css\"]}", 187 | "file-type-less": "{\"compilers\":[\"less\",\"autoprefixer\",\"minify-css\"]}", 188 | "autoprefixer": { 189 | "browsers": "last 5 versions" 190 | }, 191 | "file-type-pug": "{\"compilers\":[\"pug\"]}", 192 | "file-type-css": "{\"compilers\":[\"autoprefixer\",\"cssnext\",\"minify-css\"]}", 193 | "file-type-javascript": "{\"compilers\":[\"concat-js\",\"babel\",\"uglify-js\"]}", 194 | "file-type-stylus": "{\"compilers\":[\"stylus\",\"autoprefixer\",\"minify-css\"]}", 195 | "file-type-markdown": "{\"compilers\":[\"markdown\"]}", 196 | "file-type-haml": "{\"compilers\":[\"haml\"]}", 197 | "file-type-slim": "{\"compilers\":[\"slim\"]}", 198 | "file-type-coffee-script": "{\"compilers\":[\"coffee-script\",\"uglify-js\"]}", 199 | "file-type-livescript": "{\"compilers\":[\"livescript\",\"uglify-js\"]}", 200 | "file-type-kit": "{\"compilers\":[\"kit\"]}", 201 | "uglify-js": { 202 | "ie8": false, 203 | "compress": { 204 | "sequences": true, 205 | "properties": true, 206 | "dead_code": true, 207 | "drop_debugger": true, 208 | "unsafe": false, 209 | "unsafe_comps": false, 210 | "unsafe_math": false, 211 | "unsafe_proto": false, 212 | "unsafe_regexp": false, 213 | "conditionals": true, 214 | "comparisons": true, 215 | "evaluate": true, 216 | "booleans": true, 217 | "loops": true, 218 | "unused": true, 219 | "toplevel": false, 220 | "top_retain": "", 221 | "hoist_funs": true, 222 | "hoist_vars": false, 223 | "if_return": true, 224 | "join_vars": true, 225 | "collapse_vars": true, 226 | "reduce_vars": true, 227 | "warnings": true, 228 | "negate_iife": true, 229 | "pure_getters": false, 230 | "pure_funcs": [], 231 | "drop_console": false, 232 | "expression": false, 233 | "keep_fargs": true, 234 | "keep_fnames": false, 235 | "passes": 1, 236 | "keep_infinity": false, 237 | "side_effects": true, 238 | "global_defs": [] 239 | }, 240 | "output": { 241 | "ascii_only": false, 242 | "beautify": false, 243 | "comments": "", 244 | "indent_level": 4, 245 | "indent_start": 0, 246 | "inline_script": false, 247 | "keep_quoted_props": false, 248 | "max_line_len": false, 249 | "preamble": "", 250 | "preserve_line": false, 251 | "quote_keys": false, 252 | "quote_style": 0, 253 | "semicolons": true, 254 | "shebang": true, 255 | "width": 80 256 | } 257 | }, 258 | "cssnext": { 259 | "customProperties": true, 260 | "applyRule": true, 261 | "calc": false, 262 | "nesting": true, 263 | "customMedia": true, 264 | "mediaQueriesRange": true, 265 | "customSelectors": true, 266 | "attributeCaseInsensitive": true, 267 | "colorRebeccapurple": true, 268 | "colorHwb": true, 269 | "colorGray": true, 270 | "colorHexAlpha": true, 271 | "colorFunction": true, 272 | "fontVariant": true, 273 | "filter": true, 274 | "initial": true, 275 | "rem": true, 276 | "pseudoElements": true, 277 | "pseudoClassMatches": true, 278 | "pseudoClassNot": true, 279 | "pseudoClassAnyLink": true, 280 | "colorRgba": true, 281 | "overflowWrap": true 282 | }, 283 | "file-type-typescript": "{\"compilers\":[\"typescript\",\"uglify-js\"]}", 284 | "babel": { 285 | "useBabelRc": true, 286 | "presets": { 287 | "babel-preset-es2015": true 288 | }, 289 | "plugins": { 290 | "babel-plugin-syntax-jsx": true, 291 | "babel-plugin-transform-react-jsx": true, 292 | "babel-plugin-transform-async-to-generator": true, 293 | "babel-plugin-transform-class-properties": true, 294 | "babel-plugin-transform-object-rest-spread": true 295 | } 296 | }, 297 | "file-type-png": "{\"compilers\":[\"png\"]}", 298 | "file-type-jpg": "{\"compilers\":[\"jpg\"],\"compiler-jpg\":{\"enabled\":true,\"originalSize\":0,\"newSize\":0}}" 299 | } -------------------------------------------------------------------------------- /scss/_site-navbar.scss: -------------------------------------------------------------------------------- 1 | // MENU 2 | .logo { 3 | position: absolute; 4 | left: 0; 5 | z-index: 9; 6 | font-size: 20px; 7 | font-weight: 700; 8 | line-height: 1; 9 | top: 50%; 10 | transform: translateY(-50%); 11 | a { 12 | color: $primary; 13 | } 14 | } 15 | .site-nav { 16 | position: absolute; 17 | // width: 100%; 18 | top: 0; 19 | left: 30px; 20 | right: 30px; 21 | // top: 0; 22 | z-index: 99; 23 | } 24 | .menu-absolute { 25 | position: absolute; 26 | right: 15px; 27 | } 28 | .site-nav { 29 | padding-top: 20px; 30 | padding-bottom: 20px; 31 | h1 { 32 | margin: 0; 33 | padding: 0; 34 | font-size: 24px; 35 | } 36 | .site-navigation { 37 | 38 | .site-menu { 39 | 40 | margin-bottom: 0; 41 | > li { 42 | 43 | display: inline-block; 44 | > a { 45 | font-size: 14px; 46 | padding: 10px 15px; 47 | color: rgba($white, .7); 48 | display: inline-block; 49 | text-decoration: none!important; 50 | 51 | &:hover { 52 | color: $white; 53 | 54 | } 55 | } 56 | 57 | &.cta-button { 58 | a { 59 | padding: 6px 20px; 60 | border: 1px solid transparent; 61 | color: $white; 62 | background: $primary; 63 | 64 | border-radius: 4px; 65 | &:hover { 66 | color: $white; 67 | background-color: transparent; 68 | // background: $primary; 69 | border-color: rgba($white, .3); 70 | } 71 | } 72 | } 73 | &.active { 74 | > a { 75 | color: $white; 76 | } 77 | } 78 | } 79 | .has-children { 80 | position: relative; 81 | > a { 82 | position: relative; 83 | padding-right: 20px; 84 | &:before { 85 | position: absolute; 86 | content: "\e313"; 87 | font-size: 14px; 88 | top: 50%; 89 | right: 0; 90 | transform: translateY(-50%); 91 | font-family: 'icomoon'; 92 | } 93 | } 94 | .dropdown { 95 | visibility: hidden; 96 | opacity: 0; 97 | top: 100%; 98 | z-index: 999; 99 | position: absolute; 100 | text-align: left; 101 | box-shadow: 0 2px 10px -2px rgba(0,0,0,.1); 102 | 103 | padding: 20px 0; 104 | margin-top: 20px; 105 | margin-left: 0px; 106 | background: $white; 107 | transition: 0.2s 0s; 108 | 109 | &.arrow-top { 110 | position: absolute; 111 | 112 | &:before { 113 | display: none; 114 | bottom: 100%; 115 | left: 20%; 116 | border: solid transparent; 117 | content: " "; 118 | height: 0; 119 | width: 0; 120 | position: absolute; 121 | pointer-events: none; 122 | } 123 | &:before { 124 | display: none; 125 | border-color: rgba(136, 183, 213, 0); 126 | border-bottom-color: $white; 127 | border-width: 10px; 128 | margin-left: -10px; 129 | } 130 | } 131 | 132 | 133 | a { 134 | font-size: 14px; 135 | text-transform: none; 136 | letter-spacing: normal; 137 | transition: 0s all; 138 | color: $black; 139 | } 140 | .active { 141 | 142 | color: $primary!important; 143 | 144 | } 145 | > li { 146 | list-style: none; 147 | padding: 0; 148 | margin: 0; 149 | min-width: 180px; 150 | &.active { 151 | > a { 152 | color: $primary!important; 153 | } 154 | } 155 | > a { 156 | padding: 5px 20px; 157 | display: block; 158 | &:hover { 159 | color: $primary; 160 | } 161 | } 162 | 163 | &.has-children { 164 | > a { 165 | &:before { 166 | content: "\e315"; 167 | right: 20px; 168 | } 169 | } 170 | > .dropdown, > ul { 171 | left: 100%; 172 | top: 0; 173 | li { 174 | a { 175 | &:hover { 176 | color: $primary; 177 | } 178 | } 179 | } 180 | } 181 | &:hover, &:active, &:focus { 182 | > a { 183 | color: $primary; 184 | // background: darken($light, 2%); 185 | } 186 | } 187 | } 188 | } 189 | } 190 | 191 | &:hover, &:focus, &:active { 192 | > a { 193 | color: $white; 194 | } 195 | } 196 | &:hover, &:focus, &:active { 197 | cursor: pointer; 198 | > .dropdown { 199 | transition-delay: 0s; 200 | margin-top: 0px; 201 | visibility: visible; 202 | opacity: 1; 203 | 204 | 205 | } 206 | } 207 | } 208 | } 209 | } 210 | } 211 | .site-mobile-menu-close { 212 | display: block; 213 | position: relative; 214 | height: 30px; 215 | width: 30px; 216 | z-index: 99; 217 | cursor: pointer; 218 | top: -20px; 219 | 220 | > span { 221 | cursor: pointer; 222 | display: block; 223 | position: absolute; 224 | height: 30px; 225 | width: 30px; 226 | &:before, &:after { 227 | position: absolute; 228 | content: ""; 229 | width: 2px; 230 | height: 30px; 231 | background: $black; 232 | } 233 | &:before { 234 | transform: rotate(45deg); 235 | } 236 | &:after { 237 | transform: rotate(-45deg); 238 | } 239 | } 240 | } 241 | 242 | // mobile menu 243 | .site-mobile-menu { 244 | width: 300px; 245 | position: fixed; 246 | right: 0; 247 | z-index: 2000; 248 | padding-top: 20px; 249 | background: $white; 250 | height: calc(100vh); 251 | 252 | transform: translateX(100%); 253 | 254 | transition: .8s all cubic-bezier(.23,1,.32,1); 255 | 256 | .offcanvas-menu & { 257 | box-shadow: -10px 0 20px -10px rgba(0,0,0,.1); 258 | transform: translateX(0%); 259 | } 260 | 261 | .site-mobile-menu-header { 262 | width: 100%; 263 | float: left; 264 | padding-left: 20px; 265 | padding-right: 20px; 266 | 267 | .site-mobile-menu-close { 268 | float: right; 269 | margin-top: 8px; 270 | span { 271 | font-size: 30px; 272 | display: inline-block; 273 | padding-left: 10px; 274 | padding-right: 0px; 275 | line-height: 1; 276 | cursor: pointer; 277 | transition: .3s all ease; 278 | &:hover { 279 | // color: $gray-1; 280 | } 281 | } 282 | } 283 | .site-mobile-menu-logo { 284 | float: left; 285 | margin-top: 10px; 286 | margin-left: 0px; 287 | a { 288 | display: inline-block; 289 | text-transform: uppercase; 290 | img { 291 | max-width: 70px; 292 | } 293 | &:hover { 294 | text-decoration: none; 295 | } 296 | } 297 | } 298 | } 299 | 300 | .site-mobile-menu-body { 301 | overflow-y: scroll; 302 | -webkit-overflow-scrolling: touch; 303 | position: relative; 304 | padding: 0 20px 20px 20px; 305 | 306 | height: calc(100vh - 52px); 307 | padding-bottom: 150px; 308 | 309 | } 310 | .site-nav-wrap { 311 | padding: 0; 312 | margin: 0; 313 | list-style: none; 314 | // float: left; 315 | 316 | // width: 100%; 317 | // height: 100%; 318 | position: relative; 319 | 320 | a { 321 | padding: 5px 20px; 322 | display: block; 323 | position: relative; 324 | // color: $gray-00; 325 | color: $black; 326 | &:hover { 327 | color: $primary; 328 | } 329 | } 330 | li { 331 | position: relative; 332 | display: block; 333 | &.active { 334 | > a { 335 | color: $primary; 336 | } 337 | } 338 | } 339 | .arrow-collapse { 340 | position: absolute; 341 | right: 0px; 342 | top: 0px; 343 | z-index: 20; 344 | width: 36px; 345 | height: 36px; 346 | text-align: center; 347 | cursor: pointer; 348 | border-radius: 50%; 349 | border: 1px solid $light; 350 | &:hover { 351 | // background: $gray-100; 352 | } 353 | &:before { 354 | font-size: 14px; 355 | z-index: 20; 356 | font-family: "icomoon"; 357 | content: "\e313"; 358 | position: absolute; 359 | top: 50%; 360 | left: 50%; 361 | transform: translate(-50%, -50%) rotate(-180deg); 362 | transition: .3s all ease; 363 | } 364 | &.collapsed { 365 | &:before { 366 | transform: translate(-50%, -50%); 367 | } 368 | } 369 | } 370 | > li { 371 | display: block; 372 | position: relative; 373 | float: left; 374 | width: 100%; 375 | 376 | > a { 377 | padding-left: 20px; 378 | font-size: 14px; 379 | } 380 | > ul { 381 | padding: 0; 382 | margin: 0; 383 | list-style: none; 384 | > li { 385 | display: block; 386 | > a { 387 | padding-left: 40px; 388 | font-size: 14px; 389 | } 390 | > ul { 391 | padding: 0; 392 | margin: 0; 393 | > li { 394 | display: block; 395 | > a { 396 | font-size: 14px; 397 | padding-left: 60px; 398 | } 399 | } 400 | } 401 | } 402 | } 403 | } 404 | 405 | } 406 | 407 | 408 | } 409 | 410 | .sticky-wrapper { 411 | position: absolute; 412 | z-index: 100; 413 | width: 100%; 414 | .site-navbar { 415 | transition: .3s all ease; 416 | } 417 | .site-navbar { 418 | .site-menu-toggle { 419 | color: $black; 420 | } 421 | .site-logo { 422 | a { 423 | color: $black; 424 | } 425 | } 426 | .site-menu { 427 | > li { 428 | > a { 429 | color: rgba($black, .8)!important; 430 | &:hover, &.active { 431 | color: $black!important; 432 | } 433 | } 434 | } 435 | } 436 | } 437 | &.is-sticky { 438 | .burger:before, .burger span, .burger:after { 439 | background: $black; 440 | transition: .0s all ease; 441 | } 442 | .site-navbar { 443 | background: $black; 444 | border-bottom: 1px solid transparent; 445 | box-shadow: 4px 0 20px -5px rgba(0,0,0,.1); 446 | .site-logo { 447 | a { 448 | color: $black!important; 449 | 450 | } 451 | } 452 | .site-menu { 453 | > li { 454 | > a { 455 | color: $black!important; 456 | &:hover, &.active { 457 | color: $primary!important; 458 | } 459 | } 460 | &.active { 461 | a { 462 | color: $primary!important; 463 | } 464 | } 465 | } 466 | } 467 | } 468 | } 469 | .shrink { 470 | padding-top: 0px!important; 471 | padding-bottom: 0px!important; 472 | } 473 | } 474 | 475 | 476 | 477 | /* Burger */ 478 | .burger { 479 | width: 28px; 480 | height: 32px; 481 | cursor: pointer; 482 | position: relative; 483 | } 484 | .burger:before, .burger span, .burger:after { 485 | width: 100%; 486 | height: 2px; 487 | display: block; 488 | background: #000; 489 | border-radius: 2px; 490 | position: absolute; 491 | opacity: 1; 492 | } 493 | .burger { 494 | &.light { 495 | &:before, span, &:after { 496 | background-color: $white; 497 | } 498 | } 499 | } 500 | .burger:before, .burger:after { 501 | transition: top .35s cubic-bezier(.23,1,.32,1),transform .35s cubic-bezier(.23,1,.32,1),opacity .35s cubic-bezier(.23,1,.32,1),background-color 1.15s cubic-bezier(.86,0,.07,1); 502 | -webkit-transition: top .35s cubic-bezier(.23,1,.32,1),-webkit-transform .35s cubic-bezier(.23,1,.32,1),opacity .35s cubic-bezier(.23,1,.32,1),background-color 1.15s cubic-bezier(.86,0,.07,1); 503 | content: ""; 504 | } 505 | .burger:before { 506 | top: 4px; 507 | } 508 | .burger span { 509 | top: 15px; 510 | } 511 | .burger:after { 512 | top: 26px; 513 | } 514 | /* Hover */ 515 | .burger:hover:before { 516 | top: 7px; 517 | } 518 | .burger:hover:after { 519 | top: 23px; 520 | } 521 | 522 | /* Click */ 523 | .burger.active span { 524 | opacity: 0; 525 | } 526 | .burger.active:before, .burger.active:after { 527 | top: 40%; 528 | } 529 | .burger.active:before { 530 | -webkit-transform: rotate(45deg); 531 | -moz-transform: rotate(45deg); 532 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=5); /*for IE*/ 533 | } 534 | .burger.active:after { 535 | -webkit-transform: rotate(-45deg); 536 | -moz-transform: rotate(-45deg); 537 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=-5); /*for IE*/ 538 | } 539 | .burger:focus { 540 | outline: none; 541 | } 542 | -------------------------------------------------------------------------------- /js/jquery.stellar.min.js: -------------------------------------------------------------------------------- 1 | /*! Stellar.js v0.6.2 | Copyright 2014, Mark Dalgleish | http://markdalgleish.com/projects/stellar.js | http://markdalgleish.mit-license.org */ 2 | !function(a,b,c,d){function e(b,c){this.element=b,this.options=a.extend({},g,c),this._defaults=g,this._name=f,this.init()}var f="stellar",g={scrollProperty:"scroll",positionProperty:"position",horizontalScrolling:!0,verticalScrolling:!0,horizontalOffset:0,verticalOffset:0,responsive:!1,parallaxBackgrounds:!0,parallaxElements:!0,hideDistantElements:!0,hideElement:function(a){a.hide()},showElement:function(a){a.show()}},h={scroll:{getLeft:function(a){return a.scrollLeft()},setLeft:function(a,b){a.scrollLeft(b)},getTop:function(a){return a.scrollTop()},setTop:function(a,b){a.scrollTop(b)}},position:{getLeft:function(a){return-1*parseInt(a.css("left"),10)},getTop:function(a){return-1*parseInt(a.css("top"),10)}},margin:{getLeft:function(a){return-1*parseInt(a.css("margin-left"),10)},getTop:function(a){return-1*parseInt(a.css("margin-top"),10)}},transform:{getLeft:function(a){var b=getComputedStyle(a[0])[k];return"none"!==b?-1*parseInt(b.match(/(-?[0-9]+)/g)[4],10):0},getTop:function(a){var b=getComputedStyle(a[0])[k];return"none"!==b?-1*parseInt(b.match(/(-?[0-9]+)/g)[5],10):0}}},i={position:{setLeft:function(a,b){a.css("left",b)},setTop:function(a,b){a.css("top",b)}},transform:{setPosition:function(a,b,c,d,e){a[0].style[k]="translate3d("+(b-c)+"px, "+(d-e)+"px, 0)"}}},j=function(){var b,c=/^(Moz|Webkit|Khtml|O|ms|Icab)(?=[A-Z])/,d=a("script")[0].style,e="";for(b in d)if(c.test(b)){e=b.match(c)[0];break}return"WebkitOpacity"in d&&(e="Webkit"),"KhtmlOpacity"in d&&(e="Khtml"),function(a){return e+(e.length>0?a.charAt(0).toUpperCase()+a.slice(1):a)}}(),k=j("transform"),l=a("",{style:"background:#fff"}).css("background-position-x")!==d,m=l?function(a,b,c){a.css({"background-position-x":b,"background-position-y":c})}:function(a,b,c){a.css("background-position",b+" "+c)},n=l?function(a){return[a.css("background-position-x"),a.css("background-position-y")]}:function(a){return a.css("background-position").split(" ")},o=b.requestAnimationFrame||b.webkitRequestAnimationFrame||b.mozRequestAnimationFrame||b.oRequestAnimationFrame||b.msRequestAnimationFrame||function(a){setTimeout(a,1e3/60)};e.prototype={init:function(){this.options.name=f+"_"+Math.floor(1e9*Math.random()),this._defineElements(),this._defineGetters(),this._defineSetters(),this._handleWindowLoadAndResize(),this._detectViewport(),this.refresh({firstLoad:!0}),"scroll"===this.options.scrollProperty?this._handleScrollEvent():this._startAnimationLoop()},_defineElements:function(){this.element===c.body&&(this.element=b),this.$scrollElement=a(this.element),this.$element=this.element===b?a("body"):this.$scrollElement,this.$viewportElement=this.options.viewportElement!==d?a(this.options.viewportElement):this.$scrollElement[0]===b||"scroll"===this.options.scrollProperty?this.$scrollElement:this.$scrollElement.parent()},_defineGetters:function(){var a=this,b=h[a.options.scrollProperty];this._getScrollLeft=function(){return b.getLeft(a.$scrollElement)},this._getScrollTop=function(){return b.getTop(a.$scrollElement)}},_defineSetters:function(){var b=this,c=h[b.options.scrollProperty],d=i[b.options.positionProperty],e=c.setLeft,f=c.setTop;this._setScrollLeft="function"==typeof e?function(a){e(b.$scrollElement,a)}:a.noop,this._setScrollTop="function"==typeof f?function(a){f(b.$scrollElement,a)}:a.noop,this._setPosition=d.setPosition||function(a,c,e,f,g){b.options.horizontalScrolling&&d.setLeft(a,c,e),b.options.verticalScrolling&&d.setTop(a,f,g)}},_handleWindowLoadAndResize:function(){var c=this,d=a(b);c.options.responsive&&d.bind("load."+this.name,function(){c.refresh()}),d.bind("resize."+this.name,function(){c._detectViewport(),c.options.responsive&&c.refresh()})},refresh:function(c){var d=this,e=d._getScrollLeft(),f=d._getScrollTop();c&&c.firstLoad||this._reset(),this._setScrollLeft(0),this._setScrollTop(0),this._setOffsets(),this._findParticles(),this._findBackgrounds(),c&&c.firstLoad&&/WebKit/.test(navigator.userAgent)&&a(b).load(function(){var a=d._getScrollLeft(),b=d._getScrollTop();d._setScrollLeft(a+1),d._setScrollTop(b+1),d._setScrollLeft(a),d._setScrollTop(b)}),this._setScrollLeft(e),this._setScrollTop(f)},_detectViewport:function(){var a=this.$viewportElement.offset(),b=null!==a&&a!==d;this.viewportWidth=this.$viewportElement.width(),this.viewportHeight=this.$viewportElement.height(),this.viewportOffsetTop=b?a.top:0,this.viewportOffsetLeft=b?a.left:0},_findParticles:function(){{var b=this;this._getScrollLeft(),this._getScrollTop()}if(this.particles!==d)for(var c=this.particles.length-1;c>=0;c--)this.particles[c].$element.data("stellar-elementIsActive",d);this.particles=[],this.options.parallaxElements&&this.$element.find("[data-stellar-ratio]").each(function(){var c,e,f,g,h,i,j,k,l,m=a(this),n=0,o=0,p=0,q=0;if(m.data("stellar-elementIsActive")){if(m.data("stellar-elementIsActive")!==this)return}else m.data("stellar-elementIsActive",this);b.options.showElement(m),m.data("stellar-startingLeft")?(m.css("left",m.data("stellar-startingLeft")),m.css("top",m.data("stellar-startingTop"))):(m.data("stellar-startingLeft",m.css("left")),m.data("stellar-startingTop",m.css("top"))),f=m.position().left,g=m.position().top,h="auto"===m.css("margin-left")?0:parseInt(m.css("margin-left"),10),i="auto"===m.css("margin-top")?0:parseInt(m.css("margin-top"),10),k=m.offset().left-h,l=m.offset().top-i,m.parents().each(function(){var b=a(this);return b.data("stellar-offset-parent")===!0?(n=p,o=q,j=b,!1):(p+=b.position().left,void(q+=b.position().top))}),c=m.data("stellar-horizontal-offset")!==d?m.data("stellar-horizontal-offset"):j!==d&&j.data("stellar-horizontal-offset")!==d?j.data("stellar-horizontal-offset"):b.horizontalOffset,e=m.data("stellar-vertical-offset")!==d?m.data("stellar-vertical-offset"):j!==d&&j.data("stellar-vertical-offset")!==d?j.data("stellar-vertical-offset"):b.verticalOffset,b.particles.push({$element:m,$offsetParent:j,isFixed:"fixed"===m.css("position"),horizontalOffset:c,verticalOffset:e,startingPositionLeft:f,startingPositionTop:g,startingOffsetLeft:k,startingOffsetTop:l,parentOffsetLeft:n,parentOffsetTop:o,stellarRatio:m.data("stellar-ratio")!==d?m.data("stellar-ratio"):1,width:m.outerWidth(!0),height:m.outerHeight(!0),isHidden:!1})})},_findBackgrounds:function(){var b,c=this,e=this._getScrollLeft(),f=this._getScrollTop();this.backgrounds=[],this.options.parallaxBackgrounds&&(b=this.$element.find("[data-stellar-background-ratio]"),this.$element.data("stellar-background-ratio")&&(b=b.add(this.$element)),b.each(function(){var b,g,h,i,j,k,l,o=a(this),p=n(o),q=0,r=0,s=0,t=0;if(o.data("stellar-backgroundIsActive")){if(o.data("stellar-backgroundIsActive")!==this)return}else o.data("stellar-backgroundIsActive",this);o.data("stellar-backgroundStartingLeft")?m(o,o.data("stellar-backgroundStartingLeft"),o.data("stellar-backgroundStartingTop")):(o.data("stellar-backgroundStartingLeft",p[0]),o.data("stellar-backgroundStartingTop",p[1])),h="auto"===o.css("margin-left")?0:parseInt(o.css("margin-left"),10),i="auto"===o.css("margin-top")?0:parseInt(o.css("margin-top"),10),j=o.offset().left-h-e,k=o.offset().top-i-f,o.parents().each(function(){var b=a(this);return b.data("stellar-offset-parent")===!0?(q=s,r=t,l=b,!1):(s+=b.position().left,void(t+=b.position().top))}),b=o.data("stellar-horizontal-offset")!==d?o.data("stellar-horizontal-offset"):l!==d&&l.data("stellar-horizontal-offset")!==d?l.data("stellar-horizontal-offset"):c.horizontalOffset,g=o.data("stellar-vertical-offset")!==d?o.data("stellar-vertical-offset"):l!==d&&l.data("stellar-vertical-offset")!==d?l.data("stellar-vertical-offset"):c.verticalOffset,c.backgrounds.push({$element:o,$offsetParent:l,isFixed:"fixed"===o.css("background-attachment"),horizontalOffset:b,verticalOffset:g,startingValueLeft:p[0],startingValueTop:p[1],startingBackgroundPositionLeft:isNaN(parseInt(p[0],10))?0:parseInt(p[0],10),startingBackgroundPositionTop:isNaN(parseInt(p[1],10))?0:parseInt(p[1],10),startingPositionLeft:o.position().left,startingPositionTop:o.position().top,startingOffsetLeft:j,startingOffsetTop:k,parentOffsetLeft:q,parentOffsetTop:r,stellarRatio:o.data("stellar-background-ratio")===d?1:o.data("stellar-background-ratio")})}))},_reset:function(){var a,b,c,d,e;for(e=this.particles.length-1;e>=0;e--)a=this.particles[e],b=a.$element.data("stellar-startingLeft"),c=a.$element.data("stellar-startingTop"),this._setPosition(a.$element,b,b,c,c),this.options.showElement(a.$element),a.$element.data("stellar-startingLeft",null).data("stellar-elementIsActive",null).data("stellar-backgroundIsActive",null);for(e=this.backgrounds.length-1;e>=0;e--)d=this.backgrounds[e],d.$element.data("stellar-backgroundStartingLeft",null).data("stellar-backgroundStartingTop",null),m(d.$element,d.startingValueLeft,d.startingValueTop)},destroy:function(){this._reset(),this.$scrollElement.unbind("resize."+this.name).unbind("scroll."+this.name),this._animationLoop=a.noop,a(b).unbind("load."+this.name).unbind("resize."+this.name)},_setOffsets:function(){var c=this,d=a(b);d.unbind("resize.horizontal-"+this.name).unbind("resize.vertical-"+this.name),"function"==typeof this.options.horizontalOffset?(this.horizontalOffset=this.options.horizontalOffset(),d.bind("resize.horizontal-"+this.name,function(){c.horizontalOffset=c.options.horizontalOffset()})):this.horizontalOffset=this.options.horizontalOffset,"function"==typeof this.options.verticalOffset?(this.verticalOffset=this.options.verticalOffset(),d.bind("resize.vertical-"+this.name,function(){c.verticalOffset=c.options.verticalOffset()})):this.verticalOffset=this.options.verticalOffset},_repositionElements:function(){var a,b,c,d,e,f,g,h,i,j,k=this._getScrollLeft(),l=this._getScrollTop(),n=!0,o=!0;if(this.currentScrollLeft!==k||this.currentScrollTop!==l||this.currentWidth!==this.viewportWidth||this.currentHeight!==this.viewportHeight){for(this.currentScrollLeft=k,this.currentScrollTop=l,this.currentWidth=this.viewportWidth,this.currentHeight=this.viewportHeight,j=this.particles.length-1;j>=0;j--)a=this.particles[j],b=a.isFixed?1:0,this.options.horizontalScrolling?(f=(k+a.horizontalOffset+this.viewportOffsetLeft+a.startingPositionLeft-a.startingOffsetLeft+a.parentOffsetLeft)*-(a.stellarRatio+b-1)+a.startingPositionLeft,h=f-a.startingPositionLeft+a.startingOffsetLeft):(f=a.startingPositionLeft,h=a.startingOffsetLeft),this.options.verticalScrolling?(g=(l+a.verticalOffset+this.viewportOffsetTop+a.startingPositionTop-a.startingOffsetTop+a.parentOffsetTop)*-(a.stellarRatio+b-1)+a.startingPositionTop,i=g-a.startingPositionTop+a.startingOffsetTop):(g=a.startingPositionTop,i=a.startingOffsetTop),this.options.hideDistantElements&&(o=!this.options.horizontalScrolling||h+a.width>(a.isFixed?0:k)&&h<(a.isFixed?0:k)+this.viewportWidth+this.viewportOffsetLeft,n=!this.options.verticalScrolling||i+a.height>(a.isFixed?0:l)&&i<(a.isFixed?0:l)+this.viewportHeight+this.viewportOffsetTop),o&&n?(a.isHidden&&(this.options.showElement(a.$element),a.isHidden=!1),this._setPosition(a.$element,f,a.startingPositionLeft,g,a.startingPositionTop)):a.isHidden||(this.options.hideElement(a.$element),a.isHidden=!0);for(j=this.backgrounds.length-1;j>=0;j--)c=this.backgrounds[j],b=c.isFixed?0:1,d=this.options.horizontalScrolling?(k+c.horizontalOffset-this.viewportOffsetLeft-c.startingOffsetLeft+c.parentOffsetLeft-c.startingBackgroundPositionLeft)*(b-c.stellarRatio)+"px":c.startingValueLeft,e=this.options.verticalScrolling?(l+c.verticalOffset-this.viewportOffsetTop-c.startingOffsetTop+c.parentOffsetTop-c.startingBackgroundPositionTop)*(b-c.stellarRatio)+"px":c.startingValueTop,m(c.$element,d,e)}},_handleScrollEvent:function(){var a=this,b=!1,c=function(){a._repositionElements(),b=!1},d=function(){b||(o(c),b=!0)};this.$scrollElement.bind("scroll."+this.name,d),d()},_startAnimationLoop:function(){var a=this;this._animationLoop=function(){o(a._animationLoop),a._repositionElements()},this._animationLoop()}},a.fn[f]=function(b){var c=arguments;return b===d||"object"==typeof b?this.each(function(){a.data(this,"plugin_"+f)||a.data(this,"plugin_"+f,new e(this,b))}):"string"==typeof b&&"_"!==b[0]&&"init"!==b?this.each(function(){var d=a.data(this,"plugin_"+f);d instanceof e&&"function"==typeof d[b]&&d[b].apply(d,Array.prototype.slice.call(c,1)),"destroy"===b&&a.data(this,"plugin_"+f,null)}):void 0},a[f]=function(){var c=a(b);return c.stellar.apply(c,Array.prototype.slice.call(arguments,0))},a[f].scrollProperty=h,a[f].positionProperty=i,b.Stellar=e}(jQuery,this,document); -------------------------------------------------------------------------------- /css/jquery.fancybox.min.css: -------------------------------------------------------------------------------- 1 | body.compensate-for-scrollbar{overflow:hidden}.fancybox-active{height:auto}.fancybox-is-hidden{left:-9999px;margin:0;position:absolute!important;top:-9999px;visibility:hidden}.fancybox-container{-webkit-backface-visibility:hidden;height:100%;left:0;outline:none;position:fixed;-webkit-tap-highlight-color:transparent;top:0;-ms-touch-action:manipulation;touch-action:manipulation;transform:translateZ(0);width:100%;z-index:99992}.fancybox-container *{box-sizing:border-box}.fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-stage{bottom:0;left:0;position:absolute;right:0;top:0}.fancybox-outer{-webkit-overflow-scrolling:touch;overflow-y:auto}.fancybox-bg{background:#1e1e1e;opacity:0;transition-duration:inherit;transition-property:opacity;transition-timing-function:cubic-bezier(.47,0,.74,.71)}.fancybox-is-open .fancybox-bg{opacity:.9;transition-timing-function:cubic-bezier(.22,.61,.36,1)}.fancybox-caption,.fancybox-infobar,.fancybox-navigation .fancybox-button,.fancybox-toolbar{direction:ltr;opacity:0;position:absolute;transition:opacity .25s ease,visibility 0s ease .25s;visibility:hidden;z-index:99997}.fancybox-show-caption .fancybox-caption,.fancybox-show-infobar .fancybox-infobar,.fancybox-show-nav .fancybox-navigation .fancybox-button,.fancybox-show-toolbar .fancybox-toolbar{opacity:1;transition:opacity .25s ease 0s,visibility 0s ease 0s;visibility:visible}.fancybox-infobar{color:#ccc;font-size:13px;-webkit-font-smoothing:subpixel-antialiased;height:44px;left:0;line-height:44px;min-width:44px;mix-blend-mode:difference;padding:0 10px;pointer-events:none;top:0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fancybox-toolbar{right:0;top:0}.fancybox-stage{direction:ltr;overflow:visible;transform:translateZ(0);z-index:99994}.fancybox-is-open .fancybox-stage{overflow:hidden}.fancybox-slide{-webkit-backface-visibility:hidden;display:none;height:100%;left:0;outline:none;overflow:auto;-webkit-overflow-scrolling:touch;padding:44px;position:absolute;text-align:center;top:0;transition-property:transform,opacity;white-space:normal;width:100%;z-index:99994}.fancybox-slide:before{content:"";display:inline-block;font-size:0;height:100%;vertical-align:middle;width:0}.fancybox-is-sliding .fancybox-slide,.fancybox-slide--current,.fancybox-slide--next,.fancybox-slide--previous{display:block}.fancybox-slide--image{overflow:hidden;padding:44px 0}.fancybox-slide--image:before{display:none}.fancybox-slide--html{padding:6px}.fancybox-content{background:#fff;display:inline-block;margin:0;max-width:100%;overflow:auto;-webkit-overflow-scrolling:touch;padding:44px;position:relative;text-align:left;vertical-align:middle}.fancybox-slide--image .fancybox-content{animation-timing-function:cubic-bezier(.5,0,.14,1);-webkit-backface-visibility:hidden;background:transparent;background-repeat:no-repeat;background-size:100% 100%;left:0;max-width:none;overflow:visible;padding:0;position:absolute;top:0;transform-origin:top left;transition-property:transform,opacity;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:99995}.fancybox-can-zoomOut .fancybox-content{cursor:zoom-out}.fancybox-can-zoomIn .fancybox-content{cursor:zoom-in}.fancybox-can-pan .fancybox-content,.fancybox-can-swipe .fancybox-content{cursor:grab}.fancybox-is-grabbing .fancybox-content{cursor:grabbing}.fancybox-container [data-selectable=true]{cursor:text}.fancybox-image,.fancybox-spaceball{background:transparent;border:0;height:100%;left:0;margin:0;max-height:none;max-width:none;padding:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.fancybox-spaceball{z-index:1}.fancybox-slide--iframe .fancybox-content,.fancybox-slide--map .fancybox-content,.fancybox-slide--pdf .fancybox-content,.fancybox-slide--video .fancybox-content{height:100%;overflow:visible;padding:0;width:100%}.fancybox-slide--video .fancybox-content{background:#000}.fancybox-slide--map .fancybox-content{background:#e5e3df}.fancybox-slide--iframe .fancybox-content{background:#fff}.fancybox-iframe,.fancybox-video{background:transparent;border:0;display:block;height:100%;margin:0;overflow:hidden;padding:0;width:100%}.fancybox-iframe{left:0;position:absolute;top:0}.fancybox-error{background:#fff;cursor:default;max-width:400px;padding:40px;width:100%}.fancybox-error p{color:#444;font-size:16px;line-height:20px;margin:0;padding:0}.fancybox-button{background:rgba(30,30,30,.6);border:0;border-radius:0;box-shadow:none;cursor:pointer;display:inline-block;height:44px;margin:0;padding:10px;position:relative;transition:color .2s;vertical-align:top;visibility:inherit;width:44px}.fancybox-button,.fancybox-button:link,.fancybox-button:visited{color:#ccc}.fancybox-button:hover{color:#fff}.fancybox-button:focus{outline:none}.fancybox-button.fancybox-focus{outline:1px dotted}.fancybox-button[disabled],.fancybox-button[disabled]:hover{color:#888;cursor:default;outline:none}.fancybox-button div{height:100%}.fancybox-button svg{display:block;height:100%;overflow:visible;position:relative;width:100%}.fancybox-button svg path{fill:currentColor;stroke-width:0}.fancybox-button--fsenter svg:nth-child(2),.fancybox-button--fsexit svg:first-child,.fancybox-button--pause svg:first-child,.fancybox-button--play svg:nth-child(2){display:none}.fancybox-progress{background:#ff5268;height:2px;left:0;position:absolute;right:0;top:0;transform:scaleX(0);transform-origin:0;transition-property:transform;transition-timing-function:linear;z-index:99998}.fancybox-close-small{background:transparent;border:0;border-radius:0;color:#ccc;cursor:pointer;opacity:.8;padding:8px;position:absolute;right:-12px;top:-44px;z-index:401}.fancybox-close-small:hover{color:#fff;opacity:1}.fancybox-slide--html .fancybox-close-small{color:currentColor;padding:10px;right:0;top:0}.fancybox-slide--image.fancybox-is-scaling .fancybox-content{overflow:hidden}.fancybox-is-scaling .fancybox-close-small,.fancybox-is-zoomable.fancybox-can-pan .fancybox-close-small{display:none}.fancybox-navigation .fancybox-button{background-clip:content-box;height:100px;opacity:0;position:absolute;top:calc(50% - 50px);width:70px}.fancybox-navigation .fancybox-button div{padding:7px}.fancybox-navigation .fancybox-button--arrow_left{left:0;left:env(safe-area-inset-left);padding:31px 26px 31px 6px}.fancybox-navigation .fancybox-button--arrow_right{padding:31px 6px 31px 26px;right:0;right:env(safe-area-inset-right)}.fancybox-caption{background:linear-gradient(0deg,rgba(0,0,0,.85) 0,rgba(0,0,0,.3) 50%,rgba(0,0,0,.15) 65%,rgba(0,0,0,.075) 75.5%,rgba(0,0,0,.037) 82.85%,rgba(0,0,0,.019) 88%,transparent);bottom:0;color:#eee;font-size:14px;font-weight:400;left:0;line-height:1.5;padding:75px 44px 25px;pointer-events:none;right:0;text-align:center;z-index:99996}@supports (padding:max(0px)){.fancybox-caption{padding:75px max(44px,env(safe-area-inset-right)) max(25px,env(safe-area-inset-bottom)) max(44px,env(safe-area-inset-left))}}.fancybox-caption--separate{margin-top:-50px}.fancybox-caption__body{max-height:50vh;overflow:auto;pointer-events:all}.fancybox-caption a,.fancybox-caption a:link,.fancybox-caption a:visited{color:#ccc;text-decoration:none}.fancybox-caption a:hover{color:#fff;text-decoration:underline}.fancybox-loading{animation:a 1s linear infinite;background:transparent;border:4px solid #888;border-bottom-color:#fff;border-radius:50%;height:50px;left:50%;margin:-25px 0 0 -25px;opacity:.7;padding:0;position:absolute;top:50%;width:50px;z-index:99999}@keyframes a{to{transform:rotate(1turn)}}.fancybox-animated{transition-timing-function:cubic-bezier(0,0,.25,1)}.fancybox-fx-slide.fancybox-slide--previous{opacity:0;transform:translate3d(-100%,0,0)}.fancybox-fx-slide.fancybox-slide--next{opacity:0;transform:translate3d(100%,0,0)}.fancybox-fx-slide.fancybox-slide--current{opacity:1;transform:translateZ(0)}.fancybox-fx-fade.fancybox-slide--next,.fancybox-fx-fade.fancybox-slide--previous{opacity:0;transition-timing-function:cubic-bezier(.19,1,.22,1)}.fancybox-fx-fade.fancybox-slide--current{opacity:1}.fancybox-fx-zoom-in-out.fancybox-slide--previous{opacity:0;transform:scale3d(1.5,1.5,1.5)}.fancybox-fx-zoom-in-out.fancybox-slide--next{opacity:0;transform:scale3d(.5,.5,.5)}.fancybox-fx-zoom-in-out.fancybox-slide--current{opacity:1;transform:scaleX(1)}.fancybox-fx-rotate.fancybox-slide--previous{opacity:0;transform:rotate(-1turn)}.fancybox-fx-rotate.fancybox-slide--next{opacity:0;transform:rotate(1turn)}.fancybox-fx-rotate.fancybox-slide--current{opacity:1;transform:rotate(0deg)}.fancybox-fx-circular.fancybox-slide--previous{opacity:0;transform:scale3d(0,0,0) translate3d(-100%,0,0)}.fancybox-fx-circular.fancybox-slide--next{opacity:0;transform:scale3d(0,0,0) translate3d(100%,0,0)}.fancybox-fx-circular.fancybox-slide--current{opacity:1;transform:scaleX(1) translateZ(0)}.fancybox-fx-tube.fancybox-slide--previous{transform:translate3d(-100%,0,0) scale(.1) skew(-10deg)}.fancybox-fx-tube.fancybox-slide--next{transform:translate3d(100%,0,0) scale(.1) skew(10deg)}.fancybox-fx-tube.fancybox-slide--current{transform:translateZ(0) scale(1)}@media (max-height:576px){.fancybox-slide{padding-left:6px;padding-right:6px}.fancybox-slide--image{padding:6px 0}.fancybox-close-small{right:-6px}.fancybox-slide--image .fancybox-close-small{background:#4e4e4e;color:#f2f4f6;height:36px;opacity:1;padding:6px;right:0;top:0;width:36px}.fancybox-caption{padding-left:12px;padding-right:12px}@supports (padding:max(0px)){.fancybox-caption{padding-left:max(12px,env(safe-area-inset-left));padding-right:max(12px,env(safe-area-inset-right))}}}.fancybox-share{background:#f4f4f4;border-radius:3px;max-width:90%;padding:30px;text-align:center}.fancybox-share h1{color:#222;font-size:35px;font-weight:700;margin:0 0 20px}.fancybox-share p{margin:0;padding:0}.fancybox-share__button{border:0;border-radius:3px;display:inline-block;font-size:14px;font-weight:700;line-height:40px;margin:0 5px 10px;min-width:130px;padding:0 15px;text-decoration:none;transition:all .2s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap}.fancybox-share__button:link,.fancybox-share__button:visited{color:#fff}.fancybox-share__button:hover{text-decoration:none}.fancybox-share__button--fb{background:#3b5998}.fancybox-share__button--fb:hover{background:#344e86}.fancybox-share__button--pt{background:#bd081d}.fancybox-share__button--pt:hover{background:#aa0719}.fancybox-share__button--tw{background:#1da1f2}.fancybox-share__button--tw:hover{background:#0d95e8}.fancybox-share__button svg{height:25px;margin-right:7px;position:relative;top:-1px;vertical-align:middle;width:25px}.fancybox-share__button svg path{fill:#fff}.fancybox-share__input{background:transparent;border:0;border-bottom:1px solid #d7d7d7;border-radius:0;color:#5d5b5b;font-size:14px;margin:10px 0 0;outline:none;padding:10px 15px;width:100%}.fancybox-thumbs{background:#ddd;bottom:0;display:none;margin:0;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;padding:2px 2px 4px;position:absolute;right:0;-webkit-tap-highlight-color:rgba(0,0,0,0);top:0;width:212px;z-index:99995}.fancybox-thumbs-x{overflow-x:auto;overflow-y:hidden}.fancybox-show-thumbs .fancybox-thumbs{display:block}.fancybox-show-thumbs .fancybox-inner{right:212px}.fancybox-thumbs__list{font-size:0;height:100%;list-style:none;margin:0;overflow-x:hidden;overflow-y:auto;padding:0;position:absolute;position:relative;white-space:nowrap;width:100%}.fancybox-thumbs-x .fancybox-thumbs__list{overflow:hidden}.fancybox-thumbs-y .fancybox-thumbs__list::-webkit-scrollbar{width:7px}.fancybox-thumbs-y .fancybox-thumbs__list::-webkit-scrollbar-track{background:#fff;border-radius:10px;box-shadow:inset 0 0 6px rgba(0,0,0,.3)}.fancybox-thumbs-y .fancybox-thumbs__list::-webkit-scrollbar-thumb{background:#2a2a2a;border-radius:10px}.fancybox-thumbs__list a{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:rgba(0,0,0,.1);background-position:50%;background-repeat:no-repeat;background-size:cover;cursor:pointer;float:left;height:75px;margin:2px;max-height:calc(100% - 8px);max-width:calc(50% - 4px);outline:none;overflow:hidden;padding:0;position:relative;-webkit-tap-highlight-color:transparent;width:100px}.fancybox-thumbs__list a:before{border:6px solid #ff5268;bottom:0;content:"";left:0;opacity:0;position:absolute;right:0;top:0;transition:all .2s cubic-bezier(.25,.46,.45,.94);z-index:99991}.fancybox-thumbs__list a:focus:before{opacity:.5}.fancybox-thumbs__list a.fancybox-thumbs-active:before{opacity:1}@media (max-width:576px){.fancybox-thumbs{width:110px}.fancybox-show-thumbs .fancybox-inner{right:110px}.fancybox-thumbs__list a{max-width:calc(100% - 10px)}} -------------------------------------------------------------------------------- /js/aos.js: -------------------------------------------------------------------------------- 1 | !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.AOS=t():e.AOS=t()}(this,function(){return function(e){function t(o){if(n[o])return n[o].exports;var i=n[o]={exports:{},id:o,loaded:!1};return e[o].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="dist/",t(0)}([function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}var i=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]&&arguments[0];if(e&&(k=!0),k)return w=(0,y.default)(w,j),(0,b.default)(w,j.once),w},S=function(){w=(0,h.default)(),O()},_=function(){w.forEach(function(e,t){e.node.removeAttribute("data-aos"),e.node.removeAttribute("data-aos-easing"),e.node.removeAttribute("data-aos-duration"),e.node.removeAttribute("data-aos-delay")})},E=function(e){return e===!0||"mobile"===e&&p.default.mobile()||"phone"===e&&p.default.phone()||"tablet"===e&&p.default.tablet()||"function"==typeof e&&e()===!0},z=function(e){return j=i(j,e),w=(0,h.default)(),E(j.disable)||x?_():(document.querySelector("body").setAttribute("data-aos-easing",j.easing),document.querySelector("body").setAttribute("data-aos-duration",j.duration),document.querySelector("body").setAttribute("data-aos-delay",j.delay),"DOMContentLoaded"===j.startEvent&&["complete","interactive"].indexOf(document.readyState)>-1?O(!0):"load"===j.startEvent?window.addEventListener(j.startEvent,function(){O(!0)}):document.addEventListener(j.startEvent,function(){O(!0)}),window.addEventListener("resize",(0,f.default)(O,50,!0)),window.addEventListener("orientationchange",(0,f.default)(O,50,!0)),window.addEventListener("scroll",(0,u.default)(function(){(0,b.default)(w,j.once)},99)),document.addEventListener("DOMNodeRemoved",function(e){var t=e.target;t&&1===t.nodeType&&t.hasAttribute&&t.hasAttribute("data-aos")&&(0,f.default)(S,50,!0)}),(0,d.default)("[data-aos]",S),w)};e.exports={init:z,refresh:O,refreshHard:S}},function(e,t){},,,,,function(e,t){(function(t){"use strict";function n(e,t,n){function o(t){var n=b,o=v;return b=v=void 0,k=t,g=e.apply(o,n)}function r(e){return k=e,h=setTimeout(s,t),S?o(e):g}function a(e){var n=e-w,o=e-k,i=t-n;return _?j(i,y-o):i}function c(e){var n=e-w,o=e-k;return void 0===w||n>=t||n<0||_&&o>=y}function s(){var e=O();return c(e)?d(e):void(h=setTimeout(s,a(e)))}function d(e){return h=void 0,E&&b?o(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),k=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(O())}function m(){var e=O(),n=c(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(_)return h=setTimeout(s,t),o(w)}return void 0===h&&(h=setTimeout(s,t)),g}var b,v,y,g,h,w,k=0,S=!1,_=!1,E=!0;if("function"!=typeof e)throw new TypeError(f);return t=u(t)||0,i(n)&&(S=!!n.leading,_="maxWait"in n,y=_?x(u(n.maxWait)||0,t):y,E="trailing"in n?!!n.trailing:E),m.cancel=l,m.flush=p,m}function o(e,t,o){var r=!0,a=!0;if("function"!=typeof e)throw new TypeError(f);return i(o)&&(r="leading"in o?!!o.leading:r,a="trailing"in o?!!o.trailing:a),n(e,t,{leading:r,maxWait:t,trailing:a})}function i(e){var t="undefined"==typeof e?"undefined":c(e);return!!e&&("object"==t||"function"==t)}function r(e){return!!e&&"object"==("undefined"==typeof e?"undefined":c(e))}function a(e){return"symbol"==("undefined"==typeof e?"undefined":c(e))||r(e)&&k.call(e)==d}function u(e){if("number"==typeof e)return e;if(a(e))return s;if(i(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=i(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(l,"");var n=m.test(e);return n||b.test(e)?v(e.slice(2),n?2:8):p.test(e)?s:+e}var c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f="Expected a function",s=NaN,d="[object Symbol]",l=/^\s+|\s+$/g,p=/^[-+]0x[0-9a-f]+$/i,m=/^0b[01]+$/i,b=/^0o[0-7]+$/i,v=parseInt,y="object"==("undefined"==typeof t?"undefined":c(t))&&t&&t.Object===Object&&t,g="object"==("undefined"==typeof self?"undefined":c(self))&&self&&self.Object===Object&&self,h=y||g||Function("return this")(),w=Object.prototype,k=w.toString,x=Math.max,j=Math.min,O=function(){return h.Date.now()};e.exports=o}).call(t,function(){return this}())},function(e,t){(function(t){"use strict";function n(e,t,n){function i(t){var n=b,o=v;return b=v=void 0,O=t,g=e.apply(o,n)}function r(e){return O=e,h=setTimeout(s,t),S?i(e):g}function u(e){var n=e-w,o=e-O,i=t-n;return _?x(i,y-o):i}function f(e){var n=e-w,o=e-O;return void 0===w||n>=t||n<0||_&&o>=y}function s(){var e=j();return f(e)?d(e):void(h=setTimeout(s,u(e)))}function d(e){return h=void 0,E&&b?i(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),O=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(j())}function m(){var e=j(),n=f(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(_)return h=setTimeout(s,t),i(w)}return void 0===h&&(h=setTimeout(s,t)),g}var b,v,y,g,h,w,O=0,S=!1,_=!1,E=!0;if("function"!=typeof e)throw new TypeError(c);return t=a(t)||0,o(n)&&(S=!!n.leading,_="maxWait"in n,y=_?k(a(n.maxWait)||0,t):y,E="trailing"in n?!!n.trailing:E),m.cancel=l,m.flush=p,m}function o(e){var t="undefined"==typeof e?"undefined":u(e);return!!e&&("object"==t||"function"==t)}function i(e){return!!e&&"object"==("undefined"==typeof e?"undefined":u(e))}function r(e){return"symbol"==("undefined"==typeof e?"undefined":u(e))||i(e)&&w.call(e)==s}function a(e){if("number"==typeof e)return e;if(r(e))return f;if(o(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=o(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(d,"");var n=p.test(e);return n||m.test(e)?b(e.slice(2),n?2:8):l.test(e)?f:+e}var u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c="Expected a function",f=NaN,s="[object Symbol]",d=/^\s+|\s+$/g,l=/^[-+]0x[0-9a-f]+$/i,p=/^0b[01]+$/i,m=/^0o[0-7]+$/i,b=parseInt,v="object"==("undefined"==typeof t?"undefined":u(t))&&t&&t.Object===Object&&t,y="object"==("undefined"==typeof self?"undefined":u(self))&&self&&self.Object===Object&&self,g=v||y||Function("return this")(),h=Object.prototype,w=h.toString,k=Math.max,x=Math.min,j=function(){return g.Date.now()};e.exports=n}).call(t,function(){return this}())},function(e,t){"use strict";function n(e,t){a.push({selector:e,fn:t}),!u&&r&&(u=new r(o),u.observe(i.documentElement,{childList:!0,subtree:!0,removedNodes:!0})),o()}function o(){for(var e,t,n=0,o=a.length;ne.position?e.node.classList.add("aos-animate"):"undefined"!=typeof o&&("false"===o||!n&&"true"!==o)&&e.node.classList.remove("aos-animate")},o=function(e,t){var o=window.pageYOffset,i=window.innerHeight;e.forEach(function(e,r){n(e,i+o,t)})};t.default=o},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(12),r=o(i),a=function(e,t){return e.forEach(function(e,n){e.node.classList.add("aos-init"),e.position=(0,r.default)(e.node,t.offset)}),e};t.default=a},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(13),r=o(i),a=function(e,t){var n=0,o=0,i=window.innerHeight,a={offset:e.getAttribute("data-aos-offset"),anchor:e.getAttribute("data-aos-anchor"),anchorPlacement:e.getAttribute("data-aos-anchor-placement")};switch(a.offset&&!isNaN(a.offset)&&(o=parseInt(a.offset)),a.anchor&&document.querySelectorAll(a.anchor)&&(e=document.querySelectorAll(a.anchor)[0]),n=(0,r.default)(e).top,a.anchorPlacement){case"top-bottom":break;case"center-bottom":n+=e.offsetHeight/2;break;case"bottom-bottom":n+=e.offsetHeight;break;case"top-center":n+=i/2;break;case"bottom-center":n+=i/2+e.offsetHeight;break;case"center-center":n+=i/2+e.offsetHeight/2;break;case"top-top":n+=i;break;case"bottom-top":n+=e.offsetHeight+i;break;case"center-top":n+=e.offsetHeight/2+i}return a.anchorPlacement||a.offset||isNaN(t)||(o=t),n+o};t.default=a},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e){for(var t=0,n=0;e&&!isNaN(e.offsetLeft)&&!isNaN(e.offsetTop);)t+=e.offsetLeft-("BODY"!=e.tagName?e.scrollLeft:0),n+=e.offsetTop-("BODY"!=e.tagName?e.scrollTop:0),e=e.offsetParent;return{top:n,left:t}};t.default=n},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e){e=e||document.querySelectorAll("[data-aos]");var t=[];return[].forEach.call(e,function(e,n){t.push({node:e})}),t};t.default=n}])}); -------------------------------------------------------------------------------- /js/imagesloaded.pkgd.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * imagesLoaded PACKAGED v4.1.4 3 | * JavaScript is all like "You images are done yet or what?" 4 | * MIT License 5 | */ 6 | 7 | /** 8 | * EvEmitter v1.1.0 9 | * Lil' event emitter 10 | * MIT License 11 | */ 12 | 13 | /* jshint unused: true, undef: true, strict: true */ 14 | 15 | ( function( global, factory ) { 16 | // universal module definition 17 | /* jshint strict: false */ /* globals define, module, window */ 18 | if ( typeof define == 'function' && define.amd ) { 19 | // AMD - RequireJS 20 | define( 'ev-emitter/ev-emitter',factory ); 21 | } else if ( typeof module == 'object' && module.exports ) { 22 | // CommonJS - Browserify, Webpack 23 | module.exports = factory(); 24 | } else { 25 | // Browser globals 26 | global.EvEmitter = factory(); 27 | } 28 | 29 | }( typeof window != 'undefined' ? window : this, function() { 30 | 31 | 32 | 33 | function EvEmitter() {} 34 | 35 | var proto = EvEmitter.prototype; 36 | 37 | proto.on = function( eventName, listener ) { 38 | if ( !eventName || !listener ) { 39 | return; 40 | } 41 | // set events hash 42 | var events = this._events = this._events || {}; 43 | // set listeners array 44 | var listeners = events[ eventName ] = events[ eventName ] || []; 45 | // only add once 46 | if ( listeners.indexOf( listener ) == -1 ) { 47 | listeners.push( listener ); 48 | } 49 | 50 | return this; 51 | }; 52 | 53 | proto.once = function( eventName, listener ) { 54 | if ( !eventName || !listener ) { 55 | return; 56 | } 57 | // add event 58 | this.on( eventName, listener ); 59 | // set once flag 60 | // set onceEvents hash 61 | var onceEvents = this._onceEvents = this._onceEvents || {}; 62 | // set onceListeners object 63 | var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {}; 64 | // set flag 65 | onceListeners[ listener ] = true; 66 | 67 | return this; 68 | }; 69 | 70 | proto.off = function( eventName, listener ) { 71 | var listeners = this._events && this._events[ eventName ]; 72 | if ( !listeners || !listeners.length ) { 73 | return; 74 | } 75 | var index = listeners.indexOf( listener ); 76 | if ( index != -1 ) { 77 | listeners.splice( index, 1 ); 78 | } 79 | 80 | return this; 81 | }; 82 | 83 | proto.emitEvent = function( eventName, args ) { 84 | var listeners = this._events && this._events[ eventName ]; 85 | if ( !listeners || !listeners.length ) { 86 | return; 87 | } 88 | // copy over to avoid interference if .off() in listener 89 | listeners = listeners.slice(0); 90 | args = args || []; 91 | // once stuff 92 | var onceListeners = this._onceEvents && this._onceEvents[ eventName ]; 93 | 94 | for ( var i=0; i < listeners.length; i++ ) { 95 | var listener = listeners[i] 96 | var isOnce = onceListeners && onceListeners[ listener ]; 97 | if ( isOnce ) { 98 | // remove listener 99 | // remove before trigger to prevent recursion 100 | this.off( eventName, listener ); 101 | // unset once flag 102 | delete onceListeners[ listener ]; 103 | } 104 | // trigger listener 105 | listener.apply( this, args ); 106 | } 107 | 108 | return this; 109 | }; 110 | 111 | proto.allOff = function() { 112 | delete this._events; 113 | delete this._onceEvents; 114 | }; 115 | 116 | return EvEmitter; 117 | 118 | })); 119 | 120 | /*! 121 | * imagesLoaded v4.1.4 122 | * JavaScript is all like "You images are done yet or what?" 123 | * MIT License 124 | */ 125 | 126 | ( function( window, factory ) { 'use strict'; 127 | // universal module definition 128 | 129 | /*global define: false, module: false, require: false */ 130 | 131 | if ( typeof define == 'function' && define.amd ) { 132 | // AMD 133 | define( [ 134 | 'ev-emitter/ev-emitter' 135 | ], function( EvEmitter ) { 136 | return factory( window, EvEmitter ); 137 | }); 138 | } else if ( typeof module == 'object' && module.exports ) { 139 | // CommonJS 140 | module.exports = factory( 141 | window, 142 | require('ev-emitter') 143 | ); 144 | } else { 145 | // browser global 146 | window.imagesLoaded = factory( 147 | window, 148 | window.EvEmitter 149 | ); 150 | } 151 | 152 | })( typeof window !== 'undefined' ? window : this, 153 | 154 | // -------------------------- factory -------------------------- // 155 | 156 | function factory( window, EvEmitter ) { 157 | 158 | 159 | 160 | var $ = window.jQuery; 161 | var console = window.console; 162 | 163 | // -------------------------- helpers -------------------------- // 164 | 165 | // extend objects 166 | function extend( a, b ) { 167 | for ( var prop in b ) { 168 | a[ prop ] = b[ prop ]; 169 | } 170 | return a; 171 | } 172 | 173 | var arraySlice = Array.prototype.slice; 174 | 175 | // turn element or nodeList into an array 176 | function makeArray( obj ) { 177 | if ( Array.isArray( obj ) ) { 178 | // use object if already an array 179 | return obj; 180 | } 181 | 182 | var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number'; 183 | if ( isArrayLike ) { 184 | // convert nodeList to array 185 | return arraySlice.call( obj ); 186 | } 187 | 188 | // array of single index 189 | return [ obj ]; 190 | } 191 | 192 | // -------------------------- imagesLoaded -------------------------- // 193 | 194 | /** 195 | * @param {Array, Element, NodeList, String} elem 196 | * @param {Object or Function} options - if function, use as callback 197 | * @param {Function} onAlways - callback function 198 | */ 199 | function ImagesLoaded( elem, options, onAlways ) { 200 | // coerce ImagesLoaded() without new, to be new ImagesLoaded() 201 | if ( !( this instanceof ImagesLoaded ) ) { 202 | return new ImagesLoaded( elem, options, onAlways ); 203 | } 204 | // use elem as selector string 205 | var queryElem = elem; 206 | if ( typeof elem == 'string' ) { 207 | queryElem = document.querySelectorAll( elem ); 208 | } 209 | // bail if bad element 210 | if ( !queryElem ) { 211 | console.error( 'Bad element for imagesLoaded ' + ( queryElem || elem ) ); 212 | return; 213 | } 214 | 215 | this.elements = makeArray( queryElem ); 216 | this.options = extend( {}, this.options ); 217 | // shift arguments if no options set 218 | if ( typeof options == 'function' ) { 219 | onAlways = options; 220 | } else { 221 | extend( this.options, options ); 222 | } 223 | 224 | if ( onAlways ) { 225 | this.on( 'always', onAlways ); 226 | } 227 | 228 | this.getImages(); 229 | 230 | if ( $ ) { 231 | // add jQuery Deferred object 232 | this.jqDeferred = new $.Deferred(); 233 | } 234 | 235 | // HACK check async to allow time to bind listeners 236 | setTimeout( this.check.bind( this ) ); 237 | } 238 | 239 | ImagesLoaded.prototype = Object.create( EvEmitter.prototype ); 240 | 241 | ImagesLoaded.prototype.options = {}; 242 | 243 | ImagesLoaded.prototype.getImages = function() { 244 | this.images = []; 245 | 246 | // filter & find items if we have an item selector 247 | this.elements.forEach( this.addElementImages, this ); 248 | }; 249 | 250 | /** 251 | * @param {Node} element 252 | */ 253 | ImagesLoaded.prototype.addElementImages = function( elem ) { 254 | // filter siblings 255 | if ( elem.nodeName == 'IMG' ) { 256 | this.addImage( elem ); 257 | } 258 | // get background image on element 259 | if ( this.options.background === true ) { 260 | this.addElementBackgroundImages( elem ); 261 | } 262 | 263 | // find children 264 | // no non-element nodes, #143 265 | var nodeType = elem.nodeType; 266 | if ( !nodeType || !elementNodeTypes[ nodeType ] ) { 267 | return; 268 | } 269 | var childImgs = elem.querySelectorAll('img'); 270 | // concat childElems to filterFound array 271 | for ( var i=0; i < childImgs.length; i++ ) { 272 | var img = childImgs[i]; 273 | this.addImage( img ); 274 | } 275 | 276 | // get child background images 277 | if ( typeof this.options.background == 'string' ) { 278 | var children = elem.querySelectorAll( this.options.background ); 279 | for ( i=0; i < children.length; i++ ) { 280 | var child = children[i]; 281 | this.addElementBackgroundImages( child ); 282 | } 283 | } 284 | }; 285 | 286 | var elementNodeTypes = { 287 | 1: true, 288 | 9: true, 289 | 11: true 290 | }; 291 | 292 | ImagesLoaded.prototype.addElementBackgroundImages = function( elem ) { 293 | var style = getComputedStyle( elem ); 294 | if ( !style ) { 295 | // Firefox returns null if in a hidden iframe https://bugzil.la/548397 296 | return; 297 | } 298 | // get url inside url("...") 299 | var reURL = /url\((['"])?(.*?)\1\)/gi; 300 | var matches = reURL.exec( style.backgroundImage ); 301 | while ( matches !== null ) { 302 | var url = matches && matches[2]; 303 | if ( url ) { 304 | this.addBackground( url, elem ); 305 | } 306 | matches = reURL.exec( style.backgroundImage ); 307 | } 308 | }; 309 | 310 | /** 311 | * @param {Image} img 312 | */ 313 | ImagesLoaded.prototype.addImage = function( img ) { 314 | var loadingImage = new LoadingImage( img ); 315 | this.images.push( loadingImage ); 316 | }; 317 | 318 | ImagesLoaded.prototype.addBackground = function( url, elem ) { 319 | var background = new Background( url, elem ); 320 | this.images.push( background ); 321 | }; 322 | 323 | ImagesLoaded.prototype.check = function() { 324 | var _this = this; 325 | this.progressedCount = 0; 326 | this.hasAnyBroken = false; 327 | // complete if no images 328 | if ( !this.images.length ) { 329 | this.complete(); 330 | return; 331 | } 332 | 333 | function onProgress( image, elem, message ) { 334 | // HACK - Chrome triggers event before object properties have changed. #83 335 | setTimeout( function() { 336 | _this.progress( image, elem, message ); 337 | }); 338 | } 339 | 340 | this.images.forEach( function( loadingImage ) { 341 | loadingImage.once( 'progress', onProgress ); 342 | loadingImage.check(); 343 | }); 344 | }; 345 | 346 | ImagesLoaded.prototype.progress = function( image, elem, message ) { 347 | this.progressedCount++; 348 | this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded; 349 | // progress event 350 | this.emitEvent( 'progress', [ this, image, elem ] ); 351 | if ( this.jqDeferred && this.jqDeferred.notify ) { 352 | this.jqDeferred.notify( this, image ); 353 | } 354 | // check if completed 355 | if ( this.progressedCount == this.images.length ) { 356 | this.complete(); 357 | } 358 | 359 | if ( this.options.debug && console ) { 360 | console.log( 'progress: ' + message, image, elem ); 361 | } 362 | }; 363 | 364 | ImagesLoaded.prototype.complete = function() { 365 | var eventName = this.hasAnyBroken ? 'fail' : 'done'; 366 | this.isComplete = true; 367 | this.emitEvent( eventName, [ this ] ); 368 | this.emitEvent( 'always', [ this ] ); 369 | if ( this.jqDeferred ) { 370 | var jqMethod = this.hasAnyBroken ? 'reject' : 'resolve'; 371 | this.jqDeferred[ jqMethod ]( this ); 372 | } 373 | }; 374 | 375 | // -------------------------- -------------------------- // 376 | 377 | function LoadingImage( img ) { 378 | this.img = img; 379 | } 380 | 381 | LoadingImage.prototype = Object.create( EvEmitter.prototype ); 382 | 383 | LoadingImage.prototype.check = function() { 384 | // If complete is true and browser supports natural sizes, 385 | // try to check for image status manually. 386 | var isComplete = this.getIsImageComplete(); 387 | if ( isComplete ) { 388 | // report based on naturalWidth 389 | this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' ); 390 | return; 391 | } 392 | 393 | // If none of the checks above matched, simulate loading on detached element. 394 | this.proxyImage = new Image(); 395 | this.proxyImage.addEventListener( 'load', this ); 396 | this.proxyImage.addEventListener( 'error', this ); 397 | // bind to image as well for Firefox. #191 398 | this.img.addEventListener( 'load', this ); 399 | this.img.addEventListener( 'error', this ); 400 | this.proxyImage.src = this.img.src; 401 | }; 402 | 403 | LoadingImage.prototype.getIsImageComplete = function() { 404 | // check for non-zero, non-undefined naturalWidth 405 | // fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671 406 | return this.img.complete && this.img.naturalWidth; 407 | }; 408 | 409 | LoadingImage.prototype.confirm = function( isLoaded, message ) { 410 | this.isLoaded = isLoaded; 411 | this.emitEvent( 'progress', [ this, this.img, message ] ); 412 | }; 413 | 414 | // ----- events ----- // 415 | 416 | // trigger specified handler for event type 417 | LoadingImage.prototype.handleEvent = function( event ) { 418 | var method = 'on' + event.type; 419 | if ( this[ method ] ) { 420 | this[ method ]( event ); 421 | } 422 | }; 423 | 424 | LoadingImage.prototype.onload = function() { 425 | this.confirm( true, 'onload' ); 426 | this.unbindEvents(); 427 | }; 428 | 429 | LoadingImage.prototype.onerror = function() { 430 | this.confirm( false, 'onerror' ); 431 | this.unbindEvents(); 432 | }; 433 | 434 | LoadingImage.prototype.unbindEvents = function() { 435 | this.proxyImage.removeEventListener( 'load', this ); 436 | this.proxyImage.removeEventListener( 'error', this ); 437 | this.img.removeEventListener( 'load', this ); 438 | this.img.removeEventListener( 'error', this ); 439 | }; 440 | 441 | // -------------------------- Background -------------------------- // 442 | 443 | function Background( url, element ) { 444 | this.url = url; 445 | this.element = element; 446 | this.img = new Image(); 447 | } 448 | 449 | // inherit LoadingImage prototype 450 | Background.prototype = Object.create( LoadingImage.prototype ); 451 | 452 | Background.prototype.check = function() { 453 | this.img.addEventListener( 'load', this ); 454 | this.img.addEventListener( 'error', this ); 455 | this.img.src = this.url; 456 | // check if image is already complete 457 | var isComplete = this.getIsImageComplete(); 458 | if ( isComplete ) { 459 | this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' ); 460 | this.unbindEvents(); 461 | } 462 | }; 463 | 464 | Background.prototype.unbindEvents = function() { 465 | this.img.removeEventListener( 'load', this ); 466 | this.img.removeEventListener( 'error', this ); 467 | }; 468 | 469 | Background.prototype.confirm = function( isLoaded, message ) { 470 | this.isLoaded = isLoaded; 471 | this.emitEvent( 'progress', [ this, this.element, message ] ); 472 | }; 473 | 474 | // -------------------------- jQuery -------------------------- // 475 | 476 | ImagesLoaded.makeJQueryPlugin = function( jQuery ) { 477 | jQuery = jQuery || window.jQuery; 478 | if ( !jQuery ) { 479 | return; 480 | } 481 | // set local variable 482 | $ = jQuery; 483 | // $().imagesLoaded() 484 | $.fn.imagesLoaded = function( options, callback ) { 485 | var instance = new ImagesLoaded( this, options, callback ); 486 | return instance.jqDeferred.promise( $(this) ); 487 | }; 488 | }; 489 | // try making plugin 490 | ImagesLoaded.makeJQueryPlugin(); 491 | 492 | // -------------------------- -------------------------- // 493 | 494 | return ImagesLoaded; 495 | 496 | }); 497 | -------------------------------------------------------------------------------- /contact.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | Apex 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | Apex. 45 | 46 | 47 | 48 | 49 | 50 | 51 | Home 52 | 53 | Pages 54 | 55 | Portfolio 56 | Single 57 | About 58 | Contact 59 | 60 | 61 | Menu Two 62 | 63 | Sub Menu One 64 | Sub Menu Two 65 | Sub Menu Three 66 | 67 | 68 | Menu Three 69 | 70 | 71 | About us 72 | Elements 73 | 74 | 75 | 76 | Talk to Us 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | Contact 97 | Far far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts. Separated they live. 98 | Get Started 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 43 Raymouth Rd. Baltemoer, London 3910 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | info@yourdomain.com 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | +1 294 3925 3939 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | First name 168 | 169 | 170 | 171 | 172 | 173 | Last name 174 | 175 | 176 | 177 | 178 | 179 | Email address 180 | 181 | 182 | 183 | 184 | Message 185 | 186 | 187 | 188 | Send Message 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | Our Clients 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | Feel Free to Ask Us! :) 248 | Call Now 249 | 250 | 251 | 252 | 253 | 254 | 326 | 327 | 328 | 329 | 330 | 331 | Loading... 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | --------------------------------------------------------------------------------
Far far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts. Separated they live.
Get Started
43 Raymouth Rd. Baltemoer, London 3910
info@yourdomain.com
+1 294 3925 3939
Call Now