├── img ├── bg.jpg ├── about.jpg ├── event-1.jpg ├── event-2.jpg ├── event-3.jpg ├── team-1.jpg ├── team-2.jpg ├── team-3.jpg ├── bg-footer.jpg ├── carousel-1.jpg ├── carousel-2.jpg ├── donation-1.jpg ├── donation-2.jpg ├── donation-3.jpg ├── gallery-1.jpg ├── gallery-2.jpg ├── gallery-3.jpg ├── gallery-4.jpg ├── gallery-5.jpg ├── gallery-6.jpg ├── testimonial-1.jpg ├── testimonial-2.jpg └── testimonial-3.jpg ├── scss └── bootstrap │ └── scss │ ├── helpers │ ├── _clearfix.scss │ ├── _text-truncation.scss │ ├── _visually-hidden.scss │ ├── _stretched-link.scss │ ├── _colored-links.scss │ ├── _ratio.scss │ └── _position.scss │ ├── mixins │ ├── _clearfix.scss │ ├── _lists.scss │ ├── _color-scheme.scss │ ├── _text-truncate.scss │ ├── _resize.scss │ ├── _container.scss │ ├── _alert.scss │ ├── _image.scss │ ├── _box-shadow.scss │ ├── _reset-text.scss │ ├── _list-group.scss │ ├── _deprecate.scss │ ├── _transition.scss │ ├── _pagination.scss │ ├── _table-variants.scss │ ├── _visually-hidden.scss │ ├── _caret.scss │ ├── _gradients.scss │ ├── _border-radius.scss │ ├── _utilities.scss │ ├── _forms.scss │ ├── _grid.scss │ ├── _buttons.scss │ └── _breakpoints.scss │ ├── forms │ ├── _form-text.scss │ ├── _validation.scss │ ├── _labels.scss │ ├── _floating-labels.scss │ ├── _form-select.scss │ ├── _form-range.scss │ ├── _input-group.scss │ ├── _form-check.scss │ └── _form-control.scss │ ├── bootstrap-utilities.scss │ ├── _badge.scss │ ├── bootstrap-reboot.scss │ ├── _breadcrumb.scss │ ├── bootstrap.scss │ ├── bootstrap-grid.scss │ ├── _alert.scss │ ├── utilities │ └── _api.scss │ ├── _buttons.scss │ ├── _accordion.scss │ ├── _button-group.scss │ ├── _card.scss │ ├── _carousel.scss │ └── vendor │ └── _rfs.scss ├── lib ├── waypoints │ ├── links.php │ └── waypoints.min.js ├── owlcarousel │ ├── assets │ │ ├── ajax-loader.gif │ │ ├── owl.video.play.png │ │ ├── owl.theme.green.min.css │ │ ├── owl.theme.default.min.css │ │ ├── owl.theme.default.css │ │ ├── owl.theme.green.css │ │ ├── owl.carousel.min.css │ │ └── owl.carousel.css │ └── LICENSE ├── easing │ ├── easing.min.js │ └── easing.js ├── counterup │ └── counterup.min.js ├── wow │ ├── wow.min.js │ └── wow.js └── animate │ └── animate.min.css ├── charity-organization-website-template.jpg ├── js └── main.js ├── css └── style.css └── 404.html /img/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanonshati/charitize/HEAD/img/bg.jpg -------------------------------------------------------------------------------- /img/about.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanonshati/charitize/HEAD/img/about.jpg -------------------------------------------------------------------------------- /img/event-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanonshati/charitize/HEAD/img/event-1.jpg -------------------------------------------------------------------------------- /img/event-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanonshati/charitize/HEAD/img/event-2.jpg -------------------------------------------------------------------------------- /img/event-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanonshati/charitize/HEAD/img/event-3.jpg -------------------------------------------------------------------------------- /img/team-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanonshati/charitize/HEAD/img/team-1.jpg -------------------------------------------------------------------------------- /img/team-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanonshati/charitize/HEAD/img/team-2.jpg -------------------------------------------------------------------------------- /img/team-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanonshati/charitize/HEAD/img/team-3.jpg -------------------------------------------------------------------------------- /img/bg-footer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanonshati/charitize/HEAD/img/bg-footer.jpg -------------------------------------------------------------------------------- /img/carousel-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanonshati/charitize/HEAD/img/carousel-1.jpg -------------------------------------------------------------------------------- /img/carousel-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanonshati/charitize/HEAD/img/carousel-2.jpg -------------------------------------------------------------------------------- /img/donation-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanonshati/charitize/HEAD/img/donation-1.jpg -------------------------------------------------------------------------------- /img/donation-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanonshati/charitize/HEAD/img/donation-2.jpg -------------------------------------------------------------------------------- /img/donation-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanonshati/charitize/HEAD/img/donation-3.jpg -------------------------------------------------------------------------------- /img/gallery-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanonshati/charitize/HEAD/img/gallery-1.jpg -------------------------------------------------------------------------------- /img/gallery-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanonshati/charitize/HEAD/img/gallery-2.jpg -------------------------------------------------------------------------------- /img/gallery-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanonshati/charitize/HEAD/img/gallery-3.jpg -------------------------------------------------------------------------------- /img/gallery-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanonshati/charitize/HEAD/img/gallery-4.jpg -------------------------------------------------------------------------------- /img/gallery-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanonshati/charitize/HEAD/img/gallery-5.jpg -------------------------------------------------------------------------------- /img/gallery-6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanonshati/charitize/HEAD/img/gallery-6.jpg -------------------------------------------------------------------------------- /scss/bootstrap/scss/helpers/_clearfix.scss: -------------------------------------------------------------------------------- 1 | .clearfix { 2 | @include clearfix(); 3 | } 4 | -------------------------------------------------------------------------------- /img/testimonial-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanonshati/charitize/HEAD/img/testimonial-1.jpg -------------------------------------------------------------------------------- /img/testimonial-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanonshati/charitize/HEAD/img/testimonial-2.jpg -------------------------------------------------------------------------------- /img/testimonial-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanonshati/charitize/HEAD/img/testimonial-3.jpg -------------------------------------------------------------------------------- /lib/waypoints/links.php: -------------------------------------------------------------------------------- 1 | 'lib/waypoints/waypoints.min.js' 4 | ); 5 | ?> 6 | -------------------------------------------------------------------------------- /lib/owlcarousel/assets/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanonshati/charitize/HEAD/lib/owlcarousel/assets/ajax-loader.gif -------------------------------------------------------------------------------- /charity-organization-website-template.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanonshati/charitize/HEAD/charity-organization-website-template.jpg -------------------------------------------------------------------------------- /lib/owlcarousel/assets/owl.video.play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanonshati/charitize/HEAD/lib/owlcarousel/assets/owl.video.play.png -------------------------------------------------------------------------------- /scss/bootstrap/scss/helpers/_text-truncation.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Text truncation 3 | // 4 | 5 | .text-truncate { 6 | @include text-truncate(); 7 | } 8 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/helpers/_visually-hidden.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Visually hidden 3 | // 4 | 5 | .visually-hidden, 6 | .visually-hidden-focusable:not(:focus):not(:focus-within) { 7 | @include visually-hidden(); 8 | } 9 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/mixins/_clearfix.scss: -------------------------------------------------------------------------------- 1 | // scss-docs-start clearfix 2 | @mixin clearfix() { 3 | &::after { 4 | display: block; 5 | clear: both; 6 | content: ""; 7 | } 8 | } 9 | // scss-docs-end clearfix 10 | -------------------------------------------------------------------------------- /scss/bootstrap/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/bootstrap/scss/mixins/_color-scheme.scss: -------------------------------------------------------------------------------- 1 | // scss-docs-start mixin-color-scheme 2 | @mixin color-scheme($name) { 3 | @media (prefers-color-scheme: #{$name}) { 4 | @content; 5 | } 6 | } 7 | // scss-docs-end mixin-color-scheme 8 | -------------------------------------------------------------------------------- /scss/bootstrap/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/bootstrap/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/bootstrap/scss/forms/_form-text.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Form text 3 | // 4 | 5 | .form-text { 6 | margin-top: $form-text-margin-top; 7 | @include font-size($form-text-font-size); 8 | font-style: $form-text-font-style; 9 | font-weight: $form-text-font-weight; 10 | color: $form-text-color; 11 | } 12 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/helpers/_stretched-link.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Stretched link 3 | // 4 | 5 | .stretched-link { 6 | &::#{$stretched-link-pseudo-element} { 7 | position: absolute; 8 | top: 0; 9 | right: 0; 10 | bottom: 0; 11 | left: 0; 12 | z-index: $stretched-link-z-index; 13 | content: ""; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/mixins/_container.scss: -------------------------------------------------------------------------------- 1 | // Container mixins 2 | 3 | @mixin make-container($gutter: $container-padding-x) { 4 | width: 100%; 5 | padding-right: var(--#{$variable-prefix}gutter-x, #{$gutter}); 6 | padding-left: var(--#{$variable-prefix}gutter-x, #{$gutter}); 7 | margin-right: auto; 8 | margin-left: auto; 9 | } 10 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/mixins/_alert.scss: -------------------------------------------------------------------------------- 1 | // scss-docs-start alert-variant-mixin 2 | @mixin alert-variant($background, $border, $color) { 3 | color: $color; 4 | @include gradient-bg($background); 5 | border-color: $border; 6 | 7 | .alert-link { 8 | color: shade-color($color, 20%); 9 | } 10 | } 11 | // scss-docs-end alert-variant-mixin 12 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/helpers/_colored-links.scss: -------------------------------------------------------------------------------- 1 | @each $color, $value in $theme-colors { 2 | .link-#{$color} { 3 | color: $value; 4 | 5 | @if $link-shade-percentage != 0 { 6 | &:hover, 7 | &:focus { 8 | color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage)); 9 | } 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /scss/bootstrap/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 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/bootstrap-utilities.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Utilities v5.0.0 (https://getbootstrap.com/) 3 | * Copyright 2011-2021 The Bootstrap Authors 4 | * Copyright 2011-2021 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6 | */ 7 | 8 | // Configuration 9 | @import "functions"; 10 | @import "variables"; 11 | @import "mixins"; 12 | @import "utilities"; 13 | 14 | // Helpers 15 | @import "helpers"; 16 | 17 | // Utilities 18 | @import "utilities/api"; 19 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/mixins/_box-shadow.scss: -------------------------------------------------------------------------------- 1 | @mixin box-shadow($shadow...) { 2 | @if $enable-shadows { 3 | $result: (); 4 | 5 | @each $value in $shadow { 6 | @if $value != null { 7 | $result: append($result, $value, "comma"); 8 | } 9 | @if $value == none and length($shadow) > 1 { 10 | @warn "The keyword 'none' must be used as a single argument."; 11 | } 12 | } 13 | 14 | @if (length($result) > 0) { 15 | box-shadow: $result; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/forms/_validation.scss: -------------------------------------------------------------------------------- 1 | // Form validation 2 | // 3 | // Provide feedback to users when form field values are valid or invalid. Works 4 | // primarily for client-side validation via scoped `:invalid` and `:valid` 5 | // pseudo-classes but also includes `.is-invalid` and `.is-valid` classes for 6 | // server-side validation. 7 | 8 | // scss-docs-start form-validation-states-loop 9 | @each $state, $data in $form-validation-states { 10 | @include form-validation-state($state, $data...); 11 | } 12 | // scss-docs-end form-validation-states-loop 13 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/helpers/_ratio.scss: -------------------------------------------------------------------------------- 1 | // Credit: Nicolas Gallagher and SUIT CSS. 2 | 3 | .ratio { 4 | position: relative; 5 | width: 100%; 6 | 7 | &::before { 8 | display: block; 9 | padding-top: var(--#{$variable-prefix}aspect-ratio); 10 | content: ""; 11 | } 12 | 13 | > * { 14 | position: absolute; 15 | top: 0; 16 | left: 0; 17 | width: 100%; 18 | height: 100%; 19 | } 20 | } 21 | 22 | @each $key, $ratio in $aspect-ratios { 23 | .ratio-#{$key} { 24 | --#{$variable-prefix}aspect-ratio: #{$ratio}; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/mixins/_reset-text.scss: -------------------------------------------------------------------------------- 1 | @mixin reset-text { 2 | font-family: $font-family-base; 3 | // We deliberately do NOT reset font-size or overflow-wrap / 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/bootstrap/scss/mixins/_list-group.scss: -------------------------------------------------------------------------------- 1 | // List Groups 2 | 3 | // scss-docs-start list-group-mixin 4 | @mixin list-group-item-variant($state, $background, $color) { 5 | .list-group-item-#{$state} { 6 | color: $color; 7 | background-color: $background; 8 | 9 | &.list-group-item-action { 10 | &:hover, 11 | &:focus { 12 | color: $color; 13 | background-color: shade-color($background, 10%); 14 | } 15 | 16 | &.active { 17 | color: $white; 18 | background-color: $color; 19 | border-color: $color; 20 | } 21 | } 22 | } 23 | } 24 | // scss-docs-end list-group-mixin 25 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/helpers/_position.scss: -------------------------------------------------------------------------------- 1 | // Shorthand 2 | 3 | .fixed-top { 4 | position: fixed; 5 | top: 0; 6 | right: 0; 7 | left: 0; 8 | z-index: $zindex-fixed; 9 | } 10 | 11 | .fixed-bottom { 12 | position: fixed; 13 | right: 0; 14 | bottom: 0; 15 | left: 0; 16 | z-index: $zindex-fixed; 17 | } 18 | 19 | // Responsive sticky top 20 | @each $breakpoint in map-keys($grid-breakpoints) { 21 | @include media-breakpoint-up($breakpoint) { 22 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints); 23 | 24 | .sticky#{$infix}-top { 25 | position: sticky; 26 | top: 0; 27 | z-index: $zindex-sticky; 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /scss/bootstrap/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/bootstrap/scss/_badge.scss: -------------------------------------------------------------------------------- 1 | // Base class 2 | // 3 | // Requires one of the contextual, color modifier classes for `color` and 4 | // `background-color`. 5 | 6 | .badge { 7 | display: inline-block; 8 | padding: $badge-padding-y $badge-padding-x; 9 | @include font-size($badge-font-size); 10 | font-weight: $badge-font-weight; 11 | line-height: 1; 12 | color: $badge-color; 13 | text-align: center; 14 | white-space: nowrap; 15 | vertical-align: baseline; 16 | @include border-radius($badge-border-radius); 17 | @include gradient-bg(); 18 | 19 | // Empty badges collapse automatically 20 | &:empty { 21 | display: none; 22 | } 23 | } 24 | 25 | // Quick fix for badges in buttons 26 | .btn .badge { 27 | position: relative; 28 | top: -1px; 29 | } 30 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/bootstrap-reboot.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) 3 | * Copyright 2011-2021 The Bootstrap Authors 4 | * Copyright 2011-2021 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6 | * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) 7 | */ 8 | 9 | @import "functions"; 10 | @import "variables"; 11 | // Prevent the usage of custom properties since we don't add them to `:root` in reboot 12 | $font-family-base: $font-family-sans-serif; // stylelint-disable-line scss/dollar-variable-default 13 | $font-family-code: $font-family-monospace; // stylelint-disable-line scss/dollar-variable-default 14 | @import "mixins"; 15 | @import "reboot"; 16 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/mixins/_transition.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable property-disallowed-list 2 | @mixin transition($transition...) { 3 | @if length($transition) == 0 { 4 | $transition: $transition-base; 5 | } 6 | 7 | @if length($transition) > 1 { 8 | @each $value in $transition { 9 | @if $value == null or $value == none { 10 | @warn "The keyword 'none' or 'null' must be used as a single argument."; 11 | } 12 | } 13 | } 14 | 15 | @if $enable-transitions { 16 | @if nth($transition, 1) != null { 17 | transition: $transition; 18 | } 19 | 20 | @if $enable-reduced-motion and nth($transition, 1) != null and nth($transition, 1) != none { 21 | @media (prefers-reduced-motion: reduce) { 22 | transition: none; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/mixins/_pagination.scss: -------------------------------------------------------------------------------- 1 | // Pagination 2 | 3 | // scss-docs-start pagination-mixin 4 | @mixin pagination-size($padding-y, $padding-x, $font-size, $border-radius) { 5 | .page-link { 6 | padding: $padding-y $padding-x; 7 | @include font-size($font-size); 8 | } 9 | 10 | .page-item { 11 | @if $pagination-margin-start == (-$pagination-border-width) { 12 | &:first-child { 13 | .page-link { 14 | @include border-start-radius($border-radius); 15 | } 16 | } 17 | 18 | &:last-child { 19 | .page-link { 20 | @include border-end-radius($border-radius); 21 | } 22 | } 23 | } @else { 24 | //Add border-radius to all pageLinks in case they have left margin 25 | .page-link { 26 | @include border-radius($border-radius); 27 | } 28 | } 29 | } 30 | } 31 | // scss-docs-end pagination-mixin 32 | -------------------------------------------------------------------------------- /lib/owlcarousel/assets/owl.theme.green.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.2.1 3 | * Copyright 2013-2017 David Deutsch 4 | * Licensed under () 5 | */ 6 | .owl-theme .owl-dots,.owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent}.owl-theme .owl-nav{margin-top:10px}.owl-theme .owl-nav [class*=owl-]{color:#FFF;font-size:14px;margin:5px;padding:4px 7px;background:#D6D6D6;display:inline-block;cursor:pointer;border-radius:3px}.owl-theme .owl-nav [class*=owl-]:hover{background:#4DC7A0;color:#FFF;text-decoration:none}.owl-theme .owl-nav .disabled{opacity:.5;cursor:default}.owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px}.owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1}.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#D6D6D6;display:block;-webkit-backface-visibility:visible;transition:opacity .2s ease;border-radius:30px}.owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#4DC7A0} -------------------------------------------------------------------------------- /lib/owlcarousel/assets/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,.owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent}.owl-theme .owl-nav{margin-top:10px}.owl-theme .owl-nav [class*=owl-]{color:#FFF;font-size:14px;margin:5px;padding:4px 7px;background:#D6D6D6;display:inline-block;cursor:pointer;border-radius:3px}.owl-theme .owl-nav [class*=owl-]:hover{background:#869791;color:#FFF;text-decoration:none}.owl-theme .owl-nav .disabled{opacity:.5;cursor:default}.owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px}.owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1}.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#D6D6D6;display:block;-webkit-backface-visibility:visible;transition:opacity .2s ease;border-radius:30px}.owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#869791} -------------------------------------------------------------------------------- /scss/bootstrap/scss/_breadcrumb.scss: -------------------------------------------------------------------------------- 1 | .breadcrumb { 2 | display: flex; 3 | flex-wrap: wrap; 4 | padding: $breadcrumb-padding-y $breadcrumb-padding-x; 5 | margin-bottom: $breadcrumb-margin-bottom; 6 | @include font-size($breadcrumb-font-size); 7 | list-style: none; 8 | background-color: $breadcrumb-bg; 9 | @include border-radius($breadcrumb-border-radius); 10 | } 11 | 12 | .breadcrumb-item { 13 | // The separator between breadcrumbs (by default, a forward-slash: "/") 14 | + .breadcrumb-item { 15 | padding-left: $breadcrumb-item-padding-x; 16 | 17 | &::before { 18 | float: left; // Suppress inline spacings and underlining of the separator 19 | padding-right: $breadcrumb-item-padding-x; 20 | color: $breadcrumb-divider-color; 21 | content: var(--#{$variable-prefix}breadcrumb-divider, escape-svg($breadcrumb-divider)) #{"/* rtl:"} var(--#{$variable-prefix}breadcrumb-divider, escape-svg($breadcrumb-divider-flipped)) #{"*/"}; 22 | } 23 | } 24 | 25 | &.active { 26 | color: $breadcrumb-active-color; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/mixins/_table-variants.scss: -------------------------------------------------------------------------------- 1 | // scss-docs-start table-variant 2 | @mixin table-variant($state, $background) { 3 | .table-#{$state} { 4 | $color: color-contrast(opaque($body-bg, $background)); 5 | $hover-bg: mix($color, $background, percentage($table-hover-bg-factor)); 6 | $striped-bg: mix($color, $background, percentage($table-striped-bg-factor)); 7 | $active-bg: mix($color, $background, percentage($table-active-bg-factor)); 8 | 9 | --#{$variable-prefix}table-bg: #{$background}; 10 | --#{$variable-prefix}table-striped-bg: #{$striped-bg}; 11 | --#{$variable-prefix}table-striped-color: #{color-contrast($striped-bg)}; 12 | --#{$variable-prefix}table-active-bg: #{$active-bg}; 13 | --#{$variable-prefix}table-active-color: #{color-contrast($active-bg)}; 14 | --#{$variable-prefix}table-hover-bg: #{$hover-bg}; 15 | --#{$variable-prefix}table-hover-color: #{color-contrast($hover-bg)}; 16 | 17 | color: $color; 18 | border-color: mix($color, $background, percentage($table-border-factor)); 19 | } 20 | } 21 | // scss-docs-end table-variant 22 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/mixins/_visually-hidden.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // Hide content visually while keeping it accessible to assistive technologies 4 | // 5 | // See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/ 6 | // See: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/ 7 | 8 | @mixin visually-hidden() { 9 | position: absolute !important; 10 | width: 1px !important; 11 | height: 1px !important; 12 | padding: 0 !important; 13 | margin: -1px !important; // Fix for https://github.com/twbs/bootstrap/issues/25686 14 | overflow: hidden !important; 15 | clip: rect(0, 0, 0, 0) !important; 16 | white-space: nowrap !important; 17 | border: 0 !important; 18 | } 19 | 20 | // Use to only display content when it's focused, or one of its child elements is focused 21 | // (i.e. when focus is within the element/container that the class was applied to) 22 | // 23 | // Useful for "Skip to main content" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 24 | 25 | @mixin visually-hidden-focusable() { 26 | &:not(:focus):not(:focus-within) { 27 | @include visually-hidden(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /lib/owlcarousel/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014 Owl 2 | Modified work Copyright 2016 David Deutsch 3 | 4 | Permission is hereby granted, free of charge, to any person 5 | obtaining a copy of this software and associated documentation 6 | files (the "Software"), to deal in the Software without 7 | restriction, including without limitation the rights to use, 8 | copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the 10 | Software is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 18 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 20 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 21 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23 | OTHER DEALINGS IN THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/bootstrap.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v5.0.0 (https://getbootstrap.com/) 3 | * Copyright 2011-2021 The Bootstrap Authors 4 | * Copyright 2011-2021 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6 | */ 7 | 8 | // scss-docs-start import-stack 9 | // Configuration 10 | @import "functions"; 11 | @import "variables"; 12 | @import "mixins"; 13 | @import "utilities"; 14 | 15 | // Layout & components 16 | @import "root"; 17 | @import "reboot"; 18 | @import "type"; 19 | @import "images"; 20 | @import "containers"; 21 | @import "grid"; 22 | @import "tables"; 23 | @import "forms"; 24 | @import "buttons"; 25 | @import "transitions"; 26 | @import "dropdown"; 27 | @import "button-group"; 28 | @import "nav"; 29 | @import "navbar"; 30 | @import "card"; 31 | @import "accordion"; 32 | @import "breadcrumb"; 33 | @import "pagination"; 34 | @import "badge"; 35 | @import "alert"; 36 | @import "progress"; 37 | @import "list-group"; 38 | @import "close"; 39 | @import "toasts"; 40 | @import "modal"; 41 | @import "tooltip"; 42 | @import "popover"; 43 | @import "carousel"; 44 | @import "spinners"; 45 | @import "offcanvas"; 46 | 47 | // Helpers 48 | @import "helpers"; 49 | 50 | // Utilities 51 | @import "utilities/api"; 52 | // scss-docs-end import-stack 53 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/forms/_labels.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Labels 3 | // 4 | 5 | .form-label { 6 | margin-bottom: $form-label-margin-bottom; 7 | @include font-size($form-label-font-size); 8 | font-style: $form-label-font-style; 9 | font-weight: $form-label-font-weight; 10 | color: $form-label-color; 11 | } 12 | 13 | // For use with horizontal and inline forms, when you need the label (or legend) 14 | // text to align with the form controls. 15 | .col-form-label { 16 | padding-top: add($input-padding-y, $input-border-width); 17 | padding-bottom: add($input-padding-y, $input-border-width); 18 | margin-bottom: 0; // Override the `` default 19 | @include font-size(inherit); // Override the `` default 20 | font-style: $form-label-font-style; 21 | font-weight: $form-label-font-weight; 22 | line-height: $input-line-height; 23 | color: $form-label-color; 24 | } 25 | 26 | .col-form-label-lg { 27 | padding-top: add($input-padding-y-lg, $input-border-width); 28 | padding-bottom: add($input-padding-y-lg, $input-border-width); 29 | @include font-size($input-font-size-lg); 30 | } 31 | 32 | .col-form-label-sm { 33 | padding-top: add($input-padding-y-sm, $input-border-width); 34 | padding-bottom: add($input-padding-y-sm, $input-border-width); 35 | @include font-size($input-font-size-sm); 36 | } 37 | -------------------------------------------------------------------------------- /lib/owlcarousel/assets/owl.theme.default.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.2.1 3 | * Copyright 2013-2017 David Deutsch 4 | * Licensed under () 5 | */ 6 | /* 7 | * Default theme - Owl Carousel CSS File 8 | */ 9 | .owl-theme .owl-nav { 10 | margin-top: 10px; 11 | text-align: center; 12 | -webkit-tap-highlight-color: transparent; } 13 | .owl-theme .owl-nav [class*='owl-'] { 14 | color: #FFF; 15 | font-size: 14px; 16 | margin: 5px; 17 | padding: 4px 7px; 18 | background: #D6D6D6; 19 | display: inline-block; 20 | cursor: pointer; 21 | border-radius: 3px; } 22 | .owl-theme .owl-nav [class*='owl-']:hover { 23 | background: #869791; 24 | color: #FFF; 25 | text-decoration: none; } 26 | .owl-theme .owl-nav .disabled { 27 | opacity: 0.5; 28 | cursor: default; } 29 | 30 | .owl-theme .owl-nav.disabled + .owl-dots { 31 | margin-top: 10px; } 32 | 33 | .owl-theme .owl-dots { 34 | text-align: center; 35 | -webkit-tap-highlight-color: transparent; } 36 | .owl-theme .owl-dots .owl-dot { 37 | display: inline-block; 38 | zoom: 1; 39 | *display: inline; } 40 | .owl-theme .owl-dots .owl-dot span { 41 | width: 10px; 42 | height: 10px; 43 | margin: 5px 7px; 44 | background: #D6D6D6; 45 | display: block; 46 | -webkit-backface-visibility: visible; 47 | transition: opacity 200ms ease; 48 | border-radius: 30px; } 49 | .owl-theme .owl-dots .owl-dot.active span, .owl-theme .owl-dots .owl-dot:hover span { 50 | background: #869791; } 51 | -------------------------------------------------------------------------------- /lib/owlcarousel/assets/owl.theme.green.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.2.1 3 | * Copyright 2013-2017 David Deutsch 4 | * Licensed under () 5 | */ 6 | /* 7 | * Green theme - Owl Carousel CSS File 8 | */ 9 | .owl-theme .owl-nav { 10 | margin-top: 10px; 11 | text-align: center; 12 | -webkit-tap-highlight-color: transparent; } 13 | .owl-theme .owl-nav [class*='owl-'] { 14 | color: #FFF; 15 | font-size: 14px; 16 | margin: 5px; 17 | padding: 4px 7px; 18 | background: #D6D6D6; 19 | display: inline-block; 20 | cursor: pointer; 21 | border-radius: 3px; } 22 | .owl-theme .owl-nav [class*='owl-']:hover { 23 | background: #4DC7A0; 24 | color: #FFF; 25 | text-decoration: none; } 26 | .owl-theme .owl-nav .disabled { 27 | opacity: 0.5; 28 | cursor: default; } 29 | 30 | .owl-theme .owl-nav.disabled + .owl-dots { 31 | margin-top: 10px; } 32 | 33 | .owl-theme .owl-dots { 34 | text-align: center; 35 | -webkit-tap-highlight-color: transparent; } 36 | .owl-theme .owl-dots .owl-dot { 37 | display: inline-block; 38 | zoom: 1; 39 | *display: inline; } 40 | .owl-theme .owl-dots .owl-dot span { 41 | width: 10px; 42 | height: 10px; 43 | margin: 5px 7px; 44 | background: #D6D6D6; 45 | display: block; 46 | -webkit-backface-visibility: visible; 47 | transition: opacity 200ms ease; 48 | border-radius: 30px; } 49 | .owl-theme .owl-dots .owl-dot.active span, .owl-theme .owl-dots .owl-dot:hover span { 50 | background: #4DC7A0; } 51 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/bootstrap-grid.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Grid v5.0.0 (https://getbootstrap.com/) 3 | * Copyright 2011-2021 The Bootstrap Authors 4 | * Copyright 2011-2021 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6 | */ 7 | 8 | $include-column-box-sizing: true !default; 9 | 10 | @import "functions"; 11 | @import "variables"; 12 | 13 | @import "mixins/lists"; 14 | @import "mixins/breakpoints"; 15 | @import "mixins/container"; 16 | @import "mixins/grid"; 17 | @import "mixins/utilities"; 18 | 19 | @import "vendor/rfs"; 20 | 21 | @import "containers"; 22 | @import "grid"; 23 | 24 | @import "utilities"; 25 | // Only use the utilities we need 26 | // stylelint-disable-next-line scss/dollar-variable-default 27 | $utilities: map-get-multiple( 28 | $utilities, 29 | ( 30 | "display", 31 | "order", 32 | "flex", 33 | "flex-direction", 34 | "flex-grow", 35 | "flex-shrink", 36 | "flex-wrap", 37 | "justify-content", 38 | "align-items", 39 | "align-content", 40 | "align-self", 41 | "margin", 42 | "margin-x", 43 | "margin-y", 44 | "margin-top", 45 | "margin-end", 46 | "margin-bottom", 47 | "margin-start", 48 | "negative-margin", 49 | "negative-margin-x", 50 | "negative-margin-y", 51 | "negative-margin-top", 52 | "negative-margin-end", 53 | "negative-margin-bottom", 54 | "negative-margin-start", 55 | "padding", 56 | "padding-x", 57 | "padding-y", 58 | "padding-top", 59 | "padding-end", 60 | "padding-bottom", 61 | "padding-start", 62 | ) 63 | ); 64 | 65 | @import "utilities/api"; 66 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/_alert.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Base styles 3 | // 4 | 5 | .alert { 6 | position: relative; 7 | padding: $alert-padding-y $alert-padding-x; 8 | margin-bottom: $alert-margin-bottom; 9 | border: $alert-border-width solid transparent; 10 | @include border-radius($alert-border-radius); 11 | } 12 | 13 | // Headings for larger alerts 14 | .alert-heading { 15 | // Specified to prevent conflicts of changing $headings-color 16 | color: inherit; 17 | } 18 | 19 | // Provide class for links that match alerts 20 | .alert-link { 21 | font-weight: $alert-link-font-weight; 22 | } 23 | 24 | 25 | // Dismissible alerts 26 | // 27 | // Expand the right padding and account for the close button's positioning. 28 | 29 | .alert-dismissible { 30 | padding-right: $alert-dismissible-padding-r; 31 | 32 | // Adjust close link position 33 | .btn-close { 34 | position: absolute; 35 | top: 0; 36 | right: 0; 37 | z-index: $stretched-link-z-index + 1; 38 | padding: $alert-padding-y * 1.25 $alert-padding-x; 39 | } 40 | } 41 | 42 | 43 | // scss-docs-start alert-modifiers 44 | // Generate contextual modifier classes for colorizing the alert. 45 | 46 | @each $state, $value in $theme-colors { 47 | $alert-background: shift-color($value, $alert-bg-scale); 48 | $alert-border: shift-color($value, $alert-border-scale); 49 | $alert-color: shift-color($value, $alert-color-scale); 50 | @if (contrast-ratio($alert-background, $alert-color) < $min-contrast-ratio) { 51 | $alert-color: mix($value, color-contrast($alert-background), abs($alert-color-scale)); 52 | } 53 | .alert-#{$state} { 54 | @include alert-variant($alert-background, $alert-border, $alert-color); 55 | } 56 | } 57 | // scss-docs-end alert-modifiers 58 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/mixins/_caret.scss: -------------------------------------------------------------------------------- 1 | // scss-docs-start caret-mixins 2 | @mixin caret-down { 3 | border-top: $caret-width solid; 4 | border-right: $caret-width solid transparent; 5 | border-bottom: 0; 6 | border-left: $caret-width solid transparent; 7 | } 8 | 9 | @mixin caret-up { 10 | border-top: 0; 11 | border-right: $caret-width solid transparent; 12 | border-bottom: $caret-width solid; 13 | border-left: $caret-width solid transparent; 14 | } 15 | 16 | @mixin caret-end { 17 | border-top: $caret-width solid transparent; 18 | border-right: 0; 19 | border-bottom: $caret-width solid transparent; 20 | border-left: $caret-width solid; 21 | } 22 | 23 | @mixin caret-start { 24 | border-top: $caret-width solid transparent; 25 | border-right: $caret-width solid; 26 | border-bottom: $caret-width solid transparent; 27 | } 28 | 29 | @mixin caret($direction: down) { 30 | @if $enable-caret { 31 | &::after { 32 | display: inline-block; 33 | margin-left: $caret-spacing; 34 | vertical-align: $caret-vertical-align; 35 | content: ""; 36 | @if $direction == down { 37 | @include caret-down(); 38 | } @else if $direction == up { 39 | @include caret-up(); 40 | } @else if $direction == end { 41 | @include caret-end(); 42 | } 43 | } 44 | 45 | @if $direction == start { 46 | &::after { 47 | display: none; 48 | } 49 | 50 | &::before { 51 | display: inline-block; 52 | margin-right: $caret-spacing; 53 | vertical-align: $caret-vertical-align; 54 | content: ""; 55 | @include caret-start(); 56 | } 57 | } 58 | 59 | &:empty::after { 60 | margin-left: 0; 61 | } 62 | } 63 | } 64 | // scss-docs-end caret-mixins 65 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/utilities/_api.scss: -------------------------------------------------------------------------------- 1 | // Loop over each breakpoint 2 | @each $breakpoint in map-keys($grid-breakpoints) { 3 | 4 | // Generate media query if needed 5 | @include media-breakpoint-up($breakpoint) { 6 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints); 7 | 8 | // Loop over each utility property 9 | @each $key, $utility in $utilities { 10 | // The utility can be disabled with `false`, thus check if the utility is a map first 11 | // Only proceed if responsive media queries are enabled or if it's the base media query 12 | @if type-of($utility) == "map" and (map-get($utility, responsive) or $infix == "") { 13 | @include generate-utility($utility, $infix); 14 | } 15 | } 16 | } 17 | } 18 | 19 | // RFS rescaling 20 | @media (min-width: $rfs-mq-value) { 21 | @each $breakpoint in map-keys($grid-breakpoints) { 22 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints); 23 | 24 | @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) { 25 | // Loop over each utility property 26 | @each $key, $utility in $utilities { 27 | // The utility can be disabled with `false`, thus check if the utility is a map first 28 | // Only proceed if responsive media queries are enabled or if it's the base media query 29 | @if type-of($utility) == "map" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == "") { 30 | @include generate-utility($utility, $infix, true); 31 | } 32 | } 33 | } 34 | } 35 | } 36 | 37 | 38 | // Print utilities 39 | @media print { 40 | @each $key, $utility in $utilities { 41 | // The utility can be disabled with `false`, thus check if the utility is a map first 42 | // Then check if the utility needs print styles 43 | @if type-of($utility) == "map" and map-get($utility, print) == true { 44 | @include generate-utility($utility, "-print"); 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/forms/_floating-labels.scss: -------------------------------------------------------------------------------- 1 | .form-floating { 2 | position: relative; 3 | 4 | > .form-control, 5 | > .form-select { 6 | height: $form-floating-height; 7 | padding: $form-floating-padding-y $form-floating-padding-x; 8 | } 9 | 10 | > label { 11 | position: absolute; 12 | top: 0; 13 | left: 0; 14 | height: 100%; // allow textareas 15 | padding: $form-floating-padding-y $form-floating-padding-x; 16 | pointer-events: none; 17 | border: $input-border-width solid transparent; // Required for aligning label's text with the input as it affects inner box model 18 | transform-origin: 0 0; 19 | @include transition($form-floating-transition); 20 | } 21 | 22 | // stylelint-disable no-duplicate-selectors 23 | > .form-control { 24 | &::placeholder { 25 | color: transparent; 26 | } 27 | 28 | &:focus, 29 | &:not(:placeholder-shown) { 30 | padding-top: $form-floating-input-padding-t; 31 | padding-bottom: $form-floating-input-padding-b; 32 | } 33 | // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped 34 | &:-webkit-autofill { 35 | padding-top: $form-floating-input-padding-t; 36 | padding-bottom: $form-floating-input-padding-b; 37 | } 38 | } 39 | 40 | > .form-select { 41 | padding-top: $form-floating-input-padding-t; 42 | padding-bottom: $form-floating-input-padding-b; 43 | } 44 | 45 | > .form-control:focus, 46 | > .form-control:not(:placeholder-shown), 47 | > .form-select { 48 | ~ label { 49 | opacity: $form-floating-label-opacity; 50 | transform: $form-floating-label-transform; 51 | } 52 | } 53 | // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped 54 | > .form-control:-webkit-autofill { 55 | ~ label { 56 | opacity: $form-floating-label-opacity; 57 | transform: $form-floating-label-transform; 58 | } 59 | } 60 | // stylelint-enable no-duplicate-selectors 61 | } 62 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/mixins/_gradients.scss: -------------------------------------------------------------------------------- 1 | // Gradients 2 | 3 | // scss-docs-start gradient-bg-mixin 4 | @mixin gradient-bg($color: null) { 5 | background-color: $color; 6 | 7 | @if $enable-gradients { 8 | background-image: var(--#{$variable-prefix}gradient); 9 | } 10 | } 11 | // scss-docs-end gradient-bg-mixin 12 | 13 | // scss-docs-start gradient-mixins 14 | // Horizontal gradient, from left to right 15 | // 16 | // Creates two color stops, start and end, by specifying a color and position for each color stop. 17 | @mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) { 18 | background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent); 19 | } 20 | 21 | // Vertical gradient, from top to bottom 22 | // 23 | // Creates two color stops, start and end, by specifying a color and position for each color stop. 24 | @mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: null, $end-percent: null) { 25 | background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent); 26 | } 27 | 28 | @mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) { 29 | background-image: linear-gradient($deg, $start-color, $end-color); 30 | } 31 | 32 | @mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) { 33 | background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color); 34 | } 35 | 36 | @mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) { 37 | background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color); 38 | } 39 | 40 | @mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) { 41 | background-image: radial-gradient(circle, $inner-color, $outer-color); 42 | } 43 | 44 | @mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) { 45 | background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent); 46 | } 47 | // scss-docs-end gradient-mixins 48 | -------------------------------------------------------------------------------- /lib/easing/easing.min.js: -------------------------------------------------------------------------------- 1 | !function(n){"function"==typeof define&&define.amd?define(["jquery"],function(e){return n(e)}):"object"==typeof module&&"object"==typeof module.exports?exports=n(require("jquery")):n(jQuery)}(function(n){function e(n){var e=7.5625,t=2.75;return n<1/t?e*n*n:n<2/t?e*(n-=1.5/t)*n+.75:n<2.5/t?e*(n-=2.25/t)*n+.9375:e*(n-=2.625/t)*n+.984375}void 0!==n.easing&&(n.easing.jswing=n.easing.swing);var t=Math.pow,u=Math.sqrt,r=Math.sin,i=Math.cos,a=Math.PI,c=1.70158,o=1.525*c,s=2*a/3,f=2*a/4.5;n.extend(n.easing,{def:"easeOutQuad",swing:function(e){return n.easing[n.easing.def](e)},easeInQuad:function(n){return n*n},easeOutQuad:function(n){return 1-(1-n)*(1-n)},easeInOutQuad:function(n){return n<.5?2*n*n:1-t(-2*n+2,2)/2},easeInCubic:function(n){return n*n*n},easeOutCubic:function(n){return 1-t(1-n,3)},easeInOutCubic:function(n){return n<.5?4*n*n*n:1-t(-2*n+2,3)/2},easeInQuart:function(n){return n*n*n*n},easeOutQuart:function(n){return 1-t(1-n,4)},easeInOutQuart:function(n){return n<.5?8*n*n*n*n:1-t(-2*n+2,4)/2},easeInQuint:function(n){return n*n*n*n*n},easeOutQuint:function(n){return 1-t(1-n,5)},easeInOutQuint:function(n){return n<.5?16*n*n*n*n*n:1-t(-2*n+2,5)/2},easeInSine:function(n){return 1-i(n*a/2)},easeOutSine:function(n){return r(n*a/2)},easeInOutSine:function(n){return-(i(a*n)-1)/2},easeInExpo:function(n){return 0===n?0:t(2,10*n-10)},easeOutExpo:function(n){return 1===n?1:1-t(2,-10*n)},easeInOutExpo:function(n){return 0===n?0:1===n?1:n<.5?t(2,20*n-10)/2:(2-t(2,-20*n+10))/2},easeInCirc:function(n){return 1-u(1-t(n,2))},easeOutCirc:function(n){return u(1-t(n-1,2))},easeInOutCirc:function(n){return n<.5?(1-u(1-t(2*n,2)))/2:(u(1-t(-2*n+2,2))+1)/2},easeInElastic:function(n){return 0===n?0:1===n?1:-t(2,10*n-10)*r((10*n-10.75)*s)},easeOutElastic:function(n){return 0===n?0:1===n?1:t(2,-10*n)*r((10*n-.75)*s)+1},easeInOutElastic:function(n){return 0===n?0:1===n?1:n<.5?-(t(2,20*n-10)*r((20*n-11.125)*f))/2:t(2,-20*n+10)*r((20*n-11.125)*f)/2+1},easeInBack:function(n){return(c+1)*n*n*n-c*n*n},easeOutBack:function(n){return 1+(c+1)*t(n-1,3)+c*t(n-1,2)},easeInOutBack:function(n){return n<.5?t(2*n,2)*(7.189819*n-o)/2:(t(2*n-2,2)*((o+1)*(2*n-2)+o)+2)/2},easeInBounce:function(n){return 1-e(1-n)},easeOutBounce:e,easeInOutBounce:function(n){return n<.5?(1-e(1-2*n))/2:(1+e(2*n-1))/2}})}); 2 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/forms/_form-select.scss: -------------------------------------------------------------------------------- 1 | // Select 2 | // 3 | // Replaces the browser default select with a custom one, mostly pulled from 4 | // https://primer.github.io/. 5 | 6 | .form-select { 7 | display: block; 8 | width: 100%; 9 | padding: $form-select-padding-y $form-select-indicator-padding $form-select-padding-y $form-select-padding-x; 10 | font-family: $form-select-font-family; 11 | @include font-size($form-select-font-size); 12 | font-weight: $form-select-font-weight; 13 | line-height: $form-select-line-height; 14 | color: $form-select-color; 15 | background-color: $form-select-bg; 16 | background-image: escape-svg($form-select-indicator); 17 | background-repeat: no-repeat; 18 | background-position: $form-select-bg-position; 19 | background-size: $form-select-bg-size; 20 | border: $form-select-border-width solid $form-select-border-color; 21 | @include border-radius($form-select-border-radius, 0); 22 | @include box-shadow($form-select-box-shadow); 23 | appearance: none; 24 | 25 | &:focus { 26 | border-color: $form-select-focus-border-color; 27 | outline: 0; 28 | @if $enable-shadows { 29 | @include box-shadow($form-select-box-shadow, $form-select-focus-box-shadow); 30 | } @else { 31 | // Avoid using mixin so we can pass custom focus shadow properly 32 | box-shadow: $form-select-focus-box-shadow; 33 | } 34 | } 35 | 36 | &[multiple], 37 | &[size]:not([size="1"]) { 38 | padding-right: $form-select-padding-x; 39 | background-image: none; 40 | } 41 | 42 | &:disabled { 43 | color: $form-select-disabled-color; 44 | background-color: $form-select-disabled-bg; 45 | border-color: $form-select-disabled-border-color; 46 | } 47 | 48 | // Remove outline from select box in FF 49 | &:-moz-focusring { 50 | color: transparent; 51 | text-shadow: 0 0 0 $form-select-color; 52 | } 53 | } 54 | 55 | .form-select-sm { 56 | padding-top: $form-select-padding-y-sm; 57 | padding-bottom: $form-select-padding-y-sm; 58 | padding-left: $form-select-padding-x-sm; 59 | @include font-size($form-select-font-size-sm); 60 | } 61 | 62 | .form-select-lg { 63 | padding-top: $form-select-padding-y-lg; 64 | padding-bottom: $form-select-padding-y-lg; 65 | padding-left: $form-select-padding-x-lg; 66 | @include font-size($form-select-font-size-lg); 67 | } 68 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/mixins/_border-radius.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable property-disallowed-list 2 | // Single side border-radius 3 | 4 | // Helper function to replace negative values with 0 5 | @function valid-radius($radius) { 6 | $return: (); 7 | @each $value in $radius { 8 | @if type-of($value) == number { 9 | $return: append($return, max($value, 0)); 10 | } @else { 11 | $return: append($return, $value); 12 | } 13 | } 14 | @return $return; 15 | } 16 | 17 | // scss-docs-start border-radius-mixins 18 | @mixin border-radius($radius: $border-radius, $fallback-border-radius: false) { 19 | @if $enable-rounded { 20 | border-radius: valid-radius($radius); 21 | } 22 | @else if $fallback-border-radius != false { 23 | border-radius: $fallback-border-radius; 24 | } 25 | } 26 | 27 | @mixin border-top-radius($radius: $border-radius) { 28 | @if $enable-rounded { 29 | border-top-left-radius: valid-radius($radius); 30 | border-top-right-radius: valid-radius($radius); 31 | } 32 | } 33 | 34 | @mixin border-end-radius($radius: $border-radius) { 35 | @if $enable-rounded { 36 | border-top-right-radius: valid-radius($radius); 37 | border-bottom-right-radius: valid-radius($radius); 38 | } 39 | } 40 | 41 | @mixin border-bottom-radius($radius: $border-radius) { 42 | @if $enable-rounded { 43 | border-bottom-right-radius: valid-radius($radius); 44 | border-bottom-left-radius: valid-radius($radius); 45 | } 46 | } 47 | 48 | @mixin border-start-radius($radius: $border-radius) { 49 | @if $enable-rounded { 50 | border-top-left-radius: valid-radius($radius); 51 | border-bottom-left-radius: valid-radius($radius); 52 | } 53 | } 54 | 55 | @mixin border-top-start-radius($radius: $border-radius) { 56 | @if $enable-rounded { 57 | border-top-left-radius: valid-radius($radius); 58 | } 59 | } 60 | 61 | @mixin border-top-end-radius($radius: $border-radius) { 62 | @if $enable-rounded { 63 | border-top-right-radius: valid-radius($radius); 64 | } 65 | } 66 | 67 | @mixin border-bottom-end-radius($radius: $border-radius) { 68 | @if $enable-rounded { 69 | border-bottom-right-radius: valid-radius($radius); 70 | } 71 | } 72 | 73 | @mixin border-bottom-start-radius($radius: $border-radius) { 74 | @if $enable-rounded { 75 | border-bottom-left-radius: valid-radius($radius); 76 | } 77 | } 78 | // scss-docs-end border-radius-mixins 79 | -------------------------------------------------------------------------------- /lib/counterup/counterup.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * jquery.counterup.js 2.1.0 3 | * 4 | * Copyright 2013, Benjamin Intal http://gambit.ph @bfintal 5 | * Released under the GPL v2 License 6 | * 7 | * Amended by Jeremy Paris, Ciro Mattia Gonano and others 8 | * 9 | * Date: Feb 24, 2017 10 | */ 11 | (function($){"use strict";$.fn.counterUp=function(options){var settings=$.extend({time:400,delay:10,offset:100,beginAt:0,formatter:false,context:"window",callback:function(){}},options),s;return this.each(function(){var $this=$(this),counter={time:$(this).data("counterup-time")||settings.time,delay:$(this).data("counterup-delay")||settings.delay,offset:$(this).data("counterup-offset")||settings.offset,beginAt:$(this).data("counterup-beginat")||settings.beginAt,context:$(this).data("counterup-context")||settings.context};var counterUpper=function(){var nums=[];var divisions=counter.time/counter.delay;var num=$(this).attr("data-num")?$(this).attr("data-num"):$this.text();var isComma=/[0-9]+,[0-9]+/.test(num);num=num.replace(/,/g,"");var decimalPlaces=(num.split(".")[1]||[]).length;if(counter.beginAt>num)counter.beginAt=num;var isTime=/[0-9]+:[0-9]+:[0-9]+/.test(num);if(isTime){var times=num.split(":"),m=1;s=0;while(times.length>0){s+=m*parseInt(times.pop(),10);m*=60}}for(var i=divisions;i>=counter.beginAt/num*divisions;i--){var newNum=parseFloat(num/divisions*i).toFixed(decimalPlaces);if(isTime){newNum=parseInt(s/divisions*i);var hours=parseInt(newNum/3600)%24;var minutes=parseInt(newNum/60)%60;var seconds=parseInt(newNum%60,10);newNum=(hours<10?"0"+hours:hours)+":"+(minutes<10?"0"+minutes:minutes)+":"+(seconds<10?"0"+seconds:seconds)}if(isComma){while(/(\d+)(\d{3})/.test(newNum.toString())){newNum=newNum.toString().replace(/(\d+)(\d{3})/,"$1"+","+"$2")}}if(settings.formatter){newNum=settings.formatter.call(this,newNum)}nums.unshift(newNum)}$this.data("counterup-nums",nums);$this.text(counter.beginAt);var f=function(){if(!$this.data("counterup-nums")){settings.callback.call(this);return}$this.html($this.data("counterup-nums").shift());if($this.data("counterup-nums").length){setTimeout($this.data("counterup-func"),counter.delay)}else{$this.data("counterup-nums",null);$this.data("counterup-func",null);settings.callback.call(this)}};$this.data("counterup-func",f);setTimeout($this.data("counterup-func"),counter.delay)};$this.waypoint(function(direction){counterUpper();this.destroy()},{offset:counter.offset+"%",context:counter.context})})}})(jQuery); 12 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/mixins/_utilities.scss: -------------------------------------------------------------------------------- 1 | // Utility generator 2 | // Used to generate utilities & print utilities 3 | @mixin generate-utility($utility, $infix, $is-rfs-media-query: false) { 4 | $values: map-get($utility, values); 5 | 6 | // If the values are a list or string, convert it into a map 7 | @if type-of($values) == "string" or type-of(nth($values, 1)) != "list" { 8 | $values: zip($values, $values); 9 | } 10 | 11 | @each $key, $value in $values { 12 | $properties: map-get($utility, property); 13 | 14 | // Multiple properties are possible, for example with vertical or horizontal margins or paddings 15 | @if type-of($properties) == "string" { 16 | $properties: append((), $properties); 17 | } 18 | 19 | // Use custom class if present 20 | $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1)); 21 | $property-class: if($property-class == null, "", $property-class); 22 | 23 | // State params to generate pseudo-classes 24 | $state: if(map-has-key($utility, state), map-get($utility, state), ()); 25 | 26 | $infix: if($property-class == "" and str-slice($infix, 1, 1) == "-", str-slice($infix, 2), $infix); 27 | 28 | // Don't prefix if value key is null (eg. with shadow class) 29 | $property-class-modifier: if($key, if($property-class == "" and $infix == "", "", "-") + $key, ""); 30 | 31 | @if map-get($utility, rfs) { 32 | // Inside the media query 33 | @if $is-rfs-media-query { 34 | $val: rfs-value($value); 35 | 36 | // Do not render anything if fluid and non fluid values are the same 37 | $value: if($val == rfs-fluid-value($value), null, $val); 38 | } 39 | @else { 40 | $value: rfs-fluid-value($value); 41 | } 42 | } 43 | 44 | $is-rtl: map-get($utility, rtl); 45 | 46 | @if $value != null { 47 | @if $is-rtl == false { 48 | /* rtl:begin:remove */ 49 | } 50 | .#{$property-class + $infix + $property-class-modifier} { 51 | @each $property in $properties { 52 | #{$property}: $value if($enable-important-utilities, !important, null); 53 | } 54 | } 55 | 56 | @each $pseudo in $state { 57 | .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} { 58 | @each $property in $properties { 59 | #{$property}: $value if($enable-important-utilities, !important, null); 60 | } 61 | } 62 | } 63 | @if $is-rtl == false { 64 | /* rtl:end:remove */ 65 | } 66 | } 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/_buttons.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Base styles 3 | // 4 | 5 | .btn { 6 | display: inline-block; 7 | font-family: $btn-font-family; 8 | font-weight: $btn-font-weight; 9 | line-height: $btn-line-height; 10 | color: $body-color; 11 | text-align: center; 12 | text-decoration: if($link-decoration == none, null, none); 13 | white-space: $btn-white-space; 14 | vertical-align: middle; 15 | cursor: if($enable-button-pointers, pointer, null); 16 | user-select: none; 17 | background-color: transparent; 18 | border: $btn-border-width solid transparent; 19 | @include button-size($btn-padding-y, $btn-padding-x, $btn-font-size, $btn-border-radius); 20 | @include transition($btn-transition); 21 | 22 | &:hover { 23 | color: $body-color; 24 | text-decoration: if($link-hover-decoration == underline, none, null); 25 | } 26 | 27 | .btn-check:focus + &, 28 | &:focus { 29 | outline: 0; 30 | box-shadow: $btn-focus-box-shadow; 31 | } 32 | 33 | .btn-check:checked + &, 34 | .btn-check:active + &, 35 | &:active, 36 | &.active { 37 | @include box-shadow($btn-active-box-shadow); 38 | 39 | &:focus { 40 | @include box-shadow($btn-focus-box-shadow, $btn-active-box-shadow); 41 | } 42 | } 43 | 44 | &:disabled, 45 | &.disabled, 46 | fieldset:disabled & { 47 | pointer-events: none; 48 | opacity: $btn-disabled-opacity; 49 | @include box-shadow(none); 50 | } 51 | } 52 | 53 | 54 | // 55 | // Alternate buttons 56 | // 57 | 58 | // scss-docs-start btn-variant-loops 59 | @each $color, $value in $theme-colors { 60 | .btn-#{$color} { 61 | @include button-variant($value, $value); 62 | } 63 | } 64 | 65 | @each $color, $value in $theme-colors { 66 | .btn-outline-#{$color} { 67 | @include button-outline-variant($value); 68 | } 69 | } 70 | // scss-docs-end btn-variant-loops 71 | 72 | 73 | // 74 | // Link buttons 75 | // 76 | 77 | // Make a button look and behave like a link 78 | .btn-link { 79 | font-weight: $font-weight-normal; 80 | color: $btn-link-color; 81 | text-decoration: $link-decoration; 82 | 83 | &:hover { 84 | color: $btn-link-hover-color; 85 | text-decoration: $link-hover-decoration; 86 | } 87 | 88 | &:focus { 89 | text-decoration: $link-hover-decoration; 90 | } 91 | 92 | &:disabled, 93 | &.disabled { 94 | color: $btn-link-disabled-color; 95 | } 96 | 97 | // No need for an active state here 98 | } 99 | 100 | 101 | // 102 | // Button Sizes 103 | // 104 | 105 | .btn-lg { 106 | @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $btn-font-size-lg, $btn-border-radius-lg); 107 | } 108 | 109 | .btn-sm { 110 | @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $btn-font-size-sm, $btn-border-radius-sm); 111 | } 112 | -------------------------------------------------------------------------------- /lib/owlcarousel/assets/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%} -------------------------------------------------------------------------------- /scss/bootstrap/scss/forms/_form-range.scss: -------------------------------------------------------------------------------- 1 | // Range 2 | // 3 | // Style range inputs the same across browsers. Vendor-specific rules for pseudo 4 | // elements cannot be mixed. As such, there are no shared styles for focus or 5 | // active states on prefixed selectors. 6 | 7 | .form-range { 8 | width: 100%; 9 | height: add($form-range-thumb-height, $form-range-thumb-focus-box-shadow-width * 2); 10 | padding: 0; // Need to reset padding 11 | background-color: transparent; 12 | appearance: none; 13 | 14 | &:focus { 15 | outline: 0; 16 | 17 | // Pseudo-elements must be split across multiple rulesets to have an effect. 18 | // No box-shadow() mixin for focus accessibility. 19 | &::-webkit-slider-thumb { box-shadow: $form-range-thumb-focus-box-shadow; } 20 | &::-moz-range-thumb { box-shadow: $form-range-thumb-focus-box-shadow; } 21 | } 22 | 23 | &::-moz-focus-outer { 24 | border: 0; 25 | } 26 | 27 | &::-webkit-slider-thumb { 28 | width: $form-range-thumb-width; 29 | height: $form-range-thumb-height; 30 | margin-top: ($form-range-track-height - $form-range-thumb-height) / 2; // Webkit specific 31 | @include gradient-bg($form-range-thumb-bg); 32 | border: $form-range-thumb-border; 33 | @include border-radius($form-range-thumb-border-radius); 34 | @include box-shadow($form-range-thumb-box-shadow); 35 | @include transition($form-range-thumb-transition); 36 | appearance: none; 37 | 38 | &:active { 39 | @include gradient-bg($form-range-thumb-active-bg); 40 | } 41 | } 42 | 43 | &::-webkit-slider-runnable-track { 44 | width: $form-range-track-width; 45 | height: $form-range-track-height; 46 | color: transparent; // Why? 47 | cursor: $form-range-track-cursor; 48 | background-color: $form-range-track-bg; 49 | border-color: transparent; 50 | @include border-radius($form-range-track-border-radius); 51 | @include box-shadow($form-range-track-box-shadow); 52 | } 53 | 54 | &::-moz-range-thumb { 55 | width: $form-range-thumb-width; 56 | height: $form-range-thumb-height; 57 | @include gradient-bg($form-range-thumb-bg); 58 | border: $form-range-thumb-border; 59 | @include border-radius($form-range-thumb-border-radius); 60 | @include box-shadow($form-range-thumb-box-shadow); 61 | @include transition($form-range-thumb-transition); 62 | appearance: none; 63 | 64 | &:active { 65 | @include gradient-bg($form-range-thumb-active-bg); 66 | } 67 | } 68 | 69 | &::-moz-range-track { 70 | width: $form-range-track-width; 71 | height: $form-range-track-height; 72 | color: transparent; 73 | cursor: $form-range-track-cursor; 74 | background-color: $form-range-track-bg; 75 | border-color: transparent; // Firefox specific? 76 | @include border-radius($form-range-track-border-radius); 77 | @include box-shadow($form-range-track-box-shadow); 78 | } 79 | 80 | &:disabled { 81 | pointer-events: none; 82 | 83 | &::-webkit-slider-thumb { 84 | background-color: $form-range-thumb-disabled-bg; 85 | } 86 | 87 | &::-moz-range-thumb { 88 | background-color: $form-range-thumb-disabled-bg; 89 | } 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/_accordion.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Base styles 3 | // 4 | 5 | .accordion-button { 6 | position: relative; 7 | display: flex; 8 | align-items: center; 9 | width: 100%; 10 | padding: $accordion-button-padding-y $accordion-button-padding-x; 11 | @include font-size($font-size-base); 12 | color: $accordion-button-color; 13 | text-align: left; // Reset button style 14 | background-color: $accordion-button-bg; 15 | border: 0; 16 | @include border-radius(0); 17 | overflow-anchor: none; 18 | @include transition($accordion-transition); 19 | 20 | &:not(.collapsed) { 21 | color: $accordion-button-active-color; 22 | background-color: $accordion-button-active-bg; 23 | box-shadow: inset 0 ($accordion-border-width * -1) 0 $accordion-border-color; 24 | 25 | &::after { 26 | background-image: escape-svg($accordion-button-active-icon); 27 | transform: $accordion-icon-transform; 28 | } 29 | } 30 | 31 | // Accordion icon 32 | &::after { 33 | flex-shrink: 0; 34 | width: $accordion-icon-width; 35 | height: $accordion-icon-width; 36 | margin-left: auto; 37 | content: ""; 38 | background-image: escape-svg($accordion-button-icon); 39 | background-repeat: no-repeat; 40 | background-size: $accordion-icon-width; 41 | @include transition($accordion-icon-transition); 42 | } 43 | 44 | &:hover { 45 | z-index: 2; 46 | } 47 | 48 | &:focus { 49 | z-index: 3; 50 | border-color: $accordion-button-focus-border-color; 51 | outline: 0; 52 | box-shadow: $accordion-button-focus-box-shadow; 53 | } 54 | } 55 | 56 | .accordion-header { 57 | margin-bottom: 0; 58 | } 59 | 60 | .accordion-item { 61 | background-color: $accordion-bg; 62 | border: $accordion-border-width solid $accordion-border-color; 63 | 64 | &:first-of-type { 65 | @include border-top-radius($accordion-border-radius); 66 | 67 | .accordion-button { 68 | @include border-top-radius($accordion-inner-border-radius); 69 | } 70 | } 71 | 72 | &:not(:first-of-type) { 73 | border-top: 0; 74 | } 75 | 76 | // Only set a border-radius on the last item if the accordion is collapsed 77 | &:last-of-type { 78 | @include border-bottom-radius($accordion-border-radius); 79 | 80 | .accordion-button { 81 | &.collapsed { 82 | @include border-bottom-radius($accordion-inner-border-radius); 83 | } 84 | } 85 | 86 | .accordion-collapse { 87 | @include border-bottom-radius($accordion-border-radius); 88 | } 89 | } 90 | } 91 | 92 | .accordion-body { 93 | padding: $accordion-body-padding-y $accordion-body-padding-x; 94 | } 95 | 96 | 97 | // Flush accordion items 98 | // 99 | // Remove borders and border-radius to keep accordion items edge-to-edge. 100 | 101 | .accordion-flush { 102 | .accordion-collapse { 103 | border-width: 0; 104 | } 105 | 106 | .accordion-item { 107 | border-right: 0; 108 | border-left: 0; 109 | @include border-radius(0); 110 | 111 | &:first-child { border-top: 0; } 112 | &:last-child { border-bottom: 0; } 113 | 114 | .accordion-button { 115 | @include border-radius(0); 116 | } 117 | } 118 | } 119 | -------------------------------------------------------------------------------- /js/main.js: -------------------------------------------------------------------------------- 1 | (function ($) { 2 | "use strict"; 3 | 4 | // Spinner 5 | var spinner = function () { 6 | setTimeout(function () { 7 | if ($('#spinner').length > 0) { 8 | $('#spinner').removeClass('show'); 9 | } 10 | }, 1); 11 | }; 12 | spinner(); 13 | 14 | 15 | // Initiate the wowjs 16 | new WOW().init(); 17 | 18 | 19 | // Sticky Navbar 20 | $(window).scroll(function () { 21 | if ($(this).scrollTop() > 90) { 22 | $('.nav-bar').addClass('fixed-top').css('padding', '0'); 23 | } else { 24 | $('.nav-bar').removeClass('fixed-top').css('padding', '0px 90px'); 25 | } 26 | }); 27 | 28 | 29 | // Back to top button 30 | $(window).scroll(function () { 31 | if ($(this).scrollTop() > 300) { 32 | $('.back-to-top').fadeIn('slow'); 33 | } else { 34 | $('.back-to-top').fadeOut('slow'); 35 | } 36 | }); 37 | $('.back-to-top').click(function () { 38 | $('html, body').animate({scrollTop: 0}, 1500, 'easeInOutExpo'); 39 | return false; 40 | }); 41 | 42 | 43 | // Modal Video 44 | $(document).ready(function () { 45 | var $videoSrc; 46 | $('.btn-play').click(function () { 47 | $videoSrc = $(this).data("src"); 48 | }); 49 | console.log($videoSrc); 50 | 51 | $('#videoModal').on('shown.bs.modal', function (e) { 52 | $("#video").attr('src', $videoSrc + "?autoplay=1&modestbranding=1&showinfo=0"); 53 | }) 54 | 55 | $('#videoModal').on('hide.bs.modal', function (e) { 56 | $("#video").attr('src', $videoSrc); 57 | }) 58 | }); 59 | 60 | 61 | // Facts counter 62 | $('[data-toggle="counter-up"]').counterUp({ 63 | delay: 10, 64 | time: 2000 65 | }); 66 | 67 | 68 | // Donation progress 69 | $('.donation-item .donation-progress').waypoint(function () { 70 | $('.donation-item .progress .progress-bar').each(function () { 71 | $(this).css("height", $(this).attr("aria-valuenow") + '%'); 72 | }); 73 | }, {offset: '80%'}); 74 | 75 | 76 | // Header carousel 77 | $(".header-carousel").owlCarousel({ 78 | animateOut: 'rotateOutUpRight', 79 | animateIn: 'rotateInDownLeft', 80 | items: 1, 81 | autoplay: true, 82 | smartSpeed: 1000, 83 | dots: false, 84 | loop: true, 85 | nav : true, 86 | navText : [ 87 | '', 88 | '' 89 | ] 90 | }); 91 | 92 | 93 | // Testimonials carousel 94 | $(".testimonial-carousel").owlCarousel({ 95 | items: 1, 96 | autoplay: true, 97 | smartSpeed: 1000, 98 | animateIn: 'fadeIn', 99 | animateOut: 'fadeOut', 100 | dots: false, 101 | loop: true, 102 | nav: true, 103 | navText : [ 104 | '', 105 | '' 106 | ] 107 | }); 108 | 109 | 110 | })(jQuery); 111 | 112 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/_button-group.scss: -------------------------------------------------------------------------------- 1 | // Make the div behave like a button 2 | .btn-group, 3 | .btn-group-vertical { 4 | position: relative; 5 | display: inline-flex; 6 | vertical-align: middle; // match .btn alignment given font-size hack above 7 | 8 | > .btn { 9 | position: relative; 10 | flex: 1 1 auto; 11 | } 12 | 13 | // Bring the hover, focused, and "active" buttons to the front to overlay 14 | // the borders properly 15 | > .btn-check:checked + .btn, 16 | > .btn-check:focus + .btn, 17 | > .btn:hover, 18 | > .btn:focus, 19 | > .btn:active, 20 | > .btn.active { 21 | z-index: 1; 22 | } 23 | } 24 | 25 | // Optional: Group multiple button groups together for a toolbar 26 | .btn-toolbar { 27 | display: flex; 28 | flex-wrap: wrap; 29 | justify-content: flex-start; 30 | 31 | .input-group { 32 | width: auto; 33 | } 34 | } 35 | 36 | .btn-group { 37 | // Prevent double borders when buttons are next to each other 38 | > .btn:not(:first-child), 39 | > .btn-group:not(:first-child) { 40 | margin-left: -$btn-border-width; 41 | } 42 | 43 | // Reset rounded corners 44 | > .btn:not(:last-child):not(.dropdown-toggle), 45 | > .btn-group:not(:last-child) > .btn { 46 | @include border-end-radius(0); 47 | } 48 | 49 | // The left radius should be 0 if the button is: 50 | // - the "third or more" child 51 | // - the second child and the previous element isn't `.btn-check` (making it the first child visually) 52 | // - part of a btn-group which isn't the first child 53 | > .btn:nth-child(n + 3), 54 | > :not(.btn-check) + .btn, 55 | > .btn-group:not(:first-child) > .btn { 56 | @include border-start-radius(0); 57 | } 58 | } 59 | 60 | // Sizing 61 | // 62 | // Remix the default button sizing classes into new ones for easier manipulation. 63 | 64 | .btn-group-sm > .btn { @extend .btn-sm; } 65 | .btn-group-lg > .btn { @extend .btn-lg; } 66 | 67 | 68 | // 69 | // Split button dropdowns 70 | // 71 | 72 | .dropdown-toggle-split { 73 | padding-right: $btn-padding-x * .75; 74 | padding-left: $btn-padding-x * .75; 75 | 76 | &::after, 77 | .dropup &::after, 78 | .dropend &::after { 79 | margin-left: 0; 80 | } 81 | 82 | .dropstart &::before { 83 | margin-right: 0; 84 | } 85 | } 86 | 87 | .btn-sm + .dropdown-toggle-split { 88 | padding-right: $btn-padding-x-sm * .75; 89 | padding-left: $btn-padding-x-sm * .75; 90 | } 91 | 92 | .btn-lg + .dropdown-toggle-split { 93 | padding-right: $btn-padding-x-lg * .75; 94 | padding-left: $btn-padding-x-lg * .75; 95 | } 96 | 97 | 98 | // The clickable button for toggling the menu 99 | // Set the same inset shadow as the :active state 100 | .btn-group.show .dropdown-toggle { 101 | @include box-shadow($btn-active-box-shadow); 102 | 103 | // Show no shadow for `.btn-link` since it has no other button styles. 104 | &.btn-link { 105 | @include box-shadow(none); 106 | } 107 | } 108 | 109 | 110 | // 111 | // Vertical button groups 112 | // 113 | 114 | .btn-group-vertical { 115 | flex-direction: column; 116 | align-items: flex-start; 117 | justify-content: center; 118 | 119 | > .btn, 120 | > .btn-group { 121 | width: 100%; 122 | } 123 | 124 | > .btn:not(:first-child), 125 | > .btn-group:not(:first-child) { 126 | margin-top: -$btn-border-width; 127 | } 128 | 129 | // Reset rounded corners 130 | > .btn:not(:last-child):not(.dropdown-toggle), 131 | > .btn-group:not(:last-child) > .btn { 132 | @include border-bottom-radius(0); 133 | } 134 | 135 | > .btn ~ .btn, 136 | > .btn-group:not(:first-child) > .btn { 137 | @include border-top-radius(0); 138 | } 139 | } 140 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/forms/_input-group.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Base styles 3 | // 4 | 5 | .input-group { 6 | position: relative; 7 | display: flex; 8 | flex-wrap: wrap; // For form validation feedback 9 | align-items: stretch; 10 | width: 100%; 11 | 12 | > .form-control, 13 | > .form-select { 14 | position: relative; // For focus state's z-index 15 | flex: 1 1 auto; 16 | width: 1%; 17 | min-width: 0; // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size 18 | } 19 | 20 | // Bring the "active" form control to the top of surrounding elements 21 | > .form-control:focus, 22 | > .form-select:focus { 23 | z-index: 3; 24 | } 25 | 26 | // Ensure buttons are always above inputs for more visually pleasing borders. 27 | // This isn't needed for `.input-group-text` since it shares the same border-color 28 | // as our inputs. 29 | .btn { 30 | position: relative; 31 | z-index: 2; 32 | 33 | &:focus { 34 | z-index: 3; 35 | } 36 | } 37 | } 38 | 39 | 40 | // Textual addons 41 | // 42 | // Serves as a catch-all element for any text or radio/checkbox input you wish 43 | // to prepend or append to an input. 44 | 45 | .input-group-text { 46 | display: flex; 47 | align-items: center; 48 | padding: $input-group-addon-padding-y $input-group-addon-padding-x; 49 | @include font-size($input-font-size); // Match inputs 50 | font-weight: $input-group-addon-font-weight; 51 | line-height: $input-line-height; 52 | color: $input-group-addon-color; 53 | text-align: center; 54 | white-space: nowrap; 55 | background-color: $input-group-addon-bg; 56 | border: $input-border-width solid $input-group-addon-border-color; 57 | @include border-radius($input-border-radius); 58 | } 59 | 60 | 61 | // Sizing 62 | // 63 | // Remix the default form control sizing classes into new ones for easier 64 | // manipulation. 65 | 66 | .input-group-lg > .form-control, 67 | .input-group-lg > .form-select, 68 | .input-group-lg > .input-group-text, 69 | .input-group-lg > .btn { 70 | padding: $input-padding-y-lg $input-padding-x-lg; 71 | @include font-size($input-font-size-lg); 72 | @include border-radius($input-border-radius-lg); 73 | } 74 | 75 | .input-group-sm > .form-control, 76 | .input-group-sm > .form-select, 77 | .input-group-sm > .input-group-text, 78 | .input-group-sm > .btn { 79 | padding: $input-padding-y-sm $input-padding-x-sm; 80 | @include font-size($input-font-size-sm); 81 | @include border-radius($input-border-radius-sm); 82 | } 83 | 84 | .input-group-lg > .form-select, 85 | .input-group-sm > .form-select { 86 | padding-right: $form-select-padding-x + $form-select-indicator-padding; 87 | } 88 | 89 | 90 | // Rounded corners 91 | // 92 | // These rulesets must come after the sizing ones to properly override sm and lg 93 | // border-radius values when extending. They're more specific than we'd like 94 | // with the `.input-group >` part, but without it, we cannot override the sizing. 95 | 96 | // stylelint-disable-next-line no-duplicate-selectors 97 | .input-group { 98 | &:not(.has-validation) { 99 | > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu), 100 | > .dropdown-toggle:nth-last-child(n + 3) { 101 | @include border-end-radius(0); 102 | } 103 | } 104 | 105 | &.has-validation { 106 | > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu), 107 | > .dropdown-toggle:nth-last-child(n + 4) { 108 | @include border-end-radius(0); 109 | } 110 | } 111 | 112 | $validation-messages: ""; 113 | @each $state in map-keys($form-validation-states) { 114 | $validation-messages: $validation-messages + ":not(." + unquote($state) + "-tooltip)" + ":not(." + unquote($state) + "-feedback)"; 115 | } 116 | 117 | > :not(:first-child):not(.dropdown-menu)#{$validation-messages} { 118 | margin-left: -$input-border-width; 119 | @include border-start-radius(0); 120 | } 121 | } 122 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/mixins/_forms.scss: -------------------------------------------------------------------------------- 1 | // This mixin uses an `if()` technique to be compatible with Dart Sass 2 | // See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details 3 | 4 | // scss-docs-start form-validation-mixins 5 | @mixin form-validation-state-selector($state) { 6 | @if ($state == "valid" or $state == "invalid") { 7 | .was-validated #{if(&, "&", "")}:#{$state}, 8 | #{if(&, "&", "")}.is-#{$state} { 9 | @content; 10 | } 11 | } @else { 12 | #{if(&, "&", "")}.is-#{$state} { 13 | @content; 14 | } 15 | } 16 | } 17 | 18 | @mixin form-validation-state( 19 | $state, 20 | $color, 21 | $icon, 22 | $tooltip-color: color-contrast($color), 23 | $tooltip-bg-color: rgba($color, $form-feedback-tooltip-opacity), 24 | $focus-box-shadow: 0 0 $input-btn-focus-blur $input-focus-width rgba($color, $input-btn-focus-color-opacity) 25 | ) { 26 | .#{$state}-feedback { 27 | display: none; 28 | width: 100%; 29 | margin-top: $form-feedback-margin-top; 30 | @include font-size($form-feedback-font-size); 31 | font-style: $form-feedback-font-style; 32 | color: $color; 33 | } 34 | 35 | .#{$state}-tooltip { 36 | position: absolute; 37 | top: 100%; 38 | z-index: 5; 39 | display: none; 40 | max-width: 100%; // Contain to parent when possible 41 | padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x; 42 | margin-top: .1rem; 43 | @include font-size($form-feedback-tooltip-font-size); 44 | line-height: $form-feedback-tooltip-line-height; 45 | color: $tooltip-color; 46 | background-color: $tooltip-bg-color; 47 | @include border-radius($form-feedback-tooltip-border-radius); 48 | } 49 | 50 | @include form-validation-state-selector($state) { 51 | ~ .#{$state}-feedback, 52 | ~ .#{$state}-tooltip { 53 | display: block; 54 | } 55 | } 56 | 57 | .form-control { 58 | @include form-validation-state-selector($state) { 59 | border-color: $color; 60 | 61 | @if $enable-validation-icons { 62 | padding-right: $input-height-inner; 63 | background-image: escape-svg($icon); 64 | background-repeat: no-repeat; 65 | background-position: right $input-height-inner-quarter center; 66 | background-size: $input-height-inner-half $input-height-inner-half; 67 | } 68 | 69 | &:focus { 70 | border-color: $color; 71 | box-shadow: $focus-box-shadow; 72 | } 73 | } 74 | } 75 | 76 | // stylelint-disable-next-line selector-no-qualifying-type 77 | textarea.form-control { 78 | @include form-validation-state-selector($state) { 79 | @if $enable-validation-icons { 80 | padding-right: $input-height-inner; 81 | background-position: top $input-height-inner-quarter right $input-height-inner-quarter; 82 | } 83 | } 84 | } 85 | 86 | .form-select { 87 | @include form-validation-state-selector($state) { 88 | border-color: $color; 89 | 90 | @if $enable-validation-icons { 91 | &:not([multiple]):not([size]), 92 | &:not([multiple])[size="1"] { 93 | padding-right: $form-select-feedback-icon-padding-end; 94 | background-image: escape-svg($form-select-indicator), escape-svg($icon); 95 | background-position: $form-select-bg-position, $form-select-feedback-icon-position; 96 | background-size: $form-select-bg-size, $form-select-feedback-icon-size; 97 | } 98 | } 99 | 100 | &:focus { 101 | border-color: $color; 102 | box-shadow: $focus-box-shadow; 103 | } 104 | } 105 | } 106 | 107 | .form-check-input { 108 | @include form-validation-state-selector($state) { 109 | border-color: $color; 110 | 111 | &:checked { 112 | background-color: $color; 113 | } 114 | 115 | &:focus { 116 | box-shadow: $focus-box-shadow; 117 | } 118 | 119 | ~ .form-check-label { 120 | color: $color; 121 | } 122 | } 123 | } 124 | .form-check-inline .form-check-input { 125 | ~ .#{$state}-feedback { 126 | margin-left: .5em; 127 | } 128 | } 129 | 130 | .input-group .form-control, 131 | .input-group .form-select { 132 | @include form-validation-state-selector($state) { 133 | z-index: 3; 134 | } 135 | } 136 | } 137 | // scss-docs-end form-validation-mixins 138 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/mixins/_grid.scss: -------------------------------------------------------------------------------- 1 | /// Grid system 2 | // 3 | // Generate semantic grid columns with these mixins. 4 | 5 | @mixin make-row($gutter: $grid-gutter-width) { 6 | --#{$variable-prefix}gutter-x: #{$gutter}; 7 | --#{$variable-prefix}gutter-y: 0; 8 | display: flex; 9 | flex-wrap: wrap; 10 | margin-top: calc(var(--#{$variable-prefix}gutter-y) * -1); // stylelint-disable-line function-disallowed-list 11 | margin-right: calc(var(--#{$variable-prefix}gutter-x) / -2); // stylelint-disable-line function-disallowed-list 12 | margin-left: calc(var(--#{$variable-prefix}gutter-x) / -2); // stylelint-disable-line function-disallowed-list 13 | } 14 | 15 | @mixin make-col-ready($gutter: $grid-gutter-width) { 16 | // Add box sizing if only the grid is loaded 17 | box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null); 18 | // Prevent columns from becoming too narrow when at smaller grid tiers by 19 | // always setting `width: 100%;`. This works because we set the width 20 | // later on to override this initial width. 21 | flex-shrink: 0; 22 | width: 100%; 23 | max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid 24 | padding-right: calc(var(--#{$variable-prefix}gutter-x) / 2); // stylelint-disable-line function-disallowed-list 25 | padding-left: calc(var(--#{$variable-prefix}gutter-x) / 2); // stylelint-disable-line function-disallowed-list 26 | margin-top: var(--#{$variable-prefix}gutter-y); 27 | } 28 | 29 | @mixin make-col($size: false, $columns: $grid-columns) { 30 | @if $size { 31 | flex: 0 0 auto; 32 | width: percentage($size / $columns); 33 | } @else { 34 | flex: 1 1 0; 35 | max-width: 100%; 36 | } 37 | } 38 | 39 | @mixin make-col-auto() { 40 | flex: 0 0 auto; 41 | width: auto; 42 | } 43 | 44 | @mixin make-col-offset($size, $columns: $grid-columns) { 45 | $num: $size / $columns; 46 | margin-left: if($num == 0, 0, percentage($num)); 47 | } 48 | 49 | // Row columns 50 | // 51 | // Specify on a parent element(e.g., .row) to force immediate children into NN 52 | // numberof columns. Supports wrapping to new lines, but does not do a Masonry 53 | // style grid. 54 | @mixin row-cols($count) { 55 | > * { 56 | flex: 0 0 auto; 57 | width: 100% / $count; 58 | } 59 | } 60 | 61 | // Framework grid generation 62 | // 63 | // Used only by Bootstrap to generate the correct number of grid classes given 64 | // any value of `$grid-columns`. 65 | 66 | @mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) { 67 | @each $breakpoint in map-keys($breakpoints) { 68 | $infix: breakpoint-infix($breakpoint, $breakpoints); 69 | 70 | @include media-breakpoint-up($breakpoint, $breakpoints) { 71 | // Provide basic `.col-{bp}` classes for equal-width flexbox columns 72 | .col#{$infix} { 73 | flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4 74 | } 75 | 76 | .row-cols#{$infix}-auto > * { 77 | @include make-col-auto(); 78 | } 79 | 80 | @if $grid-row-columns > 0 { 81 | @for $i from 1 through $grid-row-columns { 82 | .row-cols#{$infix}-#{$i} { 83 | @include row-cols($i); 84 | } 85 | } 86 | } 87 | 88 | .col#{$infix}-auto { 89 | @include make-col-auto(); 90 | } 91 | 92 | @if $columns > 0 { 93 | @for $i from 1 through $columns { 94 | .col#{$infix}-#{$i} { 95 | @include make-col($i, $columns); 96 | } 97 | } 98 | 99 | // `$columns - 1` because offsetting by the width of an entire row isn't possible 100 | @for $i from 0 through ($columns - 1) { 101 | @if not ($infix == "" and $i == 0) { // Avoid emitting useless .offset-0 102 | .offset#{$infix}-#{$i} { 103 | @include make-col-offset($i, $columns); 104 | } 105 | } 106 | } 107 | } 108 | 109 | // Gutters 110 | // 111 | // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns. 112 | @each $key, $value in $gutters { 113 | .g#{$infix}-#{$key}, 114 | .gx#{$infix}-#{$key} { 115 | --#{$variable-prefix}gutter-x: #{$value}; 116 | } 117 | 118 | .g#{$infix}-#{$key}, 119 | .gy#{$infix}-#{$key} { 120 | --#{$variable-prefix}gutter-y: #{$value}; 121 | } 122 | } 123 | } 124 | } 125 | } 126 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/forms/_form-check.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Check/radio 3 | // 4 | 5 | .form-check { 6 | display: block; 7 | min-height: $form-check-min-height; 8 | padding-left: $form-check-padding-start; 9 | margin-bottom: $form-check-margin-bottom; 10 | 11 | .form-check-input { 12 | float: left; 13 | margin-left: $form-check-padding-start * -1; 14 | } 15 | } 16 | 17 | .form-check-input { 18 | width: $form-check-input-width; 19 | height: $form-check-input-width; 20 | margin-top: ($line-height-base - $form-check-input-width) / 2; // line-height minus check height 21 | vertical-align: top; 22 | background-color: $form-check-input-bg; 23 | background-repeat: no-repeat; 24 | background-position: center; 25 | background-size: contain; 26 | border: $form-check-input-border; 27 | appearance: none; 28 | color-adjust: exact; // Keep themed appearance for print 29 | @include transition($form-check-transition); 30 | 31 | &[type="checkbox"] { 32 | @include border-radius($form-check-input-border-radius); 33 | } 34 | 35 | &[type="radio"] { 36 | // stylelint-disable-next-line property-disallowed-list 37 | border-radius: $form-check-radio-border-radius; 38 | } 39 | 40 | &:active { 41 | filter: $form-check-input-active-filter; 42 | } 43 | 44 | &:focus { 45 | border-color: $form-check-input-focus-border; 46 | outline: 0; 47 | box-shadow: $form-check-input-focus-box-shadow; 48 | } 49 | 50 | &:checked { 51 | background-color: $form-check-input-checked-bg-color; 52 | border-color: $form-check-input-checked-border-color; 53 | 54 | &[type="checkbox"] { 55 | @if $enable-gradients { 56 | background-image: escape-svg($form-check-input-checked-bg-image), var(--#{$variable-prefix}gradient); 57 | } @else { 58 | background-image: escape-svg($form-check-input-checked-bg-image); 59 | } 60 | } 61 | 62 | &[type="radio"] { 63 | @if $enable-gradients { 64 | background-image: escape-svg($form-check-radio-checked-bg-image), var(--#{$variable-prefix}gradient); 65 | } @else { 66 | background-image: escape-svg($form-check-radio-checked-bg-image); 67 | } 68 | } 69 | } 70 | 71 | &[type="checkbox"]:indeterminate { 72 | background-color: $form-check-input-indeterminate-bg-color; 73 | border-color: $form-check-input-indeterminate-border-color; 74 | 75 | @if $enable-gradients { 76 | background-image: escape-svg($form-check-input-indeterminate-bg-image), var(--#{$variable-prefix}gradient); 77 | } @else { 78 | background-image: escape-svg($form-check-input-indeterminate-bg-image); 79 | } 80 | } 81 | 82 | &:disabled { 83 | pointer-events: none; 84 | filter: none; 85 | opacity: $form-check-input-disabled-opacity; 86 | } 87 | 88 | // Use disabled attribute in addition of :disabled pseudo-class 89 | // See: https://github.com/twbs/bootstrap/issues/28247 90 | &[disabled], 91 | &:disabled { 92 | ~ .form-check-label { 93 | opacity: $form-check-label-disabled-opacity; 94 | } 95 | } 96 | } 97 | 98 | .form-check-label { 99 | color: $form-check-label-color; 100 | cursor: $form-check-label-cursor; 101 | } 102 | 103 | // 104 | // Switch 105 | // 106 | 107 | .form-switch { 108 | padding-left: $form-switch-padding-start; 109 | 110 | .form-check-input { 111 | width: $form-switch-width; 112 | margin-left: $form-switch-padding-start * -1; 113 | background-image: escape-svg($form-switch-bg-image); 114 | background-position: left center; 115 | @include border-radius($form-switch-border-radius); 116 | @include transition($form-switch-transition); 117 | 118 | &:focus { 119 | background-image: escape-svg($form-switch-focus-bg-image); 120 | } 121 | 122 | &:checked { 123 | background-position: $form-switch-checked-bg-position; 124 | 125 | @if $enable-gradients { 126 | background-image: escape-svg($form-switch-checked-bg-image), var(--#{$variable-prefix}gradient); 127 | } @else { 128 | background-image: escape-svg($form-switch-checked-bg-image); 129 | } 130 | } 131 | } 132 | } 133 | 134 | .form-check-inline { 135 | display: inline-block; 136 | margin-right: $form-check-inline-margin-end; 137 | } 138 | 139 | .btn-check { 140 | position: absolute; 141 | clip: rect(0, 0, 0, 0); 142 | pointer-events: none; 143 | 144 | &[disabled], 145 | &:disabled { 146 | + .btn { 147 | pointer-events: none; 148 | filter: none; 149 | opacity: $form-check-btn-check-disabled-opacity; 150 | } 151 | } 152 | } 153 | -------------------------------------------------------------------------------- /scss/bootstrap/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 | // scss-docs-start btn-variant-mixin 7 | @mixin button-variant( 8 | $background, 9 | $border, 10 | $color: color-contrast($background), 11 | $hover-background: if($color == $color-contrast-light, shade-color($background, $btn-hover-bg-shade-amount), tint-color($background, $btn-hover-bg-tint-amount)), 12 | $hover-border: if($color == $color-contrast-light, shade-color($border, $btn-hover-border-shade-amount), tint-color($border, $btn-hover-border-tint-amount)), 13 | $hover-color: color-contrast($hover-background), 14 | $active-background: if($color == $color-contrast-light, shade-color($background,$btn-active-bg-shade-amount), tint-color($background, $btn-active-bg-tint-amount)), 15 | $active-border: if($color == $color-contrast-light, shade-color($border, $btn-active-border-shade-amount), tint-color($border, $btn-active-border-tint-amount)), 16 | $active-color: color-contrast($active-background), 17 | $disabled-background: $background, 18 | $disabled-border: $border, 19 | $disabled-color: color-contrast($disabled-background) 20 | ) { 21 | color: $color; 22 | @include gradient-bg($background); 23 | border-color: $border; 24 | @include box-shadow($btn-box-shadow); 25 | 26 | &:hover { 27 | color: $hover-color; 28 | @include gradient-bg($hover-background); 29 | border-color: $hover-border; 30 | } 31 | 32 | .btn-check:focus + &, 33 | &:focus { 34 | color: $hover-color; 35 | @include gradient-bg($hover-background); 36 | border-color: $hover-border; 37 | @if $enable-shadows { 38 | @include box-shadow($btn-box-shadow, 0 0 0 $btn-focus-width rgba(mix($color, $border, 15%), .5)); 39 | } @else { 40 | // Avoid using mixin so we can pass custom focus shadow properly 41 | box-shadow: 0 0 0 $btn-focus-width rgba(mix($color, $border, 15%), .5); 42 | } 43 | } 44 | 45 | .btn-check:checked + &, 46 | .btn-check:active + &, 47 | &:active, 48 | &.active, 49 | .show > &.dropdown-toggle { 50 | color: $active-color; 51 | background-color: $active-background; 52 | // Remove CSS gradients if they're enabled 53 | background-image: if($enable-gradients, none, null); 54 | border-color: $active-border; 55 | 56 | &:focus { 57 | @if $enable-shadows { 58 | @include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba(mix($color, $border, 15%), .5)); 59 | } @else { 60 | // Avoid using mixin so we can pass custom focus shadow properly 61 | box-shadow: 0 0 0 $btn-focus-width rgba(mix($color, $border, 15%), .5); 62 | } 63 | } 64 | } 65 | 66 | &:disabled, 67 | &.disabled { 68 | color: $disabled-color; 69 | background-color: $disabled-background; 70 | // Remove CSS gradients if they're enabled 71 | background-image: if($enable-gradients, none, null); 72 | border-color: $disabled-border; 73 | } 74 | } 75 | // scss-docs-end btn-variant-mixin 76 | 77 | // scss-docs-start btn-outline-variant-mixin 78 | @mixin button-outline-variant( 79 | $color, 80 | $color-hover: color-contrast($color), 81 | $active-background: $color, 82 | $active-border: $color, 83 | $active-color: color-contrast($active-background) 84 | ) { 85 | color: $color; 86 | border-color: $color; 87 | 88 | &:hover { 89 | color: $color-hover; 90 | background-color: $active-background; 91 | border-color: $active-border; 92 | } 93 | 94 | .btn-check:focus + &, 95 | &:focus { 96 | box-shadow: 0 0 0 $btn-focus-width rgba($color, .5); 97 | } 98 | 99 | .btn-check:checked + &, 100 | .btn-check:active + &, 101 | &:active, 102 | &.active, 103 | &.dropdown-toggle.show { 104 | color: $active-color; 105 | background-color: $active-background; 106 | border-color: $active-border; 107 | 108 | &:focus { 109 | @if $enable-shadows { 110 | @include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($color, .5)); 111 | } @else { 112 | // Avoid using mixin so we can pass custom focus shadow properly 113 | box-shadow: 0 0 0 $btn-focus-width rgba($color, .5); 114 | } 115 | } 116 | } 117 | 118 | &:disabled, 119 | &.disabled { 120 | color: $color; 121 | background-color: transparent; 122 | } 123 | } 124 | // scss-docs-end btn-outline-variant-mixin 125 | 126 | // scss-docs-start btn-size-mixin 127 | @mixin button-size($padding-y, $padding-x, $font-size, $border-radius) { 128 | padding: $padding-y $padding-x; 129 | @include font-size($font-size); 130 | // Manually declare to provide an override to the browser default 131 | @include border-radius($border-radius, 0); 132 | } 133 | // scss-docs-end btn-size-mixin 134 | -------------------------------------------------------------------------------- /lib/owlcarousel/assets/owl.carousel.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.2.1 3 | * Copyright 2013-2017 David Deutsch 4 | * Licensed under () 5 | */ 6 | /* 7 | * Owl Carousel - Core 8 | */ 9 | .owl-carousel { 10 | display: none; 11 | width: 100%; 12 | -webkit-tap-highlight-color: transparent; 13 | /* position relative and z-index fix webkit rendering fonts issue */ 14 | position: relative; 15 | z-index: 1; } 16 | .owl-carousel .owl-stage { 17 | position: relative; 18 | -ms-touch-action: pan-Y; 19 | -moz-backface-visibility: hidden; 20 | /* fix firefox animation glitch */ } 21 | .owl-carousel .owl-stage:after { 22 | content: "."; 23 | display: block; 24 | clear: both; 25 | visibility: hidden; 26 | line-height: 0; 27 | height: 0; } 28 | .owl-carousel .owl-stage-outer { 29 | position: relative; 30 | overflow: hidden; 31 | /* fix for flashing background */ 32 | -webkit-transform: translate3d(0px, 0px, 0px); } 33 | .owl-carousel .owl-wrapper, 34 | .owl-carousel .owl-item { 35 | -webkit-backface-visibility: hidden; 36 | -moz-backface-visibility: hidden; 37 | -ms-backface-visibility: hidden; 38 | -webkit-transform: translate3d(0, 0, 0); 39 | -moz-transform: translate3d(0, 0, 0); 40 | -ms-transform: translate3d(0, 0, 0); } 41 | .owl-carousel .owl-item { 42 | position: relative; 43 | min-height: 1px; 44 | float: left; 45 | -webkit-backface-visibility: hidden; 46 | -webkit-tap-highlight-color: transparent; 47 | -webkit-touch-callout: none; } 48 | .owl-carousel .owl-item img { 49 | display: block; 50 | width: 100%; } 51 | .owl-carousel .owl-nav.disabled, 52 | .owl-carousel .owl-dots.disabled { 53 | display: none; } 54 | .owl-carousel .owl-nav .owl-prev, 55 | .owl-carousel .owl-nav .owl-next, 56 | .owl-carousel .owl-dot { 57 | cursor: pointer; 58 | cursor: hand; 59 | -webkit-user-select: none; 60 | -khtml-user-select: none; 61 | -moz-user-select: none; 62 | -ms-user-select: none; 63 | user-select: none; } 64 | .owl-carousel.owl-loaded { 65 | display: block; } 66 | .owl-carousel.owl-loading { 67 | opacity: 0; 68 | display: block; } 69 | .owl-carousel.owl-hidden { 70 | opacity: 0; } 71 | .owl-carousel.owl-refresh .owl-item { 72 | visibility: hidden; } 73 | .owl-carousel.owl-drag .owl-item { 74 | -webkit-user-select: none; 75 | -moz-user-select: none; 76 | -ms-user-select: none; 77 | user-select: none; } 78 | .owl-carousel.owl-grab { 79 | cursor: move; 80 | cursor: grab; } 81 | .owl-carousel.owl-rtl { 82 | direction: rtl; } 83 | .owl-carousel.owl-rtl .owl-item { 84 | float: right; } 85 | 86 | /* No Js */ 87 | .no-js .owl-carousel { 88 | display: block; } 89 | 90 | /* 91 | * Owl Carousel - Animate Plugin 92 | */ 93 | .owl-carousel .animated { 94 | animation-duration: 1000ms; 95 | animation-fill-mode: both; } 96 | 97 | .owl-carousel .owl-animated-in { 98 | z-index: 0; } 99 | 100 | .owl-carousel .owl-animated-out { 101 | z-index: 1; } 102 | 103 | .owl-carousel .fadeOut { 104 | animation-name: fadeOut; } 105 | 106 | @keyframes fadeOut { 107 | 0% { 108 | opacity: 1; } 109 | 100% { 110 | opacity: 0; } } 111 | 112 | /* 113 | * Owl Carousel - Auto Height Plugin 114 | */ 115 | .owl-height { 116 | transition: height 500ms ease-in-out; } 117 | 118 | /* 119 | * Owl Carousel - Lazy Load Plugin 120 | */ 121 | .owl-carousel .owl-item .owl-lazy { 122 | opacity: 0; 123 | transition: opacity 400ms ease; } 124 | 125 | .owl-carousel .owl-item img.owl-lazy { 126 | transform-style: preserve-3d; } 127 | 128 | /* 129 | * Owl Carousel - Video Plugin 130 | */ 131 | .owl-carousel .owl-video-wrapper { 132 | position: relative; 133 | height: 100%; 134 | background: #000; } 135 | 136 | .owl-carousel .owl-video-play-icon { 137 | position: absolute; 138 | height: 80px; 139 | width: 80px; 140 | left: 50%; 141 | top: 50%; 142 | margin-left: -40px; 143 | margin-top: -40px; 144 | background: url("owl.video.play.png") no-repeat; 145 | cursor: pointer; 146 | z-index: 1; 147 | -webkit-backface-visibility: hidden; 148 | transition: transform 100ms ease; } 149 | 150 | .owl-carousel .owl-video-play-icon:hover { 151 | -ms-transform: scale(1.3, 1.3); 152 | transform: scale(1.3, 1.3); } 153 | 154 | .owl-carousel .owl-video-playing .owl-video-tn, 155 | .owl-carousel .owl-video-playing .owl-video-play-icon { 156 | display: none; } 157 | 158 | .owl-carousel .owl-video-tn { 159 | opacity: 0; 160 | height: 100%; 161 | background-position: center center; 162 | background-repeat: no-repeat; 163 | background-size: contain; 164 | transition: opacity 400ms ease; } 165 | 166 | .owl-carousel .owl-video-frame { 167 | position: relative; 168 | z-index: 1; 169 | height: 100%; 170 | width: 100%; } 171 | -------------------------------------------------------------------------------- /lib/easing/easing.js: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery Easing v1.4.1 - http://gsgd.co.uk/sandbox/jquery/easing/ 3 | * Open source under the BSD License. 4 | * Copyright © 2008 George McGinley Smith 5 | * All rights reserved. 6 | * https://raw.github.com/gdsmith/jquery-easing/master/LICENSE 7 | */ 8 | 9 | (function (factory) { 10 | if (typeof define === "function" && define.amd) { 11 | define(['jquery'], function ($) { 12 | return factory($); 13 | }); 14 | } else if (typeof module === "object" && typeof module.exports === "object") { 15 | exports = factory(require('jquery')); 16 | } else { 17 | factory(jQuery); 18 | } 19 | })(function($){ 20 | 21 | // Preserve the original jQuery "swing" easing as "jswing" 22 | if (typeof $.easing !== 'undefined') { 23 | $.easing['jswing'] = $.easing['swing']; 24 | } 25 | 26 | var pow = Math.pow, 27 | sqrt = Math.sqrt, 28 | sin = Math.sin, 29 | cos = Math.cos, 30 | PI = Math.PI, 31 | c1 = 1.70158, 32 | c2 = c1 * 1.525, 33 | c3 = c1 + 1, 34 | c4 = ( 2 * PI ) / 3, 35 | c5 = ( 2 * PI ) / 4.5; 36 | 37 | // x is the fraction of animation progress, in the range 0..1 38 | function bounceOut(x) { 39 | var n1 = 7.5625, 40 | d1 = 2.75; 41 | if ( x < 1/d1 ) { 42 | return n1*x*x; 43 | } else if ( x < 2/d1 ) { 44 | return n1*(x-=(1.5/d1))*x + .75; 45 | } else if ( x < 2.5/d1 ) { 46 | return n1*(x-=(2.25/d1))*x + .9375; 47 | } else { 48 | return n1*(x-=(2.625/d1))*x + .984375; 49 | } 50 | } 51 | 52 | $.extend( $.easing, 53 | { 54 | def: 'easeOutQuad', 55 | swing: function (x) { 56 | return $.easing[$.easing.def](x); 57 | }, 58 | easeInQuad: function (x) { 59 | return x * x; 60 | }, 61 | easeOutQuad: function (x) { 62 | return 1 - ( 1 - x ) * ( 1 - x ); 63 | }, 64 | easeInOutQuad: function (x) { 65 | return x < 0.5 ? 66 | 2 * x * x : 67 | 1 - pow( -2 * x + 2, 2 ) / 2; 68 | }, 69 | easeInCubic: function (x) { 70 | return x * x * x; 71 | }, 72 | easeOutCubic: function (x) { 73 | return 1 - pow( 1 - x, 3 ); 74 | }, 75 | easeInOutCubic: function (x) { 76 | return x < 0.5 ? 77 | 4 * x * x * x : 78 | 1 - pow( -2 * x + 2, 3 ) / 2; 79 | }, 80 | easeInQuart: function (x) { 81 | return x * x * x * x; 82 | }, 83 | easeOutQuart: function (x) { 84 | return 1 - pow( 1 - x, 4 ); 85 | }, 86 | easeInOutQuart: function (x) { 87 | return x < 0.5 ? 88 | 8 * x * x * x * x : 89 | 1 - pow( -2 * x + 2, 4 ) / 2; 90 | }, 91 | easeInQuint: function (x) { 92 | return x * x * x * x * x; 93 | }, 94 | easeOutQuint: function (x) { 95 | return 1 - pow( 1 - x, 5 ); 96 | }, 97 | easeInOutQuint: function (x) { 98 | return x < 0.5 ? 99 | 16 * x * x * x * x * x : 100 | 1 - pow( -2 * x + 2, 5 ) / 2; 101 | }, 102 | easeInSine: function (x) { 103 | return 1 - cos( x * PI/2 ); 104 | }, 105 | easeOutSine: function (x) { 106 | return sin( x * PI/2 ); 107 | }, 108 | easeInOutSine: function (x) { 109 | return -( cos( PI * x ) - 1 ) / 2; 110 | }, 111 | easeInExpo: function (x) { 112 | return x === 0 ? 0 : pow( 2, 10 * x - 10 ); 113 | }, 114 | easeOutExpo: function (x) { 115 | return x === 1 ? 1 : 1 - pow( 2, -10 * x ); 116 | }, 117 | easeInOutExpo: function (x) { 118 | return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ? 119 | pow( 2, 20 * x - 10 ) / 2 : 120 | ( 2 - pow( 2, -20 * x + 10 ) ) / 2; 121 | }, 122 | easeInCirc: function (x) { 123 | return 1 - sqrt( 1 - pow( x, 2 ) ); 124 | }, 125 | easeOutCirc: function (x) { 126 | return sqrt( 1 - pow( x - 1, 2 ) ); 127 | }, 128 | easeInOutCirc: function (x) { 129 | return x < 0.5 ? 130 | ( 1 - sqrt( 1 - pow( 2 * x, 2 ) ) ) / 2 : 131 | ( sqrt( 1 - pow( -2 * x + 2, 2 ) ) + 1 ) / 2; 132 | }, 133 | easeInElastic: function (x) { 134 | return x === 0 ? 0 : x === 1 ? 1 : 135 | -pow( 2, 10 * x - 10 ) * sin( ( x * 10 - 10.75 ) * c4 ); 136 | }, 137 | easeOutElastic: function (x) { 138 | return x === 0 ? 0 : x === 1 ? 1 : 139 | pow( 2, -10 * x ) * sin( ( x * 10 - 0.75 ) * c4 ) + 1; 140 | }, 141 | easeInOutElastic: function (x) { 142 | return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ? 143 | -( pow( 2, 20 * x - 10 ) * sin( ( 20 * x - 11.125 ) * c5 )) / 2 : 144 | pow( 2, -20 * x + 10 ) * sin( ( 20 * x - 11.125 ) * c5 ) / 2 + 1; 145 | }, 146 | easeInBack: function (x) { 147 | return c3 * x * x * x - c1 * x * x; 148 | }, 149 | easeOutBack: function (x) { 150 | return 1 + c3 * pow( x - 1, 3 ) + c1 * pow( x - 1, 2 ); 151 | }, 152 | easeInOutBack: function (x) { 153 | return x < 0.5 ? 154 | ( pow( 2 * x, 2 ) * ( ( c2 + 1 ) * 2 * x - c2 ) ) / 2 : 155 | ( pow( 2 * x - 2, 2 ) *( ( c2 + 1 ) * ( x * 2 - 2 ) + c2 ) + 2 ) / 2; 156 | }, 157 | easeInBounce: function (x) { 158 | return 1 - bounceOut( 1 - x ); 159 | }, 160 | easeOutBounce: bounceOut, 161 | easeInOutBounce: function (x) { 162 | return x < 0.5 ? 163 | ( 1 - bounceOut( 1 - 2 * x ) ) / 2 : 164 | ( 1 + bounceOut( 2 * x - 1 ) ) / 2; 165 | } 166 | }); 167 | 168 | }); 169 | -------------------------------------------------------------------------------- /scss/bootstrap/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 | @if not $n { 20 | @error "breakpoint `#{$name}` not found in `#{$breakpoints}`"; 21 | } 22 | @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null); 23 | } 24 | 25 | // Minimum breakpoint width. Null for the smallest (first) breakpoint. 26 | // 27 | // >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)) 28 | // 576px 29 | @function breakpoint-min($name, $breakpoints: $grid-breakpoints) { 30 | $min: map-get($breakpoints, $name); 31 | @return if($min != 0, $min, null); 32 | } 33 | 34 | // Maximum breakpoint width. 35 | // The maximum value is reduced by 0.02px to work around the limitations of 36 | // `min-` and `max-` prefixes and viewports with fractional widths. 37 | // See https://www.w3.org/TR/mediaqueries-4/#mq-min-max 38 | // Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari. 39 | // See https://bugs.webkit.org/show_bug.cgi?id=178261 40 | // 41 | // >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)) 42 | // 767.98px 43 | @function breakpoint-max($name, $breakpoints: $grid-breakpoints) { 44 | $max: map-get($breakpoints, $name); 45 | @return if($max and $max > 0, $max - .02, null); 46 | } 47 | 48 | // Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front. 49 | // Useful for making responsive utilities. 50 | // 51 | // >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)) 52 | // "" (Returns a blank string) 53 | // >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)) 54 | // "-sm" 55 | @function breakpoint-infix($name, $breakpoints: $grid-breakpoints) { 56 | @return if(breakpoint-min($name, $breakpoints) == null, "", "-#{$name}"); 57 | } 58 | 59 | // Media of at least the minimum breakpoint width. No query for the smallest breakpoint. 60 | // Makes the @content apply to the given breakpoint and wider. 61 | @mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) { 62 | $min: breakpoint-min($name, $breakpoints); 63 | @if $min { 64 | @media (min-width: $min) { 65 | @content; 66 | } 67 | } @else { 68 | @content; 69 | } 70 | } 71 | 72 | // Media of at most the maximum breakpoint width. No query for the largest breakpoint. 73 | // Makes the @content apply to the given breakpoint and narrower. 74 | @mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) { 75 | $max: breakpoint-max($name, $breakpoints); 76 | @if $max { 77 | @media (max-width: $max) { 78 | @content; 79 | } 80 | } @else { 81 | @content; 82 | } 83 | } 84 | 85 | // Media that spans multiple breakpoint widths. 86 | // Makes the @content apply between the min and max breakpoints 87 | @mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) { 88 | $min: breakpoint-min($lower, $breakpoints); 89 | $max: breakpoint-max($upper, $breakpoints); 90 | 91 | @if $min != null and $max != null { 92 | @media (min-width: $min) and (max-width: $max) { 93 | @content; 94 | } 95 | } @else if $max == null { 96 | @include media-breakpoint-up($lower, $breakpoints) { 97 | @content; 98 | } 99 | } @else if $min == null { 100 | @include media-breakpoint-down($upper, $breakpoints) { 101 | @content; 102 | } 103 | } 104 | } 105 | 106 | // Media between the breakpoint's minimum and maximum widths. 107 | // No minimum for the smallest breakpoint, and no maximum for the largest one. 108 | // Makes the @content apply only to the given breakpoint, not viewports any wider or narrower. 109 | @mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) { 110 | $min: breakpoint-min($name, $breakpoints); 111 | $next: breakpoint-next($name, $breakpoints); 112 | $max: breakpoint-max($next); 113 | 114 | @if $min != null and $max != null { 115 | @media (min-width: $min) and (max-width: $max) { 116 | @content; 117 | } 118 | } @else if $max == null { 119 | @include media-breakpoint-up($name, $breakpoints) { 120 | @content; 121 | } 122 | } @else if $min == null { 123 | @include media-breakpoint-down($next, $breakpoints) { 124 | @content; 125 | } 126 | } 127 | } 128 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/_card.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Base styles 3 | // 4 | 5 | .card { 6 | position: relative; 7 | display: flex; 8 | flex-direction: column; 9 | min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106 10 | height: $card-height; 11 | word-wrap: break-word; 12 | background-color: $card-bg; 13 | background-clip: border-box; 14 | border: $card-border-width solid $card-border-color; 15 | @include border-radius($card-border-radius); 16 | 17 | > hr { 18 | margin-right: 0; 19 | margin-left: 0; 20 | } 21 | 22 | > .list-group { 23 | border-top: inherit; 24 | border-bottom: inherit; 25 | 26 | &:first-child { 27 | border-top-width: 0; 28 | @include border-top-radius($card-inner-border-radius); 29 | } 30 | 31 | &:last-child { 32 | border-bottom-width: 0; 33 | @include border-bottom-radius($card-inner-border-radius); 34 | } 35 | } 36 | 37 | // Due to specificity of the above selector (`.card > .list-group`), we must 38 | // use a child selector here to prevent double borders. 39 | > .card-header + .list-group, 40 | > .list-group + .card-footer { 41 | border-top: 0; 42 | } 43 | } 44 | 45 | .card-body { 46 | // Enable `flex-grow: 1` for decks and groups so that card blocks take up 47 | // as much space as possible, ensuring footers are aligned to the bottom. 48 | flex: 1 1 auto; 49 | padding: $card-spacer-y $card-spacer-x; 50 | color: $card-color; 51 | } 52 | 53 | .card-title { 54 | margin-bottom: $card-title-spacer-y; 55 | } 56 | 57 | .card-subtitle { 58 | margin-top: -$card-title-spacer-y / 2; 59 | margin-bottom: 0; 60 | } 61 | 62 | .card-text:last-child { 63 | margin-bottom: 0; 64 | } 65 | 66 | .card-link { 67 | &:hover { 68 | text-decoration: none; 69 | } 70 | 71 | + .card-link { 72 | margin-left: $card-spacer-x; 73 | } 74 | } 75 | 76 | // 77 | // Optional textual caps 78 | // 79 | 80 | .card-header { 81 | padding: $card-cap-padding-y $card-cap-padding-x; 82 | margin-bottom: 0; // Removes the default margin-bottom of 83 | color: $card-cap-color; 84 | background-color: $card-cap-bg; 85 | border-bottom: $card-border-width solid $card-border-color; 86 | 87 | &:first-child { 88 | @include border-radius($card-inner-border-radius $card-inner-border-radius 0 0); 89 | } 90 | } 91 | 92 | .card-footer { 93 | padding: $card-cap-padding-y $card-cap-padding-x; 94 | color: $card-cap-color; 95 | background-color: $card-cap-bg; 96 | border-top: $card-border-width solid $card-border-color; 97 | 98 | &:last-child { 99 | @include border-radius(0 0 $card-inner-border-radius $card-inner-border-radius); 100 | } 101 | } 102 | 103 | 104 | // 105 | // Header navs 106 | // 107 | 108 | .card-header-tabs { 109 | margin-right: -$card-cap-padding-x / 2; 110 | margin-bottom: -$card-cap-padding-y; 111 | margin-left: -$card-cap-padding-x / 2; 112 | border-bottom: 0; 113 | 114 | @if $nav-tabs-link-active-bg != $card-bg { 115 | .nav-link.active { 116 | background-color: $card-bg; 117 | border-bottom-color: $card-bg; 118 | } 119 | } 120 | } 121 | 122 | .card-header-pills { 123 | margin-right: -$card-cap-padding-x / 2; 124 | margin-left: -$card-cap-padding-x / 2; 125 | } 126 | 127 | // Card image 128 | .card-img-overlay { 129 | position: absolute; 130 | top: 0; 131 | right: 0; 132 | bottom: 0; 133 | left: 0; 134 | padding: $card-img-overlay-padding; 135 | @include border-radius($card-inner-border-radius); 136 | } 137 | 138 | .card-img, 139 | .card-img-top, 140 | .card-img-bottom { 141 | width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch 142 | } 143 | 144 | .card-img, 145 | .card-img-top { 146 | @include border-top-radius($card-inner-border-radius); 147 | } 148 | 149 | .card-img, 150 | .card-img-bottom { 151 | @include border-bottom-radius($card-inner-border-radius); 152 | } 153 | 154 | 155 | // 156 | // Card groups 157 | // 158 | 159 | .card-group { 160 | // The child selector allows nested `.card` within `.card-group` 161 | // to display properly. 162 | > .card { 163 | margin-bottom: $card-group-margin; 164 | } 165 | 166 | @include media-breakpoint-up(sm) { 167 | display: flex; 168 | flex-flow: row wrap; 169 | // The child selector allows nested `.card` within `.card-group` 170 | // to display properly. 171 | > .card { 172 | // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4 173 | flex: 1 0 0%; 174 | margin-bottom: 0; 175 | 176 | + .card { 177 | margin-left: 0; 178 | border-left: 0; 179 | } 180 | 181 | // Handle rounded corners 182 | @if $enable-rounded { 183 | &:not(:last-child) { 184 | @include border-end-radius(0); 185 | 186 | .card-img-top, 187 | .card-header { 188 | // stylelint-disable-next-line property-disallowed-list 189 | border-top-right-radius: 0; 190 | } 191 | .card-img-bottom, 192 | .card-footer { 193 | // stylelint-disable-next-line property-disallowed-list 194 | border-bottom-right-radius: 0; 195 | } 196 | } 197 | 198 | &:not(:first-child) { 199 | @include border-start-radius(0); 200 | 201 | .card-img-top, 202 | .card-header { 203 | // stylelint-disable-next-line property-disallowed-list 204 | border-top-left-radius: 0; 205 | } 206 | .card-img-bottom, 207 | .card-footer { 208 | // stylelint-disable-next-line property-disallowed-list 209 | border-bottom-left-radius: 0; 210 | } 211 | } 212 | } 213 | } 214 | } 215 | } 216 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/_carousel.scss: -------------------------------------------------------------------------------- 1 | // Notes on the classes: 2 | // 3 | // 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically) 4 | // even when their scroll action started on a carousel, but for compatibility (with Firefox) 5 | // we're preventing all actions instead 6 | // 2. The .carousel-item-start and .carousel-item-end is used to indicate where 7 | // the active slide is heading. 8 | // 3. .active.carousel-item is the current slide. 9 | // 4. .active.carousel-item-start and .active.carousel-item-end is the current 10 | // slide in its in-transition state. Only one of these occurs at a time. 11 | // 5. .carousel-item-next.carousel-item-start and .carousel-item-prev.carousel-item-end 12 | // is the upcoming slide in transition. 13 | 14 | .carousel { 15 | position: relative; 16 | } 17 | 18 | .carousel.pointer-event { 19 | touch-action: pan-y; 20 | } 21 | 22 | .carousel-inner { 23 | position: relative; 24 | width: 100%; 25 | overflow: hidden; 26 | @include clearfix(); 27 | } 28 | 29 | .carousel-item { 30 | position: relative; 31 | display: none; 32 | float: left; 33 | width: 100%; 34 | margin-right: -100%; 35 | backface-visibility: hidden; 36 | @include transition($carousel-transition); 37 | } 38 | 39 | .carousel-item.active, 40 | .carousel-item-next, 41 | .carousel-item-prev { 42 | display: block; 43 | } 44 | 45 | /* rtl:begin:ignore */ 46 | .carousel-item-next:not(.carousel-item-start), 47 | .active.carousel-item-end { 48 | transform: translateX(100%); 49 | } 50 | 51 | .carousel-item-prev:not(.carousel-item-end), 52 | .active.carousel-item-start { 53 | transform: translateX(-100%); 54 | } 55 | 56 | /* rtl:end:ignore */ 57 | 58 | 59 | // 60 | // Alternate transitions 61 | // 62 | 63 | .carousel-fade { 64 | .carousel-item { 65 | opacity: 0; 66 | transition-property: opacity; 67 | transform: none; 68 | } 69 | 70 | .carousel-item.active, 71 | .carousel-item-next.carousel-item-start, 72 | .carousel-item-prev.carousel-item-end { 73 | z-index: 1; 74 | opacity: 1; 75 | } 76 | 77 | .active.carousel-item-start, 78 | .active.carousel-item-end { 79 | z-index: 0; 80 | opacity: 0; 81 | @include transition(opacity 0s $carousel-transition-duration); 82 | } 83 | } 84 | 85 | 86 | // 87 | // Left/right controls for nav 88 | // 89 | 90 | .carousel-control-prev, 91 | .carousel-control-next { 92 | position: absolute; 93 | top: 0; 94 | bottom: 0; 95 | z-index: 1; 96 | // Use flex for alignment (1-3) 97 | display: flex; // 1. allow flex styles 98 | align-items: center; // 2. vertically center contents 99 | justify-content: center; // 3. horizontally center contents 100 | width: $carousel-control-width; 101 | padding: 0; 102 | color: $carousel-control-color; 103 | text-align: center; 104 | background: none; 105 | border: 0; 106 | opacity: $carousel-control-opacity; 107 | @include transition($carousel-control-transition); 108 | 109 | // Hover/focus state 110 | &:hover, 111 | &:focus { 112 | color: $carousel-control-color; 113 | text-decoration: none; 114 | outline: 0; 115 | opacity: $carousel-control-hover-opacity; 116 | } 117 | } 118 | .carousel-control-prev { 119 | left: 0; 120 | background-image: if($enable-gradients, linear-gradient(90deg, rgba($black, .25), rgba($black, .001)), null); 121 | } 122 | .carousel-control-next { 123 | right: 0; 124 | background-image: if($enable-gradients, linear-gradient(270deg, rgba($black, .25), rgba($black, .001)), null); 125 | } 126 | 127 | // Icons for within 128 | .carousel-control-prev-icon, 129 | .carousel-control-next-icon { 130 | display: inline-block; 131 | width: $carousel-control-icon-width; 132 | height: $carousel-control-icon-width; 133 | background-repeat: no-repeat; 134 | background-position: 50%; 135 | background-size: 100% 100%; 136 | } 137 | 138 | /* rtl:options: { 139 | "autoRename": true, 140 | "stringMap":[ { 141 | "name" : "prev-next", 142 | "search" : "prev", 143 | "replace" : "next" 144 | } ] 145 | } */ 146 | .carousel-control-prev-icon { 147 | background-image: escape-svg($carousel-control-prev-icon-bg); 148 | } 149 | .carousel-control-next-icon { 150 | background-image: escape-svg($carousel-control-next-icon-bg); 151 | } 152 | 153 | // Optional indicator pips/controls 154 | // 155 | // Add a container (such as a list) with the following class and add an item (ideally a focusable control, 156 | // like a button) with data-bs-target for each slide your carousel holds. 157 | 158 | .carousel-indicators { 159 | position: absolute; 160 | right: 0; 161 | bottom: 0; 162 | left: 0; 163 | z-index: 2; 164 | display: flex; 165 | justify-content: center; 166 | padding: 0; 167 | // Use the .carousel-control's width as margin so we don't overlay those 168 | margin-right: $carousel-control-width; 169 | margin-bottom: 1rem; 170 | margin-left: $carousel-control-width; 171 | list-style: none; 172 | 173 | [data-bs-target] { 174 | box-sizing: content-box; 175 | flex: 0 1 auto; 176 | width: $carousel-indicator-width; 177 | height: $carousel-indicator-height; 178 | padding: 0; 179 | margin-right: $carousel-indicator-spacer; 180 | margin-left: $carousel-indicator-spacer; 181 | text-indent: -999px; 182 | cursor: pointer; 183 | background-color: $carousel-indicator-active-bg; 184 | background-clip: padding-box; 185 | border: 0; 186 | // Use transparent borders to increase the hit area by 10px on top and bottom. 187 | border-top: $carousel-indicator-hit-area-height solid transparent; 188 | border-bottom: $carousel-indicator-hit-area-height solid transparent; 189 | opacity: $carousel-indicator-opacity; 190 | @include transition($carousel-indicator-transition); 191 | } 192 | 193 | .active { 194 | opacity: $carousel-indicator-active-opacity; 195 | } 196 | } 197 | 198 | 199 | // Optional captions 200 | // 201 | // 202 | 203 | .carousel-caption { 204 | position: absolute; 205 | right: (100% - $carousel-caption-width) / 2; 206 | bottom: $carousel-caption-spacer; 207 | left: (100% - $carousel-caption-width) / 2; 208 | padding-top: $carousel-caption-padding-y; 209 | padding-bottom: $carousel-caption-padding-y; 210 | color: $carousel-caption-color; 211 | text-align: center; 212 | } 213 | 214 | // Dark mode carousel 215 | 216 | .carousel-dark { 217 | .carousel-control-prev-icon, 218 | .carousel-control-next-icon { 219 | filter: $carousel-dark-control-icon-filter; 220 | } 221 | 222 | .carousel-indicators [data-bs-target] { 223 | background-color: $carousel-dark-indicator-active-bg; 224 | } 225 | 226 | .carousel-caption { 227 | color: $carousel-dark-caption-color; 228 | } 229 | } 230 | -------------------------------------------------------------------------------- /scss/bootstrap/scss/forms/_form-control.scss: -------------------------------------------------------------------------------- 1 | // 2 | // General form controls (plus a few specific high-level interventions) 3 | // 4 | 5 | .form-control { 6 | display: block; 7 | width: 100%; 8 | padding: $input-padding-y $input-padding-x; 9 | font-family: $input-font-family; 10 | @include font-size($input-font-size); 11 | font-weight: $input-font-weight; 12 | line-height: $input-line-height; 13 | color: $input-color; 14 | background-color: $input-bg; 15 | background-clip: padding-box; 16 | border: $input-border-width solid $input-border-color; 17 | appearance: none; // Fix appearance for date inputs in Safari 18 | 19 | // Note: This has no effect on `s in CSS. 20 | @include border-radius($input-border-radius, 0); 21 | 22 | @include box-shadow($input-box-shadow); 23 | @include transition($input-transition); 24 | 25 | &[type="file"] { 26 | overflow: hidden; // prevent pseudo element button overlap 27 | 28 | &:not(:disabled):not(:read-only) { 29 | cursor: pointer; 30 | } 31 | } 32 | 33 | // Customize the `:focus` state to imitate native WebKit styles. 34 | &:focus { 35 | color: $input-focus-color; 36 | background-color: $input-focus-bg; 37 | border-color: $input-focus-border-color; 38 | outline: 0; 39 | @if $enable-shadows { 40 | @include box-shadow($input-box-shadow, $input-focus-box-shadow); 41 | } @else { 42 | // Avoid using mixin so we can pass custom focus shadow properly 43 | box-shadow: $input-focus-box-shadow; 44 | } 45 | } 46 | 47 | // Add some height to date inputs on iOS 48 | // https://github.com/twbs/bootstrap/issues/23307 49 | // TODO: we can remove this workaround once https://bugs.webkit.org/show_bug.cgi?id=198959 is resolved 50 | &::-webkit-date-and-time-value { 51 | // Multiply line-height by 1em if it has no unit 52 | height: if(unit($input-line-height) == "", $input-line-height * 1em, $input-line-height); 53 | } 54 | 55 | // Placeholder 56 | &::placeholder { 57 | color: $input-placeholder-color; 58 | // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526. 59 | opacity: 1; 60 | } 61 | 62 | // Disabled and read-only inputs 63 | // 64 | // HTML5 says that controls under a fieldset > legend:first-child won't be 65 | // disabled if the fieldset is disabled. Due to implementation difficulty, we 66 | // don't honor that edge case; we style them as disabled anyway. 67 | &:disabled, 68 | &:read-only { 69 | background-color: $input-disabled-bg; 70 | border-color: $input-disabled-border-color; 71 | // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655. 72 | opacity: 1; 73 | } 74 | 75 | // File input buttons theming 76 | &::file-selector-button { 77 | padding: $input-padding-y $input-padding-x; 78 | margin: (-$input-padding-y) (-$input-padding-x); 79 | margin-inline-end: $input-padding-x; 80 | color: $form-file-button-color; 81 | @include gradient-bg($form-file-button-bg); 82 | pointer-events: none; 83 | border-color: inherit; 84 | border-style: solid; 85 | border-width: 0; 86 | border-inline-end-width: $input-border-width; 87 | border-radius: 0; // stylelint-disable-line property-disallowed-list 88 | @include transition($btn-transition); 89 | } 90 | 91 | &:hover:not(:disabled):not(:read-only)::file-selector-button { 92 | background-color: $form-file-button-hover-bg; 93 | } 94 | 95 | &::-webkit-file-upload-button { 96 | padding: $input-padding-y $input-padding-x; 97 | margin: (-$input-padding-y) (-$input-padding-x); 98 | margin-inline-end: $input-padding-x; 99 | color: $form-file-button-color; 100 | @include gradient-bg($form-file-button-bg); 101 | pointer-events: none; 102 | border-color: inherit; 103 | border-style: solid; 104 | border-width: 0; 105 | border-inline-end-width: $input-border-width; 106 | border-radius: 0; // stylelint-disable-line property-disallowed-list 107 | @include transition($btn-transition); 108 | } 109 | 110 | &:hover:not(:disabled):not(:read-only)::-webkit-file-upload-button { 111 | background-color: $form-file-button-hover-bg; 112 | } 113 | } 114 | 115 | // Readonly controls as plain text 116 | // 117 | // Apply class to a readonly input to make it appear like regular plain 118 | // text (without any border, background color, focus indicator) 119 | 120 | .form-control-plaintext { 121 | display: block; 122 | width: 100%; 123 | padding: $input-padding-y 0; 124 | margin-bottom: 0; // match inputs if this class comes on inputs with default margins 125 | line-height: $input-line-height; 126 | color: $input-plaintext-color; 127 | background-color: transparent; 128 | border: solid transparent; 129 | border-width: $input-border-width 0; 130 | 131 | &.form-control-sm, 132 | &.form-control-lg { 133 | padding-right: 0; 134 | padding-left: 0; 135 | } 136 | } 137 | 138 | // Form control sizing 139 | // 140 | // Build on `.form-control` with modifier classes to decrease or increase the 141 | // height and font-size of form controls. 142 | // 143 | // Repeated in `_input_group.scss` to avoid Sass extend issues. 144 | 145 | .form-control-sm { 146 | min-height: $input-height-sm; 147 | padding: $input-padding-y-sm $input-padding-x-sm; 148 | @include font-size($input-font-size-sm); 149 | @include border-radius($input-border-radius-sm); 150 | 151 | &::file-selector-button { 152 | padding: $input-padding-y-sm $input-padding-x-sm; 153 | margin: (-$input-padding-y-sm) (-$input-padding-x-sm); 154 | margin-inline-end: $input-padding-x-sm; 155 | } 156 | 157 | &::-webkit-file-upload-button { 158 | padding: $input-padding-y-sm $input-padding-x-sm; 159 | margin: (-$input-padding-y-sm) (-$input-padding-x-sm); 160 | margin-inline-end: $input-padding-x-sm; 161 | } 162 | } 163 | 164 | .form-control-lg { 165 | min-height: $input-height-lg; 166 | padding: $input-padding-y-lg $input-padding-x-lg; 167 | @include font-size($input-font-size-lg); 168 | @include border-radius($input-border-radius-lg); 169 | 170 | &::file-selector-button { 171 | padding: $input-padding-y-lg $input-padding-x-lg; 172 | margin: (-$input-padding-y-lg) (-$input-padding-x-lg); 173 | margin-inline-end: $input-padding-x-lg; 174 | } 175 | 176 | &::-webkit-file-upload-button { 177 | padding: $input-padding-y-lg $input-padding-x-lg; 178 | margin: (-$input-padding-y-lg) (-$input-padding-x-lg); 179 | margin-inline-end: $input-padding-x-lg; 180 | } 181 | } 182 | 183 | // Make sure textareas don't shrink too much when resized 184 | // https://github.com/twbs/bootstrap/pull/29124 185 | // stylelint-disable selector-no-qualifying-type 186 | textarea { 187 | &.form-control { 188 | min-height: $input-height; 189 | } 190 | 191 | &.form-control-sm { 192 | min-height: $input-height-sm; 193 | } 194 | 195 | &.form-control-lg { 196 | min-height: $input-height-lg; 197 | } 198 | } 199 | // stylelint-enable selector-no-qualifying-type 200 | 201 | .form-control-color { 202 | max-width: 3rem; 203 | height: auto; // Override fixed browser height 204 | padding: $input-padding-y; 205 | 206 | &:not(:disabled):not(:read-only) { 207 | cursor: pointer; 208 | } 209 | 210 | &::-moz-color-swatch { 211 | height: if(unit($input-line-height) == "", $input-line-height * 1em, $input-line-height); 212 | @include border-radius($input-border-radius); 213 | } 214 | 215 | &::-webkit-color-swatch { 216 | height: if(unit($input-line-height) == "", $input-line-height * 1em, $input-line-height); 217 | @include border-radius($input-border-radius); 218 | } 219 | } 220 | -------------------------------------------------------------------------------- /lib/wow/wow.min.js: -------------------------------------------------------------------------------- 1 | /*! WOW wow.js - v1.3.0 - 2016-10-04 2 | * https://wowjs.uk 3 | * Copyright (c) 2016 Thomas Grainger; Licensed MIT */!function(a,b){if("function"==typeof define&&define.amd)define(["module","exports"],b);else if("undefined"!=typeof exports)b(module,exports);else{var c={exports:{}};b(c,c.exports),a.WOW=c.exports}}(this,function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function d(a,b){return b.indexOf(a)>=0}function e(a,b){for(var c in b)if(null==a[c]){var d=b[c];a[c]=d}return a}function f(a){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(a)}function g(a){var b=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],c=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],d=arguments.length<=3||void 0===arguments[3]?null:arguments[3],e=void 0;return null!=document.createEvent?(e=document.createEvent("CustomEvent"),e.initCustomEvent(a,b,c,d)):null!=document.createEventObject?(e=document.createEventObject(),e.eventType=a):e.eventName=a,e}function h(a,b){null!=a.dispatchEvent?a.dispatchEvent(b):b in(null!=a)?a[b]():"on"+b in(null!=a)&&a["on"+b]()}function i(a,b,c){null!=a.addEventListener?a.addEventListener(b,c,!1):null!=a.attachEvent?a.attachEvent("on"+b,c):a[b]=c}function j(a,b,c){null!=a.removeEventListener?a.removeEventListener(b,c,!1):null!=a.detachEvent?a.detachEvent("on"+b,c):delete a[b]}function k(){return"innerHeight"in window?window.innerHeight:document.documentElement.clientHeight}Object.defineProperty(b,"__esModule",{value:!0});var l,m,n=function(){function a(a,b){for(var c=0;c=0){var b=a.target||a.srcElement;b.className=b.className.replace(this.config.animateClass,"").trim()}}},{key:"customStyle",value:function(a,b,c,d,e){return b&&this.cacheAnimationName(a),a.style.visibility=b?"hidden":"visible",c&&this.vendorSet(a.style,{animationDuration:c}),d&&this.vendorSet(a.style,{animationDelay:d}),e&&this.vendorSet(a.style,{animationIterationCount:e}),this.vendorSet(a.style,{animationName:b?"none":this.cachedAnimationName(a)}),a}},{key:"vendorSet",value:function(a,b){for(var c in b)if(b.hasOwnProperty(c)){var d=b[c];a[""+c]=d;for(var e=0;e=e&&f>=c}},{key:"disabled",value:function(){return!this.config.mobile&&f(navigator.userAgent)}}]),a}();b["default"]=r,a.exports=b["default"]}); 4 | -------------------------------------------------------------------------------- /lib/waypoints/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))}(); -------------------------------------------------------------------------------- /scss/bootstrap/scss/vendor/_rfs.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable property-blacklist, scss/dollar-variable-default 2 | 3 | // SCSS RFS mixin 4 | // 5 | // Automated responsive values for font sizes, paddings, margins and much more 6 | // 7 | // Licensed under MIT (https://github.com/twbs/rfs/blob/master/LICENSE) 8 | 9 | // Configuration 10 | 11 | // Base value 12 | $rfs-base-value: 1.25rem !default; 13 | $rfs-unit: rem !default; 14 | 15 | @if $rfs-unit != rem and $rfs-unit != px { 16 | @error "`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`."; 17 | } 18 | 19 | // Breakpoint at where values start decreasing if screen width is smaller 20 | $rfs-breakpoint: 1200px !default; 21 | $rfs-breakpoint-unit: px !default; 22 | 23 | @if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem { 24 | @error "`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`."; 25 | } 26 | 27 | // Resize values based on screen height and width 28 | $rfs-two-dimensional: false !default; 29 | 30 | // Factor of decrease 31 | $rfs-factor: 10 !default; 32 | 33 | @if type-of($rfs-factor) != number or $rfs-factor <= 1 { 34 | @error "`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1."; 35 | } 36 | 37 | // Mode. Possibilities: "min-media-query", "max-media-query" 38 | $rfs-mode: min-media-query !default; 39 | 40 | // Generate enable or disable classes. Possibilities: false, "enable" or "disable" 41 | $rfs-class: false !default; 42 | 43 | // 1 rem = $rfs-rem-value px 44 | $rfs-rem-value: 16 !default; 45 | 46 | // Safari iframe resize bug: https://github.com/twbs/rfs/issues/14 47 | $rfs-safari-iframe-resize-bug-fix: false !default; 48 | 49 | // Disable RFS by setting $enable-rfs to false 50 | $enable-rfs: true !default; 51 | 52 | // Cache $rfs-base-value unit 53 | $rfs-base-value-unit: unit($rfs-base-value); 54 | 55 | // Remove px-unit from $rfs-base-value for calculations 56 | @if $rfs-base-value-unit == px { 57 | $rfs-base-value: $rfs-base-value / ($rfs-base-value * 0 + 1); 58 | } 59 | @else if $rfs-base-value-unit == rem { 60 | $rfs-base-value: $rfs-base-value / ($rfs-base-value * 0 + 1 / $rfs-rem-value); 61 | } 62 | 63 | // Cache $rfs-breakpoint unit to prevent multiple calls 64 | $rfs-breakpoint-unit-cache: unit($rfs-breakpoint); 65 | 66 | // Remove unit from $rfs-breakpoint for calculations 67 | @if $rfs-breakpoint-unit-cache == px { 68 | $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1); 69 | } 70 | @else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == "em" { 71 | $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1 / $rfs-rem-value); 72 | } 73 | 74 | // Calculate the media query value 75 | $rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{$rfs-breakpoint / $rfs-rem-value}#{$rfs-breakpoint-unit}); 76 | $rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width); 77 | $rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height); 78 | 79 | // Internal mixin used to determine which media query needs to be used 80 | @mixin _rfs-media-query { 81 | @if $rfs-two-dimensional { 82 | @if $rfs-mode == max-media-query { 83 | @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) { 84 | @content; 85 | } 86 | } 87 | @else { 88 | @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) { 89 | @content; 90 | } 91 | } 92 | } 93 | @else { 94 | @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) { 95 | @content; 96 | } 97 | } 98 | } 99 | 100 | // Internal mixin that adds disable classes to the selector if needed. 101 | @mixin _rfs-rule { 102 | @if $rfs-class == disable and $rfs-mode == max-media-query { 103 | // Adding an extra class increases specificity, which prevents the media query to override the property 104 | &, 105 | .disable-rfs &, 106 | &.disable-rfs { 107 | @content; 108 | } 109 | } 110 | @else if $rfs-class == enable and $rfs-mode == min-media-query { 111 | .enable-rfs &, 112 | &.enable-rfs { 113 | @content; 114 | } 115 | } 116 | @else { 117 | @content; 118 | } 119 | } 120 | 121 | // Internal mixin that adds enable classes to the selector if needed. 122 | @mixin _rfs-media-query-rule { 123 | 124 | @if $rfs-class == enable { 125 | @if $rfs-mode == min-media-query { 126 | @content; 127 | } 128 | 129 | @include _rfs-media-query { 130 | .enable-rfs &, 131 | &.enable-rfs { 132 | @content; 133 | } 134 | } 135 | } 136 | @else { 137 | @if $rfs-class == disable and $rfs-mode == min-media-query { 138 | .disable-rfs &, 139 | &.disable-rfs { 140 | @content; 141 | } 142 | } 143 | @include _rfs-media-query { 144 | @content; 145 | } 146 | } 147 | } 148 | 149 | // Helper function to get the formatted non-responsive value 150 | @function rfs-value($values) { 151 | // Convert to list 152 | $values: if(type-of($values) != list, ($values,), $values); 153 | 154 | $val: ''; 155 | 156 | // Loop over each value and calculate value 157 | @each $value in $values { 158 | @if $value == 0 { 159 | $val: $val + ' 0'; 160 | } 161 | @else { 162 | // Cache $value unit 163 | $unit: if(type-of($value) == "number", unit($value), false); 164 | 165 | @if $unit == px { 166 | // Convert to rem if needed 167 | $val: $val + ' ' + if($rfs-unit == rem, #{$value / ($value * 0 + $rfs-rem-value)}rem, $value); 168 | } 169 | @else if $unit == rem { 170 | // Convert to px if needed 171 | $val: $val + ' ' + if($rfs-unit == px, #{$value / ($value * 0 + 1) * $rfs-rem-value}px, $value); 172 | } 173 | @else { 174 | // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value 175 | $val: $val + ' ' + $value; 176 | } 177 | } 178 | } 179 | 180 | // Remove first space 181 | @return unquote(str-slice($val, 2)); 182 | } 183 | 184 | // Helper function to get the responsive value calculated by RFS 185 | @function rfs-fluid-value($values) { 186 | // Convert to list 187 | $values: if(type-of($values) != list, ($values,), $values); 188 | 189 | $val: ''; 190 | 191 | // Loop over each value and calculate value 192 | @each $value in $values { 193 | @if $value == 0 { 194 | $val: $val + ' 0'; 195 | } 196 | 197 | @else { 198 | // Cache $value unit 199 | $unit: if(type-of($value) == "number", unit($value), false); 200 | 201 | // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value 202 | @if not $unit or $unit != px and $unit != rem { 203 | $val: $val + ' ' + $value; 204 | } 205 | 206 | @else { 207 | // Remove unit from $value for calculations 208 | $value: $value / ($value * 0 + if($unit == px, 1, 1 / $rfs-rem-value)); 209 | 210 | // Only add the media query if the value is greater than the minimum value 211 | @if abs($value) <= $rfs-base-value or not $enable-rfs { 212 | $val: $val + ' ' + if($rfs-unit == rem, #{$value / $rfs-rem-value}rem, #{$value}px); 213 | } 214 | @else { 215 | // Calculate the minimum value 216 | $value-min: $rfs-base-value + (abs($value) - $rfs-base-value) / $rfs-factor; 217 | 218 | // Calculate difference between $value and the minimum value 219 | $value-diff: abs($value) - $value-min; 220 | 221 | // Base value formatting 222 | $min-width: if($rfs-unit == rem, #{$value-min / $rfs-rem-value}rem, #{$value-min}px); 223 | 224 | // Use negative value if needed 225 | $min-width: if($value < 0, -$min-width, $min-width); 226 | 227 | // Use `vmin` if two-dimensional is enabled 228 | $variable-unit: if($rfs-two-dimensional, vmin, vw); 229 | 230 | // Calculate the variable width between 0 and $rfs-breakpoint 231 | $variable-width: #{$value-diff * 100 / $rfs-breakpoint}#{$variable-unit}; 232 | 233 | // Return the calculated value 234 | $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')'; 235 | } 236 | } 237 | } 238 | } 239 | 240 | // Remove first space 241 | @return unquote(str-slice($val, 2)); 242 | } 243 | 244 | // RFS mixin 245 | @mixin rfs($values, $property: font-size) { 246 | @if $values != null { 247 | $val: rfs-value($values); 248 | $fluidVal: rfs-fluid-value($values); 249 | 250 | // Do not print the media query if responsive & non-responsive values are the same 251 | @if $val == $fluidVal { 252 | #{$property}: $val; 253 | } 254 | @else { 255 | @include _rfs-rule { 256 | #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal); 257 | 258 | // Include safari iframe resize fix if needed 259 | min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null); 260 | } 261 | 262 | @include _rfs-media-query-rule { 263 | #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val); 264 | } 265 | } 266 | } 267 | } 268 | 269 | // Shorthand helper mixins 270 | @mixin font-size($value) { 271 | @include rfs($value); 272 | } 273 | 274 | @mixin padding($value) { 275 | @include rfs($value, padding); 276 | } 277 | 278 | @mixin padding-top($value) { 279 | @include rfs($value, padding-top); 280 | } 281 | 282 | @mixin padding-right($value) { 283 | @include rfs($value, padding-right); 284 | } 285 | 286 | @mixin padding-bottom($value) { 287 | @include rfs($value, padding-bottom); 288 | } 289 | 290 | @mixin padding-left($value) { 291 | @include rfs($value, padding-left); 292 | } 293 | 294 | @mixin margin($value) { 295 | @include rfs($value, margin); 296 | } 297 | 298 | @mixin margin-top($value) { 299 | @include rfs($value, margin-top); 300 | } 301 | 302 | @mixin margin-right($value) { 303 | @include rfs($value, margin-right); 304 | } 305 | 306 | @mixin margin-bottom($value) { 307 | @include rfs($value, margin-bottom); 308 | } 309 | 310 | @mixin margin-left($value) { 311 | @include rfs($value, margin-left); 312 | } 313 | -------------------------------------------------------------------------------- /css/style.css: -------------------------------------------------------------------------------- 1 | /********** Template CSS **********/ 2 | :root { 3 | --bs-tertiary: #797E88; 4 | } 5 | 6 | .back-to-top { 7 | position: fixed; 8 | display: none; 9 | right: 30px; 10 | bottom: 30px; 11 | z-index: 99; 12 | } 13 | 14 | .fw-bold { 15 | font-weight: 700 !important; 16 | } 17 | 18 | .fw-medium { 19 | font-weight: 600 !important; 20 | } 21 | 22 | .fw-normal { 23 | font-weight: 400 !important; 24 | } 25 | 26 | 27 | /*** Spinner ***/ 28 | #spinner { 29 | opacity: 0; 30 | visibility: hidden; 31 | transition: opacity .5s ease-out, visibility 0s linear .5s; 32 | z-index: 99999; 33 | } 34 | 35 | #spinner.show { 36 | transition: opacity .5s ease-out, visibility 0s linear 0s; 37 | visibility: visible; 38 | opacity: 1; 39 | } 40 | 41 | 42 | /*** Button ***/ 43 | .btn { 44 | transition: .5s; 45 | } 46 | 47 | .btn-square { 48 | width: 38px; 49 | height: 38px; 50 | } 51 | 52 | .btn-sm-square { 53 | width: 32px; 54 | height: 32px; 55 | } 56 | 57 | .btn-lg-square { 58 | width: 48px; 59 | height: 48px; 60 | } 61 | 62 | .btn-square, 63 | .btn-sm-square, 64 | .btn-lg-square { 65 | padding: 0; 66 | display: flex; 67 | align-items: center; 68 | justify-content: center; 69 | font-weight: normal; 70 | } 71 | 72 | 73 | /*** Top Bar ***/ 74 | .top-bar { 75 | height: 90px; 76 | padding: 0 90px; 77 | } 78 | 79 | .top-bar h6 { 80 | letter-spacing: 1px; 81 | } 82 | 83 | 84 | /*** Nav Bar ***/ 85 | .nav-bar { 86 | padding: 0 90px; 87 | transition: .5s; 88 | } 89 | 90 | .navbar .navbar-nav .nav-link { 91 | margin-right: 30px; 92 | padding: 20px 0; 93 | color: var(--bs-dark); 94 | font-size: 18px; 95 | outline: none; 96 | } 97 | 98 | .navbar .navbar-nav .nav-link:hover, 99 | .navbar .navbar-nav .nav-link.active { 100 | color: var(--bs-white); 101 | } 102 | 103 | .navbar .dropdown-toggle::after { 104 | border: none; 105 | content: "\f107"; 106 | font-family: "Font Awesome 5 Free"; 107 | font-weight: 900; 108 | vertical-align: middle; 109 | margin-left: 8px; 110 | } 111 | 112 | @media (max-width: 991.98px) { 113 | .navbar .navbar-nav .nav-link { 114 | margin-right: 0; 115 | padding: 10px 0; 116 | } 117 | 118 | .navbar .navbar-nav { 119 | margin-top: 20px; 120 | border-top: 1px solid var(--bs-white); 121 | } 122 | } 123 | 124 | @media (min-width: 992px) { 125 | .navbar .nav-item .dropdown-menu { 126 | display: block; 127 | border: none; 128 | margin-top: 0; 129 | top: 150%; 130 | opacity: 0; 131 | visibility: hidden; 132 | transition: .5s; 133 | } 134 | 135 | .navbar .nav-item:hover .dropdown-menu { 136 | top: 100%; 137 | visibility: visible; 138 | transition: .5s; 139 | opacity: 1; 140 | } 141 | } 142 | 143 | 144 | /*** Header Carousel ***/ 145 | .header-carousel { 146 | position: relative; 147 | background: url(../img/bg.jpg) center center no-repeat; 148 | background-size: cover; 149 | } 150 | 151 | .header-carousel .carousel-img { 152 | position: relative; 153 | } 154 | 155 | .header-carousel .owl-nav { 156 | position: absolute; 157 | top: 50%; 158 | left: 0; 159 | transform: translateY(-50%); 160 | } 161 | 162 | .header-carousel .owl-nav .owl-prev, 163 | .header-carousel .owl-nav .owl-next { 164 | width: 45px; 165 | height: 45px; 166 | margin: 10px 0; 167 | display: flex; 168 | align-items: center; 169 | justify-content: center; 170 | font-size: 22px; 171 | color: var(--bs-dark); 172 | background: var(--bs-primary); 173 | } 174 | 175 | .page-header { 176 | background: url(../img/bg.jpg) center center no-repeat; 177 | background-size: cover; 178 | } 179 | 180 | .page-header .breadcrumb-item+.breadcrumb-item::before { 181 | color: var(--bs-tertiary); 182 | } 183 | 184 | .page-header .breadcrumb-item, 185 | .page-header .breadcrumb-item a { 186 | font-size: 18px; 187 | color: var(--bs-primary); 188 | } 189 | 190 | .page-header .breadcrumb-item.active { 191 | color: var(--bs-dark); 192 | } 193 | 194 | 195 | /*** Video ***/ 196 | .btn-play { 197 | position: relative; 198 | display: block; 199 | box-sizing: content-box; 200 | width: 16px; 201 | height: 26px; 202 | border: none; 203 | outline: none !important; 204 | padding: 18px 20px 20px 28px; 205 | background: var(--bs-dark); 206 | } 207 | 208 | .btn-play:before { 209 | content: ""; 210 | position: absolute; 211 | z-index: 0; 212 | left: 50%; 213 | top: 50%; 214 | transform: translateX(-50%) translateY(-50%); 215 | display: block; 216 | width: 60px; 217 | height: 60px; 218 | background: var(--bs-dark); 219 | animation: pulse-border 1500ms ease-out infinite; 220 | } 221 | 222 | .btn-play:after { 223 | content: ""; 224 | position: absolute; 225 | z-index: 1; 226 | left: 50%; 227 | top: 50%; 228 | transform: translateX(-50%) translateY(-50%); 229 | display: block; 230 | width: 60px; 231 | height: 60px; 232 | background: var(--bs-dark); 233 | transition: all 200ms; 234 | } 235 | 236 | .btn-play span { 237 | display: block; 238 | position: relative; 239 | z-index: 3; 240 | width: 0; 241 | height: 0; 242 | left: -1px; 243 | border-left: 16px solid var(--bs-white); 244 | border-top: 11px solid transparent; 245 | border-bottom: 11px solid transparent; 246 | } 247 | 248 | @keyframes pulse-border { 249 | 0% { 250 | transform: translateX(-50%) translateY(-50%) translateZ(0) scale(1); 251 | opacity: 1; 252 | } 253 | 254 | 100% { 255 | transform: translateX(-50%) translateY(-50%) translateZ(0) scale(2); 256 | opacity: 0; 257 | } 258 | } 259 | 260 | #videoModal .modal-dialog { 261 | position: relative; 262 | max-width: 800px; 263 | margin: 60px auto 0 auto; 264 | } 265 | 266 | #videoModal .modal-body { 267 | position: relative; 268 | padding: 0px; 269 | } 270 | 271 | #videoModal .close { 272 | position: absolute; 273 | width: 30px; 274 | height: 30px; 275 | right: 0px; 276 | top: -30px; 277 | z-index: 999; 278 | font-size: 30px; 279 | font-weight: normal; 280 | color: var(--bs-white); 281 | background: #000000; 282 | opacity: 1; 283 | } 284 | 285 | 286 | /*** Section Title ***/ 287 | .section-title { 288 | position: relative; 289 | display: inline-block; 290 | text-transform: uppercase; 291 | } 292 | 293 | .section-title::before { 294 | position: absolute; 295 | content: ""; 296 | width: calc(100% + 80px); 297 | height: 0px; 298 | top: 5px; 299 | left: -40px; 300 | border-top: 2px solid var(--bs-primary); 301 | z-index: -1; 302 | } 303 | 304 | .section-title::after { 305 | position: absolute; 306 | content: ""; 307 | width: calc(100% + 120px); 308 | height: 0px; 309 | bottom: 6px; 310 | left: -60px; 311 | border-bottom: 2px solid var(--bs-primary); 312 | z-index: -1; 313 | } 314 | 315 | .section-title.text-start::before { 316 | width: calc(100% + 40px); 317 | left: 0; 318 | } 319 | 320 | .section-title.text-start::after { 321 | width: calc(100% + 60px); 322 | left: 0; 323 | } 324 | 325 | 326 | /*** About ***/ 327 | .about-img { 328 | position: relative; 329 | } 330 | 331 | .about-img::before, 332 | .about-img::after { 333 | position: absolute; 334 | content: ""; 335 | width: 33%; 336 | height: 90px; 337 | background: var(--bs-white); 338 | } 339 | 340 | .about-img::before { 341 | top: 0px; 342 | left: 0px; 343 | } 344 | 345 | .about-img::after { 346 | right: 0px; 347 | bottom: 0px; 348 | } 349 | 350 | 351 | /*** Service ***/ 352 | .service-title { 353 | height: 100%; 354 | padding: 30px; 355 | display: flex; 356 | flex-direction: column; 357 | justify-content: center; 358 | background: url(../img/bg.jpg) center center no-repeat; 359 | background-size: cover; 360 | } 361 | 362 | .service-item { 363 | overflow: hidden; 364 | } 365 | 366 | .service-item .btn-square { 367 | width: 65px; 368 | height: 65px; 369 | } 370 | 371 | .service-item a { 372 | position: relative; 373 | padding: 0; 374 | font-size: 14px; 375 | line-height: 14px; 376 | text-transform: uppercase; 377 | transition: .5s; 378 | } 379 | 380 | .service-item a::after { 381 | position: absolute; 382 | content: ""; 383 | width: 500%; 384 | height: 0; 385 | left: 100%; 386 | bottom: 3px; 387 | margin-left: 10px; 388 | border-bottom: 2px solid var(--bs-primary); 389 | } 390 | 391 | 392 | /*** Donation ***/ 393 | .donation-item { 394 | box-shadow: 0 0 30px rgba(0, 0, 0, .05); 395 | transition: .5s; 396 | } 397 | 398 | .donation-item:hover { 399 | box-shadow: 0 0 30px rgba(0, 0, 0, .1); 400 | } 401 | 402 | .donation-item .donation-progress { 403 | width: 80px; 404 | } 405 | 406 | .donation-item .progress .progress-bar { 407 | height: 20px; 408 | overflow: visible; 409 | transition: 3s; 410 | } 411 | 412 | 413 | /*** Banner ***/ 414 | .banner .banner-inner { 415 | position: relative; 416 | background: url(../img/bg.jpg) center center no-repeat; 417 | background-size: cover; 418 | } 419 | 420 | .banner .banner-inner::before, 421 | .banner .banner-inner::after { 422 | position: absolute; 423 | content: ""; 424 | width: 0; 425 | height: 0; 426 | } 427 | 428 | .banner .banner-inner::before { 429 | top: 0; 430 | left: 0; 431 | border-top: 150px solid var(--bs-primary); 432 | border-right: 150px solid transparent; 433 | } 434 | 435 | .banner .banner-inner::after { 436 | right: 0; 437 | bottom: 0; 438 | border-bottom: 150px solid var(--bs-secondary); 439 | border-left: 150px solid transparent; 440 | } 441 | 442 | 443 | /*** Event ***/ 444 | .event-item { 445 | box-shadow: 0 0 30px rgba(0, 0, 0, .05); 446 | transition: .5s; 447 | } 448 | 449 | .event-item:hover { 450 | box-shadow: 0 0 30px rgba(0, 0, 0, .1); 451 | } 452 | 453 | 454 | /*** Donate ***/ 455 | .donate .donate-text { 456 | position: relative; 457 | background: url(../img/bg.jpg) center center no-repeat; 458 | background-size: cover; 459 | } 460 | 461 | .donate .donate-text::before, 462 | .donate .donate-text::after { 463 | position: absolute; 464 | content: ""; 465 | width: 0; 466 | height: 0; 467 | } 468 | 469 | .donate .donate-text::before { 470 | top: 0; 471 | left: 0; 472 | border-top: 150px solid var(--bs-primary); 473 | border-right: 150px solid transparent; 474 | } 475 | 476 | .donate .donate-text::after { 477 | right: 0; 478 | bottom: 0; 479 | border-bottom: 150px solid var(--bs-secondary); 480 | border-left: 150px solid transparent; 481 | } 482 | 483 | .donate .donate-form .form-control { 484 | border: none; 485 | background: rgba(255, 255, 255, .5); 486 | } 487 | 488 | .donate .donate-form .btn-group { 489 | display: flex; 490 | } 491 | 492 | .donate .donate-form .btn-group .btn { 493 | margin: 0; 494 | padding: 0; 495 | height: 55px; 496 | display: flex; 497 | align-items: center; 498 | justify-content: center; 499 | border: none; 500 | color: var(--bs-tertiary); 501 | background: rgba(255, 255, 255, .5); 502 | } 503 | 504 | .donate .donate-form .btn-group .btn-check:checked+.btn { 505 | border: none; 506 | background: var(--bs-white); 507 | } 508 | 509 | 510 | 511 | /*** Team ***/ 512 | .team-item { 513 | box-shadow: 0 0 30px rgba(0, 0, 0, .05); 514 | transition: .5s; 515 | } 516 | 517 | .team-item:hover { 518 | box-shadow: 0 0 30px rgba(0, 0, 0, .1); 519 | } 520 | 521 | .team-item .team-detail span { 522 | letter-spacing: 2px; 523 | } 524 | 525 | 526 | 527 | /*** Testimonial ***/ 528 | .testimonial-title { 529 | height: 100%; 530 | padding: 30px; 531 | display: flex; 532 | flex-direction: column; 533 | justify-content: center; 534 | background: url(../img/bg.jpg) center center no-repeat; 535 | background-size: cover; 536 | } 537 | 538 | .testimonial-img { 539 | position: relative; 540 | padding: 45px 0 45px 90px; 541 | } 542 | 543 | .testimonial-img::before { 544 | position: absolute; 545 | content: ""; 546 | top: 0; 547 | left: 0; 548 | width: calc(50% + 45px); 549 | height: 100%; 550 | background: var(--bs-primary); 551 | z-index: -1; 552 | } 553 | 554 | .testimonial-carousel .owl-nav { 555 | position: absolute; 556 | top: 50%; 557 | left: 1.5rem; 558 | transform: translateY(-50%); 559 | display: flex; 560 | flex-direction: column; 561 | } 562 | 563 | .testimonial-carousel .owl-prev, 564 | .testimonial-carousel .owl-next { 565 | width: 45px; 566 | height: 45px; 567 | margin: 10px 0; 568 | display: flex; 569 | align-items: center; 570 | justify-content: center; 571 | font-size: 18px; 572 | color: var(--bs-white); 573 | background: var(--bs-secondary); 574 | transition: .5s; 575 | } 576 | 577 | .testimonial-carousel .owl-prev:hover, 578 | .testimonial-carousel .owl-next:hover { 579 | color: var(--bs-secondary); 580 | background: var(--bs-white); 581 | } 582 | 583 | @media (max-width: 768px) { 584 | .testimonial-carousel .owl-nav { 585 | top: 6.3rem; 586 | } 587 | } 588 | 589 | 590 | 591 | /*** Footer ***/ 592 | .footer { 593 | color: var(--bs-tertiary); 594 | background: linear-gradient(rgba(5, 19, 17, .95), rgba(5, 19, 17, .95)), url(../img/bg-footer.jpg) center center no-repeat; 595 | background-size: cover; 596 | } 597 | 598 | .footer .btn.btn-link { 599 | display: block; 600 | margin-bottom: 5px; 601 | padding: 0; 602 | text-align: left; 603 | color: var(--bs-tertiary); 604 | font-weight: normal; 605 | text-transform: capitalize; 606 | transition: .3s; 607 | } 608 | 609 | .footer .btn.btn-link::before { 610 | position: relative; 611 | content: "\f105"; 612 | font-family: "Font Awesome 5 Free"; 613 | font-weight: 900; 614 | margin-right: 10px; 615 | } 616 | 617 | .footer .btn.btn-link:hover { 618 | color: var(--bs-light); 619 | letter-spacing: 1px; 620 | box-shadow: none; 621 | } 622 | 623 | .footer .copyright { 624 | border-top: 1px solid rgba(255, 255, 255, .1); 625 | } -------------------------------------------------------------------------------- /lib/animate/animate.min.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /*! 4 | * animate.css -http://daneden.me/animate 5 | * Version - 3.5.2 6 | * Licensed under the MIT license - http://opensource.org/licenses/MIT 7 | * 8 | * Copyright (c) 2017 Daniel Eden 9 | */ 10 | 11 | .animated{animation-duration:1s;animation-fill-mode:both}.animated.infinite{animation-iteration-count:infinite}.animated.hinge{animation-duration:2s}.animated.bounceIn,.animated.bounceOut,.animated.flipOutX,.animated.flipOutY{animation-duration:.75s}@keyframes bounce{0%,20%,53%,80%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1);transform:translateZ(0)}40%,43%{animation-timing-function:cubic-bezier(.755,.05,.855,.06);transform:translate3d(0,-30px,0)}70%{animation-timing-function:cubic-bezier(.755,.05,.855,.06);transform:translate3d(0,-15px,0)}90%{transform:translate3d(0,-4px,0)}}.bounce{animation-name:bounce;transform-origin:center bottom}@keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}.flash{animation-name:flash}@keyframes pulse{0%{transform:scaleX(1)}50%{transform:scale3d(1.05,1.05,1.05)}to{transform:scaleX(1)}}.pulse{animation-name:pulse}@keyframes rubberBand{0%{transform:scaleX(1)}30%{transform:scale3d(1.25,.75,1)}40%{transform:scale3d(.75,1.25,1)}50%{transform:scale3d(1.15,.85,1)}65%{transform:scale3d(.95,1.05,1)}75%{transform:scale3d(1.05,.95,1)}to{transform:scaleX(1)}}.rubberBand{animation-name:rubberBand}@keyframes shake{0%,to{transform:translateZ(0)}10%,30%,50%,70%,90%{transform:translate3d(-10px,0,0)}20%,40%,60%,80%{transform:translate3d(10px,0,0)}}.shake{animation-name:shake}@keyframes headShake{0%{transform:translateX(0)}6.5%{transform:translateX(-6px) rotateY(-9deg)}18.5%{transform:translateX(5px) rotateY(7deg)}31.5%{transform:translateX(-3px) rotateY(-5deg)}43.5%{transform:translateX(2px) rotateY(3deg)}50%{transform:translateX(0)}}.headShake{animation-timing-function:ease-in-out;animation-name:headShake}@keyframes swing{20%{transform:rotate(15deg)}40%{transform:rotate(-10deg)}60%{transform:rotate(5deg)}80%{transform:rotate(-5deg)}to{transform:rotate(0deg)}}.swing{transform-origin:top center;animation-name:swing}@keyframes tada{0%{transform:scaleX(1)}10%,20%{transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{transform:scaleX(1)}}.tada{animation-name:tada}@keyframes wobble{0%{transform:none}15%{transform:translate3d(-25%,0,0) rotate(-5deg)}30%{transform:translate3d(20%,0,0) rotate(3deg)}45%{transform:translate3d(-15%,0,0) rotate(-3deg)}60%{transform:translate3d(10%,0,0) rotate(2deg)}75%{transform:translate3d(-5%,0,0) rotate(-1deg)}to{transform:none}}.wobble{animation-name:wobble}@keyframes jello{0%,11.1%,to{transform:none}22.2%{transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{transform:skewX(6.25deg) skewY(6.25deg)}44.4%{transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{transform:skewX(.390625deg) skewY(.390625deg)}88.8%{transform:skewX(-.1953125deg) skewY(-.1953125deg)}}.jello{animation-name:jello;transform-origin:center}@keyframes bounceIn{0%,20%,40%,60%,80%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:scale3d(.3,.3,.3)}20%{transform:scale3d(1.1,1.1,1.1)}40%{transform:scale3d(.9,.9,.9)}60%{opacity:1;transform:scale3d(1.03,1.03,1.03)}80%{transform:scale3d(.97,.97,.97)}to{opacity:1;transform:scaleX(1)}}.bounceIn{animation-name:bounceIn}@keyframes bounceInDown{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,-3000px,0)}60%{opacity:1;transform:translate3d(0,25px,0)}75%{transform:translate3d(0,-10px,0)}90%{transform:translate3d(0,5px,0)}to{transform:none}}.bounceInDown{animation-name:bounceInDown}@keyframes bounceInLeft{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(-3000px,0,0)}60%{opacity:1;transform:translate3d(25px,0,0)}75%{transform:translate3d(-10px,0,0)}90%{transform:translate3d(5px,0,0)}to{transform:none}}.bounceInLeft{animation-name:bounceInLeft}@keyframes bounceInRight{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(3000px,0,0)}60%{opacity:1;transform:translate3d(-25px,0,0)}75%{transform:translate3d(10px,0,0)}90%{transform:translate3d(-5px,0,0)}to{transform:none}}.bounceInRight{animation-name:bounceInRight}@keyframes bounceInUp{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,3000px,0)}60%{opacity:1;transform:translate3d(0,-20px,0)}75%{transform:translate3d(0,10px,0)}90%{transform:translate3d(0,-5px,0)}to{transform:translateZ(0)}}.bounceInUp{animation-name:bounceInUp}@keyframes bounceOut{20%{transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;transform:scale3d(1.1,1.1,1.1)}to{opacity:0;transform:scale3d(.3,.3,.3)}}.bounceOut{animation-name:bounceOut}@keyframes bounceOutDown{20%{transform:translate3d(0,10px,0)}40%,45%{opacity:1;transform:translate3d(0,-20px,0)}to{opacity:0;transform:translate3d(0,2000px,0)}}.bounceOutDown{animation-name:bounceOutDown}@keyframes bounceOutLeft{20%{opacity:1;transform:translate3d(20px,0,0)}to{opacity:0;transform:translate3d(-2000px,0,0)}}.bounceOutLeft{animation-name:bounceOutLeft}@keyframes bounceOutRight{20%{opacity:1;transform:translate3d(-20px,0,0)}to{opacity:0;transform:translate3d(2000px,0,0)}}.bounceOutRight{animation-name:bounceOutRight}@keyframes bounceOutUp{20%{transform:translate3d(0,-10px,0)}40%,45%{opacity:1;transform:translate3d(0,20px,0)}to{opacity:0;transform:translate3d(0,-2000px,0)}}.bounceOutUp{animation-name:bounceOutUp}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.fadeIn{animation-name:fadeIn}@keyframes fadeInDown{0%{opacity:0;transform:translate3d(0,-100%,0)}to{opacity:1;transform:none}}.fadeInDown{animation-name:fadeInDown}@keyframes fadeInDownBig{0%{opacity:0;transform:translate3d(0,-2000px,0)}to{opacity:1;transform:none}}.fadeInDownBig{animation-name:fadeInDownBig}@keyframes fadeInLeft{0%{opacity:0;transform:translate3d(-100%,0,0)}to{opacity:1;transform:none}}.fadeInLeft{animation-name:fadeInLeft}@keyframes fadeInLeftBig{0%{opacity:0;transform:translate3d(-2000px,0,0)}to{opacity:1;transform:none}}.fadeInLeftBig{animation-name:fadeInLeftBig}@keyframes fadeInRight{0%{opacity:0;transform:translate3d(100%,0,0)}to{opacity:1;transform:none}}.fadeInRight{animation-name:fadeInRight}@keyframes fadeInRightBig{0%{opacity:0;transform:translate3d(2000px,0,0)}to{opacity:1;transform:none}}.fadeInRightBig{animation-name:fadeInRightBig}@keyframes fadeInUp{0%{opacity:0;transform:translate3d(0,100%,0)}to{opacity:1;transform:none}}.fadeInUp{animation-name:fadeInUp}@keyframes fadeInUpBig{0%{opacity:0;transform:translate3d(0,2000px,0)}to{opacity:1;transform:none}}.fadeInUpBig{animation-name:fadeInUpBig}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.fadeOut{animation-name:fadeOut}@keyframes fadeOutDown{0%{opacity:1}to{opacity:0;transform:translate3d(0,100%,0)}}.fadeOutDown{animation-name:fadeOutDown}@keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;transform:translate3d(0,2000px,0)}}.fadeOutDownBig{animation-name:fadeOutDownBig}@keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;transform:translate3d(-100%,0,0)}}.fadeOutLeft{animation-name:fadeOutLeft}@keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;transform:translate3d(-2000px,0,0)}}.fadeOutLeftBig{animation-name:fadeOutLeftBig}@keyframes fadeOutRight{0%{opacity:1}to{opacity:0;transform:translate3d(100%,0,0)}}.fadeOutRight{animation-name:fadeOutRight}@keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;transform:translate3d(2000px,0,0)}}.fadeOutRightBig{animation-name:fadeOutRightBig}@keyframes fadeOutUp{0%{opacity:1}to{opacity:0;transform:translate3d(0,-100%,0)}}.fadeOutUp{animation-name:fadeOutUp}@keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;transform:translate3d(0,-2000px,0)}}.fadeOutUpBig{animation-name:fadeOutUpBig}@keyframes flip{0%{transform:perspective(400px) rotateY(-1turn);animation-timing-function:ease-out}40%{transform:perspective(400px) translateZ(150px) rotateY(-190deg);animation-timing-function:ease-out}50%{transform:perspective(400px) translateZ(150px) rotateY(-170deg);animation-timing-function:ease-in}80%{transform:perspective(400px) scale3d(.95,.95,.95);animation-timing-function:ease-in}to{transform:perspective(400px);animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;animation-name:flip}@keyframes flipInX{0%{transform:perspective(400px) rotateX(90deg);animation-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotateX(-20deg);animation-timing-function:ease-in}60%{transform:perspective(400px) rotateX(10deg);opacity:1}80%{transform:perspective(400px) rotateX(-5deg)}to{transform:perspective(400px)}}.flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;animation-name:flipInX}@keyframes flipInY{0%{transform:perspective(400px) rotateY(90deg);animation-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotateY(-20deg);animation-timing-function:ease-in}60%{transform:perspective(400px) rotateY(10deg);opacity:1}80%{transform:perspective(400px) rotateY(-5deg)}to{transform:perspective(400px)}}.flipInY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;animation-name:flipInY}@keyframes flipOutX{0%{transform:perspective(400px)}30%{transform:perspective(400px) rotateX(-20deg);opacity:1}to{transform:perspective(400px) rotateX(90deg);opacity:0}}.flipOutX{animation-name:flipOutX;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@keyframes flipOutY{0%{transform:perspective(400px)}30%{transform:perspective(400px) rotateY(-15deg);opacity:1}to{transform:perspective(400px) rotateY(90deg);opacity:0}}.flipOutY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;animation-name:flipOutY}@keyframes lightSpeedIn{0%{transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{transform:skewX(20deg);opacity:1}80%{transform:skewX(-5deg);opacity:1}to{transform:none;opacity:1}}.lightSpeedIn{animation-name:lightSpeedIn;animation-timing-function:ease-out}@keyframes lightSpeedOut{0%{opacity:1}to{transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.lightSpeedOut{animation-name:lightSpeedOut;animation-timing-function:ease-in}@keyframes rotateIn{0%{transform-origin:center;transform:rotate(-200deg);opacity:0}to{transform-origin:center;transform:none;opacity:1}}.rotateIn{animation-name:rotateIn}@keyframes rotateInDownLeft{0%{transform-origin:left bottom;transform:rotate(-45deg);opacity:0}to{transform-origin:left bottom;transform:none;opacity:1}}.rotateInDownLeft{animation-name:rotateInDownLeft}@keyframes rotateInDownRight{0%{transform-origin:right bottom;transform:rotate(45deg);opacity:0}to{transform-origin:right bottom;transform:none;opacity:1}}.rotateInDownRight{animation-name:rotateInDownRight}@keyframes rotateInUpLeft{0%{transform-origin:left bottom;transform:rotate(45deg);opacity:0}to{transform-origin:left bottom;transform:none;opacity:1}}.rotateInUpLeft{animation-name:rotateInUpLeft}@keyframes rotateInUpRight{0%{transform-origin:right bottom;transform:rotate(-90deg);opacity:0}to{transform-origin:right bottom;transform:none;opacity:1}}.rotateInUpRight{animation-name:rotateInUpRight}@keyframes rotateOut{0%{transform-origin:center;opacity:1}to{transform-origin:center;transform:rotate(200deg);opacity:0}}.rotateOut{animation-name:rotateOut}@keyframes rotateOutDownLeft{0%{transform-origin:left bottom;opacity:1}to{transform-origin:left bottom;transform:rotate(45deg);opacity:0}}.rotateOutDownLeft{animation-name:rotateOutDownLeft}@keyframes rotateOutDownRight{0%{transform-origin:right bottom;opacity:1}to{transform-origin:right bottom;transform:rotate(-45deg);opacity:0}}.rotateOutDownRight{animation-name:rotateOutDownRight}@keyframes rotateOutUpLeft{0%{transform-origin:left bottom;opacity:1}to{transform-origin:left bottom;transform:rotate(-45deg);opacity:0}}.rotateOutUpLeft{animation-name:rotateOutUpLeft}@keyframes rotateOutUpRight{0%{transform-origin:right bottom;opacity:1}to{transform-origin:right bottom;transform:rotate(90deg);opacity:0}}.rotateOutUpRight{animation-name:rotateOutUpRight}@keyframes hinge{0%{transform-origin:top left;animation-timing-function:ease-in-out}20%,60%{transform:rotate(80deg);transform-origin:top left;animation-timing-function:ease-in-out}40%,80%{transform:rotate(60deg);transform-origin:top left;animation-timing-function:ease-in-out;opacity:1}to{transform:translate3d(0,700px,0);opacity:0}}.hinge{animation-name:hinge}@keyframes jackInTheBox{0%{opacity:0;transform:scale(.1) rotate(30deg);transform-origin:center bottom}50%{transform:rotate(-10deg)}70%{transform:rotate(3deg)}to{opacity:1;transform:scale(1)}}.jackInTheBox{animation-name:jackInTheBox}@keyframes rollIn{0%{opacity:0;transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;transform:none}}.rollIn{animation-name:rollIn}@keyframes rollOut{0%{opacity:1}to{opacity:0;transform:translate3d(100%,0,0) rotate(120deg)}}.rollOut{animation-name:rollOut}@keyframes zoomIn{0%{opacity:0;transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{animation-name:zoomIn}@keyframes zoomInDown{0%{opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,60px,0);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInDown{animation-name:zoomInDown}@keyframes zoomInLeft{0%{opacity:0;transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(10px,0,0);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInLeft{animation-name:zoomInLeft}@keyframes zoomInRight{0%{opacity:0;transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInRight{animation-name:zoomInRight}@keyframes zoomInUp{0%{opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInUp{animation-name:zoomInUp}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;transform:scale3d(.3,.3,.3)}to{opacity:0}}.zoomOut{animation-name:zoomOut}@keyframes zoomOutDown{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform-origin:center bottom;animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutDown{animation-name:zoomOutDown}@keyframes zoomOutLeft{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;transform:scale(.1) translate3d(-2000px,0,0);transform-origin:left center}}.zoomOutLeft{animation-name:zoomOutLeft}@keyframes zoomOutRight{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;transform:scale(.1) translate3d(2000px,0,0);transform-origin:right center}}.zoomOutRight{animation-name:zoomOutRight}@keyframes zoomOutUp{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,60px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform-origin:center bottom;animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutUp{animation-name:zoomOutUp}@keyframes slideInDown{0%{transform:translate3d(0,-100%,0);visibility:visible}to{transform:translateZ(0)}}.slideInDown{animation-name:slideInDown}@keyframes slideInLeft{0%{transform:translate3d(-100%,0,0);visibility:visible}to{transform:translateZ(0)}}.slideInLeft{animation-name:slideInLeft}@keyframes slideInRight{0%{transform:translate3d(100%,0,0);visibility:visible}to{transform:translateZ(0)}}.slideInRight{animation-name:slideInRight}@keyframes slideInUp{0%{transform:translate3d(0,100%,0);visibility:visible}to{transform:translateZ(0)}}.slideInUp{animation-name:slideInUp}@keyframes slideOutDown{0%{transform:translateZ(0)}to{visibility:hidden;transform:translate3d(0,100%,0)}}.slideOutDown{animation-name:slideOutDown}@keyframes slideOutLeft{0%{transform:translateZ(0)}to{visibility:hidden;transform:translate3d(-100%,0,0)}}.slideOutLeft{animation-name:slideOutLeft}@keyframes slideOutRight{0%{transform:translateZ(0)}to{visibility:hidden;transform:translate3d(100%,0,0)}}.slideOutRight{animation-name:slideOutRight}@keyframes slideOutUp{0%{transform:translateZ(0)}to{visibility:hidden;transform:translate3d(0,-100%,0)}}.slideOutUp{animation-name:slideOutUp} 12 | -------------------------------------------------------------------------------- /404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Ubuntu Justice Institute 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 |
37 |
38 |
39 | 40 | 41 | 42 | 43 |
44 |
45 | 50 |
51 |
52 |
53 |
54 |
55 | 56 |
57 |
58 |
Call Us
59 | +012 345 6789 60 |
61 |
62 |
63 |
64 |
65 |
66 | 67 |
68 |
69 |
Mail Us
70 | info@domain.com 71 |
72 |
73 |
74 |
75 |
76 |
77 | 78 |
79 |
80 |
Address
81 | 123 Street, NY, USA 82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 | 90 | 91 | 92 | 93 |
94 | 126 |
127 | 128 | 129 | 130 | 131 | 143 | 144 | 145 | 146 | 147 |
148 |
149 |
150 |
151 |
152 | 156 |

Together, we can build a world where everyone has the chance to thrive.

157 |
158 |
159 |
160 |
161 | Scroll Down 162 |
163 |
164 |
165 |
166 |
167 | 168 | 169 | 170 | 171 | 188 | 189 | 190 | 191 | 192 |
193 |
194 |
195 |
196 | 197 |

404

198 |

Page Not Found

199 |

We’re sorry, the page you have looked for does not exist in our website! Maybe go to our home page or try to use a search?

200 | Go Back To Home 201 |
202 |
203 |
204 |
205 | 206 | 207 | 208 | 209 |
210 |
211 |
212 |
213 |

Subscribe the Newsletter

214 |
215 | 217 | 219 |
220 |

Don't worry, we won't spam you with emails.

221 |
222 |
223 |
224 |
225 | 226 | 227 | 228 | 229 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | -------------------------------------------------------------------------------- /lib/wow/wow.js: -------------------------------------------------------------------------------- 1 | /* 2 | * WOW wow.js - v1.3.0 - 2016-10-04 3 | * https://wowjs.uk 4 | * Copyright (c) 2016 Thomas Grainger; Licensed MIT 5 | */ 6 | 7 | (function (global, factory) { 8 | if (typeof define === "function" && define.amd) { 9 | define(['module', 'exports'], factory); 10 | } else if (typeof exports !== "undefined") { 11 | factory(module, exports); 12 | } else { 13 | var mod = { 14 | exports: {} 15 | }; 16 | factory(mod, mod.exports); 17 | global.WOW = mod.exports; 18 | } 19 | })(this, function (module, exports) { 20 | 'use strict'; 21 | 22 | Object.defineProperty(exports, "__esModule", { 23 | value: true 24 | }); 25 | 26 | var _class, _temp; 27 | 28 | function _classCallCheck(instance, Constructor) { 29 | if (!(instance instanceof Constructor)) { 30 | throw new TypeError("Cannot call a class as a function"); 31 | } 32 | } 33 | 34 | var _createClass = function () { 35 | function defineProperties(target, props) { 36 | for (var i = 0; i < props.length; i++) { 37 | var descriptor = props[i]; 38 | descriptor.enumerable = descriptor.enumerable || false; 39 | descriptor.configurable = true; 40 | if ("value" in descriptor) descriptor.writable = true; 41 | Object.defineProperty(target, descriptor.key, descriptor); 42 | } 43 | } 44 | 45 | return function (Constructor, protoProps, staticProps) { 46 | if (protoProps) defineProperties(Constructor.prototype, protoProps); 47 | if (staticProps) defineProperties(Constructor, staticProps); 48 | return Constructor; 49 | }; 50 | }(); 51 | 52 | function isIn(needle, haystack) { 53 | return haystack.indexOf(needle) >= 0; 54 | } 55 | 56 | function extend(custom, defaults) { 57 | for (var key in defaults) { 58 | if (custom[key] == null) { 59 | var value = defaults[key]; 60 | custom[key] = value; 61 | } 62 | } 63 | return custom; 64 | } 65 | 66 | function isMobile(agent) { 67 | return (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(agent) 68 | ); 69 | } 70 | 71 | function createEvent(event) { 72 | var bubble = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1]; 73 | var cancel = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2]; 74 | var detail = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3]; 75 | 76 | var customEvent = void 0; 77 | if (document.createEvent != null) { 78 | // W3C DOM 79 | customEvent = document.createEvent('CustomEvent'); 80 | customEvent.initCustomEvent(event, bubble, cancel, detail); 81 | } else if (document.createEventObject != null) { 82 | // IE DOM < 9 83 | customEvent = document.createEventObject(); 84 | customEvent.eventType = event; 85 | } else { 86 | customEvent.eventName = event; 87 | } 88 | 89 | return customEvent; 90 | } 91 | 92 | function emitEvent(elem, event) { 93 | if (elem.dispatchEvent != null) { 94 | // W3C DOM 95 | elem.dispatchEvent(event); 96 | } else if (event in (elem != null)) { 97 | elem[event](); 98 | } else if ('on' + event in (elem != null)) { 99 | elem['on' + event](); 100 | } 101 | } 102 | 103 | function addEvent(elem, event, fn) { 104 | if (elem.addEventListener != null) { 105 | // W3C DOM 106 | elem.addEventListener(event, fn, false); 107 | } else if (elem.attachEvent != null) { 108 | // IE DOM 109 | elem.attachEvent('on' + event, fn); 110 | } else { 111 | // fallback 112 | elem[event] = fn; 113 | } 114 | } 115 | 116 | function removeEvent(elem, event, fn) { 117 | if (elem.removeEventListener != null) { 118 | // W3C DOM 119 | elem.removeEventListener(event, fn, false); 120 | } else if (elem.detachEvent != null) { 121 | // IE DOM 122 | elem.detachEvent('on' + event, fn); 123 | } else { 124 | // fallback 125 | delete elem[event]; 126 | } 127 | } 128 | 129 | function getInnerHeight() { 130 | if ('innerHeight' in window) { 131 | return window.innerHeight; 132 | } 133 | 134 | return document.documentElement.clientHeight; 135 | } 136 | 137 | // Minimalistic WeakMap shim, just in case. 138 | var WeakMap = window.WeakMap || window.MozWeakMap || function () { 139 | function WeakMap() { 140 | _classCallCheck(this, WeakMap); 141 | 142 | this.keys = []; 143 | this.values = []; 144 | } 145 | 146 | _createClass(WeakMap, [{ 147 | key: 'get', 148 | value: function get(key) { 149 | for (var i = 0; i < this.keys.length; i++) { 150 | var item = this.keys[i]; 151 | if (item === key) { 152 | return this.values[i]; 153 | } 154 | } 155 | return undefined; 156 | } 157 | }, { 158 | key: 'set', 159 | value: function set(key, value) { 160 | for (var i = 0; i < this.keys.length; i++) { 161 | var item = this.keys[i]; 162 | if (item === key) { 163 | this.values[i] = value; 164 | return this; 165 | } 166 | } 167 | this.keys.push(key); 168 | this.values.push(value); 169 | return this; 170 | } 171 | }]); 172 | 173 | return WeakMap; 174 | }(); 175 | 176 | // Dummy MutationObserver, to avoid raising exceptions. 177 | var MutationObserver = window.MutationObserver || window.WebkitMutationObserver || window.MozMutationObserver || (_temp = _class = function () { 178 | function MutationObserver() { 179 | _classCallCheck(this, MutationObserver); 180 | 181 | if (typeof console !== 'undefined' && console !== null) { 182 | console.warn('MutationObserver is not supported by your browser.'); 183 | console.warn('WOW.js cannot detect dom mutations, please call .sync() after loading new content.'); 184 | } 185 | } 186 | 187 | _createClass(MutationObserver, [{ 188 | key: 'observe', 189 | value: function observe() {} 190 | }]); 191 | 192 | return MutationObserver; 193 | }(), _class.notSupported = true, _temp); 194 | 195 | // getComputedStyle shim, from http://stackoverflow.com/a/21797294 196 | var getComputedStyle = window.getComputedStyle || function getComputedStyle(el) { 197 | var getComputedStyleRX = /(\-([a-z]){1})/g; 198 | return { 199 | getPropertyValue: function getPropertyValue(prop) { 200 | if (prop === 'float') { 201 | prop = 'styleFloat'; 202 | } 203 | if (getComputedStyleRX.test(prop)) { 204 | prop.replace(getComputedStyleRX, function (_, _char) { 205 | return _char.toUpperCase(); 206 | }); 207 | } 208 | var currentStyle = el.currentStyle; 209 | 210 | return (currentStyle != null ? currentStyle[prop] : void 0) || null; 211 | } 212 | }; 213 | }; 214 | 215 | var WOW = function () { 216 | function WOW() { 217 | var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; 218 | 219 | _classCallCheck(this, WOW); 220 | 221 | this.defaults = { 222 | boxClass: 'wow', 223 | animateClass: 'animated', 224 | offset: 0, 225 | mobile: true, 226 | live: true, 227 | callback: null, 228 | scrollContainer: null, 229 | resetAnimation: true 230 | }; 231 | 232 | this.animate = function animateFactory() { 233 | if ('requestAnimationFrame' in window) { 234 | return function (callback) { 235 | return window.requestAnimationFrame(callback); 236 | }; 237 | } 238 | return function (callback) { 239 | return callback(); 240 | }; 241 | }(); 242 | 243 | this.vendors = ['moz', 'webkit']; 244 | 245 | this.start = this.start.bind(this); 246 | this.resetAnimation = this.resetAnimation.bind(this); 247 | this.scrollHandler = this.scrollHandler.bind(this); 248 | this.scrollCallback = this.scrollCallback.bind(this); 249 | this.scrolled = true; 250 | this.config = extend(options, this.defaults); 251 | if (options.scrollContainer != null) { 252 | this.config.scrollContainer = document.querySelector(options.scrollContainer); 253 | } 254 | // Map of elements to animation names: 255 | this.animationNameCache = new WeakMap(); 256 | this.wowEvent = createEvent(this.config.boxClass); 257 | } 258 | 259 | _createClass(WOW, [{ 260 | key: 'init', 261 | value: function init() { 262 | this.element = window.document.documentElement; 263 | if (isIn(document.readyState, ['interactive', 'complete'])) { 264 | this.start(); 265 | } else { 266 | addEvent(document, 'DOMContentLoaded', this.start); 267 | } 268 | this.finished = []; 269 | } 270 | }, { 271 | key: 'start', 272 | value: function start() { 273 | var _this = this; 274 | 275 | this.stopped = false; 276 | this.boxes = [].slice.call(this.element.querySelectorAll('.' + this.config.boxClass)); 277 | this.all = this.boxes.slice(0); 278 | if (this.boxes.length) { 279 | if (this.disabled()) { 280 | this.resetStyle(); 281 | } else { 282 | for (var i = 0; i < this.boxes.length; i++) { 283 | var box = this.boxes[i]; 284 | this.applyStyle(box, true); 285 | } 286 | } 287 | } 288 | if (!this.disabled()) { 289 | addEvent(this.config.scrollContainer || window, 'scroll', this.scrollHandler); 290 | addEvent(window, 'resize', this.scrollHandler); 291 | this.interval = setInterval(this.scrollCallback, 50); 292 | } 293 | if (this.config.live) { 294 | var mut = new MutationObserver(function (records) { 295 | for (var j = 0; j < records.length; j++) { 296 | var record = records[j]; 297 | for (var k = 0; k < record.addedNodes.length; k++) { 298 | var node = record.addedNodes[k]; 299 | _this.doSync(node); 300 | } 301 | } 302 | return undefined; 303 | }); 304 | mut.observe(document.body, { 305 | childList: true, 306 | subtree: true 307 | }); 308 | } 309 | } 310 | }, { 311 | key: 'stop', 312 | value: function stop() { 313 | this.stopped = true; 314 | removeEvent(this.config.scrollContainer || window, 'scroll', this.scrollHandler); 315 | removeEvent(window, 'resize', this.scrollHandler); 316 | if (this.interval != null) { 317 | clearInterval(this.interval); 318 | } 319 | } 320 | }, { 321 | key: 'sync', 322 | value: function sync() { 323 | if (MutationObserver.notSupported) { 324 | this.doSync(this.element); 325 | } 326 | } 327 | }, { 328 | key: 'doSync', 329 | value: function doSync(element) { 330 | if (typeof element === 'undefined' || element === null) { 331 | element = this.element; 332 | } 333 | if (element.nodeType !== 1) { 334 | return; 335 | } 336 | element = element.parentNode || element; 337 | var iterable = element.querySelectorAll('.' + this.config.boxClass); 338 | for (var i = 0; i < iterable.length; i++) { 339 | var box = iterable[i]; 340 | if (!isIn(box, this.all)) { 341 | this.boxes.push(box); 342 | this.all.push(box); 343 | if (this.stopped || this.disabled()) { 344 | this.resetStyle(); 345 | } else { 346 | this.applyStyle(box, true); 347 | } 348 | this.scrolled = true; 349 | } 350 | } 351 | } 352 | }, { 353 | key: 'show', 354 | value: function show(box) { 355 | this.applyStyle(box); 356 | box.className = box.className + ' ' + this.config.animateClass; 357 | if (this.config.callback != null) { 358 | this.config.callback(box); 359 | } 360 | emitEvent(box, this.wowEvent); 361 | 362 | if (this.config.resetAnimation) { 363 | addEvent(box, 'animationend', this.resetAnimation); 364 | addEvent(box, 'oanimationend', this.resetAnimation); 365 | addEvent(box, 'webkitAnimationEnd', this.resetAnimation); 366 | addEvent(box, 'MSAnimationEnd', this.resetAnimation); 367 | } 368 | 369 | return box; 370 | } 371 | }, { 372 | key: 'applyStyle', 373 | value: function applyStyle(box, hidden) { 374 | var _this2 = this; 375 | 376 | var duration = box.getAttribute('data-wow-duration'); 377 | var delay = box.getAttribute('data-wow-delay'); 378 | var iteration = box.getAttribute('data-wow-iteration'); 379 | 380 | return this.animate(function () { 381 | return _this2.customStyle(box, hidden, duration, delay, iteration); 382 | }); 383 | } 384 | }, { 385 | key: 'resetStyle', 386 | value: function resetStyle() { 387 | for (var i = 0; i < this.boxes.length; i++) { 388 | var box = this.boxes[i]; 389 | box.style.visibility = 'visible'; 390 | } 391 | return undefined; 392 | } 393 | }, { 394 | key: 'resetAnimation', 395 | value: function resetAnimation(event) { 396 | if (event.type.toLowerCase().indexOf('animationend') >= 0) { 397 | var target = event.target || event.srcElement; 398 | target.className = target.className.replace(this.config.animateClass, '').trim(); 399 | } 400 | } 401 | }, { 402 | key: 'customStyle', 403 | value: function customStyle(box, hidden, duration, delay, iteration) { 404 | if (hidden) { 405 | this.cacheAnimationName(box); 406 | } 407 | box.style.visibility = hidden ? 'hidden' : 'visible'; 408 | 409 | if (duration) { 410 | this.vendorSet(box.style, { animationDuration: duration }); 411 | } 412 | if (delay) { 413 | this.vendorSet(box.style, { animationDelay: delay }); 414 | } 415 | if (iteration) { 416 | this.vendorSet(box.style, { animationIterationCount: iteration }); 417 | } 418 | this.vendorSet(box.style, { animationName: hidden ? 'none' : this.cachedAnimationName(box) }); 419 | 420 | return box; 421 | } 422 | }, { 423 | key: 'vendorSet', 424 | value: function vendorSet(elem, properties) { 425 | for (var name in properties) { 426 | if (properties.hasOwnProperty(name)) { 427 | var value = properties[name]; 428 | elem['' + name] = value; 429 | for (var i = 0; i < this.vendors.length; i++) { 430 | var vendor = this.vendors[i]; 431 | elem['' + vendor + name.charAt(0).toUpperCase() + name.substr(1)] = value; 432 | } 433 | } 434 | } 435 | } 436 | }, { 437 | key: 'vendorCSS', 438 | value: function vendorCSS(elem, property) { 439 | var style = getComputedStyle(elem); 440 | var result = style.getPropertyCSSValue(property); 441 | for (var i = 0; i < this.vendors.length; i++) { 442 | var vendor = this.vendors[i]; 443 | result = result || style.getPropertyCSSValue('-' + vendor + '-' + property); 444 | } 445 | return result; 446 | } 447 | }, { 448 | key: 'animationName', 449 | value: function animationName(box) { 450 | var aName = void 0; 451 | try { 452 | aName = this.vendorCSS(box, 'animation-name').cssText; 453 | } catch (error) { 454 | // Opera, fall back to plain property value 455 | aName = getComputedStyle(box).getPropertyValue('animation-name'); 456 | } 457 | 458 | if (aName === 'none') { 459 | return ''; // SVG/Firefox, unable to get animation name? 460 | } 461 | 462 | return aName; 463 | } 464 | }, { 465 | key: 'cacheAnimationName', 466 | value: function cacheAnimationName(box) { 467 | // https://bugzilla.mozilla.org/show_bug.cgi?id=921834 468 | // box.dataset is not supported for SVG elements in Firefox 469 | return this.animationNameCache.set(box, this.animationName(box)); 470 | } 471 | }, { 472 | key: 'cachedAnimationName', 473 | value: function cachedAnimationName(box) { 474 | return this.animationNameCache.get(box); 475 | } 476 | }, { 477 | key: 'scrollHandler', 478 | value: function scrollHandler() { 479 | this.scrolled = true; 480 | } 481 | }, { 482 | key: 'scrollCallback', 483 | value: function scrollCallback() { 484 | if (this.scrolled) { 485 | this.scrolled = false; 486 | var results = []; 487 | for (var i = 0; i < this.boxes.length; i++) { 488 | var box = this.boxes[i]; 489 | if (box) { 490 | if (this.isVisible(box)) { 491 | this.show(box); 492 | continue; 493 | } 494 | results.push(box); 495 | } 496 | } 497 | this.boxes = results; 498 | if (!this.boxes.length && !this.config.live) { 499 | this.stop(); 500 | } 501 | } 502 | } 503 | }, { 504 | key: 'offsetTop', 505 | value: function offsetTop(element) { 506 | // SVG elements don't have an offsetTop in Firefox. 507 | // This will use their nearest parent that has an offsetTop. 508 | // Also, using ('offsetTop' of element) causes an exception in Firefox. 509 | while (element.offsetTop === undefined) { 510 | element = element.parentNode; 511 | } 512 | var top = element.offsetTop; 513 | while (element.offsetParent) { 514 | element = element.offsetParent; 515 | top += element.offsetTop; 516 | } 517 | return top; 518 | } 519 | }, { 520 | key: 'isVisible', 521 | value: function isVisible(box) { 522 | var offset = box.getAttribute('data-wow-offset') || this.config.offset; 523 | var viewTop = this.config.scrollContainer && this.config.scrollContainer.scrollTop || window.pageYOffset; 524 | var viewBottom = viewTop + Math.min(this.element.clientHeight, getInnerHeight()) - offset; 525 | var top = this.offsetTop(box); 526 | var bottom = top + box.clientHeight; 527 | 528 | return top <= viewBottom && bottom >= viewTop; 529 | } 530 | }, { 531 | key: 'disabled', 532 | value: function disabled() { 533 | return !this.config.mobile && isMobile(navigator.userAgent); 534 | } 535 | }]); 536 | 537 | return WOW; 538 | }(); 539 | 540 | exports.default = WOW; 541 | module.exports = exports['default']; 542 | }); 543 | --------------------------------------------------------------------------------