/*
 * 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 {
	background-color: #FFFFFF;
	color: #000000;
}

h1 {
	font-size: 145%
}

li {
	list-style: none;
}

ul {
	margin-left: 0;
	padding-left: 1.5em;
	border-left: 1px dashed lightgray;
}

table {
    width: 100%;
    border-collapse: collapse;
    empty-cells: show;
    /*border: 1px solid black;*/
}

th {
    padding-left: 0.25em;
    padding-right: 0.25em;
    border: 1px solid black;
    empty-cells: show;
}

th.entity {
    font-size: x-large;
    font-weight: bolder;
    empty-cells: show;
    background-color: #4444FF;
}

td {
    padding-left: 0.25em;
    padding-right: 0.25em;
    border: 1px solid black;
    empty-cells: show;
}

.deprecated {
	text-decoration:line-through;
}

/* Table colors */
.TableHeadingColor {
	background: #CCCCFF;
	color: #000000;
    white-space: nowrap;
    /*border: 1px solid black;*/
}

.nobreak {
    white-space: nowrap;
}

/* Dark mauve */
.TableSubHeadingColor {
	background: #EEEEFF;
	color: #000000;
    /*border: 1px solid black;*/
    white-space: nowrap;
}
