/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*/

body {
  background-color : #ffffff;
  font-family : sans-serif;
}

.small {
  font-size : smaller;
}

div#dfsnodetable tr#row1, div#dfstable td#col1 {
	font-weight : bolder;
}

div#dfstable td#col1 {
	vertical-align : top;
}

div#dfstable td#col3 {
	text-align : right;
}

div#dfsnodetable caption {
	text-align : left;
}

div#dfsnodetable a#title {
	font-size : larger;
	font-weight : bolder;
}

div#dfsnodetable td, th {
	border-bottom-style : none;
        padding-bottom : 4px;
        padding-top : 4px;       
}

div#dfsnodetable A:link, A:visited {
	text-decoration : none;       
}

div#dfsnodetable th.header, th.headerASC, th.headerDSC {
        padding-bottom : 8px;
        padding-top : 8px;       
}
div#dfsnodetable th.header:hover, th.headerASC:hover, th.headerDSC:hover,
                 td.name:hover {
        text-decoration : underline;
	cursor : pointer;
}

div#dfsnodetable td.blocks, td.size, td.pcused, td.adminstate, td.lastcontact {
	text-align : right;
}

div#dfsnodetable .rowNormal .header {
	background-color : #ffffff;
}
div#dfsnodetable .rowAlt, .headerASC, .headerDSC {
	background-color : lightyellow;
}

.warning {
        font-weight : bolder;
        color : red;	
}

div#dfstable table {
	white-space : pre;
}

div#dfsnodetable td, div#dfsnodetable th, div#dfstable td {
	padding-left : 10px;
	padding-right : 10px;
}

td.perc_filled {
  background-color:#AAAAFF;
}

td.perc_nonfilled {
  background-color:#FFFFFF;
}

line.taskgraphline {
  stroke-width:1;stroke-linecap:round;  
}

#quicklinks {
	margin: 0;
	padding: 2px 4px;
	position: fixed;
	top: 0;
	right: 0;
	text-align: right;
	background-color: #eee;
	font-weight: bold;
}

#quicklinks ul {
	margin: 0;
	padding: 0;
	list-style-type: none;
	font-weight: normal;
}

#quicklinks ul {
	display: none;
}

#quicklinks a {
	font-size: smaller;
	text-decoration: none;
}

#quicklinks ul a {
	text-decoration: underline;
}
