| id* | string | Unique escalation identifier shown in the card header. |
| agent* | { name: string; model?: string } | The agent requesting escalated scope. |
| rationale* | string | One-sentence justification. |
| detail | string | Longer-form explanation of what the new permission unlocks. |
| risk* | "low" | "medium" | "high" | Risk tier — drives badge colour and card border. |
| scopeDelta* | EscalationScopeDelta[] | Scope changes being requested. Each entry shows current verbs and what is being added or removed. |
| ttl | string | How long the approval will hold if granted — e.g. "1h". |
| remember | boolean | When true, shows a note that the decision will be remembered for future runs. |
| mission | { id: string; label: string } | The mission this escalation belongs to. |
| requestedAt | string | Human-readable time the escalation was raised. |
| staticPreview | boolean | Disables action buttons. |
| onApprove | () => void | Called on "Approve once". |
| onDeny | () => void | Called on Deny. |
| onAlwaysAllow | () => void | Called on "Always allow". |
| className | string | Additional CSS classes for the card root. |