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

.UnitFixedHeader {
  background-color: var(--gray-10);
  border-bottom: 1px solid var(--gray-8);
  height: var(--header-height);
  position: fixed;
  top: 0;
  left: 0;
  transform: translateY(calc(var(--header-height) * -1));
  transition: transform 100ms linear;
  width: 100%;
  z-index: 1000;
}
@media print {
  .UnitFixedHeader {
    display: none;
  }
}
.UnitFixedHeader--visible {
  transform: unset;
}
.UnitFixedHeader-container {
  align-items: center;
  display: flex;
  height: 100%;
  margin: 0 auto;
  max-width: 75.75rem;
  padding: 0 0.5rem;
  position: relative;
}
.UnitFixedHeader-container {
  max-width: 98rem;
}
.UnitFixedHeader-logoLink {
  margin-right: 1rem;
}
.UnitFixedHeader-logo {
  display: block;
  height: 1.695625;
  width: 4.5rem;
}
.UnitFixedHeader-moduleInfo {
  align-items: baseline;
  display: flex;
  flex-wrap: nowrap;
  margin-right: 3rem;
  min-width: 0;
}
.UnitFixedHeader-title {
  font-weight: 600;
  font-size: 1.125rem;
  line-height: 1.5;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.UnitFixedHeader-titleType {
  display: none;
}
.UnitFixedHeader-titleType--small {
  display: inline;
}
@media only screen and (min-width: 25rem) {
  .UnitFixedHeader-titleType {
    display: inline;
  }
  .UnitFixedHeader-titleType--small {
    display: none;
  }
}
.UnitFixedHeader .CopyToClipboardButton {
  top: 0.1875rem;
}
.UnitFixedHeader-pathInput {
  left: -100vw;
  position: absolute;
  top: -100vh;
}
.UnitFixedHeader-version {
  color: var(--gray-2);
  font-size: 0.6875rem;
  position: relative;
}
@media only screen and (min-width: 37.5rem) {
  .UnitFixedHeader-container {
    padding: 0 1.5rem;
  }
  .UnitFixedHeader-logo {
    height: 1.9541rem;
    width: 5.1875rem;
  }
  .UnitFixedHeader-title {
    font-size: 1.5rem;
  }
  .UnitFixedHeader .CopyToClipboardButton {
    top: 0.0625rem;
  }
  .UnitFixedHeader-version {
    top: -0.125rem;
  }
}
.UnitFixedHeader-overflowingTabList {
  display: flex;
  flex: 1;
  height: 100%;
  min-width: 0;
  position: relative;
}
.UnitFixedHeader [role='tablist'] {
  display: flex;
  flex: 1;
  height: 100%;
  justify-content: flex-end;
  margin: 0;
  padding: 0;
}
.UnitFixedHeader [role='tab'] + [role='tab'] {
  margin-left: 1rem;
}
.UnitFixedHeader [role='tab'] {
  border-bottom: 0.25rem solid transparent;
  display: block;
  height: 100%;
  padding: 1.3125rem 0.5rem 0 0.5rem;
  white-space: nowrap;
}
.UnitFixedHeader [role='tab']:hover {
  border-bottom-color: var(--purple);
  text-decoration: none;
}
.UnitFixedHeader [role='tab'][aria-selected='true'] {
  border-bottom-color: var(--turq-dark);
}
.UnitFixedHeader [role='tab'][aria-hidden='true'] {
  display: none;
}
.UnitFixedHeader [role='tab'][aria-disabled='true'],
.UnitFixedHeader [role='tab'][aria-disabled='true']:hover {
  border-bottom-color: transparent;
  color: var(--gray-5);
  cursor: not-allowed;
}
.UnitFixedHeader-overflowContainer {
  display: block;
  height: 1.5rem;
  position: absolute;
  right: 0.0625rem;
  top: 1.125rem;
  width: 1.5rem;
}
@media only screen and (min-width: 80rem) {
  .UnitFixedHeader-overflowContainer {
    display: none;
  }
}
.UnitFixedHeader-overflowingTabList.is-overflowing {
  padding-right: 1.5rem;
}
.UnitFixedHeader-overflowingTabList.is-overflowing .UnitFixedHeader-overflowContainer {
  display: block;
}
.UnitFixedHeader-overflowImage {
  fill: var(--gray-3);
  height: 100%;
  left: 0;
  position: absolute;
  top: 0;
  width: 100%;
}
.UnitFixedHeader-overflowSelect {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  background: transparent;
  border: 0;
  color: transparent;
  cursor: pointer;
  font-size: 1rem;
  height: 100%;
  left: 0;
  position: absolute;
  top: 0;
  width: 100%;
}
.UnitFixedHeader-overflowSelect option {
  color: var(--gray-1);
}
.UnitHeaderFixed-detail {
  align-items: center;
  display: flex;
  flex-wrap: wrap;
  margin-left: auto;
  margin-right: 2rem;
  white-space: nowrap;
}
.UnitHeaderFixed-detailItem {
  color: var(--gray-4);
  display: none;
  font-size: 0.875rem;
}
.UnitHeaderFixed-detailItem img {
  margin-right: 0.5rem;
  vertical-align: middle;
}
.UnitHeaderFixed-detailItem a > span {
  color: var(--gray-4);
}
.UnitHeaderFixed-detailItem:not(:first-of-type):before {
  content: '|';
  padding: 1rem;
}
@media only screen and (max-width: 52rem) {
  .UnitHeaderFixed-detailItem:not(:first-of-type):before {
    padding: 0.5rem;
  }
}
@media only screen and (min-width: 64rem) {
  .UnitHeaderFixed-detailItem--md {
    display: block;
  }
}
@media only screen and (min-width: 80rem) {
  .UnitHeaderFixed-detailItem--lg {
    display: block;
  }
}
a.UnitFixedHeader-backLink {
  color: black;
  display: block;
  font-size: 1.125rem;
  line-height: 1.5rem;
  margin: auto 0 auto auto;
}
