Raw profile

This page exercises the profile — the package vocabulary — naked, before any presentation dresses it: the semantic colour roles, the surface roles that carry the identity, the type and space scales, the chrome metrics, radii and widths, the focus ring, and the accessibility floor.


Chrome roles

The window's own materials: what a client area, a control and a separator are made of.

background
background-subtle
surface
surface-hover
surface-active
border-subtle
border
border-hover
solid
solid-hover
Aa
on-solid

Text role: the standard ink (--color-text).

Text role: muted — column headers, status strings (--color-text-muted).

Text role: greyed out (--color-text-disabled).

Field roles

The editable well. Distinct from surface: surface is what a control is made of, field is what you type into.

Aa
field / field-text
field-border
field-border-top
field-border-focus
field-border-top-focus

The top edge is darker than the other three — light falls from above, so the inside of a recess is shadowed at the top. A one-pixel lie, in every Windows text box since 1995.

Selection roles

The one role that is never subtle.

Aa
selection / selection-text

Control roles

A control border is not a separator border. Aero draws separators at steel-200 and control edges at steel-500, and no amount of squinting makes those one role.

control-border
control-border-hover
control-border-active
control-border-default
control-border-disabled
Aa
control-face-disabled

Window furniture

Title bar, menu bar and status bar are not "surface". They are a window's furniture, they change independently of content, and Windows named them separately for thirty years.

Aa
titlebar / -gradient / -text
Aa
titlebar-inactive / -text
window-border
menubar
Aa
menu / menu-text
Aa
menu-selection / -text
Aa
statusbar / -text

Accent roles

The system blue, doing the job a brand colour does elsewhere. Win10 sets it to #0078d7, Aero to its sky ramp, Luna to the XP selection blue, and Classic to the title navy, because the desktop teal was the only colour of that era that was not blue, grey or white and it belonged to the desktop.

accent-surface
accent-surface-hover
accent-border
Aa
accent-solid / on-solid
accent-solid-hover

Text role: accent-coloured text (--color-accent-text).

Tooltip

Its own two colours since 1995, shared by no one.

Aa
tooltip / -text / -border

Status

Held back until a page needed one. Windows never put these in the palette — GetSysColor has no entry for an error — and carried them in the message box icons instead: a red disc, a yellow triangle, a blue disc, redrawn once per era. So the fill moves with the era, and the glyph does not. White on red, black on yellow, white on blue, unchanged from Windows 95 to Windows 7 while the disc beneath it was redrawn three times. That is why on-solid is a role and not a value.

error-solid / -on-solid
error-solid-lit
!
warning-solid / -on-solid
warning-solid-lit
i
info-solid / -on-solid
info-solid-lit

The values are matched rather than published or sampled: chosen to sit right beside the era, not lifted per-pixel off the icon. The primitives say so, because the alternative is inventing numbers in a file whose authority is that it does not.

Surface roles

The axis colour, type, space and border cannot express — and most of what makes this identity legible. Switch to Classic and watch these change mechanism: the gradients become flat greys and the gloss becomes a two-ring bevel, while the role names hold.

Control fills

surface-control + bevel-control
surface-control-hover
surface-control-active + bevel-control-active
surface-control-disabled

Wells and fields

surface-well-block + bevel-well
surface-well-inline
bevel-field-inset

List rows

Aa
surface-row-hover
Aa
surface-row-selected

Elevation

shadow-window
shadow-artwork

Both go to none under Classic. Windows 95 had no drop shadows, and setting the role to nothing is how the presentation never learns the era removed it.

Type scale

Three scales ship; the roles below are bound to the points one. Windows UI type is specified in points by definition, 9pt is the shell's own default and therefore step 0, and the steps are the sizes the shell actually offered rather than a computed ratio. The pre-ClearType eras sized in pixels instead, because bitmap faces had to land on whole pixels or they blurred. And there is a rem scale — a 1.25 ratio, step 0 at 1rem — for an author who wants type that answers the reader's browser setting.

The roles do not know which. Re-point --text-size-ui at --font-size-rem-0 and every control on the page starts scaling, with nothing else edited.

Display --text-size-display

Heading --text-size-heading

Caption — the title bar --text-size-caption / --text-weight-caption

UI — what a control, a menu item and a label all take --text-size-ui

Status — status bars, tooltips --text-size-status

Code 1234 --text-size-code

The chrome face is --font-family-ui: Segoe UI under Win10 and Aero, Tahoma under Luna, MS Sans Serif under Classic. Every era re-points it and nothing else has to know. Win10 kept Aero's face and changed everything around it, which is the clearest evidence that face and era are separate facts.

Space scale

The primitive rhythm (n = px ÷ 4). Windows laid dialogs out in dialog units, and at the default face a horizontal DLU is close to 2px — which is why every measurement in a Windows dialog is even, and why the rhythm is 4px rather than the 8px a web project would reach for.

It ships twice, once fixed and once scalable. The roles are bound to the pixel steps, because a 23px control that grows with the reader's font size stops being a control. The rem steps mirror them exactly, for the parts of a page that should grow.

Pixels — what the roles use

space-pixel-1 · 4px
space-pixel-2 · 8px
space-pixel-3 · 12px
space-pixel-4 · 16px
space-pixel-5 · 20px
space-pixel-6 · 24px
space-pixel-8 · 32px
space-pixel-12 · 48px
space-pixel-16 · 64px

Rem — the same steps, scalable

Identical at the browser default. Raise the browser's font size and this set moves while the one above holds — which is the whole difference, and the reason both exist.

space-rem-1 · 0.25rem
space-rem-2 · 0.5rem
space-rem-3 · 0.75rem
space-rem-4 · 1rem
space-rem-5 · 1.25rem
space-rem-6 · 1.5rem
space-rem-8 · 2rem
space-rem-12 · 3rem
space-rem-16 · 4rem

Chrome metrics

Drawn at true size, because that is the only way to check them. These are the shell's own numbers, and they are the difference between a page that resembles Windows and one that is mistaken for it. 23px is not 24px.

size-control-block · buttons, selects, text boxes
size-toolbar-block · two shorter than a control
size-statusbar-block
size-menubar-block · SM_CYMENU
size-titlebar-block
size-scrollbar · SM_CXVSCROLL
size-checkbox
size-slider-thumb-block / -inline
size-button-min-inline · 75px, unchanged since 1992

Radii & widths

The ramp is short because the identity is short: Windows rounded almost nothing, and Classic sets all three roles to zero. The roles resolve to the pixel radii — 2 for a field, 3 for a control, and that one-pixel difference is nobody's conscious observation and everybody's complaint when it's wrong. A wider rem ramp ships alongside, unused by any role, for an author who wants softer corners than the shell ever drew.

Radius roles

radius-void
radius-field
radius-control
radius-window
radius-pill
radius-circle

Border widths

width-1 · 1px
width-2 · 2px
width-4 · 4px

Bevels, reached for directly

bevel-raised-outer + -inner
bevel-sunken-outer + -inner
bevel-window-outer + -inner

Focus ring

Windows drew focus as a 1px dotted rectangle inside the control, not as a ring around it — hence the negative offset (--focus-ring-width, --focus-ring-style, --focus-ring-offset, --focus-ring-color).

Tab to a focusable link, then a .

Under forced-colors these roles flip to a solid Highlight ring at a positive offset — the one context where the native convention is the wrong answer.

Accessibility floor

There is a screen-reader-only note right after this sentence — this text is visually hidden but announced by assistive tech (.sr-only). invisible on screen, present to a screen reader.

The skip-link behaviour ships in the profile; the visible focused state is the consumer's to style. The floor does not vary by identity, so it is borrowed unchanged from the document profile this one is a sibling to.

End of profile test.