Apply the house UI style #15

Merged
cheapnud merged 1 commit from d/house-style into master 2026-08-16 12:23:15 +00:00
Owner

Flat elevation everywhere with hairline borders and surface contrast from a real theme (off-white field with white cards in light mode, lighter cards on a dark field with the opacity text ladder in dark, drawer dark in both), Bahnschrift display headings over Segoe UI body, 12px radius, 260px drawer. Every page gets the kicker/title/actions header anatomy with a single filled-primary CTA, async actions run through a self-disabling progress button, status chips move to the fixed semantic colour mapping with humanised labels, and the pa-6/mb-6 spacing scale applies throughout. Also fixes the long-standing PanelClass analyzer warning (renamed to TabPanelsClass).

Flat elevation everywhere with hairline borders and surface contrast from a real theme (off-white field with white cards in light mode, lighter cards on a dark field with the opacity text ladder in dark, drawer dark in both), Bahnschrift display headings over Segoe UI body, 12px radius, 260px drawer. Every page gets the kicker/title/actions header anatomy with a single filled-primary CTA, async actions run through a self-disabling progress button, status chips move to the fixed semantic colour mapping with humanised labels, and the pa-6/mb-6 spacing scale applies throughout. Also fixes the long-standing PanelClass analyzer warning (renamed to TabPanelsClass).
apply house style: flat theme with hairline borders, page headers, progress buttons, semantic status colors
All checks were successful
Claude PR Review / AI Code Review (pull_request) Successful in 21s
Build & Test / Build and Test (pull_request) Successful in 25s
2b711df04e

🤖 Claude AI Code Review

  1. Summary
    Applies a consistent flat "house" UI theme across all pages, introducing reusable PageHeader/ProgressButton components and semantic status chips. Cosmetic/structural change with two new components.

  2. Code Quality
    Well-organized theming with good extraction of reusable components and a proper re-entrancy guard in ProgressButton.

  3. Issues

🟡 ProgressButton.razor — no error surfacing / StateHasChanged. If OnClick.InvokeAsync() throws, the exception propagates out of RunAsync and _busy is reset in finally, but the unhandled exception may tear down the Blazor circuit. Consider whether callers already guard their handlers; if not, wrap or document that consumers must handle their own exceptions. Also, since the busy state changes are inside an async flow triggered by OnClick, verify the spinner actually renders — Blazor auto-invokes StateHasChanged around event handlers, so a single async continuation is fine, but if any handler swallows the render cycle it won't update. Low confidence this is a real bug; verify manually.

🟢 Home.razor — two separate @if (ProjectState.CurrentProject != null) blocks back-to-back where one would do. Not a bug, but the split re-evaluates the same condition; harmless.

  1. Verdict: APPROVE

Solid, mostly mechanical UI refactor. The TabPanelsClass rename correctly addresses the analyzer warning, and the ProgressButton re-entry guard is correct. Just confirm exceptions thrown by async OnClick handlers are handled somewhere (snackbar/try-catch in the page methods) so a failure doesn't crash the circuit.


📊 Tokens: 15652 input + 611 output | 💰 Cost: ~$0.0935
Generated by Claude Opus 4.8 via Gitea Actions

## 🤖 Claude AI Code Review 1. **Summary** Applies a consistent flat "house" UI theme across all pages, introducing reusable `PageHeader`/`ProgressButton` components and semantic status chips. Cosmetic/structural change with two new components. 2. **Code Quality** ⭐⭐⭐⭐☆ Well-organized theming with good extraction of reusable components and a proper re-entrancy guard in `ProgressButton`. 3. **Issues** 🟡 ProgressButton.razor — no error surfacing / StateHasChanged. If `OnClick.InvokeAsync()` throws, the exception propagates out of `RunAsync` and `_busy` is reset in `finally`, but the unhandled exception may tear down the Blazor circuit. Consider whether callers already guard their handlers; if not, wrap or document that consumers must handle their own exceptions. Also, since the busy state changes are inside an async flow triggered by `OnClick`, verify the spinner actually renders — Blazor auto-invokes `StateHasChanged` around event handlers, so a single async continuation is fine, but if any handler swallows the render cycle it won't update. Low confidence this is a real bug; verify manually. 🟢 Home.razor — two separate `@if (ProjectState.CurrentProject != null)` blocks back-to-back where one would do. Not a bug, but the split re-evaluates the same condition; harmless. 4. **Verdict**: **APPROVE** Solid, mostly mechanical UI refactor. The `TabPanelsClass` rename correctly addresses the analyzer warning, and the `ProgressButton` re-entry guard is correct. Just confirm exceptions thrown by async `OnClick` handlers are handled somewhere (snackbar/try-catch in the page methods) so a failure doesn't crash the circuit. --- 📊 **Tokens**: 15652 input + 611 output | 💰 **Cost**: ~$0.0935 *Generated by Claude Opus 4.8 via Gitea Actions*
cheapnud merged commit 4c2177d7ac into master 2026-08-16 12:23:15 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
cheapnud/CheapShotcutRandomizer!15
No description provided.