/*!
 * 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-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-content :target::before {
  content: '';
  display: block;
  position: relative;
  width: 0;
  height: calc(var(--header-height) + 3.75rem);
  margin-top: calc(
    -1 * (var(--header-height) + 3.75rem)
  ); /* Move hidden anchor content for deep linking with a sticky header. */
}
@media only screen and (min-width: 52rem) {
  .UnitDetails-content :target::before {
    height: calc(var(--header-height) + 0.75rem);
    margin-top: calc(
      -1 * (var(--header-height) + 0.75rem)
    ); /* Move hidden anchor content for deep linking with a sticky header. */
  }
}

.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;
}
