Section header (primary-colored titleSmall Text) → first content gap varied across settings screens: LLM and MQTT showed a wider gap than Compute’s reference pattern; CronTimer showed a larger gap than Compute.
When #407 standardized heading style (titleSmall + primary color), the gap below each heading was not standardized. Screens that put section headers inside a Column(spacedBy(SPACING_MEDIUM=12dp)) got 12dp gaps, while Compute’s ComputeOptionsPanel used an explicit Spacer(SPACING_SMALL=8dp) in a no-arrangement Column, giving the correct 8dp gap. The inconsistency went unnoticed because each file was edited independently.
Changed verticalArrangement from SPACING_MEDIUM (12dp) to SPACING_SMALL (8dp) in the outer Column of:
EditLLM.kt (LLM settings — “Backend” and “Response Format” headers)EditMqtt.kt (MQTT settings — “Action Type” header)CronExpressionEditor.kt (CronTimer — “Schedule” header)Normalized ComputeOptionsPanel Spacers from SPACING_SMALL to PADDING_SMALL (same 8dp value, clearer semantic intent as padding-after-header).
Section headers (primary-colored titleSmall Text followed immediately by interactive content) must always have exactly CommonLayout.PADDING_SMALL (8dp) between the label bottom and the first visible content. Use either an explicit Spacer(Modifier.height(CommonLayout.PADDING_SMALL)) in a no-arrangement Column, or ensure the outer Column uses spacedBy(SPACING_SMALL) not spacedBy(SPACING_MEDIUM). When adding a new section header, match the Compute/ExecutorEditComponents pattern: no-arrangement wrapper Column + explicit Spacer, or note the gap discrepancy in the PR.