/*

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 #query
{
  background-image: url( ../../img/div.gif );
  background-position: 22% 0;
  background-repeat: repeat-y;
}

#content #query #form
{
  float: left;
  width: 21%;
}

#content #query #form label
{
  cursor: pointer;
  display: block;
  margin-top: 5px;
}

#content #query #form input,
#content #query #form select,
#content #query #form textarea
{
  margin-bottom: 2px;
  width: 100%;
}

#content #query #form input,
#content #query #form textarea
{
  width: 98%;
}

#content #query #form .multiple input
{
  float: left;
  width: 80%
}

#content #query #form .multiple .buttons
{
  float: right;
  width: 16%;
}


#content #query #form .multiple a
{
  background-position: 50% 50%;
  display: block;
  height: 25px;
  width: 49%;
}

#content #query #form .multiple a span
{
  display: none;
}

#content #query #form .multiple a.add
{
  background-image: url( ../../img/ico/plus-button.png );
  float: right;
}

#content #query #form .multiple a.rem
{
  background-image: url( ../../img/ico/minus-button.png );
  float: left;
}

#content #query #form #start
{
  float: left;
  width: 45%;
}

#content #query #form #rows
{
  float: right;
  width: 45%;
}

#content #query #form .checkbox input
{
  margin-bottom: 0;
  width: auto;
}

#content #query #form fieldset,
#content #query #form .optional.expanded
{
  border: 1px solid #fff;
  border-top: 1px solid #c0c0c0;
  margin-bottom: 5px;
}

#content #query #form fieldset.common
{
  margin-top: 10px;
}

#content #query #form fieldset legend,
#content #query #form .optional.expanded legend
{
  display: block;
  margin-left: 10px;
  padding: 0px 5px;
}

#content #query #form fieldset legend label
{
  margin-top: 0;
}

#content #query #form fieldset .fieldset
{
  border-bottom: 1px solid #f0f0f0;
  margin-bottom: 5px;
  padding-bottom: 10px;
}

#content #query #form .optional
{
  border: 0;
}

#content #query #form .optional .fieldset
{
  display: none;
}

#content #query #form .optional legend
{
  margin-left: 0;
  padding-left: 0;
}

#content #query #form .optional.expanded .fieldset
{
  display: block;
}

#content #query #result
{
  display: none;
  float: right;
  width: 77%;
}

#content #query #result #response
{
}
