function shade (color, percent) {
	const decimalFraction = percent / 100;
	const hex = validateHex(color);

	// 1.
	let f = parseInt(hex, 16);
	let t = decimalFraction < 0 ? 0 : 255;
	let p = decimalFraction < 0 ? decimalFraction * -1 : decimalFraction;

	const R = f >> 16;
	const G = f >> 8 & 0x00FF;
	const B = f & 0x0000FF;

	// 2.
	return '#' + (0x1000000
		+ (Math.round((t - R) * p) + R) * 0x10000
		+ (Math.round((t - G) * p) + G) * 0x100
		+ (Math.round((t - B) * p) + B)).toString(16).slice(1);
}
Shade Color
	==============================

	Takes a hexidecimal color, converts it to RGB and lightens or darkens

	@param {String} color
	@param {Number} opacity (0-100)

	1. do fancy RGB bitwise operations
	2. combine back into a hex value