.payments input[type="radio"]:checked .payments
Сейчас вы сказали браузеру, что нужно найти payments, который лежит
внутри чекбокса.
Внутри чекбокса сложно находится.
В CSS можно выбрать только блоки, которые лежат после элемента или внутри.
Родителя можно покрасить только на js.
Можно сделать костылик в виде доп.элемента, который в коде будет после инпута и примерять стили к нему. А задать ему абсолют так, чтобы казалось, что рамка покрасилась у родителя.
Например, так на чистом css
https://jsfiddle.net/642j1vh5/
И это:
.payments input[type="radio"] {
/* display: none; */
}
плохо, гуглите про доступное скрытие и паттерн visually-hidden.