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

 @import "variables.less";

/* ajax loader */
.loader {
  background: url('../img/loader.gif') center center no-repeat;
  min-height:  100px;
}

#main {
  position: relative;
  overflow: hidden;
  height: 100%;
}

#global-notifications {
  position: fixed;
  top: 0;
  display: block;
  z-index: 100000;
  width: 100%;
}

#app-container {
  height: 100vh;
  position: relative;
  overflow: hidden;
}

@media screen and (max-height: 600px) {
  #primary-navbar {
    overflow-y: auto;
  }
}

@media screen and ( min-height: 600px ){
  #primary-navbar {
    overflow-y: hidden;
  }
}

.bottom-border {
  border-bottom: 1px solid #999;
}

.bottom-left-border {
  border-bottom: 1px solid #999;
  border-left: 1px solid #999;
}


#dashboard {
  position: relative;
  left: @navWidth;
  padding-left: 0;
  background-color: @sidebarBG;
  height: 100%;
  width: 100%;
  .closeMenu & {
    left: @collapsedNavWidth;
  }
}

.wrapper {
  position: relative;
  overflow: hidden;
  height: 100%;
}

.one-pane {
  #dashboard-content {
    top: @collapsedNavWidth;
    .view {
      padding-bottom: 30px;
    }
  }
}

.two-pane {
  .inner {
    padding-bottom: @collapsedNavWidth;
  }
}

#sidebar-content {
  width: @sidebarWidth;
  background-color: @secondarySidebar;
  > div.inner {
    display: block;
  }
  .nav-list:last-child {
    margin-bottom: 30px;
  }
}

.scrollable {
  height: auto;
  overflow-y: auto;
  overflow-x: hidden;
  width: 100%;
  position: absolute;
  padding: 0;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
}

.pusher {
  overflow: hidden;
  position: relative;
  height: 100%;
  left: 0;
  padding-right: @navWidth;
  .closeMenu & {
    padding-right: @collapsedNavWidth;
  }
}

.right-header-wrapper {
  overflow-x: hidden;
  height: @collapsedNavWidth;
}

.header-wrapper {
  .bottom-border();
  .box-shadow(0 1px 0 0 rgba(0, 0, 0, 0.1));
  position: absolute;
  left: 0;
  right: 0;
  /*z-index: 50; */
}

#app-container > div {
  position: relative;
  height: 100%;
}

/* SIDEBAR TEMPLATE STYLES */
.topmenu-defaults {
  height: 70px;
  padding: 12px 10px 0;
  .box-sizing(border-box);
}

/* used in addons/changes */
.dashboard-upper-menu {
  border-left: 1px solid #999;
  right: 0;
  left: @sidebarWidth+@navWidth;
  position: fixed;
  display: block;

  .topmenu-defaults;
  background-color: #CBCBCB;
  .closeMenu & {
    left: @sidebarWidth+@collapsedNavWidth;
  }
}

#dashboard-lower-content {
  padding: 20px;
  background-color: #F1F1F1;
  position: relative;
}

#dashboard-content {

  & > div {
    padding: @panelPadding;
  }

  &.row-fluid {
    /*remove gutter without rewriting variable*/
    margin-left: 0px;
  }

  .with-sidebar & {
    border-left: 1px solid @grayLight;
    .left-border();
    width: auto;
    padding: 15px;
    bottom: 0px;
    top: @collapsedNavWidth;
    position: absolute;
    left: @sidebarWidth;
    right: 0;
    .box-sizing(border-box);
  }
  .with-tabs-sidebar & {
    overflow: hidden;
  }

  > div.inner {
    display: block;
  }
}

/*
  Sidenav:
  USED IN DOCUMENT ADDON & EXTERNAL ADDONS
*/
.sidenav {
  padding: 0;
  header {
    width: @sidebarWidth;
    border-bottom: 1px solid #d3d7db;
  }
  .nav-list {
    .divider {
      border: none;
    }
    > li > a:hover {
      background-color: @hoverHighlight;
      color: #fff;
    }
    li.active > a {
      color: @brandHighlight;
    }
    > li > a {
      color: #333333;
      padding: 10px 13px 10px 24px;
      border-bottom: 1px solid #d3d7db;
      span {
        margin-right: 8px;
        width: 14px;
        display: inline-block;
        text-align: center;
      }
    }
    a {
      display: block;
      padding: 10px 5px 5px 15px;
      color: @subListGray;
      .divider {
        background: none;
        color: #ccc;
        padding: 0 2px;
      }
    }
    .nav-header {
      padding: 0px;
      text-shadow: none;
      color: #333333;
      & > span:hover {
        color: @linkColor;
      }
    }
  }
}

.row-fluid.content-area {
  background-color: @background;
}

.two-pane {
  .content-area {
    height: 100%;
    top: @collapsedNavWidth;
    position: relative;
  }

  #right-content {
    .view {
      padding: 0 0 40px;
    }
    border-left: 1px solid #999;
  }
  .right-header-wrapper {
    border-left: 1px solid #999;
    .faux-header__searchboxwrapper {
      display: none;
    }
  }
}

.notification-wrapper {
  opacity: 0;
  height: 0;
}
