# Where we left off — v2 "Studio Terminal" shell landed (2026-05-13 night)

## What's done (uncommitted on local main)

**v2 redesign shape:** Approved brief at `docs/shapes/2026-05-13-teamsiso-v2-studio-terminal.md`. Aesthetic register is "broadcast-engineering instrument" — Linear's keyboard-first density × Avid console legibility. Goes hard against the "screams AI" failure mode.

**PRODUCT.md + DESIGN.md** updated to reflect WPF as the host (WinUI 3 lines removed), v2 IA decisions absorbed, recording references softened, theme implementation rewritten for WPF DynamicResource swap.

**Theme system split:**
- `src/TeamsISO.App/Themes/Theme.Dark.xaml` — color brushes only, dark variant
- `src/TeamsISO.App/Themes/Theme.Light.xaml` — color brushes only, light variant
- `src/TeamsISO.App/Themes/WildDragonTheme.xaml` — styles + control templates (no color brushes anymore; uses `DynamicResource` for every brush ref)
- `src/TeamsISO.App/Services/ThemeManager.cs` — singleton that swaps the merged dictionary at runtime, reads `HKCU\...\AppsUseLightTheme` for System mode, subscribes to `SystemEvents.UserPreferenceChanged`, persists via `UIPreferences.Theme`.
- `App.xaml` merges Theme.Dark.xaml + WildDragonTheme.xaml by default; `App.xaml.cs.OnStartup` calls `ThemeManager.Current.Apply()` before MainWindow shows.
- `UIPreferences.Prefs` record gets a new `Theme = "System"` field (forward-compatible — old json files still load).
- New brush key: `Wd.Accent.CyanText` (Dark `#97EDF0` / Light `#0E7C82`) for cyan-as-text contrast on light canvas. The existing `Wd.Accent.Cyan` stays bright in both modes for fill use.

**v2 main window shell:**
- Default Windows title bar (no more custom chromeless caption buttons — they looked generic and broke on DPI scaling).
- 32px header: Wild Dragon mark + "TeamsISO" wordmark left; three icon buttons right (⌘K command palette, theme toggle, settings gear). The mark is small (20px) as a quality cue — click opens About.
- 40px transport strip: mono-typed single line. `● 02:14:32  PART 4 · LIVE 2  CTRL :9755`. Cyan dot + timer only when at least one ISO live. CTRL cluster right-aligned in a Grid column.
- Body: alert banner + update banner + action toolbar (Enable / Refresh / Presets / Stop all + Teams launch/hide icons) + participants DataGrid.
- Conditional meeting bar at bottom — appears only when `IsTeamsInCall == true`, with Mute / Cam / Leave.
- 72px left rail: **gone**.
- 380px permanent settings panel: **gone**.
- Six-column footer: **gone**.
- Settings: slide-over drawer overlay (420px from right) triggered by the header gear; OUTPUT / NETWORK / APP tabs (DISPLAY renamed to APP); same bindings as v1. Scrim click dismisses; Esc dismisses.

**Hotkeys preserved + new:**
- F1 help, Ctrl+R refresh, Ctrl+Shift+S panic stop, 1–9 / NumPad 1–9 toggle Nth participant — all preserved.
- **Ctrl+T toggle theme (NEW)** — cycles dark ↔ light. Hooked through `MainViewModel.ToggleThemeCommand` → `ThemeManager.Toggle()`.
- **Ctrl+K command palette (placeholder)** — currently opens the help dialog. Task 40 replaces this with a real fuzzy-search palette window.

**View-model additions (MainViewModel):**
- `ParticipantCount` and `LiveCount` — feed the transport strip's "PART N · LIVE N" readout. Updated on the 1Hz stats tick.
- `ToggleThemeCommand` — wraps `ThemeManager.Current.Toggle()`.

**MainWindow code-behind cleanup:**
- Removed `OnMinimize`, `OnMaximizeRestore`, `OnClose`, `OnWindowStateChanged`, the maximize-icon swap logic (no more custom title bar).
- Added `OnCommandPaletteClick`, `OnSettingsScrimClick`, `OnPreviewKeyDown` (Esc to close drawer).
- `OnSettingsToggleClick` now toggles `SettingsDrawerOverlay.Visibility` (the slide-over) instead of toggling the v1 right-column width.

## To build, push, and demo

```powershell
cd "C:\Users\zacga\Documents\Claude\Projects\Teams ISO"

# Clear the corrupt local index from the earlier session
Remove-Item .git\index -Force -ErrorAction SilentlyContinue
git reset

# Build the WPF host
dotnet build src\TeamsISO.App\TeamsISO.App.csproj -c Release

# If the build is clean:
.\src\TeamsISO.App\bin\Release\net8.0-windows\TeamsISO.exe
```

In the running app, test:
1. **Theme toggle** — press `Ctrl+T`. Should swap dark ↔ light without restart. Header colors, surfaces, and text foregrounds all repaint.
2. **System theme follow** — open Windows Settings → Personalization → Colors → "Choose your mode" → flip between Dark and Light. TeamsISO should track the OS automatically (default preference is `System`).
3. **Settings drawer** — click the header gear icon. 420px drawer slides in from the right with OUTPUT / NETWORK / APP tabs. Esc or click-scrim dismisses.
4. **Transport strip** — should show the session timer when at least one ISO goes live, and the PART/LIVE counts always.
5. **Conditional meeting bar** — only appears when Teams is in a call.

If anything regresses, the v1 shell is preserved in git history at `1d1ce6a` — easy rollback with `git reset --hard 1d1ce6a` then publish.

## Commit + push when ready

```powershell
git add -A src/TeamsISO.App/ docs/ PRODUCT.md DESIGN.md
git commit -m "feat(wpf): v2 'Studio Terminal' shell — theme system, header, transport strip, drawer

- Theme split: Theme.Dark.xaml + Theme.Light.xaml + ThemeManager
- New shell: 32px header (mark + wordmark + 3 icons), 40px transport strip,
  conditional meeting bar, slide-over settings drawer
- Removed: 72px rail, 380px permanent settings panel, 6-column footer,
  custom chromeless title bar buttons
- Ctrl+T toggles theme; follows Windows app-mode by default
- Shape doc at docs/shapes/2026-05-13-teamsiso-v2-studio-terminal.md"
git push origin HEAD
```

## What's still queued (tasks 39 + 40)

- **Task 39** — Participants table redesign. The DataGrid columns in the v2 shell are still v1-style (Name / Source / ISO toggle). v2 wants: 5 columns (state LED, name+codec, audio meter, output name mono, ISO pill), 52px rows, full-row active-speaker tint instead of left stripe, hard-edged 8px state LED.
- **Task 40** — Real Ctrl+K command palette window. Floating 560×360 dialog, fuzzy search across categories (Quick / Teams / Presets / Output / Network / App). Replaces the current placeholder that opens the help dialog.

Both are scoped commits and depend on the v2 shell being confirmed working first. After this lands and you've verified the theme swap + drawer + transport strip render correctly, ping me and we'll knock those out.
