.skip-link {
  position: absolute;
  inset-inline-start: 0.5rem;
  inset-block-start: 0.5rem;
  z-index: 10000;
  padding: 0.5rem 1rem;
  font-size: 0.9rem;
  font-weight: 600;
  text-decoration: none;
  color: var(--color-ink);
  background: var(--color-bg);
  border: 2px solid var(--color-selected-dark);
  border-radius: 0.35rem;
  clip-path: inset(100%);
  clip: rect(0 0 0 0);
  height: 1px;
  width: 1px;
  margin: -1px;
  overflow: hidden;
  white-space: nowrap;
}

.skip-link:focus,
.skip-link:focus-visible {
  clip-path: none;
  clip: auto;
  height: auto;
  width: auto;
  margin: 0;
  overflow: visible;
  white-space: normal;
}

body {
  display: grid;
  grid-template-rows: auto auto 1fr auto;
  grid-template-columns: 1fr;
  grid-template-areas:
    "header"
    "toolbar"
    "main"
    "footer";

  @media only screen and (min-width: 70ch) {
    grid-template-columns: auto 1fr;
    grid-template-areas:
      "sidebar header"
      "sidebar toolbar"
      "sidebar main"
      "sidebar footer";
  }
}

:root {
  --shell-inline-padding: clamp(1rem, 3vw, 1.75rem);
}

:where(#main) {
  container-type: inline-size;
  font-size: var(--font-medium-responsive);
  inline-size: 100%;
  margin-inline: 0;
  max-inline-size: none;
  padding-block-end: clamp(var(--block-space), 5%, calc(var(--block-space) * 3));
  padding-inline: var(--shell-inline-padding);
  text-align: center;

  @media print {
    font-size: 11pt;
    inline-size: unset;
    line-height: 1.3;
    margin: 0;
    orphans: 3;
    padding: 0;
    text-align: justify;
    text-justify: distribute;
    widows: 2;
  }
}

:where(#footer) {
  grid-area: footer;
  max-inline-size: 100vw;
  view-transition-name: footer;

  > nav {
    padding-inline: var(--inline-space);
    view-transition-name: footer-nav;
  }

  &:has(.new-book-btn) {
    inset-block-end: 0;
    pointer-events: none;
    position: sticky;
  }
}

:where(#header) {
  grid-area: header;
  max-inline-size: 100vw;
  transition: margin-inline-start 0.2s ease-out;
  view-transition-name: header;
  z-index: 1;

  :has(#sidebar-toggle:checked) & {
    @media (min-width: 70ch) {
      margin-inline-start: -25vw;
    }
  }

  > nav {
    view-transition-name: nav;
  }

  > * {
    align-items: center;
    display: flex;
    gap: 1ch;
    justify-content: center;
    /* Header container (e.g. .app-topbar) provides the horizontal padding.
       Avoid re-padding children so #main and header stay perfectly aligned. */
    padding-block: var(--block-space-half);
    padding-inline: 0;
  }

  .btn {
    flex-shrink: 0;
  }
}

:where(#sidebar) {
  background-color: var(--color-subtle-light);
  block-size: 100%;
  font-size: var(--font-medium-responsive);
  grid-area: sidebar;
  inline-size: 25vw;
  max-block-size: 100%;
  overflow: auto;
  position: relative;
  transition: margin-inline-start 0.2s ease-out;

  :has(#sidebar-toggle:checked) & {
    margin-inline-start: 0;
  }

  @media (max-width: 70ch) {
    display: none;
  }

  @media (min-width: 70ch) {
    margin-inline-start: -25vw;
  }
}

:where(#toolbar) {
  display: flex;
  grid-area: toolbar;
  inset: 0 0 auto;
  justify-content: center;
  min-width: 0;
  overflow: hidden;
  padding-inline: var(--inline-space);
  position: sticky;
  view-transition-name: toolbar;
  z-index: 1;
}

:is(#header, #footer, #sidebar, #toolbar) {
  @media print {
    display: none;
  }
}
