Building a dark mode that keeps every word readable
For years, the conversation around dark interfaces has swung between two extremes: a celebration of low-light aesthetics in one camp, and warnings about contrast collapse elsewhere. The truth sits somewhere quieter, in the careful calibration of tone, color, and typographic weight. Building a dark theme that actually holds up means treating readability as the primary metric and everything else as decoration.
Australians spend more time in front of screens than almost any comparable population, with the average Sydney or Melbourne professional logging well over nine hours daily across phones, laptops, and office displays. The country's fierce afternoon sun in cities like Brisbane and Perth also pushes many readers into dimmed rooms and high-brightness settings, which can amplify eye strain when an interface has not been designed for the inverse. Dark mode, when done with restraint, offers relief rather than novelty.
What follows is a practical walk-through of the choices that determine whether a dark version feels premium or merely gloomy, from token systems and contrast math to the unglamorous work of handling photographs and icons inside an inverted palette.
Start with tokens, not just hex codes
A reliable dark scheme begins with semantic tokens rather than direct color values. Instead of reaching for a hardcoded black whenever a surface needs shading, define a purpose like surface-default or surface-elevated and let those tokens resolve to different shades depending on the theme. This indirection is what lets you tune the entire system later by changing one definition rather than grepping through every stylesheet.
For most Australian audiences, a base background in the neighbourhood of a soft near-black works well, paired with body text that lands between a warm off-white and a slightly brighter ivory. Pure white on pure black tends to vibrate uncomfortably on OLED screens, which are common on newer devices sold across Adelaide and Canberra showrooms. Adding a faint warm tint to your off-white can also soften the clinical feel that turns many readers away from dark interfaces in the first place.
Reserve darker tones for chrome and lighter tones for content, then check whether your brand colour maintains a perceived weight similar to its light-mode sibling. A saturated blue that glows on white can quickly become a headache trigger at night, so desaturating hues by ten to fifteen percent is a quiet but effective move.
Mind the contrast numbers, not the vibes
WCAG ratios exist precisely because subjective impressions of "looks fine" vary wildly between displays and ambient lighting. Aim for at least a 4.5:1 ratio between body text and its background, and push toward 7:1 for smaller copy and any element meant to communicate status, such as error messages or success states. Tools like Stark, Colour Contrast Analyser, and the built-in browser inspectors can confirm what your eye refuses to acknowledge.
A practical ratio table looks roughly like this:
- Headline text on background: 7:1 or higher
- Body copy on background: 4.5:1 or higher
- Interactive controls and links: 4.5:1, with a non-colour cue
- Disabled states: at least 3:1
- Decorative graphics: no minimum, but never compete with copy
The same discipline applies to coloured borders and dividers, which often fail contrast checks more quietly than text does. A faint grey rule that whispers against a light surface can vanish outright against a dark one, leaving sections to bleed into each other and forcing readers to hunt for hierarchy cues.
Choose typography that survives the inversion
Type behaves differently on dark backgrounds. Thin weights that felt crisp at noon can look anaemic after dusk, while medium and semibold weights tend to retain their character. Australian brands like Atlassian and Canva have published their own takeaways here, generally nudging weights one step heavier when shipping a dark variant of their interface.
Body sizes need a small bump too, roughly 1.5 to 2 percent larger than your light-mode defaults, because the eye reads low-contrast glyphs slightly slower. Spacing benefits from generous line-height, around 1.55 to 1.65 for long passages, which keeps the page from feeling dense after the screen dims. Finally, check that any custom ligatures, smart quotes, or design flourishes still render predictably across Safari, Chrome, and the mobile browsers dominant in the local market.
Handle images, icons, and brand assets carefully
Photographs taken for a light theme often look harsh or oversaturated once you flip the canvas. A balanced approach is to render them with a subtle CSS filter or a backing layer that softens contrast, almost like polarising sunglasses on a bright Adelaide afternoon. SVGs and icons should ship with their own dark variants or use currentColor so they inherit the surrounding tone automatically.
Balancing text and images inside an inverted palette rewards the same restraint shown on light pages, with consistent margins, predictable aspect ratios, and a single hero image per scroll section. Charts and data visualisations deserve their own coloursets too, because a default palette that worked at midday can confuse readers in low-light reading sessions.
Build a toggle that respects the reader
A toggle that ignores system preferences quickly annoys the people who set those preferences deliberately. The cleanest pattern is to follow the user's operating system setting by default, then expose a manual override that persists across sessions using localStorage or a cookie, with a small note that explains the choice. Respect prefers-reduced-motion when transitioning between themes, since some readers experience flashes during mode swaps.
Geographic quirks matter here as well. Daylight saving in Sydney, Melbourne, and Hobart shifts the time users spend reading at night, while Queensland stays fixed on AEST year-round. If your site tailors reading modes by hour, those rules need an explicit time zone rather than a relative offset, or the experience drifts silently across state borders.
Test with real light, real screens, and real fatigue
No automated pass replaces a session spent reading the dark version in a dim room at 11 pm. Sit with a reader in your Brisbane office, in your Perth co-working space, and on a country train between regional NSW stations. Watch where they squint, where they zoom, and where they instinctively reach for brightness controls.
A short audit checklist can keep that discipline alive after launch:
- Verify headings, body, and links at AA and AAA levels
- Confirm focus rings remain visible on every interactive surface
- Test with screen readers that announce theme changes
- Spot-check third-party widgets, embedded videos, and PDFs
- Re-validate after any major design system update
Tracking complaints through a simple form or analytics event also tells you, within weeks, whether the rollout felt welcoming or merely obligatory.
Treat dark mode as a permanent discipline
Releasing a dark theme is rarely the finish line. Operating system updates shift how surfaces are rendered, new devices arrive with unfamiliar OLED behaviours, and brand palettes evolve with marketing refreshes. Schedule a quarterly review that walks the same checklist and re-runs the contrast audits across core templates, including error pages, transactional emails, and the long-scroll marketing pages that tend to drift first.
When viewed as an ongoing design system rather than a one-off feature, dark mode becomes a quiet asset rather than a liability. Readers in Adelaide boardrooms, Melbourne cafes, and Perth evenings will appreciate the care, often without ever needing to articulate what makes a page feel easy on the eyes.