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

#apps{

  td .red {
    color: red;
  }
  .table thead th{
    vertical-align:top;
    padding-bottom: 0px;
  }
  .avg-table {
    table-layout: fixed;
    background-color: #F9F9F9;
    border-left:1px solid #DDD;
    td {
      text-align:center;
      border:none;
    }
  }

  #filter_buttons a.selected{
    cursor: default;
  }
  #filter_buttons a{
    cursor: pointer;
  }

  .clear_filter{
    width:46%;
    a {
      cursor: pointer;
    }
  }

  .runsList {
    table-layout: fixed;
    border: 1px solid silver;
    th {
      border-top:none;
    }
    td {
      word-wrap: break-word;
    }

    input, select{
      width: 76%;
    }

    .no-data{
      text-align: center;
    }

    input.input-super-mini{
      width: 47px;
      max-width: 57%;
    }

    label.checkbox input {
      width: auto;
    }
    .col0,
    td:first-child,
    th:first-child {
      width: 16%;
    }
    .col1,
    td:first-child + td + td,
    th:first-child + th + th{
      width: 15%;
    }
    .col2,
    td:first-child + td + td + td,
    th:first-child + th + th + th{
      width: 11%;
    }
    .col3,
    td:first-child + td + td + td + td,
    th:first-child + th + th + th + th{
      width: 11%;
    }
    .col4,.col5,.col6,.col7,
    td:first-child + td + td + td + td + td,
    th:first-child + th + th + th + th + th,
    td:first-child + td + td + td + td + td + td,
    th:first-child + th + th + th + th + th + th,
    td:first-child + td + td + td + td + td + td + td,
    th:first-child + th + th + th + th + th + th + th,
    td:first-child + td + td + td + td + td + td + td + td,
    th:first-child + th + th + th + th + th + th + th + th
    {
      width: 9%;
    }
    .col8,
    td:first-child + td + td + td + td + td + td + td + td + td,
    th:first-child + th + th + th + th + th + th + th + th + th{
      width: 13%;
    }
  }

  .dropdown-menu label.checkbox {
    margin-left: 10px;
  }
  .dropdown-menu label.checkbox {
    margin-left: 10px;
  }
  .icon-star{
    color: gray;
    &.stared {
      color: inherit;
    }
    &:hover {
      text-decoration: none;
    }
  }
  a.a {
    cursor: pointer;
    width:25px;
    height: 25px;
    display: block;
    background-position: center center;
    background-repeat: no-repeat;
    position: relative;
    left:50%;
    margin-left:-13px;
    margin-top: 36px;
    font-size:30px;
    color: gray;
    &.active {
      color: #08C;
    }
  }
  .avg-info {
    font-size:16px;
    font-weight:700;
  }
  .compare-info {
    font-size:12px;
  }
  .search-bar {

  }
  .clear {
    clear:both;
  }
  .content {
    padding: 0;
  }
  .app-table-row.hover{
    opacity:0.8 ;
  }
  .app-table-row{
    cursor: pointer;
  }
  .filter_info > .span4 > a.selected{
      cursor: default;
      text-decoration: none;
      color: #000;
  }
  .page-bar {
    border: 1px solid silver;
    text-align:right;
    div {
      display: inline-block;
      margin:0 10px;
    }
    .items-on-page {
      label {
        display:inline;
      }
      select {
        margin-bottom: 4px;
        margin-top: 4px;
        width:70px;
      }
    }
    .paging_two_button {
      a {
        padding:0 5px;
      }
    }
  }
  #graph1 {
    margin-left: 30px;
    width: 440px;
    #legend_container {
      margin: 40px 0 0 20px;
    }
  }
  #graph2 {
    margin-right: 30px;
    width: 500px;
    #tasks_legend_container {
      margin: 40px 0 0 20px;
    }
  }

  tr.containerRow > td{
    background: #f9f9f9;
  }
  button {
    margin: 0 2px;
  }
  svg{
    vertical-align: top; //remove extra spaces after svg element
  }

  ul.nav-tabs{
    margin-bottom: 0;
  }

  #jobs, #bars{
    border: 1px solid #ddd;
    border-top: none;
    background: #fff;
    padding: 10px;
    box-sizing: border-box;
    width: auto;
  }

  #jobs h2{
    margin-top: 0;
  }
//fix stripped in inner table
  .table-striped tbody .even td,
  .table-striped tbody .even th {
    background-color: #fff;
  }
  .sorting_asc { background: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAEwATAwERAAIRAQMRAf/EAHgAAAMBAQAAAAAAAAAAAAAAAAAFCAYKAQACAQUAAAAAAAAAAAAAAAAABQMCBAYHCBAAAQUAAQMEAwAAAAAAAAAAAwECBAUGABESByExIghBMxQRAAIBAwMDAwUAAAAAAAAAAAECAwAEBRESBiExUUHhB2GBIhMU/9oADAMBAAIRAxEAPwDvA8k+Qc54sxGj32qlNi0ucrjTj/JqGlmROyJXQ2u/bOsZTmBExPd70/HXmQcW41lOX5+145h0L391KEHhR3Z28Ii6sx9AKgubiO1gaeU6Io19h9TUg/S/7eP+wia3NbBIFbuqiyn3VTCjIMArHHTJarEDGGiNU8vOKVsc7/VxBuGR3yV683X86/Cq/GpssrhP2S8emiSKRm1JS5VfyLH0WfQug7KwZR0CilWHy39++ObQTgkgeV9ux+xq9uc6U8pLfZzP6mClZpKWrvq1DilJAt4Mewh/0hRyBOsaUMoVKLvXtVU6t6+nL/HZTJYi4/rxU81tdbSu+N2Rtp7jcpB0OnUa9aoeOOVdsgDL4I1pFS+NPHmcsQ2+fw+UpLWOwwwWNVQ1kCaIcgaiONkmLGEZrDDXtcnXo5PfjC+5VybKWrWWSyF5cWbEEpJNI6kqdQSrMRqD1B9KjS2t423xoqt5AArb8QVPRwoo4UUcKK//2Q==) no-repeat right 50%; }
  .sorting_desc { background: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAEwATAwERAAIRAQMRAf/EAIEAAAIDAQAAAAAAAAAAAAAAAAAGBwgJCgEBAAIDAQAAAAAAAAAAAAAAAAMFBAYHCBAAAAUDAwMFAAAAAAAAAAAAAQIDBAUABgcSNTYRFQgTZFUWZhEAAAQEAggGAwAAAAAAAAAAAAECAxEhBAYSMjFBYRMzFDQFUZFSYmMHJFRk/9oADAMBAAIRAxEAPwDv4oAKACgCKc1tMmusb3Eph6cSgsgx7fucEZxGRks2llGIGVWgVm8q1dt0+6ogKaapSgdNbQPXTqAdwsN602bopk3vTnUW24rduwccbU2S5E8Sm1JM92czSZwNOKUYDFrCqTp1corDUFMpEcYap+Ipb4P5O8n81y9xXXlG50yY+thR3AEivqFvRDmduvSUrhuLtrFNXqCFvJm1LAQ5RMuchB6gBy13f7+tP6lsOipuz2jSGdy1ZJeNzmXnEtU+pWFTikmbxyTEjgglKKZpMU3ZanudYtTtSr8dMoYSKKvKMte0aUV5YGxgoASbD2iQ4Tyi6uB7Rvz/AHD9R8r7/wBWr64uta6/pKfq+JwUZP5/1/hwCFjIeTMrLo0np93q2xDtVCJh/9k=) no-repeat right 50%; }
  .sorting { background: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAEwATAwERAAIRAQMRAf/EAGgAAAIDAQAAAAAAAAAAAAAAAAUHAAYICgEBAQAAAAAAAAAAAAAAAAAAAAEQAAEEAQIFAgcAAAAAAAAAAAECAwQFABEGIRI0NQcTFDFBMmNUZRYRAQEBAQAAAAAAAAAAAAAAAAABEUH/2gAMAwEAAhEDEQA/AO93cd/XbXpLC9tHQ1Dr46nljUBby/gzGZB+p+Q6QhA+ZOApfDnllW/ha1tv6Ee7iyH5kRlvlbTIqHndWkNJ0HO7XFQbWeJUkpUeOpySrZh65UUnyFUW1ztaexRmIbaPyzoLE6vg2UWW9GC1e0XHnsSGEqfQohCwApK9OIGuAjfBP9VuG0m39vGqINVUe4r2xF21TVsuXZOI9N9lMmLBYkttQ21auBKhqtSUngCMkW5xqjKiYASh6SR2Tulr2HpOvf6j9p+V9/mwDeB//9k=) no-repeat right 50%; }

  a.paginate_disabled_next, a.paginate_disabled_previous {
    color: gray;
    &:hover {
      color: gray;
      text-decoration: none;
    }
  }

  a.paginate_enabled_next, a.paginate_enabled_previous {
    &:hover {
      text-decoration: none;
    }
  }

  a.ui-icon-circle-close {
    float: right;
    opacity: 0.2;
    padding: 1px;
    position: relative;
    right: -4px;
    margin-top: 6px;
    z-index:10;
    &:hover {
      opacity: 0.7;
    }
  }
  .notActive {
    a.ui-icon-circle-close {
      visibility: hidden;
    }
  }
}
.btn-group button.single-btn-group{
  -webkit-border-radius: 4px;
  border-radius: 4px;
  -moz-border-radius: 4px;
}

/*Big modal window*/
.big-modal {
  .modal {
    top: -999px;
    left: -999px;
    .modal-body {
      min-height: 430px;
      max-height: none;
    }
    width: 1150px;
    margin: 0;
  }

  .clear {
    clear:both;
  }
  > div > .dataTable {
    border: 1px solid silver;
    th {
      border-top:none;
    }
  }
  .content {
    padding: 0;
  }

  .page-bar {
    border: 1px solid silver;
    text-align:right;
    div {
      display: inline-block;
      margin:0 10px;
    }
    .dataTables_length {
      label {
        display:inline;
      }
      select {
        margin-bottom: 4px;
        margin-top: 4px;
        width:70px;
      }
    }
    .dataTables_paginate {
      a {
        padding:0 5px;
      }
    }
  }

  .rickshaw_legend {
    background-color: #999 !important;
    li:hover {
      background-color: #999 !important;
    }
  }
  #graph1, #graph2 {
    svg {
      g {
        g:nth-child(1) {
          display: none;
        }
      }
    }
  }
  #graph1 {
    margin-left: 30px;
    width: 440px;
    #chart {
      left: 30px;
      overflow: visible;
      position: relative;
    }
    #legend_container {
      margin: 40px 0 0 20px;
    }
    #y-axis {
      position: absolute;
      top: 182px;
      bottom: 0;
      width: 30px;
    }
  }

  #graph2 {
    margin-right: 30px;
    width: 500px;
    #job_tasks {
      left: 30px;
      overflow: visible;
      position: relative;
    }
    #tasks_legend_container {
      margin: 40px 0 0 20px;
    }
    #y-axis2 {
      position: absolute;
      top: 182px;
      bottom: 0;
      width: 30px;
      overflow: hidden;
      height: 210px;
    }
  }

  #job_tasks .axis line,
  #job_tasks .axis path {
    fill: none;
    stroke: #000;
    shape-rendering: crispEdges;
  }
  #job_tasks text.axislabel {
    pointer-events: none;
    text-anchor: middle;
  }

  ul.nav-tabs{
    margin-bottom: 0;
  }

  #bars {
    height: 350px;
  }

  #jobs, #bars{
    border: 1px solid #ddd;
    border-top: none;
    background: #fff;
    padding: 10px;
    box-sizing: border-box;
    width: auto;
  }

  #jobs h2{
    margin-top: 0;
  }
//fix stripped in inner table
  .table-striped tbody tr:nth-child(odd)
  td .table-striped tbody
  tr:nth-child(odd) td,
  tr:nth-child(even) th{
    background-color: none;
  }

  .sorting_asc { background: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAEwATAwERAAIRAQMRAf/EAHgAAAMBAQAAAAAAAAAAAAAAAAAFCAYKAQACAQUAAAAAAAAAAAAAAAAABQMCBAYHCBAAAQUAAQMEAwAAAAAAAAAAAwECBAUGABESByExIghBMxQRAAIBAwMDAwUAAAAAAAAAAAECAwAEBRESBiExUUHhB2GBIhMU/9oADAMBAAIRAxEAPwDvA8k+Qc54sxGj32qlNi0ucrjTj/JqGlmROyJXQ2u/bOsZTmBExPd70/HXmQcW41lOX5+145h0L391KEHhR3Z28Ii6sx9AKgubiO1gaeU6Io19h9TUg/S/7eP+wia3NbBIFbuqiyn3VTCjIMArHHTJarEDGGiNU8vOKVsc7/VxBuGR3yV683X86/Cq/GpssrhP2S8emiSKRm1JS5VfyLH0WfQug7KwZR0CilWHy39++ObQTgkgeV9ux+xq9uc6U8pLfZzP6mClZpKWrvq1DilJAt4Mewh/0hRyBOsaUMoVKLvXtVU6t6+nL/HZTJYi4/rxU81tdbSu+N2Rtp7jcpB0OnUa9aoeOOVdsgDL4I1pFS+NPHmcsQ2+fw+UpLWOwwwWNVQ1kCaIcgaiONkmLGEZrDDXtcnXo5PfjC+5VybKWrWWSyF5cWbEEpJNI6kqdQSrMRqD1B9KjS2t423xoqt5AArb8QVPRwoo4UUcKK//2Q==) no-repeat right 50%; }
  .sorting_desc { background: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAEwATAwERAAIRAQMRAf/EAIEAAAIDAQAAAAAAAAAAAAAAAAAGBwgJCgEBAAIDAQAAAAAAAAAAAAAAAAMFBAYHCBAAAAUDAwMFAAAAAAAAAAAAAQIDBAUABgcSNTYRFQgTZFUWZhEAAAQEAggGAwAAAAAAAAAAAAECAxEhBAYSMjFBYRMzFDQFUZFSYmMHJFRk/9oADAMBAAIRAxEAPwDv4oAKACgCKc1tMmusb3Eph6cSgsgx7fucEZxGRks2llGIGVWgVm8q1dt0+6ogKaapSgdNbQPXTqAdwsN602bopk3vTnUW24rduwccbU2S5E8Sm1JM92czSZwNOKUYDFrCqTp1corDUFMpEcYap+Ipb4P5O8n81y9xXXlG50yY+thR3AEivqFvRDmduvSUrhuLtrFNXqCFvJm1LAQ5RMuchB6gBy13f7+tP6lsOipuz2jSGdy1ZJeNzmXnEtU+pWFTikmbxyTEjgglKKZpMU3ZanudYtTtSr8dMoYSKKvKMte0aUV5YGxgoASbD2iQ4Tyi6uB7Rvz/AHD9R8r7/wBWr64uta6/pKfq+JwUZP5/1/hwCFjIeTMrLo0np93q2xDtVCJh/9k=) no-repeat right 50%; }
  .sorting { background: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAEwATAwERAAIRAQMRAf/EAGgAAAIDAQAAAAAAAAAAAAAAAAUHAAYICgEBAQAAAAAAAAAAAAAAAAAAAAEQAAEEAQIFAgcAAAAAAAAAAAECAwQFABEGIRI0NQcTFDFBMmNUZRYRAQEBAQAAAAAAAAAAAAAAAAABEUH/2gAMAwEAAhEDEQA/AO93cd/XbXpLC9tHQ1Dr46nljUBby/gzGZB+p+Q6QhA+ZOApfDnllW/ha1tv6Ee7iyH5kRlvlbTIqHndWkNJ0HO7XFQbWeJUkpUeOpySrZh65UUnyFUW1ztaexRmIbaPyzoLE6vg2UWW9GC1e0XHnsSGEqfQohCwApK9OIGuAjfBP9VuG0m39vGqINVUe4r2xF21TVsuXZOI9N9lMmLBYkttQ21auBKhqtSUngCMkW5xqjKiYASh6SR2Tulr2HpOvf6j9p+V9/mwDeB//9k=) no-repeat right 50%; }

  a.paginate_disabled_next, a.paginate_disabled_previous {
    color: gray;
    &:hover {
      color: gray;
      text-decoration: none;
    }
  }

  a.paginate_enabled_next, a.paginate_enabled_previous {
    &:hover {
      text-decoration: none;
    }
  }

  div.view-wrapper {
    float: left;
  }

  a.ui-icon-circle-close {
    float: right;
    opacity: 0.2;
    padding: 1px;
    position: relative;
    top: -32px;
    z-index: 10;
    &:hover {
      opacity: 0.7;
    }
  }
  .notActive {
    a.ui-icon-circle-close {
      visibility: hidden;
    }
  }
}



@media all and (max-width: 1024px) {
  .big-modal {
    #graph1 {
      width: 300px;
    }
    #graph2 {
      width: 400px;
  }
  }
}

/*Big modal window end*/
