/*

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

#content #dataimport #frame
{
  float: right;
  width: 78%;
}

#content #dataimport #form
{
  float: left;
  width: 20%;
}

#content #dataimport #form #navigation
{
  border-right: 0;
}

#content #dataimport #form #navigation a
{
  background-image: url( ../../img/ico/status-offline.png );
}

#content #dataimport #form #navigation .current a
{
  background-image: url( ../../img/ico/status.png );
}

#content #dataimport #form form
{
  border-top: 1px solid #f0f0f0;
  margin-top: 10px;
  padding-top: 5px;
}

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

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

#content #dataimport #form input
{
  width: 98%;
}

#content #dataimport #form button
{
  margin-top: 10px;
}

#content #dataimport #form .execute span
{
  background-image: url( ../../img/ico/document-import.png );
}

#content #dataimport #form .refresh-status span
{
  background-image: url( ../../img/ico/arrow-circle.png );
}

#content #dataimport #form .refresh-status span.success
{
  background-image: url( ../../img/ico/tick.png );
}

#content #dataimport #form #start
{
  float: left;
  width: 47%;
}

#content #dataimport #form #rows
{
  float: right;
  width: 47%;
}

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

#content #dataimport #form #auto-refresh-status
{
  margin-top: 20px;
}

#content #dataimport #form #auto-refresh-status a
{
  background-image: url( ../../img/ico/ui-check-box-uncheck.png );
  background-position: 0 50%;
  color: #c0c0c0;
  display: block;
  padding-left: 21px;
}

#content #dataimport #form #auto-refresh-status a.on,
#content #dataimport #form #auto-refresh-status a:hover
{
  color: #333;
}

#content #dataimport #form #auto-refresh-status a.on
{
  background-image: url( ../../img/ico/ui-check-box.png );
}

#content #dataimport #current_state
{
  padding: 10px;
  margin-bottom: 20px;
}

#content #dataimport #current_state .last_update,
#content #dataimport #current_state .info
{
  display: block;
  padding-left: 21px;
}

#content #dataimport #current_state .last_update
{
  color: #c0c0c0;
  font-size: 11px;
}

#content #dataimport #current_state .info
{
  background-position: 0 1px;
  position: relative;
}

#content #dataimport #current_state .info .details span
{
#  color: #c0c0c0;
}

#content #dataimport #current_state .info .abort-import
{
  position: absolute;
  right: 0px;
  top: 0px;
}

#content #dataimport #current_state .info .abort-import span
{
  background-image: url( ../../img/ico/cross.png );
}

#content #dataimport #current_state .info .abort-import.success span
{
  background-image: url( ../../img/ico/tick.png );
}

#content #dataimport #current_state.indexing
{
  background-color: #f9f9f9;
}

#content #dataimport #current_state.indexing .info
{
  background-image: url( ../../img/ico/hourglass.png );
}

#content #dataimport #current_state.indexing .info .abort-import
{
  display: block;
}

#content #dataimport #current_state.success
{
  background-color: #e6f3e6;
}

#content #dataimport #current_state.success .info
{
  background-image: url( ../../img/ico/tick-circle.png );
}

#content #dataimport #current_state.success .info strong
{
  color: #080;
}

#content #dataimport #current_state.aborted
{
  background-color: #f3e6e6;
}

#content #dataimport #current_state.aborted .info
{
  background-image: url( ../../img/ico/slash.png );
}

#content #dataimport #current_state.aborted .info strong
{
  color: #800;
}

#content #dataimport #current_state.failure
{
  background-color: #f3e6e6;
}

#content #dataimport #current_state.failure .info
{
  background-image: url( ../../img/ico/cross-button.png );
}

#content #dataimport #current_state.failure .info strong
{
  color: #800;
}

#content #dataimport #current_state.idle
{
  background-color: #e6e6ff;
}

#content #dataimport #current_state.idle .info
{
  background-image: url( ../../img/ico/information.png );
}

#content #dataimport #error
{
  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 #dataimport .block h2
{
  border-color: #c0c0c0;
  padding-left: 5px;
  position: relative;
}

#content #dataimport .block.hidden h2
{
  border-color: #fafafa;
}

#content #dataimport .block h2 a.toggle
{
  background-image: url( ../../img/ico/toggle-small.png );
  background-position: 0 50%;
  padding-left: 21px;
}

#content #dataimport .block.hidden h2 a.toggle
{
  background-image: url( ../../img/ico/toggle-small-expand.png );
}

#content #dataimport #config h2 a.r
{
  background-position: 3px 50%;
  display: block;
  float: right;
  margin-left: 10px;
  padding-left: 24px;
  padding-right: 3px;
}

#content #dataimport #config h2 a.reload_config
{
  background-image: url( ../../img/ico/arrow-circle.png );
}

#content #dataimport #config h2 a.reload_config.success
{
  background-image: url( ../../img/ico/tick.png );
}

#content #dataimport #config h2 a.reload_config.error
{
  background-image: url( ../../img/ico/slash.png );
}

#content #dataimport #config h2 a.debug_mode
{
  background-image: url( ../../img/ico/hammer.png );
  color: #c0c0c0;
}

#content #dataimport #config.debug_mode h2 a.debug_mode
{
  background-color: #ff0;
  background-image: url( ../../img/ico/hammer-screwdriver.png );
  color: #333;
}

#content #dataimport #config .content
{
  padding: 5px 2px;
}

#content #dataimport #dataimport_config .loader
{
  background-position: 0 50%;
  padding-left: 21px;
}

#content #dataimport #dataimport_config .formatted
{
  border: 1px solid #fff;
  display: block;
  padding: 2px;
}

#content #dataimport .debug_mode #dataimport_config .editable
{
  display: block;
}

#content #dataimport #dataimport_config .editable textarea
{
  font-family: monospace;
  height: 120px;
  min-height: 60px;
  width: 100%;
}

#content #dataimport #debug_response em
{
  color: #c0c0c0;
  font-style: normal;
}
