/*

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 #collections
{
  position: relative;
}

#content #collections #ui-block
{
  background-color: #fff;
  height: 200px;
  position: absolute;
  left: -5px;
  top: 35px;
  width: 500px;
}

#content #collections #frame
{
  float: right;
  width: 86%;
}

#content #collections #navigation
{
  padding-top: 50px;
  width: 12%;
}

#content #collections #navigation a
{
  padding-left: 5px;
}

#content #collections #frame .actions
{
  margin-bottom: 20px;
  min-height: 30px;
}

#content #collections .actions div.action
{
  width: 320px;
}

#content #collections .actions div.action .cloud
{
}

#content #collections .actions form .directory-note
{
  background-image: url( ../../img/ico/information-white.png );
  background-position: 22% 1px;
  color: #c0c0c0;
}

#content #collections .actions form .error
{
  background-image: url( ../../img/ico/cross-button.png );
  background-position: 22% 1px;
  color: #c00;
  font-weight: bold;
}

#content #collections .actions form p
{
  padding-bottom: 8px;
}

#content #collections .actions form label
{
  float: left;
  padding-top: 3px;
  padding-bottom: 3px;
  text-align: right;
  width: 25%;
}

#content #collections .actions form input,
#content #collections .actions form select,
#content #collections .actions form .chosen-container
#content #collections .actions form .buttons,
#content #collections .actions form .note span
{
  float: right;
  width: 71%;
}

#content #collections .actions form .note span
{
  padding-left: 3px;
  padding-right: 3px;
}

#content #collections .actions form .buttons
{
  padding-top: 10px;
}

#content #collections .actions form button.submit
{
  margin-right: 20px;
}

#content #collections .actions form button.submit span
{
  background-image: url( ../../img/ico/tick.png );
}

#content #collections .actions form button.reset span
{
  background-image: url( ../../img/ico/cross.png );
}

#content #collections .actions #add
{
  left: 0;
  position: absolute;
}

#content #collections .actions #add span
{
  background-image: url( ../../img/ico/plus-button.png );
}

#content #collections .actions #delete
{
  margin-right: 20px;
}

#content #collections .actions #delete span
{
  background-image: url( ../../img/ico/cross.png );
}

#content #collections .actions #reload span
{
  background-image: url( ../../img/ico/arrow-circle.png );
}

#content #collections .actions #rename span
{
  background-image: url( ../../img/ico/ui-text-field-select.png );
}

#content #collections .actions #create-alias span
{
  background-image: url( ../../img/ico/arrow-switch.png );
}

#content #collections .actions #delete-alias span
{
  background-image: url( ../../img/ico/cross-button.png );
}

#content #collections .actions #optimize span
{
  background-image: url( ../../img/ico/hammer-screwdriver.png );
}

#content #collections .actions div.action
{
  background-color: #fff;
  border: 1px solid #f0f0f0;
  box-shadow: 5px 5px 10px #c0c0c0;
  -moz-box-shadow: 5px 5px 10px #c0c0c0;
  -webkit-box-shadow: 5px 5px 10px #c0c0c0;
  position: absolute;
  left: 50px;
  top: 40px;
  padding: 10px;
}

#content #collections .actions #add-replica span
{
  background-image: url( ../../img/ico/plus-button.png );
}

#content #collections div.action.add-replica {
  border: 1px solid #f0f0f0;
  width: 400px;
  margin-right: 0px;
  padding: 10px;
  float: right;
}

#content #collections div.action.add-replica p {
  padding-bottom: 8px;
}

#content #collections div.action.add-replica .buttons {
  float: right;
}

#content #collections div.action.add-replica .buttons .submit span {
  background-image: url( ../../img/ico/tick.png );
  background-position: 0% 50%;
}

#content #collections div.action.add-replica .buttons .reset span {
  background-image: url( ../../img/ico/cross.png );
  background-position: 0% 50%;
}

#content #collections #data #collection-data h2 { background-image: url( ../../img/ico/box.png ); }
#content #collections #data #shard-data h2 { background-image: url( ../../img/ico/sitemap.png ); }
#content #collections #data #shard-data .replica h2 { background-image: url( ../../img/ico/node-slave.png ); }

#content #collections #data #index-data
{
  margin-top: 10px;
}

#content #collections #data li
{
  padding-bottom: 3px;
  padding-top: 3px;
}

#content #collections #data li.odd
{
  background-color: #f8f8f8;
}

#content #collections #data li dt
{
  float: left;
  width: 50%;
}

#content #collections #data li dd
{
  float: right;
  width: 50%;
}

#content #collections #data li dd.ico
{
  background-image: url( ../../img/ico/slash.png );
  height: 20px;
}

#content #collections #data li dd.ico.ico-1
{
  background-image: url( ../../img/ico/tick.png );
}

#content #collections #data li dd.ico span
{
}

#content #collections #add_advanced {
  background-image: url( ../../img/ico/chevron-small-expand.png );
  background-position: 100% 50%;
  cursor: pointer;
  padding-right: 21px;
}

#content #collections #add_advanced.open {
    background-image: url( ../../img/ico/chevron-small.png );
}

#content #collections .shard {
    margin-left: 40px;
}

#content #collections .replica {
    margin-left: 40px;
}

#content #collections .shard h2 span.openReplica {
  background-image: url( ../../img/ico/chevron-small-expand.png );
  background-position: 100% 50%;
  cursor: pointer;
  padding-right: 21px;
}

#content #collections .shard h2 span.openReplica .open {
  background-image: url( ../../img/ico/chevron-small.png );
}

#content #collections .replica h2 span {
  background-image: url( ../../img/ico/chevron-small-expand.png );
  background-position: 100% 50%;
  cursor: pointer;
  padding-right: 21px;
}

#content #collections .replica h2 span.rem {
  background-image: url( ../../img/ico/cross.png );
  background-position: 100% 50%;
  cursor: pointer;
  padding-right: 21px;
  right:10px;
}

#content #collections .replica h2 span .open {
  background-image: url( ../../img/ico/chevron-small.png );
}

#content #collections #add-replica {
  float: right;
}

#content #collections .add select {
  width: 100%;
}

#content #collections .chosen-container ul {
    width: 100%;
    padding: 5px;
}

#content #collections .delete-replica span
{
  background-image: url( ../../img/ico/cross.png );
}
#content #collections .delete-replica button.submit span
{
  background-image: url( ../../img/ico/tick.png );
}

#content #collections #node-name .chosen-container
{
    width: 100% !important;
}

#content #collections #collection-data {
  float: left;
  width: 35%;
}

#content #collections #shard-data {
  float: left;
  width: 65%;
}
