
@mixin build-header() {
  header {
    grid-area: head;

    @include fixed-header();
  }
}

@mixin build-main() {
  > main {
    grid-area: main;

    @include overflow-y-auto();
  }
}

@mixin build-nav() {
  > nav {
    grid-area: nav;

    @include overflow-y-auto();
  }
}

@mixin build-aside() {
  > aside {
    grid-area: aside;

    @include overflow-y-auto();
  }
}

@mixin build-footer() {
  > footer {
    grid-area: foot;
  }
}

@mixin overflow-y-auto() {
  &.overflow-y-auto {
    overflow-y: auto;
  }
}

@mixin fixed-header() {
  &.fixed {
    position: fixed;
    top: 0;
    right: 0;
    left: 0;
  }
}

// Defines a grid layout by referencing the names of the grid areas
@mixin make-layout($rows-template, $columns-template, $template-areas) {
  display: grid;
  width: 100%;
  height: 100vh;
  grid-template-rows: $rows-template;
  grid-template-columns: $columns-template;
  grid-template-areas: $template-areas;

  @include build-header();
  @include build-nav();
  @include build-aside();
  @include build-main();
  @include build-footer();
}
