client/src/style.scss
@import '~@blueprintjs/core/lib/css/blueprint.css';
@import '~@blueprintjs/core/lib/scss/variables';
@import '~react-json-pretty/src/JSONPretty.monikai.css';

$window-padding: 20px;
$border-radius: 6px;

body {
  padding: 0;
  margin: 0;
}

#application-wrapper {
  height: 100%;
  width: 100%;
  box-sizing: border-box;
}

#application {
  background-color: #10161a;
  color: #f5f8fa;
}

.bp3-menu {
  max-height: 50vh;
  overflow-y: auto;
}

#main-container {
  height: calc(100vh - 50px);
}

#main-container-spinner {
  height: 100%;
  display: flex;
  flex-direction: column;
  justify-content: center;
}

#flex-container {
  display: flex;
  flex-flow: row nowrap;
  align-items: stretch;
  height: 100%;
}

#left-panel {
  flex-grow: 1;
  flex-basis: 350px;

  padding: 10px 0px;
  background-color: $dark-gray1;
  overflow: auto;

  .bp3-tree-node-content {
    padding-top: 2px;
    padding-bottom: 2px;
    height: 34px;
  }

  .bp3-tree-node-label {
    & > div {
      line-height: 1.1em;

      & > div:nth-child(2) {
        color: $gray2;
        font-size: 0.8em;
      }
    }
  }

  .bp3-tree-node-selected .bp3-tree-node-label > div > div:nth-child(2) {
    color: $gray5;
  }
}

#right-container {
  flex-grow: 1;
  flex-basis: 80%;

  max-width: 80%;

  padding: $window-padding;
}

#input-columns-container {
  height: 100%;
  display: flex;
  flex-direction: column;
}

#input-columns-viewer {
  margin-bottom: $window-padding;

  table {
    width: 100%;
    border-radius: $border-radius;
    border-collapse: collapse;

    td,
    th {
      padding: 5px;
      text-align: center;
      vertical-align: middle;
    }

    td {
      background-color: $dark-gray2;
      border-color: $dark-gray3;
      border-width: 0px 1px 1px 0px;
      border-style: solid;

      .bp3-control-group {
        justify-content: center;
      }
    }

    td:first-child {
      background-color: $dark-gray1;
      border-right-width: 0px;
    }

    tr:first-child {
      th:nth-child(2) {
        border-top-left-radius: $border-radius;
      }

      th:last-child {
        border-top-right-radius: $border-radius;
      }
    }

    tr:nth-child(2) {
      td:first-child {
        border-top-left-radius: $border-radius;
      }

      td:last-child {
        border: 0px;
        border-bottom-right-radius: $border-radius;
      }
    }

    tr:last-child {
      td:first-child {
        border-bottom-left-radius: $border-radius;
      }
    }

    tr:last-child td {
      border-bottom: 0px;
    }

    th:not(:first-child) {
      background-color: $dark-gray1;
    }

    th:not(:first-child):not(:last-child) {
      border-right-color: $dark-gray2;
      border-right-style: solid;
      border-right-width: 1px;
    }
  }
}

#column-selector {
  flex-grow: 1;
  overflow: auto;
  background-color: $dark-gray1;
  border-radius: $border-radius;
}

.bp3-form-group {
  margin: 0;
}

#dummy-column-picker {
  height: 100%;
  display: flex;
  flex-direction: column;
  padding-top: $window-padding;

  .bp3-form-group {
    justify-content: center;
  }
}

#text-tab-search-group {
  padding: $window-padding;

  .row {
    display: flex;
    align-items: center;
    margin-bottom: 10px;

    & > *:not(:last-child) {
      margin-right: 20px;
    }

    #text-input {
      flex-grow: 1;
    }

    #switch > * {
      margin-bottom: 0px;
    }
  }
}

.column-viewer {
  padding: $window-padding;
  overflow: auto;

  .column-flexbox {
    background-color: $dark-gray1;
    border-radius: $border-radius;
    overflow-x: scroll;
    padding: $window-padding;
    color: $black;

    display: flex;
    align-items: stretch;
    flex-grow: 1;

    .add-button {
      width: 30px;
      height: 30px;
      box-sizing: border-box;
      text-align: center;
      padding: 5px 7px;
      position: relative;
      left: calc(100% - 35px);
      top: -5px;
      z-index: 3;
      background-color: $dark-gray5;
      color: $light-gray1;
      border-radius: 50%;

      & > * {
        margin-top: 1px;
      }

      &:hover {
        background-color: $blue1;
      }
    }

    .column {
      height: calc(100% - 2px);
      position: relative;
      top: -22px;

      margin-right: 20px;
      min-width: 150px;
      background-color: $white;
      border-radius: $border-radius;
      overflow-y: scroll;
      padding-bottom: 10px;

      .column-header {
        position: sticky;
        top: 0;
        background-color: $light-gray3;
        text-align: center;
        padding: 0px 0px;
        z-index: 2;

        & > * {
          padding: 2px 0px;
          height: 22px;
          box-sizing: border-box;
        }

        & > *:not(:last-child) {
          border-bottom: 1px solid $gray5;
        }
      }

      .column-rows {
        height: calc(100% - 66px);

        & > * {
          padding: 2px 10px;
          border-bottom: 1px solid $light-gray3;
        }
      }
    }
  }
}

.center-flex {
  justify-content: center;
}

.jsonView span {
  color: slategray;
}

#json-pretty {
  text-overflow: ellipsis;
  overflow: hidden;
}

.bp3-control-group {
  & > * {
    overflow: hidden;
  }
}

.column-menu-item {
  display: flex;
  flex-direction: column;
}
