Labeled native controls. The binding wires disabled and invalid state to native attributes, while the CSS keeps controls one row tall unless the control is explicitly multiline.
Label, control and hint; no app page assembles the three separately.
Use lower-case words separated by hyphens.
The native control owns the same square focus ring as fj-btn.
The control carries aria-invalid and the message carries a sign, so hue is never the only carrier.
Use lowercase ASCII, numbers and hyphens.
Disabled remains legible and keeps native disabled semantics.
Derived from the repository path.
A multiline field is a bordered region, not an oversized row.
Label, control and hint; no app page assembles the three separately.
Use lower-case words separated by hyphens.
The native control owns the same square focus ring as fj-btn.
The control carries aria-invalid and the message carries a sign, so hue is never the only carrier.
Use lowercase ASCII, numbers and hyphens.
Disabled remains legible and keeps native disabled semantics.
Derived from the repository path.
A multiline field is a bordered region, not an oversized row.