返回 CodeWhale
tokens.rs
根目录 / crates / tui / src / palette / tokens.rs
1 //! Color token constants — RGB tuples and semantic `Color` roles.
2
3 use ratatui::style::Color;
4
5 // Codewhale Whale palette. Semantic colors own state, never decoration alone.
6 pub const WHALE_BG_RGB: (u8, u8, u8) = (3, 7, 13); // #03070D Deep field
7 pub const WHALE_CHROME_RGB: (u8, u8, u8) = (8, 17, 28); // #08111C Ink / chrome
8 pub const WHALE_PANEL_RGB: (u8, u8, u8) = (14, 23, 41); // #0E1729 Panel surface
9 pub const WHALE_COMPOSER_RGB: (u8, u8, u8) = (22, 34, 56); // #162238 Plate
10 pub const WHALE_ELEVATED_RGB: (u8, u8, u8) = (24, 39, 66); // #182742 Raised
11 pub const WHALE_SELECTION_RGB: (u8, u8, u8) = (31, 50, 77); // #1F324D Action-blue tint
12 pub const WHALE_TEXT_BODY_RGB: (u8, u8, u8) = (246, 242, 232); // #F6F2E8 Whale Ivory
13 pub const WHALE_TEXT_SOFT_RGB: (u8, u8, u8) = (182, 192, 212); // #B6C0D4
14 pub const WHALE_TEXT_MUTED_RGB: (u8, u8, u8) = (147, 160, 184); // #93A0B8
15 pub const WHALE_TEXT_HINT_RGB: (u8, u8, u8) = (132, 145, 170); // #8491AA
16 #[allow(dead_code)]
17 pub const WHALE_TEXT_DIM_RGB: (u8, u8, u8) = (105, 119, 145); // #697791
18 pub const WHALE_ACTION_RGB: (u8, u8, u8) = (106, 174, 242); // #6AAEF2 Blue — owns interaction on dark
19 #[allow(dead_code)]
20 pub const WHALE_COBALT_RGB: (u8, u8, u8) = (49, 95, 216); // #315FD8 Cobalt — light-mode action
21 #[allow(dead_code)]
22 pub const WHALE_ICE_RGB: (u8, u8, u8) = (209, 235, 244); // #D1EBF4 Ice — structure on dark
23 #[allow(dead_code)]
24 pub const WHALE_CYAN_RGB: (u8, u8, u8) = (72, 215, 255); // #48D7FF Cyan — bounded accents only
25 pub const WHALE_ACCENT_SECONDARY_RGB: (u8, u8, u8) = (79, 209, 197); // #4FD1C5 Seafoam
26 pub const WHALE_HUMAN_RGB: (u8, u8, u8) = (246, 196, 83); // #F6C453 Signal Gold
27 /// Blue Stage grammar: the primary accent is the interaction blue. Signal Gold
28 /// is reserved for the whale mark and human-attention roles
29 /// ([`WHALE_HUMAN_RGB`]), never for general interaction.
30 pub const WHALE_ACCENT_PRIMARY_RGB: (u8, u8, u8) = WHALE_ACTION_RGB;
31 pub const WHALE_WORKING_GREEN_RGB: (u8, u8, u8) = (155, 214, 111); // #9BD66F Working Green
32 #[allow(dead_code)]
33 pub const WHALE_ACCENT_ACTION_RGB: (u8, u8, u8) = WHALE_ACTION_RGB;
34 pub const WHALE_ERROR_RGB: (u8, u8, u8) = (255, 134, 178); // #FF86B2 Rose danger
35 pub const WHALE_ERROR_HOVER_RGB: (u8, u8, u8) = (255, 156, 194); // #FF9CC2
36 pub const WHALE_ERROR_SURFACE_RGB: (u8, u8, u8) = (43, 21, 34); // #2B1522
37 pub const WHALE_ERROR_BORDER_RGB: (u8, u8, u8) = WHALE_ERROR_RGB;
38 pub const WHALE_ERROR_TEXT_RGB: (u8, u8, u8) = (255, 219, 232); // #FFDBE8
39 pub const WHALE_WARNING_RGB: (u8, u8, u8) = (255, 122, 89); // #FF7A59 Coral warning
40 pub const WHALE_SUCCESS_RGB: (u8, u8, u8) = WHALE_WORKING_GREEN_RGB; // completed / verified
41 pub const WHALE_INFO_RGB: (u8, u8, u8) = WHALE_ACTION_RGB;
42 pub const WHALE_BORDER_RGB: (u8, u8, u8) = (38, 62, 92); // #263E5C, blue at 25% on stage
43 pub const WHALE_REASONING_TEXT_RGB: (u8, u8, u8) = (224, 153, 72); // #E09948
44 pub const WHALE_REASONING_SURFACE_RGB: (u8, u8, u8) = (42, 34, 24); // #2A2218
45 pub const WHALE_REASONING_TINT_RGB: (u8, u8, u8) = (24, 36, 52); // #182434
46
47 // Solarized Light palette RGB tuples
48 pub const SOLARIZED_BASE03_RGB: (u8, u8, u8) = (0x00, 0x2B, 0x36);
49 pub const SOLARIZED_BASE02_RGB: (u8, u8, u8) = (0x07, 0x36, 0x42);
50 pub const SOLARIZED_BASE01_RGB: (u8, u8, u8) = (0x52, 0x66, 0x6D); // lifted for 4.5:1 muted text
51 pub const SOLARIZED_BASE00_RGB: (u8, u8, u8) = (0x65, 0x7B, 0x83);
52 pub const SOLARIZED_BASE0_RGB: (u8, u8, u8) = (0x72, 0x81, 0x82); // lifted for 3:1 hint text
53 pub const SOLARIZED_BASE1_RGB: (u8, u8, u8) = (0x93, 0xA1, 0xA1);
54 #[allow(dead_code)]
55 pub const SOLARIZED_BASE2_RGB: (u8, u8, u8) = (0xEE, 0xE8, 0xD5);
56 pub const SOLARIZED_BASE3_RGB: (u8, u8, u8) = (0xFD, 0xF6, 0xE3);
57 pub const SOLARIZED_YELLOW_RGB: (u8, u8, u8) = (0xB4, 0x88, 0x00); // lifted for 3:1 on ivory
58 pub const SOLARIZED_ORANGE_RGB: (u8, u8, u8) = (0xCB, 0x4B, 0x16);
59 pub const SOLARIZED_RED_RGB: (u8, u8, u8) = (0xDC, 0x32, 0x2F);
60 pub const SOLARIZED_BLUE_RGB: (u8, u8, u8) = (0x26, 0x8B, 0xD2);
61 pub const SOLARIZED_CYAN_RGB: (u8, u8, u8) = (0x29, 0x9E, 0x96); // lifted for 3:1 on ivory
62 pub const SOLARIZED_GREEN_RGB: (u8, u8, u8) = (0x7F, 0x92, 0x00); // lifted for 3:1 on ivory/diff bg
63 pub const SOLARIZED_PANEL_RGB: (u8, u8, u8) = (0xF0, 0xED, 0xE7);
64 pub const SOLARIZED_ELEVATED_RGB: (u8, u8, u8) = (0xE4, 0xDF, 0xCF);
65 pub const SOLARIZED_SELECT_RGB: (u8, u8, u8) = (0xD6, 0xD2, 0xC9);
66
67 pub const WHALE_DIFF_ADDED_RGB: (u8, u8, u8) = (87, 199, 133); // #57C785
68 #[allow(dead_code)]
69 pub const WHALE_DIFF_DELETED_RGB: (u8, u8, u8) = WHALE_ERROR_RGB;
70 pub const WHALE_DIFF_ADDED_BG_RGB: (u8, u8, u8) = (18, 42, 34); // #122A22
71 // Raw colors that are remapped by equality must remain distinct across roles.
72 // These stay in the same perceptual families as action, danger, and human asks
73 // while preserving mode identity for Terminal and community themes.
74 pub const WHALE_DIFF_DELETED_BG_RGB: (u8, u8, u8) = (52, 24, 39); // #341827
75 pub const WHALE_MODE_AGENT_RGB: (u8, u8, u8) = (118, 181, 245); // #76B5F5
76 pub const WHALE_MODE_YOLO_RGB: (u8, u8, u8) = (255, 112, 160); // #FF70A0
77 pub const WHALE_MODE_PLAN_RGB: (u8, u8, u8) = (185, 220, 236); // #B9DCEC Structural Ice
78 pub const WHALE_MODE_OPERATE_RGB: (u8, u8, u8) = (173, 136, 255); // #AD88FF
79 pub const WHALE_TOOL_LIVE_RGB: (u8, u8, u8) = WHALE_ACCENT_SECONDARY_RGB;
80 pub const WHALE_TOOL_ISSUE_RGB: (u8, u8, u8) = WHALE_ERROR_RGB;
81 pub const WHALE_TOOL_OUTPUT_RGB: (u8, u8, u8) = WHALE_TEXT_SOFT_RGB;
82 pub const WHALE_TOOL_SURFACE_RGB: (u8, u8, u8) = (18, 29, 50); // #121D32
83 pub const WHALE_TOOL_ACTIVE_RGB: (u8, u8, u8) = (27, 44, 68); // #1B2C44
84
85 pub const LIGHT_SURFACE_RGB: (u8, u8, u8) = (244, 247, 251); // #F4F7FB
86 pub const LIGHT_PANEL_RGB: (u8, u8, u8) = (255, 253, 248); // #FFFDF8
87 pub const LIGHT_ELEVATED_RGB: (u8, u8, u8) = (232, 238, 248); // #E8EEF8
88 pub const LIGHT_REASONING_RGB: (u8, u8, u8) = (255, 246, 214); // #FFF6D6
89 pub const LIGHT_SUCCESS_RGB: (u8, u8, u8) = (223, 247, 231); // #DFF7E7
90 pub const LIGHT_SUCCESS_FG_RGB: (u8, u8, u8) = (20, 118, 61); // #14763D, readable on every light surface
91 pub const LIGHT_ERROR_RGB: (u8, u8, u8) = (252, 235, 242); // #FCEBF2
92 pub const LIGHT_TEXT_BODY_RGB: (u8, u8, u8) = (20, 33, 58); // #14213A
93 pub const LIGHT_TEXT_MUTED_RGB: (u8, u8, u8) = (91, 103, 128); // #5B6780
94 pub const LIGHT_TEXT_HINT_RGB: (u8, u8, u8) = (95, 107, 129); // #5F6B81
95 pub const LIGHT_TEXT_SOFT_RGB: (u8, u8, u8) = (69, 81, 104); // #455168
96 pub const LIGHT_ACTION_RGB: (u8, u8, u8) = (49, 95, 216); // #315FD8 Cobalt
97 pub const LIGHT_LIVE_RGB: (u8, u8, u8) = (8, 118, 109); // #08766D
98 pub const LIGHT_HUMAN_RGB: (u8, u8, u8) = (122, 85, 0); // #7A5500
99 pub const LIGHT_WARNING_RGB: (u8, u8, u8) = (169, 71, 36); // #A94724
100 pub const LIGHT_DANGER_RGB: (u8, u8, u8) = (180, 35, 90); // #B4235A
101 // Mode shades stay in their parent semantic families while remaining distinct
102 // inputs to the render backend. A `Cell` carries only a `Color`, so reusing the
103 // exact action/human/danger value here would erase the mode role before ANSI
104 // adaptation can preserve it.
105 pub const LIGHT_MODE_AGENT_RGB: (u8, u8, u8) = (50, 95, 216); // #325FD8
106 pub const LIGHT_MODE_YOLO_RGB: (u8, u8, u8) = (181, 35, 90); // #B5235A
107 pub const LIGHT_MODE_PLAN_RGB: (u8, u8, u8) = (52, 92, 128); // #345C80 Structural steel-blue
108 pub const LIGHT_OPERATE_RGB: (u8, u8, u8) = (112, 71, 184); // #7047B8
109
110 // Solarized Light palette colors
111 pub const SOLARIZED_TEXT_DIM: Color = Color::Rgb(
112 SOLARIZED_BASE00_RGB.0,
113 SOLARIZED_BASE00_RGB.1,
114 SOLARIZED_BASE00_RGB.2,
115 );
116 pub const SOLARIZED_TEXT_HINT: Color = Color::Rgb(
117 SOLARIZED_BASE0_RGB.0,
118 SOLARIZED_BASE0_RGB.1,
119 SOLARIZED_BASE0_RGB.2,
120 );
121 pub const SOLARIZED_TEXT_MUTED: Color = Color::Rgb(
122 SOLARIZED_BASE01_RGB.0,
123 SOLARIZED_BASE01_RGB.1,
124 SOLARIZED_BASE01_RGB.2,
125 );
126 pub const SOLARIZED_TEXT_BODY: Color = Color::Rgb(
127 SOLARIZED_BASE03_RGB.0,
128 SOLARIZED_BASE03_RGB.1,
129 SOLARIZED_BASE03_RGB.2,
130 );
131 pub const SOLARIZED_TEXT_SOFT: Color = Color::Rgb(
132 SOLARIZED_BASE02_RGB.0,
133 SOLARIZED_BASE02_RGB.1,
134 SOLARIZED_BASE02_RGB.2,
135 );
136 pub const SOLARIZED_BORDER: Color = Color::Rgb(
137 SOLARIZED_BASE1_RGB.0,
138 SOLARIZED_BASE1_RGB.1,
139 SOLARIZED_BASE1_RGB.2,
140 );
141 pub const SOLARIZED_BLUE: Color = Color::Rgb(
142 SOLARIZED_BLUE_RGB.0,
143 SOLARIZED_BLUE_RGB.1,
144 SOLARIZED_BLUE_RGB.2,
145 );
146 pub const SOLARIZED_CYAN: Color = Color::Rgb(
147 SOLARIZED_CYAN_RGB.0,
148 SOLARIZED_CYAN_RGB.1,
149 SOLARIZED_CYAN_RGB.2,
150 );
151 pub const SOLARIZED_RED: Color = Color::Rgb(
152 SOLARIZED_RED_RGB.0,
153 SOLARIZED_RED_RGB.1,
154 SOLARIZED_RED_RGB.2,
155 );
156 pub const SOLARIZED_ORANGE: Color = Color::Rgb(
157 SOLARIZED_ORANGE_RGB.0,
158 SOLARIZED_ORANGE_RGB.1,
159 SOLARIZED_ORANGE_RGB.2,
160 );
161 pub const SOLARIZED_YELLOW: Color = Color::Rgb(
162 SOLARIZED_YELLOW_RGB.0,
163 SOLARIZED_YELLOW_RGB.1,
164 SOLARIZED_YELLOW_RGB.2,
165 );
166 pub const SOLARIZED_GREEN: Color = Color::Rgb(
167 SOLARIZED_GREEN_RGB.0,
168 SOLARIZED_GREEN_RGB.1,
169 SOLARIZED_GREEN_RGB.2,
170 );
171 pub const SOLARIZED_SURFACE: Color = Color::Rgb(
172 SOLARIZED_BASE3_RGB.0,
173 SOLARIZED_BASE3_RGB.1,
174 SOLARIZED_BASE3_RGB.2,
175 );
176 pub const SOLARIZED_PANEL: Color = Color::Rgb(
177 SOLARIZED_PANEL_RGB.0,
178 SOLARIZED_PANEL_RGB.1,
179 SOLARIZED_PANEL_RGB.2,
180 );
181 pub const SOLARIZED_ELEVATED: Color = Color::Rgb(
182 SOLARIZED_ELEVATED_RGB.0,
183 SOLARIZED_ELEVATED_RGB.1,
184 SOLARIZED_ELEVATED_RGB.2,
185 );
186 pub const SOLARIZED_SELECT_BG: Color = Color::Rgb(
187 SOLARIZED_SELECT_RGB.0,
188 SOLARIZED_SELECT_RGB.1,
189 SOLARIZED_SELECT_RGB.2,
190 );
191 pub const SOLARIZED_DIFF_ADDED_BG: Color = Color::Rgb(0xEA, 0xF2, 0xE0);
192 pub const SOLARIZED_ERROR_SURFACE: Color = Color::Rgb(0xFD, 0xEE, 0xEB);
193 /// Same tone as the error surface; kept as a distinct alias for diff context.
194 pub const SOLARIZED_DIFF_DELETED_BG: Color = SOLARIZED_ERROR_SURFACE;
195 pub const SOLARIZED_ERROR_TEXT: Color = Color::Rgb(0x8B, 0x00, 0x00);
196 pub const SOLARIZED_ERROR_HOVER: Color = Color::Rgb(0xE0, 0x55, 0x52);
197 pub const SOLARIZED_COMPOSER: Color = Color::Rgb(
198 SOLARIZED_PANEL_RGB.0,
199 SOLARIZED_PANEL_RGB.1,
200 SOLARIZED_PANEL_RGB.2,
201 );
202
203 pub const LIGHT_BORDER_RGB: (u8, u8, u8) = (169, 184, 207); // #A9B8CF
204 pub const LIGHT_SELECTION_RGB: (u8, u8, u8) = (238, 246, 255); // #EEF6FF
205 pub const GRAYSCALE_SURFACE_RGB: (u8, u8, u8) = (10, 10, 10); // #0A0A0A
206 pub const GRAYSCALE_PANEL_RGB: (u8, u8, u8) = (18, 18, 18); // #121212
207 pub const GRAYSCALE_ELEVATED_RGB: (u8, u8, u8) = (31, 31, 31); // #1F1F1F
208 pub const GRAYSCALE_REASONING_RGB: (u8, u8, u8) = (38, 38, 38); // #262626
209 pub const GRAYSCALE_SUCCESS_RGB: (u8, u8, u8) = (34, 34, 34); // #222222
210 pub const GRAYSCALE_ERROR_RGB: (u8, u8, u8) = (42, 42, 42); // #2A2A2A
211 pub const GRAYSCALE_TEXT_BODY_RGB: (u8, u8, u8) = (236, 236, 236); // #ECECEC
212 pub const GRAYSCALE_TEXT_MUTED_RGB: (u8, u8, u8) = (180, 180, 180); // #B4B4B4
213 pub const GRAYSCALE_TEXT_HINT_RGB: (u8, u8, u8) = (138, 138, 138); // #8A8A8A
214 pub const GRAYSCALE_TEXT_SOFT_RGB: (u8, u8, u8) = (220, 220, 220); // #DCDCDC
215 pub const GRAYSCALE_BORDER_RGB: (u8, u8, u8) = (96, 96, 96); // #606060
216 pub const GRAYSCALE_SELECTION_RGB: (u8, u8, u8) = (62, 62, 62); // #3E3E3E
217
218 pub const MATRIX_SURFACE_RGB: (u8, u8, u8) = (0, 10, 0); // #000A00
219 pub const MATRIX_ELEVATED_RGB: (u8, u8, u8) = (0, 51, 0); // #003300
220 pub const MATRIX_SELECTION_RGB: (u8, u8, u8) = (0, 51, 0); // #003300
221 pub const MATRIX_TEXT_BODY_RGB: (u8, u8, u8) = (136, 255, 136); // #88FF88
222 pub const MATRIX_TEXT_MUTED_RGB: (u8, u8, u8) = (0, 169, 0); // #00A900, lifted for 4.5:1
223 pub const MATRIX_TEXT_HINT_RGB: (u8, u8, u8) = (0, 135, 0); // #008700, lifted for 3:1
224 pub const MATRIX_TEXT_SOFT_RGB: (u8, u8, u8) = (221, 255, 221); // #DDFFDD
225 pub const MATRIX_TEXT_DIM_RGB: (u8, u8, u8) = (0, 108, 0); // #006C00, lifted for 3:1
226 pub const MATRIX_BORDER_RGB: (u8, u8, u8) = (0, 204, 0); // #00CC00
227
228 // Semantic colors
229 pub const BORDER_COLOR_RGB: (u8, u8, u8) = WHALE_BORDER_RGB;
230
231 pub const WHALE_ACCENT_PRIMARY: Color = Color::Rgb(
232 WHALE_ACCENT_PRIMARY_RGB.0,
233 WHALE_ACCENT_PRIMARY_RGB.1,
234 WHALE_ACCENT_PRIMARY_RGB.2,
235 );
236 pub const WHALE_ACTION: Color =
237 Color::Rgb(WHALE_ACTION_RGB.0, WHALE_ACTION_RGB.1, WHALE_ACTION_RGB.2);
238 pub const WHALE_LIVE: Color = Color::Rgb(
239 WHALE_ACCENT_SECONDARY_RGB.0,
240 WHALE_ACCENT_SECONDARY_RGB.1,
241 WHALE_ACCENT_SECONDARY_RGB.2,
242 );
243 pub const WHALE_HUMAN: Color = Color::Rgb(WHALE_HUMAN_RGB.0, WHALE_HUMAN_RGB.1, WHALE_HUMAN_RGB.2);
244 pub const WHALE_INFO: Color = Color::Rgb(WHALE_INFO_RGB.0, WHALE_INFO_RGB.1, WHALE_INFO_RGB.2);
245 pub const WHALE_BG: Color = Color::Rgb(WHALE_BG_RGB.0, WHALE_BG_RGB.1, WHALE_BG_RGB.2);
246 pub const WHALE_CHROME: Color =
247 Color::Rgb(WHALE_CHROME_RGB.0, WHALE_CHROME_RGB.1, WHALE_CHROME_RGB.2);
248 pub const WHALE_PANEL: Color = Color::Rgb(WHALE_PANEL_RGB.0, WHALE_PANEL_RGB.1, WHALE_PANEL_RGB.2);
249 pub const WHALE_COMPOSER: Color = Color::Rgb(
250 WHALE_COMPOSER_RGB.0,
251 WHALE_COMPOSER_RGB.1,
252 WHALE_COMPOSER_RGB.2,
253 );
254 pub const WHALE_ERROR: Color = Color::Rgb(WHALE_ERROR_RGB.0, WHALE_ERROR_RGB.1, WHALE_ERROR_RGB.2);
255
256 pub const LIGHT_SURFACE: Color = Color::Rgb(
257 LIGHT_SURFACE_RGB.0,
258 LIGHT_SURFACE_RGB.1,
259 LIGHT_SURFACE_RGB.2,
260 );
261 pub const LIGHT_PANEL: Color = Color::Rgb(LIGHT_PANEL_RGB.0, LIGHT_PANEL_RGB.1, LIGHT_PANEL_RGB.2);
262 pub const LIGHT_ELEVATED: Color = Color::Rgb(
263 LIGHT_ELEVATED_RGB.0,
264 LIGHT_ELEVATED_RGB.1,
265 LIGHT_ELEVATED_RGB.2,
266 );
267 pub const LIGHT_REASONING: Color = Color::Rgb(
268 LIGHT_REASONING_RGB.0,
269 LIGHT_REASONING_RGB.1,
270 LIGHT_REASONING_RGB.2,
271 );
272 pub const LIGHT_SUCCESS: Color = Color::Rgb(
273 LIGHT_SUCCESS_RGB.0,
274 LIGHT_SUCCESS_RGB.1,
275 LIGHT_SUCCESS_RGB.2,
276 );
277 pub const LIGHT_SUCCESS_FG: Color = Color::Rgb(
278 LIGHT_SUCCESS_FG_RGB.0,
279 LIGHT_SUCCESS_FG_RGB.1,
280 LIGHT_SUCCESS_FG_RGB.2,
281 );
282 pub const LIGHT_ERROR: Color = Color::Rgb(LIGHT_ERROR_RGB.0, LIGHT_ERROR_RGB.1, LIGHT_ERROR_RGB.2);
283 pub const LIGHT_TEXT_BODY: Color = Color::Rgb(
284 LIGHT_TEXT_BODY_RGB.0,
285 LIGHT_TEXT_BODY_RGB.1,
286 LIGHT_TEXT_BODY_RGB.2,
287 );
288 pub const LIGHT_TEXT_MUTED: Color = Color::Rgb(
289 LIGHT_TEXT_MUTED_RGB.0,
290 LIGHT_TEXT_MUTED_RGB.1,
291 LIGHT_TEXT_MUTED_RGB.2,
292 );
293 pub const LIGHT_TEXT_HINT: Color = Color::Rgb(
294 LIGHT_TEXT_HINT_RGB.0,
295 LIGHT_TEXT_HINT_RGB.1,
296 LIGHT_TEXT_HINT_RGB.2,
297 );
298 pub const LIGHT_TEXT_SOFT: Color = Color::Rgb(
299 LIGHT_TEXT_SOFT_RGB.0,
300 LIGHT_TEXT_SOFT_RGB.1,
301 LIGHT_TEXT_SOFT_RGB.2,
302 );
303 pub const LIGHT_ACTION: Color =
304 Color::Rgb(LIGHT_ACTION_RGB.0, LIGHT_ACTION_RGB.1, LIGHT_ACTION_RGB.2);
305 pub const LIGHT_LIVE: Color = Color::Rgb(LIGHT_LIVE_RGB.0, LIGHT_LIVE_RGB.1, LIGHT_LIVE_RGB.2);
306 pub const LIGHT_HUMAN: Color = Color::Rgb(LIGHT_HUMAN_RGB.0, LIGHT_HUMAN_RGB.1, LIGHT_HUMAN_RGB.2);
307 pub const LIGHT_WARNING: Color = Color::Rgb(
308 LIGHT_WARNING_RGB.0,
309 LIGHT_WARNING_RGB.1,
310 LIGHT_WARNING_RGB.2,
311 );
312 pub const LIGHT_DANGER: Color =
313 Color::Rgb(LIGHT_DANGER_RGB.0, LIGHT_DANGER_RGB.1, LIGHT_DANGER_RGB.2);
314 pub const LIGHT_MODE_AGENT: Color = Color::Rgb(
315 LIGHT_MODE_AGENT_RGB.0,
316 LIGHT_MODE_AGENT_RGB.1,
317 LIGHT_MODE_AGENT_RGB.2,
318 );
319 pub const LIGHT_MODE_YOLO: Color = Color::Rgb(
320 LIGHT_MODE_YOLO_RGB.0,
321 LIGHT_MODE_YOLO_RGB.1,
322 LIGHT_MODE_YOLO_RGB.2,
323 );
324 pub const LIGHT_MODE_PLAN: Color = Color::Rgb(
325 LIGHT_MODE_PLAN_RGB.0,
326 LIGHT_MODE_PLAN_RGB.1,
327 LIGHT_MODE_PLAN_RGB.2,
328 );
329 pub const LIGHT_OPERATE: Color = Color::Rgb(
330 LIGHT_OPERATE_RGB.0,
331 LIGHT_OPERATE_RGB.1,
332 LIGHT_OPERATE_RGB.2,
333 );
334 pub const LIGHT_BORDER: Color =
335 Color::Rgb(LIGHT_BORDER_RGB.0, LIGHT_BORDER_RGB.1, LIGHT_BORDER_RGB.2);
336 pub const LIGHT_SELECTION_BG: Color = Color::Rgb(
337 LIGHT_SELECTION_RGB.0,
338 LIGHT_SELECTION_RGB.1,
339 LIGHT_SELECTION_RGB.2,
340 );
341 pub const GRAYSCALE_SURFACE: Color = Color::Rgb(
342 GRAYSCALE_SURFACE_RGB.0,
343 GRAYSCALE_SURFACE_RGB.1,
344 GRAYSCALE_SURFACE_RGB.2,
345 );
346 pub const GRAYSCALE_PANEL: Color = Color::Rgb(
347 GRAYSCALE_PANEL_RGB.0,
348 GRAYSCALE_PANEL_RGB.1,
349 GRAYSCALE_PANEL_RGB.2,
350 );
351 pub const GRAYSCALE_ELEVATED: Color = Color::Rgb(
352 GRAYSCALE_ELEVATED_RGB.0,
353 GRAYSCALE_ELEVATED_RGB.1,
354 GRAYSCALE_ELEVATED_RGB.2,
355 );
356 pub const GRAYSCALE_REASONING: Color = Color::Rgb(
357 GRAYSCALE_REASONING_RGB.0,
358 GRAYSCALE_REASONING_RGB.1,
359 GRAYSCALE_REASONING_RGB.2,
360 );
361 pub const GRAYSCALE_SUCCESS: Color = Color::Rgb(
362 GRAYSCALE_SUCCESS_RGB.0,
363 GRAYSCALE_SUCCESS_RGB.1,
364 GRAYSCALE_SUCCESS_RGB.2,
365 );
366 pub const GRAYSCALE_ERROR: Color = Color::Rgb(
367 GRAYSCALE_ERROR_RGB.0,
368 GRAYSCALE_ERROR_RGB.1,
369 GRAYSCALE_ERROR_RGB.2,
370 );
371 pub const GRAYSCALE_TEXT_BODY: Color = Color::Rgb(
372 GRAYSCALE_TEXT_BODY_RGB.0,
373 GRAYSCALE_TEXT_BODY_RGB.1,
374 GRAYSCALE_TEXT_BODY_RGB.2,
375 );
376 pub const GRAYSCALE_TEXT_MUTED: Color = Color::Rgb(
377 GRAYSCALE_TEXT_MUTED_RGB.0,
378 GRAYSCALE_TEXT_MUTED_RGB.1,
379 GRAYSCALE_TEXT_MUTED_RGB.2,
380 );
381 pub const GRAYSCALE_TEXT_HINT: Color = Color::Rgb(
382 GRAYSCALE_TEXT_HINT_RGB.0,
383 GRAYSCALE_TEXT_HINT_RGB.1,
384 GRAYSCALE_TEXT_HINT_RGB.2,
385 );
386 pub const GRAYSCALE_TEXT_SOFT: Color = Color::Rgb(
387 GRAYSCALE_TEXT_SOFT_RGB.0,
388 GRAYSCALE_TEXT_SOFT_RGB.1,
389 GRAYSCALE_TEXT_SOFT_RGB.2,
390 );
391 pub const GRAYSCALE_BORDER: Color = Color::Rgb(
392 GRAYSCALE_BORDER_RGB.0,
393 GRAYSCALE_BORDER_RGB.1,
394 GRAYSCALE_BORDER_RGB.2,
395 );
396 pub const GRAYSCALE_SELECTION_BG: Color = Color::Rgb(
397 GRAYSCALE_SELECTION_RGB.0,
398 GRAYSCALE_SELECTION_RGB.1,
399 GRAYSCALE_SELECTION_RGB.2,
400 );
401
402 pub const TEXT_BODY: Color = Color::Rgb(
403 WHALE_TEXT_BODY_RGB.0,
404 WHALE_TEXT_BODY_RGB.1,
405 WHALE_TEXT_BODY_RGB.2,
406 );
407 pub const TEXT_SECONDARY: Color = Color::Rgb(
408 WHALE_TEXT_MUTED_RGB.0,
409 WHALE_TEXT_MUTED_RGB.1,
410 WHALE_TEXT_MUTED_RGB.2,
411 );
412 pub const TEXT_HINT: Color = Color::Rgb(
413 WHALE_TEXT_HINT_RGB.0,
414 WHALE_TEXT_HINT_RGB.1,
415 WHALE_TEXT_HINT_RGB.2,
416 );
417 pub const TEXT_ACCENT: Color = Color::Rgb(
418 WHALE_ACCENT_SECONDARY_RGB.0,
419 WHALE_ACCENT_SECONDARY_RGB.1,
420 WHALE_ACCENT_SECONDARY_RGB.2,
421 );
422 pub const SELECTION_TEXT: Color = Color::Rgb(
423 WHALE_TEXT_BODY_RGB.0,
424 WHALE_TEXT_BODY_RGB.1,
425 WHALE_TEXT_BODY_RGB.2,
426 ); // Ivory — softer than pure white
427 pub const TEXT_SOFT: Color = Color::Rgb(
428 WHALE_TEXT_SOFT_RGB.0,
429 WHALE_TEXT_SOFT_RGB.1,
430 WHALE_TEXT_SOFT_RGB.2,
431 );
432 pub const TEXT_REASONING: Color = Color::Rgb(
433 WHALE_REASONING_TEXT_RGB.0,
434 WHALE_REASONING_TEXT_RGB.1,
435 WHALE_REASONING_TEXT_RGB.2,
436 );
437
438 // Compatibility aliases for existing call sites.
439 pub const TEXT_PRIMARY: Color = TEXT_BODY;
440 pub const TEXT_MUTED: Color = TEXT_SECONDARY;
441 pub const TEXT_DIM: Color = TEXT_HINT;
442 pub const USER_BODY: Color = Color::Rgb(74, 222, 128); // #4ADE80 green
443 pub const LIGHT_USER_BODY: Color = LIGHT_SUCCESS_FG;
444
445 // Compatibility semantic colors for UI theming
446 pub const BORDER_COLOR: Color =
447 Color::Rgb(BORDER_COLOR_RGB.0, BORDER_COLOR_RGB.1, BORDER_COLOR_RGB.2);
448 #[allow(dead_code)]
449 pub const ACCENT_PRIMARY: Color = Color::Rgb(
450 WHALE_ACCENT_PRIMARY_RGB.0,
451 WHALE_ACCENT_PRIMARY_RGB.1,
452 WHALE_ACCENT_PRIMARY_RGB.2,
453 );
454 #[allow(dead_code)]
455 pub const ACCENT_SECONDARY: Color = Color::Rgb(
456 WHALE_ACCENT_SECONDARY_RGB.0,
457 WHALE_ACCENT_SECONDARY_RGB.1,
458 WHALE_ACCENT_SECONDARY_RGB.2,
459 );
460 #[allow(dead_code)]
461 pub const BACKGROUND_DARK: Color = Color::Rgb(WHALE_BG_RGB.0, WHALE_BG_RGB.1, WHALE_BG_RGB.2);
462 #[allow(dead_code)]
463 pub const STATUS_NEUTRAL: Color = TEXT_MUTED;
464 #[allow(dead_code)]
465 pub const SURFACE_PANEL: Color =
466 Color::Rgb(WHALE_PANEL_RGB.0, WHALE_PANEL_RGB.1, WHALE_PANEL_RGB.2);
467 #[allow(dead_code)]
468 pub const SURFACE_ELEVATED: Color = Color::Rgb(
469 WHALE_ELEVATED_RGB.0,
470 WHALE_ELEVATED_RGB.1,
471 WHALE_ELEVATED_RGB.2,
472 );
473 pub const SURFACE_REASONING: Color = Color::Rgb(
474 WHALE_REASONING_SURFACE_RGB.0,
475 WHALE_REASONING_SURFACE_RGB.1,
476 WHALE_REASONING_SURFACE_RGB.2,
477 );
478 pub const SURFACE_REASONING_TINT: Color = Color::Rgb(
479 WHALE_REASONING_TINT_RGB.0,
480 WHALE_REASONING_TINT_RGB.1,
481 WHALE_REASONING_TINT_RGB.2,
482 );
483 #[allow(dead_code)]
484 pub const SURFACE_REASONING_ACTIVE: Color = Color::Rgb(58, 46, 32);
485 #[allow(dead_code)]
486 pub const SURFACE_TOOL: Color = Color::Rgb(
487 WHALE_TOOL_SURFACE_RGB.0,
488 WHALE_TOOL_SURFACE_RGB.1,
489 WHALE_TOOL_SURFACE_RGB.2,
490 );
491 pub const SURFACE_TOOL_ACTIVE: Color = Color::Rgb(
492 WHALE_TOOL_ACTIVE_RGB.0,
493 WHALE_TOOL_ACTIVE_RGB.1,
494 WHALE_TOOL_ACTIVE_RGB.2,
495 );
496 #[allow(dead_code)]
497 pub const SURFACE_SUCCESS: Color = Color::Rgb(18, 42, 37); // dark teal tint
498 #[allow(dead_code)]
499 pub const SURFACE_ERROR: Color = Color::Rgb(
500 WHALE_ERROR_SURFACE_RGB.0,
501 WHALE_ERROR_SURFACE_RGB.1,
502 WHALE_ERROR_SURFACE_RGB.2,
503 );
504 pub const DIFF_ADDED_BG: Color = Color::Rgb(
505 WHALE_DIFF_ADDED_BG_RGB.0,
506 WHALE_DIFF_ADDED_BG_RGB.1,
507 WHALE_DIFF_ADDED_BG_RGB.2,
508 );
509 pub const DIFF_DELETED_BG: Color = Color::Rgb(
510 WHALE_DIFF_DELETED_BG_RGB.0,
511 WHALE_DIFF_DELETED_BG_RGB.1,
512 WHALE_DIFF_DELETED_BG_RGB.2,
513 );
514 pub const DIFF_ADDED: Color = Color::Rgb(
515 WHALE_DIFF_ADDED_RGB.0,
516 WHALE_DIFF_ADDED_RGB.1,
517 WHALE_DIFF_ADDED_RGB.2,
518 );
519 pub const ACCENT_REASONING_LIVE: Color = Color::Rgb(
520 WHALE_REASONING_TEXT_RGB.0,
521 WHALE_REASONING_TEXT_RGB.1,
522 WHALE_REASONING_TEXT_RGB.2,
523 );
524 pub const ACCENT_TOOL_LIVE: Color = Color::Rgb(
525 WHALE_TOOL_LIVE_RGB.0,
526 WHALE_TOOL_LIVE_RGB.1,
527 WHALE_TOOL_LIVE_RGB.2,
528 );
529 pub const ACCENT_TOOL_ISSUE: Color = Color::Rgb(
530 WHALE_TOOL_ISSUE_RGB.0,
531 WHALE_TOOL_ISSUE_RGB.1,
532 WHALE_TOOL_ISSUE_RGB.2,
533 );
534 pub const TEXT_TOOL_OUTPUT: Color = Color::Rgb(
535 WHALE_TOOL_OUTPUT_RGB.0,
536 WHALE_TOOL_OUTPUT_RGB.1,
537 WHALE_TOOL_OUTPUT_RGB.2,
538 );
539
540 // Legacy status colors - keep for backward compatibility
541 pub const STATUS_SUCCESS: Color = Color::Rgb(
542 WHALE_SUCCESS_RGB.0,
543 WHALE_SUCCESS_RGB.1,
544 WHALE_SUCCESS_RGB.2,
545 );
546 pub const STATUS_WARNING: Color = Color::Rgb(
547 WHALE_WARNING_RGB.0,
548 WHALE_WARNING_RGB.1,
549 WHALE_WARNING_RGB.2,
550 );
551 pub const STATUS_ERROR: Color = Color::Rgb(WHALE_ERROR_RGB.0, WHALE_ERROR_RGB.1, WHALE_ERROR_RGB.2);
552 #[allow(dead_code)]
553 pub const STATUS_INFO: Color = Color::Rgb(WHALE_INFO_RGB.0, WHALE_INFO_RGB.1, WHALE_INFO_RGB.2);
554
555 // Mode-specific accent colors for mode badges
556 pub const MODE_AGENT: Color = Color::Rgb(
557 WHALE_MODE_AGENT_RGB.0,
558 WHALE_MODE_AGENT_RGB.1,
559 WHALE_MODE_AGENT_RGB.2,
560 );
561 pub const MODE_YOLO: Color = Color::Rgb(
562 WHALE_MODE_YOLO_RGB.0,
563 WHALE_MODE_YOLO_RGB.1,
564 WHALE_MODE_YOLO_RGB.2,
565 );
566 pub const MODE_PLAN: Color = Color::Rgb(
567 WHALE_MODE_PLAN_RGB.0,
568 WHALE_MODE_PLAN_RGB.1,
569 WHALE_MODE_PLAN_RGB.2,
570 );
571 pub const MODE_OPERATE: Color = Color::Rgb(
572 WHALE_MODE_OPERATE_RGB.0,
573 WHALE_MODE_OPERATE_RGB.1,
574 WHALE_MODE_OPERATE_RGB.2,
575 );
576
577 pub const SELECTION_BG: Color = Color::Rgb(
578 WHALE_SELECTION_RGB.0,
579 WHALE_SELECTION_RGB.1,
580 WHALE_SELECTION_RGB.2,
581 );
582 #[allow(dead_code)]
583 pub const COMPOSER_BG: Color = WHALE_COMPOSER;
584
584 lines RUST