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

/*
XXX used variables: only for the IDE, will not really used by the build system, because this
XXX code will be inserted after the _variables.scss
*/
$alert-padding-x: 1.25rem !default;
$border-radius: .25rem !default;
$zindex-dropdown: 1000 !default;
$zindex-popover: 1060 !default;
$spacer: 1rem !default;
$spacer-x: $spacer !default;
$spacer-y: $spacer !default;
$card-spacer-y: .75rem !default;
$form-group-margin-bottom: $spacer-y !default;
$brand-primary: #0275d8 !default;
$link-color: $brand-primary !default;
$link-hover-color: darken($link-color, 15%) !default;
$nav-link-padding: .5em 1em !default;
$blue: #0275d8 !default;
$white: #fff !default;
$gray-100: #f8f9fa !default;
$gray-200: #e9ecef !default;
$gray-300: #dee2e6 !default;
$gray-400: #ced4da !default;
$gray-500: #adb5bd !default;
$gray-600: #6c757d !default;
$gray-700: #495057 !default;
$gray-800: #343a40 !default;
$gray-900: #212529 !default;
$black: #000 !default;
$body-bg: $white !default;
$table-dark-color: $body-bg !default;
$headings-font-weight: 500;
$navbar-dark-active-color: rgba($white, 1) !default;
$navbar-light-active-color: rgba($black, .9) !default;
$border-width: 1px !default;
$input-color: $gray-700 !default;
$input-btn-border-width: $border-width !default; // For form controls and buttons
$input-btn-padding-y: .5rem !default;
$input-btn-padding-x: .75rem !default;
$dropdown-item-padding-x: 1.5rem !default;
$dropdown-item-padding-y: .25rem !default;
$dropdown-link-color: colors("gray-dark") !default;
$component-active-color: $white !default;
$dropdown-link-active-color: $component-active-color !default;
$dropdown-link-disabled-color: $gray-light !default;
$dropdown-link-hover-bg: $gray-lightest !default;
$nav-tabs-link-active-color: #495057 !default;
$nav-link-disabled-color: #868e96 !default;
$btn-primary-color: $white !default;
$btn-secondary-color: colors("gray-dark") !default;
$form-check-input-gutter: 1.25rem !default;
$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;
$input-btn-focus-width: .2rem !default;
$input-btn-focus-color: rgba(theme-color("primary"), .25) !default;
$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;
$input-focus-box-shadow: $input-btn-focus-box-shadow !default;
$form-check-inline-input-margin-x: 0.75rem;
$input-placeholder-color: $gray-600 !default;
$grid-gutter-width: 30px !default;

$page-padding-top: 1rem;

/* used icons ---------------------------------------------------- */

$fa-square-o: "\f096";
$fa-check-square-o: "\f046";
$fa-circle-thin: "\f1db";
$fa-dot-circle-o: "\f192";
$fa-exclamation-triangle: "\f071";
$zero-width-space: "\200b";
$fa-info: "\f129";
$fa-times-circle: "\f057";
$fa-toggle-off: "\f204";
$fa-toggle-on: "\f205";

/* non-bootstrap variabled --------------------------------------- */
$form-disabled-alpha: 0.5;

@mixin tobagoTreeNodeToggle() {
  .tobago-treeNode-toggle:not(.invisible) {
    cursor: pointer;
  }
}

/* badge -------------------------------------------------------------- */
.tobago-badge {
}

.badge.btn {
  border: 0;
}

.btn-group > .tobago-badge.badge.btn {
  z-index: initial;
  cursor: initial;
}

/* bar -------------------------------------------------------------- */
.tobago-bar {
  &.navbar-light .navbar-brand > .tobago-link {
    color: $navbar-light-active-color;

    &:hover, &:focus {
      text-decoration: none;
    }
  }
  &.navbar-dark .navbar-brand > .tobago-link {
    color: $navbar-dark-active-color;

    &:hover, &:focus {
      text-decoration: none;
    }
  }
}

/* box -------------------------------------------------------------- */

.tobago-box {
  margin-bottom: $card-spacer-y;
  > .card-body {
    overflow-x: hidden;
    overflow-y: auto;
  }
}

.tobago-box-header {
  display: flex;
  justify-content: space-between;
  align-content: center;
}

.card-header {

  > h3:first-child {
    margin-bottom: 0;
    align-self: center;
  }

  .navbar {
    padding: 0;
  }
}

/* buttons, links ------------------------------------------------------- */
.tobago-buttons {
  > .tobago-button {
    display: inline-block;
  }
}

.tobago-links {
}

/* button, link ------------------------------------------------------- */
.tobago-button, .tobago-link {
  > :nth-child(n+2) {
    margin-left: .4em;
  }
}

/* button -------------------------------------------------------------- */

.tobago-button {
  cursor: default;
}

a.tobago-button {
  &.btn-primary:focus {
    color: $btn-primary-color;
  }
  &.btn-secondary:focus {
    color: $btn-secondary-color;
  }
}

button.tobago-button {
  &:disabled {
    cursor: not-allowed;

    img, span {
      pointer-events: none;
    }
  }
}

/* collapsible -------------------------------------------------------------- */

.tobago-collapsed.tobago-box .card-body,
.tobago-collapsed.tobago-section .tobago-section-content,
tobago-panel.tobago-collapsed {
  display: none;
}

/* date -------------------------------------------------------------- */

// XXX remove me
.tobago-date {
}

tobago-date input {
  min-width: 7em;

  &::-ms-clear {
    /* Remove IE10's "clear field" X button */
    display: none;
  }
  &:disabled {
    color: rgba($input-color, $form-disabled-alpha);
  }
}

/* for pickers with more than one icon, e.g. date-time picker */
.btn > .fa:nth-child(n+2) {
  margin-left: .3em;
}

vaadin-date-picker-light {
  display: block;
}

/*
XXX workaround for Bootstrap with datetimepicker needed for popups
*/
.bootstrap-datetimepicker-widget {
  z-index: 2000 !important;
}

/* figure -------------------------------------------------------------- */

.tobago-figure {
}

/* file -------------------------------------------------------------- */
.tobago-file {} //TODO remove
tobago-file {
  .custom-file-label {
    &:after {
      font-family: FontAwesome;
      content: "\f07c";
    }

    &.tobago-file-placeholder {
      color: $input-placeholder-color;
    }
  }
}

/* flexLayout -------------------------------------------------------------- */

.tobago-flexLayout {
  min-width: 0;
  /* without this, Firefox/Webkit are different from IE:
     Set the minimal width to zero make flex-layout responsive for the width,
     even if there is overflowing content.
     currently e.g. PRE-code blocks in the demo are too wide. XXX */
  margin-left: -3px;
  margin-right: -3px;

  > * {
    margin-left: 3px;
    margin-right: 3px;
  }

  > .tobago-flexLayout {
    margin-left: 0;
    margin-right: 0;
  }
}

/* the non-label-element inside of a label-layout with flex box */
.tobago-label-container.tobago-flexLayout > {
  .form-control, .form-control-plaintext, vaadin-combo-box-light,
  .tobago-input-group-outer, .tobago-messages-container,
  .tobago-selectManyShuttle {
    flex: 1 0 0px;
  }
}

/* flowLayout ---------------------------------------------------------- */
.tobago-flowLayout {
}

/* footer -------------------------------------------------------------- */

.tobago-footer {
  background-color: #ffffff;
  padding: 5px 10px;
  box-shadow: 0 0 5px 5px rgba(200, 200, 200, 0.5);
}

.fixed-bottom {
  margin-top: 10px;
}

/* form -------------------------------------------------------------- */

.tobago-form {
}

/* gridLayout -------------------------------------------------------------- */

.tobago-gridLayout {
  display: -ms-grid;
  display: grid;
  border-spacing: 0;
  border-collapse: collapse;
  grid-column-gap: $spacer-x; // old
  column-gap: $spacer-x;

  .tobago-label-container > {
    .tobago-textarea, .tobago-selectManyListbox, .tobago-selectManyShuttle {
      height: 100%;
    }
  }
}

/* header ----------------------------------------------------------- */

.tobago-header {
  margin-bottom: 1rem;

  &.sticky-top {
    margin-top: -$page-padding-top;
    margin-left: -($grid-gutter-width / 2);
    margin-right: -($grid-gutter-width / 2);
  }
}

/* hidden ----------------------------------------------------------- */

.tobago-hidden:disabled {
  display: none;
}

/* image ----------------------------------------------------------- */

.tobago-image {
}

.tobago-image.disabled {
  filter: grayscale(1) blur(2px) contrast(0.5) brightness(1.2);
}

/* in ----------------------------------------------------------- */
.tobago-in {
  &:disabled {
    color: rgba($input-color, $form-disabled-alpha);
  }
}

.tobago-in-markup-number {
  text-align: right;
}

.tobago-input-group-outer {
}

/* label ----------------------------------------------------------- */

// todo remove
.tobago-label {
}

/* XXX check if this is needed (was .tobago-label before)
label {
  width: 100%;
}
*/

.tobago-flexLayout > label {
  width: 155px;
}

/* link ----------------------------------------------------------- */

.tobago-link {
  white-space: nowrap;

  span {
    white-space: normal
  }

  &.nav-link {
    &:focus, &:hover {
      text-decoration: none;
    }
  }
}

a.tobago-link.dropdown-item {
  img, span {
    display: inline-block; /* fix for IE11 - :active selector doesn't work for nested elements */
    pointer-events: none;
  }
}

h1, h2, h3, h4, h5, h6 {
  button.tobago-link {
    font-weight: inherit;
  }
}

button {
  &.tobago-link, &.tobago-treeCommand {
    color: $blue;
    border-width: 0;
    padding: 0;
    background-color: transparent;
    text-align: left;

    &:focus, &:hover {
      color: $link-hover-color;
      cursor: pointer;
      outline: none;
      text-decoration: underline;
    }

    &:disabled {
      color: $nav-link-disabled-color;

      &:hover {
        cursor: not-allowed;
        text-decoration: none;
      }

      > img {
        opacity: .65;
      }
    }
  }

  &.tobago-link.dropdown-item {
    padding: $dropdown-item-padding-y $dropdown-item-padding-x;
    color: $dropdown-link-color;
    text-align: inherit;
    white-space: nowrap;

    &:active {
      color: $dropdown-link-active-color;
    }

    &:focus, &:hover {
      cursor: pointer;
      text-decoration: none;
    }

    &:disabled {
      color: $dropdown-link-disabled-color;
    }
  }

  &.tobago-link.dropdown-toggle {
    &:focus, &:hover {
      text-decoration: none;
    }
  }

  &.nav-link { /* bootstrap don't know button.nav-link*/
    padding: $nav-link-padding;
    padding-top: .55em;
    padding-bottom: .45em;
  }
}

.navbar-nav button.nav-link {
  padding-left: 0;
  padding-right: 0;
}

span.dropdown {
  display: inline-block;
}

.dropdown > .btn.dropdown-toggle {
  width: 100%;
}

/* messages / help text ----------------------------------------------- */
.tobago-messages-container {
  align-items: flex-start;

  &.tobago-flexLayout {
    .tobago-messages:first-child small label {
      margin-right: 0; /* for tc:in margin 5px is already set */
      margin-bottom: 5px;
    }
  }
}

.tobago-popover-box {
  display: none;
  width: max-content;

  &.show {
    display: block;
  }
}

a.tobago-messages-button, a.tobago-help-button, a.tobago-popover-button {
  padding-left: 0.4em;
  padding-right: 0.4em;
}

.tobago-messages label {
  display: block;

  &:last-child {
    margin-bottom: 0;
  }
}

.tobago-flexLayout.tobago-messages-container > {
  .twitter-typeahead, .tobago-input-group-outer, .tobago-selectManyShuttle {
    flex: 1 0 0px;
  }
}

.tobago-messages {
  $alert-icon-padding-x: $alert-padding-x / 1.25;
  $alert-icon-width: $alert-icon-padding-x + 1rem + $alert-icon-padding-x;

  .alert.alert-dismissible {
    padding-left: $alert-icon-width;

    &:before {
      font-family: FontAwesome;
      position: absolute;
      left: 0;
      padding-left: $alert-icon-padding-x;
      padding-right: $alert-icon-padding-x;
      width: $alert-icon-width;
      text-align: center;
    }

    &.alert-danger:before {
      content: $fa-times-circle;
    }
    &.alert-warning:before {
      content: $fa-exclamation-triangle;
    }
    &.alert-info:before {
      content: $fa-info;
    }
  }
}

.popover .popover-body {
  // allow linebreaks for messages / help text
  white-space: pre-line;
}

/* nav ----------------------------------------------------------- */

/* styles for drop down menu first level */
.dropdown-toggle {
  &:focus, &:hover {
    text-decoration: none;
  }
}

/* no bottom border in navtabs, if panel-body under it */
.nav-tabs {
  border-bottom-width: 0;

  > li.active > a {
    background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
    background-repeat: repeat-x;
    border-bottom: #dddddd;

    &:hover {
      border-bottom: #dddddd;
    }
  }
}

.dropdown-menu .form-check {
  display: block;
}

/* dropdown ------------------------------------------------------- */
tobago-dropdown {
  display: inline-block;
}

ul > tobago-dropdown {
  display: list-item;
}

/* dropdown-submenu ------------------------------------------------------- */
.tobago-dropdown-submenu {
  cursor: pointer;
  position: relative;
  width: 100%;

  &:active {
    > button.tobago-link {
      color: $dropdown-link-active-color;
    }
  }

  > .dropdown-menu {
    top: 0;
    left: 100%;
    margin-top: -6px;
    margin-left: -1px;
    border-radius: 6px 6px 6px 6px;
  }

  > button:after {
    display: none;
  }

  > button.tobago-link {
    color: $dropdown-link-color;

    &:focus, &:hover {
      text-decoration: none;
    }
  }

  &:after {
    content: " ";
    float: right;
    border-color: transparent;
    border-style: solid;
    border-width: 5px 0 5px 5px;
    border-left-color: #cccccc;
    margin-top: 7px;
    margin-right: -10px;
  }

  &:hover > .dropdown-menu {
    display: block;

    > a:after {
      border-left-color: $dropdown-bg;
    }
  }

  &.pull-left {
    float: none;

    > .dropdown-menu {
      left: -100%;
      margin-left: 10px;
      border-radius: 6px 0 6px 6px;
    }
  }
}

/* object ----------------------------------------------------------------- */
.tobago-object {
}

/* out -------------------------------------------------------------------- */

.tobago-out {
  display: inline-block;
}

.tobago-out-markup-strong {
  font-weight: bold;
}

.tobago-out-markup-deleted {
  text-decoration: line-through;
}

.tobago-out-markup-number {
  display: block;
  text-align: right;
}

/* make sure, tc:out has always the same height, no matter if value is empty */
span.tobago-out:empty:before {
  content: "\200b";
}

.table-dark .form-control-plaintext {
  color: $table-dark-color;
}

/* page ----------------------------------------------------------- */

// todo: remove
.tobago-page {
}

tobago-page {
  display: block;
  padding-top: $page-padding-top;
  padding-bottom: 1rem;
}

.tobago-page-overlay {
  display: table;
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  /* TODO: better z-index strategy */
  z-index: 500; /* less than the bootstrap navbar */
  transition-delay: 1s;
  transition-duration: 250ms;
  transition-property: opacity;
  opacity: 0;
}

.tobago-page-overlay-timeout {
  opacity: 0.8;
}

.tobago-page-overlay-markup-wait {
  cursor: wait;
}

.tobago-page-overlay-markup-error {
  cursor: default;
}

.tobago-page-overlayCenter {
  display: table-cell;
  text-align: center;
  vertical-align: middle;
  width: 100%;
  /* TODO: better z-index strategy */
  z-index: 500; /* less than the bootstrap navbar */

  img {
    position: relative;
  }
}

.tobago-page-noscript {
  position: absolute;
  top: 100px;
  left: 100px;
  right: 100px;
  height: 50px;
  border: 1px solid black;
  padding: 30px;
  background-color: white;
  font-size: 15px;
}

.tobago-spread {
  height: 100%;

  &tobago-panel {
    overflow-x: hidden;
    overflow-y: auto;
  }
}

/* panel ------------------------------------------------------------- */

// todo: remove
.tobago-panel {
}

tobago-panel {
  display: block;
}

/* popup ------------------------------------------------------------- */

.modal-content > .card {
  margin-bottom: 0;
}

/* progress ---------------------------------------------------------- */
.tobago-progress {
}

/* stars rating ------------------------------------------------------------ */
.tobago-stars {
  .tobago-stars-container {
    position: relative;
    display: inline-block;
    color: transparent;
    font-family: FontAwesome;
    font-size: 1.5rem;

    &:before {
      content: "\f005 \f005 \f005 \f005 \f005";
    }

    .tobago-stars-focusBox {
      display: inline-block;
      position: absolute;
      width: 100%;
      height: 100%;
      left: 0;
      top: 0;
    }
    .tobago-stars-slider:focus ~ .tobago-stars-focusBox {
      box-shadow: $input-box-shadow, $input-focus-box-shadow;
    }

    .tobago-stars-tooltip {
      display: inline-block;
      position: absolute;
      font-family: sans-serif;
      font-size: 1.1rem;
      background-color: $black;
      color: $white;
      padding-left: 0.25rem;
      padding-right: 0.25rem;
      text-align: center;
      border-radius: 0.25rem;
      width: 40px;
      top: -23px;
      left: 35px;

      &.trash:before {
        font-family: FontAwesome;
        content: "\f014";
      }
    }

    .tobago-stars-selected {
      display: block;
      position: absolute;
      top: 0;
      overflow: hidden;
      white-space: nowrap;
      color: $progress-bar-bg;

      &:before {
        content: "\f005 \f005 \f005 \f005 \f005";
      }
    }
    .tobago-stars-slider:disabled ~ .tobago-stars-selected {
      filter: grayscale(1);
    }
    .tobago-stars-selected.tobago-placeholder {
      filter: grayscale(0.3);
    }

    .tobago-stars-unselected {
      display: block;
      position: absolute;
      top: 0;
      overflow: hidden;
      white-space: nowrap;
      color: $progress-bg;
      direction: rtl;

      &:before {
        content: "\f005 \f005 \f005 \f005 \f005";
      }
    }
    input[type="range"]:disabled ~ .tobago-stars-unselected {
      filter: grayscale(1);
    }

    .tobago-stars-preselected {
      display: none;
      position: absolute;
      top: 0;
      overflow: hidden;
      white-space: nowrap;
      color: lighten($progress-bar-bg, 25%);
      opacity: 0.8;

      &:before {
        content: "\f005 \f005 \f005 \f005 \f005";
      }

      &.show {
        display: block;
      }
    }

    .tobago-stars-slider {
      position: absolute;
      height: 100%;
      opacity: 0;
      z-index: 1;
      left: 0;
      width: 100%;

      &::-ms-tooltip {
        display: none;
      }
    }
  }
}

/* section ----------------------------------------------------------- */

/* to separate the icon from the rest of the title */
h1, h2, h3, h4, h5, h6 {
  > .fa:first-child, > img {
    margin-right: 0.7em;
  }
}

.tobago-section-header {
  display: flex;
  justify-content: space-between;
  align-content: center;
}

/* selectBooleanCheckbox, selectManyCheckbox, selectOneRadio ------------------------------ */

.tobago-selectBooleanCheckbox, .tobago-selectBooleanToggle,
.tobago-selectManyCheckbox, .tobago-selectManyToggle,
.tobago-selectOneRadio {
  .form-check-label {
    input {
      position: absolute;
      opacity: 0;
      z-index: -1;
    }
    .tobago-inputPseudo:before {
      font-family: FontAwesome;
      font-size: large;
      font-style: normal;
      display: inline-block;
      transition: all 0.2s;
      position: relative;
      margin-left: -$form-check-input-gutter;
    }
    img {
      margin-right: 0.3em;
    }
    &:after {
      content: $zero-width-space;
    }
  }
}

.tobago-selectBooleanToggle, .tobago-selectManyToggle {
  .form-check-label {
    .tobago-inputPseudo:before {
      font-size: larger;
    }
  }
}

.tobago-selectBooleanCheckbox, .tobago-selectManyCheckbox {
  .form-check-label {
    .tobago-inputPseudo:before {
      content: $fa-square-o;
      position: absolute;
    }
    input[type="checkbox"]:checked + .tobago-inputPseudo:before {
      content: $fa-check-square-o;
    }
    input[type="checkbox"]:focus:not(:disabled) + .tobago-inputPseudo:before,
    input[type="checkbox"]:active:not(:disabled) + .tobago-inputPseudo:before {
      text-shadow: 0 0 1px black;
    }
    input[type="checkbox"]:disabled + .tobago-inputPseudo:before {
      opacity: 0.5;
    }
  }
}

.tobago-selectBooleanToggle, .tobago-selectManyToggle {
  .form-check-label {
    .tobago-inputPseudo:before {
      content: $fa-toggle-off;
      position: relative;
      margin-right: 0.5rem;
    }
    input[type="checkbox"]:checked + .tobago-inputPseudo:before {
      content: $fa-toggle-on;
    }
    input[type="checkbox"]:focus:not(:disabled) + .tobago-inputPseudo:before,
    input[type="checkbox"]:active:not(:disabled) + .tobago-inputPseudo:before {
      text-shadow: 0 0 1px black;
    }
    input[type="checkbox"]:disabled + .tobago-inputPseudo:before {
      opacity: 0.5;
    }
  }
}

.tobago-selectOneRadio {
  .form-check-label {
    .tobago-inputPseudo:before {
      content: $fa-circle-thin;
      position: absolute;
    }
    input[type="radio"]:checked + .tobago-inputPseudo:before {
      content: $fa-dot-circle-o;
    }
    input[type="radio"]:focus:not(:disabled) + .tobago-inputPseudo:before,
    input[type="radio"]:active:not(:disabled) + .tobago-inputPseudo:before {
      text-shadow: 0 0 1px black;
    }
    input[type="radio"]:disabled + .tobago-inputPseudo:before {
      opacity: 0.5;
    }
  }
}

/* dropdown */
.dropdown-menu {
  .tobago-selectBooleanCheckbox, .tobago-selectManyCheckbox, .tobago-selectOneRadio {
    .form-check-label {
      padding-left: (2 * $form-check-input-gutter) + $dropdown-item-padding-y;
    }
  }
}

/* inline */
.tobago-selectBooleanToggle.form-check,
.tobago-selectBooleanCheckbox.form-check {
  padding-top: calc(#{$input-btn-padding-y} - #{$input-btn-border-width} * 2);
  padding-bottom: calc(#{$input-btn-padding-y} - #{$input-btn-border-width} * 2);
  margin-bottom: 0;

  .form-check-label {

  }
}

.tobago-selectManyToggle-inline,
.tobago-selectManyCheckbox-inline,
.tobago-selectOneRadio-inline {
  padding-top: calc(#{$input-btn-padding-y} - #{$input-btn-border-width} * 2);
  padding-bottom: calc(#{$input-btn-padding-y} - #{$input-btn-border-width} * 2);

  .form-check.form-check-inline {
    margin-bottom: 0;
    padding-left: 1rem;

    .form-check-label {
      vertical-align: baseline;
    }
  }
}

/* selectBooleanCheckbox ----------------------------------------------- */

/* selectManyCheckbox ----------------------------------------------------------- */

/* selectManyListbox ----------------------------------------------------------- */
.tobago-selectManyListbox,
.tobago-selectManyListbox-option {
}

/* selectManyShuttle ----------------------------------------------------------- */

.tobago-selectManyShuttle-add,
.tobago-selectManyShuttle-addAll,
.tobago-selectManyShuttle-option,
.tobago-selectManyShuttle-remove,
.tobago-selectManyShuttle-removeAll,
.tobago-selectManyShuttle-selectedLabel,
.tobago-selectManyShuttle-unselectedLabel {
}

.tobago-selectManyShuttle {
  display: flex;

  .tobago-selectManyShuttle-unselected,
  .tobago-selectManyShuttle-selected {
    flex: 1 0 0px;
  }
}

.tobago-selectManyShuttle-hidden {
  display: none;
}

.tobago-selectManyShuttle-toolBar {
  display: flex;
  flex-direction: column;
  padding: 0 0.5rem;

  > button {
    display: block;
  }

  > div {
    flex: 1 0 0px;
  }

  > * { /* XXX this fixes the margin left from .btn:nth-child(n+2), but is ugly */
    margin-left: 0 !important;
  }
}

/* selectOneRadio ---------------------------------------------------------- */

/* selectOneChoice ---------------------------------------------------------- */

.tobago-selectOneChoice-option {
}

.input-group-prepend > .tobago-selectOneChoice { /* before facet */
  border-top-right-radius: 0;
  border-bottom-right-radius: 0;
}

.input-group-append > .tobago-selectOneChoice { /* after facet */
  border-top-left-radius: 0;
  border-bottom-left-radius: 0;
}

/* selectOneListbox -------------------------------------------------------- */
.tobago-selectOneListbox,
.tobago-selectOneListbox-option {
}

/* segmentLayout ----------------------------------------------------------- */

.tobago-segmentLayout {
  /*
  Makes, that the height of the div is set.
  Otherwise floating elements below, may flew into the area of the segmentLayout.
  */
  /*display: inline-block;
  todo: this breaks the general layout in IE11 and others
  */
}

/* separator -------------------------------------------------------------- */
hr.tobago-separator {
  border-top: 1px solid rgba(0, 0, 0, 0.1);
}

p.tobago-separator {
  text-align: center;
  border: 0;
  white-space: nowrap;
  display: block;
  overflow: hidden;
  padding: 0;
  margin-top: 1em;
  margin-bottom: 1em;

  &:before, &:after {
    content: "";
    height: 1px;
    background-color: rgba(0, 0, 0, 0.1);
    display: inline-block;
    vertical-align: middle;
  }

  &:before {
    width: 80px;
    margin-left: 0;
    margin-right: 5px;
  }

  &:after {
    width: 100%;
    margin-left: 5px;
    margin-right: 0;
  }
}

/* sheet -------------------------------------------------------------- */
.tobago-sheet,
.tobago-sheet-expanded,
.tobago-sheet-row {
}

tobago-sheet {
  .tobago-sheet-cell {
    > .tobago-treeNode {
      display: flex;
      align-items: center;

      @include tobagoTreeNodeToggle();

      .tobago-treeNode-toggle {
        padding-right: 5px;
      }
    }
  }
}

th.tobago-sheet-headerCell {
  font-weight: normal;

  .tobago-out {
    font-weight: bold;
  }
}

.tobago-sheet-header {
  overflow: hidden;
  flex-shrink: 0;
  display: block;
}

.tobago-sheet-headerCell > .tobago-sheet-header > * {
  display: inline;
}

.tobago-sheet-header-markup-sortable::after {
  content: "\f0dc";
  font-family: FontAwesome;
  color: $gray-300;
  margin-left: $spacer-x;
}

.tobago-sheet-header-markup-ascending::after {
  content: "\f0de";
  color: inherit;
}

.tobago-sheet-header-markup-descending::after {
  content: "\f0dd";
  color: inherit;
}

th.tobago-sheet-headerCell-markup-filler > .tobago-sheet-header {
  height: 14px; /* XXX why? */
}

.tobago-sheet-columnSelector {
  margin-top: ($spacer-y * 0.75);
  margin-bottom: ($spacer-y * 0.75);
}

tobago-sheet {
  display: flex;
  flex-direction: column;
  margin-bottom: $spacer;

  .table {
    margin-bottom: 0;
  }
}

.tobago-sheet-cell-markup-right {
  text-align: right;
}

.tobago-sheet-cell-markup-center {
  text-align: center;
}

.tobago-sheet-cell-markup-justify {
  text-align: justify;
}

.tobago-sheet-cell-markup-filler {
  padding: 0 !important; /* fix for IE 11 */
}

.tobago-sheet-cell.tobago-sheet-cell-markup-middle {
  vertical-align: middle;
  line-height: initial;
}

.tobago-sheet-cell.tobago-sheet-cell-markup-bottom {
  vertical-align: bottom;
  line-height: initial;
}

.tobago-sheet-footer {
  text-align: center;
}

.tobago-sheet-paging {
  display: inline-flex;
}

.tobago-sheet-paging-markup-left {
  float: left;
}

.tobago-sheet-paging-markup-center {
}

.tobago-sheet-paging-markup-right {
  float: right;
}

.tobago-sheet-pagingInput {
  text-align: center;
  display: none;
  margin: -4px 0;
  width: 3em;
}

.tobago-sheet-pagingText {
  cursor: pointer;
}

.tobago-sheet-body {
  overflow-y: auto;
  flex: 1 1 auto;
}

.tobago-sheet-headerTable {
  margin-bottom: 0;
}

.tobago-tableLayout-fixed {
  table-layout: fixed;
}

.tobago-sheet-headerCell-markup-filler {
  border-width: 0 !important;
}

.tobago-sheet-headerCell {
  position: relative;
}

.tobago-sheet-headerResize {
  position: absolute;
  right: -5px;
  top: 0;
  width: 10px;
  height: 100%;
  z-index: 1;
  cursor: col-resize;
}

.tobago-sheet-header:hover .tobago-sheet-headerResize {
  background-color: $gray-200;
}

.tobago-sheet-headerCell {
  overflow: hidden;
}

.tobago-sheet-cell div {
  overflow: hidden;
}

.tobago-sheet-bodyTable {
}

.tobago-sheet-pagingOutput {
}

/* splitLayout ---------------------------------------------------------------------- */

.tobago-splitLayout {
}

.tobago-splitLayout-horizontal {
  width: .5rem;
  cursor: col-resize;
}

.tobago-splitLayout-horizontal:hover {
  border: dotted #000000 thin;
  z-index: 10000; /* TODO: check, if needed (check also with iframes) */
}

.tobago-splitLayout-vertical {
  height: .5rem;
  cursor: row-resize;
}

.tobago-splitLayout-vertical:hover {
  border: dotted #000000 thin;
  z-index: 10000; /* TODO: check, if needed (check also with iframes) */
}

/* suggest ---------------------------------------------------------------------- */

tobago-suggest {
  display: none;
}

/* tab / tab-group ----------------------------------------------------------------- */
.tobago-tabGroup, .tobago-tab, .tobago-tab-content {
}

tobago-tab {

  .nav-link:not([href]):not([tabindex]) {
    /* fix .nav-links without 'href'; bootstrap tab only works if 'href' is set */
    &.active {
      color: $nav-tabs-link-active-color;
      cursor: pointer;
    }
    &:not(.active) {
      color: $link-color;
      cursor: pointer;

      &:hover {
        color: $link-hover-color;
      }
    }
    &.disabled {
      color: $nav-link-disabled-color;
      cursor: not-allowed;

      &:focus, &:hover {
        color: $nav-link-disabled-color;
      }
    }
  }
}

tobago-tab.tobago-tab-barFacet {
  display: flex;

  > .nav-link {
    border-right: 0;
    border-top-right-radius: 0;
  }

  > div {
    border: $nav-tabs-border-width solid transparent;
    border-top-right-radius: $nav-tabs-border-radius;
    padding-right: $nav-link-padding-x;

    & > button {
      height: 100%;
    }
    & > a {
      display: inline-block;
      padding-top: 0.5rem;
    }
  }

  .nav-link.active + div {
    background-color: $nav-tabs-link-active-bg;
    border-top-color: $nav-tabs-border-color;
    border-right-color: $nav-tabs-border-color;
  }

  .nav-link:not(.disabled):hover + div {
    border-top-color: $gray-200;
    border-right-color: $gray-200;
  }
}

tobago-tab-group {
  margin-bottom: $form-group-margin-bottom;
}

/* tree ---------------------------------------------------------------------- */
.tobago-tree-expanded,
.tobago-tree-selected,
.tobago-treeLabel,
.tobago-treeSelect,
.tobago-treeSelect-label {
}

.tobago-tree {
  .tobago-treeNode {
    cursor: default;

    @include tobagoTreeNodeToggle();
  }
}

.tobago-treeSelect .form-check-inline {
  margin-left: $form-check-inline-input-margin-x / 2;
  margin-right: $form-check-inline-input-margin-x / 2;
}

.tobago-treeCommand {
  cursor: pointer;
}

.tobago-treeNode[data-tobago-level] {
  margin-left: 7rem;
}

tobago-tree {
  tobago-tree-node {
    display: block;

    @for $i from 0 through 20 {
      &[data-tobago-level='#{$i}'] {
        margin-left: #{$i}rem;
      }
    }

    tobago-tree-select {
      display: inline;
    }
  }
}

/* treeListbox ---------------------------------------------------------------------- */
.tobago-treeListbox {
}

.tobago-treeListbox-level {
  display: inline-block;
  min-width: 10rem;
}

.tobago-treeListbox-select {
  width: 100%;
}

/* textarea --------------------------------------------------------- */
.tobago-textarea {
  &:disabled {
    color: rgba($input-color, $form-disabled-alpha);
  }
}

/* facesMessages messageLayout focus shadows ------------------------ */

// todo: check class vs. custom element

.tobago-date,
.tobago-in,
.tobago-selectManyListbox,
.tobago-selectOneChoice,
.tobago-selectOneListbox,
.tobago-textarea {
  &-markup-fatal, &-markup-error {
    &.border-danger:focus {
      box-shadow: 0 0 0 .2rem rgba(theme-color("danger"), .25);
    }
  }
  &-markup-warn {
    &.border-warning:focus {
      box-shadow: 0 0 0 .2rem rgba(theme-color("warning"), .25);
    }
  }
  &-markup-info {
    &.border-info:focus {
      box-shadow: 0 0 0 .2rem rgba(theme-color("info"), .25);
    }
  }
}

/* menuStore -------------------------------------------------------- */

.tobago-page-menuStore {
  position: absolute;
  top: 0;
  left: 0;
  width: 0;
  height: 0;
  z-index: $zindex-popover;
}

/* Bootstrap workarounds ------------------------------------------------------------------ */

/* fixes the problem, that input controls have 100% in the toolbar if they are not in a form,
 but in Tobago we have a global form.
 */
/*
.navbar .form-control {
    width: auto;
}
*/

/*
fixes missing space, I thinks normal Websites have a " " Space char in the source code, Tobago not.

fixme: there is a problem with the selectManyShuttle with this style.
*/

.form-horizontal {

  > * { /* fixes vertical space, todo: why is is needed? is there a better way? */
    margin-top: 10px;
    margin-bottom: 5px;
    /* XXX MUST BE REMOVED */
  }

  .control-label {
    margin-top: 10px;
    margin-bottom: 5px;
  }
}

/* FIXME: This is to hide the toolbar, until it is implemented */
.tobago-tabGroup-toolBar {
  display: none;
}

.tobago-required label:after,
label.tobago-required:after {
  content: "*";
  color: theme-color("danger");
}

/* Bootstrap datetimepicker workarounds ------------------------------------------------------------------ */

/*
 * CSS extension for bootstrap3-datetimepicker to fit with bootstrap4.
 */

.bootstrap-datetimepicker-widget {
  th, td {
    padding: 5px;
  }
}
