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

/* css for OpenStack Networking UI.  */

#traceInfoDialogId h2 {
    text-align: center;
    width: 300px;
    margin: 0;
    font-weight: lighter;
    word-wrap: break-word;
    display: inline-block;
    vertical-align: middle;
    font-size: 14pt;
}

div.traceInfo table {
    border-collapse: collapse;
    table-layout: fixed;
    empty-cells: show;
    margin: 0;
    width: 200px;
}

div.traceInfo td {
    cursor: pointer;
    font-variant: small-caps;

    font-size: 10pt;
    padding-top: 14px;
    padding-bottom: 14px;

    letter-spacing: 0.02em;
    cursor: pointer;

    color: #3c3a3a;
    width: 170px;
}

div.traceInfo td.label {
    font-weight: bold;
}

#flowTraceResultDialogId h2 {
    text-align: center;
    width: 600px;

    padding: 0 0 0 10px;
    margin: 0;
    font-weight: lighter;
    word-wrap: break-word;
    display: inline-block;
    vertical-align: middle;
}

div.flowTraceResult table {
    border-collapse: collapse;
    table-layout: fixed;
    empty-cells: show;
    margin: 0;
    width: 600px;
}

div.flowTraceResult td {
    padding: 4px;
    text-align: center;
    word-wrap: break-word;
    font-size: 12pt;
}

div.flowTraceResult .table-header td {
    font-weight: bold;
    font-variant: small-caps;
    text-transform: uppercase;
    font-size: 11pt;
    padding-top: 14px;
    padding-bottom: 14px;

    letter-spacing: 0.02em;
    cursor: pointer;

    background-color: #e5e5e6;
    color: #3c3a3a;
    width: 120px;

}

div.flowTraceResult .table-body tr:nth-child(even) {
    background-color: #f4f4f4;
}

div.flowTraceResult .table-body tr:nth-child(odd) {
    background-color: #fbfbfb;
}

div.flowTraceResult .table-body td {
    cursor: pointer;
    font-variant: small-caps;

    font-size: 10pt;
    padding-top: 14px;
    padding-bottom: 14px;

    letter-spacing: 0.02em;
    cursor: pointer;

    color: #3c3a3a;
    width: 120px;
}

div.flowTraceResult .table-body tr.drop {
    background-color: #e28d8d;
}

