/* 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;
@external .gwt-DialogBox .dialogMiddleCenter;
@external .gwt-TabBar;
@external .gwt-TabBarFirst;
@external .gwt-TabBarItem;
@external .gwt-TabBarItem-selected;
@external .gwt-TabBarRest;
@external .gwt-TabPanel;
@external .gwt-TabPanelBottom;

@eval backgroundColor com.google.gerrit.client.Gerrit.getTheme().backgroundColor;
@eval textColor com.google.gerrit.client.Gerrit.getTheme().textColor;
@eval trimColor com.google.gerrit.client.Gerrit.getTheme().trimColor;
@eval selectionColor com.google.gerrit.client.Gerrit.getTheme().selectionColor;

body {
  background: backgroundColor;
  color: textColor;
}

.gwt-DialogBox .dialogMiddleCenter {
  background: backgroundColor;
  color: textColor;
} 

.gwt-Button {
  white-space: nowrap;
}

.gwt-TabBar {
  border-bottom: 1px solid black;
}
.gwt-TabBar .gwt-TabBarFirst {
  display: none;
}
.gwt-TabBar .gwt-TabBarItem {
  margin: 0px;
  background: trimColor;
  padding-top: 0.5em;
  padding-bottom: 1px;
  padding-left: 1em;
  padding-right: 1em;
  border-right: 1px solid black;
}
.gwt-TabBar .gwt-TabBarItem-selected {
  background: selectionColor;
}
.gwt-TabBar .gwt-TabBarRest {
  background: trimColor;
  padding-top: 0.5em;
  padding-bottom: 1px;
}
.gwt-TabBar .gwt-TabPanelBottom {
  background: trimColor;
  border-top: 1px solid black;
  border-left: none;
  border-right: none;
  border-bottom: none;
  padding: 1px;
}
.gwt-TabPanel .gwt-TabPanelBottom {
  border: none;
}
