/*

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 .NOTE { margin-top: 20px; }
#content #plugins #navigation .NOTE p { color: #4D4D4D; font-style: italic; }


#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;
  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: 9%;
}

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

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

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

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

#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;
}

#content #plugins .active a
{
  background-color: #d0d0d0;
  border-color: #d0d0d0;
}

#recording #blockUI
{
    position: absolute;
    left:0;
    top:0;
    width: 100%;
    height: 100%;
    background-color: #000;
    opacity: 0.6;
    z-index:1000;
    padding:0;
}

#recording .wrapper
{
    position: absolute;
    top: 50%;
    left: 50%;
    padding: 30px;
    width: 415px;
    height: 100px;
    border: 2px solid black;
    background-color: #FFF;
    opacity: 1;
    z-index: 2000;
    transform: translate(-50%, -50%);
}

#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 );
}
