/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#nav-logo {
    padding-top: 10px;
    padding-bottom: 10px;
}

body {
    /* for fixed top navbar */
    padding-top: 70px;
    font-size: 14px;
}

.nav-link {
    padding-top: 20px;
    font-size: 16px;
}

.nav-link, li.dropdown {
    padding-top: 10px;
    font-size: 16px;
}

ul.nav li.dropdown:hover > ul.dropdown-menu {
    /* so nav submenus open on hover */
    display: block;
}
#sidebar {
    font-size: 14px;
}

#home-description {
    font-size: 16px;
}

#sociallinks td {
    /* no lines in the link table */
    border-top: none;
}

#bannertext {
    margin-top: 10px;
    text-align: left;
}

.clear {
    clear: both;
}

#content {
    padding: 0 8px 40px;
}

#content h1 {
    margin-bottom: 0.5em;
}

#content h2 {
    margin-bottom: 0.5em;
    border-bottom: 1px solid #CCCCCC;
    padding-bottom: 0.25em;
}
#content h3 {
    margin-bottom: 0.5em;
}
#content img {
    vertical-align: middle;
}
footer {
    border-top: 1px solid #CCCCCC;
    color: #666666;
    font-size: 0.8em;
    padding: 8px 8px;
    text-align: center;
}
footer > p {
    width: 60%;
    margin-left: auto;
    margin-right: auto;
}
#asf-logo {
    float: left;
}

#release_notes_testing {
    border-collapse:collapse;
}

#release_notes_testing, #release_notes_testing tr, #release_notes_testing th, #release_notes_testing td {
    border: 2px solid black;
}

#release_notes_testing th, #release_notes_testing td {
    padding: 5px;
}

#download-button-sidebar {
    width: 60%;
    margin-left: auto;
    margin-right: auto;
}

code {
    /* override nowrap in bootstrap */
    white-space: normal;
}

.header-link {
  padding-left: 5px;
  opacity: 0;

  \-webkit-transition: opacity 0.2s ease-in-out 0.1s;
  \-moz-transition: opacity 0.2s ease-in-out 0.1s;
  \-ms-transition: opacity 0.2s ease-in-out 0.1s;
}

h2:hover .header-link,
h3:hover .header-link,
h4:hover .header-link,
h5:hover .header-link,
h6:hover .header-link {
  opacity: 1;
}

/* insert invisible space above header elements with an id attribute, so that
 * if they are linked to, the actual content will appear below the nav menu */
h1[id]::before, h2[id]::before, h3[id]::before, h4[id]::before, h5[id]::before, h6[id]::before {
  display: block;
  content: " ";
  margin-top: -80px;
  height: 80px;
  visibility: hidden;
}

/* Makes navbar collapse at larger width (917px) */
@media (max-width: 971px) {
    .navbar-header {
        float: none;
    }
    .navbar-toggle {
        display: block;
    }
    .navbar-collapse {
        border-top: 1px solid transparent;
        box-shadow: inset 0 1px 0 rgba(255,255,255,0.1);
    }
    .navbar-collapse.collapse {
        display: none!important;
    }
    .navbar-nav {
        float: none!important;
        margin: 7.5px -15px;
    }
    .navbar-nav>li {
        float: none;
    }
    .navbar-nav>li>a {
        padding-top: 10px;
        padding-bottom: 10px;
    }
    .navbar-text {
        float: none;
        margin: 15px 0;
    }
    /* since 3.1.0 */
    .navbar-collapse.collapse.in {
        display: block!important;
    }
    .collapsing {
        overflow: hidden!important;
    }
}

