Rooms · Pass 2 — the unhappy paths

Even the closed doors are well-made

Character over alarm. The same charcoal, the same MALLORY_, the status ring spending its one sanctioned oxblood moment.

1 · Offline / error (gap → built)
MALLORY_
The line’s gone quiet.
I’ll hold what you said and send it the moment we’re back.
Pull the filings before quarter-end holding · will send when back ↻

Status ring goes oxblood (its one “needs you” use). Unsent lines are held, not lost — copper, with a quiet retry.

2 · Native first-run (gap → built)
MALLORY_
Reporting for duty.
To brief you well, I read your notifications so you don’t have to. May I have access?
Maybe later

Matched to the Threshold. One clear ask, in character. The OS dialog opens behind it; technical setup hides in Advanced.

3 · Access denied (fully custom)
MALLORY_
This desk is closed to you.
Access denied. If that’s a mistake, the way back is through the front door.

Cloudflare allows full custom HTML on block pages — so even rejection is in Mallory’s voice, not a grey default.

React across all three. Once these are agreed, the full state library is complete — and I’ll write the Mallory brand & design guide (the lens, palette, type, motion grammar, the cursor signature, every surface & state, and the open/deferred items).