/*
 * 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.
 */
.img-title {
    text-align: center
}

.img {
    text-align: center
}

.special-td {
    font-family: Arial;
    font-size: 10pt;
    font-weight: bold
}

.special {
    font-family: Arial;
    font-weight: bold;
    border-style: solid;
    border-width: 1;
    padding-left: 4;
    padding-right: 4;
    padding-top: 1;
    padding-bottom: 1;
    background-color: #C0C0C0;
    font-size: 10pt
}

.xml {
    font-family: Arial;
    font-size: 10pt;
    color: #0000FF;
    font-style: italic
}

.code {
    font-family: Courier New;
    font-size: 10pt;
    color: #800000
}

/*
-----------------------------------------------------------------------
Generic element styles
----------------------------------------------------------------------- */
body {
    color: #111;
    font: 11px / 1.5 verdana, arial;
    margin: 10;
    padding: 5;
    border-width: 0;
    outline-width: 0;
    list-style-position: outside;
    display: block;
}

p {
}

a, a:link {
    color: #039;
    font-size: 11px;
}

a:hover {
    color: #03c;
    font-size: 11px;
    text-decoration: none;
}

a:visited {
    font-size: 11px; /* color: #969; */
/* No need to discolour visited links as this is a system */
}

ul, ol {
    font-size: 11px;
    text-align: left;
    list-style-position: outside;
    display: block;
    white-space: normal;
}

table td {
    font-size: 11px;
    padding: 0px;
    spacing: 0px;
    text-align: left;
    vertical-align: top;
}

h1 {
    color: #000;
    font-size: 16px;
    font-weight: bold;
    background-color: #dcdcdc;
    padding-left: 10px;
}

h2 {
    font-size: 15px;
    padding-left: 10px;
    border-bottom: 1px solid #a9a9a9;
    border-left-color: black;
}

h3 {
    font-size: 14px;
    padding-left: 10px;
    border-bottom: 1px solid #d3d3d3;
}

h4 {
    font-size: 13px;
}

th {
    background-color: #f5f5f5;
    height: 20;
    paddong: 0px;
    spacing: 0px;
}

table {
    margin: 0;
    padding: 0;
    border: solid 0 #dcdcdc;
}

.header {
    height: 80px;
    background-image: url( ../images/doc_header.jpg );
    background-repeat: no-repeat;
    background-attachment: scroll;
    background-position: left top;
}