`:
```tsx
{/* Collapsible category sections */}
{groupedSections.length > 0 && (
)}
```
The final DashboardContent JSX order becomes:
1. SummaryStrip
2. Chart grid (3-column)
3. CollapsibleSections (new)
4. QuickAdd button
**8. Update DashboardSkeleton (src/components/dashboard/DashboardSkeleton.tsx):**
Add skeleton placeholders for the collapsible sections area. After the chart grid skeleton div, add:
```tsx
{/* Collapsible sections skeleton */}
{[1, 2, 3].map((i) => (
))}
```
This mirrors 3 collapsed section headers (the most common default state), matching the real CategorySection header structure.
cd /home/jlmak/Projects/jlmak/SimpleFinanceDash && bun run lint && bun run build
- DashboardContent derives groupedSections from items via useMemo (filters empty groups, computes totals)
- openSections state initializes with direction-aware smart defaults (over-budget expanded, others collapsed)
- openSections resets via useEffect keyed on budgetId (month navigation)
- CollapsibleSections renders between chart grid and QuickAdd
- All hooks declared before early returns (Rules of Hooks compliance)
- DashboardSkeleton includes section header placeholders
- Lint and build pass
Task 2: Verify collapsible sections and carryover display
none
Human verification of the complete Phase 3 feature set. No code changes — this is a visual/functional verification checkpoint.
**What was built across Plan 01 and Plan 02:**
- Collapsible per-category sections between charts and QuickAdd
- Smart expand/collapse defaults (over-budget sections auto-expand)
- Carryover subtitle on balance card when non-zero
- Smooth expand/collapse animation
- Direction-aware difference coloring
- DashboardSkeleton updated with section placeholders
cd /home/jlmak/Projects/jlmak/SimpleFinanceDash && bun run build
Human approves all 11 verification checks pass
Complete dashboard hybrid view with:
- Collapsible per-category sections between charts and QuickAdd
- Smart expand/collapse defaults (over-budget sections auto-expand)
- Carryover subtitle on balance card when non-zero
- Smooth expand/collapse animation
- Direction-aware difference coloring
1. Run `cd /home/jlmak/Projects/jlmak/SimpleFinanceDash && bun run dev` and open http://localhost:5173
2. **Collapsible sections visible:** Navigate to a month with budget items. Verify collapsible sections appear below the chart grid and above the QuickAdd button.
3. **Section header design:** Each section should have:
- Thick colored left border (category color)
- Chevron icon on the left
- Category group label (e.g., "Income", "Bills")
- Two badges on the right: "Budgeted $X" and "Actual $X"
- Color-coded difference (green for on-budget, red for over-budget)
4. **Smart defaults:** If any category group is over-budget (e.g., spending actual > budget), that section should be expanded on page load. On-budget sections should be collapsed.
5. **Expand/collapse animation:** Click a section header. It should expand with a smooth 200ms animation. Click again to collapse. No layout jank in the charts above.
6. **Line-item table:** Expanded sections show a 4-column table: Item Name, Budgeted, Actual, Difference. Footer row with bold group totals.
7. **Empty groups hidden:** If a category type has zero budget items, it should not appear at all.
8. **Month navigation reset:** Expand/collapse some sections, then navigate to a different month. Smart defaults should recalculate.
9. **Carryover display:** If the budget has a non-zero `carryover_amount`, the balance card should show "Includes $X carryover" in small text below the balance value. If carryover is zero, no subtitle should appear.
10. **Rapid toggle:** Toggle sections open/closed rapidly 10+ times. Check browser console (F12) for "ResizeObserver loop" errors.
11. **Chevron rotation:** When a section is expanded, the chevron should rotate 90 degrees (pointing down). When collapsed, it should point right.
Type "approved" or describe any issues found
- `bun run lint` passes
- `bun run build` succeeds
- Dashboard renders collapsible sections for all non-empty category groups
- Over-budget sections auto-expand, on-budget sections start collapsed
- Section headers show correct badges, left border accent, and difference
- Line-item tables have 4 columns with footer totals
- Carryover subtitle displays on balance card when non-zero
- Expand/collapse animation is smooth, no ResizeObserver errors
- Month navigation resets expand/collapse state
- All 4 ROADMAP success criteria for Phase 3 are met:
1. Category groups render as collapsible sections with color-accented headers, budgeted/actual totals, and difference
2. Expanding reveals line-item table, collapsing hides it with smooth animation, no chart jank
3. Rapid toggling produces no ResizeObserver loop errors
4. Carryover amount visible on balance card when non-zero
- Human verification checkpoint passes