Text de-emphasis had drifted into eleven ad-hoc opacity literals across the popup, the shared components, and the Providers config page. Several of them (0.52-0.62) put Kirigami.Theme.textColor below the WCAG AA 4.5:1 ratio against the Breeze Light popup background, and neighbouring labels in the same row often disagreed by a few hundredths for no reason. Replace them with a two-step scale on the applet root: secondaryTextOpacity for supporting text and valueTextOpacity for the value a label annotates, so a label/value pair keeps its hierarchy without inventing a new step per section. 0.7 is the lowest step that still clears AA. configProviders.qml mirrors the constant the same way it already mirrors providerReadableColor. Also size the three meters that stack in one provider detail view from a shared meterTrackHeight derived from gridUnit instead of pinning 6 or 7 device pixels, size the provider status badge from Kirigami.Theme.smallFont instead of a hardcoded 10px that ignored the user font setting, and size the tab icons from Kirigami.Units.iconSizes.small instead of a bare 16. Guard all of it with static assertions in test_ui_regressions.sh: the tokens must exist, no Label/Heading may set opacity from a literal, and no popup text may size from device pixels. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Simone committed on 8/10/2026, 4:15:45 PMparent3b8752d
7 files changedLine totals unavailable