use serde::Serialize;

#[derive(Debug, Clone, Serialize)]
pub enum ColorSpace {
	Srgb,
	SrgbLinear,
	Hsl,
	Hwb,
	Lab,
	Lch,
	Oklab,
	Oklch,
	DisplayP3,
	A98Rgb,
	ProphotoRgb,
	Rec2020,
	XyzD65,
	XyzD50,
}

#[derive(Debug, Clone, Serialize)]
pub struct Color<'a> {
	pub color_space: ColorSpace,
	pub components: [f32; 3],
	pub alpha: Option<f32>,
	pub hex: Option<&'a str>,
}

impl<'a> Color<'a> {
	pub const fn from(color_space: ColorSpace, components: [f32; 3], alpha: Option<f32>, hex: Option<&'a str>) -> Self {
		match color_space {
			ColorSpace::Srgb => Self {
				color_space,
				components: [
					f32::clamp(components[0], 0.0, 1.0),
					f32::clamp(components[1], 0.0, 1.0),
					f32::clamp(components[2], 0.0, 1.0),
				],
				alpha: match alpha {
					Some(alpha) => Some(f32::clamp(alpha, 0.0, 1.0)),
					None => None,
				},
				hex,
			},
			ColorSpace::SrgbLinear => Self {
				color_space,
				components: [
					f32::clamp(components[0], 0.0, 1.0),
					f32::clamp(components[1], 0.0, 1.0),
					f32::clamp(components[2], 0.0, 1.0),
				],
				alpha: match alpha {
					Some(alpha) => Some(f32::clamp(alpha, 0.0, 1.0)),
					None => None,
				},
				hex,
			},
			ColorSpace::Hsl => Self {
				color_space,
				components: [
					f32::clamp(components[0], 0.0, 359.99999999999),
					f32::clamp(components[1], 0.0, 100.0),
					f32::clamp(components[2], 0.0, 100.0),
				],
				alpha: match alpha {
					Some(alpha) => Some(f32::clamp(alpha, 0.0, 1.0)),
					None => None,
				},
				hex,
			},
			ColorSpace::Hwb => Self {
				color_space,
				components: [
					f32::clamp(components[0], 0.0, 359.99999999999),
					f32::clamp(components[1], 0.0, 100.0),
					f32::clamp(components[2], 0.0, 100.0),
				],
				alpha: match alpha {
					Some(alpha) => Some(f32::clamp(alpha, 0.0, 1.0)),
					None => None,
				},
				hex,
			},
			ColorSpace::Lab => Self {
				color_space,
				components: [
					f32::clamp(components[0], 0.0, 100.0),
					f32::clamp(components[1], -160.0, 160.0),
					f32::clamp(components[2], -160.0, 160.0),
				],
				alpha: match alpha {
					Some(alpha) => Some(f32::clamp(alpha, 0.0, 1.0)),
					None => None,
				},
				hex,
			},
			ColorSpace::Lch => Self {
				color_space,
				components: [
					f32::clamp(components[0], 0.0, 100.0),
					f32::clamp(components[1], 0.0, 230.0),
					f32::clamp(components[2], 0.0, 359.99999999999),
				],
				alpha: match alpha {
					Some(alpha) => Some(f32::clamp(alpha, 0.0, 1.0)),
					None => None,
				},
				hex,
			},
			ColorSpace::Oklab => Self {
				color_space,
				components: [
					f32::clamp(components[0], 0.0, 1.0),
					f32::clamp(components[1], -0.5, 0.5),
					f32::clamp(components[2], -0.5, 0.5),
				],
				alpha: match alpha {
					Some(alpha) => Some(f32::clamp(alpha, 0.0, 1.0)),
					None => None,
				},
				hex,
			},
			ColorSpace::Oklch => Self {
				color_space,
				components: [
					f32::clamp(components[0], 0.0, 1.0),
					f32::clamp(components[1], 0.0, 0.5),
					f32::clamp(components[2], 0.0, 359.99999999999),
				],
				alpha: match alpha {
					Some(alpha) => Some(f32::clamp(alpha, 0.0, 1.0)),
					None => None,
				},
				hex,
			},
			ColorSpace::DisplayP3 => Self {
				color_space,
				components: [
					f32::clamp(components[0], 0.0, 1.0),
					f32::clamp(components[1], 0.0, 1.0),
					f32::clamp(components[2], 0.0, 1.0),
				],
				alpha: match alpha {
					Some(alpha) => Some(f32::clamp(alpha, 0.0, 1.0)),
					None => None,
				},
				hex,
			},
			ColorSpace::A98Rgb => Self {
				color_space,
				components: [
					f32::clamp(components[0], 0.0, 1.0),
					f32::clamp(components[1], 0.0, 1.0),
					f32::clamp(components[2], 0.0, 1.0),
				],
				alpha: match alpha {
					Some(alpha) => Some(f32::clamp(alpha, 0.0, 1.0)),
					None => None,
				},
				hex,
			},
			ColorSpace::ProphotoRgb => Self {
				color_space,
				components: [
					f32::clamp(components[0], 0.0, 1.0),
					f32::clamp(components[1], 0.0, 1.0),
					f32::clamp(components[2], 0.0, 1.0),
				],
				alpha: match alpha {
					Some(alpha) => Some(f32::clamp(alpha, 0.0, 1.0)),
					None => None,
				},
				hex,
			},
			ColorSpace::Rec2020 => Self {
				color_space,
				components: [
					f32::clamp(components[0], 0.0, 1.0),
					f32::clamp(components[1], 0.0, 1.0),
					f32::clamp(components[2], 0.0, 1.0),
				],
				alpha: match alpha {
					Some(alpha) => Some(f32::clamp(alpha, 0.0, 1.0)),
					None => None,
				},
				hex,
			},
			ColorSpace::XyzD65 => Self {
				color_space,
				components: [
					f32::clamp(components[0], 0.0, 1.0),
					f32::clamp(components[1], 0.0, 1.0),
					f32::clamp(components[2], 0.0, 1.0),
				],
				alpha: match alpha {
					Some(alpha) => Some(f32::clamp(alpha, 0.0, 1.0)),
					None => None,
				},
				hex,
			},
			ColorSpace::XyzD50 => Self {
				color_space,
				components: [
					f32::clamp(components[0], 0.0, 1.0),
					f32::clamp(components[1], 0.0, 1.0),
					f32::clamp(components[2], 0.0, 1.0),
				],
				alpha: match alpha {
					Some(alpha) => Some(f32::clamp(alpha, 0.0, 1.0)),
					None => None,
				},
				hex,
			},
		}
	}
}

// Red
const RED_EXTRA_DARK_COMPONENTS: [f32; 3] = [0.6588235294117647_f32, 0.23921568627450981_f32, 0.3333333333333333_f32];
const RED_EXTRA_DARK_ALPHA: f32 = 1.0_f32;
const RED_EXTRA_DARK_HEX: &str = "#a83d55";
pub const RED_EXTRA_DARK: Color = Color::from(
	ColorSpace::Srgb,
	RED_EXTRA_DARK_COMPONENTS,
	Some(RED_EXTRA_DARK_ALPHA),
	Some(RED_EXTRA_DARK_HEX),
);
const RED_DARK_COMPONENTS: [f32; 3] = [0.807843137254902_f32, 0.28627450980392155_f32, 0.403921568627451_f32];
const RED_DARK_ALPHA: f32 = 1.0_f32;
const RED_DARK_HEX: &str = "#ce4967";
pub const RED_DARK: Color = Color::from(
	ColorSpace::Srgb,
	RED_DARK_COMPONENTS,
	Some(RED_DARK_ALPHA),
	Some(RED_DARK_HEX),
);
const RED_MEDIUM_COMPONENTS: [f32; 3] = [0.8941176470588236_f32, 0.4196078431372549_f32, 0.5098039215686274_f32];
const RED_MEDIUM_ALPHA: f32 = 1.0_f32;
const RED_MEDIUM_HEX: &str = "#e46b82";
pub const RED_MEDIUM: Color = Color::from(
	ColorSpace::Srgb,
	RED_MEDIUM_COMPONENTS,
	Some(RED_MEDIUM_ALPHA),
	Some(RED_MEDIUM_HEX),
);
const RED_LIGHT_COMPONENTS: [f32; 3] = [0.9450980392156862_f32, 0.5529411764705883_f32, 0.615686274509804_f32];
const RED_LIGHT_ALPHA: f32 = 1.0_f32;
const RED_LIGHT_HEX: &str = "#f18d9d";
pub const RED_LIGHT: Color = Color::from(
	ColorSpace::Srgb,
	RED_LIGHT_COMPONENTS,
	Some(RED_LIGHT_ALPHA),
	Some(RED_LIGHT_HEX),
);
const RED_EXTRA_LIGHT_COMPONENTS: [f32; 3] = [0.9764705882352941_f32, 0.7019607843137254_f32, 0.7372549019607844_f32];
const RED_EXTRA_LIGHT_ALPHA: f32 = 1.0_f32;
const RED_EXTRA_LIGHT_HEX: &str = "#f9b3bc";
pub const RED_EXTRA_LIGHT: Color = Color::from(
	ColorSpace::Srgb,
	RED_EXTRA_LIGHT_COMPONENTS,
	Some(RED_EXTRA_LIGHT_ALPHA),
	Some(RED_EXTRA_LIGHT_HEX),
);
// Green
const GREEN_EXTRA_DARK_COMPONENTS: [f32; 3] = [0.3254901960784314_f32, 0.5490196078431373_f32, 0.3176470588235294_f32];
const GREEN_EXTRA_DARK_ALPHA: f32 = 1.0_f32;
const GREEN_EXTRA_DARK_HEX: &str = "#538c51";
pub const GREEN_EXTRA_DARK: Color = Color::from(
	ColorSpace::Srgb,
	GREEN_EXTRA_DARK_COMPONENTS,
	Some(GREEN_EXTRA_DARK_ALPHA),
	Some(GREEN_EXTRA_DARK_HEX),
);
const GREEN_DARK_COMPONENTS: [f32; 3] = [0.36470588235294116_f32, 0.7058823529411765_f32, 0.3568627450980392_f32];
const GREEN_DARK_ALPHA: f32 = 1.0_f32;
const GREEN_DARK_HEX: &str = "#5db45b";
pub const GREEN_DARK: Color = Color::from(
	ColorSpace::Srgb,
	GREEN_DARK_COMPONENTS,
	Some(GREEN_DARK_ALPHA),
	Some(GREEN_DARK_HEX),
);
const GREEN_MEDIUM_COMPONENTS: [f32; 3] = [0.47058823529411764_f32, 0.8117647058823529_f32, 0.4588235294117647_f32];
const GREEN_MEDIUM_ALPHA: f32 = 1.0_f32;
const GREEN_MEDIUM_HEX: &str = "#78cf75";
pub const GREEN_MEDIUM: Color = Color::from(
	ColorSpace::Srgb,
	GREEN_MEDIUM_COMPONENTS,
	Some(GREEN_MEDIUM_ALPHA),
	Some(GREEN_MEDIUM_HEX),
);
const GREEN_LIGHT_COMPONENTS: [f32; 3] = [0.592156862745098_f32, 0.8784313725490196_f32, 0.5764705882352941_f32];
const GREEN_LIGHT_ALPHA: f32 = 1.0_f32;
const GREEN_LIGHT_HEX: &str = "#97e093";
pub const GREEN_LIGHT: Color = Color::from(
	ColorSpace::Srgb,
	GREEN_LIGHT_COMPONENTS,
	Some(GREEN_LIGHT_ALPHA),
	Some(GREEN_LIGHT_HEX),
);
const GREEN_EXTRA_LIGHT_COMPONENTS: [f32; 3] = [0.7215686274509804_f32, 0.9294117647058824_f32, 0.7058823529411765_f32];
const GREEN_EXTRA_LIGHT_ALPHA: f32 = 1.0_f32;
const GREEN_EXTRA_LIGHT_HEX: &str = "#b8edb4";
pub const GREEN_EXTRA_LIGHT: Color = Color::from(
	ColorSpace::Srgb,
	GREEN_EXTRA_LIGHT_COMPONENTS,
	Some(GREEN_EXTRA_LIGHT_ALPHA),
	Some(GREEN_EXTRA_LIGHT_HEX),
);
// Blue
const BLUE_EXTRA_DARK_COMPONENTS: [f32; 3] = [0.2549019607843137_f32, 0.3764705882352941_f32, 0.43529411764705883_f32];
const BLUE_EXTRA_DARK_ALPHA: f32 = 1.0_f32;
const BLUE_EXTRA_DARK_HEX: &str = "#41606f";
pub const BLUE_EXTRA_DARK: Color = Color::from(
	ColorSpace::Srgb,
	BLUE_EXTRA_DARK_COMPONENTS,
	Some(BLUE_EXTRA_DARK_ALPHA),
	Some(BLUE_EXTRA_DARK_HEX),
);
const BLUE_DARK_COMPONENTS: [f32; 3] = [0.2823529411764706_f32, 0.5019607843137255_f32, 0.6039215686274509_f32];
const BLUE_DARK_ALPHA: f32 = 1.0_f32;
const BLUE_DARK_HEX: &str = "#48809a";
pub const BLUE_DARK: Color = Color::from(
	ColorSpace::Srgb,
	BLUE_DARK_COMPONENTS,
	Some(BLUE_DARK_ALPHA),
	Some(BLUE_DARK_HEX),
);
const BLUE_MEDIUM_COMPONENTS: [f32; 3] = [0.3137254901960784_f32, 0.6235294117647059_f32, 0.7647058823529411_f32];
const BLUE_MEDIUM_ALPHA: f32 = 1.0_f32;
const BLUE_MEDIUM_HEX: &str = "#509fc3";
pub const BLUE_MEDIUM: Color = Color::from(
	ColorSpace::Srgb,
	BLUE_MEDIUM_COMPONENTS,
	Some(BLUE_MEDIUM_ALPHA),
	Some(BLUE_MEDIUM_HEX),
);
const BLUE_LIGHT_COMPONENTS: [f32; 3] = [0.4196078431372549_f32, 0.7058823529411765_f32, 0.8392156862745098_f32];
const BLUE_LIGHT_ALPHA: f32 = 1.0_f32;
const BLUE_LIGHT_HEX: &str = "#6bb4d6";
pub const BLUE_LIGHT: Color = Color::from(
	ColorSpace::Srgb,
	BLUE_LIGHT_COMPONENTS,
	Some(BLUE_LIGHT_ALPHA),
	Some(BLUE_LIGHT_HEX),
);
const BLUE_EXTRA_LIGHT_COMPONENTS: [f32; 3] = [0.5647058823529412_f32, 0.807843137254902_f32, 0.9254901960784314_f32];
const BLUE_EXTRA_LIGHT_ALPHA: f32 = 1.0_f32;
const BLUE_EXTRA_LIGHT_HEX: &str = "#90ceec";
pub const BLUE_EXTRA_LIGHT: Color = Color::from(
	ColorSpace::Srgb,
	BLUE_EXTRA_LIGHT_COMPONENTS,
	Some(BLUE_EXTRA_LIGHT_ALPHA),
	Some(BLUE_EXTRA_LIGHT_HEX),
);
// Cyan
const CYAN_EXTRA_DARK_COMPONENTS: [f32; 3] = [0.17254901960784313_f32, 0.5843137254901961_f32, 0.6_f32];
const CYAN_EXTRA_DARK_ALPHA: f32 = 1.0_f32;
const CYAN_EXTRA_DARK_HEX: &str = "#2c9599";
pub const CYAN_EXTRA_DARK: Color = Color::from(
	ColorSpace::Srgb,
	CYAN_EXTRA_DARK_COMPONENTS,
	Some(CYAN_EXTRA_DARK_ALPHA),
	Some(CYAN_EXTRA_DARK_HEX),
);
const CYAN_DARK_COMPONENTS: [f32; 3] = [0.16862745098039217_f32, 0.7803921568627451_f32, 0.803921568627451_f32];
const CYAN_DARK_ALPHA: f32 = 1.0_f32;
const CYAN_DARK_HEX: &str = "#2bc7cd";
pub const CYAN_DARK: Color = Color::from(
	ColorSpace::Srgb,
	CYAN_DARK_COMPONENTS,
	Some(CYAN_DARK_ALPHA),
	Some(CYAN_DARK_HEX),
);
const CYAN_MEDIUM_COMPONENTS: [f32; 3] = [0.28627450980392155_f32, 0.8705882352941177_f32, 0.8941176470588236_f32];
const CYAN_MEDIUM_ALPHA: f32 = 1.0_f32;
const CYAN_MEDIUM_HEX: &str = "#49dee4";
pub const CYAN_MEDIUM: Color = Color::from(
	ColorSpace::Srgb,
	CYAN_MEDIUM_COMPONENTS,
	Some(CYAN_MEDIUM_ALPHA),
	Some(CYAN_MEDIUM_HEX),
);
const CYAN_LIGHT_COMPONENTS: [f32; 3] = [0.4196078431372549_f32, 0.9333333333333333_f32, 0.9529411764705882_f32];
const CYAN_LIGHT_ALPHA: f32 = 1.0_f32;
const CYAN_LIGHT_HEX: &str = "#6beef3";
pub const CYAN_LIGHT: Color = Color::from(
	ColorSpace::Srgb,
	CYAN_LIGHT_COMPONENTS,
	Some(CYAN_LIGHT_ALPHA),
	Some(CYAN_LIGHT_HEX),
);
const CYAN_EXTRA_LIGHT_COMPONENTS: [f32; 3] = [0.5725490196078431_f32, 0.9686274509803922_f32, 0.984313725490196_f32];
const CYAN_EXTRA_LIGHT_ALPHA: f32 = 1.0_f32;
const CYAN_EXTRA_LIGHT_HEX: &str = "#92f7fb";
pub const CYAN_EXTRA_LIGHT: Color = Color::from(
	ColorSpace::Srgb,
	CYAN_EXTRA_LIGHT_COMPONENTS,
	Some(CYAN_EXTRA_LIGHT_ALPHA),
	Some(CYAN_EXTRA_LIGHT_HEX),
);
// Magenta
const MAGENTA_EXTRA_DARK_COMPONENTS: [f32; 3] =
	[0.6313725490196078_f32, 0.34901960784313724_f32, 0.5647058823529412_f32];
const MAGENTA_EXTRA_DARK_ALPHA: f32 = 1.0_f32;
const MAGENTA_EXTRA_DARK_HEX: &str = "#a15990";
pub const MAGENTA_EXTRA_DARK: Color = Color::from(
	ColorSpace::Srgb,
	MAGENTA_EXTRA_DARK_COMPONENTS,
	Some(MAGENTA_EXTRA_DARK_ALPHA),
	Some(MAGENTA_EXTRA_DARK_HEX),
);
const MAGENTA_DARK_COMPONENTS: [f32; 3] = [0.7490196078431373_f32, 0.42745098039215684_f32, 0.6745098039215687_f32];
const MAGENTA_DARK_ALPHA: f32 = 1.0_f32;
const MAGENTA_DARK_HEX: &str = "#bf6dac";
pub const MAGENTA_DARK: Color = Color::from(
	ColorSpace::Srgb,
	MAGENTA_DARK_COMPONENTS,
	Some(MAGENTA_DARK_ALPHA),
	Some(MAGENTA_DARK_HEX),
);
const MAGENTA_MEDIUM_COMPONENTS: [f32; 3] = [0.8470588235294118_f32, 0.5450980392156862_f32, 0.7725490196078432_f32];
const MAGENTA_MEDIUM_ALPHA: f32 = 1.0_f32;
const MAGENTA_MEDIUM_HEX: &str = "#d88bc5";
pub const MAGENTA_MEDIUM: Color = Color::from(
	ColorSpace::Srgb,
	MAGENTA_MEDIUM_COMPONENTS,
	Some(MAGENTA_MEDIUM_ALPHA),
	Some(MAGENTA_MEDIUM_HEX),
);
const MAGENTA_LIGHT_COMPONENTS: [f32; 3] = [0.9137254901960784_f32, 0.6627450980392157_f32, 0.8470588235294118_f32];
const MAGENTA_LIGHT_ALPHA: f32 = 1.0_f32;
const MAGENTA_LIGHT_HEX: &str = "#e9a9d8";
pub const MAGENTA_LIGHT: Color = Color::from(
	ColorSpace::Srgb,
	MAGENTA_LIGHT_COMPONENTS,
	Some(MAGENTA_LIGHT_ALPHA),
	Some(MAGENTA_LIGHT_HEX),
);
const MAGENTA_EXTRA_LIGHT_COMPONENTS: [f32; 3] =
	[0.9647058823529412_f32, 0.796078431372549_f32, 0.9176470588235294_f32];
const MAGENTA_EXTRA_LIGHT_ALPHA: f32 = 1.0_f32;
const MAGENTA_EXTRA_LIGHT_HEX: &str = "#f6cbea";
pub const MAGENTA_EXTRA_LIGHT: Color = Color::from(
	ColorSpace::Srgb,
	MAGENTA_EXTRA_LIGHT_COMPONENTS,
	Some(MAGENTA_EXTRA_LIGHT_ALPHA),
	Some(MAGENTA_EXTRA_LIGHT_HEX),
);
// Yellow
const YELLOW_EXTRA_DARK_COMPONENTS: [f32; 3] =
	[0.6627450980392157_f32, 0.6196078431372549_f32, 0.17647058823529413_f32];
const YELLOW_EXTRA_DARK_ALPHA: f32 = 1.0_f32;
const YELLOW_EXTRA_DARK_HEX: &str = "#a99e2d";
pub const YELLOW_EXTRA_DARK: Color = Color::from(
	ColorSpace::Srgb,
	YELLOW_EXTRA_DARK_COMPONENTS,
	Some(YELLOW_EXTRA_DARK_ALPHA),
	Some(YELLOW_EXTRA_DARK_HEX),
);
const YELLOW_DARK_COMPONENTS: [f32; 3] = [0.8470588235294118_f32, 0.792156862745098_f32, 0.19215686274509805_f32];
const YELLOW_DARK_ALPHA: f32 = 1.0_f32;
const YELLOW_DARK_HEX: &str = "#d8ca31";
pub const YELLOW_DARK: Color = Color::from(
	ColorSpace::Srgb,
	YELLOW_DARK_COMPONENTS,
	Some(YELLOW_DARK_ALPHA),
	Some(YELLOW_DARK_HEX),
);
const YELLOW_MEDIUM_COMPONENTS: [f32; 3] = [0.9176470588235294_f32, 0.8666666666666667_f32, 0.33725490196078434_f32];
const YELLOW_MEDIUM_ALPHA: f32 = 1.0_f32;
const YELLOW_MEDIUM_HEX: &str = "#eadd56";
pub const YELLOW_MEDIUM: Color = Color::from(
	ColorSpace::Srgb,
	YELLOW_MEDIUM_COMPONENTS,
	Some(YELLOW_MEDIUM_ALPHA),
	Some(YELLOW_MEDIUM_HEX),
);
const YELLOW_LIGHT_COMPONENTS: [f32; 3] = [0.9529411764705882_f32, 0.9137254901960784_f32, 0.48627450980392156_f32];
const YELLOW_LIGHT_ALPHA: f32 = 1.0_f32;
const YELLOW_LIGHT_HEX: &str = "#f3e97c";
pub const YELLOW_LIGHT: Color = Color::from(
	ColorSpace::Srgb,
	YELLOW_LIGHT_COMPONENTS,
	Some(YELLOW_LIGHT_ALPHA),
	Some(YELLOW_LIGHT_HEX),
);
const YELLOW_EXTRA_LIGHT_COMPONENTS: [f32; 3] =
	[0.9764705882352941_f32, 0.9490196078431372_f32, 0.6392156862745098_f32];
const YELLOW_EXTRA_LIGHT_ALPHA: f32 = 1.0_f32;
const YELLOW_EXTRA_LIGHT_HEX: &str = "#f9f2a3";
pub const YELLOW_EXTRA_LIGHT: Color = Color::from(
	ColorSpace::Srgb,
	YELLOW_EXTRA_LIGHT_COMPONENTS,
	Some(YELLOW_EXTRA_LIGHT_ALPHA),
	Some(YELLOW_EXTRA_LIGHT_HEX),
);
// Purple
const PURPLE_EXTRA_DARK_COMPONENTS: [f32; 3] =
	[0.5098039215686274_f32, 0.30980392156862746_f32, 0.6901960784313725_f32];
const PURPLE_EXTRA_DARK_ALPHA: f32 = 1.0_f32;
const PURPLE_EXTRA_DARK_HEX: &str = "#824fb0";
pub const PURPLE_EXTRA_DARK: Color = Color::from(
	ColorSpace::Srgb,
	PURPLE_EXTRA_DARK_COMPONENTS,
	Some(PURPLE_EXTRA_DARK_ALPHA),
	Some(PURPLE_EXTRA_DARK_HEX),
);
const PURPLE_DARK_COMPONENTS: [f32; 3] = [0.611764705882353_f32, 0.40784313725490196_f32, 0.8_f32];
const PURPLE_DARK_ALPHA: f32 = 1.0_f32;
const PURPLE_DARK_HEX: &str = "#9c68cc";
pub const PURPLE_DARK: Color = Color::from(
	ColorSpace::Srgb,
	PURPLE_DARK_COMPONENTS,
	Some(PURPLE_DARK_ALPHA),
	Some(PURPLE_DARK_HEX),
);
const PURPLE_MEDIUM_COMPONENTS: [f32; 3] = [0.7176470588235294_f32, 0.5450980392156862_f32, 0.8901960784313725_f32];
const PURPLE_MEDIUM_ALPHA: f32 = 1.0_f32;
const PURPLE_MEDIUM_HEX: &str = "#b78be3";
pub const PURPLE_MEDIUM: Color = Color::from(
	ColorSpace::Srgb,
	PURPLE_MEDIUM_COMPONENTS,
	Some(PURPLE_MEDIUM_ALPHA),
	Some(PURPLE_MEDIUM_HEX),
);
const PURPLE_LIGHT_COMPONENTS: [f32; 3] = [0.803921568627451_f32, 0.6784313725490196_f32, 0.9411764705882353_f32];
const PURPLE_LIGHT_ALPHA: f32 = 1.0_f32;
const PURPLE_LIGHT_HEX: &str = "#cdadf0";
pub const PURPLE_LIGHT: Color = Color::from(
	ColorSpace::Srgb,
	PURPLE_LIGHT_COMPONENTS,
	Some(PURPLE_LIGHT_ALPHA),
	Some(PURPLE_LIGHT_HEX),
);
const PURPLE_EXTRA_LIGHT_COMPONENTS: [f32; 3] =
	[0.8941176470588236_f32, 0.8274509803921568_f32, 0.9725490196078431_f32];
const PURPLE_EXTRA_LIGHT_ALPHA: f32 = 1.0_f32;
const PURPLE_EXTRA_LIGHT_HEX: &str = "#e4d3f8";
pub const PURPLE_EXTRA_LIGHT: Color = Color::from(
	ColorSpace::Srgb,
	PURPLE_EXTRA_LIGHT_COMPONENTS,
	Some(PURPLE_EXTRA_LIGHT_ALPHA),
	Some(PURPLE_EXTRA_LIGHT_HEX),
);
// Orange
const ORANGE_EXTRA_DARK_COMPONENTS: [f32; 3] =
	[0.6313725490196078_f32, 0.4666666666666667_f32, 0.20392156862745098_f32];
const ORANGE_EXTRA_DARK_ALPHA: f32 = 1.0_f32;
const ORANGE_EXTRA_DARK_HEX: &str = "#a17734";
pub const ORANGE_EXTRA_DARK: Color = Color::from(
	ColorSpace::Srgb,
	ORANGE_EXTRA_DARK_COMPONENTS,
	Some(ORANGE_EXTRA_DARK_ALPHA),
	Some(ORANGE_EXTRA_DARK_HEX),
);
const ORANGE_DARK_COMPONENTS: [f32; 3] = [0.803921568627451_f32, 0.592156862745098_f32, 0.23137254901960785_f32];
const ORANGE_DARK_ALPHA: f32 = 1.0_f32;
const ORANGE_DARK_HEX: &str = "#cd973b";
pub const ORANGE_DARK: Color = Color::from(
	ColorSpace::Srgb,
	ORANGE_DARK_COMPONENTS,
	Some(ORANGE_DARK_ALPHA),
	Some(ORANGE_DARK_HEX),
);
const ORANGE_MEDIUM_COMPONENTS: [f32; 3] = [0.8941176470588236_f32, 0.6901960784313725_f32, 0.3686274509803922_f32];
const ORANGE_MEDIUM_ALPHA: f32 = 1.0_f32;
const ORANGE_MEDIUM_HEX: &str = "#e4b05e";
pub const ORANGE_MEDIUM: Color = Color::from(
	ColorSpace::Srgb,
	ORANGE_MEDIUM_COMPONENTS,
	Some(ORANGE_MEDIUM_ALPHA),
	Some(ORANGE_MEDIUM_HEX),
);
const ORANGE_LIGHT_COMPONENTS: [f32; 3] = [0.9333333333333333_f32, 0.7647058823529411_f32, 0.5098039215686274_f32];
const ORANGE_LIGHT_ALPHA: f32 = 1.0_f32;
const ORANGE_LIGHT_HEX: &str = "#eec382";
pub const ORANGE_LIGHT: Color = Color::from(
	ColorSpace::Srgb,
	ORANGE_LIGHT_COMPONENTS,
	Some(ORANGE_LIGHT_ALPHA),
	Some(ORANGE_LIGHT_HEX),
);
const ORANGE_EXTRA_LIGHT_COMPONENTS: [f32; 3] =
	[0.9568627450980393_f32, 0.8352941176470589_f32, 0.6549019607843137_f32];
const ORANGE_EXTRA_LIGHT_ALPHA: f32 = 1.0_f32;
const ORANGE_EXTRA_LIGHT_HEX: &str = "#f4d5a7";
pub const ORANGE_EXTRA_LIGHT: Color = Color::from(
	ColorSpace::Srgb,
	ORANGE_EXTRA_LIGHT_COMPONENTS,
	Some(ORANGE_EXTRA_LIGHT_ALPHA),
	Some(ORANGE_EXTRA_LIGHT_HEX),
);
// Aqua
const AQUA_EXTRA_DARK_COMPONENTS: [f32; 3] = [0.19607843137254902_f32, 0.5529411764705883_f32, 0.49019607843137253_f32];
const AQUA_EXTRA_DARK_ALPHA: f32 = 1.0_f32;
const AQUA_EXTRA_DARK_HEX: &str = "#328d7d";
pub const AQUA_EXTRA_DARK: Color = Color::from(
	ColorSpace::Srgb,
	AQUA_EXTRA_DARK_COMPONENTS,
	Some(AQUA_EXTRA_DARK_ALPHA),
	Some(AQUA_EXTRA_DARK_HEX),
);
const AQUA_DARK_COMPONENTS: [f32; 3] = [0.19607843137254902_f32, 0.7450980392156863_f32, 0.6588235294117647_f32];
const AQUA_DARK_ALPHA: f32 = 1.0_f32;
const AQUA_DARK_HEX: &str = "#32bea8";
pub const AQUA_DARK: Color = Color::from(
	ColorSpace::Srgb,
	AQUA_DARK_COMPONENTS,
	Some(AQUA_DARK_ALPHA),
	Some(AQUA_DARK_HEX),
);
const AQUA_MEDIUM_COMPONENTS: [f32; 3] = [0.30980392156862746_f32, 0.8627450980392157_f32, 0.7686274509803922_f32];
const AQUA_MEDIUM_ALPHA: f32 = 1.0_f32;
const AQUA_MEDIUM_HEX: &str = "#4fdcc4";
pub const AQUA_MEDIUM: Color = Color::from(
	ColorSpace::Srgb,
	AQUA_MEDIUM_COMPONENTS,
	Some(AQUA_MEDIUM_ALPHA),
	Some(AQUA_MEDIUM_HEX),
);
const AQUA_LIGHT_COMPONENTS: [f32; 3] = [0.43137254901960786_f32, 0.9176470588235294_f32, 0.8274509803921568_f32];
const AQUA_LIGHT_ALPHA: f32 = 1.0_f32;
const AQUA_LIGHT_HEX: &str = "#6eead3";
pub const AQUA_LIGHT: Color = Color::from(
	ColorSpace::Srgb,
	AQUA_LIGHT_COMPONENTS,
	Some(AQUA_LIGHT_ALPHA),
	Some(AQUA_LIGHT_HEX),
);
const AQUA_EXTRA_LIGHT_COMPONENTS: [f32; 3] = [0.6196078431372549_f32, 1_f32, 0.9215686274509803_f32];
const AQUA_EXTRA_LIGHT_ALPHA: f32 = 1.0_f32;
const AQUA_EXTRA_LIGHT_HEX: &str = "#9effeb";
pub const AQUA_EXTRA_LIGHT: Color = Color::from(
	ColorSpace::Srgb,
	AQUA_EXTRA_LIGHT_COMPONENTS,
	Some(AQUA_EXTRA_LIGHT_ALPHA),
	Some(AQUA_EXTRA_LIGHT_HEX),
);
// Dark
const DARK_1_COMPONENTS: [f32; 3] = [
	0.047058823529411764_f32,
	0.050980392156862744_f32,
	0.06274509803921569_f32,
];
const DARK_1_ALPHA: f32 = 1.0_f32;
const DARK_1_HEX: &str = "#0c0d10";
pub const DARK_1: Color = Color::from(
	ColorSpace::Srgb,
	DARK_1_COMPONENTS,
	Some(DARK_1_ALPHA),
	Some(DARK_1_HEX),
);
const DARK_2_COMPONENTS: [f32; 3] = [
	0.09411764705882353_f32,
	0.09803921568627451_f32,
	0.10588235294117647_f32,
];
const DARK_2_ALPHA: f32 = 1.0_f32;
const DARK_2_HEX: &str = "#18191b";
pub const DARK_2: Color = Color::from(
	ColorSpace::Srgb,
	DARK_2_COMPONENTS,
	Some(DARK_2_ALPHA),
	Some(DARK_2_HEX),
);
const DARK_3_COMPONENTS: [f32; 3] = [0.13725490196078433_f32, 0.1411764705882353_f32, 0.14901960784313725_f32];
const DARK_3_ALPHA: f32 = 1.0_f32;
const DARK_3_HEX: &str = "#232426";
pub const DARK_3: Color = Color::from(
	ColorSpace::Srgb,
	DARK_3_COMPONENTS,
	Some(DARK_3_ALPHA),
	Some(DARK_3_HEX),
);
const DARK_4_COMPONENTS: [f32; 3] = [0.1843137254901961_f32, 0.18823529411764706_f32, 0.19607843137254902_f32];
const DARK_4_ALPHA: f32 = 1.0_f32;
const DARK_4_HEX: &str = "#2f3032";
pub const DARK_4: Color = Color::from(
	ColorSpace::Srgb,
	DARK_4_COMPONENTS,
	Some(DARK_4_ALPHA),
	Some(DARK_4_HEX),
);
const DARK_5_COMPONENTS: [f32; 3] = [
	0.22745098039215686_f32,
	0.23137254901960785_f32,
	0.23921568627450981_f32,
];
const DARK_5_ALPHA: f32 = 1.0_f32;
const DARK_5_HEX: &str = "#3a3b3d";
pub const DARK_5: Color = Color::from(
	ColorSpace::Srgb,
	DARK_5_COMPONENTS,
	Some(DARK_5_ALPHA),
	Some(DARK_5_HEX),
);
const DARK_6_COMPONENTS: [f32; 3] = [0.27450980392156865_f32, 0.2784313725490196_f32, 0.2823529411764706_f32];
const DARK_6_ALPHA: f32 = 1.0_f32;
const DARK_6_HEX: &str = "#464748";
pub const DARK_6: Color = Color::from(
	ColorSpace::Srgb,
	DARK_6_COMPONENTS,
	Some(DARK_6_ALPHA),
	Some(DARK_6_HEX),
);
const DARK_7_COMPONENTS: [f32; 3] = [0.3215686274509804_f32, 0.3215686274509804_f32, 0.3254901960784314_f32];
const DARK_7_ALPHA: f32 = 1.0_f32;
const DARK_7_HEX: &str = "#525253";
pub const DARK_7: Color = Color::from(
	ColorSpace::Srgb,
	DARK_7_COMPONENTS,
	Some(DARK_7_ALPHA),
	Some(DARK_7_HEX),
);
const DARK_8_COMPONENTS: [f32; 3] = [0.3686274509803922_f32, 0.3686274509803922_f32, 0.3686274509803922_f32];
const DARK_8_ALPHA: f32 = 1.0_f32;
const DARK_8_HEX: &str = "#5e5e5e";
pub const DARK_8: Color = Color::from(
	ColorSpace::Srgb,
	DARK_8_COMPONENTS,
	Some(DARK_8_ALPHA),
	Some(DARK_8_HEX),
);
const DARK_9_COMPONENTS: [f32; 3] = [0.4117647058823529_f32, 0.4117647058823529_f32, 0.41568627450980394_f32];
const DARK_9_ALPHA: f32 = 1.0_f32;
const DARK_9_HEX: &str = "#69696a";
pub const DARK_9: Color = Color::from(
	ColorSpace::Srgb,
	DARK_9_COMPONENTS,
	Some(DARK_9_ALPHA),
	Some(DARK_9_HEX),
);
const DARK_10_COMPONENTS: [f32; 3] = [0.4588235294117647_f32, 0.4588235294117647_f32, 0.4588235294117647_f32];
const DARK_10_ALPHA: f32 = 1.0_f32;
const DARK_10_HEX: &str = "#757575";
pub const DARK_10: Color = Color::from(
	ColorSpace::Srgb,
	DARK_10_COMPONENTS,
	Some(DARK_10_ALPHA),
	Some(DARK_10_HEX),
);
// Neutral
const GRAY_NEUTRAL_COMPONENTS: [f32; 3] = [0.5019607843137255_f32, 0.5019607843137255_f32, 0.5058823529411764_f32];
const GRAY_NEUTRAL_ALPHA: f32 = 1.0_f32;
const GRAY_NEUTRAL_HEX: &str = "#808081";
pub const GRAY_NEUTRAL: Color = Color::from(
	ColorSpace::Srgb,
	GRAY_NEUTRAL_COMPONENTS,
	Some(GRAY_NEUTRAL_ALPHA),
	Some(GRAY_NEUTRAL_HEX),
);
// Light
const LIGHT_10_COMPONENTS: [f32; 3] = [0.5490196078431373_f32, 0.5490196078431373_f32, 0.5490196078431373_f32];
const LIGHT_10_ALPHA: f32 = 1.0_f32;
const LIGHT_10_HEX: &str = "#8c8c8c";
pub const LIGHT_10: Color = Color::from(
	ColorSpace::Srgb,
	LIGHT_10_COMPONENTS,
	Some(LIGHT_10_ALPHA),
	Some(LIGHT_10_HEX),
);
const LIGHT_9_COMPONENTS: [f32; 3] = [0.596078431372549_f32, 0.596078431372549_f32, 0.592156862745098_f32];
const LIGHT_9_ALPHA: f32 = 1.0_f32;
const LIGHT_9_HEX: &str = "#989897";
pub const LIGHT_9: Color = Color::from(
	ColorSpace::Srgb,
	LIGHT_9_COMPONENTS,
	Some(LIGHT_9_ALPHA),
	Some(LIGHT_9_HEX),
);
const LIGHT_8_COMPONENTS: [f32; 3] = [0.6470588235294118_f32, 0.6431372549019608_f32, 0.6392156862745098_f32];
const LIGHT_8_ALPHA: f32 = 1.0_f32;
const LIGHT_8_HEX: &str = "#a5a4a3";
pub const LIGHT_8: Color = Color::from(
	ColorSpace::Srgb,
	LIGHT_8_COMPONENTS,
	Some(LIGHT_8_ALPHA),
	Some(LIGHT_8_HEX),
);
const LIGHT_7_COMPONENTS: [f32; 3] = [0.6941176470588235_f32, 0.6901960784313725_f32, 0.6823529411764706_f32];
const LIGHT_7_ALPHA: f32 = 1.0_f32;
const LIGHT_7_HEX: &str = "#b1b0ae";
pub const LIGHT_7: Color = Color::from(
	ColorSpace::Srgb,
	LIGHT_7_COMPONENTS,
	Some(LIGHT_7_ALPHA),
	Some(LIGHT_7_HEX),
);
const LIGHT_6_COMPONENTS: [f32; 3] = [0.7411764705882353_f32, 0.7372549019607844_f32, 0.7294117647058823_f32];
const LIGHT_6_ALPHA: f32 = 1.0_f32;
const LIGHT_6_HEX: &str = "#bdbcba";
pub const LIGHT_6: Color = Color::from(
	ColorSpace::Srgb,
	LIGHT_6_COMPONENTS,
	Some(LIGHT_6_ALPHA),
	Some(LIGHT_6_HEX),
);
const LIGHT_5_COMPONENTS: [f32; 3] = [0.788235294117647_f32, 0.7843137254901961_f32, 0.7764705882352941_f32];
const LIGHT_5_ALPHA: f32 = 1.0_f32;
const LIGHT_5_HEX: &str = "#c9c8c6";
pub const LIGHT_5: Color = Color::from(
	ColorSpace::Srgb,
	LIGHT_5_COMPONENTS,
	Some(LIGHT_5_ALPHA),
	Some(LIGHT_5_HEX),
);
const LIGHT_4_COMPONENTS: [f32; 3] = [0.8352941176470589_f32, 0.8313725490196079_f32, 0.8196078431372549_f32];
const LIGHT_4_ALPHA: f32 = 1.0_f32;
const LIGHT_4_HEX: &str = "#d5d4d1";
pub const LIGHT_4: Color = Color::from(
	ColorSpace::Srgb,
	LIGHT_4_COMPONENTS,
	Some(LIGHT_4_ALPHA),
	Some(LIGHT_4_HEX),
);
const LIGHT_3_COMPONENTS: [f32; 3] = [0.8862745098039215_f32, 0.8784313725490196_f32, 0.8666666666666667_f32];
const LIGHT_3_ALPHA: f32 = 1.0_f32;
const LIGHT_3_HEX: &str = "#e2e0dd";
pub const LIGHT_3: Color = Color::from(
	ColorSpace::Srgb,
	LIGHT_3_COMPONENTS,
	Some(LIGHT_3_ALPHA),
	Some(LIGHT_3_HEX),
);
const LIGHT_2_COMPONENTS: [f32; 3] = [0.9333333333333333_f32, 0.9254901960784314_f32, 0.9098039215686274_f32];
const LIGHT_2_ALPHA: f32 = 1.0_f32;
const LIGHT_2_HEX: &str = "#eeece8";
pub const LIGHT_2: Color = Color::from(
	ColorSpace::Srgb,
	LIGHT_2_COMPONENTS,
	Some(LIGHT_2_ALPHA),
	Some(LIGHT_2_HEX),
);
const LIGHT_1_COMPONENTS: [f32; 3] = [0.9803921568627451_f32, 0.9725490196078431_f32, 0.9568627450980393_f32];
const LIGHT_1_ALPHA: f32 = 1.0_f32;
const LIGHT_1_HEX: &str = "#faf8f4";
pub const LIGHT_1: Color = Color::from(
	ColorSpace::Srgb,
	LIGHT_1_COMPONENTS,
	Some(LIGHT_1_ALPHA),
	Some(LIGHT_1_HEX),
);

/// # Colors
///
/// the colors are named the following way:
/// ```
/// [name]_[variant]
/// ```
///
/// ## Colors
/// name can be: `red` `green` `blue` `cyan` `yellow` `magenta` `purple` `orange` `aqua`
///
/// variant can be: `extra_dark` `dark` `medium` `light` `extra_light`
/// ## Shades
/// name can be: `dark` `light`
///
/// variant can be: `1` `2` `3` `4` `5` `6` `7` `8` `9` `10`
///
/// or the special case `gray_neutral`
pub struct Palette {
	// red
	pub red_extra_dark: Color<'static>,
	pub red_dark: Color<'static>,
	pub red_medium: Color<'static>,
	pub red_light: Color<'static>,
	pub red_extra_light: Color<'static>,
	// green
	pub green_extra_dark: Color<'static>,
	pub green_dark: Color<'static>,
	pub green_medium: Color<'static>,
	pub green_light: Color<'static>,
	pub green_extra_light: Color<'static>,
	// blue
	pub blue_extra_dark: Color<'static>,
	pub blue_dark: Color<'static>,
	pub blue_medium: Color<'static>,
	pub blue_light: Color<'static>,
	pub blue_extra_light: Color<'static>,
	// cyan
	pub cyan_extra_dark: Color<'static>,
	pub cyan_dark: Color<'static>,
	pub cyan_medium: Color<'static>,
	pub cyan_light: Color<'static>,
	pub cyan_extra_light: Color<'static>,
	// magenta
	pub magenta_extra_dark: Color<'static>,
	pub magenta_dark: Color<'static>,
	pub magenta_medium: Color<'static>,
	pub magenta_light: Color<'static>,
	pub magenta_extra_light: Color<'static>,
	// yellow
	pub yellow_extra_dark: Color<'static>,
	pub yellow_dark: Color<'static>,
	pub yellow_medium: Color<'static>,
	pub yellow_light: Color<'static>,
	pub yellow_extra_light: Color<'static>,
	// purple
	pub purple_extra_dark: Color<'static>,
	pub purple_dark: Color<'static>,
	pub purple_medium: Color<'static>,
	pub purple_light: Color<'static>,
	pub purple_extra_light: Color<'static>,
	// orange
	pub orange_extra_dark: Color<'static>,
	pub orange_dark: Color<'static>,
	pub orange_medium: Color<'static>,
	pub orange_light: Color<'static>,
	pub orange_extra_light: Color<'static>,
	// aqua
	pub aqua_extra_dark: Color<'static>,
	pub aqua_dark: Color<'static>,
	pub aqua_medium: Color<'static>,
	pub aqua_light: Color<'static>,
	pub aqua_extra_light: Color<'static>,
	// dark
	pub dark_1: Color<'static>,
	pub dark_2: Color<'static>,
	pub dark_3: Color<'static>,
	pub dark_4: Color<'static>,
	pub dark_5: Color<'static>,
	pub dark_6: Color<'static>,
	pub dark_7: Color<'static>,
	pub dark_8: Color<'static>,
	pub dark_9: Color<'static>,
	pub dark_10: Color<'static>,
	// neutral
	pub gray_neutral: Color<'static>,
	// light
	pub light_10: Color<'static>,
	pub light_9: Color<'static>,
	pub light_8: Color<'static>,
	pub light_7: Color<'static>,
	pub light_6: Color<'static>,
	pub light_5: Color<'static>,
	pub light_4: Color<'static>,
	pub light_3: Color<'static>,
	pub light_2: Color<'static>,
	pub light_1: Color<'static>,
}

pub const PALETTE: Palette = Palette {
	// red
	red_extra_dark: RED_EXTRA_DARK,
	red_dark: RED_DARK,
	red_medium: RED_MEDIUM,
	red_light: RED_LIGHT,
	red_extra_light: RED_EXTRA_LIGHT,
	// green
	green_extra_dark: GREEN_EXTRA_DARK,
	green_dark: GREEN_DARK,
	green_medium: GREEN_MEDIUM,
	green_light: GREEN_LIGHT,
	green_extra_light: GREEN_EXTRA_LIGHT,
	// blue
	blue_extra_dark: BLUE_EXTRA_DARK,
	blue_dark: BLUE_DARK,
	blue_medium: BLUE_MEDIUM,
	blue_light: BLUE_LIGHT,
	blue_extra_light: BLUE_EXTRA_LIGHT,
	// cyan
	cyan_extra_dark: CYAN_EXTRA_DARK,
	cyan_dark: CYAN_DARK,
	cyan_medium: CYAN_MEDIUM,
	cyan_light: CYAN_LIGHT,
	cyan_extra_light: CYAN_EXTRA_LIGHT,
	// magenta
	magenta_extra_dark: MAGENTA_EXTRA_DARK,
	magenta_dark: MAGENTA_DARK,
	magenta_medium: MAGENTA_MEDIUM,
	magenta_light: MAGENTA_LIGHT,
	magenta_extra_light: MAGENTA_EXTRA_LIGHT,
	// yellow
	yellow_extra_dark: YELLOW_EXTRA_DARK,
	yellow_dark: YELLOW_DARK,
	yellow_medium: YELLOW_MEDIUM,
	yellow_light: YELLOW_LIGHT,
	yellow_extra_light: YELLOW_EXTRA_LIGHT,
	// purple
	purple_extra_dark: PURPLE_EXTRA_DARK,
	purple_dark: PURPLE_DARK,
	purple_medium: PURPLE_MEDIUM,
	purple_light: PURPLE_LIGHT,
	purple_extra_light: PURPLE_EXTRA_LIGHT,
	// orange
	orange_extra_dark: ORANGE_EXTRA_DARK,
	orange_dark: ORANGE_DARK,
	orange_medium: ORANGE_MEDIUM,
	orange_light: ORANGE_LIGHT,
	orange_extra_light: ORANGE_EXTRA_LIGHT,
	// aqua
	aqua_extra_dark: AQUA_EXTRA_DARK,
	aqua_dark: AQUA_DARK,
	aqua_medium: AQUA_MEDIUM,
	aqua_light: AQUA_LIGHT,
	aqua_extra_light: AQUA_EXTRA_LIGHT,
	// dark
	dark_1: DARK_1,
	dark_2: DARK_2,
	dark_3: DARK_3,
	dark_4: DARK_4,
	dark_5: DARK_5,
	dark_6: DARK_6,
	dark_7: DARK_7,
	dark_8: DARK_8,
	dark_9: DARK_9,
	dark_10: DARK_10,
	// neutral
	gray_neutral: GRAY_NEUTRAL,
	// light
	light_10: LIGHT_10,
	light_9: LIGHT_9,
	light_8: LIGHT_8,
	light_7: LIGHT_7,
	light_6: LIGHT_6,
	light_5: LIGHT_5,
	light_4: LIGHT_4,
	light_3: LIGHT_3,
	light_2: LIGHT_2,
	light_1: LIGHT_1,
};
