/*
 * 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 './unit_readme.css';
@import './unit_doc.css';
@import './unit_directories.css';
@import './unit_meta.css';
@import './unit_outline.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.5rem 1rem;
}
@media only screen and (min-width: 57.7rem) {
  .UnitDetails {
    padding: 0.5rem 1.5rem;
  }
}
@media only screen and (min-width: 52rem) {
  .UnitDetails {
    grid-template-columns: 15.5rem minmax(32.5rem, 43.125rem);
  }
}
@media only screen and (min-width: 64rem) {
  .UnitDetails {
    grid-template-columns: 15.5rem minmax(32.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. */
  }
}
