/*!
 * Start Bootstrap - Landing Page Bootstrap Theme (http://startbootstrap.com)
 * Code licensed under the Apache License v2.0.
 * For details, see http://www.apache.org/licenses/LICENSE-2.0.
 */

body,
html {
    width: 100%;
    height: 100%;
}

body,
h1,
h2,
h3,
h4,
h5,
h6 {
    font-family: "Lato","Helvetica Neue",Helvetica,Arial,sans-serif;
    font-weight: 700;
}

p {
    margin: 0 0 18px
}

.special {
    display: inline-block;
    vertical-align: middle;
    float: none;

}

.lead {
    font-size: 18px;
    font-weight: 400;
}

#nav-logo {
    width: 5%;
}

.intro-header {
    padding-top: 30px; /* If you're making other pages, make sure there is 50px of padding to make sure the navbar doesn't overlap content! */
    padding-bottom: 30px;
    text-align: center;
    color: #f8f8f8;
    background: white;
    background-size: cover;
}

.logo-img {
    width: 100%;
}

.intro-message {
    position: relative;
    /*padding-top: 6%;
    padding-bottom: 4%;*/
}

.intro-message > h1 {
    margin: 0;
    text-shadow: 2px 2px 3px rgba(0,0,0,0.6);
    font-size: 5em;
}

.intro-divider {
    width: 400px;
    border-top: 1px solid #f8f8f8;
    border-bottom: 1px solid rgba(0,0,0,0.2);
}

.intro-message > h2 {
    /*text-shadow: 2px 2px 3px rgba(0,0,0,0.6);*/
    color : black;
    text-align : left;
}

.vcenter {
    display: inline-block;
    vertical-align: middle;
    float: none;
}

.box {
    padding-top: 10px;
}

.fixed-nav-container{
    position: fixed;
    top: 0;
    right: 0;
    left: 0;
    opacity: 1;
    z-index:99;
}

.text-box {
    outline: 1px solid black;
    padding: 10px; 
    width: 100%;
    height: 290px;
}

.inverse-dropdown{
  background-color: #222;
  border-color: #080808;
  &>li>a{
    color: #999;
    &:hover{
      color: #fff;
      background-color: #000;
    }
  }
  &>.divider {
    background-color: #000;
  }
}

@media(max-width:767px) {
    .intro-message {
        padding-bottom: 15%;
    }

    .intro-message > h1 {
        font-size: 3em;
    }

    ul.intro-social-buttons > li {
        display: block;
        margin-bottom: 20px;
        padding: 0;
    }

    ul.intro-social-buttons > li:last-child {
        margin-bottom: 0;
    }

    .intro-divider {
        width: 100%;
    }
}

.network-name {
    text-transform: uppercase;
    font-size: 14px;
    font-weight: 400;
    letter-spacing: 2px;
}

.content-section-a {
    padding: 50px 0;
    background-color: #f8f8f8;
}

.content-section-b {
    padding: 50px 0;
    /*border-top: 1px solid #e7e7e7;
    border-bottom: 1px solid #e7e7e7;*/
}

.section-heading {
    margin-bottom: 30px;
}

.section-heading-spacer {
    float: left;
    width: 200px;
    border-top: 3px solid #e7e7e7;
}

.spacer {
    float: left;
    width: 200px;
}

.banner {
    padding: 50px 0;
    color: #f8f8f8;
    background: url(../img/footer.png) no-repeat center center;
    background-size: cover;
}

.banner h2 {
    margin: 0;
    text-shadow: 2px 2px 3px rgba(0,0,0,0.6);
    font-size: 3em;
}

.banner ul {
    margin-bottom: 0;
}

.banner-social-buttons {
    float: right;
    margin-top: 0;
}

@media(max-width:1199px) {
    ul.banner-social-buttons {
        float: left;
        margin-top: 15px;
    }
}

@media(max-width:767px) {
    .banner h2 {
        margin: 0;
        text-shadow: 2px 2px 3px rgba(0,0,0,0.6);
        font-size: 3em;
    }

    ul.banner-social-buttons > li {
        display: block;
        margin-bottom: 20px;
        padding: 0;
    }

    ul.banner-social-buttons > li:last-child {
        margin-bottom: 0;
    }
}

footer {
    padding: 50px 0;
    background-color: white;
    border-top: 1px solid #e7e7e7;
}

p.copyright {
    margin: 15px 0 0;
}
