// 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 greenCheckClass();
  String abandonChangeDialog();
  String abandonMessage();
  String revertChangeDialog();
  String revertMessage();
  String accountContactOnFile();
  String accountContactPrivacyDetails();
  String accountDashboard();
  String accountInfoBlock();
  String accountName();
  String accountUsername();
  String accountPassword();
  String activeRow();
  String addReviewer();
  String removeReviewer();
  String removeReviewerCell();
  String addSshKeyPanel();
  String addWatchPanel();
  String approvalCategoryList();
  String approvalTable();
  String approvalhint();
  String approvalrole();
  String approvalscore();
  String blockHeader();
  String bottomheader();
  String cAPPROVAL();
  String cID();
  String cLastUpdate();
  String cPROJECT();
  String cSUBJECT();
  String changeComments();
  String changeInfoBlock();
  String changeScreen();
  String changeScreenDescription();
  String changeScreenStarIcon();
  String changeTable();
  String changeTablePrevNextLinks();
  String changeTypeCell();
  String changeid();
  String closedstate();
  String commentCell();
  String commentEditorPanel();
  String commentHolder();
  String commentPanel();
  String commentPanelBorder();
  String commentPanelAuthorCell();
  String commentPanelButtons();
  String commentPanelContent();
  String commentPanelDateCell();
  String commentPanelHeader();
  String commentPanelLast();
  String commentPanelMessage();
  String commentPanelMenuBar();
  String commentPanelSummary();
  String commentPanelSummaryCell();
  String complexHeader();
  String content();
  String contributorAgreementAlreadySubmitted();
  String contributorAgreementButton();
  String contributorAgreementLegal();
  String contributorAgreementShortDescription();
  String coverMessage();
  String dataCell();
  String dataHeader();
  String diffLinkCell();
  String diffText();
  String diffTextCONTEXT();
  String diffTextDELETE();
  String diffTextFileHeader();
  String diffTextHunkHeader();
  String diffTextINSERT();
  String diffTextNoLF();
  String downloadLink();
  String downloadLink_Active();
  String downloadLinkListCell();
  String downloadLinkCopyLabel();
  String downloadLinkHeader();
  String downloadLinkHeaderGap();
  String downloadLinkList();
  String drafts();
  String emptySection();
  String errorDialog();
  String errorDialogGlass();
  String errorDialogTitle();
  String errorDialogButtons();
  String errorDialogErrorType();
  String fileColumnHeader();
  String fileLine();
  String fileLineCONTEXT();
  String fileLineDELETE();
  String fileLineINSERT();
  String fileLineMode();
  String fileLineNone();
  String filePathCell();
  String gerritTopMenu();
  String gerritBody();
  String groupName();
  String header();
  String hyperlink();
  String iconCell();
  String iconHeader();
  String identityUntrustedExternalId();
  String infoBlock();
  String infoTable();
  String inputFieldTypeHint();
  String keyhelp();
  String leftMostCell();
  String lineHeader();
  String lineNumber();
  String linkMenuBar();
  String linkMenuItemNotLast();
  String menuBarUserName();
  String menuItem();
  String menuScreenMenuBar();
  String missingApproval();
  String missingApprovalList();
  String monospace();
  String needsReview();
  String negscore();
  String noLineLineNumber();
  String noborder();
  String parentsTable();
  String patchBrowserPopup();
  String patchBrowserPopupBody();
  String patchComments();
  String patchContentTable();
  String patchHistoryTable();
  String patchNoDifference();
  String patchScreenDisplayControls();
  String patchSetActions();
  String patchSetInfoBlock();
  String patchSetLink();
  String patchSetRevision();
  String patchSetUserIdentity();
  String patchSizeCell();
  String permalink();
  String posscore();
  String projectAdminApprovalCategoryRangeLine();
  String projectAdminApprovalCategoryValue();
  String publishCommentsScreen();
  String registerScreenExplain();
  String registerScreenNextLinks();
  String registerScreenSection();
  String rightmost();
  String rpcStatus();
  String rpcStatusLoading();
  String rpcStatusPanel();
  String screen();
  String screenHeader();
  String searchPanel();
  String sectionHeader();
  String sideBySideScreenLinkTable();
  String sideBySideScreenSideBySideTable();
  String singleLine();
  String skipLine();
  String smallHeading();
  String sourceFilePath();
  String sshHostKeyPanel();
  String sshHostKeyPanelFingerprintData();
  String sshHostKeyPanelHeading();
  String sshHostKeyPanelKnownHostEntry();
  String sshKeyPanelEncodedKey();
  String sshKeyPanelInvalid();
  String topmenu();
  String topmenuMenuLeft();
  String topmenuMenuRight();
  String topmenuTDglue();
  String topmenuTDmenu();
  String topmost();
  String useridentity();
  String usernameField();
  String version();
  String watchedProjectFilter();
  String selectPatchSetOldVersion();
  String patchCellReverseDiff();
}
