The Preferences labeled() helper painted the visible label and then drew the input beside it without associating them. Call label_inputs_by so screen readers and the test harness can find each field by its label.