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

/** override ace style - main style **/
body {
  background-color: #FFF;
}

/** Fixed bottom footer **/
.copyright {
  display: table;
  height: 30px;
  text-align: center;
  color: #8a8a8a;
  margin-top: 10px;
  width: 100%;
}

.copyright a {
  color: #8a8a8a;
}

/** port from bootswatch **/
.bg-primary {
  color: #fff;
  background-color: #df691a
}

/***************** Directive ***************/
.loading, .no-result {
  font-size: 1.5em;
  opacity: 0.6;
  color: #808080;
  text-align: center;
}

/**end of the head **/
.kylin {
  height: 80%;
  margin-bottom: 50px;
}

.page {
  padding-bottom: 35px;
}

.kylin-content {
  font-size: 14px;
  height: 100%;
  > .pane {
    margin: 8px 20px 0px 20px;
    border: 1px solid #c4c4c4;
  }
}

.dropdown-menu {
  font-size: 12px !important;
  min-width: 110px
}

.cube_model_trees .dropdown-menu{
  min-width: 60px;
}

.cube_model_trees a{
  margin-right:0px !important;
}

.login {
  position: fixed;
  width: 325px;
  height: 400px;
  top: 40%;
  left: 50%;
  margin-top: -140px;
  margin-left: -170px;
  background: #fff;
  border-radius: 3px;
  border: 1px solid #ccc;
  box-shadow: 0 1px 2px rgba(0, 0, 0, .1);
  -webkit-animation-name: bounceIn;
  -webkit-animation-fill-mode: both;
  -webkit-animation-duration: 1s;
  -webkit-animation-iteration-count: 1;
  -webkit-animation-timing-function: linear;
  -moz-animation-name: bounceIn;
  -moz-animation-fill-mode: both;
  -moz-animation-duration: 1s;
  -moz-animation-iteration-count: 1;
  -moz-animation-timing-function: linear;
  animation-name: bounceIn;
  animation-fill-mode: both;
  animation-duration: 1s;
  animation-iteration-count: 1;
  animation-timing-function: linear;

  form {
    margin: 0 auto;
  }
  span {
    margin-left: 30px;
    display: inline-block;
  }
  p {
    width: 300px;
    padding-top: 10px;
    margin-left: 10px;
    font-size: 14px;
    display: inline-block;
  }
  label {
    color: #555;
    display: inline-block;
    margin-left: 30px;
    padding-top: 10px;
    font-size: 16px;
  }
  input {
    color: #555;
    font-size: 16px;
    padding-left: 10px;
    margin: 10px;
    margin-top: 12px;
    margin-left: 30px;
    width: 290px;
    height: 35px;
    border: 1px solid #c7d0d2;
    border-radius: 2px;
    box-shadow: inset 0 1.5px 3px rgba(190, 190, 190, .4), 0 0 0 5px #f5f7f8;
    -webkit-transition: all .4s ease;
    -moz-transition: all .4s ease;
    transition: all .4s ease;
  }
}

/**Table Style**/
.table-header-text {
  color: #707070;
}

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

.table-hover > tbody > tr:hover > td, .table-hover > tbody > tr:hover > th {
  background-color: #BBE9FF;
}

.table-striped > tbody > tr:nth-child(odd).tr-highlight > td,
.table-striped > tbody > tr:nth-child(odd).tr-highlight > th,
.table-striped > tbody > tr:nth-child(even).tr-highlight > td,
.table-striped > tbody > tr:nth-child(even).tr-highlight > th {
  background-color: #8adbff;
}

.dot-line {
  border-bottom: 1px dashed #494949;
}

table .radio {
  display: block;
  min-height: 0px;
  padding-left: 0px;
  margin-top: 0px;
  margin-bottom: 0px;
  vertical-align: middle;
}

.action-btn {
  text-align: center;
  float: left;
  margin-right: 0.2em;
  width: 1.6em;
  font-size: 1.2em;
  padding-top: .1em;
  border-radius: .2em;
  background-color: #8adbff;
  -webkit-box-shadow: 0 0px 1px rgba(0, 0, 0, .2);
  -moz-box-shadow: 0 0px 1px rgba(0, 0, 0, .2);
  box-shadow: 0 0px 1px rgba(0, 0, 0, .2);
  text-shadow: 0 1px rgba(255, 255, 255, .4);
}

.action-btn:hover {
  background-color: #079ee0;
  cursor: pointer;
  color: white;
  text-shadow: 0 -1px #000;
}

.fs1 {
  font-size: 1.3em;
  margin-right: .5em;
  float: left;
}

.fs2 {
  font-size: 1.1em;
  margin-right: .5em;
  float: left;
  margin-top: -.2em;
}

.details-btn {
  width: 4.8em;
  font-size: 1em;
  padding: .25em;
}

.ace_editor {
  height: 120px;
  position: relative;
  overflow: hidden;
  font-family: 'source-code-pro', monospace;
  font-size: 14px;
  line-height: normal;
  direction: ltr;
}

.kylin_title {
  color: dimgrey;
  font-size: 22px
}

.cube-detail {
  background-color: white;
  .cube-segment-list {
    margin-bottom:10px;
    padding: 4px 8px;
    border:solid 1px #ddd;
    ul {
      li {
        font-weight: 500;
        span {
          font-weight: normal;
        }
      }
    }
    &.cube-broken-segment {
      color:#808080;
      opacity: 0.6;
      border-color: #808080;
      border-style: dashed;
    }
  }
}

.model-detail {
  background-color: white;
}

/* Query content */
.query-content {
  padding-bottom: 10px;

  pre {
    background-color: white;
    border: 0px;
  }

  label {
    font-size: 16px;
  }
  .query-results {
    padding: 10px;
  }
}

.fullscreen-result {
  position: fixed !important;
  margin: 0px !important;
  left: 0px !important;
  right: 0px !important;
  top: 0px !important;
  bottom: 79px !important;
  height: 100% !important;
  width: 100% !important;
  z-index: 1040 !important;
  display: block !important;
  background-color: #fbfbfc;
}

.home_query {
  background-color: #62c462;
  width: 100%;
  text-align: center;
  height: 150px;
}

.home_query:hover {
}

.home_tables {
  background-color: #f89406;
  width: 100%;
  text-align: center;
  height: 150px
}

.home_tables:hover {
}

.home_cubes {
  background-color: #FF9966;
  width: 100%;
  text-align: center;
  height: 150px
}

.home_cubes:hover {
}

.home_jobs {
  background-color: #5bc0de;
  width: 100%;
  text-align: center;
  height: 150px
}

.home_jobs:hover {
}

body .modal-dialog {
  width: 80%; /* desired relative width */
  height: 90%;
  //  left: 5%; /* (100%-width)/2 */
  /* place center */
  margin-left: auto;
  margin-right: auto;
}

pre {
  width: inherit;
  height: 350px;
  overflow: scroll;
  word-wrap: normal;
  white-space: pre;
}

.graph_content {
  padding: 20px 0px 5px 0px;
  label {
    color: dimgray;
    padding: 5px 0px 5px 0px;
  }
}

.table > tbody + tbody {
  border-top: 0px solid #1c1e22;
}

//cube graph
.model_graph {
  svg {
    width: auto;
    height: auto;
  }
}

.node {
  cursor: pointer;
}

.node circle {
  stroke: steelblue;
  stroke-width: 1.5px;
}

.node text {
  font: 10px sans-serif;
}

.link {
  fill: none;
  stroke: #ccc;
  stroke-width: 1.5px;
}

.nav-tabs > li > a {
  color: #333;
}

.table_text_center > tbody > tr > th,
.table_text_center > tbody > tr > td {
  text-align: center;
}

.gridStyle {
  border: 1px solid rgb(212, 212, 212);
}

.metadata_tree_column {
  padding: 1px 10px;
  background: url("../image/icon_table.png") no-repeat;
}

.nav-pills > li {
  cursor: pointer;
  //background-color: #094868;
}

.alert-info {
  color: #31708f;
  background-color: #d9edf7;
  border-color: #bce8f1;
}

/** tree widget **/
treecontrol {
  font-family: Arial, sans-serif;
  font-size: 13px;
  color: #3a87ad;
}

treecontrol > ul {
  //  width: 310px;
  overflow: auto;
}

treecontrol > ul > li {
  padding-left: 0;
}

treecontrol li .tree-label {
  cursor: default;
}

treecontrol li treeitem .tree-label {
  cursor: pointer;
}

treecontrol.tree-light li.tree-collapsed i {
  padding: 1px 10px;
  background: url("../image/database.png") no-repeat;
}

treecontrol.tree-light li.tree-expanded i {
  padding: 1px 10px;
  background: url("../image/database.png") no-repeat;
}

treecontrol.tree-light treeitem li.tree-collapsed i.tree-branch-head {
  padding: 1px 10px;
  background: url("../image/table-icon.png") no-repeat;
}

treecontrol.tree-light treeitem li.tree-expanded i.tree-branch-head {
  padding: 1px 10px;
  background: url("../image/table-icon.png") no-repeat;
}

treecontrol.tree-light li.tree-leaf i {
  padding: 1px 10px;
  width: 16px;
  height: 16px;
  background: none no-repeat;
}

.navbar_default {
  background-color: #2a2a00 !important;
}

.font_color {
  color: #1E4B79;
  font-size: 20px;
  padding-top: 16px;
}

.table-center {
  th {
    text-align: center;
  }

  td {
    text-align: center;
  }
}

.overview-box {
  width: 40%;
  margin-left: 5%;
  padding: 0px;
}

.header-button {
  text-align: center;
  border-width: 4px;
  background-color: #87b87f !important;
  border-color: #87b87f !important;
}

.font-color-default {
  color: #808080;
}

.wizard-steps li.active .step, .wizard-steps li.active:before {
  border-color: yellowgreen;
}

.modal-content-default {
  background-color: #BED9F7;
  padding: 12px;
}

.modal-content-default {
  background-color: #ffffff;
}

.tab-style {
  padding-top: 15px;
  padding-bottom: 5px;
  font-size: 15px;
  margin-left: 0px;
  border: 0px;
  background-color: #ffffff;
}

.table-bordered, .table-bordered > tbody > tr > td, .table-bordered > tbody > tr > th, .table-bordered > tfoot > tr > td, .table-bordered > tfoot > tr > th, .table-bordered > thead > tr > td, .table-bordered > thead > tr > th {
  border: 1px solid #ddd;
}

.table > tbody > tr > td, .table > tbody > tr > th, .table > tfoot > tr > td, .table > tfoot > tr > th, .table > thead > tr > td, .table > thead > tr > th {
  padding: 8px;
  line-height: 1.42857143;
  vertical-align: top;
  border-top: 1px solid #ddd;
}

.table > tbody {
  word-break: break-all;
  word-wrap: break-word;
}

//overlay for loading request
.loadingOverlay {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1998;
  width: 100%;
  height: 100%;
  _padding: 0 20px 0 0;
  background: #f6f4f5;
  display: none;
}

.showbox {
  position: fixed;
  top: 0;
  left: 50%;
  z-index: 9999;
  opacity: 0;
  filter: alpha(opacity=0);
  margin-left: -80px;
}

*html, *html body {
  background-image: url(about:blank);
  background-attachment: fixed;
}

//*html .showbox,*html .loadingOverlay{position:absolute;top:expression(eval(document.documentElement.scrollTop));}
#loadingCntnr {
  //  border:1px solid #8CBEDA;color:#37a;font-size:18px;font-weight:bold;
  color: #797979;
  font-size: 16px;
  font-weight: 300;
  line-height: normal;
}

#loadingCntnr div.loadingWord {
  width: 200px;
  height: 70px;
  line-height: 70px;
  border: 2px solid #D6E7F2;
  background: #fff;
}

#loadingCntnr img {
  margin: 17px 15px;
  float: left;
  display: inline;
}

/** Customization for Messenger **/
/** The top lower **/
ul.messenger.messenger-fixed.messenger-on-top {
  top: 100px;
}

/** Set max height and overflow auto **/
ul.messenger.messenger-fixed.messenger-on-top .messenger-message .messenger-message-inner {
  max-height: 500px;
  overflow-y: auto;
}

/** Enable the text selectable on notification of Messenger **/
ul.messenger .messenger-message-inner, .ngCellText {
  -moz-user-select: text;
  -webkit-user-select: text;
  -o-user-select: text;
  user-select: text;
}

.load-hive-metawrapper input[type="radio"] {
  margin-left: 0px !important;
}

/** cube data model and dimensions **/
.table-name-underline {
  margin: 0 0 5px 0;
  border-bottom: 1px dashed #ddd;
  padding-bottom: 3px;
}

.columns-region, .dimensions-region {
  max-height: 400px;
  overflow: auto;
}

.dimensions-region li {
  cursor: pointer;
}

.dimensions-region li:hover {
  background: #f6f6f6;
}

.dimensions-region li.active {
  background-color: lightskyblue;
}

/** cube dimension hierarchy sortable styles **/
.hierarchy-item, .hierarchy-item-placeholder {
  margin: 1px 2px 5px 1px;
  border-radius: 5px;
  background-color: #ffffff;
}

.hierarchy-item {
  border: solid 1px darkgrey;
  cursor: move;
}

.hierarchy-item-placeholder {
  border: 1px dotted #0000ff !important;
}

.dimensions-conflict-area {
  max-height: 300px;
  overflow-y: auto;
}

.models-tree .list-group-item:last-child {
  border-radius: 0px !important;
}

.models-tree .list-group-item:first-child {
  border-radius: 0px !important;
}

.cube-models-cntnr.ng-hide-add {
  -webkit-animation: slideOutLeft 0.5s;;
  animation: slideOutLeft 0.5s;;
  display: block !important;
}

.cube-models-cntnr.ng-hide-add + div {
  //  width: 100%;
  right: 0px;
  position: absolute;
  float: right;
  -webkit-transition: width 0.5s;;
  -moz-transition: width 0.5s;;
  -o-transition: width 0.5s;;
  transition: width 0.5s;;
}

.cube-models-cntnr.ng-hide-remove {
  -webkit-animation: slideInLeft 0.5s;;
  animation: slideInLeft 0.5s;;
}

.cube-models-cntnr.ng-hide-remove + div {
  position: absolute;
  right: 0;
  width: 75%;
  -webkit-transition: width 0.5s;;
  -moz-transition: width 0.5s;;
  -o-transition: width 0.5s;;
  transition: width 0.5s;;
}

.form-group.required .control-label:after {
  content: "*";
  color: red;
}

.streamingParserCtr .chosen-container {
  width: 200px !important;
}

.progress.progress-striped {
  background-color: #DCDCDC;
}

.clone-cube-window .modal-dialog {
  width: 600px; /* desired relative width */
}

.tooltip {
  z-index: 1240000 !important;
}

.paraTree {
  padding: 3px;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  border-radius: 4px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05)
}

.paraTree li {
  list-style-type: none;
  margin: 0;
  padding: 10px 5px 0 5px;
  position: relative
}

.paraTree li::before, .paraTree li::after {
  content: '';
  left: -20px;
  position: absolute;
  right: auto
}

.paraTree li::before {
  border-left: 1px solid #999;
  bottom: 50px;
  height: 100%;
  top: 0;
  width: 1px
}

.paraTree li::after {
  border-top: 1px solid #999;
  height: 20px;
  top: 25px;
  width: 25px
}

.paraTree li span {
  -moz-border-radius: 5px;
  -webkit-border-radius: 5px;
  border: 1px solid #999;
  border-radius: 5px;
  display: inline-block;
  padding: 3px 8px;
  text-decoration: none
}

.paraTree li.sub_li > span {
  cursor: pointer
}

.paraTree > ul > li::before, .paraTree > ul > li::after {
  border: 0
}

.paraTree li:last-child::before {
  height: 30px
}

.paraTree li.sub_li > span:hover, .paraTree li.sub_li > span:hover + ul li span {
  background: #eee;
  border: 1px solid #94a0b4;
  color: #000
}

.chosen-container .chosen-results li.active-result {
  word-break: break-all;
}

input[placeholder] {
  text-overflow: ellipsis;
}

::-moz-placeholder {
  text-overflow: ellipsis;
}

/* firefox 19+ */
input:-moz-placeholder {
  text-overflow: ellipsis;
}

.dropdown-menu {
  z-index: 9999;
}

.panel-group .panel {
  overflow: visible !important;
}

.middle-popover .popover {
  width: 360px;
  max-width: 360px;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-size: 14px;
  line-height: 1.428571429;
  color: #808080;
  background-color: #ffffff;
}

.middle-popover .popover-content, .large-popover .popover-content {
  font-size: 13px;
  font-weight: normal;
  line-height: 18px;
  display: inline-flex;
  display: -webkit-inline-flex;
  word-break: normal;
}

.middle-popover .popover-content ol, .large-popover .popover-content ol {
  -webkit-padding-start: 20px;
  padding-start: 20px;
}

.large-popover .popover {
  width: 600px;
  max-width: 600px;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-size: 14px;
  color: #808080;
  line-height: 1.428571429;
  background-color: #ffffff;
}

pre {
  white-space: pre-wrap;
  white-space: -moz-pre-wrap;
  white-space: -pre-wrap;
  white-space: -o-pre-wrap;
  word-wrap: break-word;
}
/* dashboard page style*/
.square {
  border: 2px solid #ddd;
  text-align: center;
  width: 215px;
  height: 170px;
  cursor: zoom-in;
  padding-top: 15px;
  padding-bottom: 15px;
  .title {
    font-size: 22px;
    height: 60px;
  }
  .metric {
    font-size: 35px ;
    font-weight: bolder;
    color: #8b1;
    display: inline-block;
    white-space: nowrap;
    .unit {
      font-size: 16px;
    }
  }
  .description {
    font-size: 15px;
    color: #6a6a6a;
    display: block;
  }
}
.square-active {
  border: 2px solid #6a6a6a;
}
.square-big {
  border: 5px solid #ddd;
  text-align: center;
  width: 165px;
  height: 240px;
  padding: 20px 0;
  margin-bottom: 20px;
  .title {
    font-size: 24px;
    height: 55px;
  }
  .metric {
    padding: 15px 0;
    font-size: 50px ;
    font-weight: bolder;
    height: 100px;
    color: #06d;
    .unit {
      font-size: 35px;
    }
  }
  .description {
    font-size: 18px;
    color: #6a6a6a;
  }
}
/* cube planner*/
.cube-planner-column {
  margin: 0 60px;
  table {
    border: 0;
    tr {
      font-weight: bolder;
      color: #EEEEEE;
      th {
        text-align: center;
        vertical-align: middle;
        width: 20%;
        padding: 2px;
      }
      .column-in-cuobid {
        color: #9E9E9E;
        font-weight: bolder;
      }
      .column-not-in-cuboid {
        color: #EEEEEE;
        font-weight: bolder;
      }
    }
  }
}
/*query page cube popover*/
div[title="Cube Info Detail"].popover {
  max-width: 1024px;
  with: min-content;
}
/*snapshot usage info tooltip*/
td.snapshot-usage .tooltip {
  font-size: 16px;
}
td.snapshot-usage .tooltip-inner {
  max-width: 1024px;
}

div[ng-controller="ModelConditionsSettingsCtrl"] {
  .format-input {
    margin-top: 15px;
  }
  select.col-5 + .chosen-container {
    width: 49% !important;
  }
  .format-input.col-5 {
    display: inline-block;
    width: 49%;
    margin-top: 0;
  }
}

.form-title {
  font-size: 24px;
  color: #3A87AD;
  line-height: 1;
  margin: 0;
}

#main {
  min-height: 100vh;
}

div[ng-controller="HybridInstanceSchema"],
div.hybrid-detail {
  .form-title {
    margin-bottom: 43px;
  }
  .control-label {
    margin-top: 7px;
  }
  .split-line {
    border-bottom: 1px solid #DDDDDD;
    margin: 5px 0 20px 0;
  }
  .table {
    margin-bottom: 0;
  }
  .table-header {
    box-sizing: border-box;
    border: 1px solid #DDDDDD;
    border-bottom: none;
  }
  .transter-actions {
    position: relative;
    top: 50%;
    transform: translateY(-50%);
  }
  .transter-action-item {
    text-align: center;
    margin-bottom: 10px;
  }
  .transter-action-item i {
    width: 32px;
    height: 32px;
    display: inline-block;
    cursor: pointer;
    background: #FFFFFF;
    border: 1px solid #DDDDDD;
    border-radius: 2px;
    padding-top: 7px;
    color: #808080;
    font-size: 16px;
    &:hover {
      border-color: #3A87AD;
      color: #3A87AD;
    }
  }
  .data-empty {
    text-align: center;
    font-size: 14px;
    color: #808080;
    line-height: 22px;
    padding: 8px 0;
    border: 1px solid #DDDDDD;
  }
  .col-xs-5 {
    z-index: 1;
  }
  .fix-height-table {
    max-height: 408px;
    overflow: auto;
  }
  .edit-operator {
    position: relative;
    margin-bottom: 30px;
  }
  div[tooltip] + .tooltip {
    white-space: nowrap;
    .tooltip-inner {
      max-width: 1000px;
    }
  }
  .table-checkbox {
    text-align: center;
    width: 38px;
    height: 38px;
    img {
      cursor: pointer;
    }
  }
  .status-center {
    text-align: center;
    width: 150px;
  }
}

.kylin-icon-hybrid {
  margin-right: 10px;
}
.col-xs-offset-5 {
  margin-left: 41.66666667%;
}

.text-info {
  font-size: 18px;
  color: #263238;
}

div.hybrid-detail {
  .modal-dialog {
    width: 600px;
  }
}

/* customize tag input style*/
tags-input.bootstrap .tags .tag-item{
  background: #3c8dbc !important;
  display: inline;
  padding: .2em .6em .3em;
  font-size: 75%;
  font-weight: bold;
  line-height: 1;
  color: #fff;
  text-align: center;
  white-space: nowrap;
  vertical-align: baseline;
  border-radius: .25em;
  border: none;
  margin: 3px;
  height: inherit;
}
tags-input .tags .tag-item {
  .remove-button {
    color: #fff;
  }
  .remove-button:active {
    color: #585858;
  }
}
/* cube streaming style*/
.cube-receiver-stats {
  text-align: center;
  border: 1px solid #ffffff;
  cursor: pointer;
  background-color: #fafafa;
  padding-top: 5px;
  padding-bottom: 5px;
  height: 100px;
  .node-info {
    font-size: 18px;
    height: 25px;
    text-overflow: ellipsis;
    color: #455A64;
  }
  .rate-metric {
    font-size: 22px;
    font-weight: bold;
    height: 30px;
  }
  .fast {
    color: #00a65a !important;
  }
  .slow {
    color: #dd4b39 !important;
  }
  .unit {
    font-size: 16px;
  }
  .detail-metric {
    font-size: 12px;
    font-weight: bold;
    color: #BDBDBD;
    padding: 0;
  }
}
.segment .active{
  color: #3c8dbc !important;
}
.cube-streaming-stats-modal .modal-dialog{
  margin-top: 150px;
  max-width: 800px;
}
.receiver-stats-modal .modal-dialog{
  margin-top: 100px;
  max-width: 600px;
}
.pagination{
  cursor: pointer;
}