text.stroke();
	context.closePath();

	// letters
	context.fillText("x", client_x_center + x_max*client_x_step - 24, client_y_center - 8);
	context.fillText("y", client_x_center - 18, client_y_center - y_max*client_y_step + 16);

	// tan
	context.lineWidth = 1.5;
	context.beginPath();
	context.strokeStyle = "#d64562";
	var the_gap = true;
	var old_i;
	for(var j = 0; j < w; j += 1) {
		const x = client_to_x(j);
		const y = tan(x);
		const i = y_to_client(y);
		if(abs(i - old_i) >= h)
			the_gap = true;
		if(