“Add Input Node” button appeared disabled/ghosted across all executor and trigger settings screens (Compute, Lambda, HighThreshold, OutgoingWebhook, MQTT, etc.), while the structurally equivalent “Add Task” button in TaskList settings used a full primary-blue fill — inconsistent visual weight for the same interaction tier.
ExecutorActionButton (used for “Add Input Node”) is styled with containerColor = MaterialTheme.colorScheme.secondaryContainer. In the Chirpy dark theme secondaryContainer = Color(0xFF2E2F31) — nearly identical to the app background Color(0xFF1B1B1E) — making the button nearly invisible and visually indistinguishable from a disabled state. The button was never programmatically disabled (enabled defaulted to true); the disabled appearance was entirely a color-blending artifact.
In InputNodeSelectorSection (ExecutorEditComponents.kt), replaced the ExecutorActionButton call with an OutlinedButton. Material3 OutlinedButton defaults to transparent fill + colorScheme.primary text + colorScheme.outline border — giving the button a clearly active, interactive appearance without the heavy weight of a primary-fill button. The ExecutorActionButton composable itself (used for Source/Target picker buttons elsewhere) was left unchanged.
When using secondaryContainer as a button fill, verify the contrast ratio against the app’s background in both light and dark themes before committing. A button fill that blends into the background reads as disabled regardless of the enabled flag. Prefer OutlinedButton for secondary “add item” CTAs at the bottom of settings forms so they are unambiguously active without competing with primary actions.