Skip to main content
Version: Next

Colors

The approved palette (exhaustive)

RoleHex / ValueCSS variable
Primary Blue#0077FF--shumoul-blue
Primary Teal#00B39F--shumoul-teal
Dark Background#0D1117--shumoul-bg (dark mode)
Surface#1A1F2E--shumoul-surface (dark mode)
Borderrgba(255,255,255,.08)--shumoul-border (dark mode)
Primary Text#FFFFFF--shumoul-text (dark mode)
Secondary Text#A9A5A6--shumoul-text-secondary (dark mode)

No other hue exists anywhere on this site. No purple, no orange, no red accents, no green theme, no Docusaurus default palette. Every additional value below is a shade or tint of one of the two brand hues above — never a new color.

AA-safe text shades

Two darker shades of the brand hues exist specifically so body-sized text and button labels clear WCAG AA (4.5:1), while the pure brand hexes stay reserved for large text, icons, borders, and decorative accents (WCAG AA-large, 3:1):

TokenValueCSS variableUsed for
Blue (text-safe)#0065D8--shumoul-blue-textBody links, primary button background, light-mode accent
Teal (text-safe)#007D6F--shumoul-teal-textSecondary button background, success/tip accents

Why these exact shades

The pure brand hexes fail AA-normal (4.5:1) in exactly three places where text sits directly on a colored background:

PairingRatioAA-normal (4.5)
White text on #0077FF (button)4.13FAIL
White text on #00B39F (button)2.64FAIL
#0077FF on #FFFFFF (light-mode link)4.13FAIL

Darkening each hue (same hue, lower lightness — not a new color) resolves this:

PairingRatioAA-normal (4.5)
White text on #0065D85.45PASS
White text on #007D6F5.04PASS
#0065D8 on #FFFFFF5.45PASS

Every other approved combination already clears AA-normal directly with the pure hex — see the full contrast table in Theme Rules § Accessibility.

Dark mode (primary experience)

:root {
--shumoul-bg: #0d1117;
--shumoul-surface: #1a1f2e;
--shumoul-surface-raised: #202638;
--shumoul-border: rgba(255, 255, 255, 0.08);
--shumoul-border-strong: rgba(255, 255, 255, 0.16);
--shumoul-text: #ffffff;
--shumoul-text-secondary: #a9a5a6;
}

Light mode (fully supported, same identity)

No new hues — only inverted neutrals derived from the same approved colors:

[data-theme='light'] {
--shumoul-bg: #ffffff;
--shumoul-surface: #f3f5f8;
--shumoul-surface-raised: #ffffff;
--shumoul-border: rgba(13, 17, 23, 0.08); /* same dark-bg hex, used as a tint source */
--shumoul-border-strong: rgba(13, 17, 23, 0.16);
--shumoul-text: #0d1117; /* reuses the approved Dark Background hex as light-mode ink */
--shumoul-text-secondary: #565058; /* darkened for AA on white — see contrast table */
}

Semantic mapping (admonitions, badges) — no red/orange/green

Docusaurus's default theme maps success→green, info→blue, warning→orange, danger→red. All four are remapped to only the two brand hues:

Semantic roleColor usedRationale
info / noteBlue (--shumoul-blue-text)Closest semantic match to the brand's primary hue
success / tipTeal (--shumoul-teal-text)Teal reads as "positive" without using green
warning / cautionTeal, heavier weight + thicker accent borderNo orange available — severity conveyed by weight, not hue
dangerDarkest blue (--ifm-color-primary-darkest / #004da5), heaviest weightNo red available — severity conveyed by weight + icon, not hue

This is a deliberate, accepted tradeoff: conventional red/orange severity signaling is not available under these brand rules, so warning/danger states are differentiated by border weight, background tint intensity, and icon, not by a distinct alarming hue. See Theme Rules for the full reasoning.

Where these are defined

src/css/custom.css:root (dark, primary) and [data-theme='light'] (light mode override). Never redefine a color in a component file; reference the CSS variable.