/*

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
{
  display: none;
  border-top: 1px solid #f0f0f0;
  margin-top: 10px;
  padding-top: 5px;
}

#content #dataimport.error #form form
{
  display: none !important;
}

#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.error #current_state
{
  display: none !important;
}

#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
{
  display: none;
  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;
  display: none;
  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 .block.hidden .content
{
  display: none;
}

#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 .formatted
{
  display: none;
}

#content #dataimport #dataimport_config .editable
{
  display: none;
}

#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
{
  display: none;
}

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