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

img { border: 0; }

#content table {
  border: 0;
  width: 100%;
}
/*Hack to get IE to render the table at 100%*/
* html #content table { margin-left: -3px; }

#content th,
#content td {
  margin: 0;
  padding: 0;
  vertical-align: top;
}

.clearboth {
  clear: both;
}

.note, .warning, .fixme {
  border: solid black 1px;
  margin: 1em 3em;
}

.note .label {
  background: #369;
  color: white;
  font-weight: bold;
  padding: 5px 10px;
}
.note .content {
  background: #F0F0FF;
  color: black;
  line-height: 120%;
  font-size: 90%;
  padding: 5px 10px;
}
.warning .label {
  background: #C00;
  color: white;
  font-weight: bold;
  padding: 5px 10px;
}
.warning .content {
  background: #FFF0F0;
  color: black;
  line-height: 120%;
  font-size: 90%;
  padding: 5px 10px;
}
.fixme .label {
  background: #C6C600;
  color: black;
  font-weight: bold;
  padding: 5px 10px;
}
.fixme .content {
  padding: 5px 10px;
}

/**
 * Typography
 */

body {
  font-family: verdana, "Trebuchet MS", arial, helvetica, sans-serif;
  font-size: 100%;
}

#content {
  font-family: Georgia, Palatino, Times, serif;
  font-size: 95%;
}
#tabs {
  font-size: 70%;
}
#menu {
  font-size: 80%;
}
#footer {
  font-size: 70%;
}

h1, h2, h3, h4, h5, h6 {
  font-family: "Trebuchet MS", verdana, arial, helvetica, sans-serif;
  font-weight: bold;
  margin-top: 1em;
  margin-bottom: .5em;
}

h1 {
    margin-top: 0;
    margin-bottom: 1em;
  font-size: 1.4em;
  background-color: 73CAFF
}
#content h1 {
  font-size: 160%;
  margin-bottom: .5em;
}
#menu h1 {
  margin: 0;
  padding: 10px;
  background: #336699;
  color: white;
}
h2 { 
  font-size: 120%;
  background-color: 73CAFF
}
h3 { font-size: 100%; }
h4 { font-size: 90%; }
h5 { font-size: 80%; }
h6 { font-size: 75%; }

p {
  line-height: 120%;
  text-align: left;
  margin-top: .5em;
  margin-bottom: 1em;
}

#content li,
#content th,
#content td,
#content li ul,
#content li ol{
  margin-top: .5em;
  margin-bottom: .5em;
}


#content li li,
#minitoc-area li{
  margin-top: 0em;
  margin-bottom: 0em;
}

#content .attribution {
  text-align: right;
  font-style: italic;
  font-size: 85%;
  margin-top: 1em;
}

.codefrag {
  font-family: "Courier New", Courier, monospace;
  font-size: 110%;
}
