/*
 * Copyright 2016-present Open Networking Foundation
 *
 * Licensed 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.
 */

/*
 ONOS GUI -- Quickhelp Panel -- CSS file
 */

/*
 ONOS GUI -- Quick Help Service (layout) -- CSS file
 */

#quickhelp {
    top: 100px;
    z-index: 5000;
    position: relative;
}

#quickhelp div.help {
    background: black;
    opacity: 0.8;
}

#quickhelp div.help table {
    vertical-align: top;
}

#quickhelp div.help p {
    text-align: center;
    color: white;
    font-weight: bold;
}

#quickhelp td.key {
    color: #add;
    padding-left: 8px;
    padding-right: 4px;
}

#quickhelp td.desc {
    color: white;
}
