/*
 * 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.
 */
#sidebar {
  overflow: hidden;
  position: fixed;
  left: -250px;
  top: 0;
  bottom: 0;
  height: 100%;
  width: 250px;
  background: #151515;
  -webkit-transition: 400ms;
  -moz-transition: 400ms;
  -o-transition: 400ms;
  -ms-transition: 400ms;
  transition: 400ms;
  -webkit-box-shadow: inset -10px 0px 10px rgba(0,0,0,0.2);
  box-shadow: inset -10px 0px 10px rgba(0,0,0,0.2);
}
#sidebar.sidebar-visible {
  left: 0;
}
#sidebar .logo {
  width: auto;
  height: 22px;
}
#sidebar .logo img {
  display: inline-block;
}
#sidebar .navbar-static-top {
  overflow: hidden;
  height: 51px;
}
#sidebar .navbar-static-top .navbar-header {
  width: 100%;
}
#sidebar .navbar-brand.navbar-brand-text {
  font-size: 14px;
  font-weight: bold;
  color: #fff;
  padding-left: 0;
}
#sidebar .nav > li > a {
  color: #aaa;
  margin-bottom: 1px;
}
#sidebar .nav > li > a:hover,
#sidebar .nav > li > a:focus {
  background-color: rgba(40,40,40,0.5);
}
#sidebar .nav > li > a.active {
  background-color: rgba(100,100,100,0.5);
}
#content {
  background-color: #fff;
  overflow: hidden;
  margin-left: 0;
  padding-top: 70px;
  -webkit-transition: 400ms;
  -moz-transition: 400ms;
  -o-transition: 400ms;
  -ms-transition: 400ms;
  transition: 400ms;
}
#content .navbar-main,
#content .navbar-main-additional {
  -webkit-transition: 400ms;
  -moz-transition: 400ms;
  -o-transition: 400ms;
  -ms-transition: 400ms;
  transition: 400ms;
}
#content .navbar-main-additional {
  margin-top: 51px;
  border-bottom: none;
  padding: 0 20px;
}
#content .navbar-main-additional .nav-tabs {
  margin: 0 -20px;
  padding: 0 20px;
}
#content .navbar-secondary-additional {
  border: none;
  padding: 0 20px;
  margin-bottom: 0;
}
#content .navbar-secondary-additional .nav-tabs {
  margin: 0 -20px;
}
#content.sidebar-visible {
  margin-left: 250px;
}
#content.sidebar-visible .navbar-main,
#content.sidebar-visible .navbar-main-additional {
  left: 250px;
}
#content #fold-button {
  display: inline-block;
  margin-left: 20px;
}
#content #content-inner {
  padding: 0px 20px 20px 20px;
}
#content #content-inner.has-navbar-main-additional {
  padding-top: 42px;
}
.page-header {
  margin: 0 0 20px 0;
}
.nav > li > a,
.nav > li > a:hover,
.nav > li > a:focus {
  color: #aaa;
  background-color: transparent;
  border-bottom: 2px solid transparent;
}
.nav > li.active > a,
.nav > li.active > a:hover,
.nav > li.active > a:focus {
  color: #000;
  border-bottom: 2px solid #000;
}
.nav.nav-tabs {
  margin-bottom: 20px;
}
.table .table {
  background-color: transparent;
}
.table th {
  font-weight: normal;
  color: #999;
}
.table td.td-long {
  width: 20%;
  white-space: pre-wrap;
  white-space: -moz-pre-wrap;
  white-space: -pre-wrap;
  white-space: -o-pre-wrap;
  word-wrap: break-word;
}
.table.table-clickable tr {
  cursor: pointer;
}
.table.table-inner {
  background-color: transparent;
}
.table.table-properties {
  table-layout: fixed;
  white-space: nowrap;
}
.table.table-properties td {
  width: 50%;
  white-space: nowrap;
  overflow: hidden;
  -o-text-overflow: ellipsis;
  text-overflow: ellipsis;
}
.table.table-body-hover > tbody {
  border-top: none;
  border-left: 2px solid transparent;
}
.table.table-body-hover > tbody.active {
  border-left: 2px solid #000;
}
.table.table-body-hover > tbody:hover td:not(.tab-column),
.table.table-body-hover > tbody.active td:not(.tab-column) {
  background-color: #f0f0f0;
}
.table.table-body-hover > tbody:hover td.tab-column li.active,
.table.table-body-hover > tbody.active td.tab-column li.active {
  background-color: #f0f0f0;
}
.table.table-activable th.tab-column,
.table.table-activable td.tab-column {
  border-top: none;
  width: 47px;
}
.table.table-activable td.tab-column {
  border-right: 1px solid #ddd;
}
.table.table-activable td {
  position: relative;
}
.table .small-label {
  text-transform: uppercase;
  font-size: 13px;
  color: #999;
}
.panel.panel-dashboard .huge {
  font-size: 28px;
}
.panel.panel-lg {
  font-size: 16px;
}
.panel.panel-lg .badge {
  font-size: 14px;
}
.navbar-secondary {
  overflow: auto;
}
.navbar-main .navbar-title,
.navbar-secondary .navbar-title,
.navbar-main-additional .navbar-title,
.panel.panel-multi .navbar-title,
.navbar-secondary-additional .navbar-title,
.navbar-main .panel-title,
.navbar-secondary .panel-title,
.navbar-main-additional .panel-title,
.panel.panel-multi .panel-title,
.navbar-secondary-additional .panel-title {
  float: left;
  font-size: 18px;
  padding: 12px 20px 13px 10px;
  color: #333;
  display: inline-block;
}
.navbar-main .navbar-info,
.navbar-secondary .navbar-info,
.navbar-main-additional .navbar-info,
.panel.panel-multi .navbar-info,
.navbar-secondary-additional .navbar-info,
.navbar-main .panel-info,
.navbar-secondary .panel-info,
.navbar-main-additional .panel-info,
.panel.panel-multi .panel-info,
.navbar-secondary-additional .panel-info {
  float: left;
  font-size: 14px;
  padding: 15px 15px 15px 15px;
  color: #999;
  display: inline-block;
  border-right: 1px solid #e7e7e7;
  overflow: hidden;
}
.navbar-main .navbar-info .overflow,
.navbar-secondary .navbar-info .overflow,
.navbar-main-additional .navbar-info .overflow,
.panel.panel-multi .navbar-info .overflow,
.navbar-secondary-additional .navbar-info .overflow,
.navbar-main .panel-info .overflow,
.navbar-secondary .panel-info .overflow,
.navbar-main-additional .panel-info .overflow,
.panel.panel-multi .panel-info .overflow,
.navbar-secondary-additional .panel-info .overflow {
  position: absolute;
  display: block;
  -o-text-overflow: ellipsis;
  text-overflow: ellipsis;
  overflow: hidden;
  height: 22px;
  line-height: 22px;
  vertical-align: middle;
}
.navbar-main .navbar-info.first,
.navbar-secondary .navbar-info.first,
.navbar-main-additional .navbar-info.first,
.panel.panel-multi .navbar-info.first,
.navbar-secondary-additional .navbar-info.first,
.navbar-main .panel-info.first,
.navbar-secondary .panel-info.first,
.navbar-main-additional .panel-info.first,
.panel.panel-multi .panel-info.first,
.navbar-secondary-additional .panel-info.first {
  border-left: 1px solid #e7e7e7;
}
.navbar-main .navbar-info.last,
.navbar-secondary .navbar-info.last,
.navbar-main-additional .navbar-info.last,
.panel.panel-multi .navbar-info.last,
.navbar-secondary-additional .navbar-info.last,
.navbar-main .panel-info.last,
.navbar-secondary .panel-info.last,
.navbar-main-additional .panel-info.last,
.panel.panel-multi .panel-info.last,
.navbar-secondary-additional .panel-info.last {
  border-right: none;
}
.panel.panel-multi .panel-heading {
  padding: 0;
}
.panel.panel-multi .panel-heading .panel-info.thin {
  padding: 8px 10px;
}
.panel.panel-multi .panel-body {
  padding: 10px;
  background-color: #fdfdfd;
  color: #999;
  font-size: 13px;
}
.panel.panel-multi .panel-body.clean {
  color: inherit;
  font-size: inherit;
}
.navbar-main-additional,
.navbar-secondary-additional {
  min-height: 40px;
  background-color: #fdfdfd;
}
.navbar-main-additional .navbar-info,
.navbar-secondary-additional .navbar-info {
  font-size: 13px;
  padding: 10px 15px 10px 15px;
}
.nav-top-affix.affix {
  width: 100%;
  top: 50px;
  margin-left: -20px;
  padding-left: 20px;
  margin-right: -20px;
  padding-right: 20px;
  background-color: #fff;
  z-index: 1;
}
.badge-default[href]:hover,
.badge-default[href]:focus {
  background-color: #808080;
}
.badge-primary {
  background-color: #428bca;
}
.badge-primary[href]:hover,
.badge-primary[href]:focus {
  background-color: #3071a9;
}
.badge-success {
  background-color: #5cb85c;
}
.badge-success[href]:hover,
.badge-success[href]:focus {
  background-color: #449d44;
}
.badge-info {
  background-color: #5bc0de;
}
.badge-info[href]:hover,
.badge-info[href]:focus {
  background-color: #31b0d5;
}
.badge-warning {
  background-color: #f0ad4e;
}
.badge-warning[href]:hover,
.badge-warning[href]:focus {
  background-color: #ec971f;
}
.badge-danger {
  background-color: #d9534f;
}
.badge-danger[href]:hover,
.badge-danger[href]:focus {
  background-color: #c9302c;
}
.indicator {
  display: inline-block;
  margin-right: 15px;
}
.indicator.indicator-primary {
  color: #428bca;
}
.indicator.indicator-success {
  color: #5cb85c;
}
.indicator.indicator-info {
  color: #5bc0de;
}
.indicator.indicator-warning {
  color: #f0ad4e;
}
.indicator.indicator-danger {
  color: #d9534f;
}
pre.exception {
  border: none;
  background-color: transparent;
  padding: 0;
  margin: 0;
}
.nav-tabs.tabs-vertical {
  position: absolute;
  left: 0;
  top: 0;
  border-bottom: none;
  z-index: 100;
}
.nav-tabs.tabs-vertical li {
  float: none;
  margin-bottom: 0;
  margin-right: -1px;
}
.nav-tabs.tabs-vertical li > a {
  margin-right: 0;
  -webkit-border-radius: 0;
  border-radius: 0;
  border-bottom: none;
  border-left: 2px solid transparent;
}
.nav-tabs.tabs-vertical li > a:hover,
.nav-tabs.tabs-vertical li > a:focus {
  border-bottom: none;
  border-left: 2px solid #000;
}
.nav-tabs.tabs-vertical li.active > a {
  border-bottom: none;
  border-left: 2px solid #000;
}
.navbar-main .navbar-title,
.navbar-secondary .navbar-title,
.navbar-main-additional .navbar-title,
.navbar-secondary-additional .navbar-title {
  padding: 12px 20px 13px 20px;
}
livechart {
  width: 30%;
  height: 30%;
  text-align: center;
}
.canvas-wrapper {
  border: 1px solid #ddd;
  position: relative;
  margin-bottom: 20px;
}
.canvas-wrapper .main-canvas {
  height: 400px;
  overflow: hidden;
}
.canvas-wrapper .main-canvas .zoom-buttons {
  position: absolute;
  top: 10px;
  right: 10px;
}
.label-group .label {
  display: inline-block;
  width: 2em;
  padding-left: 0.1em;
  padding-right: 0.1em;
  margin: 0;
  border-right: 1px solid #fff;
  -webkit-border-radius: 0;
  border-radius: 0;
}
.label-group .label.label-black {
  background-color: #000;
}
svg.graph {
  overflow: hidden;
}
svg.graph g.type-TK > rect {
  fill: #00ffd0;
}
svg.graph text {
  font-weight: 300;
  font-size: 14px;
}
svg.graph .node {
  cursor: pointer;
}
svg.graph .node > rect {
  stroke: #999;
  stroke-width: 5px;
  fill: #fff;
  margin: 0;
  padding: 0;
}
svg.graph .node[active] > rect {
  fill: #eee;
}
svg.graph .node.node-mirror > rect {
  stroke: #a8a8a8;
}
svg.graph .node.node-iteration > rect {
  stroke: #cd3333;
}
svg.graph .node.node-source > rect {
  stroke: #4ce199;
}
svg.graph .node.node-sink > rect {
  stroke: #e6ec8b;
}
svg.graph .node.node-normal > rect {
  stroke: #3fb6d8;
}
svg.graph .node h4 {
  color: #000;
}
svg.graph .node h5 {
  color: #999;
}
svg.graph .edgeLabel rect {
  fill: #fff;
}
svg.graph .edgePath path {
  stroke: #333;
  stroke-width: 2px;
  fill: #333;
}
svg.graph .label {
  color: #777;
  margin: 0;
}
svg.graph .edge-label {
  font-size: 14px;
}
svg.graph .node-label {
  display: block;
  margin: 0;
  text-decoration: none;
}
.timeline {
  overflow: hidden;
}
.timeline-canvas {
  overflow: hidden;
  padding: 10px;
}
.timeline-canvas .bar-container {
  overflow: hidden;
}
.timeline-canvas .timeline-insidelabel,
.timeline-canvas .timeline-series {
  cursor: pointer;
}
.timeline-canvas.secondary .timeline-insidelabel,
.timeline-canvas.secondary .timeline-series {
  cursor: auto;
}
.qtip-timeline-bar {
  font-size: 14px;
  line-height: 1.4;
}
@media (min-width: 1024px) and (max-width: 1279px) {
  #sidebar {
    left: 0;
    width: 160px;
  }
  #sidebar .navbar-static-top .navbar-brand-text {
    display: none;
  }
  #content {
    margin-left: 160px;
  }
  #content #fold-button {
    display: none;
  }
  #content .navbar-main,
  #content .navbar-main-additional {
    left: 160px;
  }
  .table td.td-long {
    width: 20%;
  }
}
@media (min-width: 1280px) {
  #sidebar {
    left: 0;
  }
  #content {
    margin-left: 250px;
  }
  #content #fold-button {
    display: none;
  }
  #content .navbar-main,
  #content .navbar-main-additional {
    left: 250px;
  }
  .table td.td-long {
    width: 30%;
  }
}
.legend-box {
  font-size: 10px;
  width: 2em;
}
#total-mem {
  background-color: #7cb5ec;
}
#heap-mem {
  background-color: #434348;
}
#non-heap-mem {
  background-color: #90ed7d;
}
.show-pointer {
  cursor: pointer;
}
