Brand System
The Zenzic visual language is token-first.
All UI colors must be consumed through semantic CSS variables defined in
src/css/custom.css.
No raw color literals are allowed in component-level styles.
Canonical Sources
- Runtime tokens and theme behavior:
src/css/custom.css - Visual board (full static artifact):
/assets/brand/zenzic-brand-system.html
Open the full board directly:
Zenzic Brand System Visual Board
React Components Contract
Every React component must use var(--zenzic-*) tokens for:
- Surface/background
- Text hierarchy
- Borders and outlines
- Semantic states (
success,warning,error,fatal)
Approved token families
--zenzic-brand-*for action identity and active emphasis--zenzic-ink-*for text contrast hierarchy--zenzic-bg-*for translucent layered surfaces--zenzic-border-*for separators and component framing--zenzic-success|warning|error|fatalfor severity semantics
React usage example
export function AuditBadge(): React.JSX.Element {
return (
<span
style={{
backgroundColor: 'var(--zenzic-brand)',
color: 'var(--zenzic-ink-100)',
border: '1px solid var(--zenzic-border-brand-35)',
borderRadius: '6px',
padding: '0.2rem 0.5rem',
fontWeight: 600,
}}
>
audit: passed
</span>
);
}
UI pull requests are rejected if JSX/TSX or local CSS introduces hardcoded color literals. Use semantic tokens only.
MDX Integration Pattern
Use MDX as the normative page and keep the static HTML board as the full visual artifact.
Recommended pattern:
- Explain policy and token mapping in MDX (this page).
- Link to the static board for visual review.
- Keep both aligned when editing palette decisions.
Optional embed:
<iframe
title="Zenzic Brand System"
src="/assets/brand/zenzic-brand-system.html"
style={{ width: '100%', minHeight: 920, border: '1px solid var(--ifm-toc-border-color)', borderRadius: 'var(--ifm-pre-border-radius)' }}
/>
Accessibility Baseline
The palette is tuned for documentation readability first.
- Body text must stay in Zinc tiers (
--zenzic-ink-*) to preserve long-read comfort. - Brand Indigo is for interaction and active state cues, not full-paragraph prose.
- Severity colors must remain semantic and not be reused as decorative accents.
A/B Palette Profiles
Two optional profiles are available in src/css/custom.css for visual validation without component refactors.
Current default: corporate-calm.
Activation
Set one of these attributes on <html>:
<html data-zenzic-palette="corporate-calm">
<html data-zenzic-palette="technical-neon">
Advantages and disadvantages
-
Corporate Calm Pros: stronger enterprise tone, lower visual fatigue in long reading sessions, safer default for mixed audiences. Cons: lower perceived energy on marketing-like surfaces, less aggressive CTA pop.
-
Technical Neon Pros: higher perceived modernity, stronger active/hover cues, more memorable interaction identity. Cons: can feel more intense on dense pages, requires stricter accessibility QA on edge states.