/*

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 #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;
}

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

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

#content #cores .actions form .error
{
  color: #800;
  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 .error span
{
  float: right;
  width: 73%;
}

#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: 40;
  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;
}
