/*******************************************************************************
 * Copyright (c) 2005, 2010 Intel Corporation and others.
 *
 * This program and the accompanying materials 
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 * 
 * Contributors:
 *     Intel Corporation - initial API and implementation
 *     IBM Corporation 2006, refactored index view into a single frame
 *     IBM Corporation 2009, added style for .see
 *     IBM Corporation 2010, Added see all link
 *******************************************************************************/

BODY {
    <%=prefs.getViewBackgroundStyle()%>
	font:<%=prefs.getViewFont()%>;
	font-size:.875rem;
	margin-top:5px;
	margin-<%=isRTL?"right":"left"%>:5px;
	padding:0px;
	border:0px;	
	cursor:default;
	overflow:hidden;
}

TABLE, TR, TD, P {
	margin:0px;
	padding:0px;
	border:0px;
}

TABLE {
	font:<%=prefs.getViewFont()%>;
	font-size:.875rem;
	width:100%;
}

TR {
	height:21px;
}


INPUT {
	font:<%=prefs.getViewFont()%>;
	font-size:.875rem;
	margin:0;
	padding:0;
	border:1px solid ThreeDShadow;
}

INPUT {
    font-size:1.0em;
}

#instruction {
	white-space:nowrap;
}

#indexList {
    overflow:auto;
    width: 100%;
    height: 100px;
}

#typein {
	width:100%;
}

#typeinTable {
	width:100%;
	height: 4em;
}

#button {
	background:ThreeDShadow;
	color:Window;
	font-size: 1.0em;
	font-weight:bold;
	margin-left:1px;
}

<%
	if (requestData.isIE()) {
%>
#go {
	padding-<%=isRTL?"right":"left"%>:1px;
}
<%
	}
%>

#root {
	margin-top:0px;
	margin-<%=isRTL?"right":"left"%>:5px;	
}

#innerNavigation {
    margin-top:0px;
    padding-bottom: 5px;
	font-weight:bold;
	width:100%;
}

#navigation {
    width:100%;
}

#td_previous {   
    text-align:<%=isRTL?"right":"left"%>;
    width:50%;
}

#td_next {
    text-align:<%=isRTL?"left":"right"%>;
    width:50%;
}

DIV.root {
    font-weight:normal;
}

DIV.visible, DIV.unopened { 
	border-width:0; 
	margin-<%=isRTL?"right":"left"%>:1.5em; 
	font-weight:normal;
}
  
DIV.hidden {
	display:none; 
}

DIV.visible, DIV.root {  
    margin-top:1px; 
}


DIV.group { 
	border-width:0; 
	margin-<%=isRTL?"right":"left"%>:0; 
}

SPAN.item{
    white-space: nowrap;
}

IMG {
	border:0px;
	margin:0px;
	padding:0px;
	margin-<%=isRTL?"left":"right"%>:4px;
}

IMG.expander, IMG.h {
    margin-top:4px;
    margin-bottom:2px;
}

A {
	text-decoration:none; 
	padding-<%=isRTL?"left":"right"%>:2px;
	color:WindowText;
	/* this works in ie5.5, but not in ie5.0  */
	white-space: nowrap;
}

A:hover{
	text-decoration:underline; 
}

A.active{ 
	color:HighlightText; 
	background:Highlight;
	width:100%;
}

A.active:hover{
	text-decoration:underline; 
}

A.see {
    font-style : italic;
    color : #0000FF;
}

<%
if (requestData.isSafari()){
%>

A.nolink {
	color:#808080;
}

<% 
} else {
%>

A.nolink {
	color:GrayText;
}

<%
}
%>

A.nolink {
	text-decoration:none; 
	font-weight:bold;
}

A.nolink:hover {
	text-decoration:none; 
}

.h {
	visibility:hidden;
}

.showall {
    text-decoration:underline; 
    color:#0066FF; 
	cursor:pointer;
}

<%@ include file="darkTheme.css"%>
