ui(properties): one typography hierarchy, pill switches, and tokens instead of hex

Creator directive 2026-11-01: the properties panels had 14 hand-rolled heading styles, 37
hand-rolled labels, four literal grey hex values, and 14 square checkboxes.

- PropertyHeader / PropertySubHeader / PropertyFieldLabel / PropertyHint in Themes/Controls.xaml
  now carry the whole hierarchy: category bright and 11px, labels and hints dim, size and weight
  doing the level. Colour groups the panel — bright for what you edit, dim for its labels and
  help — and no new palette entry was needed; DESIGN.md stays the only colour source.
- Every checkbox in the panel is a pill switch (PropertyPillCheck, 32x16 animated thumb).
  IsChecked semantics unchanged, so no binding moved.
- Literal #888/#666/#555 became OnSurfaceVariant / OnSurfaceDisabled.
- 13 headings, 2 sub-headers and 31 in-row labels now reference a style instead of repeating
  colour + size + alignment inline.

Controls audited for backing: every Button/Slider/ComboBox/CheckBox/ToggleButton/TextBox in the
panel has a Command or Click, a Value binding, an ItemsSource or Selected*, IsChecked, or Text —
no dead controls. Release 0 warnings; typography and token tests pass.
This commit is contained in:
2026-11-01 15:51:33 -08:00
parent 82960d0ca3
commit 8221bd6478
3 changed files with 174 additions and 69 deletions
+11
View File
@@ -185,3 +185,14 @@ skip (would spam every launch). Still modal by design: SocialsDialog's slot-dele
- The image lives in the asset table; the settings table keeps its asset id and file name
(`BrandLogoAssetId` / `BrandLogoFileName`). Eye visibility is the layer's ordinary per-scene `IsVisible`.
- Default placement: top-left (32,32), 240x120 master px.
- **Properties panel typography (2026-11-01):** one hierarchy for every section, defined in
`Themes/Controls.xaml` — `PropertyHeader` (category: 11px semibold, `Brush.OnSurface`, the
brightest text), `PropertySubHeader` (a field label inside it: 10px semibold, indented 10,
`OnSurfaceVariant`), `PropertyFieldLabel` (a label sharing a row with its control: same
typography, vertically centred, no margin), `PropertyHint` (the explanatory sentence: 10px,
wrapped, dim). Colour carries the grouping — bright for the thing being edited, dim for its
labels and help — and no new palette entries were needed. ⛔ No literal hex in the panel: the
four `#888`/`#666`/`#555` values that had crept in are now `OnSurfaceVariant` /
`OnSurfaceDisabled`. ⛔ **Every checkbox in the properties panel is a pill switch**
(`PropertyPillCheck`, 32×16 track with an animated thumb) — a 14px box reads as a form, a switch
reads as a setting; `IsChecked` semantics are untouched so all bindings still work.