デフォルトのcheckboxはdisplay: none;で隠しつつ、::beforeで四角の枠を、::afterでチェックマークを付けていきます。 radioの場合はborder-radius: 50%; で円を作れば良さそうですね。
It's difficult to custom a checkbox with CSS properties, because it will not have effects on your web page. So what you can do is, masking your default checkbox and adding shape and/or text before or ...
CSS hidden accessibility for screen readers is not compatible with the NVDA/Firefox screen reader/browser combination. The issue arises due to Firefox's interpretation of the transform: scale(0); ...