// 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 accountContactOnFile();
  String accountContactPrivacyDetails();
  String accountDashboard();
  String accountInfoBlock();
  String accountName();
  String activeRow();
  String addReviewer();
  String removeReviewer();
  String removeReviewerCell();
  String addSshKeyPanel();
  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 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 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 missingApproval();
  String missingApprovalList();
  String needsReview();
  String negscore();
  String noLineLineNumber();
  String noborder();
  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 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 skipLine();
  String smallHeading();
  String sourceFilePath();
  String sshHostKeyPanel();
  String sshHostKeyPanelFingerprintData();
  String sshHostKeyPanelHeading();
  String sshHostKeyPanelKnownHostEntry();
  String sshKeyPanelEncodedKey();
  String sshKeyPanelInvalid();
  String sshPanelUsername();
  String sshPanelPassword();
  String topmenu();
  String topmenuMenuLeft();
  String topmenuMenuRight();
  String topmenuTDglue();
  String topmenuTDmenu();
  String topmost();
  String useridentity();
  String version();
}
