/*
 * Copyright 2020 The Go Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style
 * license that can be found in the LICENSE file.
 */

/* TODO(jamal): remove these styles with legacy code. */
.Documentation-index,
.DocNav-index {
  display: block;
}

.UnitOutline {
  display: flex;
  flex-direction: column;
  max-height: 100%;
  position: sticky;
  top: 4.5rem;
}
.UnitOutline-jumpTo {
  display: flex;
  margin-bottom: -0.1625rem;
}
.UnitOutline-jumpTo button {
  background-color: white;
  border: 0.0625rem solid var(--gray-8);
  border-radius: 0.25rem;
  color: var(--gray-4);
  cursor: pointer;
  height: 2rem;
  padding-left: 1.5rem;
  text-align: left;
  width: 100%;
}
.UnitOutline-jumpTo button:hover:not([disabled]) {
  border-color: var(--gray-7);
}
.UnitOutline-jumpTo::after {
  align-self: center;
  background-color: var(--gray-9);
  border-radius: 0.5rem;
  color: var(--gray-6);
  content: 'f';
  content: 'f' / 'find';
  font-size: 0.75rem;
  padding: 0.0625rem 0;
  position: absolute;
  right: 0.75rem;
  text-align: center;
  width: 1.5rem;
}
.UnitOutline-jumpTo::before {
  align-self: center;
  border-radius: 0.5rem;
  color: var(--gray-6);
  content: url('/static/img/pkg-icon-jumpTo_16x16.svg');
  font-size: 0.75rem;
  left: 0.4rem;
  position: absolute;
  text-align: center;
  top: 0.5rem;
}
.UnitOutline-jumpToInput:disabled {
  background-color: var(--gray-9);
}
.UnitOutline ul[role='tree'],
.UnitOutline ul[role='treeitem'],
.UnitOutline ul[role='group'] {
  list-style: none;
  padding-left: 0;
}
.UnitOutline li:last-of-type {
  padding-bottom: 0.25rem;
}
.UnitOutline [role='treeitem'][aria-expanded='false'] + ul[role='group'] {
  display: none;
}
.UnitOutline [role='treeitem'][aria-expanded='true'] + ul[role='group'] {
  display: block;
}
.UnitOutline [role='treeitem'][aria-level='1'] + ul[role='group'] {
  max-height: calc(100vh - 20rem);
  overflow-y: auto;
  padding: 0.5rem 0.25rem 0 0.25rem;
}
.UnitOutline a {
  color: var(--gray-2);
  display: block;
  line-height: 1.5rem;
  overflow: hidden;
  padding: 0.125rem 0 0.125rem 1.25rem;
  position: relative;
  text-overflow: ellipsis;
  user-select: none;
  white-space: nowrap;
}
.UnitOutline a:focus,
.UnitOutline a:hover {
  outline: transparent;
  text-decoration: underline;
}
.UnitOutline [role='treeitem'][aria-selected='true'] {
  color: var(--gray-1);
}
.UnitOutline [role='treeitem'][aria-selected='true'] {
  font-weight: 500;
}
.UnitOutline [role='treeitem'][aria-level='1'] {
  display: block;
  font-size: 1.125rem;
  font-weight: 500;
  line-height: 2.5rem;
  padding: 0 1rem;
}
.UnitOutline [role='treeitem'][aria-level='1'][aria-selected='true'],
.UnitOutline [role='treeitem'][aria-level='1'][aria-expanded='true'] {
  background-color: var(--gray-9);
}
.UnitOutline [role='treeitem'][aria-level='3'][aria-expanded='true'] {
  margin-bottom: 0.375em;
}
.UnitOutline [role='treeitem'][aria-level='2'] {
  position: relative;
  margin-bottom: 0.25rem;
}
.UnitOutline [role='treeitem'][aria-level='3'] {
  font-size: 0.875rem;
  padding-left: 2.5rem;
}
.UnitOutline [role='treeitem'][aria-level='4'] {
  border-left: 0.125rem solid var(--gray-9);
  font-size: 0.875rem;
  margin-left: 2.5rem;
  padding-left: 0.5rem;
}
.UnitOutline [role='treeitem'][aria-selected='true'][aria-level='2']:not([aria-expanded])::before,
.UnitOutline [role='treeitem'][aria-selected='true'][aria-level='3']:not([aria-expanded])::before {
  border-radius: 50%;
  background-color: var(--turq-dark);
  content: '';
  display: block;
  height: 0.3125rem;
  left: 0.4688rem;
  position: absolute;
  top: 0.6875rem;
  width: 0.3125rem;
}
.UnitOutline [role='treeitem'][aria-expanded][aria-owns][aria-level='2']::before,
.UnitOutline [role='treeitem'][aria-expanded][aria-owns][aria-level='3']::before {
  border-bottom: 0.25rem solid transparent;
  border-left: 0.25rem solid var(--gray-4);
  border-right: 0;
  border-top: 0.25rem solid transparent;
  content: '';
  display: block;
  height: 0;
  left: 0.5rem;
  position: absolute;
  top: 0.625rem;
  transition: transform 0.1s linear;
  width: 0;
}
.UnitOutline [role='treeitem'][aria-expanded='true'][aria-level='2']::before,
.UnitOutline [role='treeitem'][aria-expanded='true'][aria-level='3']::before {
  transform: rotate(90deg);
}
.UnitOutline [role='treeitem'][aria-expanded][aria-level='3']:not([empty]):before,
.UnitOutline [role='treeitem'][aria-selected][aria-level='3']:not([empty]):before {
  left: 1.5rem;
  top: 0.75rem;
}
.UnitOutline [role='treeitem'][aria-selected='true'][aria-level='4'] {
  border-left: 0.125rem solid var(--turq-dark);
}
