j-cli 12.9.11

A fast CLI tool for alias management, daily reports, and productivity
//! 欢迎框渐变色调色板数据
//!
//! 每组 16 个三元组 (start, mid, end),共 8 组调色板,
//! 按 Theme.welcome_palette 索引。三色分段插值:前半段 start→mid,后半段 mid→end。

/// RGB 三元组
pub type RgbTriple = (u8, u8, u8);

/// 渐变三元组:(起始色, 中间色, 结束色)
pub type GradientTriple = (RgbTriple, RgbTriple, RgbTriple);

// ── 8 组调色板常量 ──────────────────────────────────────

#[rustfmt::skip]
pub const PALETTE_MIDNIGHT: &[GradientTriple] = &[
    // Palette 0 — Midnight:古金胭脂,古典暖调,饱和度中等偏高
    ((212,175, 55),(220, 80, 90),(255,230,140)), // 古金 → 胭脂 → 淡金
    ((240,120,130),(100,160,220),(255,190,170)), // 胭脂 → 霁蓝 → 桃粉
    ((100,180,220),(150,210,120),(160,230,210)), // 霁蓝 → 嫩芽 → 碧玉
    ((180, 90,210),(220,160, 60),(220,150,230)), // 紫藤 → 琥珀 → 薰衣草
    (( 80,180,140),(210, 90,110),(160,230,180)), // 青瓷 → 暮红 → 嫩绿
    ((220,130, 70),( 80,180,210),(255,200,120)), // 赭橙 → 湖蓝 → 杏黄
    ((100,160,230),(200,120,200),(180,200,255)), // 远山蓝 → 紫霞 → 月色
    ((200,100,120),( 80,200,170),(240,160,140)), // 暮红 → 碧水 → 霞光
    (( 90,200,180),(210,160, 60),(150,230,220)), // 湖水 → 金橙 → 冰蓝
    ((160,130,210),(120,200,140),(210,180,240)), // 暮霭 → 春草 → 淡紫
    ((230,180, 80),( 80,150,220),(180,210,240)), // 琥珀 → 远蓝 → 月白
    ((120,200,120),(210, 90,130),(180,230,160)), // 春芽 → 胭脂 → 嫩黄绿
    ((255,200,100),(100,190,230),(240,160,200)), // 杏黄 → 天青 → 藕荷
    ((140,100,220),(200,180, 60),(180,130,240)), // 鸢尾 → 秋黄 → 幽紫
    ((200,220,120),( 80,130,210),(140,230,200)), // 黄绿 → 深蓝 → 薄荷
    ((255,150,100),(120, 80,200),(255,200,150)), // 橙红 → 靛蓝 → 浅橙
];

#[rustfmt::skip]
pub const PALETTE_DARK: &[GradientTriple] = &[
    // Palette 1 — Dark:琥珀翡翠,低饱和度柔和暖调
    ((200,180,100),(180,120,100),(190,210,130)), // 淡金 → 赭土 → 嫩绿
    ((180,140,100),(120,170,160),(200,170,130)), // 驼色 → 青灰 → 杏色
    ((140,180,170),(190,160,100),(170,200,180)), // 灰青 → 琥珀 → 薄荷灰
    ((170,140,180),(180,190,110),(185,160,195)), // 灰紫 → 橄榄 → 淡藤
    ((150,190,130),(190,130,120),(175,200,150)), // 苔绿 → 砖红 → 青白
    ((190,150,100),(130,170,180),(210,180,120)), // 沙金 → 灰蓝 → 暮光
    ((130,160,190),(180,150,170),(155,175,205)), // 雾蓝 → 灰粉 → 天青
    ((185,140,130),(140,185,160),(200,165,140)), // 暮色 → 灰碧 → 暮霞
    ((140,185,160),(185,165,100),(155,190,170)), // 灰碧 → 芥黄 → 青灰
    ((165,150,190),(150,185,140),(180,165,205)), // 暮藤 → 苔青 → 淡紫灰
    ((195,175,110),(130,155,185),(175,195,190)), // 琥珀 → 雾蓝 → 灰青
    ((150,185,130),(185,130,130),(170,195,150)), // 嫩叶 → 灰玫 → 青灰
    ((205,185,120),(140,170,195),(195,170,155)), // 暮光 → 青灰 → 暖灰
    ((160,140,195),(185,180,110),(170,150,200)), // 藤紫 → 橄榄 → 幽藤
    ((180,195,130),(130,150,185),(165,195,165)), // 黄灰 → 雾蓝 → 灰绿
    ((200,160,120),(140,140,190),(200,175,135)), // 沙橙 → 灰蓝 → 淡杏
];

#[rustfmt::skip]
pub const PALETTE_LIGHT: &[GradientTriple] = &[
    // Palette 2 — Light:清新明快,在白/米白背景上清晰可辨
    (( 30, 90,180),( 20,150,120),( 50,140,200)), // 海蓝 → 翠绿 → 天蓝
    ((180, 80, 60),( 40,120,180),(200,110, 80)), // 赤陶 → 钴蓝 → 砖橙
    (( 50,150, 90),(170,130, 50),( 80,160,120)), // 翠绿 → 琥珀 → 青翠
    ((130, 60,150),(180,140, 30),(150, 80,170)), // 紫堇 → 金棕 → 紫藤
    (( 40,160,130),(170, 60, 70),( 80,170,140)), // 青 → 朱红 → 翡翠
    ((190,110, 50),( 50,130,170),(210,140, 60)), // 橘黄 → 湖蓝 → 杏黄
    (( 60,120,190),(160, 90,140),(100,150,210)), // 蓝 → 紫红 → 碧蓝
    ((170, 70, 70),( 50,160,130),(190,100, 80)), // 赤红 → 青碧 → 朱砂
    (( 50,160,140),(180,130, 40),( 80,170,150)), // 青 → 琥珀 → 翠青
    ((140, 80,170),( 60,150, 80),(160,100,190)), // 紫菀 → 翠 → 薰衣草
    ((190,140, 40),( 60,110,180),(120,160,190)), // 金棕 → 蓝 → 灰蓝
    (( 60,150, 70),(170, 60, 80),( 90,160, 90)), // 绿 → 绯红 → 嫩绿
    ((200,130, 60),( 50,140,190),(180,100,120)), // 杏 → 天蓝 → 玫红
    ((120, 60,190),(180,150, 30),(140, 80,210)), // 鸢尾 → 金 → 暗紫
    ((160,170, 50),( 50, 90,170),(100,170,140)), // 黄绿 → 深蓝 → 翠
    ((200, 90, 50),( 80, 50,170),(210,120, 70)), // 橙 → 靛 → 赤橙
];

#[rustfmt::skip]
pub const PALETTE_NORD: &[GradientTriple] = &[
    // Palette 3 — Nord:极地冰蓝,低饱和冷调,Nord 色系
    ((136,192,208),(163,190,140),(143,188,187)), // nord8 → nord14 → nord7
    ((180,142,173),( 94,168,174),(191,160,180)), // nord15 → nord8浅 → nord15浅
    (( 94,168,174),(136,192,208),(143,188,187)), // nord8 → nord8 → nord7
    ((163,190,140),(180,142,173),(170,200,160)), // nord14 → nord15 → 浅绿
    ((143,188,187),(210,160,130),(160,195,190)), // nord7 → 暖棕 → 浅青
    ((180,170,150),( 94,168,174),(200,185,160)), // 暖灰 → nord8 → 米色
    ((120,175,200),(170,150,180),(145,190,200)), // 灰蓝 → 灰紫 → 冰蓝
    ((170,155,175),(130,185,175),(185,165,160)), // 灰紫 → 青灰 → 暖灰
    ((130,185,175),(175,165,140),(145,190,180)), // 青灰 → 暖米 → 浅青
    ((160,145,190),(143,188,187),(175,155,200)), // 灰藤 → nord7 → 灰紫
    ((175,165,135),(120,170,195),(160,185,180)), // 米色 → 灰蓝 → 灰青
    ((143,190,155),(175,145,165),(155,195,170)), // 嫩绿 → 灰粉 → 灰绿
    ((185,175,145),(130,175,190),(175,155,170)), // 暖灰 → 灰蓝 → 灰紫
    ((150,140,190),(170,175,140),(160,150,200)), // 藤 → 苔 → 藤紫
    ((165,185,150),(120,160,195),(150,190,170)), // 黄灰 → 灰蓝 → 灰绿
    ((185,160,145),(130,145,190),(190,170,155)), // 暖灰 → 灰蓝 → 米灰
];

#[rustfmt::skip]
pub const PALETTE_MONOKAI: &[GradientTriple] = &[
    // Palette 4 — Monokai:霓虹高对比,经典 Monokai 配色
    ((230,219,116),(249, 38,114),(166,226, 46)), // 黄 → 粉红 → 绿
    ((249, 38,114),(102,217,239),(255, 95,100)), // 粉红 → 青 → 珊瑚
    ((102,217,239),(166,226, 46),(174,220,230)), // 青 → 绿 → 浅青
    ((174,129,255),(230,219,116),(200,150,255)), // 紫 → 黄 → 淡紫
    ((166,226, 46),(249, 38,114),(200,240, 80)), // 绿 → 粉红 → 亮绿
    ((255,151, 50),(102,217,239),(255,200, 80)), // 橙 → 青 → 金黄
    ((102,217,239),(200,100,220),(150,220,250)), // 青 → 紫红 → 天蓝
    ((249, 70,100),(166,226, 46),(255,120, 90)), // 红 → 绿 → 橘红
    ((166,226, 46),(255,151, 50),(200,240,120)), // 绿 → 橙 → 浅绿
    ((200,130,255),(166,226, 46),(220,160,255)), // 紫 → 绿 → 淡紫
    ((255,200, 80),(102,217,239),(230,230,150)), // 金黄 → 青 → 浅黄
    ((166,226, 46),(249, 38,114),(200,240,100)), // 绿 → 粉红 → 黄绿
    ((255,180, 80),(102,217,239),(255,120,180)), // 杏 → 青 → 粉
    ((174,129,255),(230,219,116),(190,160,255)), // 紫 → 黄 → 蓝紫
    ((230,230,120),(102,180,230),(200,240,200)), // 黄绿 → 蓝 → 浅绿
    ((255,120, 80),(174,129,255),(255,160,100)), // 橙红 → 紫 → 橙
];

#[rustfmt::skip]
pub const PALETTE_TERMINAL: &[GradientTriple] = &[
    // Palette 5 — Terminal:灰度低调,适合经典终端
    ((160,160,160),(120,120,120),(175,175,175)), // 灰 → 深灰 → 浅灰
    ((170,170,170),(110,110,110),(180,180,180)), // 浅灰 → 暗灰 → 亮灰
    ((130,130,130),(165,165,165),(145,145,145)), // 中灰 → 浅灰 → 灰
    ((155,155,155),(140,140,140),(170,170,170)), // 灰 → 中灰 → 浅灰
    ((140,140,140),(160,160,160),(150,150,150)), // 灰 → 浅灰 → 中灰
    ((165,165,165),(125,125,125),(175,175,175)), // 浅灰 → 深灰 → 亮灰
    ((120,120,120),(170,170,170),(135,135,135)), // 深灰 → 浅灰 → 中灰
    ((160,150,150),(135,155,155),(170,160,160)), // 暖灰 → 冷灰 → 暖灰
    ((135,155,155),(160,150,150),(145,160,160)), // 冷灰 → 暖灰 → 冷灰
    ((150,140,165),(145,160,150),(160,145,170)), // 灰紫 → 灰绿 → 灰蓝
    ((165,160,140),(125,145,160),(155,165,155)), // 暖灰 → 冷灰 → 灰绿
    ((145,160,145),(160,140,150),(155,165,150)), // 灰绿 → 暖灰 → 灰绿
    ((170,160,145),(135,150,165),(160,155,150)), // 暖灰 → 冷灰 → 中灰
    ((150,140,165),(160,160,140),(155,145,170)), // 灰紫 → 灰 → 灰蓝
    ((160,165,145),(130,140,155),(150,165,155)), // 灰绿 → 冷灰 → 灰绿
    ((165,150,140),(140,140,160),(170,155,145)), // 暖灰 → 冷灰 → 暖灰
];

#[rustfmt::skip]
pub const PALETTE_ANTHROPIC_LIGHT: &[GradientTriple] = &[
    // Palette 6 — Anthropic Light:暖赭陶土,大地色系,白底清晰
    ((180,100, 70),( 70,130, 80),(200,130, 80)), // 赭陶 → 松绿 → 暖橙
    ((160, 80, 60),( 80,100,160),(180,110, 70)), // 赤陶 → 灰蓝 → 砖橙
    (( 70,130, 90),(170,120, 50),( 90,140,100)), // 森绿 → 赭金 → 翠绿
    ((130, 80,120),(170,130, 40),(140, 90,130)), // 灰紫 → 琥珀 → 藤紫
    (( 80,140,100),(160, 70, 60),(100,150,110)), // 翠 → 朱 → 翡翠
    ((180,110, 50),( 60,120,150),(200,130, 60)), // 橘黄 → 灰蓝 → 杏黄
    (( 70,100,150),(140, 80,110),( 90,110,165)), // 灰蓝 → 灰玫 → 蓝灰
    ((160, 70, 60),( 70,140,120),(180, 90, 70)), // 朱 → 青碧 → 赤砂
    (( 70,140,120),(170,120, 40),( 90,150,130)), // 青 → 赭金 → 翠青
    ((130, 80,140),( 70,140, 80),(145, 90,155)), // 紫菀 → 翠 → 暮紫
    ((180,130, 40),( 70, 90,150),(120,140,150)), // 金棕 → 蓝 → 灰蓝
    (( 70,140, 70),(160, 70, 80),( 90,150, 90)), // 绿 → 绯 → 嫩绿
    ((190,120, 50),( 60,120,160),(170, 90,100)), // 杏 → 灰蓝 → 玫红
    ((110, 60,160),(170,140, 30),(120, 70,175)), // 鸢尾 → 金 → 暗紫
    ((150,140, 50),( 50, 80,150),(100,150,120)), // 黄绿 → 深蓝 → 灰绿
    ((190, 80, 40),( 80, 50,140),(200,100, 55)), // 橙 → 靛 → 赤橙
];

#[rustfmt::skip]
pub const PALETTE_ANTHROPIC_DARK: &[GradientTriple] = &[
    // Palette 7 — Anthropic Dark:月蓝幽彩,冷调霓虹
    ((130,170,255),(192,153,255),(140,230,180)), // 月蓝 → 紫 → 翠绿
    ((255,140,120),(100,180,255),(255,170,140)), // 珊瑚 → 天蓝 → 桃
    ((100,200,200),(180,140,255),(130,220,210)), // 青 → 紫 → 浅青
    ((180,140,255),(255,200,100),(200,160,255)), // 紫 → 金 → 淡紫
    ((100,220,160),(255,120,130),(130,230,180)), // 翠 → 粉红 → 嫩翠
    ((255,170, 80),(100,180,230),(255,200,110)), // 橙 → 蓝 → 金
    ((100,180,255),(200,130,220),(140,200,255)), // 蓝 → 紫粉 → 碧蓝
    ((255,120,130),(100,220,200),(255,150,140)), // 粉红 → 青 → 珊瑚
    ((100,220,200),(255,180, 80),(130,230,210)), // 青 → 橙 → 浅青
    ((200,160,255),(100,220,160),(220,180,255)), // 紫 → 翠 → 淡紫
    ((255,200,100),(100,170,255),(200,220,150)), // 金 → 蓝 → 黄绿
    ((100,220,160),(255,120,140),(130,230,180)), // 翠 → 玫红 → 嫩翠
    ((255,180,100),(100,200,220),(255,140,180)), // 杏 → 青 → 粉
    ((170,130,255),(255,200,100),(190,150,255)), // 蓝 → 金 → 紫蓝
    ((200,220,120),(100,140,240),(150,230,200)), // 黄绿 → 蓝 → 薄荷
    ((255,140, 80),(140,100,255),(255,170,100)), // 橙红 → 靛 → 浅橙
];

/// 根据 palette 索引和 quote 索引获取渐变三元组
pub fn get_gradient(palette: u8, idx: usize) -> GradientTriple {
    let i = idx % 16;
    match palette % 8 {
        0 => PALETTE_MIDNIGHT[i],
        1 => PALETTE_DARK[i],
        2 => PALETTE_LIGHT[i],
        3 => PALETTE_NORD[i],
        4 => PALETTE_MONOKAI[i],
        5 => PALETTE_TERMINAL[i],
        6 => PALETTE_ANTHROPIC_LIGHT[i],
        _ => PALETTE_ANTHROPIC_DARK[i],
    }
}