Two related changes to marketplace moderation.
Users can report a listing the same way they report a post. The "Report listing" button on /market/{slug} now opens an in-page modal with a category dropdown (spam / duplicate, prohibited item, copyright or counterfeit, harassment or scam, other) and a reason textarea. A minimum of 10 characters is enforced so one-word reports don't sneak through. Submitting files a row in the same reports table that forum-post reports already live in, which means the report shows up in the mod dashboard and /admin/moderation queue without any extra plumbing.
The URL of the listing plus its ID get stamped onto the description automatically, so whoever opens the report can jump straight to the listing from the detail page — the same pattern we use for [Forum Post #N] reports.
/admin/marketplace was rebuilt to match the mod-dashboard look.
- Six-card stat strip at the top: active listings, flagged, open reports, removed (total), sold in the last 30 days, and active marketplace bans.
- Tab bar under the stats: Flagged · Reports · Removed · Recent. Each tab's count shows as a badge when nonzero, so at a glance you know what's waiting.
- Flag and Remove now open a shared modal instead of the old
window.prompt(). Mods can paste multi-line justifications without losing newlines; the Remove note is sent to the seller as a notification, Flag notes stay internal. - Flagged rows show an "N open" badge when users have also reported the same listing, so you see the community-side pressure before deciding.
- Reports tab lists every open user report with category, reason preview, reporter, URL-to-listing, and a one-click Open into
/admin/moderation/{id}. - Removed tab keeps takedown history one click away so reinstatement is easy when a seller appeals.
Admin bans UI sits at the bottom of every tab — Lift ban / new-ban form are always where you expect them.
Everything routes through the existing audit log and AuditLog → Privilege Use flow, nothing new to learn.