/*
 * 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.
 */ /* CSS Document */
#main {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 10px;
    color: black;
    background-color: white;
    border-collapse: collapse;
    padding: 0px;
    margin: 30px 0 30px 30px;
    width: 957px;
    position: absolute;
    text-align: left;
    border-color: black;
}

#lead {
    color: #00678C;
    /* color: #ffffff; */
    margin: 0px 0px 26px 0px;
    padding: 0px;
    width: 957px;
    height: 100px;
}

#lead h1 { /*
    background-image: url(../imgs/banner_left.jpg);
    background-repeat: no-repeat;
    */
    margin: 0px;
    padding: 5px 0 0 8px;
    font-size: 300%;
    font-weight: bold;
    line-height: 120%;
    height: 95px;
    /* account for 5px top marging to get a total of 100px */
    float: left;
}

#lead br {
    line-height: 20px;
}

#lead p { /*
    background-image: url(../imgs/banner_right.jpg);
    background-repeat: no-repeat;
    border-left: 1px solid;
        */
    margin: 0px;
    padding: 0px;
    height: 100px;
    float: right;
}

#technav {
    border-bottom: 1px solid #6181A9;
    border-top: 1px solid #6181A9;
    color: black;
    font-size: 10px;
    font-weight: bold;
    /*
    border-top: 1px solid black;
    */
    line-height: 21px;
    padding: 0;
    margin: 0;
}

#technav a {
    /*
    display: block;
    float: left;
    */
    text-decoration: none;
    padding: 3px 10px 3px 10px;
    color: #6181A9;
    text-decoration: none;
}

#technav a:hover {
    background-color: black;
}

#technav .technavat {
    /*
    display: block;
    float: left;
    */
    text-decoration: none;
    padding: 3px 10px 3px 10px;
    background-color: #B6CAE4;
    color: black;
}

#claim {
    color: white;
    background-color: black;
    padding: 2px 10px 2px 10px;
}

#claim p {
    margin: 0;
    padding: 0;
}

#claim a {
    color: #C5E2EE;
    text-decoration: none;
}

/*
.claimcell A:link {
	color: #C5E2EE;
	text-decoration: none;
}

.claimcell A:visited {
	color: #C5E2EE;
	text-decoration: none;
}
*/
#claim a:hover {
    color: #99FF33;
    border-bottom: 1px solid;
}

#claim a:active {
    color: #FFFFFF;
}

/* old styles */
table {
    text-align: left;
}

table.content {
    clear: both;
    font-size: 10px;
    line-height: 13px;
    border: 0px solid #66dd44;
    border-top: 1px solid #cccccc;
    padding: 0px;
    margin: 0px;
    margin-top: 26px;
    margin-bottom: 26px;
    /* width: 718px; */
    text-align: left;
}

tr {
    border-left: 1px solid #cccccc;  
    border-right: 1px solid #cccccc;  
}

td.content {
    color: #333333;
    border: 0px solid #66dd44;
    border-bottom: 1px solid #cccccc;
    vertical-align: middle;
    padding: 5px;
}

td.aligntop {
    vertical-align: top;
}

td.content img {
    width: 10px;
    height: 10px;
}

td.disabled {
    color: #999999;
}

th.content {
    color: #333333;
    border: 0px solid #66dd44;
    border-bottom: 1px solid #cccccc;
    text-align: left;
    padding: 5px;
    padding-left: 10px;
}

.right {
    text-align: right;
}
.center {
    text-align: center;
}

th.container {
    color: #6181A9;
    background-color: #f0f0f0;
}

th.important {
    color: #B81833;
}

.important {
    color: #B81833;
}

#maintable { /* postion: absolute; */
    font-size: 10px;
    line-height: 13px;
    border: 1px solid #000000;
    padding: 0px;
    margin: 0px;
    width: 960px;
}

.toolcell {
    font-size: 10px;
    color: #999999;
    line-height: 10px;
    background-color: #000000;
    height: 18px;
    /* width: 960px; */
    padding: 0px;
    padding-bottom: 1px;
    text-align: left;
}

.toolcell A:link {
    color: #C5E2EE;
    text-decoration: none;
}

.toolcell A:visited {
    color: #C5E2EE;
    text-decoration: none;
}

.toolcell A:hover {
    color: #99FF33;
    text-decoration: none;
    border-bottom: 1px solid;
}

.toolcell A:active {
    color: #FFFFFF;
    text-decoration: none;
}

.leadcell {
    margin: 0px;
    padding: 0px;
    border: 0px solid #000000;
    width: 718px;
    height: 100px;
    background-image: url(../imgs/banner_left.jpg);
    vertical-align: top;
}

.leadcelltext {
    position: absolute;
    border: 0px solid #000000;
    font-size: 26px;
    line-height: 32px;
    margin-top: 5px;
    margin-left: 8px;
    color: #ffffff;
    vertical-align: top;
}

.logocell {
    border-left: 1px solid #000000;
    width: 239px;
    background-image: url(../imgs/banner_right.jpg);
}

#technavcell {
    font-size: 10px;
    font-weight: bold;
    border: 0px solid #000000;
    border-top: 1px solid #000000;
    height: 21px;
    background-color: #6181A9;
}

/*
#technav A:link {
	float: left;
	display: block;
	color: #ffffff;
	border: 0px solid #000000;
	border-right: 1px solid #000000;
	height: 21px;
	text-decoration: none;
	padding: 0px 10px 0px 10px;
	background-color: #6181A9;
}

#technav A:visited {
	float: left;
	display: block;
	color: #ffffff;
	border-right: 1px solid #000000;
	height: 21px;
	text-decoration: none;
	padding: 0px 10px 0px 10px;
	background-color: #6181A9;
}

#technav A:hover {
	float: left;
	display: block;
	color: #ffffff;
	border-right: 1px solid #000000;
	height: 21px;
	text-decoration: none;
	padding: 0px 10px 0px 10px;
	background-color: #000000;
}

#technav A:active {
	float: left;
	display: block;
	color: #ffffff;
	border-right: 1px solid #000000;
	height: 21px;
	text-decoration: none;
	padding: 0px 10px 0px 10px;
	background-color: #6181A9;
}
*/
.techcontentcell { /* width: 718px; */
    border: 0px solid #000000;
    border-top: 1px solid #000000;
}

.relatedcell {
    border-left: 1px solid #000000;
    border-top: 1px solid #000000;
    width: 239px;
    background-color: #EBF0F6;
}

/*
.claimcell {
	width: 715px;
	font-size: 10px;
	color: #ffffff;
	line-height: 10px;
	background-color: #000000;
	height: 18px;
	padding: 0px;
	padding-bottom: 1px;
}

.claimcell A:link {
	color: #C5E2EE;
	text-decoration: none;
}

.claimcell A:visited {
	color: #C5E2EE;
	text-decoration: none;
}

.claimcell A:hover {
	color: #99FF33;
	text-decoration: none;
	border-bottom: 1px solid;
}

.claimcell A:active {
	color: #FFFFFF;
	text-decoration: none;
}
*/ /* CENTRAL CONTENT AREA STYLING */
.content {
    position: relative;
    margin: 25px;
    font-size: 11px;
    line-height: 16px;
    color: #000000;
}

.content A:link {
    color: #336600;
    text-decoration: underline;
}

.content A:visited {
    color: #666666;
    text-decoration: underline;
}

.content A:hover {
    color: #ffffff;
    background-color: #336600;
    text-decoration: none;
}

.content A:active {
    color: #ffffff;
    background-color: #000000;
    text-decoration: none;
}

body {
	background-color: white;
}

/* TEXT STYLING */ /*
h1, h2, h3, h4, h5, h6, p

	{
	margin: 0px;
	margin-bottom: 8px;
	font-size: 11px;
	line-height: 16px;
	font-weight:bold;
	}

*/ /*
h1
	{
	color: #000000;
	margin-top: 32px;
	clear: left;
	}


h2
	{
	color: #336699;
	}


h3
	{
	color: #336699;
	}
*/ /*
p
	{
	font-size: 11px;
	line-height: 16px;
	font-weight: normal;
	color: #000000;
	}
*/ /* FORMS */
form {
    font-size: 9px;
    border-top: 0px solid #000000;
    border-bottom: 0px solid #000000;
    border-left: 0px solid #000000;
    border-right: 0px solid #000000;
    margin: 0;
    padding: 0;
    clear: left;
}

select,textarea {
    font-family: Verdana, Arial, Helvetica, san-serif;
    font-size: 9px;
    font-weight: normal;
    display: block;
    float: left;
    padding-top: 3px;
    margin-bottom: 10px;
}

.input {
    font-family: Verdana, Arial, Helvetica, san-serif;
    font-size: 9px;
    font-weight: normal;
    color: #184054;
    background-color: #f0f0f0;
    border: 1px solid #999999;
    border-bottom: 1px solid #cccccc;
    border-right: 1px solid #cccccc;
}

.submit {
    cursor: default;
    width: 60px;
    font-family: Verdana, Arial, Helvetica, san-serif;
    font-size: 10px;
    font-weight: bold;
    background-color: #f0f0f0;
    height: 20px;
    padding: 0px;
    padding-bottom: 1px;
    margin: 0px;
    border: 1px solid #cccccc;
    border-bottom: 1px solid #666666;
    border-right: 1px solid #666666;
}

input.important {
    background-color: #B81833;
    color: #ffffff;
}

select {
    color: #184054;
    background-color: #f0f0f0;
    border: 0px solid #999999;
}

textarea {
    color: #184054;
    background-color: #f0f0f0;
    width: 234px;
    height: 100px;
    border: 1px solid #999999;
    border-bottom: 1px solid #cccccc;
    border-right: 1px solid #cccccc;
}

.clearleft {
    clear: left;
}

.clearboth {
    clear: both;
}

.checkradio {
    background-color: #ffffff;
    width: 20px;
    padding: 0px;
    padding-bottom: 10px;
    margin: 0px;
    margin-top: 2px;
    border: 0px solid #999999;
}

.checkradiotext {
    font-size: 9px;
    font-weight: normal;
    line-height: 11px;
    width: 100px;
    color: #000000;
    padding: 0px;
    padding-bottom: 10px;
    margin: 0px;
    margin-top: 4px;
    border: 0px solid #999999;
}

div.buttons {
    background-color: #6181A9;
    height: 30px;
}
div.button {
	float:right;
    margin-top: 5px;
	margin-right: 10px;
}
div.fullwidth {
    width: 100%;
}
div.statusline {
    margin-top: 10px;
    background-color: #F5F5F5;
    padding-left: 10px;
    border: 1px solid #CCCCCC;
    font-size: 13px;
    color: #222222;
    line-height: 19px;
    margin-bottom: 10px;
}
div.table {
	margin-left: 1px;
}
div.tablelayout {
}

/* tables */
table.tablelayout {
	border-left: 1px solid #6181A9;
    border-right: 1px solid #6181A9;
    border-collapse: collapse;
	font-family:arial;
    background-color: #CDCDCD;
    font-size: 8pt;
    width: 100%;
    text-align: left;
}
table.tablelayout tbody tr {
    border-left: 1px solid #6181A9;
    border-right: 1px solid #6181A9;
}

table.tablelayout thead tr th, table.tablelayout tfoot tr th {
    background-color: #e6EEEE;
    border-left: 1px solid #6181A9;
    border-right: 1px solid #6181A9;
    border-top: 1px solid #FFF;
    border-bottom: 1px solid #FFF;
    font-size: 8pt;
    padding: 4px;
}
table.tablelayout thead tr .header {
    background-image: url(../imgs/bg.gif);
    background-repeat: no-repeat;
    background-position: center right;
    cursor: pointer;
}
table.tablelayout tbody td {
    color: #3D3D3D;
    border-top: 1px solid #6181A9;
    border-bottom: 1px solid #6181A9;
    padding: 4px;
    background-color: #FFF;
    vertical-align: top;
}
table.tablelayout tbody tr.odd td {
    background-color:#F0F0F6;
}
table.tablelayout thead tr .headerSortUp {
    background-image: url(../imgs/asc.gif);
}
table.tablelayout thead tr .headerSortDown {
    background-image: url(../imgs/desc.gif);
}
table.tablelayout thead tr .headerSortDown, table.tablelayout thead tr .headerSortUp {
background-color: #8dbdd8;
}
.col_Id {
    width: 40px;
}
.col_Status {
	width: 50px;
}
.col_Actions {
    width: 95px;
}