/*

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.

*/

#content #cloud
{
  position: relative;
}

#content #cloud .loader
{
  background-position: 0 50%;
  padding-left: 21px;
}

#content #cloud #error
{
  background-color: #f00;
  background-image: url( ../../img/ico/construction.png );
  background-position: 10px 12px;
  color: #fff;
  font-weight: bold;
  margin-bottom: 20px;
  padding: 10px;
  padding-left: 35px;
}

#content #cloud #error .msg
{
  font-style: italic;
  font-weight: normal;
  margin-top: 10px;
}

#content #cloud #debug
{
  background-color: #fff;
  box-shadow: 0px 0px 10px #c0c0c0;
  -moz-box-shadow: 0px 0px 10px #c0c0c0;
  -webkit-box-shadow: 0px 0px 10px #c0c0c0;
  padding: 20px;
  position: absolute;
  left: 50px;
  top: 10px;
}

#content #cloud #debug ul
{
  margin-bottom: 5px;
}

#content #cloud #debug ul a
{
  background-position: 4px 50%;
  border-right: 0;
  display: block;
  padding: 2px 4px;
  padding-left: 25px;
}

#content #cloud #debug ul a:hover,
#content #cloud #debug ul a.hover
{
  background-color: #f0f0f0;
}

#content #cloud #debug .clipboard
{
  float: left;
  position: relative;
}

#content #cloud #debug .clipboard a
{
  background-image: url( ../../img/ico/clipboard-paste.png );
  z-index: 98;
}

#content #cloud #debug .clipboard a:hover,
#content #cloud #debug .clipboard a.hover,
#content #cloud #debug .clipboard.copied a
{
  background-image: url( ../../img/ico/clipboard-paste-document-text.png );
}

#content #cloud #debug .close
{
  float: right;
}

#content #cloud #debug .close a
{
  background-image: url( ../../img/ico/cross-0.png );
  padding-left: 21px;
}

#content #cloud #debug .close a:hover
{
  background-image: url( ../../img/ico/cross-1.png );
}

#content #cloud #debug .debug
{
  border: 1px solid #f0f0f0;
  max-height: 350px;
  overflow: auto;
  padding: 5px;
  width: 500px;
}

#content #cloud #debug .debug .loader
{
  background-position: 5px 50%;
  display: block;
  padding: 10px 26px;
}

#content #cloud .content
{
  padding-left: 0;
  padding-right: 0;
}

#content #cloud .content.show
{
  background-image: url( ../../img/div.gif );
  background-repeat: repeat-y;
  background-position: 31% 0;
}

#content #cloud #tree
{
  float: left;
  width: 30%;
}

#content #cloud .show #tree
{
  overflow: hidden;
}

#content #cloud #file-content
{
  float: right;
  position: relative;
  width: 68%;
  min-height: 100px
}

#content #cloud .show #file-content
{
  display: block;
}

#content #cloud #file-content .close
{
  background-image: url( ../../img/ico/cross-0.png );
  background-position: 50% 50%;
  display: block;
  height: 20px;
  position: absolute;
  right: 0;
  top: 0;
  width: 20px;
}

#content #cloud #file-content .close:hover
{
  background-image: url( ../../img/ico/cross-1.png );
}

#content #cloud #file-content #toggle.plus
{
  font-style: italic;
  padding-left: 17px;
  background-image: url( ../../img/ico/toggle-small-expand.png );
}

#content #cloud #file-content #toggle.minus
{
  font-style: italic;
  padding-left: 17px;
  background-image: url( ../../img/ico/toggle-small.png );
}

#content #cloud #file-content #data
{
  border-top: 1px solid #c0c0c0;
  margin-top: 10px;
  padding-top: 10px;
}

#content #cloud #file-content #data pre
{
  display: block;
  max-height: 600px;
  overflow: auto;
}

#content #cloud #file-content #data em
{
  color: #c0c0c0;
}

#content #cloud #file-content #prop
{
}

#content #cloud #file-content li
{
  padding-top: 3px;
  padding-bottom: 3px;
}

#content #cloud #file-content li.odd
{
  background-color: #F8F8F8;
}

#content #cloud #file-content li dt
{
  float: left;
  width: 19%;
}

#content #cloud #file-content li dd
{
  float: right;
  width: 80%;
}

/* tree */

#content #cloud #legend
{
  border: 1px solid #f0f0f0;
  padding: 10px;
  position: absolute;
  right: 0;
  bottom: 0;
}

#content #cloud #legend li
{
  padding-left: 15px;
  position: relative;
}

#content #cloud #legend li svg
{
  position: absolute;
  left: 0;
  top: 2px;
}

#content #graph-content
{
  min-height: 400px;
}

#content #graph-content .node
{
  fill: #333;
}

#content #cloud #legend circle,
#content #graph-content .node circle
{
  fill: #fff;
  stroke: #c0c0c0;
  stroke-width: 1.5px;
}

#content #graph-content .node.lvl-3 text
{
  cursor: pointer;
}

#content #graph-content .node.lvl-3:hover circle
{
  stroke: #000 !important;
}

#content #graph-content .node.lvl-3:hover text
{
  fill: #000 !important;
}

#content #graph-content .link
{
  fill: none;
  stroke: #e0e0e0;
  stroke-width: 1.5px;
}

#content #cloud #legend .gone circle,
#content #graph-content .node.gone circle,
#content #graph-content .link.gone
{
  stroke: #f0f0f0;
}

#content #graph-content .node.gone text
{
  fill: #f0f0f0;
}

#content #cloud #legend ul .gone
{
  color: #e0e0e0;
}

#content #cloud #legend .recovery_failed,
#content #cloud #legend .recovery_failed circle,
#content #graph-content .node.recovery_failed circle
{
  color: #C43C35;
  stroke: #C43C35;
}

#content #graph-content .node.recovery_failed text
{
  fill: #C43C35;
}

#content #cloud #legend .down,
#content #cloud #legend .down circle,
#content #graph-content .node.down circle
{
  color: #c48f00;
  stroke: #c48f00;
}

#content #graph-content .node.down text
{
  fill: #c48f00;
}

#content #cloud #legend .recovering,
#content #cloud #legend .recovering circle,
#content #graph-content .node.recovering circle
{
  color: #d5dd00;
  stroke: #d5dd00;
}

#content #graph-content .node.recovering text
{
  fill: #d5dd00;
}

#content #cloud #legend .active,
#content #cloud #legend .active circle,
#content #graph-content .node.active circle
{
  color: #57A957;
  stroke: #57A957;
}

#content #graph-content .node.active text
{
  fill: #57A957;
}

#content #cloud #legend .leader circle,
#content #graph-content .node.leader circle
{
  fill: #000;
}

#content #cloud #legend .leader circle
{
  stroke: #fff;
}

#content #graph-content .link.lvl-2,
#content #graph-content .link.leader
{
  stroke: #c0c0c0;
}

#content #graph-content .node.lvl-0 circle
{
  stroke: #fff;
}

#content #graph-content .link.lvl-1
{
  stroke: #fff;
}

#cloudGraphPaging
{
  display: inline-block;
  padding-top: 15px;
  padding-bottom: 15px;
}
