/*!
 * 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: 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(--yellow);
}
.UnitDetails-outline {
  display: none;
  height: calc(100vh - 7.8475rem);
  margin-top: 1.5rem;
  position: sticky;
  top: 4.5rem;
}
@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;
}
