# Design: App Layout
## Component Architecture
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ COMPONENT HIERARCHY │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ +layout.svelte │
│ └── {#if shouldUseAppLayout} │
│ └── AppLayout │
│ ├── Sidebar │
│ │ ├── SidebarHeader (toggle button) │
│ │ ├── SidebarSection (×3: Planning, Reports, Admin) │
│ │ │ └── SidebarItem (nav links with icons) │
│ │ └── SidebarFooter (theme toggle) │
│ │ │
│ └── div.main-content │
│ ├── TopBar │
│ │ ├── Breadcrumbs │
│ │ ├── MonthSelector │
│ │ └── UserMenu │
│ │ │
│ └── slot (page content) │
│ {:else} │
│ └── slot (login, public pages) │
│ {/if} │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
```
---
## AppLayout Component
### `src/lib/components/layout/AppLayout.svelte`
```svelte
```
---
## Sidebar Component
### `src/lib/components/layout/Sidebar.svelte`
```svelte
```
---
## TopBar Component
### `src/lib/components/layout/TopBar.svelte`
```svelte
```
---
## Breadcrumbs Component
### `src/lib/components/layout/Breadcrumbs.svelte`
```svelte
```
---
## MonthSelector Component
### `src/lib/components/layout/MonthSelector.svelte`
```svelte
-
-
-
{#each monthOptions as option}
-
{/each}
```
---
## Route Integration
### Update `src/routes/+layout.svelte`
```svelte
{#if shouldUseAppLayout}
{@render children()}
{:else}
{@render children()}
{/if}
```
---
## Responsive Behavior
| Breakpoint | Sidebar Default | Toggle Behavior |
|------------|-----------------|---------------------------|
| ≥1280px | expanded | Manual toggle |
| 768-1279px | collapsed | Manual toggle |
| <768px | hidden | Hamburger → drawer overlay|
---
## File Structure
```
src/lib/components/layout/
├── AppLayout.svelte # Main wrapper
├── Sidebar.svelte # Collapsible sidebar
├── SidebarSection.svelte # Section container
├── SidebarItem.svelte # Individual nav link
├── TopBar.svelte # Top bar
├── Breadcrumbs.svelte # Auto-generated breadcrumbs
├── MonthSelector.svelte # Period dropdown
└── UserMenu.svelte # User dropdown (reuse from Navigation)
```