/*

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 #plugins #navigation
{
  width: 20%;
}

#content #plugins #navigation .cache a { background-image: url( ../../img/ico/disk-black.png ); }
#content #plugins #navigation .core a { background-image: url( ../../img/ico/wooden-box.png ); }
#content #plugins #navigation .other a { background-image: url( ../../img/ico/zone.png ); }
#content #plugins #navigation .highlighting a { background-image: url( ../../img/ico/highlighter-text.png ); }
#content #plugins #navigation .updatehandler a{ background-image: url( ../../img/ico/arrow-circle.png ); }
#content #plugins #navigation .queryhandler a { background-image: url( ../../img/ico/magnifier.png ); }
#content #plugins #navigation .queryparser a { background-image: url( ../../img/ico/asterisk.png ); }

#content #plugins #navigation .PLUGINCHANGES { margin-top: 20px; }
#content #plugins #navigation .PLUGINCHANGES a { background-image: url( ../../img/ico/eye.png ); }
#content #plugins #navigation .RELOAD a { background-image: url( ../../img/ico/arrow-circle.png ); }


#content #plugins #navigation a
{
  position: relative;
}

#content #plugins #navigation a span
{
  background-color: #bba500;
  border-radius: 5px;
  color: #fff;
  font-size: 10px;
  font-weight: normal;
  line-height: 1.4em;
  padding-left: 4px;
  padding-right: 4px;
  position: absolute;
  right: 5px;
  top: 7px;
}

#content #plugins #frame
{
  float: right;
  width: 78%;
}

#content #plugins #frame .entry
{
  margin-bottom: 10px;
}

#content #plugins #frame .entry:last-child
{
  margin-bottom: 0;
}

#content #plugins #frame .entry a
{
  background-image: url( ../../img/ico/chevron-small-expand.png );
  background-position: 0 50%;
  display: block;
  font-weight: bold;
  padding-left: 21px;
}

#content #plugins #frame .entry.changed a span
{
  color: #bba500;
}

#content #plugins #frame .entry.expanded a
{
  background-image: url( ../../img/ico/chevron-small.png );
}

#content #plugins #frame .entry.expanded ul
{
  display: block;
}

#content #plugins #frame .entry ul
{
  border-left: 9px solid #f0f3ff;
  display: none;
  margin-left: 3px;
  padding-top: 5px;
  padding-left: 10px;
}

#content #plugins #frame .entry li
{
  padding-top: 2px;
  padding-bottom: 2px;
}

#content #plugins #frame .entry li.stats
{
  border-top: 1px solid #c0c0c0;
  margin-top: 5px;
  padding-top: 5px;
}

#content #plugins #frame .entry li.odd
{
  background-color: #f8f8f8;
}

#content #plugins #frame .entry dt,
#content #plugins #frame .entry .stats span
{
  float: left;
  width: 11%;
}

#content #plugins #frame .entry dd,
#content #plugins #frame .entry .stats ul
{
  float: right;
  width: 88%;
}

#content #plugins #frame .entry .stats ul
{
  border-left: 0;
  margin: 0;
  padding: 0;
}

#content #plugins #frame .entry .stats dt
{
  width: 27%;
}

#content #plugins #frame .entry .stats dd
{
  width: 72%;
}

#content #plugins #frame .entry.expanded a.linker {
  background-image: none;
  background-position: 0 0;
  display: inline;
  font-weight: normal;
  padding:0px;
}

#content #plugins #frame .entry.expanded a.linker:hover {
  background-color:#F0F3FF;
}

#recording
{
  display: none;
}

#recording .wrapper
{
  padding: 30px;
}

#recording p
{
  background-position: 0 50%;
  float: left;
  padding-left: 21px;
  padding-top: 7px;
  padding-bottom: 7px;
}

#recording button
{
  float: right;
}

#recording button span
{
  background-image: url( ../../img/ico/new-text.png );
}
