.login-error {
  margin: 0 0 1rem;
}

/**
 * App shell layout — grid sidebar/main, mobile bar stack.
 * Сайдбар: фикс header + scroll menu + фикс footer (вертикальный адаптив).
 * Mobile-first: одна колонка; 240px sidebar только ≥901px.
 * Канон DS; в globals — визуал (цвета, nav links), здесь структура.
 */
.main {
  grid-column: auto;
}

.sidebar {
  grid-column: auto;
  display: flex;
  flex-direction: column;
  min-height: 0;
  height: 100vh;
  height: 100dvh;
  max-height: 100dvh;
  overflow: hidden;
  box-sizing: border-box;
  backdrop-filter: blur(var(--waka-surface-glass-blur, 16px));
  -webkit-backdrop-filter: blur(var(--waka-surface-glass-blur, 16px));
  border-right: 1px solid var(--waka-surface-glass-border, var(--waka-border));
}

.sidebar-header,
.sidebar > .brand-row,
.sidebar > .brand-compact {
  flex: 0 0 auto;
  min-width: 0;
}

.sidebar .nav,
.sidebar .sidebar-nav {
  flex: 1 1 auto;
  min-height: 0;
  min-width: 0;
  overflow-x: hidden;
  overflow-y: auto;
  overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
}

.sidebar-foot {
  flex: 0 0 auto;
  margin-top: 0;
  min-width: 0;
  gap: 0.5rem;
}

.app-shell {
  grid-template-columns: minmax(0, 1fr);
  /* Canonical page gutters — same scale as /home (--home-page-pad) */
  --shell-page-pad: var(--waka-space-4);
  --shell-page-pad-top: 1.75rem;
  --shell-page-pad-bottom: 3rem;
  --shell-chrome-after-topbar: var(--waka-space-4);
}

@media (min-width: 768px) {
  .app-shell {
    --shell-page-pad: var(--waka-space-5);
  }
}

@media (min-width: 1100px) {
  .app-shell {
    --shell-page-pad: var(--waka-space-6);
  }
}

@media (min-width: 1680px) {
  .app-shell {
    --shell-page-pad: var(--waka-space-7);
  }
}

.main {
  padding-top: max(var(--shell-page-pad-top), env(safe-area-inset-top, 0px));
  padding-right: max(var(--shell-page-pad), env(safe-area-inset-right, 0px));
  padding-bottom: max(var(--shell-page-pad-bottom), env(safe-area-inset-bottom, 0px));
  padding-left: max(var(--shell-page-pad), env(safe-area-inset-left, 0px));
}

@media (min-width: 901px) {
  .app-shell {
    grid-template-columns: 240px minmax(0, 1fr);
  }

  .sidebar {
    grid-column: 1;
  }

  .main {
    grid-column: 2;
  }
}

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

  .mobile-bar {
    grid-column: 1;
    grid-row: 1;
    width: 100%;
    min-width: 0;
  }

  /* Drawer вне треков: fixed + unset placement — иначе пустая колонка слева */
  .sidebar {
    grid-column: unset;
    grid-row: unset;
    height: 100vh;
    height: 100dvh;
    max-height: 100dvh;
  }

  .main {
    grid-column: 1;
    grid-row: 2;
    min-width: 0;
    --shell-page-pad-bottom: 2rem;
  }
}

/* Page chrome rhythm — desktop title in topbar, subtitle/actions in flow.
 * Topbar pad/bleed matches /home atmosphere chrome (all pages). */
@media (min-width: 901px) {
  .desktop-topbar {
    margin: calc(-1 * var(--waka-space-2)) 0 var(--shell-chrome-after-topbar);
    margin-inline: calc(-1 * clamp(1rem, 2.5vw, 2.75rem));
    padding: 0.35rem clamp(1rem, 2.5vw, 2.75rem) 0.65rem;
  }

  .page-head {
    margin-bottom: 0;
    gap: var(--waka-space-2);
  }

  .page-head .page-sub,
  header:has(> .page-title--in-flow) .page-sub {
    margin-top: 0;
    margin-bottom: var(--waka-space-3);
  }

  header:has(> .page-title--in-flow) {
    gap: 0.35rem;
    margin-bottom: 0;
  }

  .settings-page .page-sub {
    margin-top: 0;
  }
}

/* Fill-viewport pages — flex/min-height chain through shell chrome (map uses home.css) */
.app-shell:has(.notebooks-page) {
  height: 100dvh;
  max-height: 100dvh;
  overflow: hidden;
}

.app-shell:has(.notebooks-page) > .main {
  display: flex;
  flex-direction: column;
  min-height: 0;
  overflow: hidden;
  padding-bottom: max(0.75rem, env(safe-area-inset-bottom, 0px));
}

.app-shell:has(.notebooks-page) > .main > .notebooks-page {
  flex: 1;
  min-height: 0;
  overflow: hidden;
}

/* Calendar: content-driven height — one page scroll in .main, no nested grid scrollbar */
.app-shell:has(.cal-page) > .main {
  padding-bottom: max(0.75rem, env(safe-area-inset-bottom, 0px));
}
