use crate::ESC;
pub type Palette = [(u8, u8, u8); 37];
pub const FIRE_PALETTE: Palette = [
(0x08, 0x00, 0x00), (0x28, 0x02, 0x00), (0x3E, 0x08, 0x00), (0x56, 0x0A, 0x00),
(0x6E, 0x0C, 0x00), (0x88, 0x10, 0x00), (0x9C, 0x14, 0x00), (0xB2, 0x1A, 0x00),
(0xC4, 0x20, 0x00), (0xD4, 0x2C, 0x00), (0xE0, 0x38, 0x00), (0xE8, 0x44, 0x00),
(0xF0, 0x50, 0x00), (0xF4, 0x5A, 0x00), (0xF6, 0x62, 0x00), (0xF6, 0x6A, 0x02),
(0xF4, 0x72, 0x04), (0xF2, 0x7C, 0x06), (0xEE, 0x86, 0x08), (0xEA, 0x90, 0x0A),
(0xE6, 0x9A, 0x0C), (0xE2, 0xA4, 0x0E), (0xDC, 0xAE, 0x10), (0xD8, 0xB8, 0x14),
(0xD4, 0xC0, 0x18), (0xD0, 0xC8, 0x1C), (0xCC, 0xD0, 0x20), (0xD4, 0xD6, 0x38),
(0xDC, 0xDC, 0x54), (0xE4, 0xE4, 0x74), (0xEA, 0xEA, 0x94), (0xF0, 0xF0, 0xB0),
(0xF4, 0xF4, 0xC8), (0xF8, 0xF6, 0xDC), (0xFA, 0xFA, 0xEC), (0xFC, 0xFC, 0xF6),
(0xFF, 0xFF, 0xFF),
];
pub const NAMED_PALETTES: &[(&str, &str, &str, &str, &str)] = &[
("fire", "Fire", "classic ember red → orange → white", "#800000", "#ffffff" ),
("ice", "Ice", "electric blue → brilliant white-cyan", "#0040ff", "#c8ffff" ),
("toxic", "Toxic", "radioactive green → acid lime", "#00a020", "#ccff33" ),
("purple", "Purple", "deep violet → hot lavender", "#6a00c8", "#e060ff" ),
("plasma", "Plasma", "electric violet → magenta white-hot", "#7000ff", "#ff60ff" ),
("sunset", "Sunset", "royal blue → blazing gold", "#1a20c0", "#ffb000" ),
("ocean", "Ocean", "deep sapphire → bright aqua", "#0030a0", "#00f0ff" ),
("lava", "Lava", "molten red → neon orange", "#e00010", "#ff5500" ),
("mono", "Mono", "charcoal grey → pure white", "#404040", "#ffffff" ),
("gold", "Gold", "deep amber → bright gold", "#c07000", "#ffe000" ),
("crimson", "Crimson", "blood red → hot pink", "#c00020", "#ff2d80" ),
("emerald", "Emerald", "rich green → bright emerald", "#009040", "#40ffb0" ),
("mint", "Mint", "vivid teal → pale mint", "#00a880", "#b0ffe8" ),
("rose", "Rose", "deep rose red → blush white-pink", "#c02050", "#ffd6e8" ),
("coral", "Coral", "vivid crimson → peach coral", "#e02818", "#ffb090" ),
("cobalt", "Cobalt", "electric cobalt → sky white", "#0040d0", "#d0f0ff" ),
("indigo", "Indigo", "deep indigo → periwinkle", "#3000c0", "#a8a0ff" ),
("cyanpunk", "Cyanpunk", "deep cyan → neon white-cyan", "#00a0a0", "#40ffff" ),
("copper", "Copper", "burnt copper → rose gold", "#c04a10", "#ffb070" ),
("steel", "Steel", "slate blue → bright silver", "#405070", "#e0e8f0" ),
("arctic", "Arctic", "glacier blue → pure white", "#1080d0", "#f0f8ff" ),
("volcano", "Volcano", "magma red-orange → cinder white", "#d02800", "#fff0e0" ),
("candy", "Candy", "hot magenta → cotton candy pink", "#e000a0", "#ffc0f0" ),
("midnight", "Midnight", "electric blue → starlight white", "#0020c0", "#e8e8ff" ),
("jade", "Jade", "vivid jade green → pale seafoam", "#00a070", "#c0ffe8" ),
("blood", "Blood", "deep blood red → pale ash pink", "#a00010", "#f0d0d0" ),
("dawn", "Dawn", "royal blue → warm cream-gold", "#2020d0", "#ffe0a0" ),
("void", "Void", "deep violet → pale lilac", "#4000a0", "#e0d0ff" ),
("aurora", "Aurora", "teal glow → violet shimmer", "#00b8a0", "#8040ff" ),
("flamingo", "Flamingo", "hot pink → pale butter yellow", "#ff2f92", "#fff2b0" ),
("citrus", "Citrus", "lime zest → orange peel", "#aaff20", "#ff8c1a" ),
("bruise", "Bruise", "deep purple → sickly yellow-green", "#3a0060", "#9acc30" ),
("neon80s", "Neon 80s", "electric magenta → laser cyan", "#ff20c0", "#20e0ff" ),
("desertglow", "Desert Glow", "warm sand → burnt orange", "#e8c080", "#e0501a" ),
("glacierfire", "Glacier Fire", "ice blue → flame orange", "#40c8ff", "#ff6a20" ),
("venom", "Venom", "dark viper green → acid yellow", "#104a20", "#d0ff30" ),
("orchid", "Orchid", "deep magenta → soft blush pink", "#a0006a", "#ffc0e0" ),
("tropical", "Tropical", "turquoise water → coral reef", "#10d0c0", "#ff7a5c" ),
("wildfire", "Wildfire", "crimson blaze → golden ember", "#c8102e", "#ffcc33" ),
("galaxy", "Galaxy", "deep indigo → cosmic pink", "#1a0060", "#ff60c0" ),
("seafoam", "Seafoam", "deep teal → pale mint foam", "#004a4a", "#c0fff0" ),
("bubblegum", "Bubblegum", "grape purple → bubblegum pink", "#7a1aff", "#ff9ad8" ),
("solarflare", "Solar Flare", "burnt orange → white-hot yellow", "#ff5a00", "#fff8c0" ),
("abyss", "Abyss", "midnight navy → deep sea teal", "#000428", "#0a6060" ),
("rust", "Rust", "iron oxide brown → sandy tan", "#7a2c10", "#d8a870" ),
("cherry", "Cherry", "dark cherry red → soft pink blush", "#6a0018", "#ff9ab0" ),
("lagoon", "Lagoon", "ocean blue → jungle green", "#0050a0", "#20c060" ),
("peacock", "Peacock", "deep teal → royal purple", "#005050", "#8020c0" ),
("mango", "Mango", "golden orange → tropical yellow", "#ff8c00", "#fff060" ),
("grape", "Grape", "deep grape purple → light lilac", "#4a0080", "#d0b0ff" ),
("gasflame", "Gas Flame", "cool blue flame → white heat", "#0050ff", "#f0f8ff" ),
("sludge", "Sludge", "murky olive → radioactive yellow", "#3a3a10", "#e0ff20" ),
("rosegold", "Rose Gold", "dusty rose → warm gold", "#b76e79", "#ffd7a0" ),
("spectrum", "Spectrum", "crimson red → deep sky blue", "#ff1a3c", "#1a8cff" ),
("blush", "Blush", "soft coral → pale lavender", "#ff8a80", "#d8c0ff" ),
("citrine", "Citrine", "amber yellow → burnt caramel", "#ffd700", "#a85a20" ),
("permafrost", "Permafrost", "deep glacier blue → pale ice cyan", "#002a5a", "#c0f0ff" ),
("amethyst", "Amethyst", "deep violet gem → soft lilac", "#4a0e8f", "#c8a0ff" ),
("saffron", "Saffron", "saffron yellow → deep crimson", "#ffb300", "#a4001e" ),
("bioluminescence", "Bioluminescence", "deep ocean teal → glowing green", "#002030", "#40ff90" ),
("dragonfruit", "Dragonfruit", "hot pink → lime green", "#ff2d6a", "#a0ff30" ),
("obsidianember", "Obsidian Ember", "near-black red → bright ember orange", "#1a0500", "#ff7a1a" ),
("lilacmist", "Lilac Mist", "soft lilac → deep plum", "#d0b0ff", "#5a1080" ),
("tigerlily", "Tiger Lily", "vivid orange → deep magenta", "#ff7000", "#c0006a" ),
("frostbite", "Frostbite", "icy white-blue → deep navy", "#d0f0ff", "#001040" ),
("molten", "Molten", "dark charcoal → bright molten gold", "#201810", "#ffcc00" ),
("nebula", "Nebula", "deep violet → pink-orange glow", "#2a0060", "#ff8060" ),
("kryptonite", "Kryptonite", "dark green → radioactive lime", "#103010", "#baff20" ),
("sakura", "Sakura", "deep rose → pale pink blossom", "#c04070", "#ffe0f0" ),
("inferno", "Inferno", "dark maroon → bright yellow", "#400000", "#ffe000" ),
("glacierpeak", "Glacier Peak", "deep teal-blue → pure white", "#003050", "#ffffff" ),
("voltage", "Voltage", "electric yellow → deep blue", "#fff020", "#1030c0" ),
("mermaid", "Mermaid", "deep teal → shimmering aqua", "#004040", "#40f0d0" ),
("rubygem", "Ruby Gem", "deep ruby red → bright pink", "#700018", "#ff4070" ),
("sunburst", "Sunburst", "deep orange → pale yellow", "#ff6000", "#fff8b0" ),
("twilight", "Twilight", "deep indigo → orange glow", "#200040", "#ff9040" ),
("absinthe", "Absinthe", "dark green → pale green-yellow", "#103018", "#d0ff90" ),
("plumfire", "Plum Fire", "deep plum → bright orange", "#400030", "#ff6020" ),
("iceberg", "Iceberg", "pale cyan → deep blue", "#b0f0ff", "#002060" ),
("terracotta", "Terracotta", "burnt clay → warm cream", "#a04020", "#ffe0b0" ),
("neonjungle", "Neon Jungle", "deep jungle green → hot pink", "#002810", "#ff2090" ),
("copperpatina", "Copper Patina", "copper brown → teal-green", "#a05020", "#20a080" ),
("blacklight", "Blacklight", "deep purple-black → neon violet", "#100020", "#b040ff" ),
("sangria", "Sangria", "deep wine red → soft pink", "#500018", "#ffb0c0" ),
("sapphire", "Sapphire", "deep sapphire blue → pale sky", "#002080", "#a0e0ff" ),
("mangotango", "Mango Tango", "deep red-orange → bright mango yellow", "#d02000", "#ffcc30" ),
("periwinkle", "Periwinkle", "deep blue-violet → pale periwinkle", "#3020a0", "#c0c0ff" ),
("embertwilight", "Ember Twilight", "deep navy → ember orange", "#000830", "#ff5a1a" ),
("algae", "Algae", "dark murky green → bright chartreuse", "#102010", "#c0ff40" ),
("flamingosunset", "Flamingo Sunset", "deep magenta → golden yellow", "#c00060", "#ffd000" ),
("deepspace", "Deep Space", "true black-blue → starlight blue-white", "#000018", "#c0d0ff" ),
("honeycomb", "Honeycomb", "deep amber-brown → bright honey gold", "#603010", "#ffcc40" ),
("vipergreen", "Viper Green", "dark green-black → bright toxic green", "#081408", "#90ff40" ),
("bloodmoon", "Blood Moon", "deep black-red → pale orange-red", "#180000", "#ff8060" ),
("cottoncandy", "Cotton Candy", "soft sky blue → soft pink", "#a0d0ff", "#ffb0e0" ),
("magmacore", "Magma Core", "dark red-black → bright yellow-orange", "#200000", "#ffaa00" ),
("deepteal", "Deep Teal", "near-black teal → pale seafoam white", "#001818", "#e0fff8" ),
("royale", "Royale", "deep royal purple → gold", "#300060", "#ffd700" ),
("cyberpink", "Cyberpink", "deep black-magenta → neon pink", "#180010", "#ff30a0" ),
("autumnleaf", "Autumn Leaf", "deep brown-red → golden orange", "#601810", "#ff9020" ),
("moonstone", "Moonstone", "pale grey-blue → deep indigo", "#d0d8ff", "#201060" ),
("hazard", "Hazard", "near-black → hazard yellow", "#101008", "#fff000" ),
("crimsontide", "Crimson Tide", "deep crimson → pale foam white", "#600010", "#fff0f0" ),
("scarlet", "Scarlet", "near-black → blazing scarlet", "#1a0000", "#ff2020" ),
("vermilion", "Vermilion", "charcoal red → vermilion orange-red", "#200400", "#ff5030" ),
("garnet", "Garnet", "dark garnet → bright rose-red", "#240008", "#e8305a" ),
("brickred", "Brick Red", "dark brick → warm terracotta red", "#1c0806", "#d85030" ),
("maroonglow", "Maroon Glow", "deep maroon → bright pink-red", "#180008", "#c02050" ),
("rubyflame", "Ruby Flame", "near-black → ruby red", "#1a0004", "#ff1050" ),
("carmine", "Carmine", "dark carmine → vivid rose", "#1e0006", "#ff2050" ),
("redwood", "Redwood", "dark redwood bark → warm red-orange", "#1a0a04", "#d86030" ),
("poppy", "Poppy", "near-black → poppy red", "#200000", "#ff3018" ),
("paprika", "Paprika", "dark spice → bright paprika red", "#240800", "#e85018" ),
("oxblood", "Oxblood", "near-black → deep oxblood red", "#140004", "#a01838" ),
("rosehip", "Rosehip", "dark rosehip → bright pink-red", "#1c0208", "#ff4070" ),
("strawberry", "Strawberry", "near-black → strawberry red", "#200008", "#ff3868" ),
("merlot", "Merlot", "dark wine → bright magenta-red", "#1a0010", "#a02058" ),
("cinnabar", "Cinnabar", "dark mineral → bright cinnabar red", "#220400", "#e84020" ),
("firebrick", "Firebrick", "near-black → firebrick red-orange", "#1e0400", "#c83020" ),
("tangerine", "Tangerine", "near-black → bright tangerine", "#200c00", "#ff8010" ),
("persimmon", "Persimmon", "dark → vivid persimmon orange", "#240a00", "#ff6020" ),
("apricot", "Apricot", "dark → soft apricot orange", "#220e00", "#ffa050" ),
("marigold", "Marigold", "dark → bright marigold orange", "#241000", "#ffb020" ),
("pumpkin", "Pumpkin", "near-black → pumpkin orange", "#1e0a00", "#ff7818" ),
("amberglow", "Amber Glow", "dark → glowing amber orange", "#200c00", "#ffa830" ),
("butterscotch", "Butterscotch", "dark → rich butterscotch", "#221000", "#ffc060" ),
("cantaloupe", "Cantaloupe", "dark → soft cantaloupe orange", "#240e00", "#ffb870" ),
("carrot", "Carrot", "near-black → carrot orange", "#1e0800", "#ff8020" ),
("clementine", "Clementine", "dark → bright clementine orange", "#220a00", "#ff7028" ),
("sienna", "Sienna", "dark earth → warm sienna", "#1c0a04", "#d87838" ),
("ochre", "Ochre", "dark → earthy ochre gold", "#1e1200", "#d0a020" ),
("copperflame", "Copper Flame", "near-black → bright copper-orange", "#1a0800", "#e87030" ),
("burntorange", "Burnt Orange", "dark → burnt orange", "#1c0800", "#d86018" ),
("saffronglow", "Saffron Glow", "dark → glowing saffron orange", "#200e00", "#ffc020" ),
("honeyamber", "Honey Amber", "dark → rich honey amber", "#221000", "#ffb840" ),
("lemon", "Lemon", "dark → bright lemon yellow", "#1e1c00", "#fff830" ),
("canary", "Canary", "near-black → canary yellow", "#201e00", "#ffff40" ),
("banana", "Banana", "dark → soft banana yellow", "#1e1a00", "#ffe860" ),
("mustard", "Mustard", "dark → deep mustard yellow", "#1c1600", "#d8b020" ),
("goldenrod", "Goldenrod", "dark → bright goldenrod", "#1e1600", "#e8b820" ),
("daffodil", "Daffodil", "dark → bright daffodil yellow", "#201e00", "#fff060" ),
("buttercup", "Buttercup", "dark → warm buttercup yellow", "#1e1a00", "#ffe830" ),
("sunflower", "Sunflower", "dark → bold sunflower yellow", "#201c00", "#ffd820" ),
("chartreuseyellow", "Chartreuse Yellow","dark → sharp chartreuse-yellow", "#181e00", "#e0ff30" ),
("strawyellow", "Straw Yellow", "dark → soft straw yellow", "#1c1c00", "#f0e080" ),
("flaxen", "Flaxen", "dark → warm flaxen gold", "#1a1800", "#e8d060" ),
("duckling", "Duckling", "dark → soft duckling yellow", "#1c1e00", "#fff880" ),
("pineapple", "Pineapple", "dark → bright pineapple yellow", "#1e1c00", "#ffe030" ),
("custard", "Custard", "dark → creamy custard yellow", "#1e1a00", "#fff0a0" ),
("brimstone", "Brimstone", "dark → sharp brimstone yellow", "#1c1c00", "#e8ff40" ),
("topaz", "Topaz", "dark → warm topaz gold", "#1e1600", "#ffcc30" ),
("limezest", "Lime Zest", "dark → sharp lime green", "#0c1a00", "#b0ff20" ),
("chartreuseglow", "Chartreuse Glow", "dark → glowing chartreuse", "#0e1c00", "#c0ff10" ),
("springgreen", "Spring Green", "dark → bright spring green", "#001c08", "#40ff80" ),
("forestglow", "Forest Glow", "dark forest → bright green", "#001608", "#30d060" ),
("mossgreen", "Moss Green", "dark moss → soft green", "#081406", "#90c040" ),
("pistachio", "Pistachio", "dark → pale pistachio green", "#0a1608", "#b0e080" ),
("shamrock", "Shamrock", "near-black → shamrock green", "#001208", "#20d060" ),
("malachite", "Malachite", "dark → bright malachite green", "#001008", "#10e070" ),
("fernleaf", "Fernleaf", "dark fern → soft green", "#0a1404", "#a8d040" ),
("julep", "Julep", "dark → minty julep green", "#001408", "#90ffc0" ),
("avocado", "Avocado", "dark → warm avocado green", "#0e1400", "#b0d030" ),
("pear", "Pear", "dark → crisp pear green", "#101800", "#d0ff40" ),
("kiwi", "Kiwi", "dark → bright kiwi green", "#0c1600", "#a0e020" ),
("grasshopper", "Grasshopper", "dark → bright grass green", "#0a1800", "#90ff30" ),
("basil", "Basil", "dark → herby basil green", "#081204", "#70c040" ),
("clover", "Clover", "dark → lucky clover green", "#0a1408", "#60e070" ),
("verdant", "Verdant", "dark → rich verdant green", "#001406", "#40e070" ),
("tealglow", "Teal Glow", "dark → glowing teal", "#001414", "#20e0d0" ),
("turquoiseflame", "Turquoise Flame", "dark → bright turquoise", "#001616", "#10f0e0" ),
("aquamarine", "Aquamarine", "dark → bright aquamarine", "#001414", "#40ffd0" ),
("lagoonglow", "Lagoon Glow", "dark → glowing lagoon teal", "#001210", "#20d0b0" ),
("peacockteal", "Peacock Teal", "dark → rich peacock teal", "#000e10", "#10b0c0" ),
("tidepool", "Tidepool", "dark → bright tidepool cyan", "#001416", "#30e0f0" ),
("mintwave", "Mint Wave", "dark → soft mint-cyan", "#001210", "#60ffd8" ),
("seaglass", "Seaglass", "dark → pale seaglass teal", "#001210", "#80f0d0" ),
("oceanspray", "Ocean Spray", "dark → bright ocean cyan", "#000e14", "#40d0f0" ),
("cyanburst", "Cyan Burst", "dark → electric cyan", "#001818", "#20fff0" ),
("tealfire", "Teal Fire", "dark → vivid teal", "#001010", "#10e0c8" ),
("lapisteal", "Lapis Teal", "dark → deep lapis-teal", "#000c12", "#1090d0" ),
("capriblue", "Capri Blue", "dark → bright capri blue-cyan", "#000e14", "#30c0f0" ),
("mermaidglow", "Mermaid Glow", "dark → shimmering teal", "#000e10", "#20e8c8" ),
("kelpgreen", "Kelp Green", "dark → murky-bright kelp green", "#0a1210", "#40d0a0" ),
("tropicalteal", "Tropical Teal", "dark → bright tropical teal", "#000f12", "#30f0d0" ),
("riverstone", "Riverstone", "dark → cool river blue-teal", "#000c0e", "#50d0e0" ),
("azureflame", "Azure Flame", "near-black → bright azure", "#00081e", "#2080ff" ),
("skyburst", "Sky Burst", "dark → bright sky blue", "#000a20", "#40a0ff" ),
("cerulean", "Cerulean", "dark → vivid cerulean blue", "#000818", "#2090e0" ),
("electricblue", "Electric Blue", "near-black → electric blue", "#000420", "#2040ff" ),
("denimglow", "Denim Glow", "dark denim → soft blue", "#00081a", "#4070c0" ),
("sapphireblaze", "Sapphire Blaze", "dark → blazing sapphire", "#000420", "#2050e0" ),
("navyember", "Navy Ember", "deep navy → bright blue", "#00041c", "#1858d0" ),
("bluebell", "Bluebell", "dark → soft bluebell blue", "#000818", "#6090ff" ),
("oceanic", "Oceanic", "dark → rich ocean blue", "#00061a", "#2070d0" ),
("horizonblue", "Horizon Blue", "dark → bright horizon blue", "#000a1c", "#50a0ff" ),
("stormblue", "Storm Blue", "dark stormy → bright blue", "#00061c", "#3060c0" ),
("cobaltflame", "Cobalt Flame", "near-black → cobalt blue", "#000420", "#2050f0" ),
("midnightblue", "Midnight Blue", "near-black → bright midnight blue", "#000420", "#4060e0" ),
("frostblue", "Frost Blue", "dark → pale frost blue", "#000818", "#80c0ff" ),
("glacierblue", "Glacier Blue", "dark → bright glacier blue", "#000a1e", "#60c8ff" ),
("duskblue", "Dusk Blue", "dark dusk → muted bright blue", "#00061a", "#3050a0" ),
("zaffre", "Zaffre", "near-black → deep zaffre blue", "#000420", "#1040d0" ),
("indigoflame", "Indigo Flame", "near-black → bright indigo", "#08001c", "#6020ff" ),
("violetblaze", "Violet Blaze", "dark → blazing violet", "#0a0020", "#8020ff" ),
("ultraviolet", "Ultraviolet", "near-black → ultraviolet", "#06001c", "#7000ff" ),
("irisglow", "Iris Glow", "dark → glowing iris purple", "#08001a", "#9040ff" ),
("amethystfire", "Amethyst Fire", "dark → bright amethyst", "#0a0018", "#a020ff" ),
("lavenderfire", "Lavender Fire", "dark → bright lavender-violet", "#08001c", "#b060ff" ),
("periwinklepop", "Periwinkle Pop", "dark → bright periwinkle", "#06001c", "#8080ff" ),
("mauveflame", "Mauve Flame", "dark → dusty bright mauve", "#0a0018", "#a050c0" ),
("wisteria", "Wisteria", "dark → soft wisteria purple", "#08001a", "#b080ff" ),
("grapefire", "Grape Fire", "dark → bright grape purple", "#0a0016", "#9020c0" ),
("plumblaze", "Plum Blaze", "dark plum → bright magenta-plum", "#08000e", "#a03080" ),
("eggplant", "Eggplant", "near-black → rich eggplant purple", "#06000c", "#800060" ),
("violetstorm", "Violet Storm", "dark → stormy bright violet", "#08001a", "#7040ff" ),
("inkviolet", "Ink Violet", "near-black → deep ink violet", "#06000e", "#6020a0" ),
("purplehaze", "Purple Haze", "dark → hazy bright purple", "#08001c", "#9060ff" ),
("royalviolet", "Royal Violet", "dark → rich royal violet", "#0a0018", "#7020e0" ),
("darkmagic", "Dark Magic", "near-black → deep magic purple", "#06000e", "#6010a0" ),
("magentablaze", "Magenta Blaze", "dark → blazing magenta", "#1a0016", "#ff20c0" ),
("fuchsiaflame", "Fuchsia Flame", "dark → bright fuchsia", "#180014", "#ff30d0" ),
("hotpinkglow", "Hot Pink Glow", "dark → glowing hot pink", "#1c000e", "#ff2090" ),
("rouge", "Rouge", "dark → bright rouge pink-red", "#1a000c", "#ff3070" ),
("carminepink", "Carmine Pink", "dark → vivid carmine pink", "#1a0008", "#ff4080" ),
("punchpink", "Punch Pink", "dark → punchy bright pink", "#1c000e", "#ff1888" ),
("watermelon", "Watermelon", "dark → juicy watermelon pink-red", "#1a0008", "#ff5060" ),
("peonypink", "Peony Pink", "dark → soft peony pink", "#180010", "#ff60a0" ),
("azaleaglow", "Azalea Glow", "dark → glowing azalea pink", "#180012", "#ff70b0" ),
("raspberryflame", "Raspberry Flame", "dark → bright raspberry", "#1a0006", "#ff2868" ),
("lipstick", "Lipstick", "near-black → bold lipstick red-pink", "#1c0008", "#ff1858" ),
("berryburst", "Berry Burst", "dark berry → bright pink-red", "#180008", "#e83070" ),
("guavaglow", "Guava Glow", "dark → glowing guava pink", "#1a0006", "#ff4858" ),
("petuniapink", "Petunia Pink", "dark → rich petunia pink", "#16000e", "#e050b0" ),
("hibiscus", "Hibiscus", "dark → vivid hibiscus red-pink", "#180008", "#ff2050" ),
("camellia", "Camellia", "dark → bright camellia pink", "#16000a", "#ff4878" ),
("sweetheartpink", "Sweetheart Pink", "dark → soft sweetheart pink", "#180010", "#ff80b0" ),
("mahogany", "Mahogany", "dark wood → warm mahogany red-brown", "#180a04", "#a04818" ),
("walnut", "Walnut", "dark → warm walnut brown", "#140c06", "#886040" ),
("chestnut", "Chestnut", "dark → rich chestnut brown-red", "#180804", "#a85028" ),
("umber", "Umber", "dark → warm umber brown", "#140a04", "#886030" ),
("cocoa", "Cocoa", "dark → rich cocoa brown", "#160a06", "#906038" ),
("espresso", "Espresso", "near-black → dark espresso brown", "#120806", "#6a4028" ),
("tobacco", "Tobacco", "dark → warm tobacco brown", "#160c04", "#a07830" ),
("saddlebrown", "Saddle Brown", "dark → rich saddle brown", "#140804", "#a05820" ),
("cedarwood", "Cedarwood", "dark → warm cedar brown", "#160a04", "#986040" ),
("clay", "Clay", "dark → warm terracotta clay", "#1a0c06", "#c07850" ),
("driftwood", "Driftwood", "dark → pale driftwood tan", "#14100a", "#b09070" ),
("sandstone", "Sandstone", "dark → warm sandstone tan", "#16120a", "#d8b888" ),
("taupe", "Taupe", "dark → soft taupe grey-brown", "#14100c", "#b09880" ),
("khaki", "Khaki", "dark → warm khaki tan", "#161206", "#c8b060" ),
("oatmeal", "Oatmeal", "dark → pale oatmeal tan", "#16140e", "#d8c8a0" ),
("almond", "Almond", "dark → soft almond tan", "#181008", "#d8b088" ),
("graphite", "Graphite", "near-black → neutral graphite grey", "#101010", "#909090" ),
("silverstreak", "Silver Streak", "near-black → bright silver", "#101012", "#e0e0e8" ),
("platinum", "Platinum", "dark → cool platinum white", "#0e0e10", "#d8d8e0" ),
("pewter", "Pewter", "dark → muted pewter grey", "#101012", "#b8b8c0" ),
("gunmetal", "Gunmetal", "near-black → cool gunmetal grey", "#0c0c10", "#a0a8b0" ),
("slateglow", "Slate Glow", "dark → soft slate blue-grey", "#0e1012", "#c0c8d0" ),
("mercury", "Mercury", "dark → shiny mercury silver", "#0e0e10", "#d0d0d8" ),
("chrome", "Chrome", "near-black → bright chrome white", "#101010", "#e8e8f0" ),
("ash", "Ash", "dark → neutral ash grey", "#101010", "#c8c8c8" ),
("smoke", "Smoke", "near-black → soft smoke grey", "#0e0e0e", "#b8b8b8" ),
("fog", "Fog", "dark → pale foggy grey-blue", "#101012", "#d0d4d8" ),
("peridot", "Peridot", "dark → bright peridot green", "#0e1400", "#c0e030" ),
("tourmaline", "Tourmaline", "dark → bright tourmaline teal-green", "#001210", "#30e0a0" ),
("tanzanite", "Tanzanite", "dark → deep tanzanite blue-violet", "#08001c", "#5040ff" ),
("morganite", "Morganite", "dark → soft morganite pink", "#1a0810", "#ff90b0" ),
("aquagem", "Aquagem", "dark → bright aqua gem blue", "#000e14", "#30d0f0" ),
("citrinegem", "Citrine Gem", "dark → bright citrine yellow", "#1a1400", "#ffcc20" ),
("spinelred", "Spinel Red", "dark → vivid spinel red", "#1a0004", "#ff2040" ),
("zirconblue", "Zircon Blue", "dark → bright zircon blue", "#000818", "#40a0ff" ),
("opalwhite", "Opal White", "dark → soft opalescent white", "#101014", "#f0f0ff" ),
("onyxglow", "Onyx Glow", "near-black → neutral onyx grey", "#0a0a0a", "#808080" ),
("starlightblue", "Starlight Blue", "near-black → pale starlight blue", "#000420", "#a0c0ff" ),
("cosmicpurple", "Cosmic Purple", "dark → bright cosmic purple", "#0a0018", "#c080ff" ),
("supernova", "Supernova", "dark → blinding supernova yellow", "#1a0400", "#ffe040" ),
("blackhole", "Black Hole", "true black → deep violet edge glow", "#020204", "#402060" ),
("pulsarpink", "Pulsar Pink", "dark → bright pulsar pink", "#180010", "#ff60d0" ),
("novawhite", "Nova White", "near-black → pure white flash", "#101014", "#ffffff" ),
("comettail", "Comet Tail", "dark → icy comet-tail blue", "#000818", "#a0e0ff" ),
("asteroidgray", "Asteroid Gray", "dark → dusty asteroid grey", "#0c0c0e", "#a0a0a8" ),
("meteorstreak", "Meteor Streak", "dark → bright meteor orange", "#1a0800", "#ffb060" ),
("stardust", "Stardust", "dark → shimmering pale blue-violet", "#0a0a10", "#d0d0ff" ),
("cottoncherry", "Cotton Cherry", "dark → bright cherry pink", "#1a0006", "#ff6080" ),
("blueberrypie", "Blueberry Pie", "dark → bright blueberry blue-violet", "#04001a", "#6060ff" ),
("limesorbet", "Lime Sorbet", "dark → bright lime sorbet green", "#0a1400", "#c0ff60" ),
("peachcobbler", "Peach Cobbler", "dark → soft peach orange", "#1a0e00", "#ffb080" ),
("grapesoda", "Grape Soda", "dark → bright grape purple", "#0e0018", "#a060ff" ),
("tangerinedream", "Tangerine Dream", "dark → bold tangerine orange", "#1e0c00", "#ff9020" ),
("mintchip", "Mint Chip", "dark → soft minty green", "#001410", "#80ffd0" ),
("rootbeer", "Root Beer", "dark → warm root beer brown", "#140a04", "#906040" ),
("bubblegumpop", "Bubblegum Pop", "dark → bright bubblegum pink", "#1a0012", "#ff80d0" ),
("cherrycola", "Cherry Cola", "dark → deep cherry-cola red", "#180004", "#c02040" ),
("emberash", "Ember Ash", "dark ash → glowing ember orange", "#1a0800", "#ff8040" ),
("frostfire", "Frost Fire", "dark → icy bright blue", "#000a1a", "#80e0ff" ),
("duskember", "Dusk Ember", "dark dusk → warm ember pink", "#1a0410", "#ff6088" ),
("mosslight", "Moss Light", "dark moss → bright yellow-green", "#0a1204", "#a0d040" ),
("tidalteal", "Tidal Teal", "dark → bright tidal teal", "#000e10", "#40e0d0" ),
("cinderglow", "Cinder Glow", "dark cinder → bright orange-red", "#1a0400", "#ff5020" ),
("duneglow", "Dune Glow", "dark → warm sandy dune glow", "#1a1206", "#ffcc80" ),
("glowworm", "Glowworm", "dark → glowing yellow-green", "#0a1400", "#d0ff40" ),
];
pub const CATEGORIES: &[(&str, usize, usize)] = &[
("Originals", 0, 103),
("Reds", 103, 119),
("Oranges", 119, 135),
("Yellows", 135, 151),
("Greens", 151, 168),
("Teals & Cyan", 168, 185),
("Blues", 185, 202),
("Violets", 202, 219),
("Magentas", 219, 236),
("Earth Tones", 236, 253),
("Grays", 253, 263),
("Jewels", 263, 273),
("Cosmic", 273, 283),
("Food & Fun", 283, 293),
("Misc", 293, 301),
];
pub fn hex_to_rgb(hex: &str) -> Option<(u8, u8, u8)> {
let h = hex.trim().trim_start_matches('#');
if h.len() != 6 { return None; }
let r = u8::from_str_radix(&h[0..2], 16).ok()?;
let g = u8::from_str_radix(&h[2..4], 16).ok()?;
let b = u8::from_str_radix(&h[4..6], 16).ok()?;
Some((r, g, b))
}
pub fn rgb_to_hsv(r: u8, g: u8, b: u8) -> (f32, f32, f32) {
let rf = r as f32 / 255.0;
let gf = g as f32 / 255.0;
let bf = b as f32 / 255.0;
let max = rf.max(gf).max(bf);
let min = rf.min(gf).min(bf);
let delta = max - min;
let h = if delta == 0.0 {
0.0
} else if max == rf {
60.0 * (((gf - bf) / delta).rem_euclid(6.0))
} else if max == gf {
60.0 * (((bf - rf) / delta) + 2.0)
} else {
60.0 * (((rf - gf) / delta) + 4.0)
};
let s = if max == 0.0 { 0.0 } else { delta / max };
(h, s, max)
}
pub fn hsv_to_rgb(h: f32, s: f32, v: f32) -> (u8, u8, u8) {
let c = v * s;
let hh = (h / 60.0).rem_euclid(6.0);
let x = c * (1.0 - (hh.rem_euclid(2.0) - 1.0).abs());
let (r1, g1, b1) = match hh as i32 {
0 => (c, x, 0.0),
1 => (x, c, 0.0),
2 => (0.0, c, x),
3 => (0.0, x, c),
4 => (x, 0.0, c),
_ => (c, 0.0, x),
};
let m = v - c;
(
((r1 + m) * 255.0).round().clamp(0.0, 255.0) as u8,
((g1 + m) * 255.0).round().clamp(0.0, 255.0) as u8,
((b1 + m) * 255.0).round().clamp(0.0, 255.0) as u8,
)
}
fn lerp_hue(a: f32, b: f32, t: f32) -> f32 {
let mut d = b - a;
if d > 180.0 { d -= 360.0; } else if d < -180.0 { d += 360.0; }
(a + d * t).rem_euclid(360.0)
}
pub fn generate_palette(from: (u8, u8, u8), to: (u8, u8, u8)) -> Palette {
let (mut h0, mut s0, v0) = rgb_to_hsv(from.0, from.1, from.2);
let (h1, s1, v1) = rgb_to_hsv(to.0, to.1, to.2);
if v0 < 0.15 { h0 = h1; s0 = s1 * 0.7; }
let v0 = v0.max(0.08);
let mut out: Palette = [(0, 0, 0); 37];
for (i, slot) in out.iter_mut().enumerate() {
let t = i as f32 / 36.0;
let h = lerp_hue(h0, h1, t);
let s = (s0 + t * (s1 - s0)).clamp(0.0, 1.0);
let v = (v0 + t * (v1 - v0)).clamp(0.0, 1.0);
*slot = hsv_to_rgb(h, s, v);
}
out
}
pub const SOFTEN_DESATURATE: f32 = 0.62;
pub const SOFTEN_BRIGHTEN: f32 = 0.32;
pub fn soften(palette: &Palette, desaturate_factor: f32, brighten_factor: f32) -> Palette {
let mut out = *palette;
for slot in out.iter_mut() {
let (h, s, v) = rgb_to_hsv(slot.0, slot.1, slot.2);
let new_s = (s * desaturate_factor).clamp(0.0, 1.0);
let new_v = (v + (1.0 - v) * brighten_factor).clamp(0.0, 1.0);
*slot = hsv_to_rgb(h, new_s, new_v);
}
out
}
pub fn swatch(from: (u8, u8, u8), to: (u8, u8, u8), width: usize) -> String {
let mut s = String::new();
if width == 0 { return s; }
for i in 0..width {
let t = if width == 1 { 0.0 } else { i as f32 / (width - 1) as f32 };
let r = (from.0 as f32 + t * (to.0 as f32 - from.0 as f32)).round() as u8;
let g = (from.1 as f32 + t * (to.1 as f32 - from.1 as f32)).round() as u8;
let b = (from.2 as f32 + t * (to.2 as f32 - from.2 as f32)).round() as u8;
s.push_str(&format!("{ESC}[48;2;{r};{g};{b}m "));
}
s.push_str(&format!("{ESC}[0m"));
s
}
pub fn palette_swatch(palette: &Palette, width: usize) -> String {
let mut s = String::new();
if width == 0 { return s; }
let step = if width == 1 { 0.0 } else { 36.0 / (width - 1) as f32 };
for i in 0..width {
let idx = if width == 1 { 18 } else {
(i as f32 * step).round().clamp(1.0, 36.0) as usize
};
let (r, g, b) = palette[idx];
s.push_str(&format!("{ESC}[48;2;{r};{g};{b}m "));
}
s.push_str(&format!("{ESC}[0m"));
s
}
pub fn render_swatch(id: &str, from_hex: &str, to_hex: &str, width: usize) -> String {
if id == "fire" {
palette_swatch(&soften(&FIRE_PALETTE, SOFTEN_DESATURATE, SOFTEN_BRIGHTEN), width)
} else {
let from = hex_to_rgb(from_hex).unwrap_or((0, 0, 0));
let to = hex_to_rgb(to_hex).unwrap_or((255, 255, 255));
palette_swatch(
&soften(&generate_palette(from, to), SOFTEN_DESATURATE, SOFTEN_BRIGHTEN),
width,
)
}
}