/*
 * 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: white;
	background-image: url('wicket-logo.png');
	background-repeat: no-repeat;
	background-attachment: fixed;
	background-position: 96% 96%;
	color: #6F6F6F;
	font-family: 'Lucida Sans', 'Helvetica', 'Sans-serif', 'sans';
	font-size: 9pt;
	line-height: 1.8em;
	padding: 10px 10px 10px 10px;
	margin: 10px 10px 10px 10px;
}

h1,h2,h3,h4,h5,h6,h7,h8 {
	color: #E9601A;
}

#extitle {
	font-size: 12pt;
	font-weight: bold;
	color: #E9601A;
	padding: 10px 10px 10px 10px;
}

.mark {
	background-color: yellow;
	margin: 5px;	
}

ul.feedbackPanel li.feedbackPanelERROR {
	color: red;
	list-style: circle;
	font-weight: bold;
}

ul.feedbackPanel li.feedbackPanelINFO {
	color: green;
	list-style: circle;
	font-weight: bold;
}

.block {
	padding: 10px;
}

.blockWithBorder {
	border-width: thin;
	border-style: dotted;
	border-color: #E9601A;
}

#hellomessage {
	font-size: 30pt;
}

#titleblock {
	background-color: #BBBBBB;
	color: white;
	font-weight: bold;
	border-bottom: solid #E9601A;
	border-width: thin;
	padding: 2px 2px 2px 6px;
}

h2 {
	font-size: 1.25em;
}

h3 {
	font-size: 1em;
}

a {
	color: #6F6F6F;
	text-decoration: underline;
}

img {
	border: none;
}

pre {
	font-family: 'Lucida Sans', 'Helvetica', 'Sans serif', 'sans';
}

th {
	background: #C3C3C3;
	color: white;
	font-weight: bold;
}

tr.b {
	background: #F5F5F5;
}

tr.a {
	background: #E6E6E5;
}

tr.none {
	background: transparent;
}

a.none {
	background: transparent;
	padding-right: 0px;
}

#inputForm label {
	display: block;
	margin-top: 5px;
}

#numberRadioChoice label { display: inline !important; }

#inputForm label.non {
	display: inline !important;
}

#inputFormTable td {
	vertical-align: top;
	padding: 10px;
}

#nestedExampleTree {
	width: 300px;
}

ul.feedbackPanel {
	width: 600px;
}

#siteSelection {
	width: 200px;
}

div.tabRowContent {
	border-color: #DDDDDD;
	border-style: solid;
	border-width: 1px;
	margin: 4px;
	padding: 4px;
}


table.dataview {
	margin-bottom: 10px;
	border-bottom: 1px solid #0079d6;
	font-size: 1em;
	font-family: arial;
	}
	
table.dataview caption { text-align: left; }
table.dataview tr { padding-top: 2px; padding-bottom: 2px; }
table.dataview tr.even { background-color: #ffebcd; }
table.dataview tr.odd { background-color: #fff; }
table.dataview tr td { padding-left: 8px; padding-right: 30px; }
table.dataview tr th { color: black; padding-top: 3px; padding-bottom: 3px; padding-left: 8px; padding-right: 24px; background-color: #c1e4ff; border-bottom: 1px solid #0079d6; border-top: 1px solid #0079d6; text-align: left; white-space: nowrap; vertical-align: middle;}

table.dataview tr th { background-position: right; background-repeat:no-repeat; }
table.dataview tr th.wicket_orderDown {
	background-color: #87cbff; background-image: url(displaytag/img/arrow_down.png); }
table.dataview tr th.wicket_orderUp {
	background-color: #87cbff; background-image: url(displaytag/img/arrow_up.png); }
table.dataview tr th.wicket_orderNone {
	background-image: url(displaytag/img/arrow_off.png);
}
table.dataview tr th a { font-weight: normal; }
table.dataview #message { padding-left: 3px; }
table.dataview caption { padding-bottom: 2px; }

/* TAB PANEL STYLES */

div.tabpanel div.tab-row{
  float:left;
  width:100%;
  background:#DAE0D2 url("tabs/bg.gif") repeat-x bottom;
  line-height:normal;
  }

div.tabpanel div.tab-row ul {
  margin:0;
  padding:10px 10px 0;
  list-style:none;
  }
  
div.tabpanel div.tab-row li {
  float:left;
  background:url("tabs/left.gif") no-repeat left top;
  margin:0;
  padding:0 0 0 9px;
  }
  
div.tabpanel div.tab-row a {
  display:block;
  background:url("tabs/right.gif") no-repeat right top;
  padding:5px 15px 4px 6px;
  text-decoration:none;
  font-weight:bold;
  white-space:nowrap;
  color:#eee;
  }
  
div.tabpanel div.tab-row a:hover {
  color:#fff;
  }
  
div.tabpanel div.tab-row li.selected {
  background-image:url("tabs/left_on.gif");
  }
  
div.tabpanel div.tab-row li.selected a {
  background-image:url("tabs/right_on.gif");
  color:#333;
  padding-bottom:5px;
  }
 
/* VARIATION 1 TAB PANEL STYLES */
div.tabpanel1 div.tab-row{
  float:left;
  width:100%;
  background:#DAE0D2 url("tabs1/bg.gif") repeat-x bottom;
  line-height:normal;
  }

div.tabpanel1 div.tab-row ul {
  margin:0;
  padding:10px 10px 0;
  list-style:none;
  }
  
div.tabpanel1 div.tab-row li {
  float:left;
  background:url("tabs1/left.gif") no-repeat left top;
  margin:0;
  padding:0 0 0 9px;
  }
  
div.tabpanel1 div.tab-row a {
  display:block;
  background:url("tabs1/right.gif") no-repeat right top;
  padding:5px 15px 4px 6px;
  text-decoration:none;
  font-weight:bold;
  color:#765;
  white-space:nowrap;
  }
  
div.tabpanel1 div.tab-row a:hover {
  color:#333;
  }
  
div.tabpanel1 div.tab-row li.selected {
  background-image:url("tabs1/left_on.gif");
  }
  
div.tabpanel1 div.tab-row li.selected a {
  background-image:url("tabs1/right_on.gif");
  color:#333;
  padding-bottom:5px;
  }
  
/* TABBED PANEL VARIATION 2 */
div.tabpanel2 div.tab-row {
  float:left;
  width:100%;
  background:#369 url("tabs2/bg.gif") repeat-x bottom;
  font-size:85%;
  line-height:normal;
  }
div.tabpanel2 div.tab-row ul {
  margin:0;
  padding:10px 10px 0;
  list-style:none;
  }
div.tabpanel2 div.tab-row li {
  float:left;
  background:url("tabs2/right.gif") no-repeat right top;
  margin:0;
  padding:0 5px 0 0;
  }
div.tabpanel2 div.tab-row a {
  float:left;
  display:block;
  background:url("tabs2/left.gif") no-repeat left top;
  padding:5px 7px 4px 20px;
  text-decoration:none;
  font-weight:bold;
  color:#9cf;
  white-space:nowrap;
  }
/* Commented Backslash Hack
   hides rule from IE5-Mac \*/
div.tabpanel2 div.tab-row a {float:none;}
/* End IE5-Mac hack */
div.tabpanel2 div.tab-row a:hover {
  color:#fff;
  }
div.tabpanel2 div.tab-row li.selected {
  background-image:url("tabs2/right_on.gif");
  }
div.tabpanel2 div.tab-row li.selected a {
  background-image:url("tabs2/left_on.gif");
  color:#333;
  padding-bottom:5px;
  }

/* TABBED PANEL VARIATION 3 */
div.tabpanel3 div.tab-row {
  float:left;
  width:100%;
  background:#eee url("tabs3/bg.jpg") repeat-x top;
  line-height:normal;
  }
div.tabpanel3 div.tab-row ul {
  margin:0;
  padding:10px 10px 0;
  list-style:none;
  }
div.tabpanel3 div.tab-row li {
  float:left;
  background:url("tabs3/left.gif") no-repeat left top;
  margin:0;
  padding:0 0 0 28px;
  }
div.tabpanel3 div.tab-row a {
  float:left;
  display:block;
  background:url("tabs3/right.gif") no-repeat right top;
  padding:9px 28px 4px 0px;
  text-decoration:none;
  font-weight:bold;
  color:#92A2AC;
  }
/* Commented Backslash Hack
   hides rule from IE5-Mac \*/
div.tabpanel3 div.tab-row a {float:none;}
/* End IE5-Mac hack */
div.tabpanel3 div.tab-row a:hover {
  color:#A56060;
  }
div.tabpanel3 div.tab-row li.selected {
  background-image:url("tabs3/left_on.gif");
  }
div.tabpanel3 div.tab-row li.selected a {
  background-image:url("tabs3/right_on.gif");
  color:#A56060;
  }



div.tabpanel4 div.tab-row ul {
    height: 20px;
    margin: 0;
    padding-left: 10px;
    background: url( tabs4/tab_bottom.gif ) repeat-x bottom;
}

div.tabpanel4 div.tab-row li {
    margin: 0;
    padding: 0;
    display: inline;
    list-style-type: none;
}

div.tabpanel4 div.tab-row a:link, div.tabpanel4 div.tab-row a:visited {
    float: left;
    background: #f3f3f3;
    font-size: 12px;
    line-height: 14px;
    font-weight: bold;
    padding: 2px 10px 2px 10px;
    margin-right: 4px;
    border: 1px solid #ccc;
    text-decoration: none;
    color: #666;
}

div.tabpanel4 div.tab-row li.selected a:link, div.tabpanel4 div.tab-row a:visited.active {
    border-bottom: 1px solid #fff;
    background: #fff;
    color: #000;
}

div.tabpanel4 div.tab-row a:hover {
    background: #fff;
}

/* PROGRESS BAR */

    div.wupb-uploadStatus {
        margin: 5px;
        color: #aaa;
    }

    div.wupb-progressBar {
        margin: 5px;
    }

    div.wupb-progressBar .wupb-border {
	    background: url( progress-remainder.gif ) repeat-x;
		background-color: #eee;
        border-left: 1px solid grey;
        border-right: 1px solid grey;
        width: 100%;
    }

    div.wupb-progressBar .wupb-background {
	    background: url( progress-bar.gif ) repeat-x; 
		background-color: #507090;
        height: 18px;
        width: 0%;
    }
/* END PROGRESS BAR */
 