.app-shell {
  display: grid;
  grid-template-columns: 15rem minmax(0, 1fr) 18rem;
  grid-template-rows: auto 1fr;
  grid-template-areas:
    "nav    topbar topbar"
    "nav    main   context";
  min-block-size: 100vh;
}

#course-nav {
  grid-area: nav;
  background: var(--color-bg-elevated);
  border-inline-end: 1px solid var(--color-border);
  padding: var(--space-4);
  overflow-y: auto;
}

.topbar {
  grid-area: topbar;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-4);
  padding: var(--space-3) var(--space-4);
  background: var(--color-bg-elevated);
  border-block-end: 1px solid var(--color-border);
}

.topbar-title {
  font-weight: 600;
}

#topbar-actions {
  display: flex;
  gap: var(--space-2);
}

#app-main {
  grid-area: main;
  padding: var(--space-5);
  outline: none;
}

#context-panel {
  grid-area: context;
  background: var(--color-bg-elevated);
  border-inline-start: 1px solid var(--color-border);
  padding: var(--space-4);
  overflow-y: auto;
}

@media (max-width: 900px) {
  .app-shell {
    grid-template-columns: minmax(0, 1fr);
    grid-template-rows: auto 1fr auto;
    grid-template-areas:
      "topbar"
      "main"
      "context";
  }

  #course-nav {
    border-inline-end: 0;
    border-block-start: 1px solid var(--color-border);
    max-block-size: 70vh;
    transform: translateY(100%);
    transition: transform 0.2s ease;
    position: fixed;
    inset-block-end: 0;
    inset-inline: 0;
    z-index: 50;
    box-shadow: 0 -0.5rem 1rem rgba(0, 0, 0, 0.25);
  }

  #course-nav[data-open="true"] {
    transform: translateY(0);
  }

  #context-panel {
    border-inline-start: 0;
    border-block-end: 1px solid var(--color-border);
  }

  .topbar {
    flex-wrap: wrap;
  }
}
