@ -1,13 +0,0 @@
@@ -1,13 +0,0 @@
|
||||
# https://github.com/browserslist/browserslist#readme |
||||
|
||||
>= 1% |
||||
last 1 major version |
||||
not dead |
||||
Chrome >= 60 |
||||
Firefox >= 60 |
||||
Edge >= 15.15063 |
||||
Explorer 11 |
||||
iOS >= 10 |
||||
Safari >= 10 |
||||
Android >= 6 |
||||
not ExplorerMobile <= 11 |
||||
@ -1 +1,2 @@
@@ -1 +1,2 @@
|
||||
node_modules |
||||
node_modules |
||||
.DS_Store |
||||
@ -1,683 +0,0 @@
@@ -1,683 +0,0 @@
|
||||
/*! |
||||
* 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: white; |
||||
background-image: url("../img/header-bg.jpg"); |
||||
background-repeat: no-repeat; |
||||
background-attachment: scroll; |
||||
background-position: center center; |
||||
background-size: cover; |
||||
} |
||||
|
||||
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; |
||||
} |
||||
|
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 233 KiB After Width: | Height: | Size: 233 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 356 KiB After Width: | Height: | Size: 356 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 102 KiB After Width: | Height: | Size: 102 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 209 KiB After Width: | Height: | Size: 209 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 221 KiB After Width: | Height: | Size: 221 KiB |
@ -0,0 +1,565 @@
@@ -0,0 +1,565 @@
|
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
<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>Freelancer - Start Bootstrap Theme</title> |
||||
<!-- Font Awesome icons (free version)--> |
||||
<script src="https://use.fontawesome.com/releases/v5.12.1/js/all.js" crossorigin="anonymous"></script> |
||||
<!-- Google fonts--> |
||||
<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" /> |
||||
<!-- Core theme CSS (includes Bootstrap)--> |
||||
<link href="css/styles.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">Start Bootstrap</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="#portfolio">Portfolio</a></li> |
||||
<li class="nav-item"><a class="nav-link js-scroll-trigger" href="#about">About</a></li> |
||||
<li class="nav-item"><a class="nav-link js-scroll-trigger" href="#team">Team</a></li> |
||||
<li class="nav-item"><a class="nav-link js-scroll-trigger" href="#contact">Contact</a></li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
</nav> |
||||
<!-- Masthead--> |
||||
<header class="masthead"> |
||||
<div class="container"> |
||||
<div class="intro-text"> |
||||
<div class="intro-lead-in">Welcome To Our Studio!</div> |
||||
<div class="intro-heading text-uppercase">It's Nice To Meet You</div> |
||||
<a class="btn btn-primary btn-xl text-uppercase js-scroll-trigger" href="#services">Tell Me More</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">Lorem ipsum dolor sit amet consectetur.</h3> |
||||
</div> |
||||
</div> |
||||
<div class="row text-center"> |
||||
<div class="col-md-4"> |
||||
<span class="fa-stack fa-4x"><i class="fas fa-circle fa-stack-2x text-primary"></i><i class="fas fa-shopping-cart fa-stack-1x fa-inverse"></i></span> |
||||
<h4 class="service-heading">E-Commerce</h4> |
||||
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima maxime quam architecto quo inventore harum ex magni, dicta impedit.</p> |
||||
</div> |
||||
<div class="col-md-4"> |
||||
<span class="fa-stack fa-4x"><i class="fas fa-circle fa-stack-2x text-primary"></i><i class="fas fa-laptop fa-stack-1x fa-inverse"></i></span> |
||||
<h4 class="service-heading">Responsive Design</h4> |
||||
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima maxime quam architecto quo inventore harum ex magni, dicta impedit.</p> |
||||
</div> |
||||
<div class="col-md-4"> |
||||
<span class="fa-stack fa-4x"><i class="fas fa-circle fa-stack-2x text-primary"></i><i class="fas fa-lock fa-stack-1x fa-inverse"></i></span> |
||||
<h4 class="service-heading">Web Security</h4> |
||||
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima maxime quam architecto quo inventore harum ex magni, dicta impedit.</p> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</section> |
||||
<!-- Portfolio Grid--> |
||||
<section class="bg-light page-section" id="portfolio"> |
||||
<div class="container"> |
||||
<div class="row"> |
||||
<div class="col-lg-12 text-center"> |
||||
<h2 class="section-heading text-uppercase">Portfolio</h2> |
||||
<h3 class="section-subheading text-muted">Lorem ipsum dolor sit amet consectetur.</h3> |
||||
</div> |
||||
</div> |
||||
<div class="row"> |
||||
<div class="col-md-4 col-sm-6 portfolio-item"> |
||||
<a class="portfolio-link" data-toggle="modal" href="#portfolioModal1" |
||||
><div class="portfolio-hover"> |
||||
<div class="portfolio-hover-content"><i class="fas fa-plus fa-3x"></i></div> |
||||
</div> |
||||
<img class="img-fluid" src="assets/img/portfolio/01-thumbnail.jpg" alt="" |
||||
/></a> |
||||
<div class="portfolio-caption"> |
||||
<h4>Threads</h4> |
||||
<p class="text-muted">Illustration</p> |
||||
</div> |
||||
</div> |
||||
<div class="col-md-4 col-sm-6 portfolio-item"> |
||||
<a class="portfolio-link" data-toggle="modal" href="#portfolioModal2" |
||||
><div class="portfolio-hover"> |
||||
<div class="portfolio-hover-content"><i class="fas fa-plus fa-3x"></i></div> |
||||
</div> |
||||
<img class="img-fluid" src="assets/img/portfolio/02-thumbnail.jpg" alt="" |
||||
/></a> |
||||
<div class="portfolio-caption"> |
||||
<h4>Explore</h4> |
||||
<p class="text-muted">Graphic Design</p> |
||||
</div> |
||||
</div> |
||||
<div class="col-md-4 col-sm-6 portfolio-item"> |
||||
<a class="portfolio-link" data-toggle="modal" href="#portfolioModal3" |
||||
><div class="portfolio-hover"> |
||||
<div class="portfolio-hover-content"><i class="fas fa-plus fa-3x"></i></div> |
||||
</div> |
||||
<img class="img-fluid" src="assets/img/portfolio/03-thumbnail.jpg" alt="" |
||||
/></a> |
||||
<div class="portfolio-caption"> |
||||
<h4>Finish</h4> |
||||
<p class="text-muted">Identity</p> |
||||
</div> |
||||
</div> |
||||
<div class="col-md-4 col-sm-6 portfolio-item"> |
||||
<a class="portfolio-link" data-toggle="modal" href="#portfolioModal4" |
||||
><div class="portfolio-hover"> |
||||
<div class="portfolio-hover-content"><i class="fas fa-plus fa-3x"></i></div> |
||||
</div> |
||||
<img class="img-fluid" src="assets/img/portfolio/04-thumbnail.jpg" alt="" |
||||
/></a> |
||||
<div class="portfolio-caption"> |
||||
<h4>Lines</h4> |
||||
<p class="text-muted">Branding</p> |
||||
</div> |
||||
</div> |
||||
<div class="col-md-4 col-sm-6 portfolio-item"> |
||||
<a class="portfolio-link" data-toggle="modal" href="#portfolioModal5" |
||||
><div class="portfolio-hover"> |
||||
<div class="portfolio-hover-content"><i class="fas fa-plus fa-3x"></i></div> |
||||
</div> |
||||
<img class="img-fluid" src="assets/img/portfolio/05-thumbnail.jpg" alt="" |
||||
/></a> |
||||
<div class="portfolio-caption"> |
||||
<h4>Southwest</h4> |
||||
<p class="text-muted">Website Design</p> |
||||
</div> |
||||
</div> |
||||
<div class="col-md-4 col-sm-6 portfolio-item"> |
||||
<a class="portfolio-link" data-toggle="modal" href="#portfolioModal6" |
||||
><div class="portfolio-hover"> |
||||
<div class="portfolio-hover-content"><i class="fas fa-plus fa-3x"></i></div> |
||||
</div> |
||||
<img class="img-fluid" src="assets/img/portfolio/06-thumbnail.jpg" alt="" |
||||
/></a> |
||||
<div class="portfolio-caption"> |
||||
<h4>Window</h4> |
||||
<p class="text-muted">Photography</p> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</section> |
||||
<!-- About--> |
||||
<section class="page-section" id="about"> |
||||
<div class="container"> |
||||
<div class="row"> |
||||
<div class="col-lg-12 text-center"> |
||||
<h2 class="section-heading text-uppercase">About</h2> |
||||
<h3 class="section-subheading text-muted">Lorem ipsum dolor sit amet consectetur.</h3> |
||||
</div> |
||||
</div> |
||||
<div class="row"> |
||||
<div class="col-lg-12"> |
||||
<ul class="timeline"> |
||||
<li> |
||||
<div class="timeline-image"><img class="rounded-circle img-fluid" src="assets/img/about/1.jpg" alt="" /></div> |
||||
<div class="timeline-panel"> |
||||
<div class="timeline-heading"> |
||||
<h4>2009-2011</h4> |
||||
<h4 class="subheading">Our Humble Beginnings</h4> |
||||
</div> |
||||
<div class="timeline-body"><p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!</p></div> |
||||
</div> |
||||
</li> |
||||
<li class="timeline-inverted"> |
||||
<div class="timeline-image"><img class="rounded-circle img-fluid" src="assets/img/about/2.jpg" alt="" /></div> |
||||
<div class="timeline-panel"> |
||||
<div class="timeline-heading"> |
||||
<h4>March 2011</h4> |
||||
<h4 class="subheading">An Agency is Born</h4> |
||||
</div> |
||||
<div class="timeline-body"><p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!</p></div> |
||||
</div> |
||||
</li> |
||||
<li> |
||||
<div class="timeline-image"><img class="rounded-circle img-fluid" src="assets/img/about/3.jpg" alt="" /></div> |
||||
<div class="timeline-panel"> |
||||
<div class="timeline-heading"> |
||||
<h4>December 2012</h4> |
||||
<h4 class="subheading">Transition to Full Service</h4> |
||||
</div> |
||||
<div class="timeline-body"><p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!</p></div> |
||||
</div> |
||||
</li> |
||||
<li class="timeline-inverted"> |
||||
<div class="timeline-image"><img class="rounded-circle img-fluid" src="assets/img/about/4.jpg" alt="" /></div> |
||||
<div class="timeline-panel"> |
||||
<div class="timeline-heading"> |
||||
<h4>July 2014</h4> |
||||
<h4 class="subheading">Phase Two Expansion</h4> |
||||
</div> |
||||
<div class="timeline-body"><p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!</p></div> |
||||
</div> |
||||
</li> |
||||
<li class="timeline-inverted"> |
||||
<div class="timeline-image"> |
||||
<h4>Be Part<br />Of Our<br />Story!</h4> |
||||
</div> |
||||
</li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</section> |
||||
<!-- Team--> |
||||
<section class="bg-light page-section" id="team"> |
||||
<div class="container"> |
||||
<div class="row"> |
||||
<div class="col-lg-12 text-center"> |
||||
<h2 class="section-heading text-uppercase">Our Amazing Team</h2> |
||||
<h3 class="section-subheading text-muted">Lorem ipsum dolor sit amet consectetur.</h3> |
||||
</div> |
||||
</div> |
||||
<div class="row"> |
||||
<div class="col-sm-4"> |
||||
<div class="team-member"> |
||||
<img class="mx-auto rounded-circle" src="assets/img/team/1.jpg" alt="" /> |
||||
<h4>Kay Garland</h4> |
||||
<p class="text-muted">Lead Designer</p> |
||||
<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> |
||||
<div class="col-sm-4"> |
||||
<div class="team-member"> |
||||
<img class="mx-auto rounded-circle" src="assets/img/team/2.jpg" alt="" /> |
||||
<h4>Larry Parker</h4> |
||||
<p class="text-muted">Lead Marketer</p> |
||||
<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> |
||||
<div class="col-sm-4"> |
||||
<div class="team-member"> |
||||
<img class="mx-auto rounded-circle" src="assets/img/team/3.jpg" alt="" /> |
||||
<h4>Diana Pertersen</h4> |
||||
<p class="text-muted">Lead Developer</p> |
||||
<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> |
||||
</div> |
||||
<div class="row"> |
||||
<div class="col-lg-8 mx-auto text-center"><p class="large text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aut eaque, laboriosam veritatis, quos non quis ad perspiciatis, totam corporis ea, alias ut unde.</p></div> |
||||
</div> |
||||
</div> |
||||
</section> |
||||
<!-- Clients--> |
||||
<section class="py-5"> |
||||
<div class="container"> |
||||
<div class="row"> |
||||
<div class="col-md-3 col-sm-6"> |
||||
<a href="#"><img class="img-fluid d-block mx-auto" src="assets/img/logos/envato.jpg" alt="" /></a> |
||||
</div> |
||||
<div class="col-md-3 col-sm-6"> |
||||
<a href="#"><img class="img-fluid d-block mx-auto" src="assets/img/logos/designmodo.jpg" alt="" /></a> |
||||
</div> |
||||
<div class="col-md-3 col-sm-6"> |
||||
<a href="#"><img class="img-fluid d-block mx-auto" src="assets/img/logos/themeforest.jpg" alt="" /></a> |
||||
</div> |
||||
<div class="col-md-3 col-sm-6"> |
||||
<a href="#"><img class="img-fluid d-block mx-auto" src="assets/img/logos/creative-market.jpg" alt="" /></a> |
||||
</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 Us</h2> |
||||
<h3 class="section-subheading text-muted">Lorem ipsum dolor sit amet consectetur.</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 class="btn btn-primary btn-xl text-uppercase" id="sendMessageButton" type="submit">Send Message</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">Copyright © Your Website 2019</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="#">Privacy Policy</a></li> |
||||
<li class="list-inline-item"><a href="#">Terms of Use</a></li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</footer> |
||||
<!-- Portfolio Modals--><!-- Modal 1--> |
||||
<div class="portfolio-modal modal fade" id="portfolioModal1" tabindex="-1" role="dialog" aria-hidden="true"> |
||||
<div class="modal-dialog"> |
||||
<div class="modal-content"> |
||||
<div class="close-modal" data-dismiss="modal"> |
||||
<div class="lr"><div class="rl"></div></div> |
||||
</div> |
||||
<div class="container"> |
||||
<div class="row"> |
||||
<div class="col-lg-8 mx-auto"> |
||||
<div class="modal-body"> |
||||
<!-- Project Details Go Here--> |
||||
<h2 class="text-uppercase">Project Name</h2> |
||||
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p> |
||||
<img class="img-fluid d-block mx-auto" src="assets/img/portfolio/01-full.jpg" alt="" /> |
||||
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!</p> |
||||
<ul class="list-inline"> |
||||
<li>Date: January 2017</li> |
||||
<li>Client: Threads</li> |
||||
<li>Category: Illustration</li> |
||||
</ul> |
||||
<button class="btn btn-primary" data-dismiss="modal" type="button"><i class="fas fa-times"></i>Close Project</button> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<!-- Modal 2--> |
||||
<div class="portfolio-modal modal fade" id="portfolioModal2" tabindex="-1" role="dialog" aria-hidden="true"> |
||||
<div class="modal-dialog"> |
||||
<div class="modal-content"> |
||||
<div class="close-modal" data-dismiss="modal"> |
||||
<div class="lr"><div class="rl"></div></div> |
||||
</div> |
||||
<div class="container"> |
||||
<div class="row"> |
||||
<div class="col-lg-8 mx-auto"> |
||||
<div class="modal-body"> |
||||
<!-- Project Details Go Here--> |
||||
<h2 class="text-uppercase">Project Name</h2> |
||||
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p> |
||||
<img class="img-fluid d-block mx-auto" src="assets/img/portfolio/02-full.jpg" alt="" /> |
||||
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!</p> |
||||
<ul class="list-inline"> |
||||
<li>Date: January 2017</li> |
||||
<li>Client: Explore</li> |
||||
<li>Category: Graphic Design</li> |
||||
</ul> |
||||
<button class="btn btn-primary" data-dismiss="modal" type="button"><i class="fas fa-times"></i>Close Project</button> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<!-- Modal 3--> |
||||
<div class="portfolio-modal modal fade" id="portfolioModal3" tabindex="-1" role="dialog" aria-hidden="true"> |
||||
<div class="modal-dialog"> |
||||
<div class="modal-content"> |
||||
<div class="close-modal" data-dismiss="modal"> |
||||
<div class="lr"><div class="rl"></div></div> |
||||
</div> |
||||
<div class="container"> |
||||
<div class="row"> |
||||
<div class="col-lg-8 mx-auto"> |
||||
<div class="modal-body"> |
||||
<!-- Project Details Go Here--> |
||||
<h2 class="text-uppercase">Project Name</h2> |
||||
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p> |
||||
<img class="img-fluid d-block mx-auto" src="assets/img/portfolio/03-full.jpg" alt="" /> |
||||
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!</p> |
||||
<ul class="list-inline"> |
||||
<li>Date: January 2017</li> |
||||
<li>Client: Finish</li> |
||||
<li>Category: Identity</li> |
||||
</ul> |
||||
<button class="btn btn-primary" data-dismiss="modal" type="button"><i class="fas fa-times"></i>Close Project</button> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<!-- Modal 4--> |
||||
<div class="portfolio-modal modal fade" id="portfolioModal4" tabindex="-1" role="dialog" aria-hidden="true"> |
||||
<div class="modal-dialog"> |
||||
<div class="modal-content"> |
||||
<div class="close-modal" data-dismiss="modal"> |
||||
<div class="lr"><div class="rl"></div></div> |
||||
</div> |
||||
<div class="container"> |
||||
<div class="row"> |
||||
<div class="col-lg-8 mx-auto"> |
||||
<div class="modal-body"> |
||||
<!-- Project Details Go Here--> |
||||
<h2 class="text-uppercase">Project Name</h2> |
||||
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p> |
||||
<img class="img-fluid d-block mx-auto" src="assets/img/portfolio/04-full.jpg" alt="" /> |
||||
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!</p> |
||||
<ul class="list-inline"> |
||||
<li>Date: January 2017</li> |
||||
<li>Client: Lines</li> |
||||
<li>Category: Branding</li> |
||||
</ul> |
||||
<button class="btn btn-primary" data-dismiss="modal" type="button"><i class="fas fa-times"></i>Close Project</button> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<!-- Modal 5--> |
||||
<div class="portfolio-modal modal fade" id="portfolioModal5" tabindex="-1" role="dialog" aria-hidden="true"> |
||||
<div class="modal-dialog"> |
||||
<div class="modal-content"> |
||||
<div class="close-modal" data-dismiss="modal"> |
||||
<div class="lr"><div class="rl"></div></div> |
||||
</div> |
||||
<div class="container"> |
||||
<div class="row"> |
||||
<div class="col-lg-8 mx-auto"> |
||||
<div class="modal-body"> |
||||
<!-- Project Details Go Here--> |
||||
<h2 class="text-uppercase">Project Name</h2> |
||||
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p> |
||||
<img class="img-fluid d-block mx-auto" src="assets/img/portfolio/05-full.jpg" alt="" /> |
||||
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!</p> |
||||
<ul class="list-inline"> |
||||
<li>Date: January 2017</li> |
||||
<li>Client: Southwest</li> |
||||
<li>Category: Website Design</li> |
||||
</ul> |
||||
<button class="btn btn-primary" data-dismiss="modal" type="button"><i class="fas fa-times"></i>Close Project</button> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<!-- Modal 6--> |
||||
<div class="portfolio-modal modal fade" id="portfolioModal6" tabindex="-1" role="dialog" aria-hidden="true"> |
||||
<div class="modal-dialog"> |
||||
<div class="modal-content"> |
||||
<div class="close-modal" data-dismiss="modal"> |
||||
<div class="lr"><div class="rl"></div></div> |
||||
</div> |
||||
<div class="container"> |
||||
<div class="row"> |
||||
<div class="col-lg-8 mx-auto"> |
||||
<div class="modal-body"> |
||||
<!-- Project Details Go Here--> |
||||
<h2 class="text-uppercase">Project Name</h2> |
||||
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p> |
||||
<img class="img-fluid d-block mx-auto" src="assets/img/portfolio/06-full.jpg" alt="" /> |
||||
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!</p> |
||||
<ul class="list-inline"> |
||||
<li>Date: January 2017</li> |
||||
<li>Client: Window</li> |
||||
<li>Category: Photography</li> |
||||
</ul> |
||||
<button class="btn btn-primary" data-dismiss="modal" type="button"><i class="fas fa-times"></i>Close Project</button> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<!-- Bootstrap core JS--> |
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> |
||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.bundle.min.js"></script> |
||||
<!-- Third party plugin JS--> |
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.4.1/jquery.easing.min.js"></script> |
||||
<!-- Contact form JS--> |
||||
<script src="assets/mail/jqBootstrapValidation.js"></script> |
||||
<script src="assets/mail/contact_me.js"></script> |
||||
<!-- Core theme JS--> |
||||
<script src="js/scripts.js"></script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,47 @@
@@ -0,0 +1,47 @@
|
||||
/*! |
||||
* Start Bootstrap - Agency v6.0.0 (https://startbootstrap.com/template-overviews/agency)
|
||||
* Copyright 2013-2020 Start Bootstrap |
||||
* Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap-agency/blob/master/LICENSE)
|
||||
*/ |
||||
(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
|
||||
@ -1,137 +0,0 @@
@@ -1,137 +0,0 @@
|
||||
"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; |
||||
@ -1,714 +0,0 @@
@@ -1,714 +0,0 @@
|
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
|
||||
<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>Agency - Start Bootstrap Theme</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/agency.min.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">Start Bootstrap</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="#portfolio">Portfolio</a> |
||||
</li> |
||||
<li class="nav-item"> |
||||
<a class="nav-link js-scroll-trigger" href="#about">About</a> |
||||
</li> |
||||
<li class="nav-item"> |
||||
<a class="nav-link js-scroll-trigger" href="#team">Team</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">Welcome To Our Studio!</div> |
||||
<div class="intro-heading text-uppercase">It's Nice To Meet You</div> |
||||
<a class="btn btn-primary btn-xl text-uppercase js-scroll-trigger" href="#services">Tell Me More</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">Lorem ipsum dolor sit amet consectetur.</h3> |
||||
</div> |
||||
</div> |
||||
<div class="row text-center"> |
||||
<div class="col-md-4"> |
||||
<span class="fa-stack fa-4x"> |
||||
<i class="fas fa-circle fa-stack-2x text-primary"></i> |
||||
<i class="fas fa-shopping-cart fa-stack-1x fa-inverse"></i> |
||||
</span> |
||||
<h4 class="service-heading">E-Commerce</h4> |
||||
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima maxime quam architecto quo inventore harum ex magni, dicta impedit.</p> |
||||
</div> |
||||
<div class="col-md-4"> |
||||
<span class="fa-stack fa-4x"> |
||||
<i class="fas fa-circle fa-stack-2x text-primary"></i> |
||||
<i class="fas fa-laptop fa-stack-1x fa-inverse"></i> |
||||
</span> |
||||
<h4 class="service-heading">Responsive Design</h4> |
||||
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima maxime quam architecto quo inventore harum ex magni, dicta impedit.</p> |
||||
</div> |
||||
<div class="col-md-4"> |
||||
<span class="fa-stack fa-4x"> |
||||
<i class="fas fa-circle fa-stack-2x text-primary"></i> |
||||
<i class="fas fa-lock fa-stack-1x fa-inverse"></i> |
||||
</span> |
||||
<h4 class="service-heading">Web Security</h4> |
||||
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima maxime quam architecto quo inventore harum ex magni, dicta impedit.</p> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</section> |
||||
|
||||
<!-- Portfolio Grid --> |
||||
<section class="bg-light page-section" id="portfolio"> |
||||
<div class="container"> |
||||
<div class="row"> |
||||
<div class="col-lg-12 text-center"> |
||||
<h2 class="section-heading text-uppercase">Portfolio</h2> |
||||
<h3 class="section-subheading text-muted">Lorem ipsum dolor sit amet consectetur.</h3> |
||||
</div> |
||||
</div> |
||||
<div class="row"> |
||||
<div class="col-md-4 col-sm-6 portfolio-item"> |
||||
<a class="portfolio-link" data-toggle="modal" href="#portfolioModal1"> |
||||
<div class="portfolio-hover"> |
||||
<div class="portfolio-hover-content"> |
||||
<i class="fas fa-plus fa-3x"></i> |
||||
</div> |
||||
</div> |
||||
<img class="img-fluid" src="img/portfolio/01-thumbnail.jpg" alt=""> |
||||
</a> |
||||
<div class="portfolio-caption"> |
||||
<h4>Threads</h4> |
||||
<p class="text-muted">Illustration</p> |
||||
</div> |
||||
</div> |
||||
<div class="col-md-4 col-sm-6 portfolio-item"> |
||||
<a class="portfolio-link" data-toggle="modal" href="#portfolioModal2"> |
||||
<div class="portfolio-hover"> |
||||
<div class="portfolio-hover-content"> |
||||
<i class="fas fa-plus fa-3x"></i> |
||||
</div> |
||||
</div> |
||||
<img class="img-fluid" src="img/portfolio/02-thumbnail.jpg" alt=""> |
||||
</a> |
||||
<div class="portfolio-caption"> |
||||
<h4>Explore</h4> |
||||
<p class="text-muted">Graphic Design</p> |
||||
</div> |
||||
</div> |
||||
<div class="col-md-4 col-sm-6 portfolio-item"> |
||||
<a class="portfolio-link" data-toggle="modal" href="#portfolioModal3"> |
||||
<div class="portfolio-hover"> |
||||
<div class="portfolio-hover-content"> |
||||
<i class="fas fa-plus fa-3x"></i> |
||||
</div> |
||||
</div> |
||||
<img class="img-fluid" src="img/portfolio/03-thumbnail.jpg" alt=""> |
||||
</a> |
||||
<div class="portfolio-caption"> |
||||
<h4>Finish</h4> |
||||
<p class="text-muted">Identity</p> |
||||
</div> |
||||
</div> |
||||
<div class="col-md-4 col-sm-6 portfolio-item"> |
||||
<a class="portfolio-link" data-toggle="modal" href="#portfolioModal4"> |
||||
<div class="portfolio-hover"> |
||||
<div class="portfolio-hover-content"> |
||||
<i class="fas fa-plus fa-3x"></i> |
||||
</div> |
||||
</div> |
||||
<img class="img-fluid" src="img/portfolio/04-thumbnail.jpg" alt=""> |
||||
</a> |
||||
<div class="portfolio-caption"> |
||||
<h4>Lines</h4> |
||||
<p class="text-muted">Branding</p> |
||||
</div> |
||||
</div> |
||||
<div class="col-md-4 col-sm-6 portfolio-item"> |
||||
<a class="portfolio-link" data-toggle="modal" href="#portfolioModal5"> |
||||
<div class="portfolio-hover"> |
||||
<div class="portfolio-hover-content"> |
||||
<i class="fas fa-plus fa-3x"></i> |
||||
</div> |
||||
</div> |
||||
<img class="img-fluid" src="img/portfolio/05-thumbnail.jpg" alt=""> |
||||
</a> |
||||
<div class="portfolio-caption"> |
||||
<h4>Southwest</h4> |
||||
<p class="text-muted">Website Design</p> |
||||
</div> |
||||
</div> |
||||
<div class="col-md-4 col-sm-6 portfolio-item"> |
||||
<a class="portfolio-link" data-toggle="modal" href="#portfolioModal6"> |
||||
<div class="portfolio-hover"> |
||||
<div class="portfolio-hover-content"> |
||||
<i class="fas fa-plus fa-3x"></i> |
||||
</div> |
||||
</div> |
||||
<img class="img-fluid" src="img/portfolio/06-thumbnail.jpg" alt=""> |
||||
</a> |
||||
<div class="portfolio-caption"> |
||||
<h4>Window</h4> |
||||
<p class="text-muted">Photography</p> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</section> |
||||
|
||||
<!-- About --> |
||||
<section class="page-section" id="about"> |
||||
<div class="container"> |
||||
<div class="row"> |
||||
<div class="col-lg-12 text-center"> |
||||
<h2 class="section-heading text-uppercase">About</h2> |
||||
<h3 class="section-subheading text-muted">Lorem ipsum dolor sit amet consectetur.</h3> |
||||
</div> |
||||
</div> |
||||
<div class="row"> |
||||
<div class="col-lg-12"> |
||||
<ul class="timeline"> |
||||
<li> |
||||
<div class="timeline-image"> |
||||
<img class="rounded-circle img-fluid" src="img/about/1.jpg" alt=""> |
||||
</div> |
||||
<div class="timeline-panel"> |
||||
<div class="timeline-heading"> |
||||
<h4>2009-2011</h4> |
||||
<h4 class="subheading">Our Humble Beginnings</h4> |
||||
</div> |
||||
<div class="timeline-body"> |
||||
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!</p> |
||||
</div> |
||||
</div> |
||||
</li> |
||||
<li class="timeline-inverted"> |
||||
<div class="timeline-image"> |
||||
<img class="rounded-circle img-fluid" src="img/about/2.jpg" alt=""> |
||||
</div> |
||||
<div class="timeline-panel"> |
||||
<div class="timeline-heading"> |
||||
<h4>March 2011</h4> |
||||
<h4 class="subheading">An Agency is Born</h4> |
||||
</div> |
||||
<div class="timeline-body"> |
||||
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!</p> |
||||
</div> |
||||
</div> |
||||
</li> |
||||
<li> |
||||
<div class="timeline-image"> |
||||
<img class="rounded-circle img-fluid" src="img/about/3.jpg" alt=""> |
||||
</div> |
||||
<div class="timeline-panel"> |
||||
<div class="timeline-heading"> |
||||
<h4>December 2012</h4> |
||||
<h4 class="subheading">Transition to Full Service</h4> |
||||
</div> |
||||
<div class="timeline-body"> |
||||
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!</p> |
||||
</div> |
||||
</div> |
||||
</li> |
||||
<li class="timeline-inverted"> |
||||
<div class="timeline-image"> |
||||
<img class="rounded-circle img-fluid" src="img/about/4.jpg" alt=""> |
||||
</div> |
||||
<div class="timeline-panel"> |
||||
<div class="timeline-heading"> |
||||
<h4>July 2014</h4> |
||||
<h4 class="subheading">Phase Two Expansion</h4> |
||||
</div> |
||||
<div class="timeline-body"> |
||||
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!</p> |
||||
</div> |
||||
</div> |
||||
</li> |
||||
<li class="timeline-inverted"> |
||||
<div class="timeline-image"> |
||||
<h4>Be Part |
||||
<br>Of Our |
||||
<br>Story!</h4> |
||||
</div> |
||||
</li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</section> |
||||
|
||||
<!-- Team --> |
||||
<section class="bg-light page-section" id="team"> |
||||
<div class="container"> |
||||
<div class="row"> |
||||
<div class="col-lg-12 text-center"> |
||||
<h2 class="section-heading text-uppercase">Our Amazing Team</h2> |
||||
<h3 class="section-subheading text-muted">Lorem ipsum dolor sit amet consectetur.</h3> |
||||
</div> |
||||
</div> |
||||
<div class="row"> |
||||
<div class="col-sm-4"> |
||||
<div class="team-member"> |
||||
<img class="mx-auto rounded-circle" src="img/team/1.jpg" alt=""> |
||||
<h4>Kay Garland</h4> |
||||
<p class="text-muted">Lead Designer</p> |
||||
<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> |
||||
<div class="col-sm-4"> |
||||
<div class="team-member"> |
||||
<img class="mx-auto rounded-circle" src="img/team/2.jpg" alt=""> |
||||
<h4>Larry Parker</h4> |
||||
<p class="text-muted">Lead Marketer</p> |
||||
<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> |
||||
<div class="col-sm-4"> |
||||
<div class="team-member"> |
||||
<img class="mx-auto rounded-circle" src="img/team/3.jpg" alt=""> |
||||
<h4>Diana Pertersen</h4> |
||||
<p class="text-muted">Lead Developer</p> |
||||
<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> |
||||
</div> |
||||
<div class="row"> |
||||
<div class="col-lg-8 mx-auto text-center"> |
||||
<p class="large text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aut eaque, laboriosam veritatis, quos non quis ad perspiciatis, totam corporis ea, alias ut unde.</p> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</section> |
||||
|
||||
<!-- Clients --> |
||||
<section class="py-5"> |
||||
<div class="container"> |
||||
<div class="row"> |
||||
<div class="col-md-3 col-sm-6"> |
||||
<a href="#"> |
||||
<img class="img-fluid d-block mx-auto" src="img/logos/envato.jpg" alt=""> |
||||
</a> |
||||
</div> |
||||
<div class="col-md-3 col-sm-6"> |
||||
<a href="#"> |
||||
<img class="img-fluid d-block mx-auto" src="img/logos/designmodo.jpg" alt=""> |
||||
</a> |
||||
</div> |
||||
<div class="col-md-3 col-sm-6"> |
||||
<a href="#"> |
||||
<img class="img-fluid d-block mx-auto" src="img/logos/themeforest.jpg" alt=""> |
||||
</a> |
||||
</div> |
||||
<div class="col-md-3 col-sm-6"> |
||||
<a href="#"> |
||||
<img class="img-fluid d-block mx-auto" src="img/logos/creative-market.jpg" alt=""> |
||||
</a> |
||||
</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 Us</h2> |
||||
<h3 class="section-subheading text-muted">Lorem ipsum dolor sit amet consectetur.</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">Send Message</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">Copyright © Your Website 2019</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="#">Privacy Policy</a> |
||||
</li> |
||||
<li class="list-inline-item"> |
||||
<a href="#">Terms of Use</a> |
||||
</li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</footer> |
||||
|
||||
<!-- Portfolio Modals --> |
||||
|
||||
<!-- Modal 1 --> |
||||
<div class="portfolio-modal modal fade" id="portfolioModal1" tabindex="-1" role="dialog" aria-hidden="true"> |
||||
<div class="modal-dialog"> |
||||
<div class="modal-content"> |
||||
<div class="close-modal" data-dismiss="modal"> |
||||
<div class="lr"> |
||||
<div class="rl"></div> |
||||
</div> |
||||
</div> |
||||
<div class="container"> |
||||
<div class="row"> |
||||
<div class="col-lg-8 mx-auto"> |
||||
<div class="modal-body"> |
||||
<!-- Project Details Go Here --> |
||||
<h2 class="text-uppercase">Project Name</h2> |
||||
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p> |
||||
<img class="img-fluid d-block mx-auto" src="img/portfolio/01-full.jpg" alt=""> |
||||
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!</p> |
||||
<ul class="list-inline"> |
||||
<li>Date: January 2017</li> |
||||
<li>Client: Threads</li> |
||||
<li>Category: Illustration</li> |
||||
</ul> |
||||
<button class="btn btn-primary" data-dismiss="modal" type="button"> |
||||
<i class="fas fa-times"></i> |
||||
Close Project</button> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
<!-- Modal 2 --> |
||||
<div class="portfolio-modal modal fade" id="portfolioModal2" tabindex="-1" role="dialog" aria-hidden="true"> |
||||
<div class="modal-dialog"> |
||||
<div class="modal-content"> |
||||
<div class="close-modal" data-dismiss="modal"> |
||||
<div class="lr"> |
||||
<div class="rl"></div> |
||||
</div> |
||||
</div> |
||||
<div class="container"> |
||||
<div class="row"> |
||||
<div class="col-lg-8 mx-auto"> |
||||
<div class="modal-body"> |
||||
<!-- Project Details Go Here --> |
||||
<h2 class="text-uppercase">Project Name</h2> |
||||
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p> |
||||
<img class="img-fluid d-block mx-auto" src="img/portfolio/02-full.jpg" alt=""> |
||||
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!</p> |
||||
<ul class="list-inline"> |
||||
<li>Date: January 2017</li> |
||||
<li>Client: Explore</li> |
||||
<li>Category: Graphic Design</li> |
||||
</ul> |
||||
<button class="btn btn-primary" data-dismiss="modal" type="button"> |
||||
<i class="fas fa-times"></i> |
||||
Close Project</button> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
<!-- Modal 3 --> |
||||
<div class="portfolio-modal modal fade" id="portfolioModal3" tabindex="-1" role="dialog" aria-hidden="true"> |
||||
<div class="modal-dialog"> |
||||
<div class="modal-content"> |
||||
<div class="close-modal" data-dismiss="modal"> |
||||
<div class="lr"> |
||||
<div class="rl"></div> |
||||
</div> |
||||
</div> |
||||
<div class="container"> |
||||
<div class="row"> |
||||
<div class="col-lg-8 mx-auto"> |
||||
<div class="modal-body"> |
||||
<!-- Project Details Go Here --> |
||||
<h2 class="text-uppercase">Project Name</h2> |
||||
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p> |
||||
<img class="img-fluid d-block mx-auto" src="img/portfolio/03-full.jpg" alt=""> |
||||
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!</p> |
||||
<ul class="list-inline"> |
||||
<li>Date: January 2017</li> |
||||
<li>Client: Finish</li> |
||||
<li>Category: Identity</li> |
||||
</ul> |
||||
<button class="btn btn-primary" data-dismiss="modal" type="button"> |
||||
<i class="fas fa-times"></i> |
||||
Close Project</button> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
<!-- Modal 4 --> |
||||
<div class="portfolio-modal modal fade" id="portfolioModal4" tabindex="-1" role="dialog" aria-hidden="true"> |
||||
<div class="modal-dialog"> |
||||
<div class="modal-content"> |
||||
<div class="close-modal" data-dismiss="modal"> |
||||
<div class="lr"> |
||||
<div class="rl"></div> |
||||
</div> |
||||
</div> |
||||
<div class="container"> |
||||
<div class="row"> |
||||
<div class="col-lg-8 mx-auto"> |
||||
<div class="modal-body"> |
||||
<!-- Project Details Go Here --> |
||||
<h2 class="text-uppercase">Project Name</h2> |
||||
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p> |
||||
<img class="img-fluid d-block mx-auto" src="img/portfolio/04-full.jpg" alt=""> |
||||
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!</p> |
||||
<ul class="list-inline"> |
||||
<li>Date: January 2017</li> |
||||
<li>Client: Lines</li> |
||||
<li>Category: Branding</li> |
||||
</ul> |
||||
<button class="btn btn-primary" data-dismiss="modal" type="button"> |
||||
<i class="fas fa-times"></i> |
||||
Close Project</button> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
<!-- Modal 5 --> |
||||
<div class="portfolio-modal modal fade" id="portfolioModal5" tabindex="-1" role="dialog" aria-hidden="true"> |
||||
<div class="modal-dialog"> |
||||
<div class="modal-content"> |
||||
<div class="close-modal" data-dismiss="modal"> |
||||
<div class="lr"> |
||||
<div class="rl"></div> |
||||
</div> |
||||
</div> |
||||
<div class="container"> |
||||
<div class="row"> |
||||
<div class="col-lg-8 mx-auto"> |
||||
<div class="modal-body"> |
||||
<!-- Project Details Go Here --> |
||||
<h2 class="text-uppercase">Project Name</h2> |
||||
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p> |
||||
<img class="img-fluid d-block mx-auto" src="img/portfolio/05-full.jpg" alt=""> |
||||
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!</p> |
||||
<ul class="list-inline"> |
||||
<li>Date: January 2017</li> |
||||
<li>Client: Southwest</li> |
||||
<li>Category: Website Design</li> |
||||
</ul> |
||||
<button class="btn btn-primary" data-dismiss="modal" type="button"> |
||||
<i class="fas fa-times"></i> |
||||
Close Project</button> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
<!-- Modal 6 --> |
||||
<div class="portfolio-modal modal fade" id="portfolioModal6" tabindex="-1" role="dialog" aria-hidden="true"> |
||||
<div class="modal-dialog"> |
||||
<div class="modal-content"> |
||||
<div class="close-modal" data-dismiss="modal"> |
||||
<div class="lr"> |
||||
<div class="rl"></div> |
||||
</div> |
||||
</div> |
||||
<div class="container"> |
||||
<div class="row"> |
||||
<div class="col-lg-8 mx-auto"> |
||||
<div class="modal-body"> |
||||
<!-- Project Details Go Here --> |
||||
<h2 class="text-uppercase">Project Name</h2> |
||||
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p> |
||||
<img class="img-fluid d-block mx-auto" src="img/portfolio/06-full.jpg" alt=""> |
||||
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!</p> |
||||
<ul class="list-inline"> |
||||
<li>Date: January 2017</li> |
||||
<li>Client: Window</li> |
||||
<li>Category: Photography</li> |
||||
</ul> |
||||
<button class="btn btn-primary" data-dismiss="modal" type="button"> |
||||
<i class="fas fa-times"></i> |
||||
Close Project</button> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
<!-- 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> |
||||
@ -1,7 +0,0 @@
@@ -1,7 +0,0 @@
|
||||
/*! |
||||
* 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,5 @@
@@ -0,0 +1,5 @@
|
||||
'use strict'; |
||||
|
||||
const renderAssets = require('./render-assets'); |
||||
|
||||
renderAssets(); |
||||
@ -0,0 +1,19 @@
@@ -0,0 +1,19 @@
|
||||
'use strict'; |
||||
const path = require('path'); |
||||
const sh = require('shelljs'); |
||||
const renderPug = require('./render-pug'); |
||||
|
||||
const srcPath = path.resolve(path.dirname(__filename), '../src'); |
||||
|
||||
sh.find(srcPath).forEach(_processFile); |
||||
|
||||
function _processFile(filePath) { |
||||
if ( |
||||
filePath.match(/\.pug$/) |
||||
&& !filePath.match(/include/) |
||||
&& !filePath.match(/mixin/) |
||||
&& !filePath.match(/\/pug\/layouts\//) |
||||
) { |
||||
renderPug(filePath); |
||||
} |
||||
} |
||||
@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
|
||||
'use strict'; |
||||
|
||||
const renderScripts = require('./render-scripts'); |
||||
|
||||
renderScripts(); |
||||
@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
|
||||
'use strict'; |
||||
|
||||
const renderSCSS = require('./render-scss'); |
||||
|
||||
renderSCSS(); |
||||
@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
|
||||
const sh = require('shelljs'); |
||||
const path = require('path'); |
||||
|
||||
const destPath = path.resolve(path.dirname(__filename), '../dist'); |
||||
|
||||
sh.rm('-rf', `${destPath}/*`) |
||||
|
||||
@ -0,0 +1,11 @@
@@ -0,0 +1,11 @@
|
||||
'use strict'; |
||||
const fs = require('fs'); |
||||
const path = require('path'); |
||||
const sh = require('shelljs'); |
||||
|
||||
module.exports = function renderAssets() { |
||||
const sourcePath = path.resolve(path.dirname(__filename), '../src/assets'); |
||||
const destPath = path.resolve(path.dirname(__filename), '../dist/.'); |
||||
|
||||
sh.cp('-R', sourcePath, destPath) |
||||
}; |
||||
@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
|
||||
'use strict'; |
||||
const fs = require('fs'); |
||||
const path = require('path'); |
||||
const pug = require('pug'); |
||||
const sh = require('shelljs'); |
||||
const prettier = require('prettier'); |
||||
|
||||
module.exports = function renderPug(filePath) { |
||||
const destPath = filePath.replace(/src\/pug\//, 'dist/').replace(/\.pug$/, '.html'); |
||||
const srcPath = path.resolve(path.dirname(__filename), '../src'); |
||||
|
||||
console.log(`### INFO: Rendering ${filePath} to ${destPath}`); |
||||
const html = pug.renderFile(filePath, { |
||||
doctype: 'html', |
||||
filename: filePath, |
||||
basedir: srcPath |
||||
}); |
||||
|
||||
const destPathDirname = path.dirname(destPath); |
||||
if (!sh.test('-e', destPathDirname)) { |
||||
sh.mkdir('-p', destPathDirname); |
||||
} |
||||
|
||||
const prettified = prettier.format(html, { |
||||
printWidth: 1000, |
||||
tabWidth: 4, |
||||
singleQuote: true, |
||||
proseWrap: 'preserve', |
||||
endOfLine: 'lf', |
||||
parser: 'html' |
||||
}); |
||||
|
||||
fs.writeFileSync(destPath, prettified); |
||||
}; |
||||
@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
|
||||
'use strict'; |
||||
const fs = require('fs'); |
||||
const packageJSON = require('../package.json'); |
||||
const path = require('path'); |
||||
const sh = require('shelljs'); |
||||
|
||||
module.exports = function renderScripts() { |
||||
const sourcePath = path.resolve(path.dirname(__filename), '../src/js/scripts.js'); |
||||
const destPath = path.resolve(path.dirname(__filename), '../dist/js/scripts.js'); |
||||
|
||||
const copyright = `/*!
|
||||
* Start Bootstrap - ${packageJSON.title} v${packageJSON.version} (${packageJSON.homepage}) |
||||
* Copyright 2013-${new Date().getFullYear()} ${packageJSON.author} |
||||
* Licensed under ${packageJSON.license} (https://github.com/BlackrockDigital/${packageJSON.name}/blob/master/LICENSE)
|
||||
*/ |
||||
` |
||||
const scriptsJS = fs.readFileSync(sourcePath); |
||||
const destPathDirname = path.dirname(destPath); |
||||
|
||||
if (!sh.test('-e', destPathDirname)) { |
||||
sh.mkdir('-p', destPathDirname); |
||||
} |
||||
|
||||
fs.writeFileSync(destPath, copyright + scriptsJS); |
||||
}; |
||||
@ -0,0 +1,42 @@
@@ -0,0 +1,42 @@
|
||||
'use strict'; |
||||
const autoprefixer = require('autoprefixer') |
||||
const fs = require('fs'); |
||||
const packageJSON = require('../package.json'); |
||||
const path = require('path'); |
||||
const postcss = require('postcss') |
||||
const sass = require('sass'); |
||||
const sh = require('shelljs'); |
||||
|
||||
const stylesPath = '../src/scss/styles.scss'; |
||||
const destPath = path.resolve(path.dirname(__filename), '../dist/css/styles.css'); |
||||
|
||||
module.exports = function renderSCSS() { |
||||
|
||||
const results = sass.renderSync({ |
||||
data: entryPoint, |
||||
includePaths: [ |
||||
path.resolve(path.dirname(__filename), '../node_modules') |
||||
], |
||||
}); |
||||
|
||||
const destPathDirname = path.dirname(destPath); |
||||
if (!sh.test('-e', destPathDirname)) { |
||||
sh.mkdir('-p', destPathDirname); |
||||
} |
||||
|
||||
postcss([ autoprefixer ]).process(results.css, {from: 'styles.css', to: 'styles.css'}).then(result => { |
||||
result.warnings().forEach(warn => { |
||||
console.warn(warn.toString()) |
||||
}) |
||||
fs.writeFileSync(destPath, result.css.toString()); |
||||
}) |
||||
|
||||
}; |
||||
|
||||
const entryPoint = `/*!
|
||||
* Start Bootstrap - ${packageJSON.title} v${packageJSON.version} (${packageJSON.homepage}) |
||||
* Copyright 2013-${new Date().getFullYear()} ${packageJSON.author} |
||||
* Licensed under ${packageJSON.license} (https://github.com/BlackrockDigital/${packageJSON.name}/blob/master/LICENSE)
|
||||
*/ |
||||
@import "${stylesPath}" |
||||
` |
||||
@ -0,0 +1,86 @@
@@ -0,0 +1,86 @@
|
||||
'use strict'; |
||||
|
||||
const _ = require('lodash'); |
||||
const chokidar = require('chokidar'); |
||||
const path = require('path'); |
||||
const renderAssets = require('./render-assets'); |
||||
const renderPug = require('./render-pug'); |
||||
const renderScripts = require('./render-scripts'); |
||||
const renderSCSS = require('./render-scss'); |
||||
|
||||
const watcher = chokidar.watch('src', { |
||||
persistent: true, |
||||
}); |
||||
|
||||
let READY = false; |
||||
|
||||
process.title = 'pug-watch'; |
||||
process.stdout.write('Loading'); |
||||
let allPugFiles = {}; |
||||
|
||||
watcher.on('add', filePath => _processFile(filePath, 'add')); |
||||
watcher.on('change', filePath => _processFile(filePath, 'change')); |
||||
watcher.on('ready', () => { |
||||
READY = true; |
||||
console.log(' READY TO ROLL!'); |
||||
}); |
||||
|
||||
_handleSCSS(); |
||||
|
||||
function _processFile(filePath, watchEvent) { |
||||
|
||||
if (!READY) { |
||||
if (filePath.match(/\.pug$/)) { |
||||
if (!filePath.match(/includes/) && !filePath.match(/mixins/) && !filePath.match(/\/pug\/layouts\//)) { |
||||
allPugFiles[filePath] = true; |
||||
} |
||||
} |
||||
process.stdout.write('.'); |
||||
return; |
||||
} |
||||
|
||||
console.log(`### INFO: File event: ${watchEvent}: ${filePath}`); |
||||
|
||||
if (filePath.match(/\.pug$/)) { |
||||
return _handlePug(filePath, watchEvent); |
||||
} |
||||
|
||||
if (filePath.match(/\.scss$/)) { |
||||
if (watchEvent === 'change') { |
||||
return _handleSCSS(filePath, watchEvent); |
||||
} |
||||
return; |
||||
} |
||||
|
||||
if (filePath.match(/src\/js\//)) { |
||||
return renderScripts(); |
||||
} |
||||
|
||||
if (filePath.match(/src\/assets\//)) { |
||||
return renderAssets(); |
||||
} |
||||
|
||||
} |
||||
|
||||
function _handlePug(filePath, watchEvent) { |
||||
if (watchEvent === 'change') { |
||||
if (filePath.match(/includes/) || filePath.match(/mixins/) || filePath.match(/\/pug\/layouts\//)) { |
||||
return _renderAllPug(); |
||||
} |
||||
return renderPug(filePath); |
||||
} |
||||
if (!filePath.match(/includes/) && !filePath.match(/mixins/) && !filePath.match(/\/pug\/layouts\//)) { |
||||
return renderPug(filePath); |
||||
} |
||||
} |
||||
|
||||
function _renderAllPug() { |
||||
console.log('### INFO: Rendering All'); |
||||
_.each(allPugFiles, (value, filePath) => { |
||||
renderPug(filePath); |
||||
}); |
||||
} |
||||
|
||||
function _handleSCSS() { |
||||
renderSCSS(); |
||||
} |
||||
@ -0,0 +1,24 @@
@@ -0,0 +1,24 @@
|
||||
const concurrently = require('concurrently'); |
||||
const path = require('path'); |
||||
|
||||
const browserSyncPath = path.resolve(path.dirname(__filename), '../node_modules/.bin/browser-sync'); |
||||
|
||||
concurrently([ |
||||
{ command: 'node --inspect scripts/sb-watch.js', name: 'SB_WATCH', prefixColor: 'bgBlue.bold' }, |
||||
{ |
||||
command: `${browserSyncPath} dist -w --no-online`, |
||||
name: 'SB_BROWSER_SYNC', |
||||
prefixColor: 'bgBlue.bold', |
||||
} |
||||
], { |
||||
prefix: 'name', |
||||
killOthers: ['failure', 'success'], |
||||
}).then(success, failure); |
||||
|
||||
function success() { |
||||
console.log('Success'); |
||||
} |
||||
|
||||
function failure() { |
||||
console.log('Failure'); |
||||
} |
||||
@ -0,0 +1,24 @@
@@ -0,0 +1,24 @@
|
||||
const concurrently = require('concurrently'); |
||||
const path = require('path'); |
||||
|
||||
const browserSyncPath = path.resolve(path.dirname(__filename), '../node_modules/.bin/browser-sync'); |
||||
|
||||
concurrently([ |
||||
{ command: 'node scripts/sb-watch.js', name: 'SB_WATCH', prefixColor: 'bgBlue.bold' }, |
||||
{ |
||||
command: `"${browserSyncPath}" --reload-delay 2000 --reload-debounce 2000 dist -w --no-online`, |
||||
name: 'SB_BROWSER_SYNC', |
||||
prefixColor: 'bgGreen.bold', |
||||
} |
||||
], { |
||||
prefix: 'name', |
||||
killOthers: ['failure', 'success'], |
||||
}).then(success, failure); |
||||
|
||||
function success() { |
||||
console.log('Success'); |
||||
} |
||||
|
||||
function failure() { |
||||
console.log('Failure'); |
||||
} |
||||
@ -1,26 +0,0 @@
@@ -1,26 +0,0 @@
|
||||
// Button Styles |
||||
.btn { |
||||
@include heading-font; |
||||
font-weight: 700; |
||||
} |
||||
|
||||
.btn-xl { |
||||
font-size: 18px; |
||||
padding: 20px 40px; |
||||
} |
||||
|
||||
.btn-primary { |
||||
background-color: $primary; |
||||
border-color: $primary; |
||||
&:active, |
||||
&:focus, |
||||
&:hover { |
||||
background-color: darken($primary, 7.5%) !important; |
||||
border-color: darken($primary, 7.5%) !important; |
||||
color: white; |
||||
} |
||||
&:active, |
||||
&:focus { |
||||
box-shadow: 0 0 0 0.2rem rgba(254, 209, 55,.5) !important; |
||||
} |
||||
} |
||||
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 7.2 KiB |
|
After Width: | Height: | Size: 4.8 KiB |
|
After Width: | Height: | Size: 233 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 356 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 102 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 209 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 221 KiB |
@ -0,0 +1,75 @@
@@ -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: "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,26 @@
@@ -0,0 +1,26 @@
|
||||
<?php |
||||
// Check for empty fields |
||||
if(empty($_POST['name']) || |
||||
empty($_POST['email']) || |
||||
empty($_POST['phone']) || |
||||
empty($_POST['message']) || |
||||
!filter_var($_POST['email'],FILTER_VALIDATE_EMAIL)) |
||||
{ |
||||
echo "No arguments Provided!"; |
||||
return false; |
||||
} |
||||
|
||||
$name = strip_tags(htmlspecialchars($_POST['name'])); |
||||
$email_address = strip_tags(htmlspecialchars($_POST['email'])); |
||||
$phone = strip_tags(htmlspecialchars($_POST['phone'])); |
||||
$message = strip_tags(htmlspecialchars($_POST['message'])); |
||||
|
||||
// Create the email and send the message |
||||
$to = 'yourname@yourdomain.com'; // Add your email address in between the '' replacing yourname@yourdomain.com - This is where the form will send a message to. |
||||
$email_subject = "Website Contact Form: $name"; |
||||
$email_body = "You have received a new message from your website contact form.\n\n"."Here are the details:\n\nName: $name\n\nEmail: $email_address\n\nPhone: $phone\n\nMessage:\n$message"; |
||||
$headers = "From: noreply@yourdomain.com\n"; // This is the email address the generated message will be from. We recommend using something like noreply@yourdomain.com. |
||||
$headers .= "Reply-To: $email_address"; |
||||
mail($to,$email_subject,$email_body,$headers); |
||||
return true; |
||||
?> |
||||
@ -0,0 +1,937 @@
@@ -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]); |
||||
} |
||||
}); |
||||
|
||||
// =============================================================
|
||||
// NORMALISE VALIDATOR NAMES
|
||||
// =============================================================
|
||||
|
||||
var validatorNamesToInspect = validatorNames; |
||||
var newValidatorNamesToInspect = []; |
||||
|
||||
do // repeatedly expand 'shortcut' validators into their real validators
|
||||
{ |
||||
// Uppercase only the first letter of each name
|
||||
$.each(validatorNames, function(i, el) { |
||||
validatorNames[i] = formatValidatorName(el); |
||||
}); |
||||
|
||||
// Remove duplicate validator names
|
||||
validatorNames = $.unique(validatorNames); |
||||
|
||||
// Pull out the new validator names from each shortcut
|
||||
newValidatorNamesToInspect = []; |
||||
$.each(validatorNamesToInspect, function(i, el) { |
||||
if ($this.data("validation" + el + "Shortcut") !== undefined) { |
||||
// Are these custom validators?
|
||||
// Pull them out!
|
||||
$.each($this.data("validation" + el + "Shortcut").split(","), function(i2, el2) { |
||||
newValidatorNamesToInspect.push(el2); |
||||
}); |
||||
} else if (settings.builtInValidators[el.toLowerCase()]) { |
||||
// Is this a recognised built-in?
|
||||
// Pull it out!
|
||||
var validator = settings.builtInValidators[el.toLowerCase()]; |
||||
if (validator.type.toLowerCase() === "shortcut") { |
||||
$.each(validator.shortcut.split(","), function(i, el) { |
||||
el = formatValidatorName(el); |
||||
newValidatorNamesToInspect.push(el); |
||||
validatorNames.push(el); |
||||
}); |
||||
} |
||||
} |
||||
}); |
||||
|
||||
validatorNamesToInspect = newValidatorNamesToInspect; |
||||
|
||||
} while (validatorNamesToInspect.length > 0) |
||||
|
||||
// =============================================================
|
||||
// SET UP VALIDATOR ARRAYS
|
||||
// =============================================================
|
||||
|
||||
var validators = {}; |
||||
|
||||
$.each(validatorNames, function(i, el) { |
||||
// Set up the 'override' message
|
||||
var message = $this.data("validation" + el + "Message"); |
||||
var hasOverrideMessage = (message !== undefined); |
||||
var foundValidator = false; |
||||
message = |
||||
( |
||||
message ? |
||||
message : |
||||
"'" + el + "' validation failed <!-- Add attribute 'data-validation-" + el.toLowerCase() + "-message' to input to change this message -->" |
||||
); |
||||
|
||||
$.each( |
||||
settings.validatorTypes, |
||||
function(validatorType, validatorTemplate) { |
||||
if (validators[validatorType] === undefined) { |
||||
validators[validatorType] = []; |
||||
} |
||||
if (!foundValidator && $this.data("validation" + el + formatValidatorName(validatorTemplate.name)) !== undefined) { |
||||
validators[validatorType].push( |
||||
$.extend( |
||||
true, { |
||||
name: formatValidatorName(validatorTemplate.name), |
||||
message: message |
||||
}, |
||||
validatorTemplate.init($this, el) |
||||
) |
||||
); |
||||
foundValidator = true; |
||||
} |
||||
} |
||||
); |
||||
|
||||
if (!foundValidator && settings.builtInValidators[el.toLowerCase()]) { |
||||
|
||||
var validator = $.extend(true, {}, settings.builtInValidators[el.toLowerCase()]); |
||||
if (hasOverrideMessage) { |
||||
validator.message = message; |
||||
} |
||||
var validatorType = validator.type.toLowerCase(); |
||||
|
||||
if (validatorType === "shortcut") { |
||||
foundValidator = true; |
||||
} else { |
||||
$.each( |
||||
settings.validatorTypes, |
||||
function(validatorTemplateType, validatorTemplate) { |
||||
if (validators[validatorTemplateType] === undefined) { |
||||
validators[validatorTemplateType] = []; |
||||
} |
||||
if (!foundValidator && validatorType === validatorTemplateType.toLowerCase()) { |
||||
$this.data("validation" + el + formatValidatorName(validatorTemplate.name), validator[validatorTemplate.name.toLowerCase()]); |
||||
validators[validatorType].push( |
||||
$.extend( |
||||
validator, |
||||
validatorTemplate.init($this, el) |
||||
) |
||||
); |
||||
foundValidator = true; |
||||
} |
||||
} |
||||
); |
||||
} |
||||
} |
||||
|
||||
if (!foundValidator) { |
||||
$.error("Cannot find validation info for '" + el + "'"); |
||||
} |
||||
}); |
||||
|
||||
// =============================================================
|
||||
// STORE FALLBACK VALUES
|
||||
// =============================================================
|
||||
|
||||
$helpBlock.data( |
||||
"original-contents", |
||||
( |
||||
$helpBlock.data("original-contents") ? |
||||
$helpBlock.data("original-contents") : |
||||
$helpBlock.html() |
||||
) |
||||
); |
||||
|
||||
$helpBlock.data( |
||||
"original-role", |
||||
( |
||||
$helpBlock.data("original-role") ? |
||||
$helpBlock.data("original-role") : |
||||
$helpBlock.attr("role") |
||||
) |
||||
); |
||||
|
||||
$controlGroup.data( |
||||
"original-classes", |
||||
( |
||||
$controlGroup.data("original-clases") ? |
||||
$controlGroup.data("original-classes") : |
||||
$controlGroup.attr("class") |
||||
) |
||||
); |
||||
|
||||
$this.data( |
||||
"original-aria-invalid", |
||||
( |
||||
$this.data("original-aria-invalid") ? |
||||
$this.data("original-aria-invalid") : |
||||
$this.attr("aria-invalid") |
||||
) |
||||
); |
||||
|
||||
// =============================================================
|
||||
// VALIDATION
|
||||
// =============================================================
|
||||
|
||||
$this.bind( |
||||
"validation.validation", |
||||
function(event, params) { |
||||
|
||||
var value = getValue($this); |
||||
|
||||
// Get a list of the errors to apply
|
||||
var errorsFound = []; |
||||
|
||||
$.each(validators, function(validatorType, validatorTypeArray) { |
||||
if (value || value.length || (params && params.includeEmpty) || (!!settings.validatorTypes[validatorType].blockSubmit && params && !!params.submitting)) { |
||||
$.each(validatorTypeArray, function(i, validator) { |
||||
if (settings.validatorTypes[validatorType].validate($this, value, validator)) { |
||||
errorsFound.push(validator.message); |
||||
} |
||||
}); |
||||
} |
||||
}); |
||||
|
||||
return errorsFound; |
||||
} |
||||
); |
||||
|
||||
$this.bind( |
||||
"getValidators.validation", |
||||
function() { |
||||
return validators; |
||||
} |
||||
); |
||||
|
||||
// =============================================================
|
||||
// WATCH FOR CHANGES
|
||||
// =============================================================
|
||||
$this.bind( |
||||
"submit.validation", |
||||
function() { |
||||
return $this.triggerHandler("change.validation", { |
||||
submitting: true |
||||
}); |
||||
} |
||||
); |
||||
$this.bind( |
||||
[ |
||||
"keyup", |
||||
"focus", |
||||
"blur", |
||||
"click", |
||||
"keydown", |
||||
"keypress", |
||||
"change" |
||||
].join(".validation ") + ".validation", |
||||
function(e, params) { |
||||
|
||||
var value = getValue($this); |
||||
|
||||
var errorsFound = []; |
||||
|
||||
$controlGroup.find("input,textarea,select").each(function(i, el) { |
||||
var oldCount = errorsFound.length; |
||||
$.each($(el).triggerHandler("validation.validation", params), function(j, message) { |
||||
errorsFound.push(message); |
||||
}); |
||||
if (errorsFound.length > oldCount) { |
||||
$(el).attr("aria-invalid", "true"); |
||||
} else { |
||||
var original = $this.data("original-aria-invalid"); |
||||
$(el).attr("aria-invalid", (original !== undefined ? original : false)); |
||||
} |
||||
}); |
||||
|
||||
$form.find("input,select,textarea").not($this).not("[name=\"" + $this.attr("name") + "\"]").trigger("validationLostFocus.validation"); |
||||
|
||||
errorsFound = $.unique(errorsFound.sort()); |
||||
|
||||
// Were there any errors?
|
||||
if (errorsFound.length) { |
||||
// Better flag it up as a warning.
|
||||
$controlGroup.removeClass("success error").addClass("warning"); |
||||
|
||||
// How many errors did we find?
|
||||
if (settings.options.semanticallyStrict && errorsFound.length === 1) { |
||||
// Only one? Being strict? Just output it.
|
||||
$helpBlock.html(errorsFound[0] + |
||||
(settings.options.prependExistingHelpBlock ? $helpBlock.data("original-contents") : "")); |
||||
} else { |
||||
// Multiple? Being sloppy? Glue them together into an UL.
|
||||
$helpBlock.html("<ul role=\"alert\"><li>" + errorsFound.join("</li><li>") + "</li></ul>" + |
||||
(settings.options.prependExistingHelpBlock ? $helpBlock.data("original-contents") : "")); |
||||
} |
||||
} else { |
||||
$controlGroup.removeClass("warning error success"); |
||||
if (value.length > 0) { |
||||
$controlGroup.addClass("success"); |
||||
} |
||||
$helpBlock.html($helpBlock.data("original-contents")); |
||||
} |
||||
|
||||
if (e.type === "blur") { |
||||
$controlGroup.removeClass("success"); |
||||
} |
||||
} |
||||
); |
||||
$this.bind("validationLostFocus.validation", function() { |
||||
$controlGroup.removeClass("success"); |
||||
}); |
||||
}); |
||||
}, |
||||
destroy: function() { |
||||
|
||||
return this.each( |
||||
function() { |
||||
|
||||
var |
||||
$this = $(this), |
||||
$controlGroup = $this.parents(".form-group").first(), |
||||
$helpBlock = $controlGroup.find(".help-block").first(); |
||||
|
||||
// remove our events
|
||||
$this.unbind('.validation'); // events are namespaced.
|
||||
// reset help text
|
||||
$helpBlock.html($helpBlock.data("original-contents")); |
||||
// reset classes
|
||||
$controlGroup.attr("class", $controlGroup.data("original-classes")); |
||||
// reset aria
|
||||
$this.attr("aria-invalid", $this.data("original-aria-invalid")); |
||||
// reset role
|
||||
$helpBlock.attr("role", $this.data("original-role")); |
||||
// remove all elements we created
|
||||
if (createdElements.indexOf($helpBlock[0]) > -1) { |
||||
$helpBlock.remove(); |
||||
} |
||||
|
||||
} |
||||
); |
||||
|
||||
}, |
||||
collectErrors: function(includeEmpty) { |
||||
|
||||
var errorMessages = {}; |
||||
this.each(function(i, el) { |
||||
var $el = $(el); |
||||
var name = $el.attr("name"); |
||||
var errors = $el.triggerHandler("validation.validation", { |
||||
includeEmpty: true |
||||
}); |
||||
errorMessages[name] = $.extend(true, errors, errorMessages[name]); |
||||
}); |
||||
|
||||
$.each(errorMessages, function(i, el) { |
||||
if (el.length === 0) { |
||||
delete errorMessages[i]; |
||||
} |
||||
}); |
||||
|
||||
return errorMessages; |
||||
|
||||
}, |
||||
hasErrors: function() { |
||||
|
||||
var errorMessages = []; |
||||
|
||||
this.each(function(i, el) { |
||||
errorMessages = errorMessages.concat( |
||||
$(el).triggerHandler("getValidators.validation") ? $(el).triggerHandler("validation.validation", { |
||||
submitting: true |
||||
}) : [] |
||||
); |
||||
}); |
||||
|
||||
return (errorMessages.length > 0); |
||||
}, |
||||
override: function(newDefaults) { |
||||
defaults = $.extend(true, defaults, newDefaults); |
||||
} |
||||
}, |
||||
validatorTypes: { |
||||
callback: { |
||||
name: "callback", |
||||
init: function($this, name) { |
||||
return { |
||||
validatorName: name, |
||||
callback: $this.data("validation" + name + "Callback"), |
||||
lastValue: $this.val(), |
||||
lastValid: true, |
||||
lastFinished: true |
||||
}; |
||||
}, |
||||
validate: function($this, value, validator) { |
||||
if (validator.lastValue === value && validator.lastFinished) { |
||||
return !validator.lastValid; |
||||
} |
||||
|
||||
if (validator.lastFinished === true) { |
||||
validator.lastValue = value; |
||||
validator.lastValid = true; |
||||
validator.lastFinished = false; |
||||
|
||||
var rrjqbvValidator = validator; |
||||
var rrjqbvThis = $this; |
||||
executeFunctionByName( |
||||
validator.callback, |
||||
window, |
||||
$this, |
||||
value, |
||||
function(data) { |
||||
if (rrjqbvValidator.lastValue === data.value) { |
||||
rrjqbvValidator.lastValid = data.valid; |
||||
if (data.message) { |
||||
rrjqbvValidator.message = data.message; |
||||
} |
||||
rrjqbvValidator.lastFinished = true; |
||||
rrjqbvThis.data("validation" + rrjqbvValidator.validatorName + "Message", rrjqbvValidator.message); |
||||
// Timeout is set to avoid problems with the events being considered 'already fired'
|
||||
setTimeout(function() { |
||||
rrjqbvThis.trigger("change.validation"); |
||||
}, 1); // doesn't need a long timeout, just long enough for the event bubble to burst
|
||||
} |
||||
} |
||||
); |
||||
} |
||||
|
||||
return false; |
||||
|
||||
} |
||||
}, |
||||
ajax: { |
||||
name: "ajax", |
||||
init: function($this, name) { |
||||
return { |
||||
validatorName: name, |
||||
url: $this.data("validation" + name + "Ajax"), |
||||
lastValue: $this.val(), |
||||
lastValid: true, |
||||
lastFinished: true |
||||
}; |
||||
}, |
||||
validate: function($this, value, validator) { |
||||
if ("" + validator.lastValue === "" + value && validator.lastFinished === true) { |
||||
return validator.lastValid === false; |
||||
} |
||||
|
||||
if (validator.lastFinished === true) { |
||||
validator.lastValue = value; |
||||
validator.lastValid = true; |
||||
validator.lastFinished = false; |
||||
$.ajax({ |
||||
url: validator.url, |
||||
data: "value=" + value + "&field=" + $this.attr("name"), |
||||
dataType: "json", |
||||
success: function(data) { |
||||
if ("" + validator.lastValue === "" + data.value) { |
||||
validator.lastValid = !!(data.valid); |
||||
if (data.message) { |
||||
validator.message = data.message; |
||||
} |
||||
validator.lastFinished = true; |
||||
$this.data("validation" + validator.validatorName + "Message", validator.message); |
||||
// Timeout is set to avoid problems with the events being considered 'already fired'
|
||||
setTimeout(function() { |
||||
$this.trigger("change.validation"); |
||||
}, 1); // doesn't need a long timeout, just long enough for the event bubble to burst
|
||||
} |
||||
}, |
||||
failure: function() { |
||||
validator.lastValid = true; |
||||
validator.message = "ajax call failed"; |
||||
validator.lastFinished = true; |
||||
$this.data("validation" + validator.validatorName + "Message", validator.message); |
||||
// Timeout is set to avoid problems with the events being considered 'already fired'
|
||||
setTimeout(function() { |
||||
$this.trigger("change.validation"); |
||||
}, 1); // doesn't need a long timeout, just long enough for the event bubble to burst
|
||||
} |
||||
}); |
||||
} |
||||
|
||||
return false; |
||||
|
||||
} |
||||
}, |
||||
regex: { |
||||
name: "regex", |
||||
init: function($this, name) { |
||||
return { |
||||
regex: regexFromString($this.data("validation" + name + "Regex")) |
||||
}; |
||||
}, |
||||
validate: function($this, value, validator) { |
||||
return (!validator.regex.test(value) && !validator.negative) || |
||||
(validator.regex.test(value) && validator.negative); |
||||
} |
||||
}, |
||||
required: { |
||||
name: "required", |
||||
init: function($this, name) { |
||||
return {}; |
||||
}, |
||||
validate: function($this, value, validator) { |
||||
return !!(value.length === 0 && !validator.negative) || |
||||
!!(value.length > 0 && validator.negative); |
||||
}, |
||||
blockSubmit: true |
||||
}, |
||||
match: { |
||||
name: "match", |
||||
init: function($this, name) { |
||||
var element = $this.parents("form").first().find("[name=\"" + $this.data("validation" + name + "Match") + "\"]").first(); |
||||
element.bind("validation.validation", function() { |
||||
$this.trigger("change.validation", { |
||||
submitting: true |
||||
}); |
||||
}); |
||||
return { |
||||
"element": element |
||||
}; |
||||
}, |
||||
validate: function($this, value, validator) { |
||||
return (value !== validator.element.val() && !validator.negative) || |
||||
(value === validator.element.val() && validator.negative); |
||||
}, |
||||
blockSubmit: true |
||||
}, |
||||
max: { |
||||
name: "max", |
||||
init: function($this, name) { |
||||
return { |
||||
max: $this.data("validation" + name + "Max") |
||||
}; |
||||
}, |
||||
validate: function($this, value, validator) { |
||||
return (parseFloat(value, 10) > parseFloat(validator.max, 10) && !validator.negative) || |
||||
(parseFloat(value, 10) <= parseFloat(validator.max, 10) && validator.negative); |
||||
} |
||||
}, |
||||
min: { |
||||
name: "min", |
||||
init: function($this, name) { |
||||
return { |
||||
min: $this.data("validation" + name + "Min") |
||||
}; |
||||
}, |
||||
validate: function($this, value, validator) { |
||||
return (parseFloat(value) < parseFloat(validator.min) && !validator.negative) || |
||||
(parseFloat(value) >= parseFloat(validator.min) && validator.negative); |
||||
} |
||||
}, |
||||
maxlength: { |
||||
name: "maxlength", |
||||
init: function($this, name) { |
||||
return { |
||||
maxlength: $this.data("validation" + name + "Maxlength") |
||||
}; |
||||
}, |
||||
validate: function($this, value, validator) { |
||||
return ((value.length > validator.maxlength) && !validator.negative) || |
||||
((value.length <= validator.maxlength) && validator.negative); |
||||
} |
||||
}, |
||||
minlength: { |
||||
name: "minlength", |
||||
init: function($this, name) { |
||||
return { |
||||
minlength: $this.data("validation" + name + "Minlength") |
||||
}; |
||||
}, |
||||
validate: function($this, value, validator) { |
||||
return ((value.length < validator.minlength) && !validator.negative) || |
||||
((value.length >= validator.minlength) && validator.negative); |
||||
} |
||||
}, |
||||
maxchecked: { |
||||
name: "maxchecked", |
||||
init: function($this, name) { |
||||
var elements = $this.parents("form").first().find("[name=\"" + $this.attr("name") + "\"]"); |
||||
elements.bind("click.validation", function() { |
||||
$this.trigger("change.validation", { |
||||
includeEmpty: true |
||||
}); |
||||
}); |
||||
return { |
||||
maxchecked: $this.data("validation" + name + "Maxchecked"), |
||||
elements: elements |
||||
}; |
||||
}, |
||||
validate: function($this, value, validator) { |
||||
return (validator.elements.filter(":checked").length > validator.maxchecked && !validator.negative) || |
||||
(validator.elements.filter(":checked").length <= validator.maxchecked && validator.negative); |
||||
}, |
||||
blockSubmit: true |
||||
}, |
||||
minchecked: { |
||||
name: "minchecked", |
||||
init: function($this, name) { |
||||
var elements = $this.parents("form").first().find("[name=\"" + $this.attr("name") + "\"]"); |
||||
elements.bind("click.validation", function() { |
||||
$this.trigger("change.validation", { |
||||
includeEmpty: true |
||||
}); |
||||
}); |
||||
return { |
||||
minchecked: $this.data("validation" + name + "Minchecked"), |
||||
elements: elements |
||||
}; |
||||
}, |
||||
validate: function($this, value, validator) { |
||||
return (validator.elements.filter(":checked").length < validator.minchecked && !validator.negative) || |
||||
(validator.elements.filter(":checked").length >= validator.minchecked && validator.negative); |
||||
}, |
||||
blockSubmit: true |
||||
} |
||||
}, |
||||
builtInValidators: { |
||||
email: { |
||||
name: "Email", |
||||
type: "shortcut", |
||||
shortcut: "validemail" |
||||
}, |
||||
validemail: { |
||||
name: "Validemail", |
||||
type: "regex", |
||||
regex: "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\.[A-Za-z]{2,4}", |
||||
message: "Not a valid email address<!-- data-validator-validemail-message to override -->" |
||||
}, |
||||
passwordagain: { |
||||
name: "Passwordagain", |
||||
type: "match", |
||||
match: "password", |
||||
message: "Does not match the given password<!-- data-validator-paswordagain-message to override -->" |
||||
}, |
||||
positive: { |
||||
name: "Positive", |
||||
type: "shortcut", |
||||
shortcut: "number,positivenumber" |
||||
}, |
||||
negative: { |
||||
name: "Negative", |
||||
type: "shortcut", |
||||
shortcut: "number,negativenumber" |
||||
}, |
||||
number: { |
||||
name: "Number", |
||||
type: "regex", |
||||
regex: "([+-]?\\\d+(\\\.\\\d*)?([eE][+-]?[0-9]+)?)?", |
||||
message: "Must be a number<!-- data-validator-number-message to override -->" |
||||
}, |
||||
integer: { |
||||
name: "Integer", |
||||
type: "regex", |
||||
regex: "[+-]?\\\d+", |
||||
message: "No decimal places allowed<!-- data-validator-integer-message to override -->" |
||||
}, |
||||
positivenumber: { |
||||
name: "Positivenumber", |
||||
type: "min", |
||||
min: 0, |
||||
message: "Must be a positive number<!-- data-validator-positivenumber-message to override -->" |
||||
}, |
||||
negativenumber: { |
||||
name: "Negativenumber", |
||||
type: "max", |
||||
max: 0, |
||||
message: "Must be a negative number<!-- data-validator-negativenumber-message to override -->" |
||||
}, |
||||
required: { |
||||
name: "Required", |
||||
type: "required", |
||||
message: "This is required<!-- data-validator-required-message to override -->" |
||||
}, |
||||
checkone: { |
||||
name: "Checkone", |
||||
type: "minchecked", |
||||
minchecked: 1, |
||||
message: "Check at least one option<!-- data-validation-checkone-message to override -->" |
||||
} |
||||
} |
||||
}; |
||||
|
||||
var formatValidatorName = function(name) { |
||||
return name |
||||
.toLowerCase() |
||||
.replace( |
||||
/(^|\s)([a-z])/g, |
||||
function(m, p1, p2) { |
||||
return p1 + p2.toUpperCase(); |
||||
} |
||||
); |
||||
}; |
||||
|
||||
var getValue = function($this) { |
||||
// Extract the value we're talking about
|
||||
var value = $this.val(); |
||||
var type = $this.attr("type"); |
||||
if (type === "checkbox") { |
||||
value = ($this.is(":checked") ? value : ""); |
||||
} |
||||
if (type === "radio") { |
||||
value = ($('input[name="' + $this.attr("name") + '"]:checked').length > 0 ? value : ""); |
||||
} |
||||
return value; |
||||
}; |
||||
|
||||
function regexFromString(inputstring) { |
||||
return new RegExp("^" + inputstring + "$"); |
||||
} |
||||
|
||||
/** |
||||
* Thanks to Jason Bunting via StackOverflow.com |
||||
* |
||||
* http://stackoverflow.com/questions/359788/how-to-execute-a-javascript-function-when-i-have-its-name-as-a-string#answer-359910
|
||||
* Short link: http://tinyurl.com/executeFunctionByName
|
||||
**/ |
||||
function executeFunctionByName(functionName, context /*, args*/ ) { |
||||
var args = Array.prototype.slice.call(arguments).splice(2); |
||||
var namespaces = functionName.split("."); |
||||
var func = namespaces.pop(); |
||||
for (var i = 0; i < namespaces.length; i++) { |
||||
context = context[namespaces[i]]; |
||||
} |
||||
return context[func].apply(this, args); |
||||
} |
||||
|
||||
$.fn.jqBootstrapValidation = function(method) { |
||||
|
||||
if (defaults.methods[method]) { |
||||
return defaults.methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); |
||||
} else if (typeof method === 'object' || !method) { |
||||
return defaults.methods.init.apply(this, arguments); |
||||
} else { |
||||
$.error('Method ' + method + ' does not exist on jQuery.jqBootstrapValidation'); |
||||
return null; |
||||
} |
||||
|
||||
}; |
||||
|
||||
$.jqBootstrapValidation = function(options) { |
||||
$(":input").not("[type=image],[type=submit]").jqBootstrapValidation.apply(this, arguments); |
||||
}; |
||||
|
||||
})(jQuery); |
||||
@ -0,0 +1,494 @@
@@ -0,0 +1,494 @@
|
||||
doctype html |
||||
html(lang='en') |
||||
|
||||
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 Freelancer - Start Bootstrap Theme |
||||
|
||||
// Font Awesome icons (free version) |
||||
script(src='https://use.fontawesome.com/releases/v5.12.1/js/all.js', crossorigin='anonymous') |
||||
|
||||
// Google fonts |
||||
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') |
||||
|
||||
// Core theme CSS (includes Bootstrap) |
||||
link(href='css/styles.css', rel='stylesheet') |
||||
|
||||
body#page-top |
||||
|
||||
// Navigation |
||||
nav#mainNav.navbar.navbar-expand-lg.navbar-dark.fixed-top |
||||
.container |
||||
a.navbar-brand.js-scroll-trigger(href='#page-top') Start Bootstrap |
||||
button.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.fas.fa-bars |
||||
#navbarResponsive.collapse.navbar-collapse |
||||
ul.navbar-nav.text-uppercase.ml-auto |
||||
li.nav-item |
||||
a.nav-link.js-scroll-trigger(href='#services') Services |
||||
li.nav-item |
||||
a.nav-link.js-scroll-trigger(href='#portfolio') Portfolio |
||||
li.nav-item |
||||
a.nav-link.js-scroll-trigger(href='#about') About |
||||
li.nav-item |
||||
a.nav-link.js-scroll-trigger(href='#team') Team |
||||
li.nav-item |
||||
a.nav-link.js-scroll-trigger(href='#contact') Contact |
||||
// Masthead |
||||
|
||||
header.masthead |
||||
.container |
||||
.intro-text |
||||
.intro-lead-in Welcome To Our Studio! |
||||
.intro-heading.text-uppercase It's Nice To Meet You |
||||
a.btn.btn-primary.btn-xl.text-uppercase.js-scroll-trigger(href='#services') Tell Me More |
||||
|
||||
// Services |
||||
section#services.page-section |
||||
.container |
||||
.row |
||||
.col-lg-12.text-center |
||||
h2.section-heading.text-uppercase Services |
||||
h3.section-subheading.text-muted Lorem ipsum dolor sit amet consectetur. |
||||
.row.text-center |
||||
.col-md-4 |
||||
span.fa-stack.fa-4x |
||||
i.fas.fa-circle.fa-stack-2x.text-primary |
||||
i.fas.fa-shopping-cart.fa-stack-1x.fa-inverse |
||||
h4.service-heading E-Commerce |
||||
p.text-muted |
||||
| Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima maxime quam architecto quo inventore harum ex magni, dicta impedit. |
||||
.col-md-4 |
||||
span.fa-stack.fa-4x |
||||
i.fas.fa-circle.fa-stack-2x.text-primary |
||||
i.fas.fa-laptop.fa-stack-1x.fa-inverse |
||||
h4.service-heading Responsive Design |
||||
p.text-muted |
||||
| Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima maxime quam architecto quo inventore harum ex magni, dicta impedit. |
||||
.col-md-4 |
||||
span.fa-stack.fa-4x |
||||
i.fas.fa-circle.fa-stack-2x.text-primary |
||||
i.fas.fa-lock.fa-stack-1x.fa-inverse |
||||
h4.service-heading Web Security |
||||
p.text-muted |
||||
| Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima maxime quam architecto quo inventore harum ex magni, dicta impedit. |
||||
|
||||
// Portfolio Grid |
||||
section#portfolio.bg-light.page-section |
||||
.container |
||||
.row |
||||
.col-lg-12.text-center |
||||
h2.section-heading.text-uppercase Portfolio |
||||
h3.section-subheading.text-muted Lorem ipsum dolor sit amet consectetur. |
||||
.row |
||||
.col-md-4.col-sm-6.portfolio-item |
||||
a.portfolio-link(data-toggle='modal', href='#portfolioModal1') |
||||
.portfolio-hover |
||||
.portfolio-hover-content |
||||
i.fas.fa-plus.fa-3x |
||||
img.img-fluid(src='assets/img/portfolio/01-thumbnail.jpg', alt='') |
||||
.portfolio-caption |
||||
h4 Threads |
||||
p.text-muted Illustration |
||||
.col-md-4.col-sm-6.portfolio-item |
||||
a.portfolio-link(data-toggle='modal', href='#portfolioModal2') |
||||
.portfolio-hover |
||||
.portfolio-hover-content |
||||
i.fas.fa-plus.fa-3x |
||||
img.img-fluid(src='assets/img/portfolio/02-thumbnail.jpg', alt='') |
||||
.portfolio-caption |
||||
h4 Explore |
||||
p.text-muted Graphic Design |
||||
.col-md-4.col-sm-6.portfolio-item |
||||
a.portfolio-link(data-toggle='modal', href='#portfolioModal3') |
||||
.portfolio-hover |
||||
.portfolio-hover-content |
||||
i.fas.fa-plus.fa-3x |
||||
img.img-fluid(src='assets/img/portfolio/03-thumbnail.jpg', alt='') |
||||
.portfolio-caption |
||||
h4 Finish |
||||
p.text-muted Identity |
||||
.col-md-4.col-sm-6.portfolio-item |
||||
a.portfolio-link(data-toggle='modal', href='#portfolioModal4') |
||||
.portfolio-hover |
||||
.portfolio-hover-content |
||||
i.fas.fa-plus.fa-3x |
||||
img.img-fluid(src='assets/img/portfolio/04-thumbnail.jpg', alt='') |
||||
.portfolio-caption |
||||
h4 Lines |
||||
p.text-muted Branding |
||||
.col-md-4.col-sm-6.portfolio-item |
||||
a.portfolio-link(data-toggle='modal', href='#portfolioModal5') |
||||
.portfolio-hover |
||||
.portfolio-hover-content |
||||
i.fas.fa-plus.fa-3x |
||||
img.img-fluid(src='assets/img/portfolio/05-thumbnail.jpg', alt='') |
||||
.portfolio-caption |
||||
h4 Southwest |
||||
p.text-muted Website Design |
||||
.col-md-4.col-sm-6.portfolio-item |
||||
a.portfolio-link(data-toggle='modal', href='#portfolioModal6') |
||||
.portfolio-hover |
||||
.portfolio-hover-content |
||||
i.fas.fa-plus.fa-3x |
||||
img.img-fluid(src='assets/img/portfolio/06-thumbnail.jpg', alt='') |
||||
.portfolio-caption |
||||
h4 Window |
||||
p.text-muted Photography |
||||
|
||||
// About |
||||
section#about.page-section |
||||
.container |
||||
.row |
||||
.col-lg-12.text-center |
||||
h2.section-heading.text-uppercase About |
||||
h3.section-subheading.text-muted Lorem ipsum dolor sit amet consectetur. |
||||
.row |
||||
.col-lg-12 |
||||
ul.timeline |
||||
li |
||||
.timeline-image |
||||
img.rounded-circle.img-fluid(src='assets/img/about/1.jpg', alt='') |
||||
.timeline-panel |
||||
.timeline-heading |
||||
h4 2009-2011 |
||||
h4.subheading Our Humble Beginnings |
||||
.timeline-body |
||||
p.text-muted |
||||
| Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur! |
||||
li.timeline-inverted |
||||
.timeline-image |
||||
img.rounded-circle.img-fluid(src='assets/img/about/2.jpg', alt='') |
||||
.timeline-panel |
||||
.timeline-heading |
||||
h4 March 2011 |
||||
h4.subheading An Agency is Born |
||||
.timeline-body |
||||
p.text-muted |
||||
| Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur! |
||||
li |
||||
.timeline-image |
||||
img.rounded-circle.img-fluid(src='assets/img/about/3.jpg', alt='') |
||||
.timeline-panel |
||||
.timeline-heading |
||||
h4 December 2012 |
||||
h4.subheading Transition to Full Service |
||||
.timeline-body |
||||
p.text-muted |
||||
| Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur! |
||||
li.timeline-inverted |
||||
.timeline-image |
||||
img.rounded-circle.img-fluid(src='assets/img/about/4.jpg', alt='') |
||||
.timeline-panel |
||||
.timeline-heading |
||||
h4 July 2014 |
||||
h4.subheading Phase Two Expansion |
||||
.timeline-body |
||||
p.text-muted |
||||
| Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur! |
||||
li.timeline-inverted |
||||
.timeline-image |
||||
h4 |
||||
| Be Part |
||||
br |
||||
| Of Our |
||||
br |
||||
| Story! |
||||
|
||||
// Team |
||||
section#team.bg-light.page-section |
||||
.container |
||||
.row |
||||
.col-lg-12.text-center |
||||
h2.section-heading.text-uppercase Our Amazing Team |
||||
h3.section-subheading.text-muted Lorem ipsum dolor sit amet consectetur. |
||||
.row |
||||
.col-sm-4 |
||||
.team-member |
||||
img.mx-auto.rounded-circle(src='assets/img/team/1.jpg', alt='') |
||||
h4 Kay Garland |
||||
p.text-muted Lead Designer |
||||
ul.list-inline.social-buttons |
||||
li.list-inline-item |
||||
a(href='#') |
||||
i.fab.fa-twitter |
||||
li.list-inline-item |
||||
a(href='#') |
||||
i.fab.fa-facebook-f |
||||
li.list-inline-item |
||||
a(href='#') |
||||
i.fab.fa-linkedin-in |
||||
.col-sm-4 |
||||
.team-member |
||||
img.mx-auto.rounded-circle(src='assets/img/team/2.jpg', alt='') |
||||
h4 Larry Parker |
||||
p.text-muted Lead Marketer |
||||
ul.list-inline.social-buttons |
||||
li.list-inline-item |
||||
a(href='#') |
||||
i.fab.fa-twitter |
||||
li.list-inline-item |
||||
a(href='#') |
||||
i.fab.fa-facebook-f |
||||
li.list-inline-item |
||||
a(href='#') |
||||
i.fab.fa-linkedin-in |
||||
.col-sm-4 |
||||
.team-member |
||||
img.mx-auto.rounded-circle(src='assets/img/team/3.jpg', alt='') |
||||
h4 Diana Pertersen |
||||
p.text-muted Lead Developer |
||||
ul.list-inline.social-buttons |
||||
li.list-inline-item |
||||
a(href='#') |
||||
i.fab.fa-twitter |
||||
li.list-inline-item |
||||
a(href='#') |
||||
i.fab.fa-facebook-f |
||||
li.list-inline-item |
||||
a(href='#') |
||||
i.fab.fa-linkedin-in |
||||
.row |
||||
.col-lg-8.mx-auto.text-center |
||||
p.large.text-muted |
||||
| Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aut eaque, laboriosam veritatis, quos non quis ad perspiciatis, totam corporis ea, alias ut unde. |
||||
|
||||
// Clients |
||||
section.py-5 |
||||
.container |
||||
.row |
||||
.col-md-3.col-sm-6 |
||||
a(href='#') |
||||
img.img-fluid.d-block.mx-auto(src='assets/img/logos/envato.jpg', alt='') |
||||
.col-md-3.col-sm-6 |
||||
a(href='#') |
||||
img.img-fluid.d-block.mx-auto(src='assets/img/logos/designmodo.jpg', alt='') |
||||
.col-md-3.col-sm-6 |
||||
a(href='#') |
||||
img.img-fluid.d-block.mx-auto(src='assets/img/logos/themeforest.jpg', alt='') |
||||
.col-md-3.col-sm-6 |
||||
a(href='#') |
||||
img.img-fluid.d-block.mx-auto(src='assets/img/logos/creative-market.jpg', alt='') |
||||
|
||||
// Contact |
||||
section#contact.page-section |
||||
.container |
||||
.row |
||||
.col-lg-12.text-center |
||||
h2.section-heading.text-uppercase Contact Us |
||||
h3.section-subheading.text-muted Lorem ipsum dolor sit amet consectetur. |
||||
.row |
||||
.col-lg-12 |
||||
form#contactForm(name='sentMessage', novalidate='novalidate') |
||||
.row |
||||
.col-md-6 |
||||
.form-group |
||||
input#name.form-control(type='text', placeholder='Your Name *', required='required', data-validation-required-message='Please enter your name.') |
||||
p.help-block.text-danger |
||||
.form-group |
||||
input#email.form-control(type='email', placeholder='Your Email *', required='required', data-validation-required-message='Please enter your email address.') |
||||
p.help-block.text-danger |
||||
.form-group |
||||
input#phone.form-control(type='tel', placeholder='Your Phone *', required='required', data-validation-required-message='Please enter your phone number.') |
||||
p.help-block.text-danger |
||||
.col-md-6 |
||||
.form-group |
||||
textarea#message.form-control(placeholder='Your Message *', required='required', data-validation-required-message='Please enter a message.') |
||||
p.help-block.text-danger |
||||
.clearfix |
||||
.col-lg-12.text-center |
||||
#success |
||||
button#sendMessageButton.btn.btn-primary.btn-xl.text-uppercase(type='submit') Send Message |
||||
|
||||
// Footer |
||||
footer.footer |
||||
.container |
||||
.row.align-items-center |
||||
.col-md-4 |
||||
span.copyright Copyright © Your Website 2019 |
||||
.col-md-4 |
||||
ul.list-inline.social-buttons |
||||
li.list-inline-item |
||||
a(href='#') |
||||
i.fab.fa-twitter |
||||
li.list-inline-item |
||||
a(href='#') |
||||
i.fab.fa-facebook-f |
||||
li.list-inline-item |
||||
a(href='#') |
||||
i.fab.fa-linkedin-in |
||||
.col-md-4 |
||||
ul.list-inline.quicklinks |
||||
li.list-inline-item |
||||
a(href='#') Privacy Policy |
||||
li.list-inline-item |
||||
a(href='#') Terms of Use |
||||
|
||||
// Portfolio Modals |
||||
// Modal 1 |
||||
#portfolioModal1.portfolio-modal.modal.fade(tabindex='-1', role='dialog', aria-hidden='true') |
||||
.modal-dialog |
||||
.modal-content |
||||
.close-modal(data-dismiss='modal') |
||||
.lr |
||||
.rl |
||||
.container |
||||
.row |
||||
.col-lg-8.mx-auto |
||||
.modal-body |
||||
// Project Details Go Here |
||||
h2.text-uppercase Project Name |
||||
p.item-intro.text-muted Lorem ipsum dolor sit amet consectetur. |
||||
img.img-fluid.d-block.mx-auto(src='assets/img/portfolio/01-full.jpg', alt='') |
||||
p |
||||
| Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo! |
||||
ul.list-inline |
||||
li Date: January 2017 |
||||
li Client: Threads |
||||
li Category: Illustration |
||||
button.btn.btn-primary(data-dismiss='modal', type='button') |
||||
i.fas.fa-times |
||||
| Close Project |
||||
// Modal 2 |
||||
#portfolioModal2.portfolio-modal.modal.fade(tabindex='-1', role='dialog', aria-hidden='true') |
||||
.modal-dialog |
||||
.modal-content |
||||
.close-modal(data-dismiss='modal') |
||||
.lr |
||||
.rl |
||||
.container |
||||
.row |
||||
.col-lg-8.mx-auto |
||||
.modal-body |
||||
// Project Details Go Here |
||||
h2.text-uppercase Project Name |
||||
p.item-intro.text-muted Lorem ipsum dolor sit amet consectetur. |
||||
img.img-fluid.d-block.mx-auto(src='assets/img/portfolio/02-full.jpg', alt='') |
||||
p |
||||
| Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo! |
||||
ul.list-inline |
||||
li Date: January 2017 |
||||
li Client: Explore |
||||
li Category: Graphic Design |
||||
button.btn.btn-primary(data-dismiss='modal', type='button') |
||||
i.fas.fa-times |
||||
| Close Project |
||||
// Modal 3 |
||||
#portfolioModal3.portfolio-modal.modal.fade(tabindex='-1', role='dialog', aria-hidden='true') |
||||
.modal-dialog |
||||
.modal-content |
||||
.close-modal(data-dismiss='modal') |
||||
.lr |
||||
.rl |
||||
.container |
||||
.row |
||||
.col-lg-8.mx-auto |
||||
.modal-body |
||||
// Project Details Go Here |
||||
h2.text-uppercase Project Name |
||||
p.item-intro.text-muted Lorem ipsum dolor sit amet consectetur. |
||||
img.img-fluid.d-block.mx-auto(src='assets/img/portfolio/03-full.jpg', alt='') |
||||
p |
||||
| Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo! |
||||
ul.list-inline |
||||
li Date: January 2017 |
||||
li Client: Finish |
||||
li Category: Identity |
||||
button.btn.btn-primary(data-dismiss='modal', type='button') |
||||
i.fas.fa-times |
||||
| Close Project |
||||
// Modal 4 |
||||
#portfolioModal4.portfolio-modal.modal.fade(tabindex='-1', role='dialog', aria-hidden='true') |
||||
.modal-dialog |
||||
.modal-content |
||||
.close-modal(data-dismiss='modal') |
||||
.lr |
||||
.rl |
||||
.container |
||||
.row |
||||
.col-lg-8.mx-auto |
||||
.modal-body |
||||
// Project Details Go Here |
||||
h2.text-uppercase Project Name |
||||
p.item-intro.text-muted Lorem ipsum dolor sit amet consectetur. |
||||
img.img-fluid.d-block.mx-auto(src='assets/img/portfolio/04-full.jpg', alt='') |
||||
p |
||||
| Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo! |
||||
ul.list-inline |
||||
li Date: January 2017 |
||||
li Client: Lines |
||||
li Category: Branding |
||||
button.btn.btn-primary(data-dismiss='modal', type='button') |
||||
i.fas.fa-times |
||||
| Close Project |
||||
// Modal 5 |
||||
#portfolioModal5.portfolio-modal.modal.fade(tabindex='-1', role='dialog', aria-hidden='true') |
||||
.modal-dialog |
||||
.modal-content |
||||
.close-modal(data-dismiss='modal') |
||||
.lr |
||||
.rl |
||||
.container |
||||
.row |
||||
.col-lg-8.mx-auto |
||||
.modal-body |
||||
// Project Details Go Here |
||||
h2.text-uppercase Project Name |
||||
p.item-intro.text-muted Lorem ipsum dolor sit amet consectetur. |
||||
img.img-fluid.d-block.mx-auto(src='assets/img/portfolio/05-full.jpg', alt='') |
||||
p |
||||
| Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo! |
||||
ul.list-inline |
||||
li Date: January 2017 |
||||
li Client: Southwest |
||||
li Category: Website Design |
||||
button.btn.btn-primary(data-dismiss='modal', type='button') |
||||
i.fas.fa-times |
||||
| Close Project |
||||
// Modal 6 |
||||
#portfolioModal6.portfolio-modal.modal.fade(tabindex='-1', role='dialog', aria-hidden='true') |
||||
.modal-dialog |
||||
.modal-content |
||||
.close-modal(data-dismiss='modal') |
||||
.lr |
||||
.rl |
||||
.container |
||||
.row |
||||
.col-lg-8.mx-auto |
||||
.modal-body |
||||
// Project Details Go Here |
||||
h2.text-uppercase Project Name |
||||
p.item-intro.text-muted Lorem ipsum dolor sit amet consectetur. |
||||
img.img-fluid.d-block.mx-auto(src='assets/img/portfolio/06-full.jpg', alt='') |
||||
p |
||||
| Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo! |
||||
ul.list-inline |
||||
li Date: January 2017 |
||||
li Client: Window |
||||
li Category: Photography |
||||
button.btn.btn-primary(data-dismiss='modal', type='button') |
||||
i.fas.fa-times |
||||
| Close Project |
||||
|
||||
// Bootstrap core JS |
||||
script(src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js') |
||||
script(src='https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.bundle.min.js') |
||||
|
||||
// Third party plugin JS |
||||
script(src='https://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.4.1/jquery.easing.min.js') |
||||
|
||||
// Contact form JS |
||||
script(src='assets/mail/jqBootstrapValidation.js') |
||||
script(src='assets/mail/contact_me.js') |
||||
|
||||
// Core theme JS |
||||
script(src='js/scripts.js') |
||||
@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
|
||||
// Button Styles |
||||
|
||||
.btn-xl { |
||||
@include heading-font; |
||||
font-weight: 700; |
||||
font-size: 1.125rem; |
||||
padding: 1.25rem 2.5rem; |
||||
} |
||||
@ -1,7 +1,7 @@
@@ -1,7 +1,7 @@
|
||||
// Styling for the contact section |
||||
section#contact { |
||||
background-color: $gray-900; |
||||
background-image: url('../img/map-image.png'); |
||||
background-image: url('../assets/img/map-image.png'); |
||||
background-repeat: no-repeat; |
||||
background-position: center; |
||||
.section-heading { |
||||