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

@import './readme.css';
@import './sidenav.css';
@import './unit_readme.css';
@import './unit_doc.css';
@import './unit_files.css';
@import './unit_directories.css';
@import './unit_meta.css';
@import './unit_build_context.css';

.UnitDetails {
  column-gap: 2rem;
  display: grid;
  grid-template-columns: minmax(0, auto);
  margin: auto;
  margin-top: 1rem;
  max-width: 98rem;
  min-height: 32rem;
  padding: 0 1rem;
}
@media only screen and (min-width: 57.7rem) {
  .UnitDetails {
    padding: 0 1.5rem;
  }
}
@media only screen and (min-width: 64rem) {
  .UnitDetails {
    grid-template-columns: 15.5rem minmax(30.5rem, 43.125rem) minmax(10rem, 15.5rem);
  }
}
@media only screen and (min-width: 80rem) {
  .UnitDetails {
    grid-template-columns: 15.5rem minmax(43.125rem, 60rem) 15.5rem;
    justify-content: center;
  }
}
.UnitDetails :target {
  scroll-margin-top: calc(var(--header-height) + 3.75rem);
}
@media only screen and (min-width: 64rem) {
  .UnitDetails :target {
    scroll-margin-top: calc(var(--header-height) + 0.75rem);
  }
}

.UnitDetails :target:not(details, h2) {
  background-color: var(--blue);
  padding: 0.25rem;
}
.UnitDetails-outline {
  display: none;
  height: calc(100vh - 7.8475rem);
  margin-top: 1.5rem;
  position: sticky;
  top: calc(var(--header-height) + var(--banner-height) + 1rem);
}
@media only screen and (min-width: 64rem) {
  .UnitDetails-outline {
    display: block;
  }
}
.UnitDetails-content {
  margin-top: 0.5rem;
  max-width: 60rem;
}
@media only screen and (min-width: 64rem) {
  .UnitDetails-content {
    margin-top: 1rem;
  }
}
.UnitDetails-meta {
  order: -1;
}
@media only screen and (min-width: 64rem) {
  .UnitDetails-meta {
    display: block;
    margin-top: 2rem;
    order: initial;
  }
}
.UnitDetails-contentEmpty {
  background-color: var(--gray-10);
  color: var(--gray-2);
  height: 15rem;
  padding-top: 1rem;
  text-align: center;
}
.UnitDetails-contentEmpty img {
  height: 7.8125rem;
  width: auto;
}

.JumpDialog {
  width: 25rem;
}
.JumpDialog-body {
  height: 12rem;
  overflow-y: scroll;
  padding: 0 0 0 0.8rem;
}
.JumpDialog-list {
  display: flex;
  flex-direction: column;
}
.JumpDialog-filter {
  margin: 0.5rem 0.8rem;
}
.JumpDialog-input {
  font-size: 1.125rem;
  width: 100%;
}
.JumpDialog a {
  padding: 0.25rem;
  text-decoration: none;
}
.JumpDialog .JumpDialog-active {
  background-color: var(--turq-dark);
  color: var(--white);
}

.ShortcutsDialog-key {
  text-align: right;
}
.ShortcutsDialog table {
  padding: 0 1rem;
}
