feat(admin): admin dashboard + moderation (icons, reports, takedowns, featured)
Adds an in-app admin dashboard at /admin gated by ADMIN_DIDS allowlist
(non-admins get 404 to avoid leaking the section's existence).
* DB: new icon_status / icon_reviewed_* / icon_rejected_reason columns
on profile, new takedown_status / takedown_reason / takedown_by /
takedown_at columns + profile_takedown index, new report table.
upsertProfile preserves icon + takedown state across firehose updates.
* Public reads (search, featured, single-profile API, icon API,
/explore/[handle], picker) now filter taken-down profiles by default.
PUT /api/registry/profile refuses updates on taken-down accounts (403).
* Admin pages: /admin overview with counts, /admin/icons, /admin/reports,
/admin/featured, /admin/takedowns; matching islands for each row/editor.
* Admin APIs: icon approve/reject/preview, report resolve, featured
publish (replaces com.atmosphereaccount.registry.featured/self),
profile takedown/restore (takedown auto-resolves open reports).
* Public: report-profile button + modal on /explore/[handle], soft
per-IP rate limit + IP hashing via REPORT_IP_SECRET. Owner sees a
takedown banner on /explore/manage with the admin-supplied reason.
* lib/admin.ts (isAdmin / requireAdmin / requireAdminApi),
lib/reports.ts, env additions (ADMIN_DIDS, REPORT_IP_SECRET) +
.env.example documentation. i18n strings + CSS for all UI surfaces.
Made-with: Cursor