BESBanking Experience System
Docs Components Journey Showcase
Draft — not yet human-verified. Every gate passing here is automated. No screen-reader, Arabic native-speaker or usability testing has been carried out yet, and all Arabic UI copy is machine-drafted. What has and hasn't been verified

Brand proof

Doc 30 says a brand change must be describable entirely as token values — “if it requires touching component internals, it's rejected.” Until a second brand existed, that was an untested claim. This page is the test: the same markup, the same bes.css, rendered twice. The only difference between the two columns is data-brand="sadu" and a stylesheet of 111 token values with no rules in it.

Sadu is a fictional brand invented for this repository — an Islamic-finance neobank, named after the Emirati weaving tradition. It is not a real institution. It was designed to sit as far from BES core as the contract allows: deep green rather than blue, squared rather than rounded, a serif type stack rather than a grotesque, comfortable density rather than standard, and a gold-on-green card face.

BES core

Available AED 25,000.00
AED 25,000.00
Current account ••4521
Rate expires in 60 seconds You'll see the new rate before anything is sent.
BES BANK
•••• •••• •••• 4102
A. Al MansooriJAYWAN · VISA

Sadu — same markup, same CSS

Available AED 25,000.00
AED 25,000.00
Current account ••4521
Profit rate expires in 60 seconds You'll see the new rate before anything is sent.
SADU
•••• •••• •••• 4102
A. Al MansooriJAYWAN

What moved, and what it cost

PaletteDeep green replaces blue; the neutral ramp shifts warm. Core's blue.* and gray.* keys are retuned — the ramp's shape is unchanged, so every semantic token that references it follows.
Silhouetteradius.sm/md/lg drop to 2/3/4px, and the component tier squares the button, controls, card, modal, badge, chip, segmented control and status dots.
TypeA serif Latin stack and a Naskh Arabic stack, one step larger and looser throughout. The Arabic optical metrics are re-derived for the brand's own scale, not inherited from core's.
DensitySadu ships comfortable values as its standard mode. The comfortable and compact modes still exist and still switch.
MotionSlower: 180/280ms, with a 900ms spinner.
Card faceGold ink on a green gradient with tighter tracking — cardArt.from/to/ink/badgeBg/track. This was the last place in bes.css that carried a raw hex.
Cost in component CSSZero lines. bes.css is byte-identical between the two columns.

How this is kept honest

Three gates run on every change, and each was verified by reintroducing the failure it exists to catch:

The honest limit: spacing is not fully tokenised. 135 padding, margin and gap literals remain, because the space scale is a 4px grid while the CSS uses 6/10/14/18px throughout — closing that is a design decision about the grid, not a mechanical substitution. Sadu can change type, colour, shape, density and motion; it cannot yet change rhythm. The consistency audit holds that number visible and only lets it fall.