/*

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.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 legend
{
  margin-left: 0;
  padding-left: 0;
}

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

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

#content #query #result #response
{
}
