/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you 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.
*/
div[angular-treeview] {
  /* prevent user selection */
  -moz-user-select: -moz-none;
  -khtml-user-select: none;
  -webkit-user-select: none;
  -ms-user-select: none;
  user-select: none;

  /* default */
  /*font-family: Tahoma;
  font-size:13px;
  color: #555;*/
  font-size:14px;
  text-decoration: none;
}

div[tree-model] ul {
  margin: 0;
  padding: 0;
  list-style: none;
  border: none;
  overflow: hidden;
}

div[tree-model] li {
  position: relative;
  padding: 0 0 0 20px;
  color:#ffffff
  line-height: 20px;
}

div[tree-model] li>span:hover {
  color:#ffffff;
}

div[tree-model] li .expanded {
  padding: 1px 8px;
 /*background-image: url("http://cfile23.uf.tistory.com/image/205B973A50C13F4B19D9BD");*/
  background-repeat: no-repeat;
}


div[tree-model] li .collapsed {
  padding: 1px 10px;
  /*background-image: url("../img/folder-closed.png");*/
 /*background-image: url("http://cfile23.uf.tistory.com/image/1459193A50C13F4B1B05FB");*/
  background-repeat: no-repeat;
}

div[tree-model] li .normal {
  padding: 1px 10px;
  /*background-image: url("../img/file.png");*/
  /*background-image: url("http://cfile23.uf.tistory.com/image/165B663A50C13F4B196CCA");*/
  background-repeat: no-repeat;
}

div[tree-model] li i, div[tree-model] li span {
  cursor: pointer;
}

div[tree-model] li .selected {
  background-color: #aaddff;
  font-weight: bold;
  /*background-color: #D9F40E;*/
  color:#000000;
  padding: 1px 5px;
}
