// Empty state for surfaces whose real backend hasn't shipped yet. // `milestone` names the milestone that unblocks the surface; `cta` is an // optional in-portal action (link or button) the user can take in the // meantime (e.g., "Browse the catalog" while real billing waits on M8.3). import type { ReactNode } from "react"; export function ShellEmpty({ title, description, milestone, details, cta, }: { title: string; description: string; milestone: string; details?: string; cta?: ReactNode; }) { return (

{title}

{description}

Lands in {milestone}. See{" "} PLATFORM_ARCHITECTURE.md §5a .
{details &&

{details}

} {cta &&
{cta}
}
); } export function NotAuthorized() { return (

403 — Not authorized

This surface requires a role your account doesn't have. If you think that's a mistake, ask an IT_ADMIN on your tenant to invite you with the right role.

); }