/*
 * 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;
    position: absolute;
    text-align: left;
    border-color: black;
}

#lead {
    color: #00678C;
    /* color: #ffffff; */
    margin: 0px 0px 26px 0px;
    padding: 0px;
    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;
    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;
}

.toolcell {
    font-size: 10px;
    color: #999999;
    line-height: 10px;
    background-color: #000000;
    height: 18px;
    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 {
    border: 0px solid #000000;
    border-top: 1px solid #000000;
}

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

/* 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;
}

.fileinput {
    font-family: Verdana, Arial, Helvetica, san-serif;
    font-size: 9px;
    font-weight: normal;
    color: #184054;
}

.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;
    text-align: right;
    vertical-align: middle;
    padding-right: 10px;
    padding-top: 8px;
    color: #F0F0F0;
    font-size: 10px;
}
div.buttons select {
    font-family: Verdana, Arial, Helvetica, san-serif;
    font-size: 9px;
    font-weight: normal;
    display: inline;
    float:none;
}
div.button {
    display: inline-block;
    margin-left: 10px;
}
div.fullwidth {
    width: 100%;
}
div.statusline {
    margin-top: 10px;
    background-color: #F5F5F5;
    padding-left: 10px;
    border: 1px solid #CCCCCC;
    font-family: Verdana, Arial, Helvetica, san-serif;
    font-size: 11px;
    font-weight: normal;
    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;
}
#plugin_content {
    margin-top: 26px;
    margin-bottom: 26px;
}
.contentheader {
    border: 0px solid #66dd44;
    border-bottom: 1px solid #cccccc;
    text-align: left;
    padding: 5px;
    padding-left: 10px;
    color: #6181A9;
    background-color: #f0f0f0;
}
.contentline {
	padding-top: 15px;
	padding-left:10px;
    clear: both;
    width: 100%;
}
.contentleft {
    padding-left: 9px;
    float: left;
    width:110px;
}
.contentright {
    display: inline;
    width: 225px;
}
