//  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;}

a {
  .transition(all .25s linear);
}

// 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;
}

a:hover {
  color: @linkColorHover;
}

/* 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;
    }
  }
}

/*TABLE STYLES*/
table.table {
  table-layout: fixed;
}
table tr td{
  word-wrap: break-word;
  &.select {
    width: 20px;
  }
}
thead {
  border-bottom: 2px solid @brandPrimary;
}
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;
    .box-shadow(0px 4px 0px rgba(0,0,0,0.45));
    .border-radius(0);
    border-bottom: 1px solid #3a2c2b;
    box-shadow: 0 4px 0 0 rgba(0, 0, 0, 0.4);
    a, a:hover {
      color: #cecece;
      text-decoration: underline;
    }
    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-shadow-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: #E33F3B;
}

.Select-option:hover {
  background-color: #E33F3B;
}

.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: #E73D34;
}


//----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: 1000px) {
  .closeMenu {
    .with-sidebar {
      .faux-header__searchboxwrapper {
        display: none;
      }
    }
  }
}

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

@media (max-width: 1285px) {
  body: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) {
  body.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) {
  body.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: 130px;
        }
        .api-bar-tray:before {
          right: 68px;
        }
      }
    }
  }
}

@media (max-width: 1339px) {
  body: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) {
  body: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;
        }
        .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: @hoverRed;
      color: white;
    }
  }
  td {
    vertical-align: middle;
  }
}
