Not really that surprising, since there is no way to apply the correct aria-selected and aria-expanded attributes using just CSS. (You can apply the correct ARIA roles in the HTML though, just not save the change of state.)
It's a shame there is not a native HTML tab construction, since you really shouldn't need JS to make tabs. Using the radio buttons to set active state is a clever hack, but it's not what they were intended for.
I think calling something "css-only" and having it break because you didn't add a radio input element in the markup is a little misleading. The dynamic functionality hinges on the behavior of these html elements. And if having required html elements is ok, why not just lose the hacky markup and include a required javascript file to get the desired behavior in a more traditional and standard way?
IMO an image is much less important than CSS, since most of the time without the CSS framework loading the page is not usable. Also progressive JPEGs make a big difference for the effect of loading time if you have a large splash image or background image.