/*
 * 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.
 */
 
/**
 * PROFILE MANAGER STYLESHEET
 *
 * PAGE ELEMENTS 
 *
 */
fieldset  {
}

label.invalid {
	color:#BF1B02;
	font:1em georgia;
	margin:0 0 2px;
}

.profile_input {
	height:23px;
	width:200px;
}

/**
 * DIV.USERDETAILS
 * This provides information about the login-status of the user.
 *
 * top and color can be changed depending on portal
 */
#userdetails {
	position:absolute;
	top:105px;
	right:15px;
	z-index:10;
}
#userdetails a {
	font-size:13px;
}

/* Unsupported browsers */

.orange_rbcontent { padding: 0.4em; }
.orange_rbroundbox { width: 100%; }

#unsupported {
  font-weight: bold;
  text-align: left;
}

/* Signup form */

#signupform table {
  border-spacing: 0px;
  border-collapse: collapse;
  empty-cells: show;
}

#signupform .label {
  padding-top: 2px;
  padding-right: 8px;
  vertical-align: top;
  text-align: right;
  width: 125px;
  white-space: nowrap;
}

#signupform .field {
  padding-bottom: 10px;
  white-space: nowrap;
}

#signupform .status {
  padding-top: 2px;
  padding-left: 8px;
  vertical-align: top;
  width: 246px;
  white-space: nowrap;
}

#signupform .textfield {
  width: 150px;
}

#signupform .error, .notice, .success {
  padding:0.25em;
  margin-bottom:0.5em 0;
  background-color:#FFFFFF;
  border:1px solid #BBBBBB;
}

#signupform label.error {
  background:none;
  padding-left: 16px;
  padding-bottom: 2px;
  font-weight: bold;
  color: #EA5200;
  border:none;
}

#signupform label.checked /*{
  background:none;
}

#signupform .success_msg {
  font-weight: bold;
  color: #0060BF;
  margin-left: 19px;
}

#signupform #dateformatStatus, #signupform #termsStatus {
  margin-left: 6px;
}

#signupform #termswrap {
  float: left;
}

#signupform #terms {
  vertical-align: middle;
  float: left;
  display: block;
  margin-right: 5px;
}

#signupform #lterms {
  font-weight: normal;
  vertical-align: middle;
  float: left;
  display: block;
  width: 350px;
  white-space: normal;
}

#signupform #lsignupsubmit {
  visibility: hidden;
}