feat(fields): add LabelField — static descriptive text
Display-only text that sits alongside other fields (module blurb, status line, bar app-title). No value / onChange, untouched by bind(); consumers drive it with a reactive `text` string (Solid props are already reactive, so no setter API). Single full-width `.stage-label` element via a bespoke `.stage-field-control` skeleton (fieldType="label"), not Field — whose expanded label-row + compact 2-col grid assume a captioned value. Layouts: compact (one line, ellipsis; nowrap collapses newlines so they truncate), expanded (pre-wrap: wraps + keeps newlines, line-height pinned to one control-height so K lines tile to K rows), bar (inline, content- sized, no truncation; align is a no-op). Props: text, align, layout, size, and `class` (style hook appended to `.stage-label` for italic/bold/colour from the consumer's own sheet — no inline-style escape hatch). BREAKING (CSS class): the field caption span is renamed `.stage-field-label` -> `.stage-field-name` (and `.stage-field-label-row` -> `.stage-field-name-row`), matching the `name` prop and freeing `.stage-field-label` for LabelField's per-type discriminator. No TS API change. Consumers targeting the old class must update. Playground: replace all free bar text with LabelField (app title is bar+large, both footers bar) and add a LabelField demo module covering align, italic, compact truncation, expanded wrap/newlines, and a live reactive label.