/*

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

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

#content #cores.empty .requires-core
{
  display: none;
}

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

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

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

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

#content #cores .actions div.action
{
  width: 300px;
}

#content #cores .actions div.action .cloud
{
  display: none;
}

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

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

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

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

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

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

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

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

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

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

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

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

#content #cores .actions #unload
{
  margin-right: 20px;
}

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

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

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

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

#content #cores .actions #optimize
{
  display: none;
}

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

#content #cores .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;
  display: none;
  position: absolute;
  left: -50px;
  top: 40px;
  padding: 10px;
}

#content #cores #data #core-data h2 { background-image: url( ../../img/ico/box.png ); }
#content #cores #data #index-data h2 { background-image: url( ../../img/ico/chart.png ); }

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

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

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

#content #cores #data li dt
{
  float: left;
  width: 17%;
}

#content #cores #data li dd
{
  float: right;
  width: 82%;
}

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

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

#content #cores #data li dd.ico span
{
  display: none;
}
