\usetikzlibrary{arrows.meta}
\usetikzlibrary{shapes.geometric}
\usetikzlibrary{patterns}

% We put nodes in a separate layer, so we can
% slightly overlap with paths for a perfect fit
\pgfdeclarelayer{nodes}
\pgfdeclarelayer{path}
\pgfsetlayers{main,nodes}

% Layer settings
\tikzset{
	% Layer hack, lets us write
	% later = * in scopes.
	layer/.style = {
		execute at begin scope={\pgfonlayer{#1}},
		execute at end scope={\endpgfonlayer}
	},
	%
	% Arrowhead tweaks
	>={Latex[ width=2mm, length=2mm ]},
	label/.style = {
		circle,
		% For automatic red background in solutions
		fill = \bgcolor,
		draw = none
	},
	%
	% Nodes
	main/.style = {
		draw,
		circle,
		fill = white
	},
	%
	% Flow annotations
	flow/.style = {
		opacity = 1,
		thin,
		inner xsep = 2.5mm,
		inner ysep = 2.5mm
	},
	%
	% Paths
	path/.style = {
		line width = 4mm,
		draw = black,
		% Lengthen paths so they're
		% completely under nodes.
		line cap = rect,
		opacity = 0.3
	},
	hatch/.style = {
		pattern=north west lines,
		pattern color=gray
	}
}