acd3330bcd
_darken3D / _lighten3D return 'rgb(r,g,b)' CSS strings.
When those values were passed as colList to drawCylinder/drawSphere,
_cylGrad called _lighten3D(col) → _h2r('rgb(...)') → parseInt('rg',16)=NaN,
causing addColorStop to throw and killing ALL pillar/tower/sphere buoy symbols.
Fix: _h2r now detects the 'rgb(' prefix and extracts the three integers
via regex before falling through to the existing hex path.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>