- Add reusable client ThemeToggle at src/components/theme/theme-toggle.tsx
- Reads/writes novalon-theme localStorage key and toggles data-theme
- Placeholder on first render to avoid hydration mismatch
- Wired into public Header desktop cluster and AdminLayout top bar
- Add getExpandedMenusForPath to auto-expand the parent menu group
when navigating to a child page (e.g., /admin/users expands "系统管理")
- Add hasActiveChild highlight on parent menu group button (bg-gray-100)
- Use lazy initialization for expandedMenus state based on current path
- Use useEffect to track pathname changes and auto-expand accordingly
- Replace `path` unused param with `_path` to satisfy TypeScript strict
- Dashboard: add stats API with content status distribution, recent notifications,
and recent content updates; display active users, pending reviews, unread counts
- User management: full CRUD with role assignment, search, pagination, delete dialog
- Notification center: list with unread filter, mark as read, mark all as read,
pagination, and auto-refresh unread count
- Content editor: form validation (required fields, slug format, blur-triggered
errors), auto-save with 3s debounce and status indicator, publish confirmation
dialog, unsaved changes warning on leave
- Admin layout: add navigation links for user management, roles, and notifications
- admin-api: make request() method public for custom API calls
- gitignore: add reports/mutation/ to exclude mutation test output