/* Copyright (C) 2009 The Android Open Source Project
 *
 * Licensed 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.
 */

@external .gwt-Button;

@url identifierBackground identifierBackground;

.loginForm {
  margin-left: 10px;
  margin-right: 10px;
}

.logo {
  text-align: right;
}

.loginLine {
  margin-bottom: 10px;
}
.loginLine div {
  white-space: nowrap;
}
.loginLine .gwt-Button {
  margin-left: 2px;
}

.identifier {
  background: #ffffff identifierBackground no-repeat scroll 5px 50%;
  padding-left: 25px;
  border: 1px solid #999999;
}

.directLink {
  vertical-align: middle;
  margin-right: 5px;
  color: blue;
  cursor: pointer;
}
.directLink:hover {
  text-decoration: underline;
}
.directLink img {
  margin-right: 3px;
  border: 0 none;
}

.error {
  padding-top: 5px;
  padding-bottom: 5px;
}
.error span {
  padding-top: 4px;
  padding-bottom: 4px;
  padding-left: 10px;
  padding-right: 10px;
  background: #fff1a8;
}
