Win32 Profile
An inquiry into the identity a document wears when it wants to be an application — not what a page is, but how it comes to present itself as something else.
Windows was published as a thousand measurements. Twenty-three pixels for a control, nine point for its label, seventy-five for the narrowest button a dialog may hold, a gradient with a hard stop at forty-five percent.
The numbers were written down and the grammar underneath them was not — it was passed between people who drew the same window twice, and mostly it was lost. The measurements here are evidence. The grammar is the argument.
Two axes on one mechanism
themes/ in the CSS profile holds two questions, not one, and one mechanism answers both: an attribute on the root element that re-points every value in the stylesheet at once.
Era is the new axis: Windows 10, Aero, Luna, Classic. It is the light/dark mechanism applied to a much longer reach — fourteen years and four design languages — and the contract does not widen to accommodate it. The roles hold; only the mappings move. Win10 is the base reality and carries no attribute; the other three name themselves on the root element.
Theme is the familiar one, and only two eras map it, because only two shipped a dark reality. Setting data-era="classic" with the OS in dark mode gets you Classic, unchanged, which is correct — that is what the machine did. Inventing a dark Windows 95 would be the profile making something up.
Then the two the reader asks for: authored contrast, and last the palette the operating system forces, which outranks everything including the era. A preference the reader has expressed beats a decision the author made.
What colour cannot say
Colour, type, space, border. Those are the four a design system usually names, and between them they cannot describe a Windows control.
What makes a control read as Windows is not the grey. It is the two-stop gradient with a hard stop at 45% and the one-pixel white gloss inside the border. So surfaces gets a file of its own, in primitives/ and again in semantic/, which mirror each other file for file.
Switch to Classic above and you can watch it change mechanism rather than value. Classic fills a control flat and builds its edge from four one-pixel lines; Win10 fills it flat and draws no edge at all. Both answer --surface-control and --bevel-control, and one of them answers "nothing", which is still an answer. Had those roles been named --control-gradient and --control-gloss, three of the four eras would be impossible. See Earn its place.
On identity and profile
The identity is the question — how a page presents itself — and a profile is the answer. A document's identity is its CSS, the layer laid over a meaning already there, and giving that layer a grammar stops it being a heap of declarations: a name marks what a thing is, steel-100, or what it is for, surface, and the two belong on different layers.
A profile is one such language, the W3C's own word for a coherent slice of CSS — an identity a document can wear, and it can wear more than one. From the inside it is a contract: a single locked directory, profile/, that everything else is written against. The identities change; the contract does not.
Reading
The Windows Interface Guidelines for Software Design (Microsoft Press, 1995) is where the numbers live: dialog units, the seventy-five by twenty-three button, the metrics a control is required to hold.
Charles Petzold's Programming Windows records what the shell asked the machine for, and Raymond Chen's The Old New Thing records why it kept asking.
The measurements themselves come from SystemParametersInfo, and the colour names from GetSysColor — ButtonFace, ActiveTitle, InfoBackground — which are Microsoft's proper nouns, not mine.
Those names took a strange route here. CSS2 standardised the Windows palette as system colour keywords; CSS3 deprecated them; CSS Color 4 brought a smaller set back for forced-colors.
So the web adopted this vocabulary, discarded it, and kept the part that mattered for accessibility. That is roughly the argument this profile makes about its own roles, and Windows got there first by about thirty years.
Colophon
Set in the shell's own face: Segoe UI where the machine has it, Tahoma or MS Sans Serif where an era asks. No font files are served. Built with vanilla CSS and custom properties — no framework, no build step for the stylesheet, no methodology imported wholesale. The cascade is the mechanism.
This project is not affiliated with, endorsed by, or sponsored by Microsoft.
A fork of CSS Profile, which asks of a document what this one asks of an application. Written by Cristovao Verstraeten at a pleasant view.
Read the lexicon for every role and its value, or open the source.