/*

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.

*/

#menu-wrapper
{
  position: fixed;
  top: 120px;
  width: 150px;
}

.scroll #menu-wrapper
{
  position: absolute;
  top: 90px;
}

.has-environment #menu-wrapper
{
  top: 160px;
}

#menu-wrapper a
{
  display: block;
  padding: 4px 2px;
  overflow: hidden;
  text-overflow: ellipsis;
}

#core-selector,#collection-selector
{
  margin-top: 20px;
  padding-right: 10px;
}

#core-selector a,
#collection-selector a
{
  padding: 0;
  padding-left: 8px;
}

#core-selector select,
#collection-selector select
{
  width: 100%;
}

#core-selector #has-no-cores a,
#collection-selector #has-no-collections a
{
  background-image: url( ../../img/ico/database--plus.png );
}

#core-selector #has-no-cores span,
#collection-selector #has-no-collections span
{
  color: #c0c0c0;
  display: block;
}

#menu-wrapper .active p
{
  background-color: #fafafa;
  border-color: #c0c0c0;
}

#menu-wrapper p a,
#menu a
{
  background-position: 5px 50%;
  padding-left: 26px;
  padding-top: 5px;
  padding-bottom: 5px;
}

#menu-wrapper p a:hover
{
  background-color: #f0f0f0;
}

#menu-wrapper .active p a
{
  background-color: #c0c0c0;
  font-weight: bold;
}

#menu p.loader
{
  background-position: 5px 50%;
  color: #c0c0c0;
  margin-top: 5px;
  padding-left: 26px;
}

#menu p a small
{
  color: #b5b5b5;
  font-weight: normal;
}

#menu p a small span.txt
{
}

#menu p a small:hover span.txt
{
  display: inline;
}

#menu .busy
{
  border-right-color: #f6f5d9;
}

#menu .busy p a
{
  background-color: #f6f5d9;
  background-image: url( ../../img/ico/status-away.png );
}

#menu .offline
{
  border-right-color: #eccfcf;
}

#menu .offline p a
{
  background-color: #eccfcf;
  background-image: url( ../../img/ico/status-busy.png );
}

#menu .online
{
  border-right-color: #cfecd3;
}

#menu .online p a
{
  background-color: #cfecd3;
  background-image: url( ../../img/ico/status.png );
}

#menu .ping small
{
  color: #000
}

#menu li
{
  border-bottom: 1px solid #f0f0f0;
}

#menu li:last-child
{
  border-bottom: 0;
}

#menu li.optional
{
}

.sub-menu p
{
  border-top: 1px solid #f0f0f0;
}

.sub-menu li:first-child p
{
  border-top: 0;
}

.sub-menu p a
{
  background-image: url( ../../img/ico/status-offline.png );
}

.sub-menu .active p a
{
  background-image: url( ../../img/ico/box.png );
}

.sub-menu ul,
#menu ul
{
  padding-top: 5px;
  padding-bottom: 10px;
}

.sub-menu .active ul,
#menu .active ul
{
  display: block;
}

#menu ul li
{
  border-bottom: 0;
}

#core-menu ul li a,
#collection-menu ul li a,
#menu ul li a
{
  background-position: 7px 50%;
  border-bottom: 1px solid #f0f0f0;
  color: #bbb;
  margin-left: 15px;
  padding-left: 26px;
}

.sub-menu ul li:last-child a,
#menu ul li:last-child a
{
  border-bottom: 0;
}

.sub-menu ul li a:hover,
#menu ul li a:hover
{
  background-color: #f0f0f0;
  color: #333;
}

.sub-menu ul li.active a,
#menu ul li.active a
{
  background-color: #d0d0d0;
  border-color: #d0d0d0;
  color: #333;
}

#menu #index.global p a { background-image: url( ../../img/ico/dashboard.png ); }

#menu #logging.global p a { background-image: url( ../../img/ico/inbox-document-text.png ); }
#menu #logging.global .level a { background-image: url( ../../img/ico/gear.png ); }

#menu #java-properties.global p a { background-image: url( ../../img/ico/jar.png ); }

#menu #threads.global p a { background-image: url( ../../img/ico/ui-accordion.png ); }

#menu #collections.global p a { background-image: url( ../../img/ico/documents-stack.png ); }
#menu #cores.global p a { background-image: url( ../../img/ico/databases.png ); }

#menu #cloud.global p a { background-image: url( ../../img/ico/network-cloud.png ); }
#menu #cloud.global .tree a { background-image: url( ../../img/ico/folder-tree.png ); }
#menu #cloud.global .graph a { background-image: url( ../../img/ico/molecule.png ); }
#menu #cloud.global .rgraph a { background-image: url( ../../img/ico/asterisk.png ); }
#menu #cloud.global .dump a { background-image: url( ../../img/ico/download-cloud.png ); }

.sub-menu .ping.error a
{
  
  background-color: #ffcccc;
  background-image: url( ../../img/ico/system-monitor--exclamation.png );
  border-color: #ffcccc;
  cursor: help;
}

.sub-menu .overview a { background-image: url( ../../img/ico/home.png ); }
.sub-menu .query a { background-image: url( ../../img/ico/magnifier.png ); }
.sub-menu .stream a { background-image: url( ../../img/ico/node.png ); }
.sub-menu .analysis a { background-image: url( ../../img/ico/funnel.png ); }
.sub-menu .documents a { background-image: url( ../../img/ico/documents-stack.png ); }
.sub-menu .files a { background-image: url( ../../img/ico/folder.png ); }
.sub-menu .schema a { background-image: url( ../../img/ico/book-open-text.png ); }
.sub-menu .replication a { background-image: url( ../../img/ico/node.png ); }
.sub-menu .distribution a { background-image: url( ../../img/ico/node-select.png ); }
.sub-menu .ping a { background-image: url( ../../img/ico/system-monitor.png ); }
.sub-menu .logging a { background-image: url( ../../img/ico/inbox-document-text.png ); }
.sub-menu .plugins a { background-image: url( ../../img/ico/block.png ); }
.sub-menu .dataimport a { background-image: url( ../../img/ico/document-import.png ); }
.sub-menu .segments a { background-image: url( ../../img/ico/construction.png ); }


#content #navigation
{
  border-right: 1px solid #e0e0e0;
}

#content #navigation a
{
  display: block;
  padding: 4px 2px;
}

#content #navigation .current
{
  border-color: #e0e0e0;
}

#content #navigation a
{
  background-position: 5px 50%;
  padding-left: 26px;
  padding-top: 5px;
  padding-bottom: 5px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

#content #navigation a:hover
{
  background-color: #f0f0f0;
}

#content #navigation .current a
{
  background-color: #e0e0e0;
  font-weight: bold;
}
