.fake-full-width-bg(@bg-color) {
  &::before {
    content: '\00a0';
    position: absolute;
    width: 9999px;
    left: -9999px;
    background-color: @bg-color;
  }
}

.editor-sidebar {
  display: flex;
  flex-direction: column;
  background-color: @file-tree-bg;
}

.file-tree {
  display: flex !important; // To work around jQuery layout's inline styles
  flex-direction: column;
  height: 100%;

  .toolbar.toolbar-filetree {
    .toolbar-small-mixin;
    .toolbar-alt-mixin;
    padding: 0 5px;
    flex-shrink: 0;

    .btn:hover {
      background-color: @file-tree-toolbar-btn-hover-color;
    }
  }

  > file-tree-root,
  .file-tree-inner {
    position: relative;
    display: flex;
    flex-direction: column;
    flex-grow: 1;
    overflow-y: auto;
    width: inherit;
    height: inherit;

    &.no-toolbar {
      top: 0;
    }
  }

  // TODO; Consolidate with "Project files" in Overleaf
  h3 {
    font-size: 1rem;
    border-bottom: 1px solid @gray;
    padding-bottom: (@line-height-computed / 4);
    margin: (@line-height-computed / 2);
  }

  &-history {
    .entity-name {
      padding-left: 6px;
      &.deleted {
        text-decoration: line-through;
      }
    }
    .loading {
      padding-left: 6px;
      color: #fff;

      i.fa {
        color: #fff;
      }
    }
  }

  ul.file-tree-list {
    margin: 0;
    overflow-x: hidden;
    height: 100%;
    flex-grow: 1;
    position: relative;
    overflow-y: auto;

    .entity > ul,
    ul[role='tree'] {
      margin-left: 22px;
    }

    &::after {
      content: '';
      display: block;
      min-height: @line-height-computed;
    }

    li {
      line-height: @file-tree-line-height;
      position: relative;
      &:focus {
        outline: none;
      }

      .entity {
        user-select: none;
        &:focus {
          outline: none;
        }
      }

      .entity > .entity-name > button {
        background-color: transparent;
        border: 0;
        padding: 0;
        &:focus {
          outline: none;
        }
        &.item-name-button {
          width: 100%;
          overflow: hidden;
          text-overflow: ellipsis;
          text-align: left;
          padding-right: 32px;
          white-space: pre;
        }
      }

      .entity-name {
        color: @file-tree-item-color;
        cursor: pointer;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
        &.entity-name-react {
          text-overflow: clip;
        }
        &:focus {
          outline: none;
        }
        background-color: transparent;
        .fake-full-width-bg(transparent);
        &:hover {
          background-color: @file-tree-item-hover-bg;

          // When the entity is a subfolder, the DOM element is "indented" via margin-left. This makes the
          // element not fill the entire file-tree width (as it's spaced from the left-hand side via margin)
          // and, in consequence, the background gets clipped. The ::before pseudo-selector is used to fill
          // the empty space.
          .fake-full-width-bg(@file-tree-item-hover-bg);
        }
        input {
          line-height: 1.6;
        }
        .entity-menu-toggle > i {
          color: white;
          font-size: 18px;
        }
      }

      i.fa {
        color: @file-tree-item-icon-color;
        font-size: 14px;

        &.file-tree-icon {
          margin-right: 4px;
          margin-left: 8px;

          &.linked-file-icon {
            position: relative;
            left: -2px;

            + .linked-file-highlight {
              & {
                color: inherit;
              }
              position: relative;
              top: 4px;
              width: 0;
              left: -5px;
              font-size: 12px;
            }
          }
        }

        &.file-tree-folder-icon {
          margin-right: 4px;
        }

        &.file-tree-expand-icon {
          margin-left: 8px;
        }
      }

      i.fa-folder-open,
      i.fa-folder {
        color: @file-tree-item-folder-color;
        font-size: 14px;
      }

      i.toggle {
        width: 24px;
        padding: 6px;
        font-size: 16px;
        color: @file-tree-item-toggle-color;
      }

      .file-tree-dropdown-toggle {
        display: flex;
        align-items: center;
        color: #fff;
        line-height: 1.6;
        font-size: 20px;
        padding: 0 4px 0 18px;

        &:hover,
        &:focus {
          text-decoration: none;
        }
        &::before {
          content: '\00B7\00B7\00B7';
          transform: rotate(90deg);
          letter-spacing: 0.5px;
        }
      }

      &.multi-selected {
        > .entity {
          > .entity-name {
            > div > i.fa,
            > button > i.fa,
            > i.fa,
            .entity-menu-toggle i.fa {
              color: #fff;
            }
            > i.linked-file-highlight {
              color: @blue;
            }
            color: #fff;
            font-weight: bold;
            background-color: @file-tree-multiselect-bg;
            .fake-full-width-bg(@file-tree-multiselect-bg);
            &:hover {
              background-color: @file-tree-multiselect-hover-bg;
              .fake-full-width-bg(@file-tree-multiselect-hover-bg);
            }
          }
        }
      }

      .menu-button {
        position: absolute;
        right: 0;
        top: 3px;
      }

      .rename-input {
        display: block;
        position: absolute;
        top: 1px;
        left: 32px;
        right: 32px;
        color: @file-tree-item-input-color;
        input {
          width: 100%;
        }
      }

      > .entity > .entity-name {
        .entity-menu-toggle {
          display: none;
        }
      }

      .entity-limit-hit {
        color: @file-tree-item-color;
        line-height: 2.05;
        margin-left: (@line-height-computed / 2);
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
      }

      .entity-limit-hit-message {
        font-style: italic;
      }

      i.fa.entity-limit-hit-tooltip-trigger {
        margin-left: (@line-height-computed / 4);
        cursor: pointer;
      }
    }
  }

  &:not(.multi-selected) {
    ul.file-tree-list li.selected {
      > .entity {
        > .entity-name {
          color: @file-tree-item-selected-color;

          > div > i.fa,
          > button > i.fa,
          > i.fa,
          .entity-menu-toggle i.fa {
            color: @file-tree-item-selected-color;
          }

          > i.linked-file-highlight {
            color: @blue;
          }

          background-color: @file-tree-item-selected-bg;
          font-weight: bold;
          padding-right: 32px;
          .fake-full-width-bg(@file-tree-item-selected-bg);

          .entity-menu-toggle {
            display: inline-block;
            background-color: transparent;
            box-shadow: none;
            border: 0;
          }
        }
      }
    }
  }

  // while dragging, the previously selected item gets no highlight
  ul.file-tree-list.file-tree-dragging li.selected .entity .entity-name {
    font-weight: normal;

    background-color: transparent;
    .fake-full-width-bg(transparent);
    color: @file-tree-item-color;
    i.fa {
      color: @file-tree-item-icon-color !important;
    }
  }

  // the items being dragged get the full "hover" colour
  ul.file-tree-list.file-tree-dragging
    li
    .entity.file-tree-entity-dragging
    .entity-name {
    background-color: fade(@file-tree-item-hover-bg, 90%);
    .fake-full-width-bg(fade(@file-tree-item-hover-bg, 90%));
    color: @file-tree-item-color;
    i.fa {
      color: @file-tree-item-icon-color !important;
    }
  }

  // the drop target gets the "selected" colour
  ul.file-tree-list.file-tree-dragging
    li.dnd-droppable-hover
    .entity
    .entity-name {
    background-color: @file-tree-item-selected-bg;
    .fake-full-width-bg(@file-tree-item-selected-bg);
    color: @file-tree-item-selected-color;
    i.fa {
      color: @file-tree-item-selected-color !important;
    }
  }

  .dnd-draggable-preview-layer {
    position: absolute;
    pointer-events: none;
    z-index: 100;
    width: 100%;
    height: 100%;
    overflow: hidden;

    &.dnd-droppable-hover {
      border: 3px solid @file-tree-item-selected-bg;
    }
  }

  .dnd-draggable-preview-item {
    background-color: fade(@file-tree-item-selected-bg, 60%);
    color: @file-tree-item-selected-color;
    width: 75%;
    padding-left: @line-height-computed;
  }

  .dnd-draggable-preview-item {
    line-height: @file-tree-line-height;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  .disconnected-overlay {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 10;
    background: @file-tree-bg;
    opacity: 0.5;
    cursor: wait;
  }
}

.modal-new-file {
  padding: 0;
  table {
    width: 100%;
    table-layout: fixed;
    td {
      vertical-align: top;
    }
  }
  /* old modal */
  .toggle-output-files-button {
    font-size: 80%;
  }
  /* new modal */
  .toggle-file-type-button {
    font-size: 80%;
    margin-top: -12px;
    .btn {
      display: inline-block;
      padding: 0;
      vertical-align: baseline;
      font-size: inherit;
    }
    .btn:focus-within {
      outline: none;
      text-decoration: none;
    }
  }
}
.modal-new-file-list {
  background-color: @modal-footer-background-color;
  width: 220px;
  ul {
    li {
      /* old modal (a) */
      a {
        color: @text-color;
        padding: (@line-height-computed / 4);
        display: block;
        text-decoration: none;
      }
      /* new modal (button) */
      .btn {
        color: @text-color;
        padding: (@line-height-computed / 4);
      }
      .btn:hover {
        text-decoration: none;
      }
      .btn:focus {
        outline: none;
        text-decoration: none;
        background-color: white;
      }
    }
    li.active {
      background-color: white;
      /* old modal (a) */
      a {
        color: @link-color;
      }
      /* new modal (button) */
      .btn {
        color: @link-color;
        text-decoration: none;
      }
    }
    li:hover {
      background-color: white;
    }
  }
}

.file-tree-error {
  text-align: center;
  color: @file-tree-error-color;
  padding: 20px;
}

.file-tree-modal-alert {
  margin-top: 12.5px;
}

.btn.modal-new-file-mode {
  text-align: left;
  width: 100%;
}

.modal-new-file-body {
  padding: 20px;
  padding-top: (@line-height-computed / 4);
}

.modal-new-file-body-upload {
  padding-top: 20px;
}

.modal-new-file-body-conflict {
  background-color: @red-10;
  border: 1px dashed @red-50;
  min-height: 400px;
  border-radius: 3px;
  color: @neutral-90;
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding: @padding-sm;
}

.modal-footer {
  .approaching-file-limit {
    font-weight: bold;
  }

  .at-file-limit {
    text-align: left;
  }
}

.modal-new-file-body-upload .uppy-Root {
  font-family: inherit;
}

.modal-new-file-body-upload .uppy-Dashboard {
  .uppy-Dashboard-inner {
    border: none;
  }

  .uppy-Dashboard-dropFilesHereHint {
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
  }

  .uppy-Dashboard-AddFiles {
    margin: 0;
    border: 1px dashed @neutral-60;
    height: 100%;
    .uppy-Dashboard-AddFiles-title {
      font-size: inherit;
    }
  }

  .uppy-Dashboard-AddFiles-title {
    width: 26em; // sized to create a wrap between the sentences
    max-width: 100%;
  }

  .uppy-Informer p {
    background-color: @blue-10;
    border: 1px solid @blue-20;
    border-radius: @border-radius-base-new;
    color: @content-primary;
    font-size: @font-size-03;
  }
}
