/*
 * Copyright 2010 Google Inc.
 * 
 * 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.
 */
@def selectionBorderWidth 2px;
.cellTableWidget {
  
}

.cellTableFirstColumn {
  
}

.cellTableLastColumn {
  
}

.cellTableFooter {
  border-top: 2px solid #6f7277;
  padding: 3px 15px;
  text-align: left;
  color: #4b4a4a;
  text-shadow: #ddf 1px 1px 0;
}

.cellTableHeader {
  border-bottom: 2px solid #6f7277;
  padding: 3px 15px;
  text-align: left;
  color: #4b4a4a;
  text-shadow: #ddf 1px 1px 0;
}

.cellTableCell {
  padding: 2px 15px;
}

.cellTableFirstColumnFooter {
  
}

.cellTableFirstColumnHeader {
  
}

.cellTableLastColumnFooter {
  
}

.cellTableLastColumnHeader {
  
}

.cellTableEvenRow {
  background: #ffffff;
}

.cellTableEvenRowCell {
  border: selectionBorderWidth solid #ffffff;
}

.cellTableOddRow {
  background: #f3f7fb;
}

.cellTableOddRowCell {
  border: selectionBorderWidth solid #f3f7fb;
}

.cellTableHoveredRow {
  background: #eee;
}

.cellTableHoveredRowCell {
  border: selectionBorderWidth solid #eee;
}

.cellTableKeyboardSelectedRow {
  background: #ffc;
}

.cellTableKeyboardSelectedRowCell {
  border: selectionBorderWidth solid #ffc;
}

.cellTableSelectedRow {
  background: #628cd5;
  color: white;
  height: auto;
  overflow: auto;
}

.cellTableSelectedRowCell {
  border: selectionBorderWidth solid #628cd5;
}

/**
 * The keyboard selected cell is visible over selection.
 */
.cellTableKeyboardSelectedCell {
  border: selectionBorderWidth solid #d7dde8;
}

@sprite .cellTableLoading {
  gwt-image: 'cellTableLoading';
  margin: 30px;
}
