Design System

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

Default — Decline / Allow analytics

demo does not write a cookie; either button just closes it