diff --git a/FAQ.md b/FAQ.md
index 83b00ad..ed3297d 100644
--- a/FAQ.md
+++ b/FAQ.md
@@ -77,6 +77,10 @@ Authenticated application state and behavior were moved into `Components/Pages/W
`Workspace` initializes authenticated session data after the first render (`OnAfterRenderAsync`). During that first render pass, the header now intentionally shows a null-safe fallback label instead of dereferencing user fields before `/api/me` has been loaded.
+## Where did workspace success/error messages go?
+
+Inline status message rows in the workspace were replaced with timed toast notifications. This keeps the main layout compact while still surfacing operation outcomes.
+
## Where did Play/Campaign Management switching move?
Screen switching is now inside the header hamburger menu. The menu exposes `Play` and `Campaign Management` options while keeping the top bar compact.
@@ -110,3 +114,7 @@ Auth inputs, validation, and submit workflows are transient UI concerns, so they
## Why are there `.razor.cs` files next to Razor components?
Component behavior was moved out of inline `@code` blocks into code-behind classes so `.razor` files stay markup-focused while state, parameters, handlers, and injected services live in typed C# files.
+
+## How do I add campaigns and characters in Campaign Management now?
+
+Campaign creation is launched from a compact `Add campaign` row button that opens a modal form. Character management is directly below the campaign card and uses per-row edit chips plus an `Add character` row button for create flow.
diff --git a/FRONTEND_PROGRESS.md b/FRONTEND_PROGRESS.md
index 2883a15..2625c80 100644
--- a/FRONTEND_PROGRESS.md
+++ b/FRONTEND_PROGRESS.md
@@ -12,6 +12,7 @@ Tracking against `UX.md` tasks and decisions.
- Workspace header user identity rendering is now null-safe during first render (`Loading user...` fallback until `/api/me` loads).
- Workspace header was compacted into a single horizontal row with hamburger menu screen switching and link-style logout.
- Header alignment was tightened so connection status occupies the growing middle cell and the hamburger menu remains pinned to the right edge.
+- Workspace status/error feedback moved from inline messages to timed toast notifications.
- Concern controls now own their local form state and mutation workflows; the workspace host handles shared cross-control state refresh.
- Skill create/edit flow is now owned by `CharacterPanel` (where characters and their skills are presented together).
- Skill interactions are now row-local chip actions (edit/roll) with an inline dummy `+` row for create-skill.
@@ -29,7 +30,7 @@ Tracking against `UX.md` tasks and decisions.
| 9.3 Shared authenticated header | Implemented | Compact single-row header with user/campaign context, growing connection-status cell, right-aligned hamburger screen switch, and link-style logout. |
| 9.4 Play screen character column | Implemented | Compact character picker, merged character+skills header row, modal edit/create flows, inline per-skill edit/roll chips, d6 skill options (wild/fumble), and no separate last-roll panel. |
| 9.5 Play screen log column | Implemented | Chronological feed, private/public badges, private perspective styles (roller vs GM), per-entry dice visualization with die-state flags, local time + ISO tooltip. |
-| 9.6 Campaign management screen | Implemented | Campaign selector/summary, create form, details card, character management actions with modal edit pattern. |
+| 9.6 Campaign management screen | Implemented | Campaign selector and details are merged into one card, campaign create moved behind an inline `Add campaign` row opening a modal, and character management sits beneath with chip-style edit actions plus an inline `Add character` row. |
| 9.7 Tablet/mobile bottom bar | Implemented | `Character` / `Log` panel switch in play screen and per-tab session persistence. |
| 10 Validation and error UX | Partially implemented | Required-field and common API errors are mapped; message/code-specific mapping is limited by current API exposing only text messages. |
| 11 Empty/loading/disabled states | Implemented | Empty states, skeleton placeholders, mutation button disabling. |
diff --git a/RpgRoller/Components/Pages/HomeControls/CampaignManagementPanel.razor b/RpgRoller/Components/Pages/HomeControls/CampaignManagementPanel.razor
index c02b496..9e4da3d 100644
--- a/RpgRoller/Components/Pages/HomeControls/CampaignManagementPanel.razor
+++ b/RpgRoller/Components/Pages/HomeControls/CampaignManagementPanel.razor
@@ -1,6 +1,8 @@
-
Campaign Selector
+
+
Campaign
+
@if (Campaigns.Count == 0)
{
No campaigns yet.
@@ -11,47 +13,11 @@
}
-
Current campaign in this tab: @(SelectedCampaignName ?? "None selected")