Three “add/find a related node” call sites used filled buttons instead of the established OutlinedButton pattern used by InputNodeSelectorSection: LogicGate’s “Set input” slots (ExecutorActionButton — filled with secondaryContainer colors), Pin’s “Set input” (Button — default filled Material3), and Server’s “Refresh Nodes” (correct OutlinedButton shape but plain Text instead of EmojiText with titleMedium).
ExecutorActionButton predates InputNodeSelectorSection’s OutlinedButton pill and was reused in DigitalInputSlot by convenience. Pin’s call site was written in isolation without referencing the shared pattern. Server’s button was a manually-coded OutlinedButton that happened to get the container right but missed the text-style convention.
EditLogicGate.kt DigitalInputSlot: replaced ExecutorActionButton(label = "🔍 Set input") with OutlinedButton { EmojiText(titleMedium) }, keeping height(BUTTON_HEIGHT_STANDARD) so it stays compact in the inline row.EditPin.kt: replaced Button { EmojiText("🔍 Set input") } with OutlinedButton(fillMaxWidth) { EmojiText(titleMedium) }.ServerView.kt: replaced Text("Refresh Nodes") inside the existing OutlinedButton with EmojiText("🔍 Refresh Nodes", titleMedium).import krill.zone.app.krillapp.executor.* from EditLogicGate.kt.When writing a “pick / find / refresh a related node” button anywhere in composeApp/, reach for OutlinedButton { EmojiText("🔍 …", style = MaterialTheme.typography.titleMedium) } — the same shape InputNodeSelectorSection uses. Don’t reach for Button (filled) or ExecutorActionButton for this affordance; those are action buttons, not node-finder pills.