// Colours. Light values come from the original's stylesheet // (index CSS, ":root,.sand-1vbcnu7" block). Dark values come from the renderer's appearance primitives. use eframe::egui::Color32; #[derive(Clone, Copy)] pub struct Palette { pub pane: Color32, pub sidebar: Color32, pub elevated: Color32, pub hover: Color32, pub active: Color32, pub primary: Color32, pub text: Color32, pub text2: Color32, pub text3: Color32, pub on_primary: Color32, pub bubble_user: Color32, pub border: Color32, pub focus: Color32, pub accent: Color32, pub danger: Color32, } const fn hexa(r: u8, g: u8, b: u8, a: u8) -> Color32 { Color32::from_rgba_unmultiplied_const(r, g, b, a) } pub const LIGHT: Palette = Palette { pane: hexa(0xff, 0xff, 0xff, 0xff), sidebar: hexa(0xf5, 0xf5, 0xf5, 0xff), elevated: hexa(0xff, 0xff, 0xff, 0xff), hover: hexa(0x1c, 0x1c, 0x1c, 0x0f), active: hexa(0x1c, 0x1c, 0x1c, 0x14), primary: hexa(0x1c, 0x1c, 0x1c, 0xff), text: hexa(0x1c, 0x1c, 0x1c, 0xff), text2: hexa(0x1c, 0x1c, 0x1c, 0xad), text3: hexa(0x1c, 0x1c, 0x1c, 0x8f), on_primary: hexa(0xff, 0xff, 0xff, 0xff), bubble_user: hexa(0x1c, 0x1c, 0x1c, 0xff), border: hexa(0x1c, 0x1c, 0x1c, 0x1f), focus: hexa(0x1e, 0x86, 0xfc, 0xff), accent: hexa(0x16, 0x80, 0xf3, 0xff), danger: hexa(0xcd, 0x28, 0x34, 0xff), }; // From the original's renderer (index.eager-common: appearance primitives dark neutral/0..6 and the // g_ alpha table): pane #1f1f1f, elevated #161616, chrome #121212, sidebar #0e0e0e, ink #f5f5f5, // primary hover #dbdbdb; translucent tokens are the ink at hover 6%, active 8%, agent bubble 4%, // user bubble 18%, text 66/54%, border 10%. Accent blue/0 #1884fc, danger red/0 #fc2c3e. // Measured from the original's dark window: chat rgb 19, sidebar 16, bubbles/cards 31–33. pub const DARK: Palette = Palette { pane: hexa(0x13, 0x13, 0x13, 0xff), sidebar: hexa(0x10, 0x10, 0x10, 0xff), elevated: hexa(0x1f, 0x1f, 0x1f, 0xff), hover: hexa(0xf5, 0xf5, 0xf5, 0x0f), active: hexa(0xf5, 0xf5, 0xf5, 0x14), primary: hexa(0xf5, 0xf5, 0xf5, 0xff), text: hexa(0xf5, 0xf5, 0xf5, 0xff), text2: hexa(0xf5, 0xf5, 0xf5, 0xa8), text3: hexa(0xf5, 0xf5, 0xf5, 0x8a), on_primary: hexa(0x1f, 0x1f, 0x1f, 0xff), bubble_user: hexa(0xf5, 0xf5, 0xf5, 0x2e), border: hexa(0xf5, 0xf5, 0xf5, 0x1a), focus: hexa(0x18, 0x84, 0xfc, 0xff), accent: hexa(0x18, 0x84, 0xfc, 0xff), danger: hexa(0xfc, 0x2c, 0x3e, 0xff), };