/*

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.

*/

*
{
  background-repeat: no-repeat;
  margin: 0;
  padding: 0;
}

body, h1, h2, h3, h4, h5, h6, a, button, input, select, option, textarea, th, td
{
  color: #333;
  font: 12px/1.6em "Lucida Grande", "DejaVu Sans", "Bitstream Vera Sans", Verdana, Arial, sans-serif;
}

body
{
  padding: 30px;
  text-align: center;
}

a, button
{
  cursor: pointer;
}

input, select, textarea
{
  border: 1px solid #c0c0c0;
  padding: 2px;
}

input[readonly=readonly]
{
  border-color: #f0f0f0;
}

button
{
  background-color: #e6e6e6;
  background-repeat: no-repeat;
  background-image: -webkit-gradient( linear, 0 0, 0 100%, from( #ffffff ), color-stop( 25%, #ffffff ), to( #e6e6e6 ) );
  background-image: -webkit-linear-gradient( #ffffff, #ffffff 25%, #e6e6e6 );
  background-image: -moz-linear-gradient( top, #ffffff, #ffffff 25%, #e6e6e6 );
  background-image: -ms-linear-gradient( #ffffff, #ffffff 25%, #e6e6e6 );
  background-image: -o-linear-gradient( #ffffff, #ffffff 25%, #e6e6e6 );
  background-image: linear-gradient( #ffffff, #ffffff 25%, #e6e6e6 );
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0 );
  border: 1px solid #ccc;
  border-bottom-color: #bbb;
  -moz-border-radius: 4px;
  -webkit-border-radius: 4px;
  -khtml-border-radius: 4px;
  border-radius: 4px;
  -webkit-box-shadow: inset 0 1px 0 rgba( 255, 255, 255, 0.2 ), 0 1px 2px rgba( 0, 0, 0, 0.05 );
  -moz-box-shadow: inset 0 1px 0 rgba( 255, 255, 255, 0.2 ), 0 1px 2px rgba( 0, 0, 0, 0.05 );
  box-shadow: inset 0 1px 0 rgba( 255, 255, 255, 0.2 ), 0 1px 2px rgba( 0, 0, 0, 0.05 );
  color: #333;
  cursor: pointer;
  display: inline-block;
  padding: 4px 7px 5px;
  overflow: visible;
  text-shadow: 0 1px 1px rgba( 255, 255, 255, 0.75 );
  -webkit-transition: 0.1s linear background-image;
  -moz-transition: 0.1s linear background-image;
  -ms-transition: 0.1s linear background-image;
  -o-transition: 0.1s linear background-image;
  transition: 0.1s linear background-image;
}

button span
{
  background-position: 0 50%;
  display: block;
  padding-left: 21px;
}

button[type=submit], button.primary
{
  background-color: #0064cd;
  background-repeat: repeat-x;
  background-image: -khtml-gradient( linear, left top, left bottom, from( #049cdb ), to( #0064cd ) );
  background-image: -moz-linear-gradient( top, #049cdb, #0064cd );
  background-image: -ms-linear-gradient( top, #049cdb, #0064cd );
  background-image: -webkit-gradient( linear, left top, left bottom, color-stop( 0%, #049cdb ), color-stop( 100%, #0064cd ) );
  background-image: -webkit-linear-gradient( top, #049cdb, #0064cd );
  background-image: -o-linear-gradient( top, #049cdb, #0064cd );
  background-image: linear-gradient( top, #049cdb, #0064cd );
  border-color: #0064cd #0064cd #003f81;
  border-color: rgba( 0, 0, 0, 0.1 ) rgba( 0, 0, 0, 0.1 ) rgba( 0, 0, 0, 0.25 );
  color: #ffffff;
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0 );
  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}

button.success
{
  background-color: #57a957;
  background-repeat: repeat-x;
  background-image: -khtml-gradient( linear, left top, left bottom, from( #62c462 ), to( #57a957 ) );
  background-image: -moz-linear-gradient( top, #62c462, #57a957 );
  background-image: -ms-linear-gradient( top, #62c462, #57a957 );
  background-image: -webkit-gradient( linear, left top, left bottom, color-stop( 0%, #62c462 ), color-stop( 100%, #57a957 ) );
  background-image: -webkit-linear-gradient( top, #62c462, #57a957 );
  background-image: -o-linear-gradient( top, #62c462, #57a957 );
  background-image: linear-gradient( top, #62c462, #57a957 );
  border-color: #57a957 #57a957 #3d773d;
  border-color: rgba( 0, 0, 0, 0.1 ) rgba( 0, 0, 0, 0.1 ) rgba( 0, 0, 0, 0.25 );
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#62c462', endColorstr='#57a957', GradientType=0 );
  color: #ffffff;
  text-shadow: 0 -1px 0 rgba( 0, 0, 0, 0.25 );
}

button.warn
{
  background-color: #c43c35;
  background-repeat: repeat-x;
  background-image: -khtml-gradient( linear, left top, left bottom, from( #ee5f5b ), to( #c43c35 ) );
  background-image: -moz-linear-gradient( top, #ee5f5b, #c43c35 );
  background-image: -ms-linear-gradient( top, #ee5f5b, #c43c35 );
  background-image: -webkit-gradient( linear, left top, left bottom, color-stop( 0%, #ee5f5b ), color-stop( 100%, #c43c35 ) );
  background-image: -webkit-linear-gradient( top, #ee5f5b, #c43c35 );
  background-image: -o-linear-gradient( top, #ee5f5b, #c43c35 );
  background-image: linear-gradient( top, #ee5f5b, #c43c35 );
  border-color: #c43c35 #c43c35 #882a25;
  border-color: rgba( 0, 0, 0, 0.1 ) rgba( 0, 0, 0, 0.1 ) rgba( 0, 0, 0, 0.25 );
  color: #ffffff;
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0 );
  text-shadow: 0 -1px 0 rgba( 0, 0, 0, 0.25 );
}

a
{
  text-decoration: none;
}

pre
{
  color: #333;
  text-align: left;
}

abbr
{
  cursor: help;
}

ul
{
  list-style: none;
}

.clearfix:after { clear: both; content: "."; display: block; font-size: 0; height: 0; visibility: hidden; }
.clearfix       { display: block; }

.loader
{
  background-image: url( ../../img/loader.gif ) !important;
}

.loader-light
{
  background-image: url( ../../img/loader-light.gif ) !important;
}

.universal-loader {
  position: absolute;
  left: -16px;
  top: 0px;
  width: 16px;
  height: 16px;
}

#wrapper
{
  position: relative;
  margin: 0 auto;
  margin-bottom: 30px;
  text-align: left;
}

#header
{
  padding-bottom: 10px;
  position: fixed;
  z-index: 42;
}

.scroll #header
{
  position: absolute;
}

#header #solr
{
  background-image: url( ../../img/solr.svg );
  background-size: 128px;
  display: block;
  height: 78px;
  width: 150px;
}

#header #solr span
{
  display: none;
}

#main
{
  min-width: 750px;
  position: relative;
}

#main.error
{
  border: 0;
  min-height: 0;
  padding-top: 20px;
}

#main.error .message
{
  background-color: #f00;
  background-image: url( ../../img/ico/construction.png );
  background-position: 10px 50%;
  color: #fff;
  font-weight: bold;
  margin-left: 150px;
  margin-bottom: 20px;
  padding: 10px;
  padding-left: 35px;
}

#main.error .code
{
  border: 1px solid #c0c0c0;
  padding: 5px;
}

#meta
{
  position: absolute;
  bottom: -26px;
  right: 0;
}

#meta li
{
  float: left;
}

#meta li a
{
  background-position: 10px 50%;
  display: block;
  height: 25px;
  line-height: 25px;
  padding-left: 31px;
  padding-right: 10px;
}

#meta li a:hover
{
  background-color: #f0f0f0;
}

#meta .documentation a { background-image: url( ../../img/ico/document-text.png ); }
#meta .issues a { background-image: url( ../../img/ico/bug.png ); }
#meta .irc a { background-image: url( ../../img/ico/users.png ); }
#meta .mailinglist a { background-image: url( ../../img/ico/mail.png ); }
#meta .wiki-query-syntax a { background-image: url( ../../img/ico/script-code.png ); }

#environment
{
  background-image: url( ../../img/ico/box.png );
  background-position: 5px 50%;
  display: none;
  font-weight: bold;
  margin-top: 10px;
  padding: 5px 10px;
  padding-left: 26px;
}

.has-environment #environment
{
  display: block;
}

#environment.prod
{
  background-color: #c37f7f;
  color: #fff;
}

#environment.test
{
  background-color: #f5f5b2;
}

#environment.dev
{
  background-color: #cce7cc;
}

.header-message
{
  border: 1px solid #f00;
  margin-left: 150px;
  margin-bottom: 20px;
}

.header-message h2,
.header-message ul,
.header-message p
{
  padding: 10px;
}

.header-message h2
{
  background-color: #f00;
  color: #fff;
  font-weight: bold;
}

.header-message p
{
  color: #c0c0c0;
  padding-top: 0;
}

#loading
#http-exception
{
  display: none;
}

.exception
{
  background-color: #f00;
  background-image: url( ../../img/ico/construction.png );
  background-position: 10px 50%;
  color: #fff;
  font-weight: bold;
  margin-bottom: 20px;
  padding: 10px;
  padding-left: 35px;
}

#content-wrapper
{
  margin-left: 150px;
  border: 1px solid #c0c0c0;
  min-height: 500px;
}

#content
{
  padding: 10px;
}

#content > .loader
{
  background-position: 0 50%;
  padding-left: 21px;
}

#content iframe
{
  border: 0;
  display: block;
  min-height: 400px;
  width: 100%;
}

#content .block
{
  margin-bottom: 10px;
}

#content .block h2
{
  background-color: #fafafa;
  background-position: 5px 50%;
  border-bottom: 1px solid #f0f0f0;
  font-weight: bold;
  padding: 5px;
  padding-left: 26px;
}

#content .block.disabled,
#content .block.disabled h2
{
  color: #c0c0c0;
}

#content .block .message,
#content .block .content
{
  padding: 5px;
}

/* syntax */

pre.syntax
{
  overflow: auto;
}

pre.syntax code
{
  display: block;
  color: #000;
}

pre.syntax .comment,
pre.syntax .template_comment,
pre.syntax .diff .header,
pre.syntax .javadoc
{
  color: #998;
  font-style: italic;
}

pre.syntax .keyword,
pre.syntax .css .rule .keyword,
pre.syntax .winutils,
pre.syntax .javascript .title,
pre.syntax .lisp .title,
pre.syntax .subst
{
  color: #000;
  font-weight: bold;
}

pre.syntax .number,
pre.syntax .hexcolor
{
  color: #40a070;
}

pre.syntax.language-json .number
{
  color: blue;
}

pre.syntax.language-json .literal
{
  color: firebrick;
}

pre.syntax .string,
pre.syntax .tag .value,
pre.syntax .phpdoc,
pre.syntax .tex .formula
{
  color: #d14;
}

pre.syntax.language-json .string
{
  color: green;
}

pre.syntax .title,
pre.syntax .id
{
  color: #900;
  font-weight: bold;
}

pre.syntax .javascript .title,
pre.syntax .lisp .title,
pre.syntax .subst
{
  font-weight: normal;
}

pre.syntax .class .title,
pre.syntax .tex .command
{
  color: #458;
  font-weight: bold;
}

pre.syntax .tag,
pre.syntax .css .keyword,
pre.syntax .html .keyword,
pre.syntax .tag .title,
pre.syntax .django .tag .keyword
{
  color: #000080;
  font-weight: normal;
}

pre.syntax .attribute,
pre.syntax .variable,
pre.syntax .instancevar,
pre.syntax .lisp .body
{
  color: #008080;
}

pre.syntax.language-json .attribute
{
  color: black;
  font-weight: bold;
}

pre.syntax .regexp
{
  color: #009926;
}

pre.syntax .class
{
  color: #458;
  font-weight: bold;
}

pre.syntax .symbol,
pre.syntax .ruby .symbol .string,
pre.syntax .ruby .symbol .keyword,
pre.syntax .ruby .symbol .keymethods,
pre.syntax .lisp .keyword,
pre.syntax .tex .special
{
  color: #990073;
}

pre.syntax .builtin,
pre.syntax .built_in,
pre.syntax .lisp .title
{
  color: #0086b3;
}

pre.syntax .preprocessor,
pre.syntax .pi,
pre.syntax .doctype,
pre.syntax .shebang,
pre.syntax .cdata
{
  color: #999;
  font-weight: bold;
}

pre.syntax .deletion
{
  background: #fdd;
}

pre.syntax .addition
{
  background: #dfd;
}

pre.syntax .diff .change
{
  background: #0086b3;
}

pre.syntax .chunk
{
  color: #aaa;
}

pre.syntax .tex .formula
{
  opacity: 0.5;
}

#content .tree li, 
#content .tree ins
{
  background-color: transparent;
  background-image: url( ../../img/tree.png );
  background-repeat: no-repeat; 
}

#content .tree li
{
  background-position: -54px 0;
  background-repeat: repeat-y;
  line-height: 22px;
}

#content .tree li.jstree-last
{
  background:transparent;
}

#content .tree .jstree-open > ins
{
  background-position: -36px 0;
}

#content .tree .jstree-closed > ins
{
  background-position: -18px 0;
}

#content .tree .jstree-leaf > ins
{
  background-position: 0 0;
}

#content .tree .jstree-hovered
{
  background:#e7f4f9; border:1px solid #d8f0fa; padding:0 2px 0 1px;
}

#content .tree .jstree-clicked
{
  background:#beebff; border:1px solid #99defd; padding:0 2px 0 1px;
}

#content .tree a.active
{
  background-color: #f0f0f0;
  color: #00f;
}

#content .tree a .jstree-icon
{
  background-image: url( ../../img/ico/folder.png );
}

#content .tree .jstree-leaf a .jstree-icon
{
  background-image: url( ../../img/ico/document-text.png );
}

#content .tree .jstree-search
{
  font-style:italic;
}

#content .tree a.jstree-search
{
  color:aqua;
}

#connection-box
{
  display: none;
}

#connection-status-modal
{
  position: absolute;
  top: 0px;
  left: 0px;
  width: 100%;
  height: 100%;
  background-color: #e6e6e6;
  opacity: 0.5;
  z-index: 100;
}

#connection-status-recovered:
{
  z-index:102;
}

.connection-status
{
  position: absolute;
  left: 200px;
  right: 200px;
  top: 40%;
  height: 75px;
  border: 1px solid #f00;
  padding: 30px;
  background-color: #fff;
  opacity: 1;
  z-index: 101;
}

.connection-status p
{
  background-image: url( ../../img/ico/network-status-busy.png );
  background-position: 0 50%;
  color: #800;
  padding-left: 26px;
}

#connection-status-recovered p
{
  color: #080;
  background-image: url( ../../img/ico/network-status.png );
}

#content .address-bar
{
  margin-bottom: 10px;
  background-image: url( ../../img/ico/ui-address-bar.png );
  background-position: 5px 50%;
  border: 1px solid #f0f0f0;
  box-shadow: 1px 1px 0 #f0f0f0;
  -moz-box-shadow: 1px 1px 0 #f0f0f0;
  -webkit-box-shadow: 1px 1px 0 #f0f0f0;
  color: #c0c0c0;
  display: block;
  overflow: hidden;
  padding: 5px;
  padding-left: 26px;
  white-space: nowrap;
}

#content .address-bar:focus,
#content .address-bar:hover
{
  border-color: #c0c0c0;
  box-shadow: 1px 1px 0 #d8d8d8;
  -moz-box-shadow: 1px 1px 0 #d8d8d8;
  -webkit-box-shadow: 1px 1px 0 #d8d8d8;
  color: #333;
}

.exception .show-exception {
  margin-top: 4px;
  display: block;
  position: absolute;
  right: 10px;
  top: 7px;
  color: #fff;
}

#exception .show-exception a:hover {
  color: #333;
}

.other-ui-link {
  margin: 0px;
  position: absolute;
  right: 0px;
  top: -20px;
}

.other-ui-link span,
.new-ui-warning span.help {
  background-image: url( ../../img/ico/information-white.png );
  right: 0px;
  padding-left: 16px;
}

.other-ui-link a.ul {
  text-decoration: underline;
}

