/*
 * 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.
 */
.cellBrowserWidget {
  
}

.cellBrowserColumn {
  
}

.cellBrowserFirstColumn {
  
}

.cellBrowserEvenItem {
  padding: 8px;
  zoom: 1;
}

.cellBrowserOddItem {
  padding: 8px;
  zoom: 1;
}

.cellBrowserKeyboardSelectedItem {
  background: #ffc;
}

@sprite .cellBrowserSelectedItem {
  gwt-image: 'cellBrowserSelectedBackground';
  background-color: #628cd5;
  background-repeat: repeat-x;
  color: white;
  height: auto;
  overflow: hidden;
}

@sprite .cellBrowserOpenItem {
  gwt-image: 'cellBrowserOpenBackground';
  background-color: #7b7b7b;
  background-repeat: repeat-x;
  color: white;
  height: auto;
  overflow: hidden;
}
