/**
 * The website contains two main components: the sidebar and the textbook page.
 * This file specifies the layout and includes classes to show/hide the sidebar
 * on small screens.
 *
 * The actual styling for the sidebar and page are located in their respective
 * component SCSS files. This file manages the layout and width only.
 *
 * By default, the sidebar is not visible.
 *
 * [1]: The entire page is positioned relative so that when the page overflows
 *   (e.g. sidebar open on small screens) the user can't scroll left/right.
 * [2]: The sidebar and the textbook page are positioned absolute so that we
 *   can use translate() on the textbook page to reveal the sidebar.
 * [3]: Setting the background color hides the sidebar when it's behind the
 *   page (otherwise the page is transparent).
 *
 * When the sidebar is visible:
 *
 * [4]: Shift the textbook page over to the left. On small screens, the page
 *   will overflow since the sidebar takes up most of the screen.
 * [5]: On larger screens, the page and sidebar have enough room to read them
 *   simultaneously, so make sure that the page doesn't overflow.
 */

$left-sidebar-width: 300px;
$textbook-page-max-width: 950px;
$right-sidebar-width: 220px;
$topbar-height: 60px;

.c-textbook {
  /* [1] */
  position: relative;
  height: 100vh;
  overflow: hidden;
  margin: 0 0 0 auto;
}

.c-topbar {
  background-color: $book-background-color;
  position: fixed;
  top: 0;
  height: $topbar-height;
  width: 100%;
  left: 0;
  padding: $spacing-unit-small $spacing-unit-small 0 $spacing-unit-med * 2;
  z-index: 1;
  transition: top 250ms, transform 250ms ease; // For animations
}

@include mq($until: tablet) {
  .c-topbar.hidetop {
    // At desktop, we stop hiding the navbar
    top: -250px;
  }
}

.c-textbook__sidebar,
.c-textbook__page {
  /* [2] */
  height: 100vh;
  overflow: auto;
  position: fixed;
  background-color: $book-background-color;; /* [3] */
}

.c-textbook__sidebar {
  width: $left-sidebar-width;
  top: 0;
  left: 0;
}

.c-textbook__page {

  width: $textbook-page-width;
  transition: transform 250ms ease;
  left: 0;
  padding: 0 $spacing-unit $spacing-unit-small $spacing-unit-small * 3;
  overflow-x: visible;

  @include mq($from: laptop) {
    // At desktop, we show the right TOC
    padding-right: calc(100% - #{$left-sidebar-width} - #{$textbook-page-max-width});
  }

  &:focus {
    /* [2] */
    outline: none;
  }
}

.sidebar__right {
  // By default we hide the sidebar
  display: none;

  // Spacing for the sidebar
  width: $right-sidebar-width - $spacing-unit-small; // To account for the small margin on the right
  position: relative;
  float: right;
  z-index: 1; // Keep sidebar under page content

  @include mq($from: tablet) {
    // Show right TOC at laptop size
    display: block;
  }
}

.js-show-sidebar {
  .c-textbook__page, .c-topbar {
    /* [4] */
    transform: translate($left-sidebar-width, 0);

    @include mq($from: tablet) {
      /* [5] */
      width: calc(100% - #{$left-sidebar-width});
    }
  }
}

.c-textbook__content {
  clear: both;
  padding-top: $topbar-height * 1.5;
  width: 95%;
}

.c-page__nav {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding-top: 30px;
}

// Make sure that the bottom content has the same width as non-sidebar content
.footer, .c-page__nav {
  @include mq($from: laptop) {
    width: $textbook-page-with-sidebar-width;
  }
}

// Scrollbar width
::-webkit-scrollbar {
  width: 5px;
  background: #f1f1f1;
}

::-webkit-scrollbar-thumb {
  background: #c1c1c1;
}

main, nav {
  scrollbar-width: thin;
}