#ide-root {
  height: 100vh; /* for backwards compatibility */
  height: 100dvh; /* needed for mobile devices */

  .global-alerts {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
  }

  .chat {
    position: relative;
    height: 100%;
  }

  .review-panel-wrapper {
    &.rp-state-overview {
      position: sticky;
      top: 0;
      height: 100%;
    }
  }
}

.ide-react-main {
  height: 100%;
  display: flex;
  flex-direction: column;

  .toolbar.toolbar-header {
    position: static;
    flex-grow: 0;
    color: var(--neutral-20);
  }
}

.ide-react-body {
  flex-grow: 1;
  background-color: @pdf-bg;
  overflow-y: hidden;
  z-index: 0;
}

.horizontal-resize-handle {
  width: @ui-resizer-size !important;
  height: 100%;

  // Enable ::before and ::after pseudo-elements to position themselves correctly
  position: relative;
  background-color: @editor-resizer-bg-color;

  .custom-toggler {
    padding: 0;
    border-width: 0;

    // Override react-resizable-panels which sets a global * { cursor: ew-resize }
    cursor: pointer !important;
  }

  &.horizontal-resize-handle-enabled {
    &::before,
    &::after {
      // This SVG has the colour hard-coded to the current value of @ol-blue-gray-2, so if we changed @ol-blue-gray-2,
      // we'd have to change this SVG too
      content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='7' height='18' viewBox='0 0 7 18'%3E%3Cpath d='M2 0h3v3H2zM2 5h3v3H2zM2 10h3v3H2zM2 15h3v3H2z' style='fill:%239da7b7'/%3E%3C/svg%3E");
      display: block;
      position: absolute;
      text-align: center;
      left: 0;
      width: 7px;
      height: 18px;
    }

    &::before {
      top: 25%;
    }

    &::after {
      top: 75%;
    }
  }

  &:not(.horizontal-resize-handle-enabled) {
    cursor: default;
  }

  .synctex-controls {
    left: -8px;
    margin: 0;

    // Ensure that SyncTex controls appear in front of PDF viewer controls and logs pane
    z-index: 12;

    & .synctex-control .synctex-control-icon {
      // Override react-resizable-panels which sets a global * { cursor: ew-resize }
      cursor: pointer !important;
    }
  }
}

.vertical-resize-handle {
  height: 6px;
  background-color: @vertical-resizable-resizer-bg;

  &.vertical-resize-handle-enabled {
    &:hover {
      background-color: @vertical-resizable-resizer-hover-bg;
    }
  }

  &:not(.vertical-resize-handle-enabled) {
    opacity: 0.5;
    cursor: default;
  }

  &::after {
    // This SVG has the colour hard-coded to the current value of @ol-blue-gray-2, so if we changed @ol-blue-gray-2,
    // we'd have to change this SVG too
    content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='6' viewBox='0 0 18 6'%3E%3Cpath d='M0 1.5h3v3H0zM5 1.5h3v3H5zM10 1.5h3v3h-3zM15 1.5h3v3h-3z' style='fill:%239da7b7'/%3E%3C/svg%3E");
    display: block;
    text-align: center;
    line-height: 0;
  }
}

.ide-react-editor-sidebar {
  height: 100%;
  background-color: @file-tree-bg;
  color: var(--neutral-20);
  position: relative;
}

.ide-react-symbol-palette {
  height: 100%;
  background-color: @symbol-palette-bg;
  color: var(--neutral-20);
}

.ide-react-file-tree-panel {
  display: flex;
  flex-direction: column;

  // Prevent the file tree expanding beyond the boundary of the panel
  .file-tree {
    width: 100%;
  }
}

.ide-react-editor-panel {
  display: flex;
  flex-direction: column;
}

// Ensure an element with class "full-size", such as the binary file view, stays within the bounds of the panel
.ide-react-panel {
  position: relative;
  container-type: size;
}

// Styles for placeholder elements that will eventually be replaced
// Unused, not migrated to SCSS
.ide-react-placeholder-chat {
  background-color: var(--editor-toolbar-bg);
  color: var(--neutral-20);
  height: 100%;
}

.ide-panel-group-resizing {
  background-color: white;

  // Hide panel contents while resizing
  .ide-react-editor-content,
  .pdf {
    display: none !important;
  }
}
