Colours
Working guidance for the JR Dream palette, semantic colour roles, accessible pairings and practical interface applications.
Colour with a clear role
JR Dream’s colour system combines warm-neutral reading surfaces, charcoal structure and a precise orange accent. Colour supports brand expression, information hierarchy, accessible interaction and functional feedback through distinct roles.
Keep decorative brand orange separate from darker action orange. Use functional green, amber, red and blue only where a status justifies them, with words or another non-colour cue. The source’s 70% light/neutral, 20% dark and 10% accent balance is a visual guide, not a pixel quota.
The supplied logo has its own unchanged colours and gradients. Approximate logo samples are not extra interface colours. These are internally accepted working specifications, pending implementation validation and final company approval.
Source: Colour System Exploration & Validation v1.0, pages 1–3 and 12.
Core colour palette
The complete source-defined scales contain 11 warm neutrals and 10 oranges. Values and variable names below come directly from the existing central token file. Swatches carry their labels on a separate white surface, so the palette is not mistaken for approved text pairings.
Copy a HEX value or variable name using its button. If copying is unavailable, select the visible value manually; every value also remains available in print.
Warm neutral
Warm neutral 50
#F7F4ED--neutral-50Warm neutral 100
#EFEAE0--neutral-100Warm neutral 200
#DED8CC--neutral-200Warm neutral 300
#C6BFB2--neutral-300Warm neutral 400
#A29C91--neutral-400Warm neutral 500
#7F7B71--neutral-500Warm neutral 600
#635F57--neutral-600Warm neutral 700
#4C4B44--neutral-700Warm neutral 800
#3C3F3C--neutral-800Warm neutral 900
#252827--neutral-900Warm neutral 950
#191C1B--neutral-950Orange
Orange 50
#FFF4ED--orange-50Orange 100
#FFE6D5--orange-100Orange 200
#FFC7A7--orange-200Orange 300
#FFA475--orange-300Orange 400
#FF7D48--orange-400Orange 500
#F15E2A--orange-500Orange 600
#D94D1C--orange-600Orange 700
#B83D16--orange-700Orange 800
#933216--orange-800Orange 900
#782E17--orange-900Neutral 50/100 provide fills; 200 is decorative; 500 identifies controls; 600 supplies supporting text on light; 900/950 provide dark structure. Orange 50/100 provide subtle fills, 300 inverse focus, 500 decoration, 700 actions/light focus and 800/900 action hover/pressed states. Scale numbers alone do not establish an accessible pairing.
Source: Colour System Exploration & Validation v1.0, page 3, “Two useful tonal scales”.
Brand and interaction colours
| Role | Existing token and value | Use |
|---|---|---|
| Decorative brand orange | --brand-accent-primary#F15E2A | Short highlights and decoration. White small labels and orange body text on white fail at 3.29:1. |
| Accessible action orange | --action-primary-background#B83D16 | Primary actions with white text: source ratio 5.65:1. |
| Hover / pressed | --action-primary-hover #933216--action-primary-pressed #782E17 | Keep white labels; source ratios 7.75:1 and 9.54:1. |
| Reading and structure | --text-primary #252827--text-secondary #635F57 | Charcoal for reading on white/warm white; muted text for supporting copy on those surfaces. |
The brighter decorative orange cannot replace action orange for small white labels. Changing the interface action colour does not authorise recolouring the logo. Orange 500 on charcoal narrowly passes normal text at 4.52:1 in the source; reserve it for highlights and prefer white for extended inverse reading.
Source: Colour System Exploration & Validation v1.0, pages 2–5.
Semantic colour roles
Use the existing CSS names below to express intent. Their aliases and resolved HEX values are read from styles/tokens.css at build time; this page does not define a second colour system.
Brand and text
| CSS variable | Current mapping / HEX | Application |
|---|---|---|
--brand-accent-primary | var(--orange-500)#F15E2A | Decorative accent; never small white labels. |
--brand-accent-subtle | var(--orange-50)#FFF4ED | Subtle selection/highlight fill; retain a written or semantic state. |
--text-primary | var(--neutral-900)#252827 | Body and headings on white or warm white. |
--text-secondary | var(--neutral-600)#635F57 | Supporting text on white or warm white. |
--text-inverse | #FFFFFF | Inverse text on neutral 900/950. |
Surfaces and borders
| CSS variable | Current mapping / HEX | Application |
|---|---|---|
--surface-primary | #FFFFFF | Content, cards and tables. |
--surface-secondary | var(--neutral-50)#F7F4ED | Warm sections and canvas. |
--surface-tertiary | var(--neutral-100)#EFEAE0 | Subtle panels with charcoal text. |
--surface-inverse | var(--neutral-900)#252827 | Structured dark panels; not a full dark theme. |
--surface-inverse-deep | var(--neutral-950)#191C1B | Occasional deeper emphasis. |
--border-default | var(--neutral-200)#DED8CC | Decorative separators only; not an essential control boundary. |
--border-control | var(--neutral-500)#7F7B71 | Meaningful control boundaries on light surfaces. |
--border-inverse-divider | var(--neutral-800)#3C3F3C | Existing implementation extension: decorative inverse divider, not a control boundary. Recorded in Stage 02.1; outside Colour p11 inventory. |
Actions, focus and disabled states
| CSS variable | Current mapping / HEX | Application |
|---|---|---|
--action-primary-background | var(--orange-700)#B83D16 | Primary action default on light. |
--action-primary-text | var(--text-inverse)#FFFFFF | White label on default, hover and pressed primary fills. |
--action-primary-hover | var(--orange-800)#933216 | Primary action hover fill. |
--action-primary-pressed | var(--orange-900)#782E17 | Primary action pressed fill. |
--action-secondary-text | var(--text-primary)#252827 | Secondary action text on white; use border-control outline. |
--focus-light | var(--orange-700)#B83D16 | Light-surface focus ring with white gap. |
--focus-inverse | var(--orange-300)#FFA475 | Inverse focus ring with charcoal gap. |
--state-disabled-background | var(--surface-tertiary)#EFEAE0 | Disabled fill; expose disabled state in code. |
--state-disabled-text | var(--text-secondary)#635F57 | Readable disabled label; no whole-control opacity. |
Functional foreground and surface tokens are listed in the next section. The neutral-800 inverse divider is an existing implementation reference, not an additional Colour PDF semantic role or a meaningful control boundary.
Source: Colour System Exploration & Validation v1.0, page 11, “Practical semantic colour tokens”; inverse-divider mapping also recorded in the Stage 02.1 implementation report.
Functional status colours
These four foreground/background pairs are defined for light status treatments. Each example includes explicit wording; none depends on colour alone. They are documentation demonstrations, not claims about actual records or outcomes.
Success
Complete: demonstration check finished.
--status-success#22633F--status-success-surface#EDF7F0Completed or verified outcomes only.
Source contrast: 6.55:1, normal-text PASS.
Warning
Needs attention: review this demonstration entry.
--status-warning#855500--status-warning-surface#FFF6DDNeeds attention; decorative logo amber is not warning text.
Source contrast: 5.91:1, normal-text PASS.
Error
Action required: correct the demonstration entry.
--status-error#B42318--status-error-surface#FFF0EEFailed or corrective action required; retain explicit error wording.
Source contrast: 5.93:1, normal-text PASS.
Information
Guidance: this is a documentation example.
--status-information#245B8A--status-information-surface#EDF4FCNeutral guidance, distinct from orange actions.
Source contrast: 6.45:1, normal-text PASS.
Do not invent status ramps or inverse status variants. Keep these foregrounds on their paired light tints rather than reusing them directly on dark cards. Status tints need no visible outer boundary when their words carry the meaning.
Source: Colour System Exploration & Validation v1.0, pages 4, 6, 10 and 11.
Accessibility and contrast
The source uses WCAG 2.2 AA thresholds of 4.5:1 for normal text and 3:1 for large text. Large text means at least 18pt regular or 14pt bold (approximately 24px or 18.7px). Meaningful boundaries and graphics need 3:1 against adjacent colours where necessary to identify them.
Source columns reproduce the PDF’s ratios. Calculated columns independently apply the source’s sRGB relative-luminance method to the current CSS HEX values: (lighter luminance + 0.05) / (darker luminance + 0.05). Results are rounded to two decimals for display; verdicts use unrounded calculations. These calculated validation results do not create new brand rules.
| Pair | Foreground / background | Source | Calculated | Normal / large text |
|---|---|---|---|---|
| Charcoal / white | #252827 on #FFFFFF | 14.88:1 | 14.88:1 | PASS / PASS |
| Charcoal / warm white | #252827 on #F7F4ED | 13.54:1 | 13.54:1 | PASS / PASS |
| Orange 500 / white | #F15E2A on #FFFFFF | 3.29:1 | 3.29:1 | FAIL / PASS |
| White / orange 500 | #FFFFFF on #F15E2A | 3.29:1 | 3.29:1 | FAIL / PASS |
| Orange 500 / charcoal | #F15E2A on #252827 | 4.52:1 | 4.52:1 | PASS / PASS |
| White / charcoal | #FFFFFF on #252827 | 14.88:1 | 14.88:1 | PASS / PASS |
| Muted text / white | #635F57 on #FFFFFF | 6.35:1 | 6.35:1 | PASS / PASS |
| Muted text / warm white | #635F57 on #F7F4ED | 5.78:1 | 5.78:1 | PASS / PASS |
| White / action 700 | #FFFFFF on #B83D16 | 5.65:1 | 5.65:1 | PASS / PASS |
| Action 700 / warm white | #B83D16 on #F7F4ED | 5.14:1 | 5.14:1 | PASS / PASS |
| White / hover 800 | #FFFFFF on #933216 | 7.75:1 | 7.75:1 | PASS / PASS |
| White / pressed 900 | #FFFFFF on #782E17 | 9.54:1 | 9.54:1 | PASS / PASS |
| Pair | Foreground / background | Source | Calculated | Threshold / result |
|---|---|---|---|---|
| Input border / white | #7F7B71 on #FFFFFF | 4.22:1 | 4.22:1 | 3:1 / PASS |
| Input border / warm white | #7F7B71 on #F7F4ED | 3.84:1 | 3.84:1 | 3:1 / PASS |
| Decorative divider / white | #DED8CC on #FFFFFF | 1.42:1 | 1.42:1 | 3:1 / FAIL |
| Light focus / white | #B83D16 on #FFFFFF | 5.65:1 | 5.65:1 | 3:1 / PASS |
| Light focus / warm white | #B83D16 on #F7F4ED | 5.14:1 | 5.14:1 | 3:1 / PASS |
| Inverse focus / charcoal | #FFA475 on #252827 | 7.67:1 | 7.67:1 | 3:1 / PASS |
| Action fill / white | #B83D16 on #FFFFFF | 5.65:1 | 5.65:1 | 3:1 / PASS |
| Success / tint | #22633F on #EDF7F0 | 6.55:1 | 6.55:1 | 4.5:1 / PASS |
| Warning / tint | #855500 on #FFF6DD | 5.91:1 | 5.91:1 | 4.5:1 / PASS |
| Error / tint | #B42318 on #FFF0EE | 5.93:1 | 5.93:1 | 4.5:1 / PASS |
| Information / tint | #245B8A on #EDF4FC | 6.45:1 | 6.45:1 | 4.5:1 / PASS |
| Disabled label / fill | #635F57 on #EFEAE0 | 5.30:1 | 5.30:1 | 4.5:1 / PASS |
Restrictions to carry into implementation
- Do not use decorative orange for small white labels or orange body text on white. A large-text PASS is not permission to use it for small interface labels.
- Neutral 200 is a decorative separator, not an essential input outline. Use neutral 500 for meaningful control boundaries on the tested light surfaces.
- Use orange 700 focus on light, orange 300 on inverse, and a local surface-coloured gap. Visibility, area and obstruction still require testing.
- Disabled controls use neutral 100 fill and neutral 600 labels with a native or correctly exposed disabled state. Remove active affordance and avoid whole-control opacity. Inactive controls have contrast exemptions; the documented pair deliberately remains readable.
- Keep explicit status/error wording and chart labels. Never communicate status or chart meaning through colour alone.
- Do not promote approximate logo amber, green or red-orange samples into extra brand primaries. Logo lettering’s contrast exception does not apply to ordinary branded text or controls.
For data visualisation, the source suggests action orange, information foreground and success foreground as a small categorical set on white, with direct labels, gaps and patterns as needed. Real charts also need values and a data table; no chart or colour-vision testing is claimed here.
These pair calculations do not establish comprehensive WCAG conformance. Recheck changed backgrounds, transparency, overlays and all implemented interaction states.
Source: Colour System Exploration & Validation v1.0, pages 4–6, 10 and 12; method and W3C source references on page 12.
Practical UI applications
These scoped documentation demonstrations show token usage. They are not production-ready components or a standalone component library.
Action states
Try these documentation controls. Hover and press the primary action to inspect its colour states; use Tab to inspect focus.
No action has been tried.
Text, surfaces and borders
Secondary text uses the muted text token.
Charcoal keeps the reading hierarchy clear.
Stone is a supporting fill, not text.
White copy on charcoal. This is a structural panel, not a complete dark theme.
Inspect inverse focus with TabMeaningful boundary example: neutral 500 on white.
A decorative neutral-200 separator divides these examples; it does not identify an essential control.
Selection and hover
Subtle orange fill, orange 700 marker/boundary and written state.
The documentation sidebar uses the separately accepted application treatment: solid action orange and white selected text, with aria-current="page", no marker, selected outline or visible Current label. Inactive hover uses subtle orange with charcoal. Keyboard focus remains a separate visible ring.
The status demonstrations above also provide information notices, success feedback, warnings and explicit error guidance. Their light foreground/surface pairs remain intact.
Source: Colour System Exploration & Validation v1.0, pages 3–6 and 11; sidebar exception: Stage 02.1 accepted documentation-sidebar refinement.
Developer implementation
Use the existing semantic variables in the eventual corporate website, with the central token stylesheet included by that application. Use primitives to define roles centrally, rather than choosing a scale step afresh in each component. This documentation does not create a package, token engine or corporate website.
Semantic action and focus usage
.primary-action {
background: var(--action-primary-background);
color: var(--action-primary-text);
}
.primary-action:hover {
background: var(--action-primary-hover);
}
.primary-action:active {
background: var(--action-primary-pressed);
}
.secondary-action {
background: var(--surface-primary);
color: var(--action-secondary-text);
border: var(--border-thin) solid var(--border-control);
}
.primary-action:focus-visible,
.secondary-action:focus-visible {
outline: var(--focus-width) solid var(--focus-light);
outline-offset: var(--focus-offset);
box-shadow: 0 0 0 var(--focus-offset) var(--surface-primary);
}
.primary-action:disabled {
background: var(--state-disabled-background);
color: var(--state-disabled-text);
cursor: default;
/* Use the native disabled attribute; no whole-control opacity. */
}Status and inverse-surface usage
.information-notice {
color: var(--status-information);
background: var(--status-information-surface);
/* Include explicit guidance text, not colour alone. */
}
.inverse-panel {
color: var(--text-inverse);
background: var(--surface-inverse);
--focus-ring: var(--focus-inverse);
--focus-gap: var(--surface-inverse);
}
.inverse-panel :focus-visible {
outline: var(--focus-width) solid var(--focus-ring);
outline-offset: var(--focus-offset);
box-shadow: 0 0 0 var(--focus-offset) var(--focus-gap);
}Restricted usage: do not copy into production
/* RESTRICTED: do not ship these combinations. */
.small-white-label-on-bright-orange {
color: var(--text-inverse);
background: var(--brand-accent-primary); /* Fails normal text. */
}
.orange-body-on-white {
color: var(--brand-accent-primary); /* Fails normal text. */
background: var(--surface-primary);
}
.essential-boundary {
border-color: var(--border-default); /* Decorative only. */
}
/* Use action-primary-background for small white action labels,
text-primary for body copy and border-control for essential outlines. */The snippets illustrate colour roles, not complete controls. Apply existing typography, spacing, geometry and keyboard behaviour separately, then validate each real foreground/background pair. Disabled rules must win over hover and pressed rules.
Preserve both original SVG assets. Primary Transparent belongs on suitable plain light surfaces and Reversed Transparent on charcoal/deep neutral. Do not place the logo on accent orange, imagery or patterned surfaces; see the Logo foundation guidance.
HEX/sRGB expresses digital intent. Print needs printer-managed profiles and physical proofs; no CMYK recipe or spot-colour match is approved.
Source: Colour System Exploration & Validation v1.0, pages 7, 9, 11 and 12; code is documentation implementation guidance.
Validation and approval status
| Area | Status | Scope or next action |
|---|---|---|
| Working colour specification | Internally accepted | Colour v1.0 and existing central tokens are the working references; no final company approval is implied. |
| Source-tested colour pairs | Recorded in PDF | 24 text/control/status comparisons are reproduced from pages 5–6. This is calculation evidence, not device testing. |
| Calculated validation results | Recalculated from CSS | All 24 ratios match the source at two decimal places. Unrounded values determine the displayed threshold results. |
| Implemented browser checks | Limited to recorded implementation checks | See the Stage 02.2B implementation report for the exact browser, responsive, keyboard, copy and export checks performed. |
| Real devices and colour vision | Pending | Review actual displays and colour-vision accessibility; check changed combinations and overlays. |
| Assistive technology and full accessibility | Pending | Screen-reader, native forced-colours, zoom and full interaction/conformance reviews remain required. |
| Arabic-language validation | Pending | No Arabic sample copy is introduced. Native-language content and responsive bilingual review remain pending. |
| Print reproduction | Pending | PDF export does not validate physical ink, paper, colour profiles or reproduction. |
| Final company approval | Pending | Joseph Dass’s approval of the complete brand system remains required before production release. |
Successful builds, browser checks and contrast calculations do not certify production readiness or comprehensive WCAG conformance. No final company approval is claimed.
Source: Colour System Exploration & Validation v1.0, page 12, “Recommended system and approval gates”; Stage 02.1 implementation limitations retained.