// Admin shell: full-viewport flex column — header on top, sidebar + // main side-by-side filling the middle, footer pinned at the bottom. // The sidebar owns its own scrolling so a long nav doesn't push the // header off-screen; main scrolls independently so audit-log tables // don't drag the chrome with them. :host { display: flex; flex-direction: column; min-height: 100vh; height: 100vh; } .shell-body { display: flex; flex: 1 1 auto; min-height: 0; } .shell-main { flex: 1 1 auto; min-width: 0; overflow-y: auto; background-color: #f9fafb; color: #111827; padding: 1.5rem; } :host-context(.dark) .shell-main { background-color: #0b1220; color: #e5e7eb; } // Skip-link (WCAG 2.4.1 "Bypass Blocks"). Hidden by default, fully // visible and focusable when reached via Tab from the address bar. // Plain CSS rather than the `sr-only` Tailwind utilities so the // visual state on focus is as predictable as possible across themes. .skip-link { position: absolute; top: -40px; left: 0.75rem; z-index: 50; padding: 0.5rem 0.75rem; background: var(--color-brand-primary-500); color: #fff; border-radius: 0.25rem; text-decoration: none; transition: top 0.15s ease-out; &:focus, &:focus-visible { top: 0.5rem; outline: 2px solid var(--color-brand-accent-300); outline-offset: 2px; } }