/*

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 #dashboard .block
{
  background-image: none;
  width: 49%;
}

#content #dashboard .fieldlist
{
  float: left;
}

#content #dashboard .fieldlist dt,
#content #dashboard .fieldlist dd
{
  display: block;
  float: left;
}

#content #dashboard .fieldlist dt
{
  clear: left;
  margin-right: 2%;
  text-align: right;
  width: 23%;
}

#content #dashboard .fieldlist dd
{
  width: 74%;
}

#content #dashboard .fieldlist .index_optimized
{
  margin-top: 10px;
}

#content #dashboard .fieldlist .ico
{
  background-image: url( ../../img/ico/slash.png );
  height: 20px;
}

#content #dashboard .fieldlist .ico.ico-1
{
  background-image: url( ../../img/ico/tick.png );
}

#content #dashboard .fieldlist .ico span
{
  display: none;
}

#content #dashboard #statistics .index_optimized.value a
{
  display: none;
}

#content #dashboard #statistics .index_optimized.value.ico-0 a
{
  background-color: #f0f0f0;
  background-image: url( ../../img/ico/hammer-screwdriver.png );
  background-position: 5px 50%;
  border: 1px solid #c0c0c0;
  display: block;
  float: left;
  margin-left: 50px;
  padding: 1px 5px;
  padding-left: 26px;
}

#content #dashboard #statistics .index_has-deletions
{
  display: none;
}

#content #dashboard #statistics .index_has-deletions.value.ico-0
{
  background-image: url( ../../img/ico/tick-red.png );
}

#content #dashboard #replication
{
  float: left;
}

#content #dashboard #replication .is-replicating
{
  background-position: 99% 50%;
  display: block;
}

#content #dashboard #replication #details table thead td span
{
  display: none;
}

#content #dashboard #instance
{
  float: right;
}

#content #dashboard #instance .dir_impl
{
  margin-top: 10px;
}

#content #dashboard #admin-extra
{
  float: left;
}

#content #dashboard #healthcheck
{
  float: right;
}

#content #dashboard #healthcheck .ico
{
  background-image: url( ../../img/ico/slash.png );
  height: 20px;
  padding-left: 20px;
  width: 60%;
}

#content #dashboard #healthcheck .ico.ico-1
{
  background-image: url( ../../img/ico/tick.png );
}

#content #dashboard #system h2 { background-image: url( ../../img/ico/server.png ); }
#content #dashboard #statistics h2 { background-image: url( ../../img/ico/chart.png ); }
#content #dashboard #replication h2 { background-image: url( ../../img/ico/node.png ); }
#content #dashboard #replication.master h2 { background-image: url( ../../img/ico/node-master.png ); }
#content #dashboard #replication.slave h2 { background-image: url( ../../img/ico/node-slave.png ); }
#content #dashboard #instance h2 { background-image: url( ../../img/ico/server.png ); }
#content #dashboard #admin-extra h2 { background-image: url( ../../img/ico/plus-button.png ); }
