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

/*
 * Styling the sidenav.
 */

.Documentation-nav,
.Documentation-index,
.DocNav,
.DocNav-index {
  display: none;
}
.DocNavMobile {
  background-color: var(--white);
  display: block;
  height: 3rem;
  margin: 0 -1rem;
  position: sticky;
  top: var(--header-height);
  transition: box-shadow 0.2s linear;
  z-index: 100;
}
@media print {
  .DocNavMobile {
    display: none;
  }
}
.DocNavMobile--withShadow {
  box-shadow: 0 0.1875rem 0.1875rem rgba(0, 0, 0, 0.2);
}
.DocNavMobile-label,
.DocNavMobile-select {
  height: 2rem;
  left: 1rem;
  position: absolute;
  top: 0.5rem;
  width: calc(100% - 2rem);
}
.DocNavMobile-label {
  align-items: center;
  color: var(--gray-2);
  display: flex;
  padding: 0 0.5rem;
}
.DocNavMobile-label::after {
  border-bottom: 0;
  border-left: 0.3em solid transparent;
  border-right: 0.3rem solid transparent;
  border-top: 0.3rem solid var(--gray-4);
  content: '';
  display: block;
  height: 0;
  position: absolute;
  right: 0.625rem;
  top: 0.875rem;
  width: 0;
}
.DocNavMobile-selectIcon {
  fill: var(--gray-3);
  height: 1.4375rem;
  margin-right: 0.5rem;
  transform: rotate(180deg);
  width: 1.4375rem;
}
.DocNavMobile-selectText {
  flex: 1;
  margin-right: 1.2rem;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.DocNavMobile-select {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  background: transparent;
  border: 0.0625rem solid var(--gray-8);
  border-radius: 0.1875rem;
  color: transparent;
  display: block;
}

/**
 * Firefox allows for styling of option and optgroup tags.
 * Ensure they don’t inherit the clear styling of their parent.
 */
.DocNavMobile-select option {
  color: var(--gray-1);
}
.DocNavMobile-select optgroup {
  color: var(--gray-3);
}
@media only screen and (min-width: 64rem) {
  .Documentation {
    column-gap: 2rem;
    display: grid;
    grid-template-columns: 17.5rem minmax(0, auto);
  }

  /**
   * Remove once Doc HTML is fully rolled out, as js-* styles should NEVER be
   * styled per https://golang.org/wiki/CSSStyleGuide.
   */
  .js-docContent,
  .Documentation-content {
    max-width: 60rem;
    min-width: 0;
    width: 100%;
  }
  .Documentation-build {
    grid-column: span 2;
    text-align: center;
  }
  .DocNav {
    display: block;
    max-height: calc(100vh - var(--header-height));
    overflow-x: hidden;
    overflow-y: auto;
    padding-left: 0.25rem;
    padding-top: 1rem;
    position: sticky;
    top: var(--header-height);
  }
  .DocNavMobile {
    display: none;
  }
  .DocNav [role='tree'],
  .DocNav [role='group'] {
    margin: 0;
    padding: 0 0 2rem 0;
  }
  .DocNav [role='treeitem'][aria-level='1'] {
    margin-bottom: 0.5rem;
  }
  .DocNav [role='group'] {
    font-size: 0.875rem;
    padding: 0;
  }
  .DocNav [role='treeitem'] {
    padding: 0.125rem 0 0.125rem 1.25rem;
    position: relative;
    user-select: none;
  }
  .DocNav [role='treeitem']:focus,
  .DocNav [role='treeitem']:hover {
    outline: 0;
    text-decoration: underline;
  }
  .DocNav [role='group'] [role='treeitem'] {
    padding-left: 2.5rem;
  }
  .DocNav ul[role='group'] > :last-child {
    margin-bottom: 0.375rem;
  }
  .DocNav [aria-selected='true'] {
    color: var(--gray-1);
    font-weight: 500;
  }
  .DocNav [aria-selected='true']:not(.DocNav-groupLabel)::before {
    background-color: var(--turq-dark);
    border-radius: 50%;
    content: '';
    display: block;
    height: 0.3125rem;
    left: 0.4688rem;
    position: absolute;
    top: 0.6875rem;
    width: 0.3125rem;
  }
  .DocNav [role='group'] [aria-selected='true']::before {
    left: 1.5rem;
    top: 0.75rem;
  }
  .DocNav [role='group'] [role='group'] [role='treeitem'] {
    border-left: 0.125rem solid var(--gray-9);
    margin-left: 2.5rem;
    padding-left: 0.5rem;
  }
  .DocNav [role='group'] [role='group'] [aria-selected='true']::before {
    display: none;
  }
  .DocNav [role='group'] [role='group'] [aria-selected='true'] {
    border-left: 0.125rem solid var(--turq-dark);
  }
  .DocNav-groupLabel {
    cursor: pointer;
    display: block;
  }
  .DocNav a,
  .DocNav a:link,
  .DocNav a:visited {
    color: var(--gray-2);
    display: block;
    opacity: 1;
    overflow: hidden;
    text-decoration: none;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .DocNav a:hover,
  .DocNav a[aria-selected='true'] {
    color: var(--gray-1);
  }
  .DocNav-groupLabel::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;
  }
  .DocNav-groupLabel--empty::before {
    content: unset;
  }

  /* Added to increase hit target on triangle above. */
  .DocNav-groupLabel::after {
    content: '';
    display: block;
    height: 2rem;
    left: 0;
    position: absolute;
    top: 0;
    width: 2rem;
  }

  /**
   * Expandable nodes at this level have smaller text and more left padding,
   * so adjust for that.
   */
  .DocNav [role='group'] .DocNav-groupLabel::before {
    left: 1.5625rem;
    top: 0.6875rem;
  }
  .DocNav-groupLabel[aria-expanded='true'] {
    margin-bottom: 0.375em;
  }
  .DocNav-groupLabel[aria-expanded='true']::before {
    transform: rotate(90deg);
  }
  .DocNav [aria-expanded='false'] + [role='group'] {
    display: none;
  }
}
@media only screen and (min-width: 100rem) {
  .Documentation {
    grid-template-columns: 22rem minmax(0, auto);
  }
}
@media only screen and (min-width: 130rem) {
  .Documentation {
    grid-template-columns: 35rem minmax(0, auto);
  }
}
