Consent bar
The analytics and marketing consent prompt for the public site. Attribution spec §A8: reject-all is the pre-interaction default. Until a visitor allows, no third-party tag loads and every touch row records unknown, which the relay treats as denied.
A bottom-anchored strip on the same deep-patina ground as the announcement bar, with the two standard .btn actions. Not a modal — an unanswered bar costs the visitor nothing. Not a third-party CMP — that is another script and another data processor, and what we need is a bar, a cookie and a gate.
It renders hidden and shows on hydration — the reverse of the announcement bar, on purpose. Its content is a question whose answer needs JavaScript; showing it first would flash for every visitor who had already answered.
The bar knows nothing about GA or the API. It writes one cookie in the shape @halwel/attribution/consent defines and dispatches one DOM event; Analytics listens for the event, the edge middleware reads the cookie onto the touch row.
import from @halwel/ui/components/marketing/ConsentBar
Variants
demo does not write a cookie; either button just closes it