CONTRACT · WHITE-LABEL
Theming
The brand is config; the format is not. Which tokens you own, which roles the feed protects, and the contrast rules every theme must pass.
LAST UPDATED 2026-07-27
The three-layer model
| layer | owner | contents |
|---|---|---|
| A · Format | fidra — never changes | card geometry, scroll grammar, spacing/radius scale, motion timing, card anatomy (title / provider chip / stage / CTA / meta) |
| B · Semantic roles | fidra-guarded | win / loss / reward / ritual / live / fair. A theme may recolor a role but can never collapse role distinguishability — win and loss must always differ (contrast and hue distance). |
| C · Brand | you | bg, surface, text, accent (primary CTA), accent-2, logo slot, display font, radius modifier |
Config surface
Fidra.mount(el, {
theme: 'sapphire', // base skin: 'fidra' | 'emerald' | 'sapphire' | 'sunset'
accent: '#3D7BFF', // your brand accent — wins over the skin
// live re-skin later, without remount:
})
feed.updateTheme({ theme: 'sunset', accent: '#ff7a1a' })
// or raw: postMessage fidra:v1:theme_update { payload: { theme?, accent?, accent2? } }
Theme variables land before first paint from the URL alone — no JS-boot wait and no flash-of-wrong-brand inside an operator embed. In production an operator ships one theme fixed by config; the theme switcher is demo tooling only.
The four reference themes
| theme | palette idea | character |
|---|---|---|
fidra | ink #07070C · coral #FF4D5E · amber | the default showcase skin |
emerald | deep green #06110b · green→lime accent · gold reward | classic casino, radius 14px |
sapphire | deep blue #050a16 · blue→cyan accent · gold detail | premium/tech, radius 20px |
sunset | navy #0a0c14 · orange→amber accent · cyan accent-2 | closest to fidra's own — proves "similar brand" is still config, not a repaint |
Contrast rules — validated, not advisory
- Body text on
bg≥ 7:1; dimmed text ≥ 4.5:1 - Text on the accent CTA ≥ 4.5:1
win/losspair: hue distance ≥ 90° and both ≥ 3:1 against the surface
Operator-supplied colors are validated against these rules at provisioning — a brand palette that would break the feed's readability is rejected with the failing rule named, not silently accepted.
source of truth:
docs/fidra-themes-spec.md · docs/EMBED.md
fidra is a B2B software supplier — no gambling services operated, no player funds held.
g.jgerenaia@tomsons.co