/* Copyright (C) 2015 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.
 */

.importer-import-panel,
.importer-message-panel,
.importer-imports-panel {
  border-spacing: 0px 5px;
}

.importer-importButton {
  margin-left: 10px !important;
}

.importer-importProjectTable {
  border-collapse: separate;
  border-spacing: 0;
}

.importer-importProjectTable .leftMostCell {
  border-left: 1px solid #EEE;
}

.importer-importProjectTable .topMostCell {
  border-top: 1px solid #EEE;
}

.importer-importProjectTable .dataHeader {
  border: 1px solid #FFF;
  padding: 2px 6px 1px;
  background-color: #EEE;
  font-style: italic;
  white-space: nowrap;
  color: textColor;
}

.importer-importProjectTable .dataCell {
  padding-left: 5px;
  padding-right: 5px;
  border-right: 1px solid #EEE;
  border-bottom: 1px solid #EEE;
  vertical-align: middle;
  height: 20px;
}

.importer-cancel-button {
  margin-left: 150px;
}

.importer-resume-message,
.importer-complete-message {
  margin-bottom: 10px;
}

.importer-action-panel .gwt-Button {
  margin: 2px;
}

.importer-projectImportInfoTable {
  margin-bottom: 10px;
}
