/*
 * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0, which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * This Source Code may also be made available under the following Secondary
 * Licenses when the conditions for such availability set forth in the
 * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
 * version 2 with the GNU Classpath Exception, which is available at
 * https://www.gnu.org/software/classpath/license.html.
 *
 * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 */

body {
    text-align: center;
}

table {
    border: 1px outset;
    border-spacing: 2px;
    empty-cells: show;
    border-collapse: collapse;
}

table th {
    border: 1px inset;
    padding: 1px 1em;

}

table td {
    border: 1px inset;
    padding: 1px 1em;
    white-space: nowrap;
}

td.fail {
    background-color: lightpink;
}

td.pass {
    background-color: lightgreen;
}

td.didnotrun {
    background-color: yellow;
}

.nav {
    font-size: smaller;
    text-align: center;
    background-color: lightgray;
}

.nav a {
    margin-left: 1em;
    margin-right: 1em;
}

.suiteDetail {
    display: none;
    background-color: white;
    width: 100%;
}

.suiteDetail table {
    width: 100%;
    border: 1px black solid;
}
