/*
* 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.
*/

/*[fmt]1C20-1C0D-E*/
div.panel div.list-view {
  position: relative;
  overflow-x: hidden;
  margin-top: 0px;
}

div.toolbar {
  top: expression(this.offsetParent.scrollTop);
}

div.toolbar div.text-search div.search-bar input {
  float: left;
  border: none;
  margin-top: -1px;
  margin-right:0px;
  margin-bottom:0px;
  margin-left:-12px;
  width: 97%;
  height: 67%;
}
div.panel div.list-view div.fixed-header {
  top: expression(this.offsetParent.scrollTop + 30);
}

.detail-view div.list-view div.fixed-header {
  top: 29px !important;
  left: 12px !important;
}

div.panel div.list-view div.data-table table.body {
  top: 78px;
}

.detail-view .main-groups {
  width: 96%;
  height: 416px;
  position: relative;
  overflow-x: hidden;
  margin-top: -18px;
}

.detail-view .ui-widget-content {
  overflow-x: hidden !important;
}

.tree-view {
  position: relative;
  top: expression(this.offsetParent.scrollTop);
}

.tree-view li .name {
  margin: 0px !important;
}

.detail-view .button.done {
  /*+placement:shift 0px 459px;*/
  position: relative;
  left: 0px;
  top: 459px;
}

.detail-view ul {
  /*+placement:shift;*/
  position: relative;
  left: 0;
  top: 0;
}

.ui-tabs ul.ui-tabs-nav {
  margin-top: 20px;
}

.dashboard.admin .dashboard-container.sub.alerts ul {
  top: expression(this.offsetParent.scrollTop);
}

#user-options a:hover {
  background: #ADADAD;
  color: #FFFFFF;
  /*+text-shadow:0px 1px 2px #383838;*/
  -moz-text-shadow: 0px 1px 2px #383838;
  -webkit-text-shadow: 0px 1px 2px #383838;
  -o-text-shadow: 0px 1px 2px #383838;
  text-shadow: 0px 1px 2px #383838;
}

.multi-wizard .progress ul li span.arrow {
  display: none;
  border-right: 0px solid #000000;
}

.tree-view ul li .name {
  float: right;
}

.multi-edit .data .data-body .data-item .expandable-listing {
  width: 99.8%;
  border: 1px solid #CFC9C9;
  max-height: 161px;
  position: relative;
  overflow: auto;
  overflow-x: hidden;
  top: expression(this.offsetParent.scrollTop);
}

table tbody td,
table th {
  padding: 9px 5px 8px 0px;
  border-right: 1px solid #BFBFBF;
  color: #495A76;
  clear: none;
  width: auto;
  width: 88px;
  min-width: 88px;
  font-size: 11px;
  overflow: hidden;
  vertical-align: middle;
}

.detail-view > .toolbar {
  position: relative;
  float: left;
  left: -14px;
}

.detail-view .list-view > .toolbar {
  width: 100% !important;
}

.system-chart ul.resources li .label {
  /*+placement:shift 3px 9px;*/
  position: relative;
  left: 3px;
  top: 9px;
  position: absolute;
}

.system-chart ul.resources li .button.view-all .view-all-label {
  /*+placement:shift 6px 5px;*/
  position: relative;
  left: 6px;
  top: 5px;
}

