/* 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 .gwt-TabBarItem,
.gwt-TabBar .gwt-TabBarRest,
.gwt-TabPanelBottom {
  background: transparent;
}

.gwt-TabBar {
  border-bottom: 1px solid black;
}
.gwt-TabBar .gwt-TabBarFirst {
  display: none;
}
.gwt-TabBar .gwt-TabBarItem {
  color: #353535;
  margin: 0;
  background: trimColor;
  padding-top: 0.5em;
  padding-bottom: 1px;
  padding-left: 1em;
  padding-right: 1em;
  border-bottom: 3px solid transparent;
  border-right: 0;
}
.gwt-TabBar .gwt-TabBarItem-selected {
  color: #990000;
  background: selectionColor;
  border-bottom-color: #990000;
}
.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;
}
