-
21LICENSE
-
684css/svnet.css
-
137gulpfile.js
-
BINimg/logo.png
-
BINimg/logo_chatons_v2.png
-
BINimg/masto.png
-
BINimg/nuage.png
-
BINimg/portfolio/01-full.jpg
-
BINimg/portfolio/01-thumbnail.jpg
-
BINimg/portfolio/02-full.jpg
-
BINimg/portfolio/02-thumbnail.jpg
-
BINimg/portfolio/03-full.jpg
-
BINimg/portfolio/03-thumbnail.jpg
-
BINimg/portfolio/04-full.jpg
-
BINimg/portfolio/04-thumbnail.jpg
-
BINimg/portfolio/05-full.jpg
-
BINimg/portfolio/05-thumbnail.jpg
-
BINimg/portfolio/06-full.jpg
-
BINimg/portfolio/06-thumbnail.jpg
-
BINimg/svnet.png
-
BINimg/tube-icon.png
-
BINimg/tube.png
-
BINimg/weblibre.png
-
227index.html
-
42js/agency.js
-
7js/agency.min.js
-
75js/contact_me.js
-
937js/jqBootstrapValidation.js
-
26mail/contact_me.php
-
6378package-lock.json
-
50package.json
-
19scss/agency.scss
-
13scss/base/_mixins.scss
-
71scss/base/_page.scss
-
17scss/base/_variables.scss
-
26scss/components/_buttons.scss
-
73scss/components/_navbar.scss
-
47scss/layout/_contact.scss
-
43scss/layout/_footer.scss
-
50scss/layout/_masthead.scss
-
140scss/layout/_portfolio.scss
-
5scss/layout/_services.scss
-
18scss/layout/_team.scss
-
178scss/layout/_timeline.scss
-
3719vendor/bootstrap/css/bootstrap-grid.css
-
1vendor/bootstrap/css/bootstrap-grid.css.map
-
7vendor/bootstrap/css/bootstrap-grid.min.css
-
1vendor/bootstrap/css/bootstrap-grid.min.css.map
-
331vendor/bootstrap/css/bootstrap-reboot.css
-
1vendor/bootstrap/css/bootstrap-reboot.css.map
-
8vendor/bootstrap/css/bootstrap-reboot.min.css
-
1vendor/bootstrap/css/bootstrap-reboot.min.css.map
-
10038vendor/bootstrap/css/bootstrap.css
-
1vendor/bootstrap/css/bootstrap.css.map
-
7vendor/bootstrap/css/bootstrap.min.css
-
1vendor/bootstrap/css/bootstrap.min.css.map
-
7013vendor/bootstrap/js/bootstrap.bundle.js
-
1vendor/bootstrap/js/bootstrap.bundle.js.map
-
7vendor/bootstrap/js/bootstrap.bundle.min.js
-
1vendor/bootstrap/js/bootstrap.bundle.min.js.map
-
4435vendor/bootstrap/js/bootstrap.js
-
1vendor/bootstrap/js/bootstrap.js.map
-
7vendor/bootstrap/js/bootstrap.min.js
-
1vendor/bootstrap/js/bootstrap.min.js.map
-
4396vendor/fontawesome-free/css/all.css
-
5vendor/fontawesome-free/css/all.min.css
-
14vendor/fontawesome-free/css/brands.css
-
5vendor/fontawesome-free/css/brands.min.css
-
4363vendor/fontawesome-free/css/fontawesome.css
-
5vendor/fontawesome-free/css/fontawesome.min.css
-
15vendor/fontawesome-free/css/regular.css
-
5vendor/fontawesome-free/css/regular.min.css
-
16vendor/fontawesome-free/css/solid.css
-
5vendor/fontawesome-free/css/solid.min.css
-
371vendor/fontawesome-free/css/svg-with-js.css
-
5vendor/fontawesome-free/css/svg-with-js.min.css
-
2166vendor/fontawesome-free/css/v4-shims.css
-
5vendor/fontawesome-free/css/v4-shims.min.css
-
BINvendor/fontawesome-free/webfonts/fa-brands-400.eot
-
3449vendor/fontawesome-free/webfonts/fa-brands-400.svg
-
BINvendor/fontawesome-free/webfonts/fa-brands-400.ttf
-
BINvendor/fontawesome-free/webfonts/fa-brands-400.woff
-
BINvendor/fontawesome-free/webfonts/fa-brands-400.woff2
-
BINvendor/fontawesome-free/webfonts/fa-regular-400.eot
-
803vendor/fontawesome-free/webfonts/fa-regular-400.svg
-
BINvendor/fontawesome-free/webfonts/fa-regular-400.ttf
-
BINvendor/fontawesome-free/webfonts/fa-regular-400.woff
-
BINvendor/fontawesome-free/webfonts/fa-regular-400.woff2
-
BINvendor/fontawesome-free/webfonts/fa-solid-900.eot
-
4649vendor/fontawesome-free/webfonts/fa-solid-900.svg
-
BINvendor/fontawesome-free/webfonts/fa-solid-900.ttf
-
BINvendor/fontawesome-free/webfonts/fa-solid-900.woff
-
BINvendor/fontawesome-free/webfonts/fa-solid-900.woff2
-
59vendor/jquery-easing/jquery.easing.compatibility.js
-
166vendor/jquery-easing/jquery.easing.js
-
1vendor/jquery-easing/jquery.easing.min.js
-
10598vendor/jquery/jquery.js
-
2vendor/jquery/jquery.min.js
-
1vendor/jquery/jquery.min.map
-
8495vendor/jquery/jquery.slim.js
@ -0,0 +1,21 @@ |
|||
The MIT License (MIT) |
|||
|
|||
Copyright (c) 2013-2019 Blackrock Digital LLC |
|||
|
|||
Permission is hereby granted, free of charge, to any person obtaining a copy |
|||
of this software and associated documentation files (the "Software"), to deal |
|||
in the Software without restriction, including without limitation the rights |
|||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|||
copies of the Software, and to permit persons to whom the Software is |
|||
furnished to do so, subject to the following conditions: |
|||
|
|||
The above copyright notice and this permission notice shall be included in |
|||
all copies or substantial portions of the Software. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
|||
THE SOFTWARE. |
@ -0,0 +1,684 @@ |
|||
/*! |
|||
* Start Bootstrap - Agency v5.2.2 (https://startbootstrap.com/template-overviews/agency) |
|||
* Copyright 2013-2019 Start Bootstrap |
|||
* Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap-agency/blob/master/LICENSE) |
|||
*/ |
|||
|
|||
body { |
|||
overflow-x: hidden; |
|||
font-family: 'Roboto Slab', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; |
|||
} |
|||
|
|||
p { |
|||
line-height: 1.75; |
|||
} |
|||
|
|||
a { |
|||
color: #fed136; |
|||
} |
|||
|
|||
a:hover { |
|||
color: #fec503; |
|||
} |
|||
|
|||
.text-primary { |
|||
color: #fed136 !important; |
|||
} |
|||
|
|||
h1, |
|||
h2, |
|||
h3, |
|||
h4, |
|||
h5, |
|||
h6 { |
|||
font-weight: 700; |
|||
font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; |
|||
} |
|||
|
|||
.page-section { |
|||
padding: 100px 0; |
|||
} |
|||
|
|||
.page-section h2.section-heading { |
|||
font-size: 40px; |
|||
margin-top: 0; |
|||
margin-bottom: 15px; |
|||
} |
|||
|
|||
.page-section h3.section-subheading { |
|||
font-size: 16px; |
|||
font-weight: 400; |
|||
font-style: italic; |
|||
margin-bottom: 75px; |
|||
text-transform: none; |
|||
font-family: 'Droid Serif', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; |
|||
} |
|||
|
|||
@media (min-width: 768px) { |
|||
section { |
|||
padding: 150px 0; |
|||
} |
|||
} |
|||
|
|||
::-moz-selection { |
|||
background: #fed136; |
|||
text-shadow: none; |
|||
} |
|||
|
|||
::selection { |
|||
background: #fed136; |
|||
text-shadow: none; |
|||
} |
|||
|
|||
img::-moz-selection { |
|||
background: transparent; |
|||
} |
|||
|
|||
img::selection { |
|||
background: transparent; |
|||
} |
|||
|
|||
img::-moz-selection { |
|||
background: transparent; |
|||
} |
|||
|
|||
.btn { |
|||
font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; |
|||
font-weight: 700; |
|||
} |
|||
|
|||
.btn-xl { |
|||
font-size: 18px; |
|||
padding: 20px 40px; |
|||
} |
|||
|
|||
.btn-primary { |
|||
background-color: #fed136; |
|||
border-color: #fed136; |
|||
} |
|||
|
|||
.btn-primary:active, .btn-primary:focus, .btn-primary:hover { |
|||
background-color: #fec810 !important; |
|||
border-color: #fec810 !important; |
|||
color: white; |
|||
} |
|||
|
|||
.btn-primary:active, .btn-primary:focus { |
|||
box-shadow: 0 0 0 0.2rem rgba(254, 209, 55, 0.5) !important; |
|||
} |
|||
|
|||
#mainNav { |
|||
background-color: #212529; |
|||
} |
|||
|
|||
#mainNav .navbar-toggler { |
|||
font-size: 12px; |
|||
right: 0; |
|||
padding: 13px; |
|||
text-transform: uppercase; |
|||
color: white; |
|||
border: 0; |
|||
background-color: #fed136; |
|||
font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; |
|||
} |
|||
|
|||
#mainNav .navbar-brand { |
|||
color: #fed136; |
|||
font-family: 'Kaushan Script', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; |
|||
} |
|||
|
|||
#mainNav .navbar-brand.active, #mainNav .navbar-brand:active, #mainNav .navbar-brand:focus, #mainNav .navbar-brand:hover { |
|||
color: #fec503; |
|||
} |
|||
|
|||
#mainNav .navbar-nav .nav-item .nav-link { |
|||
font-size: 90%; |
|||
font-weight: 400; |
|||
padding: 0.75em 0; |
|||
letter-spacing: 1px; |
|||
color: white; |
|||
font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; |
|||
} |
|||
|
|||
#mainNav .navbar-nav .nav-item .nav-link.active, #mainNav .navbar-nav .nav-item .nav-link:hover { |
|||
color: #fed136; |
|||
} |
|||
|
|||
@media (min-width: 992px) { |
|||
#mainNav { |
|||
padding-top: 25px; |
|||
padding-bottom: 25px; |
|||
transition: padding-top 0.3s, padding-bottom 0.3s; |
|||
border: none; |
|||
background-color: transparent; |
|||
} |
|||
#mainNav .navbar-brand { |
|||
font-size: 1.75em; |
|||
transition: all 0.3s; |
|||
} |
|||
#mainNav .navbar-nav .nav-item .nav-link { |
|||
padding: 1.1em 1em !important; |
|||
} |
|||
#mainNav.navbar-shrink { |
|||
padding-top: 0; |
|||
padding-bottom: 0; |
|||
background-color: #212529; |
|||
} |
|||
#mainNav.navbar-shrink .navbar-brand { |
|||
font-size: 1.25em; |
|||
padding: 12px 0; |
|||
} |
|||
} |
|||
|
|||
header.masthead { |
|||
text-align: center; |
|||
color: #000000; |
|||
background-color: #A4A4A4; |
|||
background-image: url("../img/logo.png"); |
|||
background-repeat: no-repeat; |
|||
background-attachment: scroll; |
|||
background-position: center 50px; |
|||
background-size: 500px; |
|||
} |
|||
|
|||
header.masthead .intro-text { |
|||
padding-top: 150px; |
|||
padding-bottom: 100px; |
|||
} |
|||
|
|||
header.masthead .intro-text .intro-lead-in { |
|||
font-size: 22px; |
|||
font-style: italic; |
|||
line-height: 22px; |
|||
margin-bottom: 25px; |
|||
font-family: 'Droid Serif', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; |
|||
} |
|||
|
|||
header.masthead .intro-text .intro-heading { |
|||
font-size: 50px; |
|||
font-weight: 700; |
|||
line-height: 50px; |
|||
margin-bottom: 25px; |
|||
font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; |
|||
} |
|||
|
|||
@media (min-width: 768px) { |
|||
header.masthead .intro-text { |
|||
padding-top: 300px; |
|||
padding-bottom: 200px; |
|||
} |
|||
header.masthead .intro-text .intro-lead-in { |
|||
font-size: 40px; |
|||
font-style: italic; |
|||
line-height: 40px; |
|||
margin-bottom: 25px; |
|||
font-family: 'Droid Serif', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; |
|||
} |
|||
header.masthead .intro-text .intro-heading { |
|||
font-size: 75px; |
|||
font-weight: 700; |
|||
line-height: 75px; |
|||
margin-bottom: 50px; |
|||
font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; |
|||
} |
|||
} |
|||
|
|||
.service-heading { |
|||
margin: 15px 0; |
|||
text-transform: none; |
|||
} |
|||
|
|||
#portfolio .portfolio-item { |
|||
right: 0; |
|||
margin: 0 0 15px; |
|||
} |
|||
|
|||
#portfolio .portfolio-item .portfolio-link { |
|||
position: relative; |
|||
display: block; |
|||
max-width: 400px; |
|||
margin: 0 auto; |
|||
cursor: pointer; |
|||
} |
|||
|
|||
#portfolio .portfolio-item .portfolio-link .portfolio-hover { |
|||
position: absolute; |
|||
width: 100%; |
|||
height: 100%; |
|||
transition: all ease 0.5s; |
|||
opacity: 0; |
|||
background: rgba(254, 209, 54, 0.9); |
|||
} |
|||
|
|||
#portfolio .portfolio-item .portfolio-link .portfolio-hover:hover { |
|||
opacity: 1; |
|||
} |
|||
|
|||
#portfolio .portfolio-item .portfolio-link .portfolio-hover .portfolio-hover-content { |
|||
font-size: 20px; |
|||
position: absolute; |
|||
top: 50%; |
|||
width: 100%; |
|||
height: 20px; |
|||
margin-top: -12px; |
|||
text-align: center; |
|||
color: white; |
|||
} |
|||
|
|||
#portfolio .portfolio-item .portfolio-link .portfolio-hover .portfolio-hover-content i { |
|||
margin-top: -12px; |
|||
} |
|||
|
|||
#portfolio .portfolio-item .portfolio-link .portfolio-hover .portfolio-hover-content h3, |
|||
#portfolio .portfolio-item .portfolio-link .portfolio-hover .portfolio-hover-content h4 { |
|||
margin: 0; |
|||
} |
|||
|
|||
#portfolio .portfolio-item .portfolio-caption { |
|||
max-width: 400px; |
|||
margin: 0 auto; |
|||
padding: 25px; |
|||
text-align: center; |
|||
background-color: #fff; |
|||
} |
|||
|
|||
#portfolio .portfolio-item .portfolio-caption h4 { |
|||
margin: 0; |
|||
text-transform: none; |
|||
} |
|||
|
|||
#portfolio .portfolio-item .portfolio-caption p { |
|||
font-size: 16px; |
|||
font-style: italic; |
|||
margin: 0; |
|||
font-family: 'Droid Serif', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; |
|||
} |
|||
|
|||
#portfolio * { |
|||
z-index: 2; |
|||
} |
|||
|
|||
@media (min-width: 767px) { |
|||
#portfolio .portfolio-item { |
|||
margin: 0 0 30px; |
|||
} |
|||
} |
|||
|
|||
.portfolio-modal .modal-dialog { |
|||
margin: 1rem; |
|||
max-width: 100vw; |
|||
} |
|||
|
|||
.portfolio-modal .modal-content { |
|||
padding: 100px 0; |
|||
text-align: center; |
|||
} |
|||
|
|||
.portfolio-modal .modal-content h2 { |
|||
font-size: 3em; |
|||
margin-bottom: 15px; |
|||
} |
|||
|
|||
.portfolio-modal .modal-content p { |
|||
margin-bottom: 30px; |
|||
} |
|||
|
|||
.portfolio-modal .modal-content p.item-intro { |
|||
font-size: 16px; |
|||
font-style: italic; |
|||
margin: 20px 0 30px; |
|||
font-family: 'Droid Serif', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; |
|||
} |
|||
|
|||
.portfolio-modal .modal-content ul.list-inline { |
|||
margin-top: 0; |
|||
margin-bottom: 30px; |
|||
} |
|||
|
|||
.portfolio-modal .modal-content img { |
|||
margin-bottom: 30px; |
|||
} |
|||
|
|||
.portfolio-modal .modal-content button { |
|||
cursor: pointer; |
|||
} |
|||
|
|||
.portfolio-modal .close-modal { |
|||
position: absolute; |
|||
top: 25px; |
|||
right: 25px; |
|||
width: 75px; |
|||
height: 75px; |
|||
cursor: pointer; |
|||
background-color: transparent; |
|||
} |
|||
|
|||
.portfolio-modal .close-modal:hover { |
|||
opacity: 0.3; |
|||
} |
|||
|
|||
.portfolio-modal .close-modal .lr { |
|||
/* Safari and Chrome */ |
|||
z-index: 1051; |
|||
width: 1px; |
|||
height: 75px; |
|||
margin-left: 35px; |
|||
/* IE 9 */ |
|||
transform: rotate(45deg); |
|||
background-color: #212529; |
|||
} |
|||
|
|||
.portfolio-modal .close-modal .lr .rl { |
|||
/* Safari and Chrome */ |
|||
z-index: 1052; |
|||
width: 1px; |
|||
height: 75px; |
|||
/* IE 9 */ |
|||
transform: rotate(90deg); |
|||
background-color: #212529; |
|||
} |
|||
|
|||
.timeline { |
|||
position: relative; |
|||
padding: 0; |
|||
list-style: none; |
|||
} |
|||
|
|||
.timeline:before { |
|||
position: absolute; |
|||
top: 0; |
|||
bottom: 0; |
|||
left: 40px; |
|||
width: 2px; |
|||
margin-left: -1.5px; |
|||
content: ''; |
|||
background-color: #e9ecef; |
|||
} |
|||
|
|||
.timeline > li { |
|||
position: relative; |
|||
min-height: 50px; |
|||
margin-bottom: 50px; |
|||
} |
|||
|
|||
.timeline > li:after, .timeline > li:before { |
|||
display: table; |
|||
content: ' '; |
|||
} |
|||
|
|||
.timeline > li:after { |
|||
clear: both; |
|||
} |
|||
|
|||
.timeline > li .timeline-panel { |
|||
position: relative; |
|||
float: right; |
|||
width: 100%; |
|||
padding: 0 20px 0 100px; |
|||
text-align: left; |
|||
} |
|||
|
|||
.timeline > li .timeline-panel:before { |
|||
right: auto; |
|||
left: -15px; |
|||
border-right-width: 15px; |
|||
border-left-width: 0; |
|||
} |
|||
|
|||
.timeline > li .timeline-panel:after { |
|||
right: auto; |
|||
left: -14px; |
|||
border-right-width: 14px; |
|||
border-left-width: 0; |
|||
} |
|||
|
|||
.timeline > li .timeline-image { |
|||
position: absolute; |
|||
z-index: 100; |
|||
left: 0; |
|||
width: 80px; |
|||
height: 80px; |
|||
margin-left: 0; |
|||
text-align: center; |
|||
color: white; |
|||
border: 7px solid #e9ecef; |
|||
border-radius: 100%; |
|||
background-color: #fed136; |
|||
} |
|||
|
|||
.timeline > li .timeline-image h4 { |
|||
font-size: 10px; |
|||
line-height: 14px; |
|||
margin-top: 12px; |
|||
} |
|||
|
|||
.timeline > li.timeline-inverted > .timeline-panel { |
|||
float: right; |
|||
padding: 0 20px 0 100px; |
|||
text-align: left; |
|||
} |
|||
|
|||
.timeline > li.timeline-inverted > .timeline-panel:before { |
|||
right: auto; |
|||
left: -15px; |
|||
border-right-width: 15px; |
|||
border-left-width: 0; |
|||
} |
|||
|
|||
.timeline > li.timeline-inverted > .timeline-panel:after { |
|||
right: auto; |
|||
left: -14px; |
|||
border-right-width: 14px; |
|||
border-left-width: 0; |
|||
} |
|||
|
|||
.timeline > li:last-child { |
|||
margin-bottom: 0; |
|||
} |
|||
|
|||
.timeline .timeline-heading h4 { |
|||
margin-top: 0; |
|||
color: inherit; |
|||
} |
|||
|
|||
.timeline .timeline-heading h4.subheading { |
|||
text-transform: none; |
|||
} |
|||
|
|||
.timeline .timeline-body > ul, |
|||
.timeline .timeline-body > p { |
|||
margin-bottom: 0; |
|||
} |
|||
|
|||
@media (min-width: 768px) { |
|||
.timeline:before { |
|||
left: 50%; |
|||
} |
|||
.timeline > li { |
|||
min-height: 100px; |
|||
margin-bottom: 100px; |
|||
} |
|||
.timeline > li .timeline-panel { |
|||
float: left; |
|||
width: 41%; |
|||
padding: 0 20px 20px 30px; |
|||
text-align: right; |
|||
} |
|||
.timeline > li .timeline-image { |
|||
left: 50%; |
|||
width: 100px; |
|||
height: 100px; |
|||
margin-left: -50px; |
|||
} |
|||
.timeline > li .timeline-image h4 { |
|||
font-size: 13px; |
|||
line-height: 18px; |
|||
margin-top: 16px; |
|||
} |
|||
.timeline > li.timeline-inverted > .timeline-panel { |
|||
float: right; |
|||
padding: 0 30px 20px 20px; |
|||
text-align: left; |
|||
} |
|||
} |
|||
|
|||
@media (min-width: 992px) { |
|||
.timeline > li { |
|||
min-height: 150px; |
|||
} |
|||
.timeline > li .timeline-panel { |
|||
padding: 0 20px 20px; |
|||
} |
|||
.timeline > li .timeline-image { |
|||
width: 150px; |
|||
height: 150px; |
|||
margin-left: -75px; |
|||
} |
|||
.timeline > li .timeline-image h4 { |
|||
font-size: 18px; |
|||
line-height: 26px; |
|||
margin-top: 30px; |
|||
} |
|||
.timeline > li.timeline-inverted > .timeline-panel { |
|||
padding: 0 20px 20px; |
|||
} |
|||
} |
|||
|
|||
@media (min-width: 1200px) { |
|||
.timeline > li { |
|||
min-height: 170px; |
|||
} |
|||
.timeline > li .timeline-panel { |
|||
padding: 0 20px 20px 100px; |
|||
} |
|||
.timeline > li .timeline-image { |
|||
width: 170px; |
|||
height: 170px; |
|||
margin-left: -85px; |
|||
} |
|||
.timeline > li .timeline-image h4 { |
|||
margin-top: 40px; |
|||
} |
|||
.timeline > li.timeline-inverted > .timeline-panel { |
|||
padding: 0 100px 20px 20px; |
|||
} |
|||
} |
|||
|
|||
.team-member { |
|||
margin-bottom: 50px; |
|||
text-align: center; |
|||
} |
|||
|
|||
.team-member img { |
|||
width: 225px; |
|||
height: 225px; |
|||
border: 7px solid rgba(0, 0, 0, 0.1); |
|||
} |
|||
|
|||
.team-member h4 { |
|||
margin-top: 25px; |
|||
margin-bottom: 0; |
|||
text-transform: none; |
|||
} |
|||
|
|||
.team-member p { |
|||
margin-top: 0; |
|||
} |
|||
|
|||
section#contact { |
|||
background-color: #212529; |
|||
background-image: url("../img/map-image.png"); |
|||
background-repeat: no-repeat; |
|||
background-position: center; |
|||
} |
|||
|
|||
section#contact .section-heading { |
|||
color: #fff; |
|||
} |
|||
|
|||
section#contact .form-group { |
|||
margin-bottom: 25px; |
|||
} |
|||
|
|||
section#contact .form-group input, |
|||
section#contact .form-group textarea { |
|||
padding: 20px; |
|||
} |
|||
|
|||
section#contact .form-group input.form-control { |
|||
height: auto; |
|||
} |
|||
|
|||
section#contact .form-group textarea.form-control { |
|||
height: 248px; |
|||
} |
|||
|
|||
section#contact .form-control:focus { |
|||
border-color: #fed136; |
|||
box-shadow: none; |
|||
} |
|||
|
|||
section#contact ::-webkit-input-placeholder { |
|||
font-weight: 700; |
|||
color: #ced4da; |
|||
font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; |
|||
} |
|||
|
|||
section#contact :-moz-placeholder { |
|||
font-weight: 700; |
|||
color: #ced4da; |
|||
font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; |
|||
} |
|||
|
|||
section#contact ::-moz-placeholder { |
|||
font-weight: 700; |
|||
color: #ced4da; |
|||
font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; |
|||
} |
|||
|
|||
section#contact :-ms-input-placeholder { |
|||
font-weight: 700; |
|||
color: #ced4da; |
|||
font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; |
|||
} |
|||
|
|||
.footer { |
|||
padding: 25px 0; |
|||
text-align: center; |
|||
} |
|||
|
|||
.footer span.copyright { |
|||
font-size: 90%; |
|||
line-height: 40px; |
|||
text-transform: none; |
|||
font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; |
|||
} |
|||
|
|||
.footer ul.quicklinks { |
|||
font-size: 90%; |
|||
line-height: 40px; |
|||
margin-bottom: 0; |
|||
text-transform: none; |
|||
font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; |
|||
} |
|||
|
|||
ul.social-buttons { |
|||
margin-bottom: 0; |
|||
} |
|||
|
|||
ul.social-buttons li a { |
|||
font-size: 20px; |
|||
line-height: 50px; |
|||
display: block; |
|||
width: 50px; |
|||
height: 50px; |
|||
transition: all 0.3s; |
|||
color: white; |
|||
border-radius: 100%; |
|||
outline: none; |
|||
background-color: #212529; |
|||
} |
|||
|
|||
ul.social-buttons li a:active, ul.social-buttons li a:focus, ul.social-buttons li a:hover { |
|||
background-color: #fed136; |
|||
} |
@ -0,0 +1,137 @@ |
|||
"use strict"; |
|||
|
|||
// Load plugins
|
|||
const autoprefixer = require("gulp-autoprefixer"); |
|||
const browsersync = require("browser-sync").create(); |
|||
const cleanCSS = require("gulp-clean-css"); |
|||
const del = require("del"); |
|||
const gulp = require("gulp"); |
|||
const header = require("gulp-header"); |
|||
const merge = require("merge-stream"); |
|||
const plumber = require("gulp-plumber"); |
|||
const rename = require("gulp-rename"); |
|||
const sass = require("gulp-sass"); |
|||
const uglify = require("gulp-uglify"); |
|||
|
|||
// Load package.json for banner
|
|||
const pkg = require('./package.json'); |
|||
|
|||
// Set the banner content
|
|||
const banner = ['/*!\n', |
|||
' * Start Bootstrap - <%= pkg.title %> v<%= pkg.version %> (<%= pkg.homepage %>)\n', |
|||
' * Copyright 2013-' + (new Date()).getFullYear(), ' <%= pkg.author %>\n', |
|||
' * Licensed under <%= pkg.license %> (https://github.com/BlackrockDigital/<%= pkg.name %>/blob/master/LICENSE)\n', |
|||
' */\n', |
|||
'\n' |
|||
].join(''); |
|||
|
|||
// BrowserSync
|
|||
function browserSync(done) { |
|||
browsersync.init({ |
|||
server: { |
|||
baseDir: "./" |
|||
}, |
|||
port: 3000 |
|||
}); |
|||
done(); |
|||
} |
|||
|
|||
// BrowserSync reload
|
|||
function browserSyncReload(done) { |
|||
browsersync.reload(); |
|||
done(); |
|||
} |
|||
|
|||
// Clean vendor
|
|||
function clean() { |
|||
return del(["./vendor/"]); |
|||
} |
|||
|
|||
// Bring third party dependencies from node_modules into vendor directory
|
|||
function modules() { |
|||
// Bootstrap
|
|||
var bootstrap = gulp.src('./node_modules/bootstrap/dist/**/*') |
|||
.pipe(gulp.dest('./vendor/bootstrap')); |
|||
// Font Awesome CSS
|
|||
var fontAwesomeCSS = gulp.src('./node_modules/@fortawesome/fontawesome-free/css/**/*') |
|||
.pipe(gulp.dest('./vendor/fontawesome-free/css')); |
|||
// Font Awesome Webfonts
|
|||
var fontAwesomeWebfonts = gulp.src('./node_modules/@fortawesome/fontawesome-free/webfonts/**/*') |
|||
.pipe(gulp.dest('./vendor/fontawesome-free/webfonts')); |
|||
// jQuery Easing
|
|||
var jqueryEasing = gulp.src('./node_modules/jquery.easing/*.js') |
|||
.pipe(gulp.dest('./vendor/jquery-easing')); |
|||
// jQuery
|
|||
var jquery = gulp.src([ |
|||
'./node_modules/jquery/dist/*', |
|||
'!./node_modules/jquery/dist/core.js' |
|||
]) |
|||
.pipe(gulp.dest('./vendor/jquery')); |
|||
return merge(bootstrap, fontAwesomeCSS, fontAwesomeWebfonts, jquery, jqueryEasing); |
|||
} |
|||
|
|||
// CSS task
|
|||
function css() { |
|||
return gulp |
|||
.src("./scss/**/*.scss") |
|||
.pipe(plumber()) |
|||
.pipe(sass({ |
|||
outputStyle: "expanded", |
|||
includePaths: "./node_modules", |
|||
})) |
|||
.on("error", sass.logError) |
|||
.pipe(autoprefixer({ |
|||
cascade: false |
|||
})) |
|||
.pipe(header(banner, { |
|||
pkg: pkg |
|||
})) |
|||
.pipe(gulp.dest("./css")) |
|||
.pipe(rename({ |
|||
suffix: ".min" |
|||
})) |
|||
.pipe(cleanCSS()) |
|||
.pipe(gulp.dest("./css")) |
|||
.pipe(browsersync.stream()); |
|||
} |
|||
|
|||
// JS task
|
|||
function js() { |
|||
return gulp |
|||
.src([ |
|||
'./js/*.js', |
|||
'!./js/*.min.js', |
|||
'!./js/contact_me.js', |
|||
'!./js/jqBootstrapValidation.js' |
|||
]) |
|||
.pipe(uglify()) |
|||
.pipe(header(banner, { |
|||
pkg: pkg |
|||
})) |
|||
.pipe(rename({ |
|||
suffix: '.min' |
|||
})) |
|||
.pipe(gulp.dest('./js')) |
|||
.pipe(browsersync.stream()); |
|||
} |
|||
|
|||
// Watch files
|
|||
function watchFiles() { |
|||
gulp.watch("./scss/**/*", css); |
|||
gulp.watch(["./js/**/*", "!./js/**/*.min.js"], js); |
|||
gulp.watch("./**/*.html", browserSyncReload); |
|||
} |
|||
|
|||
// Define complex tasks
|
|||
const vendor = gulp.series(clean, modules); |
|||
const build = gulp.series(vendor, gulp.parallel(css, js)); |
|||
const watch = gulp.series(build, gulp.parallel(watchFiles, browserSync)); |
|||
|
|||
// Export tasks
|
|||
exports.css = css; |
|||
exports.js = js; |
|||
exports.clean = clean; |
|||
exports.vendor = vendor; |
|||
exports.build = build; |
|||
exports.watch = watch; |
|||
exports.default = build; |
After Width: 1459 | Height: 545 | Size: 153 KiB |
After Width: 993 | Height: 706 | Size: 50 KiB |
After Width: 1200 | Height: 630 | Size: 58 KiB |
After Width: 214 | Height: 210 | Size: 16 KiB |
After Width: 700 | Height: 933 | Size: 52 KiB |
After Width: 400 | Height: 300 | Size: 16 KiB |
After Width: 700 | Height: 467 | Size: 31 KiB |
After Width: 400 | Height: 300 | Size: 16 KiB |
After Width: 700 | Height: 933 | Size: 52 KiB |
After Width: 400 | Height: 300 | Size: 16 KiB |
After Width: 700 | Height: 563 | Size: 40 KiB |
After Width: 400 | Height: 300 | Size: 16 KiB |
After Width: 700 | Height: 875 | Size: 102 KiB |
After Width: 400 | Height: 300 | Size: 24 KiB |
After Width: 700 | Height: 904 | Size: 36 KiB |
After Width: 400 | Height: 300 | Size: 13 KiB |
After Width: 991 | Height: 447 | Size: 87 KiB |
After Width: 50 | Height: 24 | Size: 1.1 KiB |
After Width: 507 | Height: 447 | Size: 34 KiB |
After Width: 763 | Height: 392 | Size: 123 KiB |
@ -0,0 +1,227 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="fr"> |
|||
|
|||
<head> |
|||
|
|||
<meta charset="utf-8"> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> |
|||
<meta name="description" content=""> |
|||
<meta name="author" content=""> |
|||
|
|||
<title>SVNET Libre</title> |
|||
|
|||
<!-- Bootstrap core CSS --> |
|||
<link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet"> |
|||
|
|||
<!-- Custom fonts for this template --> |
|||
<link href="vendor/fontawesome-free/css/all.min.css" rel="stylesheet" type="text/css"> |
|||
<!-- <link href="https://fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet" type="text/css"> |
|||
<link href='https://fonts.googleapis.com/css?family=Kaushan+Script' rel='stylesheet' type='text/css'> |
|||
<link href='https://fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic,700italic' rel='stylesheet' type='text/css'> |
|||
<link href='https://fonts.googleapis.com/css?family=Roboto+Slab:400,100,300,700' rel='stylesheet' type='text/css'> |
|||
--> |
|||
<!-- Custom styles for this template --> |
|||
<link href="css/svnet.css" rel="stylesheet"> |
|||
|
|||
</head> |
|||
|
|||
<body id="page-top"> |
|||
|
|||
<!-- Navigation --> |
|||
<nav class="navbar navbar-expand-lg navbar-dark fixed-top" id="mainNav"> |
|||
<div class="container"> |
|||
<a class="navbar-brand js-scroll-trigger" href="#page-top">SVNET Libre</a> |
|||
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation"> |
|||
Menu |
|||
<i class="fas fa-bars"></i> |
|||
</button> |
|||
<div class="collapse navbar-collapse" id="navbarResponsive"> |
|||
<ul class="navbar-nav text-uppercase ml-auto"> |
|||
<li class="nav-item"> |
|||
<a class="nav-link js-scroll-trigger" href="#services">Services</a> |
|||
</li> |
|||
<li class="nav-item"> |
|||
<a class="nav-link js-scroll-trigger" href="#about">A propos</a> |
|||
</li> |
|||
<li class="nav-item"> |
|||
<a class="nav-link js-scroll-trigger" href="#contact">Contact</a> |
|||
</li> |
|||
</ul> |
|||
</div> |
|||
</div> |
|||
</nav> |
|||
|
|||
<!-- Header --> |
|||
<header class="masthead"> |
|||
<div class="container"> |
|||
<div class="intro-text"> |
|||
<div class="intro-lead-in">Membre du<br /><a href="https://www.chatons.org" target="_blank">Collectif des Hรฉbergeurs Alternatifs,Transparents, Ouverts, Neutres et Solidaires</a></div> |
|||
<!-- <div class="intro-heading text-uppercase">La Libertรฉ<br />la Neutralitรฉ du Web</div> --> |
|||
<a class="btn btn-primary btn-xl text-uppercase js-scroll-trigger" href="#services">Dรฉcouvrir</a> |
|||
</div> |
|||
</div> |
|||
</header> |
|||
|
|||
<!-- Services --> |
|||
<section class="page-section" id="services"> |
|||
<div class="container"> |
|||
<div class="row"> |
|||
<div class="col-lg-12 text-center"> |
|||
<h2 class="section-heading text-uppercase">Services</h2> |
|||
<h3 class="section-subheading text-muted"></h3> |
|||
</div> |
|||
</div> |
|||
<div class="row text-center"> |
|||
<div class="col-md-4"> |
|||
<img src="img/tube.png" height="150" /> |
|||
<h4 class="service-heading">TUBE</h4> |
|||
<p class="text-muted">Alternative ร Youtube ou Dailymotion, TUBE est basรฉ sur PeerTube qui est une plateforme de streaming vidรฉo fรฉdรฉrรฉe (ActivityPub) qui utilise P2P (WebTorrent) directement depuis le navigateur web.</p> |
|||
</div> |
|||
<div class="col-md-4"> |
|||
<img src="img/masto.png" height="150" /> |
|||
<h4 class="service-heading">MASTO</h4> |
|||
<p class="text-muted">Alternative ร Twitter, basรฉ sur Mastodon, le rรฉseau social fรฉdรฉrรฉ qui vous redonne le contrรดle jusqu'ร 500 caractรจres.</p> |
|||
</div> |
|||
<div class="col-md-4"> |
|||
<img src="img/nuage.png" height="150" /> |
|||
<h4 class="service-heading">NUAGE</h4> |
|||
<p class="text-muted">Une Alternative Libre ร Dropbox ou Google Drive, NUAGE est basรฉ sur Seafile, un service de stockage ร partir duquel les donnรฉes peuvent รชtre synchronisรฉs sur un ordinateur ou sur un smartphone par le biais d'une application.</p> |
|||
</div> |
|||
</div> |
|||
<div class="row text-center"> |
|||
<div class="col-md-4"> |
|||
<a class="btn btn-primary btn-xl text-uppercase js-scroll-trigger" href="https://tube.svnet.fr" target="_blank">Accรฉder</a> |
|||
</div> |
|||
<div class="col-md-4"> |
|||
<a class="btn btn-primary btn-xl text-uppercase js-scroll-trigger" href="https://masto.svnet.fr" target="_blank">Accรฉder</a> |
|||
</div> |
|||
<div class="col-md-4"> |
|||
<a class="btn btn-primary btn-xl text-uppercase js-scroll-trigger" href="https://nuage.svnet.fr" target="_blank">Accรฉder</a> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<!-- About --> |
|||
<section class="bg-light page-section" id="about"> |
|||
<div class="container"> |
|||
<div class="row"> |
|||
<div class="col-lg-12 text-center"> |
|||
<h2 class="section-heading text-uppercase">A Propos</h2> |
|||
<h3 class="section-subheading text-muted">SVNET Libre Membre du <a href="https://www.chatons.org" target="_blank">Collectif des Hรฉbergeurs Alternatifs,Transparents, Ouverts, Neutres et Solidaires</a></h3> |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col-lg-12"> |
|||
<div class="timeline-body"> |
|||
<p align="center" class="text-muted">Samuel Vermeulen interNET Libre est un ensemble de Solutions en ligne Libres <b>auto-hรฉbergรฉes</b> รฉmanent de ma micro-entreprise SAMUEL.VERMEULEN.PRO Informatique situรฉe dans les Vosges dont lโactivitรฉ est principalement le dรฉpannage informatique ร domicile et proposant diverses Solutions Internet. Les outils, OSโฆ que j'utilise pour mon activitรฉ sont donc aussi basรฉs sur des Logiciels Libres. <br /><br />Par avance Merci pour vos dons de gratitude afin de pouvoir mโaider ร garantir la pรฉrennitรฉ de cette libertรฉ du Web.<p> |
|||
<div align="center"><script src="https://liberapay.com/svnet/widgets/button.js"></script> |
|||
<noscript><a href="https://liberapay.com/svnet/donate"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg"></a></noscript></div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<!-- Contact |
|||
<section class="page-section" id="contact"> |
|||
<div class="container"> |
|||
<div class="row"> |
|||
<div class="col-lg-12 text-center"> |
|||
<h2 class="section-heading text-uppercase">Contact</h2> |
|||
<h3 class="section-subheading text-muted">Demande d'infos ?</h3> |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col-lg-12"> |
|||
<form id="contactForm" name="sentMessage" novalidate="novalidate"> |
|||
<div class="row"> |
|||
<div class="col-md-6"> |
|||
<div class="form-group"> |
|||
<input class="form-control" id="name" type="text" placeholder="Your Name *" required="required" data-validation-required-message="Please enter your name."> |
|||
<p class="help-block text-danger"></p> |
|||
</div> |
|||
<div class="form-group"> |
|||
<input class="form-control" id="email" type="email" placeholder="Your Email *" required="required" data-validation-required-message="Please enter your email address."> |
|||
<p class="help-block text-danger"></p> |
|||
</div> |
|||
<div class="form-group"> |
|||
<input class="form-control" id="phone" type="tel" placeholder="Your Phone *" required="required" data-validation-required-message="Please enter your phone number."> |
|||
<p class="help-block text-danger"></p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-6"> |
|||
<div class="form-group"> |
|||
<textarea class="form-control" id="message" placeholder="Your Message *" required="required" data-validation-required-message="Please enter a message."></textarea> |
|||
<p class="help-block text-danger"></p> |
|||
</div> |
|||
</div> |
|||
<div class="clearfix"></div> |
|||
<div class="col-lg-12 text-center"> |
|||
<div id="success"></div> |
|||
<button id="sendMessageButton" class="btn btn-primary btn-xl text-uppercase" type="submit">Envoyer</button> |
|||
</div> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> --> |
|||
|
|||
<!-- Footer --> |
|||
<footer class="footer"> |
|||
<div class="container"> |
|||
<div class="row align-items-center"> |
|||
<div class="col-md-4"> |
|||
<span class="copyright">SAMUEL.VERMEULEN.PRO Informatique</span> |
|||
</div> |
|||
<!-- |
|||
<div class="col-md-4"> |
|||
<ul class="list-inline social-buttons"> |
|||
<li class="list-inline-item"> |
|||
<a href="#"> |
|||
<i class="fab fa-twitter"></i> |
|||
</a> |
|||
</li> |
|||
<li class="list-inline-item"> |
|||
<a href="#"> |
|||
<i class="fab fa-facebook-f"></i> |
|||
</a> |
|||
</li> |
|||
<li class="list-inline-item"> |
|||
<a href="#"> |
|||
<i class="fab fa-linkedin-in"></i> |
|||
</a> |
|||
</li> |
|||
</ul> |
|||
</div> |
|||
--> |
|||
<div class="col-md-4"> |
|||
<ul class="list-inline quicklinks"> |
|||
<li class="list-inline-item"> |
|||
<a href="#">CGU</a> |
|||
</li> |
|||
</ul> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</footer> |
|||
|
|||
<!-- Bootstrap core JavaScript --> |
|||
<script src="vendor/jquery/jquery.min.js"></script> |
|||
<script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script> |
|||
|
|||
<!-- Plugin JavaScript --> |
|||
<script src="vendor/jquery-easing/jquery.easing.min.js"></script> |
|||
|
|||
<!-- Contact form JavaScript --> |
|||
<script src="js/jqBootstrapValidation.js"></script> |
|||
<script src="js/contact_me.js"></script> |
|||
|
|||
<!-- Custom scripts for this template --> |
|||
<script src="js/agency.min.js"></script> |
|||
|
|||
</body> |
|||
|
|||
</html> |
@ -0,0 +1,42 @@ |
|||
(function($) { |
|||
"use strict"; // Start of use strict
|
|||
|
|||
// Smooth scrolling using jQuery easing
|
|||
$('a.js-scroll-trigger[href*="#"]:not([href="#"])').click(function() { |
|||
if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) { |
|||
var target = $(this.hash); |
|||
target = target.length ? target : $('[name=' + this.hash.slice(1) + ']'); |
|||
if (target.length) { |
|||
$('html, body').animate({ |
|||
scrollTop: (target.offset().top - 54) |
|||
}, 1000, "easeInOutExpo"); |
|||
return false; |
|||
} |
|||
} |
|||
}); |
|||
|
|||
// Closes responsive menu when a scroll trigger link is clicked
|
|||
$('.js-scroll-trigger').click(function() { |
|||
$('.navbar-collapse').collapse('hide'); |
|||
}); |
|||
|
|||
// Activate scrollspy to add active class to navbar items on scroll
|
|||
$('body').scrollspy({ |
|||
target: '#mainNav', |
|||
offset: 56 |
|||
}); |
|||
|
|||
// Collapse Navbar
|
|||
var navbarCollapse = function() { |
|||
if ($("#mainNav").offset().top > 100) { |
|||
$("#mainNav").addClass("navbar-shrink"); |
|||
} else { |
|||
$("#mainNav").removeClass("navbar-shrink"); |
|||
} |
|||
}; |
|||
// Collapse now if page is not at top
|
|||
navbarCollapse(); |
|||
// Collapse the navbar when page is scrolled
|
|||
$(window).scroll(navbarCollapse); |
|||
|
|||
})(jQuery); // End of use strict
|
@ -0,0 +1,7 @@ |
|||
/*! |
|||
* Start Bootstrap - Agency v5.2.2 (https://startbootstrap.com/template-overviews/agency)
|
|||
* Copyright 2013-2019 Start Bootstrap |
|||
* Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap-agency/blob/master/LICENSE)
|
|||
*/ |
|||
|
|||
!function(e){"use strict";e('a.js-scroll-trigger[href*="#"]:not([href="#"])').click(function(){if(location.pathname.replace(/^\//,"")==this.pathname.replace(/^\//,"")&&location.hostname==this.hostname){var a=e(this.hash);if((a=a.length?a:e("[name="+this.hash.slice(1)+"]")).length)return e("html, body").animate({scrollTop:a.offset().top-54},1e3,"easeInOutExpo"),!1}}),e(".js-scroll-trigger").click(function(){e(".navbar-collapse").collapse("hide")}),e("body").scrollspy({target:"#mainNav",offset:56});function a(){100<e("#mainNav").offset().top?e("#mainNav").addClass("navbar-shrink"):e("#mainNav").removeClass("navbar-shrink")}a(),e(window).scroll(a)}(jQuery); |
@ -0,0 +1,75 @@ |
|||
$(function() { |
|||
|
|||
$("#contactForm input,#contactForm textarea").jqBootstrapValidation({ |
|||
preventSubmit: true, |
|||
submitError: function($form, event, errors) { |
|||
// additional error messages or events
|
|||
}, |
|||
submitSuccess: function($form, event) { |
|||
event.preventDefault(); // prevent default submit behaviour
|
|||
// get values from FORM
|
|||
var name = $("input#name").val(); |
|||
var email = $("input#email").val(); |
|||
var phone = $("input#phone").val(); |
|||
var message = $("textarea#message").val(); |
|||
var firstName = name; // For Success/Failure Message
|
|||
// Check for white space in name for Success/Fail message
|
|||
if (firstName.indexOf(' ') >= 0) { |
|||
firstName = name.split(' ').slice(0, -1).join(' '); |
|||
} |
|||
$this = $("#sendMessageButton"); |
|||
$this.prop("disabled", true); // Disable submit button until AJAX call is complete to prevent duplicate messages
|
|||
$.ajax({ |
|||
url: "././mail/contact_me.php", |
|||
type: "POST", |
|||
data: { |
|||
name: name, |
|||
phone: phone, |
|||
email: email, |
|||
message: message |
|||
}, |
|||
cache: false, |
|||
success: function() { |
|||
// Success message
|
|||
$('#success').html("<div class='alert alert-success'>"); |
|||
$('#success > .alert-success').html("<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>×") |
|||
.append("</button>"); |
|||
$('#success > .alert-success') |
|||
.append("<strong>Your message has been sent. </strong>"); |
|||
$('#success > .alert-success') |
|||
.append('</div>'); |
|||
//clear all fields
|
|||
$('#contactForm').trigger("reset"); |
|||
}, |
|||
error: function() { |
|||
// Fail message
|
|||
$('#success').html("<div class='alert alert-danger'>"); |
|||
$('#success > .alert-danger').html("<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>×") |
|||
.append("</button>"); |
|||
$('#success > .alert-danger').append($("<strong>").text("Sorry " + firstName + ", it seems that my mail server is not responding. Please try again later!")); |
|||
$('#success > .alert-danger').append('</div>'); |
|||
//clear all fields
|
|||
$('#contactForm').trigger("reset"); |
|||
}, |
|||
complete: function() { |
|||
setTimeout(function() { |
|||
$this.prop("disabled", false); // Re-enable submit button when AJAX call is complete
|
|||
}, 1000); |
|||
} |
|||
}); |
|||
}, |
|||
filter: function() { |
|||
return $(this).is(":visible"); |
|||
}, |
|||
}); |
|||
|
|||
$("a[data-toggle=\"tab\"]").click(function(e) { |
|||
e.preventDefault(); |
|||
$(this).tab("show"); |
|||
}); |
|||
}); |
|||
|
|||
/*When clicking on Full hide fail/success boxes */ |
|||
$('#name').focus(function() { |
|||
$('#success').html(''); |
|||
}); |
@ -0,0 +1,937 @@ |
|||
/* jqBootstrapValidation |
|||
* A plugin for automating validation on Twitter Bootstrap formatted forms. |
|||
* |
|||
* v1.3.6 |
|||
* |
|||
* License: MIT <http://opensource.org/licenses/mit-license.php> - see LICENSE file
|
|||
* |
|||
* http://ReactiveRaven.github.com/jqBootstrapValidation/
|
|||
*/ |
|||
|
|||
(function($) { |
|||
|
|||
var createdElements = []; |
|||
|
|||
var defaults = { |
|||
options: { |
|||
prependExistingHelpBlock: false, |
|||
sniffHtml: true, // sniff for 'required', 'maxlength', etc
|
|||
preventSubmit: true, // stop the form submit event from firing if validation fails
|
|||
submitError: false, // function called if there is an error when trying to submit
|
|||
submitSuccess: false, // function called just before a successful submit event is sent to the server
|
|||
semanticallyStrict: false, // set to true to tidy up generated HTML output
|
|||
autoAdd: { |
|||
helpBlocks: true |
|||
}, |
|||
filter: function() { |
|||
// return $(this).is(":visible"); // only validate elements you can see
|
|||
return true; // validate everything
|
|||
} |
|||
}, |
|||
methods: { |
|||
init: function(options) { |
|||
|
|||
var settings = $.extend(true, {}, defaults); |
|||
|
|||
settings.options = $.extend(true, settings.options, options); |
|||
|
|||
var $siblingElements = this; |
|||
|
|||
var uniqueForms = $.unique( |
|||
$siblingElements.map(function() { |
|||
return $(this).parents("form")[0]; |
|||
}).toArray() |
|||
); |
|||
|
|||
$(uniqueForms).bind("submit", function(e) { |
|||
var $form = $(this); |
|||
var warningsFound = 0; |
|||
var $inputs = $form.find("input,textarea,select").not("[type=submit],[type=image]").filter(settings.options.filter); |
|||
$inputs.trigger("submit.validation").trigger("validationLostFocus.validation"); |
|||
|
|||
$inputs.each(function(i, el) { |
|||
var $this = $(el), |
|||
$controlGroup = $this.parents(".form-group").first(); |
|||
if ( |
|||
$controlGroup.hasClass("warning") |
|||
) { |
|||
$controlGroup.removeClass("warning").addClass("error"); |
|||
warningsFound++; |
|||
} |
|||
}); |
|||
|
|||
$inputs.trigger("validationLostFocus.validation"); |
|||
|
|||
if (warningsFound) { |
|||
if (settings.options.preventSubmit) { |
|||
e.preventDefault(); |
|||
} |
|||
$form.addClass("error"); |
|||
if ($.isFunction(settings.options.submitError)) { |
|||
settings.options.submitError($form, e, $inputs.jqBootstrapValidation("collectErrors", true)); |
|||
} |
|||
} else { |
|||
$form.removeClass("error"); |
|||
if ($.isFunction(settings.options.submitSuccess)) { |
|||
settings.options.submitSuccess($form, e); |
|||
} |
|||
} |
|||
}); |
|||
|
|||
return this.each(function() { |
|||
|
|||
// Get references to everything we're interested in
|
|||
var $this = $(this), |
|||
$controlGroup = $this.parents(".form-group").first(), |
|||
$helpBlock = $controlGroup.find(".help-block").first(), |
|||
$form = $this.parents("form").first(), |
|||
validatorNames = []; |
|||
|
|||
// create message container if not exists
|
|||
if (!$helpBlock.length && settings.options.autoAdd && settings.options.autoAdd.helpBlocks) { |
|||
$helpBlock = $('<div class="help-block" />'); |
|||
$controlGroup.find('.controls').append($helpBlock); |
|||
createdElements.push($helpBlock[0]); |
|||
} |
|||
|
|||
// =============================================================
|
|||
// SNIFF HTML FOR VALIDATORS
|
|||
// =============================================================
|
|||
|
|||
// *snort sniff snuffle*
|
|||
|
|||
if (settings.options.sniffHtml) { |
|||
var message = ""; |
|||
// ---------------------------------------------------------
|
|||
// PATTERN
|
|||
// ---------------------------------------------------------
|
|||
if ($this.attr("pattern") !== undefined) { |
|||
message = "Not in the expected format<!-- data-validation-pattern-message to override -->"; |
|||
if ($this.data("validationPatternMessage")) { |
|||
message = $this.data("validationPatternMessage"); |
|||
} |
|||
$this.data("validationPatternMessage", message); |
|||
$this.data("validationPatternRegex", $this.attr("pattern")); |
|||
} |
|||
// ---------------------------------------------------------
|
|||
// MAX
|
|||
// ---------------------------------------------------------
|
|||
if ($this.attr("max") !== undefined || $this.attr("aria-valuemax") !== undefined) { |
|||
var max = ($this.attr("max") !== undefined ? $this.attr("max") : $this.attr("aria-valuemax")); |
|||
message = "Too high: Maximum of '" + max + "'<!-- data-validation-max-message to override -->"; |
|||
if ($this.data("validationMaxMessage")) { |
|||
message = $this.data("validationMaxMessage"); |
|||
} |
|||
$this.data("validationMaxMessage", message); |
|||
$this.data("validationMaxMax", max); |
|||
} |
|||
// ---------------------------------------------------------
|
|||
// MIN
|
|||
// ---------------------------------------------------------
|
|||
if ($this.attr("min") !== undefined || $this.attr("aria-valuemin") !== undefined) { |
|||
var min = ($this.attr("min") !== undefined ? $this.attr("min") : $this.attr("aria-valuemin")); |
|||
message = "Too low: Minimum of '" + min + "'<!-- data-validation-min-message to override -->"; |
|||
if ($this.data("validationMinMessage")) { |
|||
message = $this.data("validationMinMessage"); |
|||
} |
|||
$this.data("validationMinMessage", message); |
|||
$this.data("validationMinMin", min); |
|||
} |
|||
// ---------------------------------------------------------
|
|||
// MAXLENGTH
|
|||
// ---------------------------------------------------------
|
|||
if ($this.attr("maxlength") !== undefined) { |
|||
message = "Too long: Maximum of '" + $this.attr("maxlength") + "' characters<!-- data-validation-maxlength-message to override -->"; |
|||
if ($this.data("validationMaxlengthMessage")) { |
|||
message = $this.data("validationMaxlengthMessage"); |
|||
} |
|||
$this.data("validationMaxlengthMessage", message); |
|||
$this.data("validationMaxlengthMaxlength", $this.attr("maxlength")); |
|||
} |
|||
// ---------------------------------------------------------
|
|||
// MINLENGTH
|
|||
// ---------------------------------------------------------
|
|||
if ($this.attr("minlength") !== undefined) { |
|||
message = "Too short: Minimum of '" + $this.attr("minlength") + "' characters<!-- data-validation-minlength-message to override -->"; |
|||
if ($this.data("validationMinlengthMessage")) { |
|||
message = $this.data("validationMinlengthMessage"); |
|||
} |
|||
$this.data("validationMinlengthMessage", message); |
|||
$this.data("validationMinlengthMinlength", $this.attr("minlength")); |
|||
} |
|||
// ---------------------------------------------------------
|
|||
// REQUIRED
|
|||
// ---------------------------------------------------------
|
|||
if ($this.attr("required") !== undefined || $this.attr("aria-required") !== undefined) { |
|||
message = settings.builtInValidators.required.message; |
|||
if ($this.data("validationRequiredMessage")) { |
|||
message = $this.data("validationRequiredMessage"); |
|||
} |
|||
$this.data("validationRequiredMessage", message); |
|||
} |
|||
// ---------------------------------------------------------
|
|||
// NUMBER
|
|||
// ---------------------------------------------------------
|
|||
if ($this.attr("type") !== undefined && $this.attr("type").toLowerCase() === "number") { |
|||
message = settings.builtInValidators.number.message; |
|||
if ($this.data("validationNumberMessage")) { |
|||
message = $this.data("validationNumberMessage"); |
|||
} |
|||
$this.data("validationNumberMessage", message); |
|||
} |
|||
// ---------------------------------------------------------
|
|||
// EMAIL
|
|||
// ---------------------------------------------------------
|
|||
if ($this.attr("type") !== undefined && $this.attr("type").toLowerCase() === "email") { |
|||
message = "Not a valid email address<!-- data-validator-validemail-message to override -->"; |
|||
if ($this.data("validationValidemailMessage")) { |
|||
message = $this.data("validationValidemailMessage"); |
|||
} else if ($this.data("validationEmailMessage")) { |
|||
message = $this.data("validationEmailMessage"); |
|||
} |
|||
$this.data("validationValidemailMessage", message); |
|||
} |
|||
// ---------------------------------------------------------
|
|||
// MINCHECKED
|
|||
// ---------------------------------------------------------
|
|||
if ($this.attr("minchecked") !== undefined) { |
|||
message = "Not enough options checked; Minimum of '" + $this.attr("minchecked") + "' required<!-- data-validation-minchecked-message to override -->"; |
|||
if ($this.data("validationMincheckedMessage")) { |
|||
message = $this.data("validationMincheckedMessage"); |
|||
} |
|||
$this.data("validationMincheckedMessage", message); |
|||
$this.data("validationMincheckedMinchecked", $this.attr("minchecked")); |
|||
} |
|||
// ---------------------------------------------------------
|
|||
// MAXCHECKED
|
|||
// ---------------------------------------------------------
|
|||
if ($this.attr("maxchecked") !== undefined) { |
|||
message = "Too many options checked; Maximum of '" + $this.attr("maxchecked") + "' required<!-- data-validation-maxchecked-message to override -->"; |
|||
if ($this.data("validationMaxcheckedMessage")) { |
|||
message = $this.data("validationMaxcheckedMessage"); |
|||
} |
|||
$this.data("validationMaxcheckedMessage", message); |
|||
$this.data("validationMaxcheckedMaxchecked", $this.attr("maxchecked")); |
|||
} |
|||
} |
|||
|
|||
// =============================================================
|
|||
// COLLECT VALIDATOR NAMES
|
|||
// =============================================================
|
|||
|
|||
// Get named validators
|
|||
if ($this.data("validation") !== undefined) { |
|||
validatorNames = $this.data("validation").split(","); |
|||
} |
|||
|
|||
// Get extra ones defined on the element's data attributes
|
|||
$.each($this.data(), function(i, el) { |
|||
var parts = i.replace(/([A-Z])/g, ",$1").split(","); |
|||
if (parts[0] === "validation" && parts[1]) { |
|||
validatorNames.push(parts[1]); |
|||
} |
|||
}); |
|||
|
|||
// =============================================================
|
|||