/* 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.getConfig().getBackgroundColor();
@eval textColor com.google.gerrit.client.Gerrit.getConfig().getTextColor();;
@eval trimColor com.google.gerrit.client.Gerrit.getConfig().getTrimColor();
@eval selectionColor com.google.gerrit.client.Gerrit.getConfig().getSelectionColor();

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;
}
