The site follows the day.

In the morning storage charges, in the evening it discharges. This website colours itself accordingly — no switch, no location prompt. Here every state can be compared without waiting for the clock.

What happens here

The business is a price curve: charge when power is cheap, discharge when it is expensive. That is what the palette from the brand manual encodes. Red appears where value arises. Grey appears where energy flows in. Bordeaux is reserved for negative prices and is therefore almost never seen.

Four states follow one another through the day. The position of the sun is computed locally with the NOAA formula — no network call, no location prompt, no permission dialogue. The coordinates come from the device's time zone.

This page is a design surface. It appears in no navigation and is excluded from search; it is reachable from the time-of-day panel in the footer — for anyone who wants to know why the colours move.

State
Variant

Page ground--paper
Surface tone--paper-2
Text--text
Secondary text--text-2
Red — value--value
Grey — intake--charge
Bordeaux — negative price--negative
Line--line-strong

On page ground

We develop battery storage to ready-to-build.

This paragraph shows running text in the measure of the real pages. It carries the same size, leading and line length, so that the effect of each state on readability becomes visible.

2,4 GW 1
Grid-scale battery storage operating in Germany
574 GW 2
Grid connection requests for storage in 2025
QuantityValue
Spread of the day203 €/MWh
Lowest quarter-hour price14,45 €/MWh

On chapter surface

The price curve is the business.

Red leads to discharge, grey to intake. On the chapter surface both marks share one image.

Day-ahead prices Germany/Luxembourg, 3 September 2026Day-ahead prices across 24 hours in quarter-hour resolution, low 14.45 and high 217.56 euros per megawatt hour, with the state of charge of a storage plant with one charge and one discharge below.0100200€/MWh00:0006:0012:0018:0024:00State of charge100 %0High 218Low 14

Measured in the browser

This table reads the colour values actually set and recomputes them under WCAG 2.2 — it shows what arrives, not what was intended. The thresholds are 4.5:1 for running text and 3:1 for marks, lines and focus rings.

CombinationChargingTurnDischargeNight

The risk each variant takes

A — ground and accents only. Risk: insignificance. Contrast range, surface distribution and signal intensity stay constant through the day; only the colour values swap. At night the text contrast therefore rises to 16.5:1 — light text on near black, harsh rather than calm. The site looks different in the evening but does not feel different. Shipping this means having built an elaborate dark mode without a switch. It is expressly not the recommendation.

B — contrast range, surface, intensity. Risk: a state can fail review, because four palettes must be maintained instead of one. That is precisely why tools/contrast.py reads the values from the token file and recomputes them; the table above does the same in the browser. Second risk: anyone seeing the site once takes the state for the design and never notices the system. The two lines in the footer answer that.

C — plus type and space. Risk: layout shift, and unavoidably so. Change the type weight and the advance width changes; change the spatial rhythm and the spacing changes. Both move line breaks and anchors. Someone reading a section at 21:58 finds it elsewhere two minutes later. That violates the quality floor, which rules out layout shift. C is built and switchable so the difference becomes visible — it cannot be shipped.

Where the system reaches its limits

CaseBehaviourAssessment
Unknown time zoneFalls back to 40° north and the standard-time central meridianDeviation of a few minutes, immaterial for a colour state
Daylight savingLongitude is derived from the standard-time offset, not the current oneWithout that distinction sunrise would be 77 minutes out in summer
Polar night and midnight sunThe sun calculation returns nothing; clock time appliesNorth of the Arctic Circle the site follows the clock rather than the sun
Without JavaScriptThe neutral state remainsThe site is fully readable, it simply does not follow the day
Server-side deliveryNeutral state in the markup, the script corrects before first paintNo flash of the wrong state
State change during a visitTransition over 1200 ms, checked every minuteNo transition when reduced motion is requested