/* 
 * 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.
 */
body,
html {
  margin: 0;
  padding: 0;
  height: 100%;
  /*padding-top: 40px;*/
  /*padding-bottom: 40px;*/
  background-color: #eee;
  /*overflow: closed;*/
}

#content {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  top: 0px;
}



#tab {
  /*float:left;*/
  list-style:none outside none;
  margin:0;
  padding:0;
  /*position:relative;*/
  z-index:999
}

#tab li span {
  display: block;
  /*padding: 0 5px;*/
  position: relative;
}

#arrow {
  cursor: pointer;
}

/*.opaque {
  opacity: 0.4;
  filter: alpha(opacity=40);
}*/

/*.btn {
  margin: 2px;
}*/

.modal-dialog {
  width: 1140px;
}

.form-signin {
  max-width: 500px;
  padding: 15px;
  margin: 0 auto;
}

.form-signin .form-signin-heading,
.form-signin .checkbox {
  margin-bottom: 10px;
}

.form-signin .checkbox {
  font-weight: normal;
}

.form-signin .form-control {
  position: relative;
  height: auto;
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
  padding: 10px;
  font-size: 16px;
}

.form-signin .form-control:focus {
  z-index: 2;
}

.head {
  text-align: center;
  border-bottom: 1px solid #e5e5e5;
}

.signin {
  text-align: center;
} 

.head h1{
  font-size: 63px;
} 

.register {
  margin-top: 40px;
  margin-bottom: 40px;
}

div.list-group-item.list-group-item-disabled {
  color: #949494;
  background-color: #D8D8D8;
}

.ot-list-item {
  position: relative;
  display: block;
  
  margin-bottom: -1px;
  background-color: #fff;
  border: 1px solid #ddd;
}

.ot-list-item > div {
  padding: 10px 15px;
}

.ot-task-exit {
  float: right;
  border-left: 1px solid #ddd;
}

.ot-task-name {
  float: left;
}

.ot-task-name .heading {
  color: #333;
  font-size: 18px;
}

table.ot-list {
  background-color: white;
}

a:hover, a:focus {
  color: #2a6496;
  text-decoration: none; 
}

tr.ot-disabled {
background-color: #F3F3F3;
color: #aaa;
}

div.status {
  margin: 10px 10px 0 0;
  font-size: 40px;
}


td.status {
  /*padding-top: 30px !important;*/
  vertical-align: middle !important;
  font-size: 20px;
  width: 30px;
}

.task-current {
  color: #54A81C;
}

.task-current a{
  color: #54A81C;
}

.task-current a:hover {
  color: #2A530F;
}

.disabled {
color: #aaa;
}

div.product-instructions {
  margin: 10px 15px;
}

div.product-instructions a{
  color: #666;
}

div.product-instructions a:hover{
  color: #000;
}

div.product-instructions .glyphicon{
  margin-right: 5px;
}


/* EXPERIMENT STATUS PORTAL */

#expStatusHeader {
  float: left;
  width: 100%;
}

.experimentStatusRow {
  float: left;
  height: 100px;
  margin: 15px 0;
  position: relative;
  width: 98%;
}

  .expShelf {
    background: #fff;
    border: 1px solid #ccc;
    border-radius: 4px;
    box-shadow: 0 0 6px #ccc;
    cursor: pointer;
    float: left;
    height: 100px;
    left: 0;
    position: absolute;
    top: 0;
    width: 100%;
    z-index: 1000;
  }

    .topShelf {
      background: #f5f5f5;
      border-bottom: 1px solid #ddd;
      height: 47px;
      width: 100%;
    }

    .expName {
      float: left;
      font-size: 24px;
      /*font-weight: bold;*/
      margin: 8px 2%;
      width: 50%;
    }

    .expDates {
      float: left;
      font-size: 14px;
      margin-top: 18px;
      width: 40%;
    }

      .expDate {
        float: left;
        margin: 10 8px;
        width: 150px;
      }

        .expDate:first-child {
          margin-right: 20px;
        }

        .expDateLabel {
          float: left;
          color: #999;
          font-size: 12px;
          margin: 4px 8px 0 0;
          text-transform: uppercase;
        }

        .expDateValue {
          float: left;
        }

    .expStatsWrapper {
      float: left;
      margin: 10px 2%;
      width: 96%;
    }

      .expStat {
        float: left;
        margin-right: 10px;
        width: 90px;
      }

        .expStatsWrapper:last-child {
          margin-right: 0;
        }

        .expStatsImg {
          float: left;
          margin-right: 18px;
          width: 20px;
        }

        .expStatsValue {
          float: left;
          font-size: 22px;
          margin-top: -2px;
          width: 15px;
        }

  .expTray {
    background: #fff;
    border: 1px solid #ccc;
    border-top: none;
    bottom: 0px;
    box-shadow: 0 0 6px #ccc;
    display: none;
    float: left;
    height: 500px;
    left: 0;
    margin: 0 2%;
    position: absolute;
    top: 100px;
    width: 96%;
    z-index: 1;
  }

    .expTrayNav {
      background: #222;
      float: left;
      height: 50px;
      width: 100%;
    }

      .expTrayNavBtn {
        cursor: pointer;
        float: left;
        padding: 6px 10px;
        text-align: center;
        width: 60px;
      }

        .expTrayNavBtn:hover {
          background: #000;
        }

        .expTrayNavBtn.active {
          background: #000;
        }

      #expTrayNavBtnLabels {
        background: #000;
        float: right;
        height: 50px;
        position: relative;
        text-align: center;
        width: 150px;
      }

      .expTrayNavBtnLabel {
        color: #ddd;
        display: none;
        font-size: 12px;
        float: left;
        margin-top: 17px;
        text-transform: uppercase;
        text-align: center;
        width: 150px;
      }

        .expTrayNavBtnLabel.active {
          display: block;
        }

      .expTrayNavBtnImg {
        float: left;
        height: 25px;
        margin: 8px;
        width: 25px;
      }

    .expTrayBody {
      background: #444;
      float: left;
      height: 450px;
      width: 100%;
    }

      .expTraySection {
        color: #eee;
        display: none;
        float: left;
        width: 100%;
      }

        .expTraySection.active {
          display: block;
        }

        .expTraySection tr:hover {
          color: #444;
        }

          .expTraySection a {
            color: #eee;
          }

            .expTraySection a:hover {
              color: #428bca;
            }

        .expTraySection ul {
          float: left;
          margin: 0;
          width: 100%;
        }

          .expTraySection li {
            float: left;
            list-style-type: none;
          }

          .trayTableHeader {
            background: #333;
            color: #fff;
            height: 40px;
            padding: 10px 2%;
          }

          .trayTableHeader li {
            float: left;
          }

          .trayTableBody {
            margin: 0;
            padding: 0;
            max-height: 410px;
            overflow: auto;
          }

          .trayTableBody li {
            padding: 12px 2%;
            width: 100%;
          }

            .trayTableBody li:nth-child(even) {
              background: #555;
            } 

          .trayTableBody>li>div {
            float: left;
          }

          .username {
            margin-right: 1%;
            width: 40%;
          }

          .progressBar {
            margin-right: 1%;
            width: 25%;
          }

            .expTray .progress {
              margin-bottom: 0; 
              width: 75%;
            }

          .lastLogin {
            margin-right: 1%;
            width: 25%;
          }

          .productActive {
            text-align: center;
            margin-right: 2%;
            width: 6%;
          }

          .productName {
            width: 30%;
          }

          .productTeam {
            width: 15%;
          }

          .productVersion {
            text-align: center;
            width: 10%;
          }

          .productDataset {
            width: 20%;
          }

          .productURL {
            text-align: center;
            width: 6%;
          }

          .productInst {
            text-align: center;
            width: 10%;
          }

          .taskActive {
            text-align: center;
            margin-right: 2%;
            width: 6%;
          }

          .taskName {
            margin-right: 2%;
            width: 30%;
          }

          .taskSurvey {
            text-align: center;
            width: 15%;
          }

          .taskExit {
            text-align: center;
            width: 15%;
          }

          .taskCompletedUser {
            width: 30%
          }

          .taskCompletedName {
            width: 30%
          }

          .taskCompletedDateCompleted {
            width: 25%
          }

          .taskCompletedActCount {
            text-align: center;
            width: 15%
          }

          .taskIncompleteUser {
            width: 35%;
          }

          .taskIncompleteName {
            width: 35%;
          }

          .taskIncompleteDateAssigned {
            width: 25%;
          }

      #metricsNav {
        float: left;
        margin-top: 40px;
        width: 17%;
      }

        .metricsNavBtn {
          background: #666;
          color: #ccc;
          cursor: pointer;
          float: left;
          padding: 8px 12px;
          width: 95%;
        }

          .metricsNavBtn:hover, .metricsNavBtn.active {
            color: #eee;
            background: #428bca;
          }

      .metricsBody {
        float: left;
        margin-left: 2%;
        margin-top: 30px;
        width: 70%;
      }

        .selectTitle {
          float: left;
          margin-right: 8px;
        }

        .metricsBody select {
          color: #000;
          float: left;
          margin-right: 18px;
        }

        .metricsSection {
          display: none;
          float: left;
          margin: 20px 0 0 20px;
          width: 100%;
        }

          .metricsSection.active {
            display: block;
          }

          .chart rect {
            fill: #428bca;
          }

          .chart text {
            fill: white;
            font: 10px sans-serif;
            text-anchor: end;
          }

.emailRow {
  float: left;
  margin-bottom: 20px;
  width: 800px;
}

.emailLabel {
  float: left;
  margin-top: 7px;
  width: 100px;
}

.emailInput {
  border: 1px solid #ccc;
  border-radius: 4px;
  box-shadow: none;
  float: left;
  height: 34px;
  padding: 4px 8px;
  width: 400px;
}

  #email-to {
    border-radius: 4px 0 0 4px;
  }

  #email-subject {
    width: 450px;
  }

.emailRow .input-group-btn {
  width: 1px;
}

#contacts {
  margin: 0;
  padding: 0;
}

#contacts li {
  cursor: pointer;
  padding: 6px 0 6px 10px;
}

  #contacts li:hover {
    background: #39f;
    color: #fff;
  }

.emailRow textarea {
  border-color: #ccc;
  border-radius: 4px;
  height: 500px;
  padding: 8px;
  resize: none;
  width: 690px;
}

#emailSubmit {
  clear: both;
  float: left;
  margin: -5px 0 0 100px;
}

  #emailSubmit input {
    background-color: #777;
    color: #fff;
    font-size: 18px;
    height: 50px;
    /*text-transform: uppercase;*/
    width: 150px;
  }

  #emailSubmit input:hover {
    background-color: #39f;
    color: #fff;
  }

#statusMessage {
  float: left;
  font-size: 18px;
  margin: 8px 0 0 40px;
}