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

.go-Banner {
  background-color: var(--gray-1);

  /**
   * Only show on wide viewports so the
   * text never wraps or gets cut off.
   */
  display: none;
}
.go-Banner-inner {
  align-items: center;
  display: flex;
  justify-content: space-between;
  margin: 0 auto;
  max-width: 75.75rem;
  min-height: 2.5rem;
  padding: 0.5rem var(--gutter);
}
.Site--wide .go-Banner-inner {
  max-width: 98rem;
}
.go-Banner--full .go-Banner-inner {
  max-width: unset;
}
.go-Banner-message {
  color: var(--white);
  margin-right: 1.25rem;
}
.go-Banner-action:link,
.go-Banner-action:visited {
  color: var(--white);
  text-decoration: underline;
  white-space: nowrap;
}
@media only screen and (min-width: 52rem) {
  .go-Banner {
    display: block;
  }
}

.go-Header {
  background: #007d9c;
  border-bottom: none;
  box-shadow: 0 0.0625rem 0.125rem rgba(171, 171, 171, 0.3);
  top: 0;
  width: 100%;
  z-index: 10;
}
.go-Header-inner {
  margin: 0 auto;
  max-width: 75.75rem;
  padding: 0 var(--gutter);
}
.Site--wide .go-Header-inner {
  max-width: 98rem;
}
.go-Header--full .go-Header-inner {
  max-width: initial;
}
.go-Header-nav {
  align-items: center;
  display: flex;
  height: 3.5rem;
  justify-content: space-between;
}
.go-Header-rightContent {
  align-items: center;
  display: flex;
  height: 100%;
  justify-content: flex-end;
  width: 100%;
}
.go-Header-rightContent form {
  flex-grow: 1;
}
.go-Header-inner--dark {
  border-bottom: none;
  color: var(--white);
}
.go-Header-logo {
  display: block;
  height: 2rem;
  margin-right: 2.25rem;
  width: 5.125rem;
}
.go-Header-logo--hidden {
  display: none;
}
.go-Header-menuItem {
  display: none;
}
.go-Header-menu {
  align-items: stretch;
  display: flex;
  height: 100%;
  list-style: none;
  margin: 0;
  padding: 0;
}
@media only screen and (min-width: 57.7rem) {
  .go-Header-menuItem {
    align-items: stretch;
    display: inline-flex;
    flex: none;
  }
  .go-Header-menu {
    justify-content: flex-end;
  }
  .go-Header-navOpen {
    display: none;
  }
}
.go-Header-menuItem a:link,
.go-Header-menuItem a:visited {
  align-items: center;
  border-bottom: 0.1875rem solid transparent;
  border-top: 0.1875rem solid transparent; /* To ensure the text remains centered. */
  color: var(--gray-2);
  display: inline-flex;
  margin: 0 0.3125rem;
  padding: 0 0.9375rem;
  text-align: center;
  text-decoration: none;
  width: 100%;
}
.go-Header-menuItem--active a:link,
.go-Header-menuItem--active a:visited {
  border-bottom-color: var(--turq-med);
  font-weight: bold;
}
.go-Header-menuItem a:hover {
  border-bottom-color: var(--white);
  color: var(--gray-2);
}
.go-NavigationDrawer-listItem a:link,
.go-NavigationDrawer-listItem a:visited {
  display: block;
  margin: 0 1rem;
  padding: 0.5rem;
}
.go-Header-inner--dark .go-Header-menuItem a:link,
.go-Header-inner--dark .go-Header-menuItem a:visited {
  color: var(--white);
}

.go-Header-navOpen {
  background: no-repeat center/2rem url('/images/menu-24px.svg');
  border: none;
  height: 2.5rem;
  margin-left: 1rem;
  width: 2.5rem;
}
.go-Header-navOpen--white {
  background: no-repeat center/2rem url('/static/shared/icon/menu_gm_grey_24dp.svg');
  filter: brightness(0) saturate(100%) invert(100%) sepia(97%) saturate(13%) hue-rotate(245deg)
    brightness(103%) contrast(107%);
}

.go-SearchForm {
  align-items: center;
  background-color: transparent;
  border-radius: 0.25rem;
  display: flex;
  flex: 1;
  font-size: 1rem;
  height: 2rem;
  margin: 0.6875rem 0;
  max-width: 2rem;
  transition: max-width 200ms;
}
.go-SearchForm--open {
  background-color: var(--color-background);
  margin-left: 1.5rem;
  max-width: min(100%, 30rem);
}
.go-SearchForm svg {
  box-sizing: border-box;
  cursor: pointer;
  fill: var(--white);
  margin-left: 0.5rem;
  width: 1.4375rem;
}
.go-SearchForm--open svg {
  fill: var(--color-text-subtle);
  margin-right: 0.5rem;
}
.go-SearchForm-input {
  background-color: transparent;
  border: none;
  box-sizing: border-box;
  font: inherit;
  height: 100%;
  opacity: 0;
  outline: none;
  padding: 0;
  transition: width 200ms, padding 200ms, opacity 200ms;
  width: 0;
}
.go-SearchForm--open .go-SearchForm-input {
  flex: 1;
  opacity: 1;
  padding: 0.5rem;
  transition: width 200ms, padding 200ms;
  width: 100%;
}
.go-SearchForm-input::placeholder {
  color: var(--color-text-subtle);
}
.go-SearchForm-submit {
  background-color: transparent;
  border: none;
  box-sizing: border-box;
  cursor: pointer;
  display: flex;
  outline: 0;
  padding: 0;
}

@media only screen and (min-width: 32rem) {
  .go-Header-rightContent {
    width: 100%;
  }
  .go-SearchForm {
    background-color: var(--color-background);
    margin: 0.6rem 1.4rem 0.6rem 0;
    max-width: none;
  }
  .go-SearchForm-input {
    opacity: 1;
    padding: initial;
    width: 100%;
  }
  .go-SearchForm svg {
    fill: var(--color-text-subtle);
    margin-right: 0.5rem;
  }
}

.go-NavigationDrawer {
  background: var(--white);
  height: 100%;
  left: auto;
  max-width: 27rem;
  position: fixed;
  right: 0;
  top: 0;
  transform: translateX(100%);
  transition: transform 100ms ease-in-out;
  width: 85%;
  z-index: 30;
}
@media only screen and (min-width: 50rem) {
  .go-NavigationDrawer {
    display: none;
  }
}
.go-NavigationDrawer.is-active {
  transform: translateX(0);
}
.go-NavigationDrawer-header {
  align-items: center;
  display: flex;
  justify-content: space-between;
}
.go-NavigationDrawer-logo {
  display: block;
  height: 2rem;
  margin: 1rem 1rem;
  width: 5.125rem;
}
.go-NavigationDrawer-list {
  list-style: none;
  margin: 0;
  padding: 0;
}
.go-NavigationDrawer-listItem {
  font-size: 1.125rem;
  margin: 0 0.5rem;
}
.go-NavigationDrawer-listItem--active {
  background-color: var(--blue);
  border-radius: 0.4rem;
}
.go-NavigationDrawer-scrim {
  display: none;
  height: 100%;
  left: 0;
  position: fixed;
  top: 0;
  width: 100%;
  z-index: 20;
}
.go-NavigationDrawer.is-active + .go-NavigationDrawer-scrim {
  background-color: var(--gray-1);
  display: block;
  opacity: 0.32;
}
