///|
pub(all) enum CatalogTone {
ToneCanvas
ToneSurface
ToneDivider
ToneAccent
ToneBodyText
ToneStrongText
} derive(Eq, Debug)
///|
pub(all) struct CatalogSwatch {
id : String
family : String
step : Int
color : Color
role : Role
tone : CatalogTone
recommended_foreground : Color
target_background : Color
note : String
} derive(Eq, Debug)
///|
pub(all) struct CatalogFamilySummary {
family : String
total : Int
foregrounds : Int
backgrounds : Int
average_luminance : Double
minimum_recommended_contrast : Double
} derive(Eq, Debug)
///|
pub fn CatalogTone::label(self : CatalogTone) -> String {
match self {
ToneCanvas => "canvas"
ToneSurface => "surface"
ToneDivider => "divider"
ToneAccent => "accent"
ToneBodyText => "body-text"
ToneStrongText => "strong-text"
}
}
///|
pub fn CatalogSwatch::as_swatch(self : CatalogSwatch) -> Swatch {
swatch(self.id, self.color, self.role)
}
///|
pub fn CatalogSwatch::recommended_audit(
self : CatalogSwatch,
policy : Policy,
) -> PairAudit {
audit_pair(
swatch(self.id + ".recommended", self.recommended_foreground, RoleText),
swatch(
self.id,
self.color,
if self.role.is_background() {
self.role
} else {
RoleBackground
},
),
policy,
)
}
///|
pub fn built_in_catalog() -> Array[CatalogSwatch] {
let out : Array[CatalogSwatch] = []
for item in catalog_aurora() {
out.push(item)
}
for item in catalog_basalt() {
out.push(item)
}
for item in catalog_coral() {
out.push(item)
}
for item in catalog_dune() {
out.push(item)
}
for item in catalog_ember() {
out.push(item)
}
for item in catalog_fern() {
out.push(item)
}
for item in catalog_glacier() {
out.push(item)
}
for item in catalog_harbor() {
out.push(item)
}
for item in catalog_indigo() {
out.push(item)
}
for item in catalog_jasmine() {
out.push(item)
}
for item in catalog_kelp() {
out.push(item)
}
for item in catalog_lagoon() {
out.push(item)
}
for item in catalog_mango() {
out.push(item)
}
for item in catalog_nebula() {
out.push(item)
}
for item in catalog_obsidian() {
out.push(item)
}
for item in catalog_plum() {
out.push(item)
}
for item in catalog_quartz() {
out.push(item)
}
for item in catalog_rose() {
out.push(item)
}
for item in catalog_spruce() {
out.push(item)
}
for item in catalog_tide() {
out.push(item)
}
for item in catalog_umber() {
out.push(item)
}
for item in catalog_violet() {
out.push(item)
}
for item in catalog_willow() {
out.push(item)
}
for item in catalog_xenon() {
out.push(item)
}
for item in catalog_yarrow() {
out.push(item)
}
for item in catalog_zenith() {
out.push(item)
}
out
}
///|
pub fn catalog_families() -> Array[String] {
[
"aurora", "basalt", "coral", "dune", "ember", "fern", "glacier", "harbor", "indigo",
"jasmine", "kelp", "lagoon", "mango", "nebula", "obsidian", "plum", "quartz",
"rose", "spruce", "tide", "umber", "violet", "willow", "xenon", "yarrow", "zenith",
]
}
///|
pub fn catalog_by_family(family : String) -> Array[CatalogSwatch] {
let out : Array[CatalogSwatch] = []
for item in built_in_catalog() {
if item.family == family {
out.push(item)
}
}
out
}
///|
pub fn catalog_by_role(role : Role) -> Array[CatalogSwatch] {
let out : Array[CatalogSwatch] = []
for item in built_in_catalog() {
if item.role == role {
out.push(item)
}
}
out
}
///|
pub fn catalog_find(id : String) -> CatalogSwatch? {
for item in built_in_catalog() {
if item.id == id {
return Some(item)
}
}
None
}
///|
pub fn catalog_as_swatches(items : Array[CatalogSwatch]) -> Array[Swatch] {
[
for item in items => item.as_swatch()
]
}
///|
pub fn catalog_palette_for_family(family : String) -> Array[Swatch] {
catalog_as_swatches(catalog_by_family(family))
}
///|
pub fn catalog_audit_family(family : String, policy : Policy) -> PaletteReport {
audit_palette(catalog_palette_for_family(family), policy)
}
///|
pub fn catalog_summary(family : String) -> CatalogFamilySummary {
let items = catalog_by_family(family)
let mut foregrounds = 0
let mut backgrounds = 0
let mut sum = 0.0
let mut minimum = 99.0
for item in items {
if item.role.is_foreground() {
foregrounds += 1
}
if item.role.is_background() {
backgrounds += 1
}
sum += item.color.relative_luminance()
minimum = min_double(
minimum,
contrast_ratio(item.recommended_foreground, item.color),
)
}
let average = if items.length() == 0 {
0.0
} else {
sum / items.length().to_double()
}
let min_ratio = if items.length() == 0 { 0.0 } else { minimum }
{
family,
total: items.length(),
foregrounds,
backgrounds,
average_luminance: average,
minimum_recommended_contrast: min_ratio,
}
}
///|
pub fn catalog_markdown() -> String {
let out = StringBuilder()
out.write_string("# PaletteGuard built-in catalog\n\n")
out.write_string(
"Families: " + catalog_families().length().to_string() + "\n",
)
out.write_string(
"Swatches: " + built_in_catalog().length().to_string() + "\n\n",
)
out.write_string("| id | role | tone | color | recommended |\n")
out.write_string("| --- | --- | --- | --- | --- |\n")
for item in built_in_catalog() {
out.write_string("| " + item.id + " | ")
out.write_string(item.role.label() + " | ")
out.write_string(item.tone.label() + " | ")
out.write_string(item.color.to_hex() + " | ")
out.write_string(item.recommended_foreground.to_hex() + " |\n")
}
out.to_string()
}
///|
fn catalog_aurora() -> Array[CatalogSwatch] {
[
{
id: "aurora-050",
family: "aurora",
step: 50,
color: unchecked_color(252, 253, 255),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(252, 253, 255),
note: "aurora 50 semantic token for original PaletteGuard catalog audits",
},
{
id: "aurora-100",
family: "aurora",
step: 100,
color: unchecked_color(222, 235, 255),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(222, 235, 255),
note: "aurora 100 semantic token for original PaletteGuard catalog audits",
},
{
id: "aurora-150",
family: "aurora",
step: 150,
color: unchecked_color(193, 218, 255),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(193, 218, 255),
note: "aurora 150 semantic token for original PaletteGuard catalog audits",
},
{
id: "aurora-200",
family: "aurora",
step: 200,
color: unchecked_color(163, 200, 255),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(163, 200, 255),
note: "aurora 200 semantic token for original PaletteGuard catalog audits",
},
{
id: "aurora-250",
family: "aurora",
step: 250,
color: unchecked_color(134, 182, 255),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(134, 182, 255),
note: "aurora 250 semantic token for original PaletteGuard catalog audits",
},
{
id: "aurora-300",
family: "aurora",
step: 300,
color: unchecked_color(104, 165, 255),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(104, 165, 255),
note: "aurora 300 semantic token for original PaletteGuard catalog audits",
},
{
id: "aurora-400",
family: "aurora",
step: 400,
color: unchecked_color(75, 147, 255),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(75, 147, 255),
note: "aurora 400 semantic token for original PaletteGuard catalog audits",
},
{
id: "aurora-500",
family: "aurora",
step: 500,
color: unchecked_color(33, 109, 222),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "aurora 500 semantic token for original PaletteGuard catalog audits",
},
{
id: "aurora-600",
family: "aurora",
step: 600,
color: unchecked_color(30, 94, 190),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "aurora 600 semantic token for original PaletteGuard catalog audits",
},
{
id: "aurora-700",
family: "aurora",
step: 700,
color: unchecked_color(27, 78, 157),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "aurora 700 semantic token for original PaletteGuard catalog audits",
},
{
id: "aurora-800",
family: "aurora",
step: 800,
color: unchecked_color(23, 63, 125),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "aurora 800 semantic token for original PaletteGuard catalog audits",
},
{
id: "aurora-900",
family: "aurora",
step: 900,
color: unchecked_color(20, 48, 92),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "aurora 900 semantic token for original PaletteGuard catalog audits",
},
{
id: "aurora-950",
family: "aurora",
step: 950,
color: unchecked_color(17, 33, 60),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "aurora 950 semantic token for original PaletteGuard catalog audits",
},
]
}
///|
fn catalog_basalt() -> Array[CatalogSwatch] {
[
{
id: "basalt-050",
family: "basalt",
step: 50,
color: unchecked_color(252, 253, 255),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(252, 253, 255),
note: "basalt 50 semantic token for original PaletteGuard catalog audits",
},
{
id: "basalt-100",
family: "basalt",
step: 100,
color: unchecked_color(229, 231, 234),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(229, 231, 234),
note: "basalt 100 semantic token for original PaletteGuard catalog audits",
},
{
id: "basalt-150",
family: "basalt",
step: 150,
color: unchecked_color(206, 209, 214),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(206, 209, 214),
note: "basalt 150 semantic token for original PaletteGuard catalog audits",
},
{
id: "basalt-200",
family: "basalt",
step: 200,
color: unchecked_color(182, 187, 194),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(182, 187, 194),
note: "basalt 200 semantic token for original PaletteGuard catalog audits",
},
{
id: "basalt-250",
family: "basalt",
step: 250,
color: unchecked_color(159, 165, 173),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(159, 165, 173),
note: "basalt 250 semantic token for original PaletteGuard catalog audits",
},
{
id: "basalt-300",
family: "basalt",
step: 300,
color: unchecked_color(136, 143, 152),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(136, 143, 152),
note: "basalt 300 semantic token for original PaletteGuard catalog audits",
},
{
id: "basalt-400",
family: "basalt",
step: 400,
color: unchecked_color(113, 121, 132),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(113, 121, 132),
note: "basalt 400 semantic token for original PaletteGuard catalog audits",
},
{
id: "basalt-500",
family: "basalt",
step: 500,
color: unchecked_color(72, 81, 94),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "basalt 500 semantic token for original PaletteGuard catalog audits",
},
{
id: "basalt-600",
family: "basalt",
step: 600,
color: unchecked_color(63, 71, 83),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "basalt 600 semantic token for original PaletteGuard catalog audits",
},
{
id: "basalt-700",
family: "basalt",
step: 700,
color: unchecked_color(53, 60, 72),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "basalt 700 semantic token for original PaletteGuard catalog audits",
},
{
id: "basalt-800",
family: "basalt",
step: 800,
color: unchecked_color(43, 50, 61),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "basalt 800 semantic token for original PaletteGuard catalog audits",
},
{
id: "basalt-900",
family: "basalt",
step: 900,
color: unchecked_color(33, 39, 50),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "basalt 900 semantic token for original PaletteGuard catalog audits",
},
{
id: "basalt-950",
family: "basalt",
step: 950,
color: unchecked_color(24, 28, 39),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "basalt 950 semantic token for original PaletteGuard catalog audits",
},
]
}
///|
fn catalog_coral() -> Array[CatalogSwatch] {
[
{
id: "coral-050",
family: "coral",
step: 50,
color: unchecked_color(252, 253, 255),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(252, 253, 255),
note: "coral 50 semantic token for original PaletteGuard catalog audits",
},
{
id: "coral-100",
family: "coral",
step: 100,
color: unchecked_color(251, 231, 231),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(251, 231, 231),
note: "coral 100 semantic token for original PaletteGuard catalog audits",
},
{
id: "coral-150",
family: "coral",
step: 150,
color: unchecked_color(249, 210, 208),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(249, 210, 208),
note: "coral 150 semantic token for original PaletteGuard catalog audits",
},
{
id: "coral-200",
family: "coral",
step: 200,
color: unchecked_color(248, 188, 184),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(248, 188, 184),
note: "coral 200 semantic token for original PaletteGuard catalog audits",
},
{
id: "coral-250",
family: "coral",
step: 250,
color: unchecked_color(247, 167, 160),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(247, 167, 160),
note: "coral 250 semantic token for original PaletteGuard catalog audits",
},
{
id: "coral-300",
family: "coral",
step: 300,
color: unchecked_color(245, 145, 137),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(245, 145, 137),
note: "coral 300 semantic token for original PaletteGuard catalog audits",
},
{
id: "coral-400",
family: "coral",
step: 400,
color: unchecked_color(244, 123, 113),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(244, 123, 113),
note: "coral 400 semantic token for original PaletteGuard catalog audits",
},
{
id: "coral-500",
family: "coral",
step: 500,
color: unchecked_color(209, 84, 74),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(255, 255, 255),
note: "coral 500 semantic token for original PaletteGuard catalog audits",
},
{
id: "coral-600",
family: "coral",
step: 600,
color: unchecked_color(177, 73, 67),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "coral 600 semantic token for original PaletteGuard catalog audits",
},
{
id: "coral-700",
family: "coral",
step: 700,
color: unchecked_color(144, 62, 59),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "coral 700 semantic token for original PaletteGuard catalog audits",
},
{
id: "coral-800",
family: "coral",
step: 800,
color: unchecked_color(111, 51, 51),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "coral 800 semantic token for original PaletteGuard catalog audits",
},
{
id: "coral-900",
family: "coral",
step: 900,
color: unchecked_color(79, 40, 43),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "coral 900 semantic token for original PaletteGuard catalog audits",
},
{
id: "coral-950",
family: "coral",
step: 950,
color: unchecked_color(46, 29, 36),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "coral 950 semantic token for original PaletteGuard catalog audits",
},
]
}
///|
fn catalog_dune() -> Array[CatalogSwatch] {
[
{
id: "dune-050",
family: "dune",
step: 50,
color: unchecked_color(252, 253, 255),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(252, 253, 255),
note: "dune 50 semantic token for original PaletteGuard catalog audits",
},
{
id: "dune-100",
family: "dune",
step: 100,
color: unchecked_color(244, 238, 229),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(244, 238, 229),
note: "dune 100 semantic token for original PaletteGuard catalog audits",
},
{
id: "dune-150",
family: "dune",
step: 150,
color: unchecked_color(237, 223, 204),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(237, 223, 204),
note: "dune 150 semantic token for original PaletteGuard catalog audits",
},
{
id: "dune-200",
family: "dune",
step: 200,
color: unchecked_color(229, 207, 178),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(229, 207, 178),
note: "dune 200 semantic token for original PaletteGuard catalog audits",
},
{
id: "dune-250",
family: "dune",
step: 250,
color: unchecked_color(221, 192, 153),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(221, 192, 153),
note: "dune 250 semantic token for original PaletteGuard catalog audits",
},
{
id: "dune-300",
family: "dune",
step: 300,
color: unchecked_color(214, 177, 127),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(214, 177, 127),
note: "dune 300 semantic token for original PaletteGuard catalog audits",
},
{
id: "dune-400",
family: "dune",
step: 400,
color: unchecked_color(206, 162, 102),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(206, 162, 102),
note: "dune 400 semantic token for original PaletteGuard catalog audits",
},
{
id: "dune-500",
family: "dune",
step: 500,
color: unchecked_color(170, 124, 62),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(255, 255, 255),
note: "dune 500 semantic token for original PaletteGuard catalog audits",
},
{
id: "dune-600",
family: "dune",
step: 600,
color: unchecked_color(144, 106, 57),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "dune 600 semantic token for original PaletteGuard catalog audits",
},
{
id: "dune-700",
family: "dune",
step: 700,
color: unchecked_color(118, 89, 51),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "dune 700 semantic token for original PaletteGuard catalog audits",
},
{
id: "dune-800",
family: "dune",
step: 800,
color: unchecked_color(92, 71, 45),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "dune 800 semantic token for original PaletteGuard catalog audits",
},
{
id: "dune-900",
family: "dune",
step: 900,
color: unchecked_color(66, 53, 39),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "dune 900 semantic token for original PaletteGuard catalog audits",
},
{
id: "dune-950",
family: "dune",
step: 950,
color: unchecked_color(39, 35, 34),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "dune 950 semantic token for original PaletteGuard catalog audits",
},
]
}
///|
fn catalog_ember() -> Array[CatalogSwatch] {
[
{
id: "ember-050",
family: "ember",
step: 50,
color: unchecked_color(252, 253, 255),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(252, 253, 255),
note: "ember 50 semantic token for original PaletteGuard catalog audits",
},
{
id: "ember-100",
family: "ember",
step: 100,
color: unchecked_color(248, 227, 226),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(248, 227, 226),
note: "ember 100 semantic token for original PaletteGuard catalog audits",
},
{
id: "ember-150",
family: "ember",
step: 150,
color: unchecked_color(244, 202, 197),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(244, 202, 197),
note: "ember 150 semantic token for original PaletteGuard catalog audits",
},
{
id: "ember-200",
family: "ember",
step: 200,
color: unchecked_color(241, 176, 168),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(241, 176, 168),
note: "ember 200 semantic token for original PaletteGuard catalog audits",
},
{
id: "ember-250",
family: "ember",
step: 250,
color: unchecked_color(237, 151, 140),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(237, 151, 140),
note: "ember 250 semantic token for original PaletteGuard catalog audits",
},
{
id: "ember-300",
family: "ember",
step: 300,
color: unchecked_color(233, 125, 111),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(233, 125, 111),
note: "ember 300 semantic token for original PaletteGuard catalog audits",
},
{
id: "ember-400",
family: "ember",
step: 400,
color: unchecked_color(229, 100, 82),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(229, 100, 82),
note: "ember 400 semantic token for original PaletteGuard catalog audits",
},
{
id: "ember-500",
family: "ember",
step: 500,
color: unchecked_color(194, 59, 42),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "ember 500 semantic token for original PaletteGuard catalog audits",
},
{
id: "ember-600",
family: "ember",
step: 600,
color: unchecked_color(164, 52, 39),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "ember 600 semantic token for original PaletteGuard catalog audits",
},
{
id: "ember-700",
family: "ember",
step: 700,
color: unchecked_color(134, 45, 37),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "ember 700 semantic token for original PaletteGuard catalog audits",
},
{
id: "ember-800",
family: "ember",
step: 800,
color: unchecked_color(104, 38, 35),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "ember 800 semantic token for original PaletteGuard catalog audits",
},
{
id: "ember-900",
family: "ember",
step: 900,
color: unchecked_color(74, 32, 33),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "ember 900 semantic token for original PaletteGuard catalog audits",
},
{
id: "ember-950",
family: "ember",
step: 950,
color: unchecked_color(43, 25, 30),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "ember 950 semantic token for original PaletteGuard catalog audits",
},
]
}
///|
fn catalog_fern() -> Array[CatalogSwatch] {
[
{
id: "fern-050",
family: "fern",
step: 50,
color: unchecked_color(252, 253, 255),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(252, 253, 255),
note: "fern 50 semantic token for original PaletteGuard catalog audits",
},
{
id: "fern-100",
family: "fern",
step: 100,
color: unchecked_color(224, 238, 231),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(224, 238, 231),
note: "fern 100 semantic token for original PaletteGuard catalog audits",
},
{
id: "fern-150",
family: "fern",
step: 150,
color: unchecked_color(196, 223, 208),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(196, 223, 208),
note: "fern 150 semantic token for original PaletteGuard catalog audits",
},
{
id: "fern-200",
family: "fern",
step: 200,
color: unchecked_color(168, 207, 184),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(168, 207, 184),
note: "fern 200 semantic token for original PaletteGuard catalog audits",
},
{
id: "fern-250",
family: "fern",
step: 250,
color: unchecked_color(139, 192, 160),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(139, 192, 160),
note: "fern 250 semantic token for original PaletteGuard catalog audits",
},
{
id: "fern-300",
family: "fern",
step: 300,
color: unchecked_color(111, 177, 137),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(111, 177, 137),
note: "fern 300 semantic token for original PaletteGuard catalog audits",
},
{
id: "fern-400",
family: "fern",
step: 400,
color: unchecked_color(83, 162, 113),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(83, 162, 113),
note: "fern 400 semantic token for original PaletteGuard catalog audits",
},
{
id: "fern-500",
family: "fern",
step: 500,
color: unchecked_color(41, 124, 74),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "fern 500 semantic token for original PaletteGuard catalog audits",
},
{
id: "fern-600",
family: "fern",
step: 600,
color: unchecked_color(37, 106, 67),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "fern 600 semantic token for original PaletteGuard catalog audits",
},
{
id: "fern-700",
family: "fern",
step: 700,
color: unchecked_color(32, 89, 59),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "fern 700 semantic token for original PaletteGuard catalog audits",
},
{
id: "fern-800",
family: "fern",
step: 800,
color: unchecked_color(28, 71, 51),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "fern 800 semantic token for original PaletteGuard catalog audits",
},
{
id: "fern-900",
family: "fern",
step: 900,
color: unchecked_color(23, 53, 43),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "fern 900 semantic token for original PaletteGuard catalog audits",
},
{
id: "fern-950",
family: "fern",
step: 950,
color: unchecked_color(18, 35, 36),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "fern 950 semantic token for original PaletteGuard catalog audits",
},
]
}
///|
fn catalog_glacier() -> Array[CatalogSwatch] {
[
{
id: "glacier-050",
family: "glacier",
step: 50,
color: unchecked_color(252, 253, 255),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(252, 253, 255),
note: "glacier 50 semantic token for original PaletteGuard catalog audits",
},
{
id: "glacier-100",
family: "glacier",
step: 100,
color: unchecked_color(227, 242, 248),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(227, 242, 248),
note: "glacier 100 semantic token for original PaletteGuard catalog audits",
},
{
id: "glacier-150",
family: "glacier",
step: 150,
color: unchecked_color(202, 230, 241),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(202, 230, 241),
note: "glacier 150 semantic token for original PaletteGuard catalog audits",
},
{
id: "glacier-200",
family: "glacier",
step: 200,
color: unchecked_color(177, 219, 234),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(177, 219, 234),
note: "glacier 200 semantic token for original PaletteGuard catalog audits",
},
{
id: "glacier-250",
family: "glacier",
step: 250,
color: unchecked_color(153, 208, 228),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(153, 208, 228),
note: "glacier 250 semantic token for original PaletteGuard catalog audits",
},
{
id: "glacier-300",
family: "glacier",
step: 300,
color: unchecked_color(128, 196, 221),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(128, 196, 221),
note: "glacier 300 semantic token for original PaletteGuard catalog audits",
},
{
id: "glacier-400",
family: "glacier",
step: 400,
color: unchecked_color(103, 185, 214),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(103, 185, 214),
note: "glacier 400 semantic token for original PaletteGuard catalog audits",
},
{
id: "glacier-500",
family: "glacier",
step: 500,
color: unchecked_color(62, 148, 180),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(255, 255, 255),
note: "glacier 500 semantic token for original PaletteGuard catalog audits",
},
{
id: "glacier-600",
family: "glacier",
step: 600,
color: unchecked_color(54, 126, 154),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(255, 255, 255),
note: "glacier 600 semantic token for original PaletteGuard catalog audits",
},
{
id: "glacier-700",
family: "glacier",
step: 700,
color: unchecked_color(46, 105, 129),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "glacier 700 semantic token for original PaletteGuard catalog audits",
},
{
id: "glacier-800",
family: "glacier",
step: 800,
color: unchecked_color(38, 83, 104),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "glacier 800 semantic token for original PaletteGuard catalog audits",
},
{
id: "glacier-900",
family: "glacier",
step: 900,
color: unchecked_color(30, 61, 78),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "glacier 900 semantic token for original PaletteGuard catalog audits",
},
{
id: "glacier-950",
family: "glacier",
step: 950,
color: unchecked_color(22, 39, 53),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "glacier 950 semantic token for original PaletteGuard catalog audits",
},
]
}
///|
fn catalog_harbor() -> Array[CatalogSwatch] {
[
{
id: "harbor-050",
family: "harbor",
step: 50,
color: unchecked_color(252, 253, 255),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(252, 253, 255),
note: "harbor 50 semantic token for original PaletteGuard catalog audits",
},
{
id: "harbor-100",
family: "harbor",
step: 100,
color: unchecked_color(222, 233, 239),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(222, 233, 239),
note: "harbor 100 semantic token for original PaletteGuard catalog audits",
},
{
id: "harbor-150",
family: "harbor",
step: 150,
color: unchecked_color(192, 212, 224),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(192, 212, 224),
note: "harbor 150 semantic token for original PaletteGuard catalog audits",
},
{
id: "harbor-200",
family: "harbor",
step: 200,
color: unchecked_color(162, 192, 208),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(162, 192, 208),
note: "harbor 200 semantic token for original PaletteGuard catalog audits",
},
{
id: "harbor-250",
family: "harbor",
step: 250,
color: unchecked_color(132, 172, 192),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(132, 172, 192),
note: "harbor 250 semantic token for original PaletteGuard catalog audits",
},
{
id: "harbor-300",
family: "harbor",
step: 300,
color: unchecked_color(102, 151, 176),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(102, 151, 176),
note: "harbor 300 semantic token for original PaletteGuard catalog audits",
},
{
id: "harbor-400",
family: "harbor",
step: 400,
color: unchecked_color(72, 131, 161),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(72, 131, 161),
note: "harbor 400 semantic token for original PaletteGuard catalog audits",
},
{
id: "harbor-500",
family: "harbor",
step: 500,
color: unchecked_color(29, 92, 124),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "harbor 500 semantic token for original PaletteGuard catalog audits",
},
{
id: "harbor-600",
family: "harbor",
step: 600,
color: unchecked_color(27, 79, 108),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "harbor 600 semantic token for original PaletteGuard catalog audits",
},
{
id: "harbor-700",
family: "harbor",
step: 700,
color: unchecked_color(24, 67, 92),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "harbor 700 semantic token for original PaletteGuard catalog audits",
},
{
id: "harbor-800",
family: "harbor",
step: 800,
color: unchecked_color(22, 55, 76),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "harbor 800 semantic token for original PaletteGuard catalog audits",
},
{
id: "harbor-900",
family: "harbor",
step: 900,
color: unchecked_color(19, 42, 60),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "harbor 900 semantic token for original PaletteGuard catalog audits",
},
{
id: "harbor-950",
family: "harbor",
step: 950,
color: unchecked_color(17, 30, 44),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "harbor 950 semantic token for original PaletteGuard catalog audits",
},
]
}
///|
fn catalog_indigo() -> Array[CatalogSwatch] {
[
{
id: "indigo-050",
family: "indigo",
step: 50,
color: unchecked_color(252, 253, 255),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(252, 253, 255),
note: "indigo 50 semantic token for original PaletteGuard catalog audits",
},
{
id: "indigo-100",
family: "indigo",
step: 100,
color: unchecked_color(230, 229, 249),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(230, 229, 249),
note: "indigo 100 semantic token for original PaletteGuard catalog audits",
},
{
id: "indigo-150",
family: "indigo",
step: 150,
color: unchecked_color(208, 205, 244),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(208, 205, 244),
note: "indigo 150 semantic token for original PaletteGuard catalog audits",
},
{
id: "indigo-200",
family: "indigo",
step: 200,
color: unchecked_color(186, 181, 238),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(186, 181, 238),
note: "indigo 200 semantic token for original PaletteGuard catalog audits",
},
{
id: "indigo-250",
family: "indigo",
step: 250,
color: unchecked_color(165, 157, 233),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(165, 157, 233),
note: "indigo 250 semantic token for original PaletteGuard catalog audits",
},
{
id: "indigo-300",
family: "indigo",
step: 300,
color: unchecked_color(143, 133, 227),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(143, 133, 227),
note: "indigo 300 semantic token for original PaletteGuard catalog audits",
},
{
id: "indigo-400",
family: "indigo",
step: 400,
color: unchecked_color(121, 110, 221),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(121, 110, 221),
note: "indigo 400 semantic token for original PaletteGuard catalog audits",
},
{
id: "indigo-500",
family: "indigo",
step: 500,
color: unchecked_color(81, 69, 187),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "indigo 500 semantic token for original PaletteGuard catalog audits",
},
{
id: "indigo-600",
family: "indigo",
step: 600,
color: unchecked_color(70, 61, 161),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "indigo 600 semantic token for original PaletteGuard catalog audits",
},
{
id: "indigo-700",
family: "indigo",
step: 700,
color: unchecked_color(58, 52, 134),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "indigo 700 semantic token for original PaletteGuard catalog audits",
},
{
id: "indigo-800",
family: "indigo",
step: 800,
color: unchecked_color(47, 44, 107),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "indigo 800 semantic token for original PaletteGuard catalog audits",
},
{
id: "indigo-900",
family: "indigo",
step: 900,
color: unchecked_color(36, 35, 81),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "indigo 900 semantic token for original PaletteGuard catalog audits",
},
{
id: "indigo-950",
family: "indigo",
step: 950,
color: unchecked_color(25, 26, 54),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "indigo 950 semantic token for original PaletteGuard catalog audits",
},
]
}
///|
fn catalog_jasmine() -> Array[CatalogSwatch] {
[
{
id: "jasmine-050",
family: "jasmine",
step: 50,
color: unchecked_color(252, 253, 255),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(252, 253, 255),
note: "jasmine 50 semantic token for original PaletteGuard catalog audits",
},
{
id: "jasmine-100",
family: "jasmine",
step: 100,
color: unchecked_color(248, 243, 226),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(248, 243, 226),
note: "jasmine 100 semantic token for original PaletteGuard catalog audits",
},
{
id: "jasmine-150",
family: "jasmine",
step: 150,
color: unchecked_color(245, 232, 198),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(245, 232, 198),
note: "jasmine 150 semantic token for original PaletteGuard catalog audits",
},
{
id: "jasmine-200",
family: "jasmine",
step: 200,
color: unchecked_color(241, 222, 169),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(241, 222, 169),
note: "jasmine 200 semantic token for original PaletteGuard catalog audits",
},
{
id: "jasmine-250",
family: "jasmine",
step: 250,
color: unchecked_color(238, 212, 141),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(238, 212, 141),
note: "jasmine 250 semantic token for original PaletteGuard catalog audits",
},
{
id: "jasmine-300",
family: "jasmine",
step: 300,
color: unchecked_color(234, 202, 112),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(234, 202, 112),
note: "jasmine 300 semantic token for original PaletteGuard catalog audits",
},
{
id: "jasmine-400",
family: "jasmine",
step: 400,
color: unchecked_color(231, 192, 84),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(231, 192, 84),
note: "jasmine 400 semantic token for original PaletteGuard catalog audits",
},
{
id: "jasmine-500",
family: "jasmine",
step: 500,
color: unchecked_color(196, 155, 43),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(255, 255, 255),
note: "jasmine 500 semantic token for original PaletteGuard catalog audits",
},
{
id: "jasmine-600",
family: "jasmine",
step: 600,
color: unchecked_color(165, 132, 41),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(255, 255, 255),
note: "jasmine 600 semantic token for original PaletteGuard catalog audits",
},
{
id: "jasmine-700",
family: "jasmine",
step: 700,
color: unchecked_color(135, 109, 38),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "jasmine 700 semantic token for original PaletteGuard catalog audits",
},
{
id: "jasmine-800",
family: "jasmine",
step: 800,
color: unchecked_color(104, 86, 36),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "jasmine 800 semantic token for original PaletteGuard catalog audits",
},
{
id: "jasmine-900",
family: "jasmine",
step: 900,
color: unchecked_color(74, 63, 33),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "jasmine 900 semantic token for original PaletteGuard catalog audits",
},
{
id: "jasmine-950",
family: "jasmine",
step: 950,
color: unchecked_color(44, 40, 31),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "jasmine 950 semantic token for original PaletteGuard catalog audits",
},
]
}
///|
fn catalog_kelp() -> Array[CatalogSwatch] {
[
{
id: "kelp-050",
family: "kelp",
step: 50,
color: unchecked_color(252, 253, 255),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(252, 253, 255),
note: "kelp 50 semantic token for original PaletteGuard catalog audits",
},
{
id: "kelp-100",
family: "kelp",
step: 100,
color: unchecked_color(223, 234, 233),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(223, 234, 233),
note: "kelp 100 semantic token for original PaletteGuard catalog audits",
},
{
id: "kelp-150",
family: "kelp",
step: 150,
color: unchecked_color(194, 216, 210),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(194, 216, 210),
note: "kelp 150 semantic token for original PaletteGuard catalog audits",
},
{
id: "kelp-200",
family: "kelp",
step: 200,
color: unchecked_color(164, 197, 188),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(164, 197, 188),
note: "kelp 200 semantic token for original PaletteGuard catalog audits",
},
{
id: "kelp-250",
family: "kelp",
step: 250,
color: unchecked_color(135, 178, 166),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(135, 178, 166),
note: "kelp 250 semantic token for original PaletteGuard catalog audits",
},
{
id: "kelp-300",
family: "kelp",
step: 300,
color: unchecked_color(106, 159, 144),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(106, 159, 144),
note: "kelp 300 semantic token for original PaletteGuard catalog audits",
},
{
id: "kelp-400",
family: "kelp",
step: 400,
color: unchecked_color(77, 141, 121),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(77, 141, 121),
note: "kelp 400 semantic token for original PaletteGuard catalog audits",
},
{
id: "kelp-500",
family: "kelp",
step: 500,
color: unchecked_color(35, 102, 83),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "kelp 500 semantic token for original PaletteGuard catalog audits",
},
{
id: "kelp-600",
family: "kelp",
step: 600,
color: unchecked_color(31, 88, 74),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "kelp 600 semantic token for original PaletteGuard catalog audits",
},
{
id: "kelp-700",
family: "kelp",
step: 700,
color: unchecked_color(28, 74, 64),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "kelp 700 semantic token for original PaletteGuard catalog audits",
},
{
id: "kelp-800",
family: "kelp",
step: 800,
color: unchecked_color(24, 60, 55),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "kelp 800 semantic token for original PaletteGuard catalog audits",
},
{
id: "kelp-900",
family: "kelp",
step: 900,
color: unchecked_color(21, 46, 46),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "kelp 900 semantic token for original PaletteGuard catalog audits",
},
{
id: "kelp-950",
family: "kelp",
step: 950,
color: unchecked_color(17, 32, 37),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "kelp 950 semantic token for original PaletteGuard catalog audits",
},
]
}
///|
fn catalog_lagoon() -> Array[CatalogSwatch] {
[
{
id: "lagoon-050",
family: "lagoon",
step: 50,
color: unchecked_color(252, 253, 255),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(252, 253, 255),
note: "lagoon 50 semantic token for original PaletteGuard catalog audits",
},
{
id: "lagoon-100",
family: "lagoon",
step: 100,
color: unchecked_color(218, 240, 245),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(218, 240, 245),
note: "lagoon 100 semantic token for original PaletteGuard catalog audits",
},
{
id: "lagoon-150",
family: "lagoon",
step: 150,
color: unchecked_color(183, 226, 234),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(183, 226, 234),
note: "lagoon 150 semantic token for original PaletteGuard catalog audits",
},
{
id: "lagoon-200",
family: "lagoon",
step: 200,
color: unchecked_color(149, 213, 224),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(149, 213, 224),
note: "lagoon 200 semantic token for original PaletteGuard catalog audits",
},
{
id: "lagoon-250",
family: "lagoon",
step: 250,
color: unchecked_color(114, 200, 214),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(114, 200, 214),
note: "lagoon 250 semantic token for original PaletteGuard catalog audits",
},
{
id: "lagoon-300",
family: "lagoon",
step: 300,
color: unchecked_color(80, 187, 204),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(80, 187, 204),
note: "lagoon 300 semantic token for original PaletteGuard catalog audits",
},
{
id: "lagoon-400",
family: "lagoon",
step: 400,
color: unchecked_color(45, 173, 194),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(45, 173, 194),
note: "lagoon 400 semantic token for original PaletteGuard catalog audits",
},
{
id: "lagoon-500",
family: "lagoon",
step: 500,
color: unchecked_color(2, 136, 158),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(255, 255, 255),
note: "lagoon 500 semantic token for original PaletteGuard catalog audits",
},
{
id: "lagoon-600",
family: "lagoon",
step: 600,
color: unchecked_color(4, 116, 136),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "lagoon 600 semantic token for original PaletteGuard catalog audits",
},
{
id: "lagoon-700",
family: "lagoon",
step: 700,
color: unchecked_color(6, 97, 115),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "lagoon 700 semantic token for original PaletteGuard catalog audits",
},
{
id: "lagoon-800",
family: "lagoon",
step: 800,
color: unchecked_color(8, 77, 93),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "lagoon 800 semantic token for original PaletteGuard catalog audits",
},
{
id: "lagoon-900",
family: "lagoon",
step: 900,
color: unchecked_color(10, 57, 71),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "lagoon 900 semantic token for original PaletteGuard catalog audits",
},
{
id: "lagoon-950",
family: "lagoon",
step: 950,
color: unchecked_color(12, 37, 49),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "lagoon 950 semantic token for original PaletteGuard catalog audits",
},
]
}
///|
fn catalog_mango() -> Array[CatalogSwatch] {
[
{
id: "mango-050",
family: "mango",
step: 50,
color: unchecked_color(252, 253, 255),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(252, 253, 255),
note: "mango 50 semantic token for original PaletteGuard catalog audits",
},
{
id: "mango-100",
family: "mango",
step: 100,
color: unchecked_color(249, 236, 224),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(249, 236, 224),
note: "mango 100 semantic token for original PaletteGuard catalog audits",
},
{
id: "mango-150",
family: "mango",
step: 150,
color: unchecked_color(247, 220, 193),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(247, 220, 193),
note: "mango 150 semantic token for original PaletteGuard catalog audits",
},
{
id: "mango-200",
family: "mango",
step: 200,
color: unchecked_color(244, 203, 162),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(244, 203, 162),
note: "mango 200 semantic token for original PaletteGuard catalog audits",
},
{
id: "mango-250",
family: "mango",
step: 250,
color: unchecked_color(241, 187, 131),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(241, 187, 131),
note: "mango 250 semantic token for original PaletteGuard catalog audits",
},
{
id: "mango-300",
family: "mango",
step: 300,
color: unchecked_color(238, 170, 100),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(238, 170, 100),
note: "mango 300 semantic token for original PaletteGuard catalog audits",
},
{
id: "mango-400",
family: "mango",
step: 400,
color: unchecked_color(236, 154, 69),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(236, 154, 69),
note: "mango 400 semantic token for original PaletteGuard catalog audits",
},
{
id: "mango-500",
family: "mango",
step: 500,
color: unchecked_color(201, 116, 28),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(255, 255, 255),
note: "mango 500 semantic token for original PaletteGuard catalog audits",
},
{
id: "mango-600",
family: "mango",
step: 600,
color: unchecked_color(170, 99, 28),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "mango 600 semantic token for original PaletteGuard catalog audits",
},
{
id: "mango-700",
family: "mango",
step: 700,
color: unchecked_color(138, 83, 28),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "mango 700 semantic token for original PaletteGuard catalog audits",
},
{
id: "mango-800",
family: "mango",
step: 800,
color: unchecked_color(107, 67, 28),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "mango 800 semantic token for original PaletteGuard catalog audits",
},
{
id: "mango-900",
family: "mango",
step: 900,
color: unchecked_color(76, 50, 28),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "mango 900 semantic token for original PaletteGuard catalog audits",
},
{
id: "mango-950",
family: "mango",
step: 950,
color: unchecked_color(45, 34, 28),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "mango 950 semantic token for original PaletteGuard catalog audits",
},
]
}
///|
fn catalog_nebula() -> Array[CatalogSwatch] {
[
{
id: "nebula-050",
family: "nebula",
step: 50,
color: unchecked_color(252, 253, 255),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(252, 253, 255),
note: "nebula 50 semantic token for original PaletteGuard catalog audits",
},
{
id: "nebula-100",
family: "nebula",
step: 100,
color: unchecked_color(236, 229, 246),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(236, 229, 246),
note: "nebula 100 semantic token for original PaletteGuard catalog audits",
},
{
id: "nebula-150",
family: "nebula",
step: 150,
color: unchecked_color(220, 206, 237),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(220, 206, 237),
note: "nebula 150 semantic token for original PaletteGuard catalog audits",
},
{
id: "nebula-200",
family: "nebula",
step: 200,
color: unchecked_color(204, 182, 228),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(204, 182, 228),
note: "nebula 200 semantic token for original PaletteGuard catalog audits",
},
{
id: "nebula-250",
family: "nebula",
step: 250,
color: unchecked_color(188, 158, 219),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(188, 158, 219),
note: "nebula 250 semantic token for original PaletteGuard catalog audits",
},
{
id: "nebula-300",
family: "nebula",
step: 300,
color: unchecked_color(172, 135, 211),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(172, 135, 211),
note: "nebula 300 semantic token for original PaletteGuard catalog audits",
},
{
id: "nebula-400",
family: "nebula",
step: 400,
color: unchecked_color(156, 111, 202),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(156, 111, 202),
note: "nebula 400 semantic token for original PaletteGuard catalog audits",
},
{
id: "nebula-500",
family: "nebula",
step: 500,
color: unchecked_color(118, 71, 167),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "nebula 500 semantic token for original PaletteGuard catalog audits",
},
{
id: "nebula-600",
family: "nebula",
step: 600,
color: unchecked_color(100, 62, 144),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "nebula 600 semantic token for original PaletteGuard catalog audits",
},
{
id: "nebula-700",
family: "nebula",
step: 700,
color: unchecked_color(83, 53, 120),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "nebula 700 semantic token for original PaletteGuard catalog audits",
},
{
id: "nebula-800",
family: "nebula",
step: 800,
color: unchecked_color(66, 44, 97),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "nebula 800 semantic token for original PaletteGuard catalog audits",
},
{
id: "nebula-900",
family: "nebula",
step: 900,
color: unchecked_color(48, 36, 74),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "nebula 900 semantic token for original PaletteGuard catalog audits",
},
{
id: "nebula-950",
family: "nebula",
step: 950,
color: unchecked_color(31, 27, 51),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "nebula 950 semantic token for original PaletteGuard catalog audits",
},
]
}
///|
fn catalog_obsidian() -> Array[CatalogSwatch] {
[
{
id: "obsidian-050",
family: "obsidian",
step: 50,
color: unchecked_color(252, 253, 255),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(252, 253, 255),
note: "obsidian 50 semantic token for original PaletteGuard catalog audits",
},
{
id: "obsidian-100",
family: "obsidian",
step: 100,
color: unchecked_color(222, 224, 228),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(222, 224, 228),
note: "obsidian 100 semantic token for original PaletteGuard catalog audits",
},
{
id: "obsidian-150",
family: "obsidian",
step: 150,
color: unchecked_color(192, 196, 201),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(192, 196, 201),
note: "obsidian 150 semantic token for original PaletteGuard catalog audits",
},
{
id: "obsidian-200",
family: "obsidian",
step: 200,
color: unchecked_color(163, 167, 174),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(163, 167, 174),
note: "obsidian 200 semantic token for original PaletteGuard catalog audits",
},
{
id: "obsidian-250",
family: "obsidian",
step: 250,
color: unchecked_color(133, 139, 147),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(133, 139, 147),
note: "obsidian 250 semantic token for original PaletteGuard catalog audits",
},
{
id: "obsidian-300",
family: "obsidian",
step: 300,
color: unchecked_color(103, 110, 120),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(103, 110, 120),
note: "obsidian 300 semantic token for original PaletteGuard catalog audits",
},
{
id: "obsidian-400",
family: "obsidian",
step: 400,
color: unchecked_color(73, 82, 93),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(73, 82, 93),
note: "obsidian 400 semantic token for original PaletteGuard catalog audits",
},
{
id: "obsidian-500",
family: "obsidian",
step: 500,
color: unchecked_color(31, 40, 54),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "obsidian 500 semantic token for original PaletteGuard catalog audits",
},
{
id: "obsidian-600",
family: "obsidian",
step: 600,
color: unchecked_color(28, 37, 49),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "obsidian 600 semantic token for original PaletteGuard catalog audits",
},
{
id: "obsidian-700",
family: "obsidian",
step: 700,
color: unchecked_color(25, 33, 45),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "obsidian 700 semantic token for original PaletteGuard catalog audits",
},
{
id: "obsidian-800",
family: "obsidian",
step: 800,
color: unchecked_color(23, 29, 41),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "obsidian 800 semantic token for original PaletteGuard catalog audits",
},
{
id: "obsidian-900",
family: "obsidian",
step: 900,
color: unchecked_color(20, 25, 36),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "obsidian 900 semantic token for original PaletteGuard catalog audits",
},
{
id: "obsidian-950",
family: "obsidian",
step: 950,
color: unchecked_color(17, 22, 32),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "obsidian 950 semantic token for original PaletteGuard catalog audits",
},
]
}
///|
fn catalog_plum() -> Array[CatalogSwatch] {
[
{
id: "plum-050",
family: "plum",
step: 50,
color: unchecked_color(252, 253, 255),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(252, 253, 255),
note: "plum 50 semantic token for original PaletteGuard catalog audits",
},
{
id: "plum-100",
family: "plum",
step: 100,
color: unchecked_color(239, 226, 238),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(239, 226, 238),
note: "plum 100 semantic token for original PaletteGuard catalog audits",
},
{
id: "plum-150",
family: "plum",
step: 150,
color: unchecked_color(225, 200, 221),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(225, 200, 221),
note: "plum 150 semantic token for original PaletteGuard catalog audits",
},
{
id: "plum-200",
family: "plum",
step: 200,
color: unchecked_color(212, 173, 205),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(212, 173, 205),
note: "plum 200 semantic token for original PaletteGuard catalog audits",
},
{
id: "plum-250",
family: "plum",
step: 250,
color: unchecked_color(198, 146, 188),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(198, 146, 188),
note: "plum 250 semantic token for original PaletteGuard catalog audits",
},
{
id: "plum-300",
family: "plum",
step: 300,
color: unchecked_color(185, 120, 171),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(185, 120, 171),
note: "plum 300 semantic token for original PaletteGuard catalog audits",
},
{
id: "plum-400",
family: "plum",
step: 400,
color: unchecked_color(172, 93, 154),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(172, 93, 154),
note: "plum 400 semantic token for original PaletteGuard catalog audits",
},
{
id: "plum-500",
family: "plum",
step: 500,
color: unchecked_color(134, 52, 117),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "plum 500 semantic token for original PaletteGuard catalog audits",
},
{
id: "plum-600",
family: "plum",
step: 600,
color: unchecked_color(114, 47, 102),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "plum 600 semantic token for original PaletteGuard catalog audits",
},
{
id: "plum-700",
family: "plum",
step: 700,
color: unchecked_color(94, 41, 87),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "plum 700 semantic token for original PaletteGuard catalog audits",
},
{
id: "plum-800",
family: "plum",
step: 800,
color: unchecked_color(74, 35, 72),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "plum 800 semantic token for original PaletteGuard catalog audits",
},
{
id: "plum-900",
family: "plum",
step: 900,
color: unchecked_color(54, 29, 57),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "plum 900 semantic token for original PaletteGuard catalog audits",
},
{
id: "plum-950",
family: "plum",
step: 950,
color: unchecked_color(34, 24, 43),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "plum 950 semantic token for original PaletteGuard catalog audits",
},
]
}
///|
fn catalog_quartz() -> Array[CatalogSwatch] {
[
{
id: "quartz-050",
family: "quartz",
step: 50,
color: unchecked_color(252, 253, 255),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(252, 253, 255),
note: "quartz 50 semantic token for original PaletteGuard catalog audits",
},
{
id: "quartz-100",
family: "quartz",
step: 100,
color: unchecked_color(239, 241, 244),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(239, 241, 244),
note: "quartz 100 semantic token for original PaletteGuard catalog audits",
},
{
id: "quartz-150",
family: "quartz",
step: 150,
color: unchecked_color(225, 229, 234),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(225, 229, 234),
note: "quartz 150 semantic token for original PaletteGuard catalog audits",
},
{
id: "quartz-200",
family: "quartz",
step: 200,
color: unchecked_color(212, 217, 223),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(212, 217, 223),
note: "quartz 200 semantic token for original PaletteGuard catalog audits",
},
{
id: "quartz-250",
family: "quartz",
step: 250,
color: unchecked_color(198, 204, 213),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(198, 204, 213),
note: "quartz 250 semantic token for original PaletteGuard catalog audits",
},
{
id: "quartz-300",
family: "quartz",
step: 300,
color: unchecked_color(185, 192, 202),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(185, 192, 202),
note: "quartz 300 semantic token for original PaletteGuard catalog audits",
},
{
id: "quartz-400",
family: "quartz",
step: 400,
color: unchecked_color(172, 180, 192),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(172, 180, 192),
note: "quartz 400 semantic token for original PaletteGuard catalog audits",
},
{
id: "quartz-500",
family: "quartz",
step: 500,
color: unchecked_color(134, 143, 156),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(255, 255, 255),
note: "quartz 500 semantic token for original PaletteGuard catalog audits",
},
{
id: "quartz-600",
family: "quartz",
step: 600,
color: unchecked_color(114, 122, 135),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(255, 255, 255),
note: "quartz 600 semantic token for original PaletteGuard catalog audits",
},
{
id: "quartz-700",
family: "quartz",
step: 700,
color: unchecked_color(94, 101, 114),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "quartz 700 semantic token for original PaletteGuard catalog audits",
},
{
id: "quartz-800",
family: "quartz",
step: 800,
color: unchecked_color(74, 80, 92),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "quartz 800 semantic token for original PaletteGuard catalog audits",
},
{
id: "quartz-900",
family: "quartz",
step: 900,
color: unchecked_color(54, 59, 70),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "quartz 900 semantic token for original PaletteGuard catalog audits",
},
{
id: "quartz-950",
family: "quartz",
step: 950,
color: unchecked_color(34, 38, 49),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "quartz 950 semantic token for original PaletteGuard catalog audits",
},
]
}
///|
fn catalog_rose() -> Array[CatalogSwatch] {
[
{
id: "rose-050",
family: "rose",
step: 50,
color: unchecked_color(252, 253, 255),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(252, 253, 255),
note: "rose 50 semantic token for original PaletteGuard catalog audits",
},
{
id: "rose-100",
family: "rose",
step: 100,
color: unchecked_color(248, 228, 237),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(248, 228, 237),
note: "rose 100 semantic token for original PaletteGuard catalog audits",
},
{
id: "rose-150",
family: "rose",
step: 150,
color: unchecked_color(243, 204, 218),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(243, 204, 218),
note: "rose 150 semantic token for original PaletteGuard catalog audits",
},
{
id: "rose-200",
family: "rose",
step: 200,
color: unchecked_color(239, 179, 200),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(239, 179, 200),
note: "rose 200 semantic token for original PaletteGuard catalog audits",
},
{
id: "rose-250",
family: "rose",
step: 250,
color: unchecked_color(235, 154, 181),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(235, 154, 181),
note: "rose 250 semantic token for original PaletteGuard catalog audits",
},
{
id: "rose-300",
family: "rose",
step: 300,
color: unchecked_color(230, 129, 163),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(230, 129, 163),
note: "rose 300 semantic token for original PaletteGuard catalog audits",
},
{
id: "rose-400",
family: "rose",
step: 400,
color: unchecked_color(226, 105, 144),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(226, 105, 144),
note: "rose 400 semantic token for original PaletteGuard catalog audits",
},
{
id: "rose-500",
family: "rose",
step: 500,
color: unchecked_color(190, 64, 107),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "rose 500 semantic token for original PaletteGuard catalog audits",
},
{
id: "rose-600",
family: "rose",
step: 600,
color: unchecked_color(161, 57, 94),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "rose 600 semantic token for original PaletteGuard catalog audits",
},
{
id: "rose-700",
family: "rose",
step: 700,
color: unchecked_color(131, 49, 80),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "rose 700 semantic token for original PaletteGuard catalog audits",
},
{
id: "rose-800",
family: "rose",
step: 800,
color: unchecked_color(102, 41, 67),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "rose 800 semantic token for original PaletteGuard catalog audits",
},
{
id: "rose-900",
family: "rose",
step: 900,
color: unchecked_color(72, 33, 54),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "rose 900 semantic token for original PaletteGuard catalog audits",
},
{
id: "rose-950",
family: "rose",
step: 950,
color: unchecked_color(43, 26, 41),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "rose 950 semantic token for original PaletteGuard catalog audits",
},
]
}
///|
fn catalog_spruce() -> Array[CatalogSwatch] {
[
{
id: "spruce-050",
family: "spruce",
step: 50,
color: unchecked_color(252, 253, 255),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(252, 253, 255),
note: "spruce 50 semantic token for original PaletteGuard catalog audits",
},
{
id: "spruce-100",
family: "spruce",
step: 100,
color: unchecked_color(222, 235, 235),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(222, 235, 235),
note: "spruce 100 semantic token for original PaletteGuard catalog audits",
},
{
id: "spruce-150",
family: "spruce",
step: 150,
color: unchecked_color(192, 217, 215),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(192, 217, 215),
note: "spruce 150 semantic token for original PaletteGuard catalog audits",
},
{
id: "spruce-200",
family: "spruce",
step: 200,
color: unchecked_color(162, 199, 195),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(162, 199, 195),
note: "spruce 200 semantic token for original PaletteGuard catalog audits",
},
{
id: "spruce-250",
family: "spruce",
step: 250,
color: unchecked_color(132, 181, 175),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(132, 181, 175),
note: "spruce 250 semantic token for original PaletteGuard catalog audits",
},
{
id: "spruce-300",
family: "spruce",
step: 300,
color: unchecked_color(102, 163, 155),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(102, 163, 155),
note: "spruce 300 semantic token for original PaletteGuard catalog audits",
},
{
id: "spruce-400",
family: "spruce",
step: 400,
color: unchecked_color(72, 146, 134),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(72, 146, 134),
note: "spruce 400 semantic token for original PaletteGuard catalog audits",
},
{
id: "spruce-500",
family: "spruce",
step: 500,
color: unchecked_color(29, 107, 97),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "spruce 500 semantic token for original PaletteGuard catalog audits",
},
{
id: "spruce-600",
family: "spruce",
step: 600,
color: unchecked_color(27, 92, 85),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "spruce 600 semantic token for original PaletteGuard catalog audits",
},
{
id: "spruce-700",
family: "spruce",
step: 700,
color: unchecked_color(24, 77, 74),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "spruce 700 semantic token for original PaletteGuard catalog audits",
},
{
id: "spruce-800",
family: "spruce",
step: 800,
color: unchecked_color(22, 62, 62),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "spruce 800 semantic token for original PaletteGuard catalog audits",
},
{
id: "spruce-900",
family: "spruce",
step: 900,
color: unchecked_color(19, 47, 51),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "spruce 900 semantic token for original PaletteGuard catalog audits",
},
{
id: "spruce-950",
family: "spruce",
step: 950,
color: unchecked_color(17, 33, 39),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "spruce 950 semantic token for original PaletteGuard catalog audits",
},
]
}
///|
fn catalog_tide() -> Array[CatalogSwatch] {
[
{
id: "tide-050",
family: "tide",
step: 50,
color: unchecked_color(252, 253, 255),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(252, 253, 255),
note: "tide 50 semantic token for original PaletteGuard catalog audits",
},
{
id: "tide-100",
family: "tide",
step: 100,
color: unchecked_color(223, 236, 249),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(223, 236, 249),
note: "tide 100 semantic token for original PaletteGuard catalog audits",
},
{
id: "tide-150",
family: "tide",
step: 150,
color: unchecked_color(195, 219, 243),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(195, 219, 243),
note: "tide 150 semantic token for original PaletteGuard catalog audits",
},
{
id: "tide-200",
family: "tide",
step: 200,
color: unchecked_color(166, 202, 237),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(166, 202, 237),
note: "tide 200 semantic token for original PaletteGuard catalog audits",
},
{
id: "tide-250",
family: "tide",
step: 250,
color: unchecked_color(137, 185, 230),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(137, 185, 230),
note: "tide 250 semantic token for original PaletteGuard catalog audits",
},
{
id: "tide-300",
family: "tide",
step: 300,
color: unchecked_color(108, 168, 224),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(108, 168, 224),
note: "tide 300 semantic token for original PaletteGuard catalog audits",
},
{
id: "tide-400",
family: "tide",
step: 400,
color: unchecked_color(80, 150, 218),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(80, 150, 218),
note: "tide 400 semantic token for original PaletteGuard catalog audits",
},
{
id: "tide-500",
family: "tide",
step: 500,
color: unchecked_color(38, 112, 184),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "tide 500 semantic token for original PaletteGuard catalog audits",
},
{
id: "tide-600",
family: "tide",
step: 600,
color: unchecked_color(34, 96, 158),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "tide 600 semantic token for original PaletteGuard catalog audits",
},
{
id: "tide-700",
family: "tide",
step: 700,
color: unchecked_color(30, 81, 132),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "tide 700 semantic token for original PaletteGuard catalog audits",
},
{
id: "tide-800",
family: "tide",
step: 800,
color: unchecked_color(26, 65, 106),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "tide 800 semantic token for original PaletteGuard catalog audits",
},
{
id: "tide-900",
family: "tide",
step: 900,
color: unchecked_color(22, 49, 80),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "tide 900 semantic token for original PaletteGuard catalog audits",
},
{
id: "tide-950",
family: "tide",
step: 950,
color: unchecked_color(18, 33, 53),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "tide 950 semantic token for original PaletteGuard catalog audits",
},
]
}
///|
fn catalog_umber() -> Array[CatalogSwatch] {
[
{
id: "umber-050",
family: "umber",
step: 50,
color: unchecked_color(252, 253, 255),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(252, 253, 255),
note: "umber 50 semantic token for original PaletteGuard catalog audits",
},
{
id: "umber-100",
family: "umber",
step: 100,
color: unchecked_color(237, 231, 228),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(237, 231, 228),
note: "umber 100 semantic token for original PaletteGuard catalog audits",
},
{
id: "umber-150",
family: "umber",
step: 150,
color: unchecked_color(222, 209, 200),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(222, 209, 200),
note: "umber 150 semantic token for original PaletteGuard catalog audits",
},
{
id: "umber-200",
family: "umber",
step: 200,
color: unchecked_color(207, 187, 173),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(207, 187, 173),
note: "umber 200 semantic token for original PaletteGuard catalog audits",
},
{
id: "umber-250",
family: "umber",
step: 250,
color: unchecked_color(192, 165, 145),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(192, 165, 145),
note: "umber 250 semantic token for original PaletteGuard catalog audits",
},
{
id: "umber-300",
family: "umber",
step: 300,
color: unchecked_color(177, 143, 118),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(177, 143, 118),
note: "umber 300 semantic token for original PaletteGuard catalog audits",
},
{
id: "umber-400",
family: "umber",
step: 400,
color: unchecked_color(162, 121, 90),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(162, 121, 90),
note: "umber 400 semantic token for original PaletteGuard catalog audits",
},
{
id: "umber-500",
family: "umber",
step: 500,
color: unchecked_color(124, 81, 50),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "umber 500 semantic token for original PaletteGuard catalog audits",
},
{
id: "umber-600",
family: "umber",
step: 600,
color: unchecked_color(105, 71, 47),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "umber 600 semantic token for original PaletteGuard catalog audits",
},
{
id: "umber-700",
family: "umber",
step: 700,
color: unchecked_color(87, 60, 43),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "umber 700 semantic token for original PaletteGuard catalog audits",
},
{
id: "umber-800",
family: "umber",
step: 800,
color: unchecked_color(69, 50, 39),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "umber 800 semantic token for original PaletteGuard catalog audits",
},
{
id: "umber-900",
family: "umber",
step: 900,
color: unchecked_color(50, 39, 35),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "umber 900 semantic token for original PaletteGuard catalog audits",
},
{
id: "umber-950",
family: "umber",
step: 950,
color: unchecked_color(32, 28, 32),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "umber 950 semantic token for original PaletteGuard catalog audits",
},
]
}
///|
fn catalog_violet() -> Array[CatalogSwatch] {
[
{
id: "violet-050",
family: "violet",
step: 50,
color: unchecked_color(252, 253, 255),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(252, 253, 255),
note: "violet 50 semantic token for original PaletteGuard catalog audits",
},
{
id: "violet-100",
family: "violet",
step: 100,
color: unchecked_color(234, 230, 252),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(234, 230, 252),
note: "violet 100 semantic token for original PaletteGuard catalog audits",
},
{
id: "violet-150",
family: "violet",
step: 150,
color: unchecked_color(215, 206, 248),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(215, 206, 248),
note: "violet 150 semantic token for original PaletteGuard catalog audits",
},
{
id: "violet-200",
family: "violet",
step: 200,
color: unchecked_color(197, 183, 245),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(197, 183, 245),
note: "violet 200 semantic token for original PaletteGuard catalog audits",
},
{
id: "violet-250",
family: "violet",
step: 250,
color: unchecked_color(179, 160, 241),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(179, 160, 241),
note: "violet 250 semantic token for original PaletteGuard catalog audits",
},
{
id: "violet-300",
family: "violet",
step: 300,
color: unchecked_color(160, 136, 238),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(160, 136, 238),
note: "violet 300 semantic token for original PaletteGuard catalog audits",
},
{
id: "violet-400",
family: "violet",
step: 400,
color: unchecked_color(142, 113, 234),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(142, 113, 234),
note: "violet 400 semantic token for original PaletteGuard catalog audits",
},
{
id: "violet-500",
family: "violet",
step: 500,
color: unchecked_color(103, 73, 201),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "violet 500 semantic token for original PaletteGuard catalog audits",
},
{
id: "violet-600",
family: "violet",
step: 600,
color: unchecked_color(88, 64, 172),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "violet 600 semantic token for original PaletteGuard catalog audits",
},
{
id: "violet-700",
family: "violet",
step: 700,
color: unchecked_color(73, 54, 143),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "violet 700 semantic token for original PaletteGuard catalog audits",
},
{
id: "violet-800",
family: "violet",
step: 800,
color: unchecked_color(58, 45, 114),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "violet 800 semantic token for original PaletteGuard catalog audits",
},
{
id: "violet-900",
family: "violet",
step: 900,
color: unchecked_color(43, 36, 85),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "violet 900 semantic token for original PaletteGuard catalog audits",
},
{
id: "violet-950",
family: "violet",
step: 950,
color: unchecked_color(29, 27, 56),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "violet 950 semantic token for original PaletteGuard catalog audits",
},
]
}
///|
fn catalog_willow() -> Array[CatalogSwatch] {
[
{
id: "willow-050",
family: "willow",
step: 50,
color: unchecked_color(252, 253, 255),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(252, 253, 255),
note: "willow 50 semantic token for original PaletteGuard catalog audits",
},
{
id: "willow-100",
family: "willow",
step: 100,
color: unchecked_color(234, 240, 228),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(234, 240, 228),
note: "willow 100 semantic token for original PaletteGuard catalog audits",
},
{
id: "willow-150",
family: "willow",
step: 150,
color: unchecked_color(215, 227, 201),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(215, 227, 201),
note: "willow 150 semantic token for original PaletteGuard catalog audits",
},
{
id: "willow-200",
family: "willow",
step: 200,
color: unchecked_color(197, 214, 174),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(197, 214, 174),
note: "willow 200 semantic token for original PaletteGuard catalog audits",
},
{
id: "willow-250",
family: "willow",
step: 250,
color: unchecked_color(179, 201, 147),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(179, 201, 147),
note: "willow 250 semantic token for original PaletteGuard catalog audits",
},
{
id: "willow-300",
family: "willow",
step: 300,
color: unchecked_color(160, 188, 120),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(160, 188, 120),
note: "willow 300 semantic token for original PaletteGuard catalog audits",
},
{
id: "willow-400",
family: "willow",
step: 400,
color: unchecked_color(142, 175, 93),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(142, 175, 93),
note: "willow 400 semantic token for original PaletteGuard catalog audits",
},
{
id: "willow-500",
family: "willow",
step: 500,
color: unchecked_color(103, 138, 54),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(255, 255, 255),
note: "willow 500 semantic token for original PaletteGuard catalog audits",
},
{
id: "willow-600",
family: "willow",
step: 600,
color: unchecked_color(88, 118, 49),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "willow 600 semantic token for original PaletteGuard catalog audits",
},
{
id: "willow-700",
family: "willow",
step: 700,
color: unchecked_color(73, 98, 45),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "willow 700 semantic token for original PaletteGuard catalog audits",
},
{
id: "willow-800",
family: "willow",
step: 800,
color: unchecked_color(58, 78, 41),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "willow 800 semantic token for original PaletteGuard catalog audits",
},
{
id: "willow-900",
family: "willow",
step: 900,
color: unchecked_color(43, 58, 36),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "willow 900 semantic token for original PaletteGuard catalog audits",
},
{
id: "willow-950",
family: "willow",
step: 950,
color: unchecked_color(29, 38, 32),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "willow 950 semantic token for original PaletteGuard catalog audits",
},
]
}
///|
fn catalog_xenon() -> Array[CatalogSwatch] {
[
{
id: "xenon-050",
family: "xenon",
step: 50,
color: unchecked_color(252, 253, 255),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(252, 253, 255),
note: "xenon 50 semantic token for original PaletteGuard catalog audits",
},
{
id: "xenon-100",
family: "xenon",
step: 100,
color: unchecked_color(226, 235, 253),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(226, 235, 253),
note: "xenon 100 semantic token for original PaletteGuard catalog audits",
},
{
id: "xenon-150",
family: "xenon",
step: 150,
color: unchecked_color(201, 216, 250),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(201, 216, 250),
note: "xenon 150 semantic token for original PaletteGuard catalog audits",
},
{
id: "xenon-200",
family: "xenon",
step: 200,
color: unchecked_color(175, 198, 248),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(175, 198, 248),
note: "xenon 200 semantic token for original PaletteGuard catalog audits",
},
{
id: "xenon-250",
family: "xenon",
step: 250,
color: unchecked_color(149, 179, 246),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(149, 179, 246),
note: "xenon 250 semantic token for original PaletteGuard catalog audits",
},
{
id: "xenon-300",
family: "xenon",
step: 300,
color: unchecked_color(124, 161, 243),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(124, 161, 243),
note: "xenon 300 semantic token for original PaletteGuard catalog audits",
},
{
id: "xenon-400",
family: "xenon",
step: 400,
color: unchecked_color(98, 142, 241),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(98, 142, 241),
note: "xenon 400 semantic token for original PaletteGuard catalog audits",
},
{
id: "xenon-500",
family: "xenon",
step: 500,
color: unchecked_color(57, 104, 208),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "xenon 500 semantic token for original PaletteGuard catalog audits",
},
{
id: "xenon-600",
family: "xenon",
step: 600,
color: unchecked_color(50, 89, 178),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "xenon 600 semantic token for original PaletteGuard catalog audits",
},
{
id: "xenon-700",
family: "xenon",
step: 700,
color: unchecked_color(42, 75, 148),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "xenon 700 semantic token for original PaletteGuard catalog audits",
},
{
id: "xenon-800",
family: "xenon",
step: 800,
color: unchecked_color(35, 61, 118),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "xenon 800 semantic token for original PaletteGuard catalog audits",
},
{
id: "xenon-900",
family: "xenon",
step: 900,
color: unchecked_color(28, 46, 88),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "xenon 900 semantic token for original PaletteGuard catalog audits",
},
{
id: "xenon-950",
family: "xenon",
step: 950,
color: unchecked_color(21, 32, 57),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "xenon 950 semantic token for original PaletteGuard catalog audits",
},
]
}
///|
fn catalog_yarrow() -> Array[CatalogSwatch] {
[
{
id: "yarrow-050",
family: "yarrow",
step: 50,
color: unchecked_color(252, 253, 255),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(252, 253, 255),
note: "yarrow 50 semantic token for original PaletteGuard catalog audits",
},
{
id: "yarrow-100",
family: "yarrow",
step: 100,
color: unchecked_color(246, 241, 225),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(246, 241, 225),
note: "yarrow 100 semantic token for original PaletteGuard catalog audits",
},
{
id: "yarrow-150",
family: "yarrow",
step: 150,
color: unchecked_color(241, 230, 195),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(241, 230, 195),
note: "yarrow 150 semantic token for original PaletteGuard catalog audits",
},
{
id: "yarrow-200",
family: "yarrow",
step: 200,
color: unchecked_color(235, 218, 165),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(235, 218, 165),
note: "yarrow 200 semantic token for original PaletteGuard catalog audits",
},
{
id: "yarrow-250",
family: "yarrow",
step: 250,
color: unchecked_color(229, 207, 135),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(229, 207, 135),
note: "yarrow 250 semantic token for original PaletteGuard catalog audits",
},
{
id: "yarrow-300",
family: "yarrow",
step: 300,
color: unchecked_color(223, 195, 105),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(223, 195, 105),
note: "yarrow 300 semantic token for original PaletteGuard catalog audits",
},
{
id: "yarrow-400",
family: "yarrow",
step: 400,
color: unchecked_color(218, 183, 75),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(218, 183, 75),
note: "yarrow 400 semantic token for original PaletteGuard catalog audits",
},
{
id: "yarrow-500",
family: "yarrow",
step: 500,
color: unchecked_color(182, 147, 35),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(255, 255, 255),
note: "yarrow 500 semantic token for original PaletteGuard catalog audits",
},
{
id: "yarrow-600",
family: "yarrow",
step: 600,
color: unchecked_color(154, 125, 34),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(255, 255, 255),
note: "yarrow 600 semantic token for original PaletteGuard catalog audits",
},
{
id: "yarrow-700",
family: "yarrow",
step: 700,
color: unchecked_color(126, 104, 33),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "yarrow 700 semantic token for original PaletteGuard catalog audits",
},
{
id: "yarrow-800",
family: "yarrow",
step: 800,
color: unchecked_color(98, 82, 31),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "yarrow 800 semantic token for original PaletteGuard catalog audits",
},
{
id: "yarrow-900",
family: "yarrow",
step: 900,
color: unchecked_color(70, 60, 30),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "yarrow 900 semantic token for original PaletteGuard catalog audits",
},
{
id: "yarrow-950",
family: "yarrow",
step: 950,
color: unchecked_color(41, 39, 29),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "yarrow 950 semantic token for original PaletteGuard catalog audits",
},
]
}
///|
fn catalog_zenith() -> Array[CatalogSwatch] {
[
{
id: "zenith-050",
family: "zenith",
step: 50,
color: unchecked_color(252, 253, 255),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(252, 253, 255),
note: "zenith 50 semantic token for original PaletteGuard catalog audits",
},
{
id: "zenith-100",
family: "zenith",
step: 100,
color: unchecked_color(227, 232, 243),
role: RoleBackground,
tone: ToneCanvas,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(227, 232, 243),
note: "zenith 100 semantic token for original PaletteGuard catalog audits",
},
{
id: "zenith-150",
family: "zenith",
step: 150,
color: unchecked_color(203, 210, 231),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(203, 210, 231),
note: "zenith 150 semantic token for original PaletteGuard catalog audits",
},
{
id: "zenith-200",
family: "zenith",
step: 200,
color: unchecked_color(178, 189, 219),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(178, 189, 219),
note: "zenith 200 semantic token for original PaletteGuard catalog audits",
},
{
id: "zenith-250",
family: "zenith",
step: 250,
color: unchecked_color(154, 167, 207),
role: RoleSurface,
tone: ToneSurface,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(154, 167, 207),
note: "zenith 250 semantic token for original PaletteGuard catalog audits",
},
{
id: "zenith-300",
family: "zenith",
step: 300,
color: unchecked_color(129, 146, 196),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(129, 146, 196),
note: "zenith 300 semantic token for original PaletteGuard catalog audits",
},
{
id: "zenith-400",
family: "zenith",
step: 400,
color: unchecked_color(104, 124, 184),
role: RoleBorder,
tone: ToneDivider,
recommended_foreground: unchecked_color(0, 0, 0),
target_background: unchecked_color(104, 124, 184),
note: "zenith 400 semantic token for original PaletteGuard catalog audits",
},
{
id: "zenith-500",
family: "zenith",
step: 500,
color: unchecked_color(64, 85, 148),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "zenith 500 semantic token for original PaletteGuard catalog audits",
},
{
id: "zenith-600",
family: "zenith",
step: 600,
color: unchecked_color(55, 74, 128),
role: RoleAccent,
tone: ToneAccent,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "zenith 600 semantic token for original PaletteGuard catalog audits",
},
{
id: "zenith-700",
family: "zenith",
step: 700,
color: unchecked_color(47, 62, 108),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "zenith 700 semantic token for original PaletteGuard catalog audits",
},
{
id: "zenith-800",
family: "zenith",
step: 800,
color: unchecked_color(39, 51, 88),
role: RoleText,
tone: ToneBodyText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "zenith 800 semantic token for original PaletteGuard catalog audits",
},
{
id: "zenith-900",
family: "zenith",
step: 900,
color: unchecked_color(30, 40, 68),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "zenith 900 semantic token for original PaletteGuard catalog audits",
},
{
id: "zenith-950",
family: "zenith",
step: 950,
color: unchecked_color(22, 29, 48),
role: RoleText,
tone: ToneStrongText,
recommended_foreground: unchecked_color(255, 255, 255),
target_background: unchecked_color(255, 255, 255),
note: "zenith 950 semantic token for original PaletteGuard catalog audits",
},
]
}