// 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 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 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 leftmost();
  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();
}
