Clarity at every scale.
The design system for exploring neighbourhood energy demand. A shared language for controls, grid risk, and actionable outcomes.
System overview
A practical reference for the neighbourhood grid-readiness simulator. Foundations, live components, and composed patterns extracted from WijkWise Planner.
Neighbourhood grid-readiness simulator
Keep the workspace neutral. Reserve color for risk, adoption inputs, and chart meaning. Pair every status color with a readable label. All figures below are illustrative demo data.
Color palette
White surfaces and warm neutral text create a quiet canvas for the four semantic risk tiers. Token names and values match the standalone app.
--bg#FFFFFF--surface-main#FAFAFA--surface-soft#F3F4F6--surface-card#FFFFFF--surface-muted#E5E7EB--border#D7D7D7--text-main#1A1A1A--text-soft#4A4540--text-muted#7A7570--text-faint#AAA59F--accent-primary#1A1A1AAccent colors · dark & light
Use dark shades for chart lines, markers, and input accents. Use matching light shades for risk backgrounds and soft highlights.
Blue
Blue · Dark#1F4E8CBlue · Light#E0E8F5Red
Red · Dark#C8001ERed · Light#F5D5DAOrange
Orange · Dark#D4451AOrange · Light#F7E0D8Yellow
Yellow · Dark#D4A800Yellow · Light#FBF2CCRisk scale
#1F4E8C / #E0E8F5
Foreground: #163A6B
#D4A800 / #FBF2CC
Foreground: #9C7C00
#D4451A / #F7E0D8
Foreground: #A33212
#C8001E / #F5D5DA
Foreground: #960016
Adoption accents: heat pumps use orange, EVs use yellow, and solar uses blue. These identify input categories; risk badges describe outcomes.
Typography
Three type families separate navigation, explanations, and numerical evidence.
--font-display · Space Grotesk · 600–700--font-body · IBM Plex Sans · 400–600--font-data · IBM Plex Mono · 500App scale: 28px outcome headings, 24px neighbourhood titles, 18px brand, 16px workflow headings, 14px controls, 12px supporting text. Metric values use 28px or 36px mono.
Spacing & surfaces
Use thin borders and restrained shadows to group dense planning information.
8px radiusSegment option
10px radiusPrimary button
12px radiusAgent row
16px radiusMetric card
3px6px8px9px12px14px16px20px22pxMetric cards: 16px padding, 9px internal gap. Metric grid: 14px gap. Agent panels: 20px padding. Pill badges and switches use a fully rounded radius.
.ww-card {
background: var(--surface-card);
border: 1px solid var(--border);
border-radius: 16px;
box-shadow: 0 1px 2px rgba(50,40,25,.04),
0 6px 18px rgba(50,40,25,.03);
}Scenario controls
Segmented choices, adoption sliders, percentage chips, and binary interventions. These examples are keyboard operable.
Sliders use 5-point steps, an 8px track, and a white 22px thumb with a colored border. Switches measure 44 × 26px; enabled is blue. Segmented selections use a white raised surface; selected chips use a dark fill.
Icons & indicators
The planner uses Unicode symbols for energy categories and actions, with CSS shapes for status indicators. These are the actual symbols used in the standalone app.
Heat pumps
Adoption control, readiness metric, and demand driver.
U+2668 U+FE0EEV charging
EV adoption, charging pressure, and demand driver.
U+26A1Solar
Solar adoption, potential metric, and demand driver.
U+2600 U+FE0EShared battery
Battery opportunity and shared-battery demand driver.
U+25A4Grid
Grid congestion summary and empty outcome state.
U+229ETransformer
Transformer headroom metric.
U+2301Insulation
Insulation demand driver.
U+2302Baseline
Unchanged adoption levels in the driver explanation.
U+25F7Run simulation
Primary action; 17px beside the button label.
U+25B6Completed
Completed agent indicator; 12px on a dark circle.
U+2713Demo information
Demo-data notice in the app header.
U+24D8Forward / change
Recommendations, before-and-after risk, and chart captions.
U+2192Back
Return from the planner to the project overview.
U+2190Status indicators
Size & usage
Metric icons use 15px at 85% opacity. Adoption labels use 13–14px symbols, and the empty-state grid symbol uses 30px. Keep symbols beside descriptive text; hide decorative symbols from assistive technology with aria-hidden="true". Give any icon-only control an accessible name.
These glyphs use the app’s body font and system fallback, so their appearance can vary by platform. The heat and solar symbols include a text-presentation selector. Status dots and the working spinner are CSS shapes, not font glyphs.
Badges & value tags
Use a dot plus a text label for risk. Use monospace value tags beside adoption controls.
Risk badges: 12.5px semibold text, 7px dot, 999px radius. Value tags: 22px bold mono, 7px radius, 2px × 8px padding.
Metric cards & capacity
Pair a large numerical reading with a risk label and a plain-language interpretation.
Peak utilisation · 2030
Comfortable headroom for additional demand.
Peak utilisation · 2030
Monitor the evening peak as adoption grows.
Peak utilisation · 2030
Limited headroom; compare flexible-load options.
Peak utilisation · 2030
Peak demand exceeds transformer capacity.
Capacity tier is based on rounded headroom: ≥28 points low, ≥14 medium, ≥5 high, otherwise critical. The fill caps at 100%; the numerical value must still show overload.
Load curve & sparklines
Distinguish the scenario from the baseline with both color and line style. Always show the transformer limit.
LoadCurve uses a 560-unit viewBox, a 2.4px scenario line, and a 1.8px dashed baseline. Compact sparklines use 96 × 30px, a 2px stroke, and a final-point marker.
Neighbourhood map
Risk-tinted polygons show neighbourhood context. Selection adds an outline; the selected name remains available as text.
Oud-West
Utrecht · selected neighbourhood
MediumThe app draws the selected wijk last so its outline remains visible. Use the neighbourhood selector to choose a location.
Agent progress
Idle, working, and completed rows keep the model sequence readable.
Hourly demand profile built.
doneProjects transformer load against capacity.
runningAttributes load change to its main drivers.
idleRanks practical actions by impact.
idleWorking rows use a white surface, border, and light shadow. Completed rows use #FAFAFA and a dark checkmark. Idle rows use reduced opacity. Motion is supplementary to the text state.
Application shell
The desktop app follows three steps: choose a neighbourhood, build a scenario, and review the outcome.
Select a wijk
Choose the neighbourhood
Build scenario
Set adoption and timing
Review outcome
Read risk and actions
--ww-grid-columns: 340px 360px 1fr;
@media (max-width: 1180px) {
:root { --ww-grid-columns: 300px 320px 1fr; }
}These are the current app column widths. This reference stacks its examples on small screens for easier browsing.
Usage & accessibility
Preserve meaning when composing new planning screens.
- Keep demo-data identification visible beside simulation results.
- Use risk text and numeric readings alongside color.
- Label every input and expose selection with aria-pressed.
- Provide visible keyboard focus and announce asynchronous progress.
- Reserve faint text for secondary detail; use stronger text for instructions and essential values.
- Respect reduced-motion preferences for progress and transitions.
Source: WijkWise standalone app. Reference format: Atlas Signal design system.