/*

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 #index .bar-desc
{
  color: #c0c0c0;
  font-weight: normal;
  margin-left: 10px;
  white-space: pre;
}

#content #index .bar-holder
{
  box-shadow: 5px 5px 10px #c0c0c0;
  -moz-box-shadow: 5px 5px 10px #c0c0c0;
  -webkit-box-shadow: 5px 5px 10px #c0c0c0;
  height: 35px;
}

#content #index .bar-holder .bar
{
  height: 100%;
  position: relative;
}

#content #index .bar-holder div .val
{
  border-right: 1px solid #f00;
  display: block;
  padding-right: 5px;
  position: absolute;
  right: 0;
  top: 35px;
  white-space: nowrap;
}

#content #index .bar-holder .bar-max.bar
{
  background-color: #f0f0f0;
}

#content #index .bar-holder .bar-max.val
{
  border-color: #f0f0f0;
  color: #d6d6d6;
}

#content #index .bar-holder .bar-total.bar
{
  background-color: #c0c0c0;
}

#content #index .bar-holder .bar-total.val
{
  border-color: #c0c0c0;
  color: #c0c0c0;
}

#content #index .bar-holder .bar-used.bar
{
  background-color: #969696;
}

#content #index .bar-holder .bar-used.val
{
  border-color: #969696;
  color: #969696;
}

#content #index .bar-holder.bar-lvl-2 .bar-max.val { padding-top: 25px; }
#content #index .bar-holder.bar-lvl-2 .bar-total.val { padding-top: 5px; }
#content #index .bar-holder.bar-lvl-2 { margin-bottom: 45px; }

#content #index .bar-holder.bar-lvl-3 .bar-max.val { padding-top: 45px; }
#content #index .bar-holder.bar-lvl-3 .bar-total.val { padding-top: 25px; }
#content #index .bar-holder.bar-lvl-3 .bar-used.val { padding-top: 5px; }
#content #index .bar-holder.bar-lvl-3 { margin-bottom: 65px; }

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

#content #index .index-left
{
  float: left;
  width: 55%;
}

#content #index .index-right
{
  float: right;
  width: 40%;
}

#content #index .data
{
  padding-bottom: 12px;
  overflow: hidden;
}

#content #index .data:hover
{
  overflow-x: auto;
}

#content #index .data li
{
  padding-top: 3px;
  padding-bottom: 3px;
}

#content #index .data li dt
{
  float: left;
  white-space: nowrap;
  width: 20%;
}

#content #index .data li dd
{
  float: right;
  text-overflow: ellipsis;
  white-space: nowrap;
  width: 80%
}

#content #index .data li dd.odd
{
  color: #999;
}

#content #index .data dt span
{
  background-position: 1px 50%;
  display: block;
  padding-left: 22px;
}

#content #index #instance h2 { background-image: url( ../../img/ico/server.png ); }
#content #index #instance .start_time dt span { background-image: url( ../../img/ico/clock-select.png ); }

#content #index #versions h2 { background-image: url( ../../img/ico/property.png ); }
#content #index #versions .solr span { background-image: url( ../../img/solr-ico.png ); }
#content #index #versions .lucene span { background-image: url( ../../img/lucene-ico.png ); }

#content #index #jvm h2 { background-image: url( ../../img/ico/jar.png ); }
#content #index #jvm .jvm_version dt span { background-image: url( ../../img/ico/jar.png ); }
#content #index #jvm .processors dt span { background-image: url( ../../img/ico/processor.png ); }
#content #index #jvm .command_line_args dt span { background-image: url( ../../img/ico/terminal.png ); }

#content #index #system h2 { background-image: url( ../../img/ico/system-monitor.png ); }

#content #index #system
{
  position: relative;
}

#content #index #system .reload
{
  background-image: url( ../../img/ico/arrow-circle.png );
  background-position: 50% 50%;
  display: block;
  height: 30px;
  position: absolute;
  right: 0;
  top: 0;
  width: 30px;
}

#content #index #system .reload.loader
{
  padding-left: 0;
}

#content #index #system .reload span
{
  display: none;
}

#content #index #system .content p
{
  margin-top: 10px;
  margin-bottom: 5px;
}

#content #index #system .content .no-info
{
  color: #c0c0c0;
  display: none;
  font-style: italic;
}

#content #index #jvm-memory h2 { background-image: url( ../../img/ico/memory.png ); }

#content #index #jvm-memory-bar
{
  margin-top: 20px;
}
