/*!
 * 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';

.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;
  word-break: break-word;
}
@media only screen and (min-width: 57.7rem) {
  .UnitDetails {
    padding: 0 1.5rem;
  }
}
@media only screen and (min-width: 52rem) {
  .UnitDetails {
    grid-template-columns: 15.5rem minmax(32.5rem, 43.125rem);
    margin-top: 0;
  }
}
@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: 52rem) {
  .UnitDetails :target {
    scroll-margin-top: calc(var(--header-height) + 0.75rem);
  }
}
.UnitDetails :target:not(h2) {
  background-color: var(--yellow);
}
.UnitDetails-outline {
  display: none;
  height: calc(100vh - 7.8475rem);
  margin-top: 2.5rem;
  position: sticky;
  top: 4.5rem;
}
@media only screen and (min-width: 52rem) {
  .UnitDetails-outline {
    display: block;
  }
}
.UnitDetails-content {
  margin-top: 0.5rem;
  max-width: 60rem;
}
@media only screen and (min-width: 52rem) {
  .UnitDetails-content {
    margin-top: 2rem;
  }
}
.UnitDetails-meta {
  display: none;
  margin-top: 2rem;
}
@media only screen and (min-width: 64rem) {
  .UnitDetails-meta {
    display: block;
  }
}
.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;
}
