anton99zel, Ну уберите атрибут checked из css и увидите обыкновенную вложенность
input .desc1, и тут тоже самое, вы обращаетесь ко вложенному элементу по параметру checked.
Если хотите сделать независимо от вложенности, Вам лучше сделать сие на js/jq
#radio1:checked ~ .desc1 тильда означает что .desc1 находится на одном уровне с чекнутым инпутом и в коде идет после него. Если нужно, чтобы визуально чекбоксы шли после блоков, то они туда отправляются либо с помощью order (родитель должен иметь display: flex) либо инпуты скрываются, а внизу размещаются label с атрибутом for. который свяжет их с инпутами. Второй вариант хорош тем, что label можно стилизовать как угодно.