.MainLayout {
  display: grid;
  grid-template-areas:
    "aside header"
    "aside tabs"
    "aside main"
    "aside footer";
  grid-template-rows: [header] var(--main-layout-header) [tabs] min-content [main] 1fr [footer] auto;
  grid-template-columns: [sidebar] minmax(var(--main-layout-header), min-content) [main] 1fr;

  height: 100%;

  > header {
    grid-area: header;
    background: $layoutBackground;
    padding: $padding $padding * 2;
  }

  > aside {
    grid-area: aside;
    position: relative;
    background: $sidebarBackground;
    white-space: nowrap;
    transition: width 150ms cubic-bezier(0.4, 0, 0.2, 1);

    &.pinned {
      width: var(--sidebar-width);
    }

    &:not(.pinned) {
      position: absolute;
      width: var(--main-layout-header);
      height: 100%;
      overflow: hidden;

      &.accessible:hover {
        width: var(--sidebar-width);
        transition-delay: 750ms;
        box-shadow: 3px 3px 16px rgba(0, 0, 0, 0.35);
        z-index: $zIndex-sidebar-hover;
      }
    }
  }

  > main {
    display: contents;
  }

  footer {
    position: relative;
    grid-area: footer;
    min-width: 0; // restrict size when overflow content (e.g. <Dock> tabs scrolling)
  }
}
