Nightly UX audit (typography theme) flagged three consistency violations: (1) RGB channel label text in the Color Trigger editor rendered in saturated red/green/blue against the dark surface — literal hex values not from the color scheme. (2) “Configure: …” description text inside executor/trigger preview cards rendered in italic, a style not defined in DarkBlueGrayTypography. (3) Logic Gate truth table column headers appeared at FontWeight.Bold against normal-weight data rows, with no corresponding named typography role.
Three separate inline overrides each bypassed the Material3 token system:
EditColorTrigger.kt: three Text label calls carried an explicit color = Color(0xFF...) override matching the slider track color. The slider track color is intentionally literal (color picker must show the hue), but the label text carries no semantic color need — it is purely typographic.NodeChip.kt PromptSubtitle and EditCalc.kt FormulaDisplay: both used .copy(fontStyle = FontStyle.Italic) on a bodySmall/bodyMedium style. Italic is not a named role in DarkBlueGrayTypography; it was added inline to signal “secondary” status even though bodySmall with its baked-in onSurfaceVariant color already provides that subordination.EditLogicGate.kt TruthTableColumn: the header cell used labelSmall.copy(fontWeight = FontWeight.Bold). The selected-column background highlight provides the hierarchy signal; FontWeight.Bold was redundant and unrooted in the type scale.EditColorTrigger.kt: removed color parameter from the three channel label Text calls; changed style from labelMedium to labelSmall (static informational labels for a slider warrant helper-text scale). Slider track colors are unchanged.NodeChip.kt: removed .copy(fontStyle = FontStyle.Italic) from PromptSubtitle; bodySmall unmodified provides the same visual subordination via color.EditCalc.kt: removed .copy(fontStyle = FontStyle.Italic) from the empty-state label in FormulaDisplay; also aligned to bodySmall (was bodyMedium).EditLogicGate.kt: changed truth table header style from labelSmall.copy(fontWeight = FontWeight.Bold) to labelMedium (12sp, no weight override). The size step over data rows’ labelSmall (11sp) and the selected-column background together carry the hierarchy.color = Color(...) literal to a typographic Text unless the color is semantically meaningful to the content (e.g., a status indicator). Static label text should inherit from MaterialTheme.colorScheme or the typography role’s baked-in color..copy(fontStyle = FontStyle.Italic) inline. If italic is editorially needed, define a named style in KrillTheme.kt (e.g., bodySmallItalic) and reference it by name..copy(fontWeight = ...) inline on a typography role. If a different weight is needed, define or identify a named role in the type scale (labelMedium is already heavier than labelSmall at the same size family).Text, check MaterialTheme.typography first. If no existing role fits, raise it in the openspec proposal — don’t patch it inline.