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

package com.google.gerrit.client;

import com.google.gwt.resources.client.CssResource;

public interface GerritCss extends CssResource {
  String accountContactOnFile();
  String accountContactPrivacyDetails();
  String accountDashboard();
  String accountInfoBlock();
  String accountLinkPanel();
  String accountName();
  String accountPassword();
  String accountUsername();
  String activeRow();
  String addBranch();
  String addMemberTextBox();
  String addReviewer();
  String addSshKeyPanel();
  String addWatchPanel();
  String approvalTable();
  String approvalhint();
  String approvalrole();
  String approvalscore();
  String avatarInfoPanel();
  String blockHeader();
  String bottomheader();
  String cAPPROVAL();
  String cLastUpdate();
  String cOWNER();
  String cSUBJECT();
  String cellsNextToFileComment();
  String changeComments();
  String changeInfoBlock();
  String changeInfoTopicPanel();
  String changeScreen();
  String changeScreenDescription();
  String changeScreenStarIcon();
  String changeTable();
  String changeTablePrevNextLinks();
  String changeTypeCell();
  String changeid();
  String closedstate();
  String commentCell();
  String commentEditorPanel();
  String commentHolder();
  String commentHolderLeftmost();
  String commentPanel();
  String commentPanelAuthorCell();
  String commentPanelBorder();
  String commentPanelButtons();
  String commentPanelContent();
  String commentPanelDateCell();
  String commentPanelHeader();
  String commentPanelLast();
  String commentPanelMenuBar();
  String commentPanelMessage();
  String commentPanelSummary();
  String commentPanelSummaryCell();
  String commentedActionDialog();
  String commentedActionMessage();
  String complexHeader();
  String content();
  String contributorAgreementAlreadySubmitted();
  String contributorAgreementButton();
  String contributorAgreementLegal();
  String contributorAgreementShortDescription();
  String coverMessage();
  String createGroupLink();
  String createProjectPanel();
  String dataCell();
  String dataHeader();
  String diffLinkCell();
  String diffText();
  String diffTextCONTEXT();
  String diffTextDELETE();
  String diffTextFileHeader();
  String diffTextForBinaryInSideBySide();
  String diffTextHunkHeader();
  String diffTextINSERT();
  String diffTextNoLF();
  String downloadBox();
  String downloadBoxTable();
  String downloadBoxTableCommandColumn();
  String downloadBoxSpacer();
  String downloadBoxScheme();
  String downloadBoxCopyLabel();
  String downloadLink();
  String downloadLinkCopyLabel();
  String downloadLinkHeader();
  String downloadLinkHeaderGap();
  String downloadLinkList();
  String downloadLinkListCell();
  String downloadLink_Active();
  String drafts();
  String emptySection();
  String errorDialog();
  String errorDialogButtons();
  String errorDialogErrorType();
  String errorDialogGlass();
  String errorDialogText();
  String errorDialogTitle();
  String fileColumnHeader();
  String fileCommentBorder();
  String fileLine();
  String fileLineCONTEXT();
  String fileLineDELETE();
  String fileLineINSERT();
  String fileLineMode();
  String fileLineNone();
  String filePathCell();
  String gerritBody();
  String gerritTopMenu();
  String greenCheckClass();
  String groupDescriptionPanel();
  String groupExternalNameFilterTextBox();
  String groupIncludesTable();
  String groupMembersTable();
  String groupName();
  String groupNamePanel();
  String groupNameTextBox();
  String groupOptionsPanel();
  String groupOwnerPanel();
  String groupOwnerTextBox();
  String groupTypeSelectListBox();
  String groupUUIDPanel();
  String header();
  String hyperlink();
  String iconCell();
  String iconCellOfFileCommentRow();
  String iconHeader();
  String identityUntrustedExternalId();
  String infoBlock();
  String infoTable();
  String inputFieldTypeHint();
  String labelList();
  String labelNotApplicable();
  String leftMostCell();
  String lineHeader();
  String lineNumber();
  String link();
  String linkMenuBar();
  String linkMenuItemNotLast();
  String maxObjectSizeLimitPanel();
  String menuBarUserName();
  String menuBarUserNameAvatar();
  String menuBarUserNameFocusPanel();
  String menuBarUserNamePanel();
  String menuItem();
  String menuScreenMenuBar();
  String missingApproval();
  String missingApprovalList();
  String monospace();
  String needsReview();
  String negscore();
  String noLineLineNumber();
  String noborder();
  String notVotable();
  String outdated();
  String parentsTable();
  String patchBrowserPopup();
  String patchBrowserPopupBody();
  String patchCellReverseDiff();
  String patchComments();
  String patchContentTable();
  String patchHistoryTable();
  String patchHistoryTablePatchSetHeader();
  String patchNoDifference();
  String patchScreenDisplayControls();
  String patchSetActions();
  String patchSetInfoBlock();
  String patchSetLink();
  String patchSetRevision();
  String patchSetUserIdentity();
  String patchSizeCell();
  String pluginsTable();
  String posscore();
  String projectActions();
  String projectAdminLabelRangeLine();
  String projectAdminLabelValue();
  String projectFilterLabel();
  String projectFilterPanel();
  String projectNameColumn();
  String publishCommentsScreen();
  String registerScreenExplain();
  String registerScreenNextLinks();
  String registerScreenSection();
  String removeReviewer();
  String removeReviewerCell();
  String reviewedPanelBottom();
  String rightBorder();
  String rightmost();
  String rpcStatus();
  String screen();
  String screenHeader();
  String screenNoHeader();
  String searchPanel();
  String suggestBoxPopup();
  String sectionHeader();
  String selectPatchSetOldVersion();
  String sideBySideScreenLinkTable();
  String sideBySideScreenSideBySideTable();
  String sideBySideTableBinaryHeader();
  String singleLine();
  String skipLine();
  String smallHeading();
  String sourceFilePath();
  String specialBranchDataCell();
  String specialBranchIconCell();
  String sshHostKeyPanel();
  String sshHostKeyPanelFingerprintData();
  String sshHostKeyPanelHeading();
  String sshHostKeyPanelKnownHostEntry();
  String sshKeyPanelEncodedKey();
  String sshKeyPanelInvalid();
  String topMostCell();
  String topmenu();
  String topmenuMenuLeft();
  String topmenuMenuRight();
  String topmenuTDglue();
  String topmenuTDmenu();
  String topmost();
  String unifiedTable();
  String unifiedTableHeader();
  String userInfoPopup();
  String useridentity();
  String usernameField();
  String watchedProjectFilter();
}
