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

* {
    margin: 0;
    padding: 0;
}
body {
    font-family: Arial, Tahoma, Helvetica;
    font-size: 10pt;
    font-weight: normal;
    color: #303942;
    background-color: #fff;
}

.clear {
    clear: both;
}
.hidden {
    visibility: hidden;
}

#presetMenu {
    border: 1px solid #aeaeab;
    border-radius: 2px;
    white-space: nowrap;
    min-width: 280px;
}
#presetMenu a {
    display: block;
    height: 38px;
    clear: both;
}
#presetMenu a:hover {
    background-color: #e4ecf7;
}
#presetMenu a.active {
    background-color: #bbcee9;
}
#presetMenu div.form-item, #presetMenu div.icon, #presetMenu div.label {
    float: left;
    margin-top: 10px;
}
#presetMenu div.form-item {
    margin-left: 20px;
    margin-right: 20px;
}
#presetMenu div.icon {
    width: 16px;
}
#presetMenu div.label {
    margin-top: 6px;
    margin-left: 20px;
    margin-right: 20px;
}
#presetMenu div.main {
    font-size: 10pt;
    font-weight: bold;
    color: #303942;
}
#presetMenu div.info {
    font-size: 9pt;
    color: #6b7176;
}
#presetMenu hr {
    clear: both;
    margin: 0 4px;
    border: 1px solid #aeaeab;
}
