/* 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.
 */

/**
 * Make every single class external so users can rely on their names
 */
@external .*;

@def black #000000;
@def white #ffffff;
@def norm-font  sans-serif;
@def mono-font  monospace;

@eval backgroundColor com.google.gerrit.client.Gerrit.getTheme().backgroundColor;
@eval topMenuColor com.google.gerrit.client.Gerrit.getTheme().topMenuColor;
@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;
@eval changeTableOutdatedColor com.google.gerrit.client.Gerrit.getTheme().changeTableOutdatedColor;
@eval tableOddRowColor com.google.gerrit.client.Gerrit.getTheme().tableOddRowColor;
@eval tableEvenRowColor com.google.gerrit.client.Gerrit.getTheme().tableEvenRowColor;

@sprite .greenCheckClass {
  gwt-image: "greenCheck";
}

/** Override various GWT defaults */
.gerritTopMenu {
  font-size: 9pt;
  padding-left: 5px;
  padding-right: 5px;
  background: transparent;
}

body, table td, select {
  font-family: norm-font;
}

.gerritBody {
  font-size: small;
  padding-left: 5px;
  padding-right: 5px;
}

a,
a:visited {
  color: #0654ac;
  text-decoration: none;
}

a:hover {
  color: #0654ac;
  text-decoration: underline;
}

#gerrit_btmmenu {
  clear: both;
  color: #a0adcc;
  text-align: right;
  padding-right: 10px;
}

.version a,
.version a:visited,
.version a:hover {
  color: #2a5db0;
}


/** Widgets **/
.gwt-Button {
  color: black;
}

.hyperlink {
  text-decoration: underline;
}

.accountLinkPanel {
  display: inline;
}

.accountLinkPanel img {
  margin-right: 0.2em;
  position: relative;
  top: 2px;
}

.accountLinkPanel a {
  position: relative;
  top: -1px;
}

.accountName {
  white-space: nowrap;
}

.inputFieldTypeHint {
  color: grey;
}

.smallHeading {
  margin-top: 5px;
  font-weight: bold;
}

.blockHeader {
  font-size: small;
  font-weight: bold;
  background: trimColor;
  padding: 0.2em 0.2em 0.2em 0.5em;
}

.link {
  cursor: pointer;
}

/** MenuScreen **/
.menuScreenMenuBar {
  background: topMenuColor;
  padding-top: 0.5em;
  padding-bottom: 10em;
  padding-left: 0.5em;
  padding-right: 0.5em;
  border-right: 1px solid black;
  margin-right: 0.5em;
}

.menuScreenMenuBar .menuItem {
  white-space: nowrap;
  display: block;
  border-right: none;
  padding: 0.2em;
}

.menuScreenMenuBar .menuItem.activeRow {
  background: selectionColor;
}

.menuItem.activeRow {
  background: selectionColor;
}

/** CommentPanel **/
.commentPanelBorder {
  border-top: 1px solid lightgray;
  border-left: 1px solid lightgray;
  border-right: 1px solid lightgray;
  border-top-left-radius: 8px;
  border-top-right-radius: 8px;
  border-bottom-left-radius: 0px;
  border-bottom-right-radius: 0px;
}
.commentPanelBorder.commentPanelLast {
  border-bottom: 1px solid lightgray;
  border-bottom-left-radius: 8px;
  border-bottom-right-radius: 8px;
}

@if user.agent safari {
  .commentPanelBorder {
    \-webkit-border-top-left-radius: 8px;
    \-webkit-border-top-right-radius: 8px;
    \-webkit-border-bottom-left-radius: 0px;
    \-webkit-border-bottom-right-radius: 0px;
  }
  .commentPanelBorder.commentPanelLast {
    \-webkit-border-bottom-left-radius: 8px;
    \-webkit-border-bottom-right-radius: 8px;
  }
}

@if user.agent gecko1_8 {
  .commentPanelBorder {
    \-moz-border-radius-topleft: 8px;
    \-moz-border-radius-topright: 8px;
    \-moz-border-radius-bottomleft: 0;
    \-moz-border-radius-bottomright: 0;
  }
  .commentPanelBorder.commentPanelLast {
    \-moz-border-radius-bottomleft: 8px;
    \-moz-border-radius-bottomright: 8px;
  }
}

.commentPanelHeader {
  cursor: pointer;
  width: 100%;
}
.commentPanelSummary {
  color: #777777;
  white-space: nowrap;
  overflow: hidden;
}
.commentPanelAuthorCell {
  font-weight: bold;
  white-space: nowrap;
}
.commentPanelSummaryCell {
  width: 100%;
}
.commentPanelDateCell {
  white-space: nowrap;
}
.commentPanelContent {
  padding-bottom: 1px;
}
.commentPanelMessage {
  font-size: small;
  padding-left: 0.5em;
  padding-right: 0.5em;
}
.commentPanelMenuBar {
  float: right;
}
.commentPanelMessage p {
  margin-top: 0px;
  margin-bottom: 0px;
  padding-top: 0.5em;
  padding-bottom: 0.5em;
}
.commentPanelButtons {
  margin-left: 0.5em;
}
.commentPanelButtons .gwt-Button {
  margin-right: 2em;
  font-size: 7pt;
  padding: 1px;
}

.commentEditorPanel textarea {
  margin-left: 0.5em;
  font-size: small;
  font-family: norm-font;
}


/** Menu **/
.linkMenuBar {
  font-size: 9pt;
  display: inline;
  white-space: nowrap;
  padding-left: 6px;
}
.menuItem {
  padding-left: 5px;
  padding-right: 5px;
}
.linkMenuItemNotLast {
  border-right: 1px solid black;
}

.topmenu {
  width: 100%;
}
.topmenuTDmenu {
  vertical-align: top;
}
.topmenuTDglue {
  width: 100%;
}

.topmenuMenuLeft {
  width: 300px;
  font-size: 9pt;
  padding-top: 5px;
  padding-left: 5px;
  padding-right: 5px;
  background: none;
  position: relative;
  top: 0;
}
.topmenuMenuLeft tbody tr td table {
  border: 0;
}
.topmenuMenuLeft tbody tr td table.gwt-TabBar {
  border-bottom: 1px solid #DDD;
}
.topmenuMenuLeft .gwt-TextBox {
  width: 250px;
}
.topmenuMenuLeft .gwt-Button {
  padding: 3px 6px;
}
.topmenuMenuLeft .gwt-TabBarFirst {
  display: none;
}
.topmenuMenuLeft .gwt-TabBarItem {
  margin: 0px;
  background: transparent;
  padding-top: 0px;
  padding-bottom: 1px;
  padding-left: 1em;
  padding-right: 1em;
}
.topmenuMenuLeft .gwt-TabBarRest {
  background: transparent;
  padding-top: 0px;
}
.topmenuMenuLeft .gwt-TabPanelBottom {
  background: transparent;
  border-top: none;
  border-left: none;
  border-right: none;
  border-bottom: none;
  padding: 1px;
}
.topmenuMenuLeft .menuItem {
  padding-left: 1em;
  padding-right: 1em;
  border-right: none;
}

.topmenuMenuRight {
  float: right;
  text-align: right;
}
.menuBarUserName {
  padding-left: 5px;
  padding-right: 5px;
  white-space: nowrap;
}
.menuBarUserNameAvatar {
  vertical-align: middle;
}
.menuBarUserNameFocusPanel {
  display: inline;
}
.menuBarUserNamePanel {
  display: inline;
  cursor: pointer;
  font-weight: bold;
}
.userInfoPopup {
  border: 1px solid black;
  background: white;
  box-shadow: 3px 3px 5px #888;
  z-index: 200;
}
.searchPanel {
  white-space: nowrap;
  display: inline;
}
.searchPanel .gwt-TextBox {
  font-size: 9pt;
}
.searchPanel .gwt-Button {
  font-size: 9pt;
  margin-left: 2px;
  padding: 3px 6px;
}
.suggestBoxPopup {
  z-index: 200;
}

/** RPC Status **/
.rpcStatus {
  position: fixed;
  top: 6px;
  left: 50%;
  padding-top: 4px;
  padding-bottom: 4px;
  padding-left: 10px;
  padding-right: 10px;
  text-align: center;
  font-weight: bold;
  background: #FFF1A8;
  z-index: 200;
}


/** Error Dialog **/
.errorDialog {
  background: none;
  border: none;
  padding: 10px;
  width: 600px;
  color: backgroundColor;
  font-size: 15px;
  font-family: verdana;
  z-index: 200;
}
.errorDialogGlass {
  opacity: 0.75;
  z-index: 200;
}
@if user.agent safari {
  .errorDialogGlass {
    opacity: 0.80;
  }
}
@if user.agent ie6 ie8 {
  /* IE just doesn't do opacity the way we want, make our dialog
   * stand out in a way that it can't be missed against the page
   */
  .errorDialog {
    color: black;
    background: darkgray;
    border: 10px groove lightgrey;
  }
}
.errorDialogTitle {
  font-size: 30px;
  font-weight: bold;
  margin-bottom: 15px;
}
.errorDialogErrorType {
  font-weight: bold;
  white-space: nowrap;
  margin-bottom: 15px;
}
.errorDialogButtons {
  width: 100%;
  margin-top: 15px;
}
.errorDialogText {
  font-size: 15px;
  font-family: verdana;
}
.errorDialog a,
.errorDialog a:visited,
.errorDialog a:hover {
  color: white;
  font-weight: bold;
  font-size: 15px;
  font-family: verdana;
}
.loadingPluginsDialog {
  background: #fff;
  color: #000;
  width: auto;
}


/** Screen **/
.screen {
}

.screenHeader {
  white-space: nowrap;
  font-size: 16pt;
  margin: 3px 0 8px;
  text-overflow: ellipsis;
  overflow: hidden;
}

.screenNoHeader {
  margin-top: 5px;
}

/** ChangeTable **/
.changeTable {
  border-collapse: separate;
  border-spacing: 0;
}

.changeTable tr:nth-child\(even\) {
  background: tableEvenRowColor;
}

.changeTable tr:nth-child\(odd\) {
  background: tableOddRowColor;
}

.changeTable .outdated {
  background: changeTableOutdatedColor !important;
}

.changeTable .iconCell {
  width: 1px;
  padding: 0px;
  vertical-align: middle;
  border-bottom: 1px solid trimColor;
}

.changeTable .changeTypeCell {
  width: 1px;
  padding-left: 5px;
  padding-right: 5px;
  border-right: 1px solid trimColor;
  border-bottom: 1px solid trimColor;
  vertical-align: top;
}

.changeTable .commentCell {
  text-align: right;
  font-weight: bold;
  white-space: nowrap;
}
.changeTable .commentCell span.drafts {
  color: #ff5555;
}

.changeTable .patchCellReverseDiff {
  color: red;
}

.changeTable .patchSizeCell {
  text-align: right;
  white-space: nowrap;
}
.changeTable td.noborder {
  border: none;
}

.changeTable .filePathCell {
  white-space: nowrap;
}

.changeTable .sourceFilePath {
  font-style: italic;
  font-size: 9pt;
}

.changeTable .diffLinkCell {
  white-space: nowrap;
}

.changeTable .leftMostCell {
  border-left: 1px solid trimColor;
}

.changeTable .topMostCell {
  border-top: 1px solid trimColor;
}

.changeTable .dataCell {
  padding-left: 5px;
  padding-right: 5px;
  border-right: 1px solid trimColor;
  border-bottom: 1px solid trimColor;
  vertical-align: middle;
  height: 20px;
}

.changeTable a.gwt-InlineHyperlink,
.changeTable a.gwt-Anchor {
  color: #222 !important;
}

.changeTable .changeSize {
  height: 10px;
  display: inline-block;
  opacity: 0.6;
}

.accountDashboard.changeTable tr {
  color: #444444;
}
.accountDashboard.changeTable tr a {
  color: #444444;
  text-decoration: none;
}
.accountDashboard.changeTable .needsReview,
.accountDashboard.changeTable .needsReview a {
  font-weight: bold;
  color: textColor;
}

.changeTable .activeRow,
.accountDashboard.changeTable .activeRow,
.accountDashboard.changeTable .activeRow a {
  background: selectionColor !important;
}

.changeTable .cSIZE {
  width: 70px;
  text-align: right;
}

.changeTable .cSUBJECT div {
  text-overflow: ellipsis;
  overflow: hidden;
  white-space: nowrap;
}

.changeTable .cOWNER,
.changeTable .cSTATUS {
  white-space: nowrap;
}

.changeTable .cLastUpdate {
  white-space: nowrap;
  text-align: right;
  width: 1em;
}

.changeTable .groupName {
  white-space: nowrap;
}

.changeTable .cAPPROVAL {
  width: 0.5em;
  text-align: center;
}
.changeTable .dataCell.negscore {
  color: red;
}
.changeTable .dataCell.posscore {
  color: #08a400;
}
.changeTable .dataCell.singleLine {
  white-space: nowrap;
}
.changeTable .dataCell.labelNotApplicable {
 background: #F5F5F5;
}
.changeTable .iconHeader {
  border-top: 1px solid backgroundColor;
  border-bottom: 1px solid backgroundColor;
  background-color: trimColor;
}

.changeTable .dataHeader {
  border: 1px solid backgroundColor;
  padding: 2px 6px 1px;
  background-color: trimColor;
  font-style: italic;
  white-space: nowrap;
  color: textColor;
}

.changeTable .sectionHeader {
  border-top: 8px solid backgroundColor;
  padding: 2px 6px 1px;
  background-color: trimColor;
  white-space: nowrap;
  font-weight: bold;
  color: textColor;
}

.changeTable .emptySection {
  border-left: 1px solid trimColor;
  border-right: 1px solid trimColor;
  border-bottom: 1px solid trimColor;
  font-style: italic;
  padding-left: 25px;
}

.changeTablePrevNextLinks {
  float: right;
  padding-right: 5px;
}
.changeTablePrevNextLinks td {
  width: 5em;
  text-align: right;
}
.changeTablePrevNextLinks .gwt-Hyperlink {
  font-size: 9pt;
  color: #2a5db0;
}


/** PatchScreen **/
.patchScreenDisplayControls .gwt-CheckBox {
  margin-right: 1em;
}

.reviewedPanelBottom {
  float: right;
  font-size: small;
}


/** PatchContentTable **/
.patchContentTable {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  background: white;
  color: black;
}
.patchContentTable td {
  padding-top: 0;
  padding-bottom: 0;
  font-size: 9pt;
  font-family: mono-font;
}

.patchContentTable .iconCell {
  width: 1px;
  padding: 0px;
  vertical-align: middle;
}

.patchContentTable .diffText {
  white-space: pre;
  padding-left: 0.2em;
  border-left: thin solid #b0bdcc;
}

.patchContentTable .diffTextForBinaryInSideBySide {
 width: 50%;
}

.patchContentTable .diffTextFileHeader {
  color: grey;
  font-weight: bold;
}
.patchContentTable .diffTextNoLF {
  color: grey;
  font-weight: bold;
}
.patchContentTable .diffTextHunkHeader {
  color: blue;
}
.patchContentTable .diffTextDELETE {
  color: #a00000;
}
.patchContentTable .diffTextCONTEXT {
  color: grey;
}
.patchContentTable .diffTextINSERT {
  color: #006000;
}

.patchContentTable tr.commentHolder {
  background: #E5ECF9;
}
.patchContentTable tr.commentHolder .iconCell {
  background: white;
}
.patchContentTable tr.commentHolder .iconCellOfFileCommentRow {
  background: trimColor;
}
.patchContentTable td.commentHolder {
  padding-left: 0;
  padding-right: 0;
  border-top: 1px solid black;
  border-right: 1px solid black;
}
.patchContentTable td.commentHolderLeftmost {
  border-left: 1px solid black;
}
.patchContentTable td.commentHolder.commentPanelLast {
  border-bottom: 1px solid black;
}
.patchContentTable .commentPanel {
  font-family: norm-font;
}
.patchContentTable .commentPanel td {
  font-family: norm-font;
}
.patchContentTable .commentPanelMessage {
  padding-left: 1px;
  padding-right: 1px;
  white-space: normal;
}
.patchContentTable .commentPanelButtons,
.patchContentTable .commentPanel textarea {
  margin-left: 1px;
}

.lineNumber {
  padding-left: 0.2em;
  white-space: pre;
  width: 1.5em;
  text-align: center;
  padding-right: 0.2em;
  background: white;
  border-bottom: 1px solid white;
}
.lineNumber.rightmost {
  border-left: thin solid #b0bdcc;
}
.lineNumber.rightBorder {
  border-right: thin solid #b0bdcc;
}
.lineNumber a {
  color: #888;
  text-decoration: none;
}
.patchContentTable td.fileColumnHeader {
  background: trimColor;
  font-family: norm-font;
  font-weight: bold;
  text-align: center;
}
.patchContentTable td.fileColumnHeader.unifiedTableHeader {
  text-align: left;
}
.lineNumber.fileColumnHeader {
  border-bottom: 1px solid trimColor;
}
.noLineLineNumber {
  font-family: mono-font;
  width: 3.5em;
  padding-left: 0.2em;
  padding-right: 0.2em;
  background: white;
  border-bottom: 1px solid white;
}

.fileLine {
  padding-left: 0;
  padding-right: 0;
  white-space: pre;
  border-left: thin solid #b0bdcc;
}
.fileLineNone {
  background: #eeeeee;
  border-bottom: 1px solid #eeeeee;
}
.fileLineMode {
  font-weight: bold;
}
.fileLineDELETE,
.fileLineDELETE .wdc {
  background: #ffeeee;
  border-bottom: 1px solid #ffeeee;
}
.fileLineCONTEXT {
  background: white;
  border-bottom: 1px solid white;
}
.fileLineINSERT,
.fileLineINSERT .wdc {
  background: #ddffdd;
  border-bottom: 1px solid #ddffdd;
}
.patchContentTable .wdd {
  border-bottom: 1px solid #FAA;
}
.patchContentTable .wdi {
  border-bottom: 1px solid #9F9;
}

.patchContentTable .skipLine .iconCell,
.patchContentTable .skipLine {
  font-family: norm-font;
  text-align: center;
  font-style: italic;
  background: #def;
  color: grey;
}
.patchContentTable .skipLine div {
  display: inline;
}
.patchContentTable a.skipLine {
  color: grey;
  text-decoration: none;
}
.patchContentTable a:hover.skipLine {
  background: white;
  color: #00A;
  text-decoration: underline;
}

.patchContentTable td.cellsNextToFileComment {
  background: trimColor;
  border-top: trimColor;
  border-bottom: trimColor;
}
.patchContentTable .activeRow .iconCell,
.patchContentTable .activeRow .lineNumber {
  background: selectionColor;
}
.patchContentTable .activeRow .iconCell,
.patchContentTable .activeRow .lineNumber,
.patchContentTable .activeRow .fileLine,
.patchContentTable .activeRow .diffText,
.patchContentTable .activeRow td.commentHolder,
.patchContentTable .activeRow .wdc,
.patchContentTable .activeRow .wdd,
.patchContentTable .activeRow .wdi,
.patchContentTable .activeRow .iconCellOfFileCommentRow,
.patchContentTable .activeRow td.commentHolder.commentPanelLast  {
  border-bottom: 1px solid blue;
}

.patchContentTable .fileCommentBorder .iconCellOfFileCommentRow,
.patchContentTable .fileCommentBorder .lineNumber,
.patchContentTable .fileCommentBorder .diffText {
  height: 20px;
  background: trimColor;
  border-bottom: 1px solid trimColor;
}

/** Change **/
.changeScreenStarIcon {
  margin-right: 5px;
}

.changeScreen .gwt-DisclosurePanel .header td {
  font-weight: bold;
  white-space: nowrap;
}

.changeScreen .gwt-DisclosurePanel .complexHeader {
  white-space: nowrap;
}
.changeScreen .gwt-DisclosurePanel .complexHeader span {
  white-space: nowrap;
}

.patchSetRevision {
  padding-left: 20px;
  font-size: 8pt;
}

.patchSetLink {
  padding-left: 0.5em;
  font-size: 8pt;
}

.changeScreen .gwt-DisclosurePanel .content {
  margin-bottom: 10px;
}

.gwt-DisclosurePanel .content {
  margin-left: 10px;
}

.changeScreenDescription,
.changeScreenDescription textarea {
  white-space: pre;
  font-family: mono-font;
  font-size: 9pt;
}
.changeScreenDescription p {
  margin-top: 0px;
  padding-top: 0.5em;
}

.changeComments {
  padding-top: 1em;
  width: 60em;
}

.infoTable {
  border-collapse: collapse;
  border-spacing: 0;
}

.infoTable td {
  border-left: 1px solid trimColor;
  border-bottom: 1px solid trimColor;
  padding: 2px 6px 1px;
}

.infoTable td.header {
  background-color: trimColor;
  font-weight: normal;
  padding: 2px 4px 0 6px;
  font-style: italic;
  text-align: left;
  vertical-align: top;
  white-space: nowrap;
}

.rightmost  {
  border-right: 1px solid trimColor;
}

.sideBySideTableBinaryHeader {
  border-left:  thin solid #b0bdcc;
  width: 100%;
  color: grey;
  font-weight: bold;
}

.infoTable td.approvalrole {
  width: 5em;
  border-left: none;
  font-style: italic;
  white-space: nowrap;
}

.infoTable td.approvalscore {
  text-align: center;
}
.infoTable td.notVotable {
  background: #F5F5F5;
}
.infoTable td.negscore {
  color: red;
}
.infoTable td.posscore {
  color: #08a400;
}

.infoTable td.approvalhint {
  white-space: nowrap;
  text-align: left;
  color: #444444;
}

.changeInfoBlock {
  margin-right: 15px;
}

.changeInfoTopicPanel img {
  float: right;
}

.changeInfoTopicPanel a {
  float: left;
}

.avatarInfoPanel {
  margin-right: 10px;
}
.avatarInfoPanel td {
  text-align: center;
}

.infoBlock {
  border-collapse: collapse;
  border-spacing: 0;
}

.infoBlock td {
  padding: 2px 4px 2px 6px;
  border-right: 1px solid trimColor;
  border-bottom: 1px solid trimColor;
  text-align: left;
  white-space: nowrap;
}

.infoBlock td td {
  padding-left: 0px;
  border-right: 0px;
}

.infoBlock td.topmost {
  border-top: 1px solid trimColor;
}

.infoBlock td.header {
  background-color: trimColor;
  font-style: italic;
  text-align: right;
}

.infoBlock td.noborder {
  border-right: none;
}

.infoBlock td.bottomheader {
  border-bottom: 1px solid trimColor;
}

.infoBlock td.closedstate {
  font-weight: bold;
}

.infoBlock td.useridentity {
  white-space: nowrap;
}
.changeInfoBlock td.changeid {
  font-size: x-small;
}


.patchSetInfoBlock {
  margin-bottom: 10px;
}
.patchSetUserIdentity {
  white-space: nowrap;
}
.patchSetUserIdentity .gwt-InlineLabel {
  margin-left: 0.2em;
}

.patchSetActions {
  margin-bottom: 10px;
}
.patchSetActions .gwt-Button {
  margin-right: 30px;
  font-size: 8pt;
}

.selectPatchSetOldVersion {
  font-weight: bold;
  margin-right: 30px;
  margin-top: 5px;
}

.approvalTable {
  margin-top: 1em;
  margin-bottom: 1em;
}
.missingApprovalList {
  margin-top: 5px;
  margin-left: 1em;
  padding-left: 1em;
  margin-bottom: 0px;
}
.missingApproval {
  font-size: small;
  white-space: nowrap;
}
.addReviewer {
  margin-left: 1em;
  margin-top: 5px;
  white-space: nowrap;
}
.removeReviewer {
  padding: 0px;
}
td.removeReviewerCell {
  padding-left: 4em;
  border-left: none;
}

.downloadBox {
  min-width: 580px;
  margin: 5px;
}
.downloadBoxTable {
  border-spacing: 0;
  width: 100%;
}
.downloadBoxTableCommandColumn {
  text-align: left;
  font-weight: normal;
  white-space: nowrap;
  max-height: 18px;
  width: 80px;
  padding-right: 5px;
}
.downloadBoxSpacer {
  margin-left: 5px;
  margin-right: 5px;
}
.downloadBoxScheme {
  float: right;
}
.downloadBoxCopyLabel {
  font-size: smaller;
  font-family: monospace;
}
.downloadBoxCopyLabel span {
  width: 500px;
  white-space: nowrap;
  display: inline-block;
  overflow: hidden;
  text-overflow: ellipsis;
}
.downloadBoxCopyLabel .gwt-TextBox {
  padding: 0;
  margin: 0;
  border: 0;
  max-height: 18px;
  width: 500px;
}
.downloadBoxCopyLabel div {
  float: right;
}
td.downloadLinkListCell {
  padding: 0px;
}
.downloadLinkHeader {
  background: trimColor;
  white-space: nowrap;
  border-bottom: 1px solid black;
}
.downloadLinkHeaderGap {
  margin-left: 5em;
}
.downloadLinkList {
  display: inline;
  white-space: nowrap;
}
.downloadLink {
  color: black;
  text-decoration: none;
  white-space: nowrap;
  background: trimColor;
  border-right: 1px solid black;
  padding-left: 0.5em;
  padding-right: 0.5em;
}
a:hover.downloadLink {
  color: black;
}
.downloadLink_Active {
  background: selectionColor;
}
.downloadLinkCopyLabel {
  white-space: pre;
  font-family: mono-font;
  font-size: 12px;
  margin-left: 0.5em;
  margin-right: 0.5em;
}
.downloadLinkCopyLabel .gwt-TextBox {
  width: 30em;
}

.parentsTable {
  border-style: none;
  border: 1px 1px 1px 0px;
  outline: 0px;
  padding: 0px;
  border-spacing: 0px;
  text-align: left;
  font-family: mono-font;
  font-size: 10px;
}

.parentsTable td.noborder {
  border: none;
}

.parentsTable td.monospace {
  font-family: mono-font;
  font-size: 10px;
  margin: 0px;
  padding-left: 0px;
}

/** UnifiedScreen **/
.unifiedTable {
  width: 100%;
  border: 1px solid #B0BDCC;
  display: table;
}

/** SideBySideScreen **/
.sideBySideScreenSideBySideTable {
  width: 100%;
  border: 1px solid #B0BDCC;
  display: table;
}

.sideBySideScreenSideBySideTable .fileLine {
  width: 50%;
}

.sideBySideScreenLinkTable {
  width: 100%;
}
.sideBySideScreenLinkTable td {
  width: 33%;
}

.patchNoDifference {
  margin-top: 1em;
  margin-bottom: 2em;
  margin-left: 1em;
  margin-right: 5em;
  font-weight: bold;
  font-size: medium;
  font-family: norm-font;
}

/** Patch History Table **/
.patchHistoryTable {
  width: auto;
  margin-bottom: 10px;
}

.patchHistoryTable .dataCell {
  white-space: nowrap;
}

.patchHistoryTablePatchSetHeader {
  text-align: right;
}


/** AccountSettings  **/
.usernameField {
  white-space: nowrap;
}
.accountUsername {
  font-family: mono-font;
  font-size: small;
}
.accountPassword {
  font-family: mono-font;
  font-size: small;
}
.sshKeyPanelEncodedKey {
  white-space: nowrap;
  text-overflow: ellipsis;
  overflow: hidden;
  font-family: mono-font;
  font-size: small;
}
.sshKeyPanelInvalid {
  white-space: nowrap;
  color: red;
  font-weight: bold;
}
.identityUntrustedExternalId {
  white-space: nowrap;
  color: red;
  font-weight: bold;
}

.accountInfoBlock {
  margin-bottom: 10px;
}
.accountInfoBlock .gwt-Button {
  margin-left: 10px;
}
.accountContactPrivacyDetails {
  margin-left: 10px;
  margin-top: 5px;
  margin-bottom: 5px;
  width: 40em;
}
.accountContactOnFile {
  margin-left: 10px;
  margin-top: 5px;
  margin-bottom: 5px;
  font-weight: bold;
}

.addWatchPanel {
  margin-top: 10px;
  padding: 5px 5px 5px 5px;
}
.watchedProjectFilter {
  margin-left: 1em;
  color: grey;
}

.addBranch {
  margin-top: 10px;
  background-color: trimColor;
  padding: 5px 5px 5px 5px;
}

.addSshKeyPanel {
  margin-top: 10px;
  background-color: trimColor;
  padding: 5px 5px 5px 5px;
}

.addSshKeyPanel ol {
  margin-top: 0px;
  margin-bottom: 5px;
}

.addSshKeyPanel td {
  width: 100%;
}

.createGroupLink {
  margin-bottom: 10px;
}

.createProjectPanel {
  margin-bottom: 10px;
  background-color: trimColor;
  padding: 5px 5px 5px 5px;
}

.sshHostKeyPanel {
  margin-top: 10px;
  border: 1px solid trimColor;
  padding: 5px 5px 5px 5px;
}
.sshHostKeyPanelHeading {
  white-space: nowrap;
  margin-top: 5px;
  margin-left: 1em;
}
.sshHostKeyPanelFingerprintData {
  margin-left: 2em;
  white-space: nowrap;
  font-family: mono-font;
  font-size: small;
}
.sshHostKeyPanelKnownHostEntry {
  margin-left: 2em;
  white-space: nowrap;
  font-family: mono-font;
  font-size: small;
  width: 80em;
}

.contributorAgreementButton {
  font-weight: bold;
}

.contributorAgreementShortDescription {
  margin-left: 20px;
  margin-right: 20px;
  margin-bottom: 10px;
  padding: 5px 5px 5px 5px;
  border: 1px solid #b0bdcc;
}

.contributorAgreementAlreadySubmitted {
  margin-left: 20px;
  margin-right: 20px;
  padding: 5px 5px 5px 5px;
  color: red;
}

.contributorAgreementLegal {
  margin-left: 20px;
  margin-right: 20px;
  padding: 5px 5px 5px 5px;
  border: 1px solid #b0bdcc;
}

.registerScreenSection {
  margin-top: 2em;
}
.registerScreenExplain {
  margin-left: 10px;
  margin-top: 5px;
  margin-bottom: 5px;
  width: 45em;
}
.registerScreenNextLinks {
  margin-top: 2em;
}
.registerScreenNextLinks .gwt-InlineHyperlink {
  margin-left: 2em;
  white-space: nowrap;
}
.registerScreenSection .changeTable {
  width: 45em;
}
.registerScreenSection .addSshKeyPanel {
  background: none;
}
.registerScreenSection .sshHostKeyPanel {
  border: none;
}
.registerScreenSection .sshHostKeyPanel .sshHostKeyPanelKnownHostEntry {
  width: 45em;
}

.projectAdminLabelRangeLine {
  white-space: nowrap;
}
.projectAdminLabelValue {
  font-family: mono-font;
  font-size: small;
}
.projectActions {
  margin-bottom: 10px;
}

/** PublishCommentsScreen **/
.publishCommentsScreen .smallHeading {
  font-size: small;
  font-weight: bold;
  white-space: nowrap;
}
.publishCommentsScreen .labelList {
  margin-bottom: 10px;
  margin-left: 10px;
  background: trimColor;
  width: 25em;
  white-space: nowrap;
  padding-top: 2px;
  padding-bottom: 2px;
}
.publishCommentsScreen .coverMessage {
  margin-left: 10px;
  padding: 5px 5px 5px 5px;
}
.publishCommentsScreen .coverMessage textarea {
  font-size: small;
}
.publishCommentsScreen .labelList .gwt-RadioButton {
  font-size: smaller;
}
.publishCommentsScreen .patchComments {
  margin-left: 1em;
  margin-right: 0.5em;
  margin-bottom: 0.5em;
}
.publishCommentsScreen .gwt-Hyperlink {
  white-space: nowrap;
  font-size: small;
}
.publishCommentsScreen .lineHeader {
  white-space: nowrap;
  font-family: mono-font;
  font-size: small;
  font-style: italic;
  padding-left: 3px;
}
.publishCommentsScreen .commentPanel {
  border: none;
  width: 35em;
}
.publishCommentsScreen .commentPanelDateCell {
  display: none;
}


/** CommentedActionDialog **/
.commentedActionDialog .gwt-DisclosurePanel .header td {
  font-weight: bold;
  white-space: nowrap;
}
.commentedActionDialog .smallHeading {
  font-size: small;
  font-weight: bold;
  white-space: nowrap;
}
.commentedActionDialog .commentedActionMessage {
  margin-left: 10px;
  background: trimColor;
  padding: 5px 5px 5px 5px;
}
.commentedActionDialog .commentedActionMessage textarea {
  font-size: small;
}
.commentedActionDialog .gwt-Hyperlink {
  white-space: nowrap;
  font-size: small;
}

/** PatchBrowserPopup **/
.patchBrowserPopup {
  opacity: 0.90;
}
.patchBrowserPopupBody {
  background: backgroundColor;
  margin: 4px;
  opacity: 0.90;
}


/** AccountGroupInfoScreen **/
.groupUUIDPanel {
  margin-bottom: 10px;
}
.groupDescriptionPanel {
  margin-bottom: 3px;
}
.groupExternalNameFilterTextBox {
  margin-right: 2px;
  margin-bottom: 2px;
}
.groupNamePanel {
  margin-bottom: 3px;
}
.groupNameTextBox {
  margin-bottom: 2px;
}
.groupOptionsPanel {
  margin-bottom: 5px;
}
.groupOwnerPanel {
  margin-bottom: 3px;
}
.groupOwnerTextBox {
  margin-bottom: 2px;
}
.groupTypeSelectListBox {
  margin-bottom: 2px;
}


/** AccountGroupMembersScreen **/
.groupMembersTable {
  margin-bottom: 2px;
}
.groupIncludesTable {
  margin-bottom: 2px;
}


/** AddMemberBox **/
.addMemberTextBox {
  margin-right: 2px;
  margin-bottom: 2px;
}


/** ProjectBranchesScreen **/
.specialBranchIconCell {
  background: #ECECEC;
  border-bottom: 1px solid #FFFFFF;
  border-top: 1px solid #FFFFFF;
}
.specialBranchDataCell {
  background: #ECECEC;
  border: 1px solid white;
  font-style: italic;
  padding: 2px 6px 1px;
}

.editHeadButton {
  float: right;
  cursor: pointer;
}

/** PluginListScreen **/
.pluginsTable {
}

/** ProjectListScreen **/
.projectFilterPanel {
  margin-bottom: 10px;
}
.projectFilterPanel input {
  width: 200px;
}
.projectFilterLabel {
  margin-right: 5px;
}
.projectNameColumn {
  min-width: 300px;
}

/** ProjectSettings */
.maxObjectSizeLimitEffectiveLabel {
  padding-top: 5px;
  padding-left: 5px;
}

.pluginProjectConfigInheritedValue {
  padding-top: 5px;
  padding-left: 5px;
}
