//  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";
@import "bootstrap/bootstrap.less";
@import "bootstrap/mixins.less";
@import "../../node_modules/react-select/less/default.less";

#grid {
  .core  {
    .span(@gridColumns) {
      width: (@gridColumnWidth * @gridColumns) + (@gridGutterWidth * (@gridColumns - 1));
    }
  }
};


@import "layouts.less";
@import "prettyprint.less";
@import "icons.less";
@import "code-editors.less";
@import "templates.less";
@import "formstyles.less";
@import "pagination.less";
@import "trays.less";
@import "mixins.less";
@import "animations.less";
@import "react-animations.less";
@import "notification-center.less";

/**
 * HTML-wide overrides
 **/

*, *:before, *:after {
  .box-sizing(border-box);
}

html {
  height: 100%;
}

body {
  font-size: 16px;
  line-height:1.3;
  padding-bottom: 0px;
  color: #333;
  height: 100%;
  background-color: @sidebarBG;
}

h2,h3,h4 {font-weight: 600;}

// remove blue borders from clicked elements
button:focus, a:focus {
  outline: 0;
}

.table input[type="checkbox"] {
  margin: 0 0 0 8px;
}

a,
a:visited,
a:active {
  color: @linkColor;
  text-decoration: none;
}

a:hover {
  color: @linkColorHover;
  text-decoration: none;
}

/* bootstrap overrides */
.page-header {
  border-bottom: 1px solid #E3E3E3;
  margin-bottom: 10px;
  h3 {
    text-transform: capitalize;
    margin-bottom: 0;
  }
}

.nav-tabs > li {
  margin-right: 2px;
  > a {
    cursor: pointer;
    color: #333;
    border-color: #eeeeee #eeeeee #dddddd;
    text-decoration: none;
    background-color: #eeeeee;
    border-radius: 0;
    border-left: none;
    border-right: none;
    &:hover,
    &:focus {
      background-color: @linkColor;
      border-top: 1px solid @linkColor;
      color: white;
    }
  }
}

.well {
  select {
    margin: 0;
  }
  .controls-group {
    &:first-child,
    &:last-child {
      margin-top: 24px;
    }
    margin-bottom: 8px;
  }
  .controls-row {
    margin-bottom: 8px;
  }
  .row-fluid {
    margin: 0;
  }
  .row-fluid .row-fluid:last-child .well-item {
    border: none;
  }
  .well-item {
    color: #666;
    font-size: 12px;
    border-bottom: 1px solid #e5e5e5;
    padding: 8px 4px;
    strong {
      font-size: 16px;
    }
  }
}

.modal {
  transform: translateX(-50%);
  margin-left: inherit;
}

.modal-dialog {
  display: flex;
  flex-direction: row;
}

.modal-content {
  flex: 1;
  width: 560px;
}

/*TABLE STYLES*/
table.table {
  table-layout: fixed;
}
table tr td{
  word-wrap: break-word;
  &.select {
    width: 20px;
  }
}
thead {
  border-bottom: 2px solid #333;
}
tbody {
  padding-top: 10px;
}
.table-condensed td {
  padding: 18px 5px;
}
.table-striped tbody > tr:nth-child(odd) > td,
.table-striped tbody > tr:nth-child(odd) > th {
  background-color: #F7F7F7;
}

/**
 * Fauxton-specific Bootstrap additions
 **/
table.databases {
  clear: both;
}
.nav-tabs > li > a .fonticon:before {
  margin-right: 6px;
  font-size: 16px;
}

// customize the twitter bootstrap alert
.global-notification {
  &.alert {
    padding-left: 20px;
    padding-top: 20px;
    min-height: @collapsedNavWidth;
    margin-bottom: auto;
    text-shadow: none;
    .border-radius(0);
    border-bottom: 1px solid @brandDark2;
    a, a:hover {
      color: #cecece;
      text-decoration: none;
    }
    a.js-dismiss {
      color: rgba(255, 255, 255, 1);
    }
    a.js-dismiss :hover {
      color: rgba(255, 255, 255, 0.4);
    }
  }
  &.alert-success {
    background-color: #448c11;
    color: #CBDFBD;
  }
  &.alert-success h4 {
    color: #CBDFBD;
  }
  &.alert-danger,
  &.alert-error {
    background-color: #222;
    color: #ff0c35;
  }
  &.alert-danger h4,
  &.alert-error h4 {
    color: #ff0c35;
  }
  &.alert-info {
    background-color: #329898;
    color: #fff;
  }
  &.alert-info h4 {
    color: #fff;
  }
}


.notification-icon {
  padding-right: 8px;
}

#dashboard-upper-content{
  .tab-content {
    padding-top: 70px;
  }

  .well{
    padding: 20px;
    .border-radius(0);
    .box-shadow(none);
  }
}

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

/*ONE PANEL TEMPLATE ONLY STYLES  AKA _all_dbs */

.result-tools{
  border-bottom: 1px solid #999999;
  padding: 10px 0;
  float: left;
  width: 100%;
  margin-bottom: 10px;
}

#db-views-tabs-nav {
  position: fixed;
  z-index: 1;
  margin-top: 19px;
  margin-bottom: 0;
  /*background-color: #f4f4f4;*/
  padding: 0 20px;
}

.db-views-smaller {
  max-width: 500px;
}

/** table row selector thing **/
.select{
  > a{
    display: block;
    padding: 5px 15px 5px 5px;
    border: 1px solid #989898;
    position: relative;
    background-color: #FFFFFF;
    color: #666666;
    &:after {
      content: '';
      width: 0;
      height: 0;
      border-left: 7px solid transparent;
      border-right: 7px solid transparent;
      border-top: 7px solid #989898;
      position: absolute;
      right: 9px;
      top: 12px;
    }
    &:before{
      content: '';
      border-left:  1px solid #989898;
      height: 30px;
      position: absolute;
      right: 30px;
      top: 0;
    }
  }
}

/*documents and databases */

.view.show{
  color: @fontGrey;
}


// legacy - remove when soft migration to header toggles is complete
// missing: add_config_option
.header-icon {
  font-size: 20px;
  &:before {
    float: left;
    margin: 10px 6px 0px 0px;
  }
}


.js-filter-form {
  .help-block {
    padding: 5px 0 5px 0;
  }
  .icon {
    font-size: 16px;
  }
}


//---header--//
#dashboard > header {
  background-color: @breadcrumbBG;
  height: 64px;

  /* the position absolute is necessary to allow the 6px box shadow overlap the panels below. The parent <header>
   ensures the flexbox height is respected */
  &>div {
    height: 65px;
    .bottom-border();
    position: absolute;
    width: 100%;
    z-index: 2; /* needed because ace's selected row has a z-index of 1 & can't be overridden */
  }
}

.header-right {
  .well {
    padding: 0;
    margin: 0;
  }
}


.faux-header__searchboxwrapper {
  overflow: visible;
  height: 64px;
  width: 235px;
}

.faux-header__searchboxcontainer {
  height: @collapsedNavWidth;
  overflow: visible;
  position: absolute;
  padding: 12px;
}

.faux-header__searchboxcontainer {
  .Select-control, .Select-menu-outer {
    width: 210px;
  }
}

// this allows the results expand as much as need be when the component is used in the header
.Select-menu-outer {
  &>div>div {
    padding-right: 25px; // prevents overlapping of auto-generated scrollbar
  }
  min-width: 210px;
  max-width: 450px;
  width: auto;
}

// react-select color design
.Select div.Select-control {
  border-radius: initial;
  border: none;
}

.Select .Select-menu-outer {
  border-radius: inherit;
  border: none;
}

.Select-option {
  color: #fff;
  background-color: #333333;
}

.Select .is-focused {
  background-color: @hoverHighlight;
}

.Select-option:hover {
  background-color: @hoverHighlight;
}

.Select-option:last-child {
  border-radius: initial;
}

.Select .is-focused:not(.is-open) > .Select-control {
  box-shadow: transparent;
}

.Select-option.is-selected {
  color: #fff;
}

.Select .Select-menu {
  max-height: 291px;
  background-color: #333333;
}
.Select-arrow-zone > .Select-arrow {
  border-top-color: #333;

}

.Select-arrow-zone:hover > .Select-arrow {
  border-top-color: @hoverHighlight;
}


//----footer--///

footer.pagination-footer {
  background-color: #fff;
  border-top: 1px solid #ccc;
  height: 50px;
  overflow: hidden;

  font-size: 14px;

  .pagination {
    .box-shadow(none);
    margin: 0;
    height: 50px;
    border-left: 1px solid #ccc;
    li {
      display: inline-block;
      a {
        padding: 15px 10px 15px 15px;
        border: none;
      }
    }
  }

  .page-controls {
    float: left;

  }

  .current-databases,
  .current-docs {
    float: right;
    margin: 17px 20px 17px 20px;
  }

  .documents-pagination {
    float: right;
  }
  #per-page {
    float: right;
    top: 2px;
    #select-per-page {
      margin-top: 10px;
    }
  }
}

#right-content {
  footer.pagination-footer {
    bottom: @collapsedNavWidth;
  }
}

#primary-nav-right-shadow {
  position: absolute;
  top: 0px;
  right: 0px;
  bottom: 0px;
  background-color: rgba(0, 0, 0, 0.1);
  width: 6px;
  z-index: 6;
}

.modal-title {
  font-size: 22px;
  margin: 0;
  line-height: 30px;
}

.modal-footer {
  background-color: transparent;
  border-top: none;
  color: #666;
}

.modal-footer a {
  color: #666;
}

.modal-header {
  border-bottom: 1px solid #666;
}

.simple-header {
  font-weight: 400;
  font-size: 15pt;
  border-bottom: 1px solid #cccccc;
  margin-bottom: 30px;
  margin-top: 0;
}

// left navigationbar is opened
@media (max-width: 730px) {
  .closeMenu {
    .one-pane {
      .faux-header__searchboxwrapper {
        display: none;
      }
    }
  }
}

@media (max-width: 860px) {
  .closeMenu {
    .with-sidebar {
      .faux-header__searchboxwrapper {
        display: none;
      }
    }
  }
}

// left navigationbar is closed
@media (max-width: 875px) {
  #main:not(.closeMenu) {
    .one-pane {
      .faux-header__searchboxwrapper {
        display: none;
      }
    }
  }
}

@media (max-width: 1015px) {
  #main:not(.closeMenu) {
    .with-sidebar {
      .faux-header__searchboxwrapper {
        display: none;
      }
    }
  }
}

body .control-toggle-include-docs span {
  margin-left: 0;
  &::before {
    content: "Include Docs";
  }
}

@media (max-width: 1177px) {
  #main.closeMenu {
    .with-sidebar {
      .two-panel-header {
        .control-toggle-include-docs span::before {
          content: " Docs";
        }
        .right-header button i:before {
          margin: 2px 0 0 0;
        }
      }
    }
  }
}


@media (max-width: 1120px) {
  #main.closeMenu {
    .with-sidebar {
      .two-panel-header {
        .control-toggle-include-docs span::before {
          content: "Docs";
        }
        button:not(.control-toggle-include-docs) span {
          display: none;
        }
        button i:before {
          float: none;
        }
        .right-header button i:before {
          margin: 2px 0 0 0;
        }
        #query-options-tray:before {
          right: 180px;
        }
        .api-bar-tray:before {
          right: 68px;
        }
      }
    }
  }
}

@media (max-width: 1339px) {
  #main:not(.closeMenu) {
    .with-sidebar {
      .two-panel-header {
        .control-toggle-include-docs span::before {
          content: "Docs";
        }
        .right-header button i:before {
          margin: 2px 0 0 0;
        }
      }
    }
  }
}

@media (max-width: 1090px) {
  #main:not(.closeMenu) {
    .with-sidebar {
      .two-panel-header {
        .control-toggle-include-docs span::before {
          content: "Docs";
        }
        button:not(.control-toggle-include-docs) span {
          display: none;
        }
        button i:before {
          float: none;
        }
        #query-options-tray:before {
          right: 180px;
        }
        .right-header button i:before {
          margin: 2px 0 0 0;
        }
      }
    }
  }
}

.capitalize {
  text-transform: capitalize;
}

.fauxton-table-list {
  a.db-actions,
  a.db-actions:visited {
    color: @linkColor;
    border: 1px solid #e3e3e3;
    padding: 5px 7px;
    .border-radius(6px);
    text-decoration: none;
    font-size: 19px;
    &:hover {
      background-color: @hoverHighlight;
      color: white;
    }
  }
  td {
    vertical-align: middle;
  }
}

.btn-space {
  margin-right: 5px;
}

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0,0,0,0);
  border: 0;
}
