/*
* 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.
*/

/*
 * Main website stylesheet
 */
/* Navigation bars. */
.topnav {
  background-color: #2f3030; }
  .topnav .breadcrumb {
    background-color: #2f3030;
    padding: 8px 0px;
    margin: auto;
    color: #f5f5f5; }
    .topnav .breadcrumb .asf-logo {
      margin-right: 4px;
      margin-top: -4px;
      margin-bottom: -8px;
      height: 30px; }
  .topnav a {
    color: #f5f5f5; }
    .topnav a:hover, .topnav a:focus {
      color: #f5d35f;
      text-decoration: none; }
  .topnav .navbar {
    z-index: 0;
    margin-bottom: 0px; }
      .topnav .navbar .navbar-brand img {
        margin: -15px 5px 0 0;
        height: 60px;
        float: left; }
    .topnav .navbar .nav {
      color: #fff; }
      .topnav .navbar .nav li a {
        white-space: nowrap;
        text-align: center;
        font-size: 24px;
        padding: 5px 0 5px 5px;
        margin: 0 10px; }
        .topnav .navbar .nav li a:hover {
          background: none; }
    .topnav .navbar .navbar-header {
      height: 80px; }
    .topnav .navbar .navbar-toggle {
      position: relative;
      top: 50%;
      transform: translateY(-50%);
      margin-top: 0; }
      .topnav .navbar .navbar-toggle .icon-bar {
        background-color: #FFF; }
      .topnav .navbar .navbar-toggle:focus .icon-bar {
        background-color: #000; }
    .topnav .navbar .navbar-collapse {
      border-color: transparent;
      box-shadow: none; }

@media (min-width: 768px) {
  .topnav .navbar .nav {
    padding: 25px 0 0 0;
  }
}
@media (min-width: 768px) and (max-width: 1024px) {
  .navbar .nav li a {
    padding: 8px 0 15px 8px; } }
/* Jumbotron part. */
.jumbotron {
  background: none;
  max-width: 748px;
  margin: 30px auto 40px auto;
  padding: 0px; }
  .jumbotron h1 {
    font-size: 40px;
    font-family: HelveticaNeue-Light,Helvetica,Arial,sans-serif;
    line-height: 1.2;
    color: #f5f5f5;
    text-align: center;
    padding: 0;
    margin-bottom: 28px; }
  .jumbotron .lead {
    line-height: 1.25;
    color: white;
    font-size: 15px;
    font-weight: 100;
    letter-spacing: 0.8px;
    margin-bottom: 48px; }
  .jumbotron p {
    text-align: center;
    margin-bottom: 0px; }
  .jumbotron .btn.download {
    border-radius: 8px;
    padding: 11px 28px;
    margin-bottom: 4px;
      color: #2f3030; }
    .jumbotron .btn.download:hover, .jumbotron .btn.download:focus {
      color: #f5d35f; }
  .jumbotron a.changelog {
    font-size: 15px;
    display: inline-block;
    color: #D9F0FF; }
    .jumbotron a.changelog:hover, .jumbotron a.changelog:focus {
      color: #f5d35f;
      text-decoration: none; }

 .bg-dark {
   background-color: #83c9f4;
 }

 .bg-light {
     background-color: #f1f9ff;
 }
/* Features list. */
.feature-list-group {
  padding-top: 20px;
  padding-bottom: 61px; }
  .feature-list-group .header {
    text-align: center; }
    .feature-list-group .header h3 {
      font-size: 30px;
      font-weight: 200;
      text-align: center;
      margin-bottom: 26px; }
    .feature-list-group .header .lead {
      color: #777777;
      font-weight: normal;
      line-height: 1.42857143;
       }
  .feature-list-group .feature-list {
    margin-bottom: 25px; }
  .feature-list-group .feature-item h4 {
    color: #2f3030;
    font-family: HelveticaNeue-Medium,Helvetica,Arial,sans-serif;
      font-size: 14pt;
      text-transform: uppercase;
    margin-bottom: 16px; }
  .feature-list-group .feature-item p {
    font-family: HelveticaNeue-Light,Helvetica,Arial,sans-serif;
  }
  .feature-list-group .feature-item .glyphicon {
      font-size: 150%;
      padding-right: 10px;
  }

@media (max-width: 767px) {
  .topnav .navbar .navbar-brand {
    margin: 10px 0; }

  .jumbotron > .lead {
    font-weight: 200; }

  .feature-list-group {
    padding: 36px 9px 6px 9px; }

  .feature-list {
    margin-bottom: 0px; }

  .feature-item {
    margin-bottom: 48px; } }
footer {
  color: #f5f5f5;
  background-color: #2f3030;
  margin-top: 38px;
  padding-top: 10px;
  padding-bottom: 20px; }

.social-blk {
  float: right; }

.nopadding {
  padding: 0 !important;
  margin: 0 !important; }

.splash {
  display: block; }

.author_contact {
  display: inline-block; }

.author_gravatar {
  display: inline;
  padding: 0 20px 20px 5px; }

.share {
  display: block; }

@media (max-width: 767px) {
  .social-blk {
    float: left;
    width: 100%;
    margin-bottom: 32px; } }
pre {
  overflow: auto;
  overflow-y: hidden;
  /* fixes display issues on Chrome browsers */ }
  pre code {
    overflow: auto;
    overflow-y: hidden;
}

td.linenos pre {
  padding: 5px 0px;
  border: 0;
  background-color: transparent;
  color: #aaa; }

table.highlighttable {
  margin-left: 0.5em; }

table.highlighttable td {
  padding: 0 0.5em 0 0.5em; }

div.code-block-caption {
  padding: 2px 5px;
  font-size: small; }

div.code-block-caption code {
  background-color: transparent; }

div.code-block-caption + div > div.highlight > pre {
  margin-top: 0; }

div.code-block-caption span.caption-number {
  padding: 0.1em 0.3em;
  font-style: italic; }

div.literal-block-wrapper {
  padding: 1em 1em 0; }

div.literal-block-wrapper div.highlight {
  margin: 0; }

code.descname {
  background-color: transparent;
  font-weight: bold;
  font-size: 1.2em; }

code.descclassname {
  background-color: transparent; }

code.xref, a code {
  background-color: transparent;
  font-weight: bold; }

h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
  background-color: transparent; }

.viewcode-link {
  float: right; }

.viewcode-back {
  float: right;
  font-family: sans-serif; }

div.viewcode-block:target {
  margin: -1px -10px;
  padding: 0 10px; }

img {
  max-width: 100%; }

body {
  font-size: 14pt;
  background-color: #fff;
}

.content .container {
  margin-top: 20px; }

#wipwarning {
  font-size: 14px;
  border: 1px solid #ebccd1;
  border-radius: 4px;
  color: #a94442;
  background-color: #f2dede;
  padding: 10px 30px;
  margin: 30px 20px; }

.biglink {
  font-size: 120%; }

.linkdescr {
  font-size: 90%; }

.doc-landing-table {
  margin: 10px 30px 20px 30px;
  width: 90%; }
  .doc-landing-table td {
    padding-top: 10px; }
  .doc-landing-table .right-column {
    padding-left: 100px; }

.doc-landing-metainfos {
  margin: 10px 30px 0px 30px; }
  .doc-landing-metainfos p {
    margin-bottom: 10px; }

.main-section {
  padding-top: 30px;
  padding-bottom: 30px;

}
.main-section h2 {
  padding-bottom: 20px;
  padding-top: 10px;
}

.whatis h2 {
  padding-bottom: 20px;
  padding-top: 10px;
}

.whatis P{
  color: #777777
}

div .row {
  padding-left: 30px;
  padding-right: 30px;

}
