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

.cellTreeEmptyMessage {
  padding-left: 16px;
  font-style: italic;
}

.cellTreeItem {
  padding-top: 4px;
  padding-bottom: 4px;
  cursor: hand;
  cursor: pointer;
}

.cellTreeItemImage {
  
}

.cellTreeItemImageValue {
  
}

.cellTreeItemValue {
  padding-left: 3px;
  padding-right: 3px;
  outline: none;
}

.cellTreeOpenItem {
  
}

.cellTreeTopItem {
  font-weight: bold;
  color: #4b4a4a;
  margin-top: 20px;
  padding: 3px 13px 3px 10px !important;
}

.cellTreeTopItemImage {
  
}

.cellTreeTopItemImageValue {
  border-bottom: 1px solid #6f7277;
  padding-bottom: 1px;
}

.cellTreeKeyboardSelectedItem {
  background-color: #ffc;
  outline: none;
}

@sprite .cellTreeSelectedItem {
  gwt-image: 'cellTreeSelectedBackground';
  background-color: #628cd5;
  color: white;
  height: auto;
  overflow: visible;
}

.cellTreeShowMoreButton {
  padding-left: 16px;
  outline: none;
}
