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

a.externalLink, a.externalLink:link, a.externalLink:visited, a.externalLink:active, a.externalLink:hover {
  background: none;
  padding-right: 0;
}

body ul {
  list-style-type: square;
}

#downloadbox {
  float: right;
  margin-left: 2em;
  padding-left: 1em;
  padding-right: 1em;
  padding-bottom: 1em;
  border: 1px solid #999;
  background-color: #eee;
  width: 17.5em;
}

#downloadbox h5 {
  color: #000;
  margin: 0;
  border-bottom: 1px solid #aaaaaa;
  font-size: smaller;
  padding: 0;
  margin-top: 1em;
}

#downloadbox p {
  margin-top: 1em;
  margin-bottom: 0;
}

#downloadbox li {
  text-indent: inherit;
}

div.p {
  margin-top: 5px;
  margin-bottom: 10px;
}

pre.commandline {
  border: 1px solid #bbb;
  background-color: white;
  margin-top: 5px;
  margin-bottom: 5px;
  font-size: 10pt;
  padding: 15px;
  color: gray;
}

img {
  border-style: solid ;
  border-width: 1px;
  border-color: #ddd;
  padding: 5px;
  margin-top: 10px;
  border-radius: 5px;
}

pre.commandline .input {
  color: #55f;
}

pre.commandline .command {
  color: black;
  font-weight: bold;
}

#banner {
  background: none;
}

#banner img {
  margin: 2px;
}

