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

#browser {
    margin-top:  1em;
}

#interface-picker {
    float:         left;
    margin-right:  1.0em;
    padding-right: 1.0em;
    border-right:  thin solid;
}

#interface-picker h2, #interface-content h2 {
    margin-top:    0.0em;
    border-bottom: thin solid;
}

#interface-content {
    overflow:     hidden;
    padding-left: 1.0em;
}

#interface-list li {
    list-style-type: none;
}

#interface-body pre {
    margin-left: 2.0em;
    white-space: pre;
    overflow:    auto;
}

.tdIndent {
    margin-left: 1.0em;
}

.indent {
    white-space: pre;
}

.attributeName, .methodName, .interfaceName {
    font-weight: bold;
}

.type {
    z-font-style: italic;
}

.parameterName {
    color:      #0A0;
}

h3 {
    border:                thin solid;
    -moz-border-radius:    0.5em;
    -webkit-border-radius: 0.5em;
    background-color:      #EEE;
    padding-left:          1.0em;
}

a, a:hover, a:visited, .type {
    color:      #00A;
}

@media print {
    .noprint {
        display: none;
    }

    body {
        font-size: 60%;
    }
}
