feat(uat-batch-5): UI polish — dialog width, chart centering, recommender pill, audit link, inbox reorder

Six surgical Wave-2-3 wins:

- UploadForSigningDialog: dialog widened to max-w-[1400px] w-[95vw] so
  the place-fields step actually has room; recipient row converts from
  fixed grid to flex (name flex-1, email flex-[2] for the longer
  string, role w-40, delete shrink-0); invitation-message textarea
  rows 3 → 6.
- ChartCard becomes flex-col with flex-1 + items-center on CardContent
  so charts vertically center when neighbouring cards make the row
  taller (e.g. Pipeline Value's full breakdown).
- Berth recommender pill: drops the "Tier {letter} · " prefix; shows
  just the plain-English label ("Open" / "Fall-through" / "Active
  interest" / "Late stage") as a Popover trigger that explains the
  4-state ladder. HelpCircle icon makes the tooltip discoverable.
- Activity feed gains a "See all" link in the header pointing at
  /<port>/admin/audit, permission-gated by `admin.view_audit_log`.
- Inbox section order swaps to Reminders above Alerts (rep-noted
  priority); PageHeader title flips to "Reminders & Alerts". Section
  ids, deep-link hashes, and localStorage open-state keys untouched.
- Inbox ReminderList (embedded mode only): "New Reminder" button now
  shares the filter row (right-aligned via ml-auto) instead of
  occupying its own dedicated row above the filters.

tsc clean. 1419/1419 vitest pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-21 17:28:20 +02:00
parent 70c7d84dea
commit 203f543e60
6 changed files with 113 additions and 53 deletions

View File

@@ -75,12 +75,26 @@ export function InboxPageShell() {
return (
<div className="space-y-6">
<PageHeader
title="Alerts & Reminders"
title="Reminders & Alerts"
eyebrow="Action items"
description="Alerts the system has flagged plus your scheduled follow-ups, in one place."
description="Your scheduled follow-ups plus alerts the system has flagged, in one place."
variant="gradient"
/>
<section id="inbox-section-reminders" className="rounded-lg border bg-card shadow-xs">
<SectionHeader
icon={<Bell className="size-4 text-muted-foreground" aria-hidden />}
label="Reminders"
open={remindersOpen}
onToggle={toggleReminders}
/>
{remindersOpen ? (
<div className="border-t px-4 pb-4 pt-3">
<ReminderList embedded />
</div>
) : null}
</section>
<section id="inbox-section-alerts" className="rounded-lg border bg-card shadow-xs">
<SectionHeader
icon={<ShieldAlert className="size-4 text-muted-foreground" aria-hidden />}
@@ -95,20 +109,6 @@ export function InboxPageShell() {
</div>
) : null}
</section>
<section id="inbox-section-reminders" className="rounded-lg border bg-card shadow-xs">
<SectionHeader
icon={<Bell className="size-4 text-muted-foreground" aria-hidden />}
label="Reminders"
open={remindersOpen}
onToggle={toggleReminders}
/>
{remindersOpen ? (
<div className="border-t px-4 pb-4 pt-3">
<ReminderList embedded />
</div>
) : null}
</section>
</div>
);
}