GLSL, 700 629 564 545545 499 bytes
#define v vec2
#define l(b,d,t)length(g-b*d)<1.&&length(g-dot(g,b)*b)<(length(g)<.5?A*.5:.04)
#define j(x,r)length(x-g)<r
#define k(x,r,q)j(x,q)!=j(x,r)
float#define F=l(b)length(g-b)<1.3&&length(g-dot(g,b)*b)<(length(g)<S?A*S:A/S)
float C=.86,S=.5,F=.3,E=.22,A=.02,G=.21;void mainImage(out vec4 o,in v p){v r=iResolution.xy;v g=(p/S-r)/r.y;int c=0;ify;o.g=(jk(v(0,EF),FG,G-A)||j||k(v(E*CF*C,-E*SF*S),FG,G-A)||j||k(v(-E*CF*C,-E*SF*S),FG,G-A))c=1;if?o.g=0.:k(v(0),F,G)?C:l(v(0,1),1.,A)||l(v(C,-S),1.,A)||l(v(-C,-S),1.,A)||j(v(0),.06)||j(v(0,F),G)||j(v(F*C,-F*S),G)||j(v(-F*C,-F*S),G))c=0;if(k(v(?0),F,G))c=1;if(k.:j(v(0,FE),G,G-AF)||k||j(v(F*CE*C,-F*SE*S),G,G-AF)||k||j(v(-F*CE*C,-F*SE*S),G,G-A))c=0;o=vec4(cF)?C:0.;}
I was playing around with Shadertoy, so I tried the GLSL shading language. The code just rasterizes circles and lines by testing each fragment, and assigns them a value of one or zero. The size was cut down from >1000 bytes by heavy use of macros.