/*

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 #threads .loader
{
  background-position: 0 50%;
  padding-left: 21px;
}

#content #threads #thread-dump table
{
  border-collapse: collapse;
  width: 100%;
}

#content #threads #thread-dump table .spacer,
#content #threads #thread-dump tbody .state
{
  background-color: #fff;
}

#content #threads #thread-dump table th,
#content #threads #thread-dump table td
{
  padding: 5px 3px;
  vertical-align: top;
}

#content #threads #thread-dump thead th
{
  background-color: #c8c8c8;
  font-weight: bold;
  text-align: left;
}

#content #threads #thread-dump thead th.name
{
  width: 85%;
}

#content #threads #thread-dump thead th.time
{
  text-align: right;
  width: 15%;
}

#content #threads #thread-dump tbody .odd
{
  background-color: #f0f0f0;
}

#content #threads #thread-dump tbody .RUNNABLE a
{
  background-image: url( ../../img/ico/tick-circle.png );
}

#content #threads #thread-dump tbody .WAITING a,
#content #threads #thread-dump tbody .TIMED_WAITING a
{
  background-image: url( ../../img/ico/hourglass.png );
}

#content #threads #thread-dump tbody .WAITING.lock a,
#content #threads #thread-dump tbody .TIMED_WAITING.lock a
{
  background-image: url( ../../img/ico/hourglass--exclamation.png );
}

#content #threads #thread-dump tbody .name a
{
  background-position: 0 50%;
  cursor: auto;
  display: block;
  padding-left: 21px;
}

#content #threads #thread-dump tbody .stacktrace .name a
{
  cursor: pointer;
}

#content #threads #thread-dump tbody .stacktrace .name a span
{    
  background-image: url( ../../img/ico/chevron-small-expand.png );
  background-position: 100% 50%;
  padding-right: 21px;
}

#content #threads #thread-dump tbody .stacktrace.open .name a span
{   
  background-image: url( ../../img/ico/chevron-small.png );
}

#content #threads #thread-dump tbody .name p
{
  background-image: url( ../../img/ico/arrow-000-small.png );
  background-position: 0 50%;
  color: #c0c0c0;
  font-size: 11px;
  margin-left: 21px;
  padding-left: 21px;
}

#content #threads #thread-dump tbody .name div
{
  border-top: 1px solid #c0c0c0;
  display: none;
  margin-left: 21px;
  margin-top: 5px;
  padding-top: 5px;
}

#content #threads #thread-dump tbody .open .name div
{
  display: block;
}

#content #threads #thread-dump tbody .name ul
{
  list-style-type: disc;
  margin-left: 0.7em;
  padding-left: 0.7em;
}

#content #threads #thread-dump tbody .time
{
  text-align: right;
}

#content #threads #thread-dump tbody .details
{
  display: none;
}

#content #threads .controls
{
  padding-top: 5px;
  padding-bottom: 5px;
}

#content #threads .controls a
{
  background-image: url( ../../img/ico/chevron-small-expand.png );
  padding-left: 21px;
}

#content #threads.expanded .controls a
{
  background-image: url( ../../img/ico/chevron-small.png );
}

#content #threads.expanded .controls .expand,
#content #threads.collapsed .controls .collapse
{
  display: none;
}
