<p>체크되어 있지 않은 라디오 버튼</p>
<input type="radio">
<hr>
<p>체크되어 있는 라디오 버튼</p>
<input type="radio" checked>
브라우저에서 실제 표시된 모습
크롬 브라우저에서 표현되는 라디오 버튼
크롬 브라우저에서 표현되는 라디오 버튼 캡쳐화면
[type="radio"] {
    border-color: red;
    background-color: red;
}
[type="radio"] {
    width: 50px;
    height: 50px;
}
브라우저에서 실제 표시된 모습
[type="radio"] {
    width: 50px;
    height: 50px;
    accent-color: red;
}
브라우저에서 실제 표시된 모습
실제 적용된 모습 미리보기
<input type="radio" name="radio-test"> <!--체크되지 않은 라디오 버튼 -->
<input type="radio" name="radio-test" checked> <!--체크되어 있는 상태의 라디오 버튼 -->
[type="radio"] {
    appearance: none; /* 기본(네이티브) 모양을 제거 */
    border-radius: 50%;
    box-sizing: border-box;
    width: 20px;
    height: 20px;
    border: 1px solid gray;
    cursor: pointer;
}
[type="radio"]:checked {
    border: 6px solid yellowgreen;
}
실제 적용된 모습 미리보기
<div class="control-container">
    <input type="radio" checked name="favorite" id="html" class="screen-reader">
    <div class="label-box">
        <span class="check-icon" aria-hidden="true"></span>
        <label for="html">HTML</label>
    </div>
</div>
<div class="control-container">
    <input type="radio" name="favorite" id="css" class="screen-reader">
    <div class="label-box">
        <span class="check-icon" aria-hidden="true"></span>
        <label for="css">CSS</label>
    </div>
</div>
.control-container {
    display: flex;
    position: relative;
}
.control-container + .control-container {
    margin-top: 0.7em;
}
.screen-reader { /* 스크린 리더를 고려해서 라디오 버튼을 화면에서 숨김 */
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    border: 0;
    overflow: hidden;
    margin: -1px;
    clip-path: inset(50%);
}
.label-box {
    position: relative;
}
.check-icon {
    width: 1.4em;
    height: 1.4em;
    border-radius: 50%;
    background-color: #fff;
    border: 1px solid gray;
    position: absolute;
    left: 0;
    top: 50%;
    transform: translateY(-50%);
}
.check-icon::before {
    content: "";
    position: absolute;
    box-sizing: border-box;
    width: 30%;
    height: 55%;
    left: 50%;
    top: 50%;
    transform: translateX(-50%) translateY(-70%) rotateZ(40deg);
    border-right: 1.7px solid gray;
    border-bottom: 1.7px solid gray;
}
label {
    padding-left: 2.2em;
    position: relative;
    cursor: pointer;
}
[type="radio"]:checked + .label-box .check-icon {
    border-color:  yellowgreen;
    background-color: yellowgreen;
}
[type="radio"]:checked + .label-box .check-icon::before {
    border-color: #fff;
}
[type="radio"]:checked + .label-box label {
    color: yellowgreen;
}