| 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) = (7, 12, 29); // #070C1D Ink field |
| 7 | pub const WHALE_CHROME_RGB: (u8, u8, u8) = (12, 21, 49); // #0C1531 Navy chrome |
| 8 | pub const WHALE_PANEL_RGB: (u8, u8, u8) = (16, 28, 64); // #101C40 Panel surface |
| 9 | pub const WHALE_COMPOSER_RGB: (u8, u8, u8) = (20, 35, 82); // #142352 Stage plate (brand navy) |
| 10 | pub const WHALE_ELEVATED_RGB: (u8, u8, u8) = (26, 44, 99); // #1A2C63 Raised |
| 11 | pub const WHALE_SELECTION_RGB: (u8, u8, u8) = (35, 45, 65); // #232D41 Quiet selection surface |
| 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) = (138, 153, 179); // #8A99B3 — AA hint on the ink field |
| 16 | /// Blue Stage grammar: the interaction blue is the primary accent and the |
| 17 | /// Info ink; it has exactly one name. Signal Gold is reserved for the whale |
| 18 | /// mark and human-attention roles ([`WHALE_HUMAN_RGB`]), never for general |
| 19 | /// interaction. |
| 20 | pub const WHALE_ACTION_RGB: (u8, u8, u8) = (106, 166, 220); // #6AA6DC Ombre sky — owns interaction on dark |
| 21 | // No TUI consumer yet; the web reads these through scripts/export-design-tokens.py |
| 22 | // (`--whale-cobalt`, `--whale-ice`), so they are not dead. |
| 23 | pub const WHALE_COBALT_RGB: (u8, u8, u8) = (21, 53, 178); // #1535B2 Ombre cobalt — light-mode action |
| 24 | pub const WHALE_ICE_RGB: (u8, u8, u8) = (221, 238, 249); // #DDEEF9 Ice — structure on dark |
| 25 | pub const WHALE_CYAN_RGB: (u8, u8, u8) = (120, 188, 232); // #78BCE8 Cyan — bounded accents only |
| 26 | pub const WHALE_ACCENT_SECONDARY_RGB: (u8, u8, u8) = (79, 209, 197); // #4FD1C5 Seafoam |
| 27 | // Whale Teams (Signal Cut, CWC 2026-08-15) identity accents. These two brand |
| 28 | // palette entries have no semantic role in the TUI; they exist only so the |
| 29 | // Harbor and Echo whale marks carry their exact CWC accent instead of a |
| 30 | // borrowed state color. Never use them for status, mode, or permission. |
| 31 | pub const WHALE_BRAND_ORANGE_RGB: (u8, u8, u8) = (255, 138, 61); // #FF8A3D Harbor mooring loop |
| 32 | pub const WHALE_BRAND_MAGENTA_RGB: (u8, u8, u8) = (240, 78, 184); // #F04EB8 Echo sonar ticks |
| 33 | pub const WHALE_HUMAN_RGB: (u8, u8, u8) = (246, 196, 83); // #F6C453 Signal Gold |
| 34 | pub const WHALE_WORKING_GREEN_RGB: (u8, u8, u8) = (155, 214, 111); // #9BD66F Working Green |
| 35 | pub const WHALE_ERROR_RGB: (u8, u8, u8) = (255, 134, 178); // #FF86B2 Rose danger |
| 36 | pub const WHALE_ERROR_HOVER_RGB: (u8, u8, u8) = (255, 156, 194); // #FF9CC2 |
| 37 | pub const WHALE_ERROR_SURFACE_RGB: (u8, u8, u8) = (43, 21, 34); // #2B1522 |
| 38 | pub const WHALE_ERROR_BORDER_RGB: (u8, u8, u8) = WHALE_ERROR_RGB; |
| 39 | pub const WHALE_ERROR_TEXT_RGB: (u8, u8, u8) = (255, 219, 232); // #FFDBE8 |
| 40 | pub const WHALE_WARNING_RGB: (u8, u8, u8) = (255, 122, 89); // #FF7A59 Coral warning |
| 41 | pub const WHALE_SUCCESS_RGB: (u8, u8, u8) = WHALE_WORKING_GREEN_RGB; // completed / verified |
| 42 | pub const WHALE_BORDER_RGB: (u8, u8, u8) = (42, 63, 114); // #2A3F72, sky 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) = (22, 36, 74); // #16244A |
| 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 | pub const SOLARIZED_BASE2_RGB: (u8, u8, u8) = (0xEE, 0xE8, 0xD5); |
| 55 | pub const SOLARIZED_BASE3_RGB: (u8, u8, u8) = (0xFD, 0xF6, 0xE3); |
| 56 | pub const SOLARIZED_YELLOW_RGB: (u8, u8, u8) = (0xB4, 0x88, 0x00); // lifted for 3:1 on ivory |
| 57 | pub const SOLARIZED_ORANGE_RGB: (u8, u8, u8) = (0xCB, 0x4B, 0x16); |
| 58 | pub const SOLARIZED_RED_RGB: (u8, u8, u8) = (0xDC, 0x32, 0x2F); |
| 59 | pub const SOLARIZED_BLUE_RGB: (u8, u8, u8) = (0x26, 0x8B, 0xD2); |
| 60 | pub const SOLARIZED_CYAN_RGB: (u8, u8, u8) = (0x29, 0x9E, 0x96); // lifted for 3:1 on ivory |
| 61 | pub const SOLARIZED_GREEN_RGB: (u8, u8, u8) = (0x7F, 0x92, 0x00); // lifted for 3:1 on ivory/diff bg |
| 62 | pub const SOLARIZED_PANEL_RGB: (u8, u8, u8) = (0xF0, 0xED, 0xE7); |
| 63 | pub const SOLARIZED_ELEVATED_RGB: (u8, u8, u8) = (0xE4, 0xDF, 0xCF); |
| 64 | pub const SOLARIZED_SELECT_RGB: (u8, u8, u8) = (0xD6, 0xD2, 0xC9); |
| 65 | |
| 66 | pub const WHALE_DIFF_ADDED_RGB: (u8, u8, u8) = (87, 199, 133); // #57C785 |
| 67 | pub const WHALE_DIFF_ADDED_BG_RGB: (u8, u8, u8) = (18, 42, 34); // #122A22 |
| 68 | // Raw colors that are remapped by equality must remain distinct across roles. |
| 69 | // These stay in the same perceptual families as action, danger, and human asks |
| 70 | // while preserving mode identity for Terminal and community themes. |
| 71 | pub const WHALE_DIFF_DELETED_BG_RGB: (u8, u8, u8) = (52, 24, 39); // #341827 |
| 72 | pub const WHALE_MODE_AGENT_RGB: (u8, u8, u8) = (126, 180, 232); // #7EB4E8 |
| 73 | pub const WHALE_MODE_YOLO_RGB: (u8, u8, u8) = (255, 112, 160); // #FF70A0 |
| 74 | pub const WHALE_MODE_PLAN_RGB: (u8, u8, u8) = (185, 220, 236); // #B9DCEC Structural Ice |
| 75 | pub const WHALE_MODE_OPERATE_RGB: (u8, u8, u8) = (173, 136, 255); // #AD88FF |
| 76 | pub const WHALE_TOOL_LIVE_RGB: (u8, u8, u8) = WHALE_ACCENT_SECONDARY_RGB; |
| 77 | pub const WHALE_TOOL_ISSUE_RGB: (u8, u8, u8) = WHALE_ERROR_RGB; |
| 78 | pub const WHALE_TOOL_OUTPUT_RGB: (u8, u8, u8) = WHALE_TEXT_SOFT_RGB; |
| 79 | pub const WHALE_TOOL_SURFACE_RGB: (u8, u8, u8) = (15, 26, 58); // #0F1A3A |
| 80 | pub const WHALE_TOOL_ACTIVE_RGB: (u8, u8, u8) = (24, 44, 94); // #182C5E |
| 81 | |
| 82 | pub const LIGHT_SURFACE_RGB: (u8, u8, u8) = (244, 247, 251); // #F4F7FB |
| 83 | pub const LIGHT_PANEL_RGB: (u8, u8, u8) = (255, 253, 248); // #FFFDF8 |
| 84 | pub const LIGHT_ELEVATED_RGB: (u8, u8, u8) = (232, 238, 248); // #E8EEF8 |
| 85 | pub const LIGHT_REASONING_RGB: (u8, u8, u8) = (255, 246, 214); // #FFF6D6 |
| 86 | pub const LIGHT_SUCCESS_RGB: (u8, u8, u8) = (223, 247, 231); // #DFF7E7 |
| 87 | pub const LIGHT_SUCCESS_FG_RGB: (u8, u8, u8) = (20, 118, 61); // #14763D, readable on every light surface |
| 88 | pub const LIGHT_ERROR_RGB: (u8, u8, u8) = (252, 235, 242); // #FCEBF2 |
| 89 | pub const LIGHT_TEXT_BODY_RGB: (u8, u8, u8) = (20, 33, 58); // #14213A |
| 90 | pub const LIGHT_TEXT_MUTED_RGB: (u8, u8, u8) = (91, 103, 128); // #5B6780 |
| 91 | pub const LIGHT_TEXT_HINT_RGB: (u8, u8, u8) = (95, 107, 129); // #5F6B81 |
| 92 | pub const LIGHT_TEXT_SOFT_RGB: (u8, u8, u8) = (69, 81, 104); // #455168 |
| 93 | pub const LIGHT_ACTION_RGB: (u8, u8, u8) = (21, 53, 178); // #1535B2 Ombre cobalt |
| 94 | pub const LIGHT_LIVE_RGB: (u8, u8, u8) = (8, 118, 109); // #08766D |
| 95 | pub const LIGHT_HUMAN_RGB: (u8, u8, u8) = (122, 85, 0); // #7A5500 |
| 96 | pub const LIGHT_WARNING_RGB: (u8, u8, u8) = (169, 71, 36); // #A94724 |
| 97 | pub const LIGHT_DANGER_RGB: (u8, u8, u8) = (180, 35, 90); // #B4235A |
| 98 | // Mode shades stay in their parent semantic families while remaining distinct |
| 99 | // inputs to the render backend. A `Cell` carries only a `Color`, so reusing the |
| 100 | // exact action/human/danger value here would erase the mode role before ANSI |
| 101 | // adaptation can preserve it. |
| 102 | pub const LIGHT_MODE_AGENT_RGB: (u8, u8, u8) = (22, 54, 178); // #1636B2 |
| 103 | pub const LIGHT_MODE_YOLO_RGB: (u8, u8, u8) = (181, 35, 90); // #B5235A |
| 104 | pub const LIGHT_MODE_PLAN_RGB: (u8, u8, u8) = (52, 92, 128); // #345C80 Structural steel-blue |
| 105 | pub const LIGHT_OPERATE_RGB: (u8, u8, u8) = (112, 71, 184); // #7047B8 |
| 106 | |
| 107 | // Solarized Light palette colors |
| 108 | pub const SOLARIZED_TEXT_DIM: Color = Color::Rgb( |
| 109 | SOLARIZED_BASE00_RGB.0, |
| 110 | SOLARIZED_BASE00_RGB.1, |
| 111 | SOLARIZED_BASE00_RGB.2, |
| 112 | ); |
| 113 | pub const SOLARIZED_TEXT_HINT: Color = Color::Rgb( |
| 114 | SOLARIZED_BASE0_RGB.0, |
| 115 | SOLARIZED_BASE0_RGB.1, |
| 116 | SOLARIZED_BASE0_RGB.2, |
| 117 | ); |
| 118 | pub const SOLARIZED_TEXT_MUTED: Color = Color::Rgb( |
| 119 | SOLARIZED_BASE01_RGB.0, |
| 120 | SOLARIZED_BASE01_RGB.1, |
| 121 | SOLARIZED_BASE01_RGB.2, |
| 122 | ); |
| 123 | pub const SOLARIZED_TEXT_BODY: Color = Color::Rgb( |
| 124 | SOLARIZED_BASE03_RGB.0, |
| 125 | SOLARIZED_BASE03_RGB.1, |
| 126 | SOLARIZED_BASE03_RGB.2, |
| 127 | ); |
| 128 | pub const SOLARIZED_TEXT_SOFT: Color = Color::Rgb( |
| 129 | SOLARIZED_BASE02_RGB.0, |
| 130 | SOLARIZED_BASE02_RGB.1, |
| 131 | SOLARIZED_BASE02_RGB.2, |
| 132 | ); |
| 133 | pub const SOLARIZED_BORDER: Color = Color::Rgb( |
| 134 | SOLARIZED_BASE1_RGB.0, |
| 135 | SOLARIZED_BASE1_RGB.1, |
| 136 | SOLARIZED_BASE1_RGB.2, |
| 137 | ); |
| 138 | pub const SOLARIZED_BLUE: Color = Color::Rgb( |
| 139 | SOLARIZED_BLUE_RGB.0, |
| 140 | SOLARIZED_BLUE_RGB.1, |
| 141 | SOLARIZED_BLUE_RGB.2, |
| 142 | ); |
| 143 | pub const SOLARIZED_CYAN: Color = Color::Rgb( |
| 144 | SOLARIZED_CYAN_RGB.0, |
| 145 | SOLARIZED_CYAN_RGB.1, |
| 146 | SOLARIZED_CYAN_RGB.2, |
| 147 | ); |
| 148 | pub const SOLARIZED_RED: Color = Color::Rgb( |
| 149 | SOLARIZED_RED_RGB.0, |
| 150 | SOLARIZED_RED_RGB.1, |
| 151 | SOLARIZED_RED_RGB.2, |
| 152 | ); |
| 153 | pub const SOLARIZED_ORANGE: Color = Color::Rgb( |
| 154 | SOLARIZED_ORANGE_RGB.0, |
| 155 | SOLARIZED_ORANGE_RGB.1, |
| 156 | SOLARIZED_ORANGE_RGB.2, |
| 157 | ); |
| 158 | pub const SOLARIZED_YELLOW: Color = Color::Rgb( |
| 159 | SOLARIZED_YELLOW_RGB.0, |
| 160 | SOLARIZED_YELLOW_RGB.1, |
| 161 | SOLARIZED_YELLOW_RGB.2, |
| 162 | ); |
| 163 | pub const SOLARIZED_GREEN: Color = Color::Rgb( |
| 164 | SOLARIZED_GREEN_RGB.0, |
| 165 | SOLARIZED_GREEN_RGB.1, |
| 166 | SOLARIZED_GREEN_RGB.2, |
| 167 | ); |
| 168 | pub const SOLARIZED_SURFACE: Color = Color::Rgb( |
| 169 | SOLARIZED_BASE3_RGB.0, |
| 170 | SOLARIZED_BASE3_RGB.1, |
| 171 | SOLARIZED_BASE3_RGB.2, |
| 172 | ); |
| 173 | pub const SOLARIZED_PANEL: Color = Color::Rgb( |
| 174 | SOLARIZED_PANEL_RGB.0, |
| 175 | SOLARIZED_PANEL_RGB.1, |
| 176 | SOLARIZED_PANEL_RGB.2, |
| 177 | ); |
| 178 | pub const SOLARIZED_ELEVATED: Color = Color::Rgb( |
| 179 | SOLARIZED_ELEVATED_RGB.0, |
| 180 | SOLARIZED_ELEVATED_RGB.1, |
| 181 | SOLARIZED_ELEVATED_RGB.2, |
| 182 | ); |
| 183 | pub const SOLARIZED_SELECT_BG: Color = Color::Rgb( |
| 184 | SOLARIZED_SELECT_RGB.0, |
| 185 | SOLARIZED_SELECT_RGB.1, |
| 186 | SOLARIZED_SELECT_RGB.2, |
| 187 | ); |
| 188 | pub const SOLARIZED_DIFF_ADDED_BG: Color = Color::Rgb(0xEA, 0xF2, 0xE0); |
| 189 | pub const SOLARIZED_ERROR_SURFACE: Color = Color::Rgb(0xFD, 0xEE, 0xEB); |
| 190 | /// Same tone as the error surface; kept as a distinct alias for diff context. |
| 191 | pub const SOLARIZED_DIFF_DELETED_BG: Color = SOLARIZED_ERROR_SURFACE; |
| 192 | pub const SOLARIZED_ERROR_TEXT: Color = Color::Rgb(0x8B, 0x00, 0x00); |
| 193 | pub const SOLARIZED_ERROR_HOVER: Color = Color::Rgb(0xE0, 0x55, 0x52); |
| 194 | pub const SOLARIZED_COMPOSER: Color = Color::Rgb( |
| 195 | SOLARIZED_PANEL_RGB.0, |
| 196 | SOLARIZED_PANEL_RGB.1, |
| 197 | SOLARIZED_PANEL_RGB.2, |
| 198 | ); |
| 199 | |
| 200 | pub const LIGHT_BORDER_RGB: (u8, u8, u8) = (169, 184, 207); // #A9B8CF |
| 201 | pub const LIGHT_SELECTION_RGB: (u8, u8, u8) = (238, 246, 255); // #EEF6FF |
| 202 | pub const GRAYSCALE_SURFACE_RGB: (u8, u8, u8) = (10, 10, 10); // #0A0A0A |
| 203 | pub const GRAYSCALE_PANEL_RGB: (u8, u8, u8) = (18, 18, 18); // #121212 |
| 204 | pub const GRAYSCALE_ELEVATED_RGB: (u8, u8, u8) = (31, 31, 31); // #1F1F1F |
| 205 | pub const GRAYSCALE_REASONING_RGB: (u8, u8, u8) = (38, 38, 38); // #262626 |
| 206 | pub const GRAYSCALE_SUCCESS_RGB: (u8, u8, u8) = (34, 34, 34); // #222222 |
| 207 | pub const GRAYSCALE_ERROR_RGB: (u8, u8, u8) = (42, 42, 42); // #2A2A2A |
| 208 | pub const GRAYSCALE_TEXT_BODY_RGB: (u8, u8, u8) = (236, 236, 236); // #ECECEC |
| 209 | pub const GRAYSCALE_TEXT_MUTED_RGB: (u8, u8, u8) = (180, 180, 180); // #B4B4B4 |
| 210 | pub const GRAYSCALE_TEXT_HINT_RGB: (u8, u8, u8) = (138, 138, 138); // #8A8A8A |
| 211 | pub const GRAYSCALE_TEXT_SOFT_RGB: (u8, u8, u8) = (220, 220, 220); // #DCDCDC |
| 212 | pub const GRAYSCALE_BORDER_RGB: (u8, u8, u8) = (96, 96, 96); // #606060 |
| 213 | pub const GRAYSCALE_SELECTION_RGB: (u8, u8, u8) = (62, 62, 62); // #3E3E3E |
| 214 | |
| 215 | pub const MATRIX_SURFACE_RGB: (u8, u8, u8) = (0, 10, 0); // #000A00 |
| 216 | pub const MATRIX_ELEVATED_RGB: (u8, u8, u8) = (0, 51, 0); // #003300 |
| 217 | pub const MATRIX_SELECTION_RGB: (u8, u8, u8) = (0, 51, 0); // #003300 |
| 218 | pub const MATRIX_TEXT_BODY_RGB: (u8, u8, u8) = (136, 255, 136); // #88FF88 |
| 219 | pub const MATRIX_TEXT_MUTED_RGB: (u8, u8, u8) = (0, 169, 0); // #00A900, lifted for 4.5:1 |
| 220 | pub const MATRIX_TEXT_HINT_RGB: (u8, u8, u8) = (0, 135, 0); // #008700, lifted for 3:1 |
| 221 | pub const MATRIX_TEXT_SOFT_RGB: (u8, u8, u8) = (221, 255, 221); // #DDFFDD |
| 222 | pub const MATRIX_TEXT_DIM_RGB: (u8, u8, u8) = (0, 108, 0); // #006C00, lifted for 3:1 |
| 223 | pub const MATRIX_BORDER_RGB: (u8, u8, u8) = (0, 204, 0); // #00CC00 |
| 224 | |
| 225 | // Shoreline — the product-client palette, shared with the GPUI desktop. |
| 226 | // |
| 227 | // Warm charcoal ground and warm paper sheet, one restrained blue, and the |
| 228 | // whale's ivory ink on both sides. This is the charcoal alternative to the |
| 229 | // terminal's navy "Underwater" default in 0.10.0. The |
| 230 | // 0.10.0 action pair uses glacial blue on charcoal and deep ocean blue on |
| 231 | // paper. Shared tokens keep the terminal, desktop, and web in one system. |
| 232 | // |
| 233 | // Every pair audited by `contrast::theme_contrast_violations` clears its |
| 234 | // floor: body roles clear 4.5:1 on all four surfaces, hint/dim and the |
| 235 | // status roles clear 3:1. |
| 236 | pub const SHORELINE_SURFACE_RGB: (u8, u8, u8) = (33, 31, 35); // #211F23 warm charcoal field |
| 237 | pub const SHORELINE_PANEL_RGB: (u8, u8, u8) = (43, 40, 46); // #2B282E raised plate |
| 238 | pub const SHORELINE_ELEVATED_RGB: (u8, u8, u8) = (53, 49, 58); // #35313A |
| 239 | pub const SHORELINE_COMPOSER_RGB: (u8, u8, u8) = (43, 40, 46); // #2B282E |
| 240 | pub const SHORELINE_CHROME_RGB: (u8, u8, u8) = (26, 24, 28); // #1A181C recessed chrome |
| 241 | pub const SHORELINE_SELECTION_RGB: (u8, u8, u8) = (44, 70, 84); // #2C4654 deep ocean selection |
| 242 | pub const SHORELINE_TEXT_BODY_RGB: (u8, u8, u8) = (242, 236, 229); // #F2ECE5 |
| 243 | pub const SHORELINE_TEXT_SOFT_RGB: (u8, u8, u8) = (217, 210, 220); // #D9D2DC |
| 244 | pub const SHORELINE_TEXT_MUTED_RGB: (u8, u8, u8) = (176, 167, 178); // #B0A7B2 |
| 245 | pub const SHORELINE_TEXT_HINT_RGB: (u8, u8, u8) = (154, 145, 159); // #9A919F |
| 246 | pub const SHORELINE_TEXT_DIM_RGB: (u8, u8, u8) = (126, 117, 131); // #7E7583 |
| 247 | pub const SHORELINE_BORDER_RGB: (u8, u8, u8) = (73, 66, 77); // #49424D |
| 248 | pub const SHORELINE_ACTION_RGB: (u8, u8, u8) = (103, 184, 214); // #67B8D6 glacial blue — action and whale identity |
| 249 | pub const SHORELINE_LIVE_RGB: (u8, u8, u8) = (127, 214, 198); // #7FD6C6 the live lane |
| 250 | pub const SHORELINE_HUMAN_RGB: (u8, u8, u8) = (246, 196, 83); // #F6C453 Signal Gold, the human lane |
| 251 | pub const SHORELINE_ERROR_RGB: (u8, u8, u8) = (255, 143, 168); // #FF8FA8 |
| 252 | pub const SHORELINE_ERROR_HOVER_RGB: (u8, u8, u8) = (255, 166, 187); // #FFA6BB |
| 253 | pub const SHORELINE_ERROR_SURFACE_RGB: (u8, u8, u8) = (58, 32, 41); // #3A2029 |
| 254 | pub const SHORELINE_ERROR_TEXT_RGB: (u8, u8, u8) = (255, 220, 230); // #FFDCE6 |
| 255 | pub const SHORELINE_WARNING_RGB: (u8, u8, u8) = (240, 168, 104); // #F0A868 |
| 256 | pub const SHORELINE_SUCCESS_RGB: (u8, u8, u8) = (163, 217, 119); // #A3D977 |
| 257 | pub const SHORELINE_STATUS_WORKING_RGB: (u8, u8, u8) = SHORELINE_LIVE_RGB; |
| 258 | // Mode badges keep the shipped mode ramp: these four are proof-tested distinct |
| 259 | // from one another and from every semantic lane, and a mode badge is identity, |
| 260 | // not decoration. `mode_agent` must differ from `accent_primary` or |
| 261 | // `adapt::theme_semantic_foreground_role` resolves the action lane to a mode |
| 262 | // role (`ModeAgent`) before it ever reaches `Action`. |
| 263 | pub const SHORELINE_MODE_AGENT_RGB: (u8, u8, u8) = (126, 180, 232); // #7EB4E8 |
| 264 | pub const SHORELINE_MODE_YOLO_RGB: (u8, u8, u8) = (255, 112, 160); // #FF70A0 |
| 265 | pub const SHORELINE_MODE_PLAN_RGB: (u8, u8, u8) = (185, 220, 236); // #B9DCEC |
| 266 | pub const SHORELINE_MODE_OPERATE_RGB: (u8, u8, u8) = (173, 136, 255); // #AD88FF |
| 267 | pub const SHORELINE_DIFF_ADDED_FG_RGB: (u8, u8, u8) = (127, 214, 160); // #7FD6A0 |
| 268 | pub const SHORELINE_DIFF_ADDED_BG_RGB: (u8, u8, u8) = (30, 44, 37); // #1E2C25 |
| 269 | pub const SHORELINE_DIFF_DELETED_FG_RGB: (u8, u8, u8) = (255, 154, 171); // #FF9AAB |
| 270 | pub const SHORELINE_DIFF_DELETED_BG_RGB: (u8, u8, u8) = (51, 32, 42); // #33202A |
| 271 | |
| 272 | // Shoreline Light — the same system on warm paper. |
| 273 | pub const SHORELINE_LIGHT_SURFACE_RGB: (u8, u8, u8) = (245, 240, 233); // #F5F0E9 |
| 274 | pub const SHORELINE_LIGHT_PANEL_RGB: (u8, u8, u8) = (236, 229, 224); // #ECE5E0 |
| 275 | pub const SHORELINE_LIGHT_ELEVATED_RGB: (u8, u8, u8) = (255, 252, 247); // #FFFCF7 |
| 276 | pub const SHORELINE_LIGHT_COMPOSER_RGB: (u8, u8, u8) = (251, 247, 241); // #FBF7F1 |
| 277 | pub const SHORELINE_LIGHT_CHROME_RGB: (u8, u8, u8) = (237, 231, 224); // #EDE7E0 |
| 278 | pub const SHORELINE_LIGHT_SELECTION_RGB: (u8, u8, u8) = (201, 224, 231); // #C9E0E7 pale ocean selection |
| 279 | pub const SHORELINE_LIGHT_TEXT_BODY_RGB: (u8, u8, u8) = (48, 40, 50); // #302832 |
| 280 | pub const SHORELINE_LIGHT_TEXT_SOFT_RGB: (u8, u8, u8) = (74, 65, 76); // #4A414C |
| 281 | pub const SHORELINE_LIGHT_TEXT_MUTED_RGB: (u8, u8, u8) = (107, 96, 110); // #6B606E |
| 282 | pub const SHORELINE_LIGHT_TEXT_HINT_RGB: (u8, u8, u8) = (117, 112, 128); // #757080 |
| 283 | pub const SHORELINE_LIGHT_TEXT_DIM_RGB: (u8, u8, u8) = (138, 130, 144); // #8A8290 |
| 284 | pub const SHORELINE_LIGHT_BORDER_RGB: (u8, u8, u8) = (215, 206, 213); // #D7CED5 |
| 285 | pub const SHORELINE_LIGHT_ACTION_RGB: (u8, u8, u8) = (0, 102, 132); // #006684 deep ocean blue on warm paper |
| 286 | pub const SHORELINE_LIGHT_LIVE_RGB: (u8, u8, u8) = (31, 122, 107); // #1F7A6B |
| 287 | pub const SHORELINE_LIGHT_HUMAN_RGB: (u8, u8, u8) = (122, 85, 0); // #7A5500 Signal Gold at AA on paper |
| 288 | pub const SHORELINE_LIGHT_ERROR_RGB: (u8, u8, u8) = (180, 35, 90); // #B4235A |
| 289 | pub const SHORELINE_LIGHT_ERROR_SURFACE_RGB: (u8, u8, u8) = (251, 228, 236); // #FBE4EC |
| 290 | pub const SHORELINE_LIGHT_ERROR_TEXT_RGB: (u8, u8, u8) = (122, 18, 53); // #7A1235 |
| 291 | pub const SHORELINE_LIGHT_WARNING_RGB: (u8, u8, u8) = (143, 85, 20); // #8F5514 |
| 292 | pub const SHORELINE_LIGHT_SUCCESS_RGB: (u8, u8, u8) = (47, 107, 58); // #2F6B3A |
| 293 | pub const SHORELINE_LIGHT_MODE_AGENT_RGB: (u8, u8, u8) = (22, 54, 178); // #1636B2 distinct from LIGHT action |
| 294 | pub const SHORELINE_LIGHT_MODE_YOLO_RGB: (u8, u8, u8) = (181, 35, 90); // #B5235A |
| 295 | pub const SHORELINE_LIGHT_MODE_PLAN_RGB: (u8, u8, u8) = (52, 92, 128); // #345C80 |
| 296 | pub const SHORELINE_LIGHT_MODE_OPERATE_RGB: (u8, u8, u8) = (112, 71, 184); // #7047B8 |
| 297 | pub const SHORELINE_LIGHT_DIFF_ADDED_FG_RGB: (u8, u8, u8) = (31, 107, 69); // #1F6B45 |
| 298 | pub const SHORELINE_LIGHT_DIFF_ADDED_BG_RGB: (u8, u8, u8) = (226, 242, 230); // #E2F2E6 |
| 299 | pub const SHORELINE_LIGHT_DIFF_DELETED_FG_RGB: (u8, u8, u8) = (168, 40, 80); // #A82850 |
| 300 | pub const SHORELINE_LIGHT_DIFF_DELETED_BG_RGB: (u8, u8, u8) = (251, 230, 236); // #FBE6EC |
| 301 | |
| 302 | // Semantic colors |
| 303 | pub const BORDER_COLOR_RGB: (u8, u8, u8) = WHALE_BORDER_RGB; |
| 304 | |
| 305 | pub const WHALE_ACTION: Color = |
| 306 | Color::Rgb(WHALE_ACTION_RGB.0, WHALE_ACTION_RGB.1, WHALE_ACTION_RGB.2); |
| 307 | pub const WHALE_LIVE: Color = Color::Rgb( |
| 308 | WHALE_ACCENT_SECONDARY_RGB.0, |
| 309 | WHALE_ACCENT_SECONDARY_RGB.1, |
| 310 | WHALE_ACCENT_SECONDARY_RGB.2, |
| 311 | ); |
| 312 | pub const WHALE_HUMAN: Color = Color::Rgb(WHALE_HUMAN_RGB.0, WHALE_HUMAN_RGB.1, WHALE_HUMAN_RGB.2); |
| 313 | pub const WHALE_BG: Color = Color::Rgb(WHALE_BG_RGB.0, WHALE_BG_RGB.1, WHALE_BG_RGB.2); |
| 314 | pub const WHALE_CHROME: Color = |
| 315 | Color::Rgb(WHALE_CHROME_RGB.0, WHALE_CHROME_RGB.1, WHALE_CHROME_RGB.2); |
| 316 | pub const WHALE_PANEL: Color = Color::Rgb(WHALE_PANEL_RGB.0, WHALE_PANEL_RGB.1, WHALE_PANEL_RGB.2); |
| 317 | pub const WHALE_COMPOSER: Color = Color::Rgb( |
| 318 | WHALE_COMPOSER_RGB.0, |
| 319 | WHALE_COMPOSER_RGB.1, |
| 320 | WHALE_COMPOSER_RGB.2, |
| 321 | ); |
| 322 | pub const WHALE_ERROR: Color = Color::Rgb(WHALE_ERROR_RGB.0, WHALE_ERROR_RGB.1, WHALE_ERROR_RGB.2); |
| 323 | |
| 324 | pub const LIGHT_SURFACE: Color = Color::Rgb( |
| 325 | LIGHT_SURFACE_RGB.0, |
| 326 | LIGHT_SURFACE_RGB.1, |
| 327 | LIGHT_SURFACE_RGB.2, |
| 328 | ); |
| 329 | pub const LIGHT_PANEL: Color = Color::Rgb(LIGHT_PANEL_RGB.0, LIGHT_PANEL_RGB.1, LIGHT_PANEL_RGB.2); |
| 330 | pub const LIGHT_ELEVATED: Color = Color::Rgb( |
| 331 | LIGHT_ELEVATED_RGB.0, |
| 332 | LIGHT_ELEVATED_RGB.1, |
| 333 | LIGHT_ELEVATED_RGB.2, |
| 334 | ); |
| 335 | pub const LIGHT_REASONING: Color = Color::Rgb( |
| 336 | LIGHT_REASONING_RGB.0, |
| 337 | LIGHT_REASONING_RGB.1, |
| 338 | LIGHT_REASONING_RGB.2, |
| 339 | ); |
| 340 | pub const LIGHT_SUCCESS: Color = Color::Rgb( |
| 341 | LIGHT_SUCCESS_RGB.0, |
| 342 | LIGHT_SUCCESS_RGB.1, |
| 343 | LIGHT_SUCCESS_RGB.2, |
| 344 | ); |
| 345 | pub const LIGHT_SUCCESS_FG: Color = Color::Rgb( |
| 346 | LIGHT_SUCCESS_FG_RGB.0, |
| 347 | LIGHT_SUCCESS_FG_RGB.1, |
| 348 | LIGHT_SUCCESS_FG_RGB.2, |
| 349 | ); |
| 350 | pub const LIGHT_ERROR: Color = Color::Rgb(LIGHT_ERROR_RGB.0, LIGHT_ERROR_RGB.1, LIGHT_ERROR_RGB.2); |
| 351 | pub const LIGHT_TEXT_BODY: Color = Color::Rgb( |
| 352 | LIGHT_TEXT_BODY_RGB.0, |
| 353 | LIGHT_TEXT_BODY_RGB.1, |
| 354 | LIGHT_TEXT_BODY_RGB.2, |
| 355 | ); |
| 356 | pub const LIGHT_TEXT_MUTED: Color = Color::Rgb( |
| 357 | LIGHT_TEXT_MUTED_RGB.0, |
| 358 | LIGHT_TEXT_MUTED_RGB.1, |
| 359 | LIGHT_TEXT_MUTED_RGB.2, |
| 360 | ); |
| 361 | pub const LIGHT_TEXT_HINT: Color = Color::Rgb( |
| 362 | LIGHT_TEXT_HINT_RGB.0, |
| 363 | LIGHT_TEXT_HINT_RGB.1, |
| 364 | LIGHT_TEXT_HINT_RGB.2, |
| 365 | ); |
| 366 | pub const LIGHT_TEXT_SOFT: Color = Color::Rgb( |
| 367 | LIGHT_TEXT_SOFT_RGB.0, |
| 368 | LIGHT_TEXT_SOFT_RGB.1, |
| 369 | LIGHT_TEXT_SOFT_RGB.2, |
| 370 | ); |
| 371 | pub const LIGHT_ACTION: Color = |
| 372 | Color::Rgb(LIGHT_ACTION_RGB.0, LIGHT_ACTION_RGB.1, LIGHT_ACTION_RGB.2); |
| 373 | pub const LIGHT_LIVE: Color = Color::Rgb(LIGHT_LIVE_RGB.0, LIGHT_LIVE_RGB.1, LIGHT_LIVE_RGB.2); |
| 374 | pub const LIGHT_HUMAN: Color = Color::Rgb(LIGHT_HUMAN_RGB.0, LIGHT_HUMAN_RGB.1, LIGHT_HUMAN_RGB.2); |
| 375 | pub const LIGHT_WARNING: Color = Color::Rgb( |
| 376 | LIGHT_WARNING_RGB.0, |
| 377 | LIGHT_WARNING_RGB.1, |
| 378 | LIGHT_WARNING_RGB.2, |
| 379 | ); |
| 380 | pub const LIGHT_DANGER: Color = |
| 381 | Color::Rgb(LIGHT_DANGER_RGB.0, LIGHT_DANGER_RGB.1, LIGHT_DANGER_RGB.2); |
| 382 | pub const LIGHT_MODE_AGENT: Color = Color::Rgb( |
| 383 | LIGHT_MODE_AGENT_RGB.0, |
| 384 | LIGHT_MODE_AGENT_RGB.1, |
| 385 | LIGHT_MODE_AGENT_RGB.2, |
| 386 | ); |
| 387 | pub const LIGHT_MODE_YOLO: Color = Color::Rgb( |
| 388 | LIGHT_MODE_YOLO_RGB.0, |
| 389 | LIGHT_MODE_YOLO_RGB.1, |
| 390 | LIGHT_MODE_YOLO_RGB.2, |
| 391 | ); |
| 392 | pub const LIGHT_MODE_PLAN: Color = Color::Rgb( |
| 393 | LIGHT_MODE_PLAN_RGB.0, |
| 394 | LIGHT_MODE_PLAN_RGB.1, |
| 395 | LIGHT_MODE_PLAN_RGB.2, |
| 396 | ); |
| 397 | pub const LIGHT_OPERATE: Color = Color::Rgb( |
| 398 | LIGHT_OPERATE_RGB.0, |
| 399 | LIGHT_OPERATE_RGB.1, |
| 400 | LIGHT_OPERATE_RGB.2, |
| 401 | ); |
| 402 | pub const LIGHT_BORDER: Color = |
| 403 | Color::Rgb(LIGHT_BORDER_RGB.0, LIGHT_BORDER_RGB.1, LIGHT_BORDER_RGB.2); |
| 404 | pub const LIGHT_SELECTION_BG: Color = Color::Rgb( |
| 405 | LIGHT_SELECTION_RGB.0, |
| 406 | LIGHT_SELECTION_RGB.1, |
| 407 | LIGHT_SELECTION_RGB.2, |
| 408 | ); |
| 409 | pub const GRAYSCALE_SURFACE: Color = Color::Rgb( |
| 410 | GRAYSCALE_SURFACE_RGB.0, |
| 411 | GRAYSCALE_SURFACE_RGB.1, |
| 412 | GRAYSCALE_SURFACE_RGB.2, |
| 413 | ); |
| 414 | pub const GRAYSCALE_PANEL: Color = Color::Rgb( |
| 415 | GRAYSCALE_PANEL_RGB.0, |
| 416 | GRAYSCALE_PANEL_RGB.1, |
| 417 | GRAYSCALE_PANEL_RGB.2, |
| 418 | ); |
| 419 | pub const GRAYSCALE_ELEVATED: Color = Color::Rgb( |
| 420 | GRAYSCALE_ELEVATED_RGB.0, |
| 421 | GRAYSCALE_ELEVATED_RGB.1, |
| 422 | GRAYSCALE_ELEVATED_RGB.2, |
| 423 | ); |
| 424 | pub const GRAYSCALE_REASONING: Color = Color::Rgb( |
| 425 | GRAYSCALE_REASONING_RGB.0, |
| 426 | GRAYSCALE_REASONING_RGB.1, |
| 427 | GRAYSCALE_REASONING_RGB.2, |
| 428 | ); |
| 429 | pub const GRAYSCALE_SUCCESS: Color = Color::Rgb( |
| 430 | GRAYSCALE_SUCCESS_RGB.0, |
| 431 | GRAYSCALE_SUCCESS_RGB.1, |
| 432 | GRAYSCALE_SUCCESS_RGB.2, |
| 433 | ); |
| 434 | pub const GRAYSCALE_ERROR: Color = Color::Rgb( |
| 435 | GRAYSCALE_ERROR_RGB.0, |
| 436 | GRAYSCALE_ERROR_RGB.1, |
| 437 | GRAYSCALE_ERROR_RGB.2, |
| 438 | ); |
| 439 | pub const GRAYSCALE_TEXT_BODY: Color = Color::Rgb( |
| 440 | GRAYSCALE_TEXT_BODY_RGB.0, |
| 441 | GRAYSCALE_TEXT_BODY_RGB.1, |
| 442 | GRAYSCALE_TEXT_BODY_RGB.2, |
| 443 | ); |
| 444 | pub const GRAYSCALE_TEXT_MUTED: Color = Color::Rgb( |
| 445 | GRAYSCALE_TEXT_MUTED_RGB.0, |
| 446 | GRAYSCALE_TEXT_MUTED_RGB.1, |
| 447 | GRAYSCALE_TEXT_MUTED_RGB.2, |
| 448 | ); |
| 449 | pub const GRAYSCALE_TEXT_HINT: Color = Color::Rgb( |
| 450 | GRAYSCALE_TEXT_HINT_RGB.0, |
| 451 | GRAYSCALE_TEXT_HINT_RGB.1, |
| 452 | GRAYSCALE_TEXT_HINT_RGB.2, |
| 453 | ); |
| 454 | pub const GRAYSCALE_TEXT_SOFT: Color = Color::Rgb( |
| 455 | GRAYSCALE_TEXT_SOFT_RGB.0, |
| 456 | GRAYSCALE_TEXT_SOFT_RGB.1, |
| 457 | GRAYSCALE_TEXT_SOFT_RGB.2, |
| 458 | ); |
| 459 | pub const GRAYSCALE_BORDER: Color = Color::Rgb( |
| 460 | GRAYSCALE_BORDER_RGB.0, |
| 461 | GRAYSCALE_BORDER_RGB.1, |
| 462 | GRAYSCALE_BORDER_RGB.2, |
| 463 | ); |
| 464 | pub const GRAYSCALE_SELECTION_BG: Color = Color::Rgb( |
| 465 | GRAYSCALE_SELECTION_RGB.0, |
| 466 | GRAYSCALE_SELECTION_RGB.1, |
| 467 | GRAYSCALE_SELECTION_RGB.2, |
| 468 | ); |
| 469 | |
| 470 | pub const TEXT_BODY: Color = Color::Rgb( |
| 471 | WHALE_TEXT_BODY_RGB.0, |
| 472 | WHALE_TEXT_BODY_RGB.1, |
| 473 | WHALE_TEXT_BODY_RGB.2, |
| 474 | ); |
| 475 | pub const TEXT_SECONDARY: Color = Color::Rgb( |
| 476 | WHALE_TEXT_MUTED_RGB.0, |
| 477 | WHALE_TEXT_MUTED_RGB.1, |
| 478 | WHALE_TEXT_MUTED_RGB.2, |
| 479 | ); |
| 480 | pub const TEXT_HINT: Color = Color::Rgb( |
| 481 | WHALE_TEXT_HINT_RGB.0, |
| 482 | WHALE_TEXT_HINT_RGB.1, |
| 483 | WHALE_TEXT_HINT_RGB.2, |
| 484 | ); |
| 485 | pub const TEXT_ACCENT: Color = Color::Rgb( |
| 486 | WHALE_ACCENT_SECONDARY_RGB.0, |
| 487 | WHALE_ACCENT_SECONDARY_RGB.1, |
| 488 | WHALE_ACCENT_SECONDARY_RGB.2, |
| 489 | ); |
| 490 | pub const SELECTION_TEXT: Color = Color::Rgb( |
| 491 | WHALE_TEXT_BODY_RGB.0, |
| 492 | WHALE_TEXT_BODY_RGB.1, |
| 493 | WHALE_TEXT_BODY_RGB.2, |
| 494 | ); // Ivory — softer than pure white |
| 495 | pub const TEXT_SOFT: Color = Color::Rgb( |
| 496 | WHALE_TEXT_SOFT_RGB.0, |
| 497 | WHALE_TEXT_SOFT_RGB.1, |
| 498 | WHALE_TEXT_SOFT_RGB.2, |
| 499 | ); |
| 500 | pub const TEXT_REASONING: Color = Color::Rgb( |
| 501 | WHALE_REASONING_TEXT_RGB.0, |
| 502 | WHALE_REASONING_TEXT_RGB.1, |
| 503 | WHALE_REASONING_TEXT_RGB.2, |
| 504 | ); |
| 505 | |
| 506 | // Compatibility aliases for existing call sites. |
| 507 | pub const TEXT_PRIMARY: Color = TEXT_BODY; |
| 508 | pub const TEXT_MUTED: Color = TEXT_SECONDARY; |
| 509 | pub const TEXT_DIM: Color = TEXT_HINT; |
| 510 | pub const USER_BODY: Color = Color::Rgb(74, 222, 128); // #4ADE80 green |
| 511 | pub const LIGHT_USER_BODY: Color = LIGHT_SUCCESS_FG; |
| 512 | |
| 513 | // Compatibility semantic colors for UI theming |
| 514 | pub const BORDER_COLOR: Color = |
| 515 | Color::Rgb(BORDER_COLOR_RGB.0, BORDER_COLOR_RGB.1, BORDER_COLOR_RGB.2); |
| 516 | pub const BACKGROUND_DARK: Color = Color::Rgb(WHALE_BG_RGB.0, WHALE_BG_RGB.1, WHALE_BG_RGB.2); |
| 517 | pub const SURFACE_PANEL: Color = |
| 518 | Color::Rgb(WHALE_PANEL_RGB.0, WHALE_PANEL_RGB.1, WHALE_PANEL_RGB.2); |
| 519 | pub const SURFACE_ELEVATED: Color = Color::Rgb( |
| 520 | WHALE_ELEVATED_RGB.0, |
| 521 | WHALE_ELEVATED_RGB.1, |
| 522 | WHALE_ELEVATED_RGB.2, |
| 523 | ); |
| 524 | pub const SURFACE_REASONING: Color = Color::Rgb( |
| 525 | WHALE_REASONING_SURFACE_RGB.0, |
| 526 | WHALE_REASONING_SURFACE_RGB.1, |
| 527 | WHALE_REASONING_SURFACE_RGB.2, |
| 528 | ); |
| 529 | pub const SURFACE_REASONING_TINT: Color = Color::Rgb( |
| 530 | WHALE_REASONING_TINT_RGB.0, |
| 531 | WHALE_REASONING_TINT_RGB.1, |
| 532 | WHALE_REASONING_TINT_RGB.2, |
| 533 | ); |
| 534 | pub const SURFACE_REASONING_ACTIVE: Color = Color::Rgb(58, 46, 32); |
| 535 | pub const SURFACE_TOOL: Color = Color::Rgb( |
| 536 | WHALE_TOOL_SURFACE_RGB.0, |
| 537 | WHALE_TOOL_SURFACE_RGB.1, |
| 538 | WHALE_TOOL_SURFACE_RGB.2, |
| 539 | ); |
| 540 | pub const SURFACE_TOOL_ACTIVE: Color = Color::Rgb( |
| 541 | WHALE_TOOL_ACTIVE_RGB.0, |
| 542 | WHALE_TOOL_ACTIVE_RGB.1, |
| 543 | WHALE_TOOL_ACTIVE_RGB.2, |
| 544 | ); |
| 545 | pub const SURFACE_SUCCESS: Color = Color::Rgb(18, 42, 37); // dark teal tint |
| 546 | pub const SURFACE_ERROR: Color = Color::Rgb( |
| 547 | WHALE_ERROR_SURFACE_RGB.0, |
| 548 | WHALE_ERROR_SURFACE_RGB.1, |
| 549 | WHALE_ERROR_SURFACE_RGB.2, |
| 550 | ); |
| 551 | pub const DIFF_ADDED_BG: Color = Color::Rgb( |
| 552 | WHALE_DIFF_ADDED_BG_RGB.0, |
| 553 | WHALE_DIFF_ADDED_BG_RGB.1, |
| 554 | WHALE_DIFF_ADDED_BG_RGB.2, |
| 555 | ); |
| 556 | pub const DIFF_DELETED_BG: Color = Color::Rgb( |
| 557 | WHALE_DIFF_DELETED_BG_RGB.0, |
| 558 | WHALE_DIFF_DELETED_BG_RGB.1, |
| 559 | WHALE_DIFF_DELETED_BG_RGB.2, |
| 560 | ); |
| 561 | pub const DIFF_ADDED: Color = Color::Rgb( |
| 562 | WHALE_DIFF_ADDED_RGB.0, |
| 563 | WHALE_DIFF_ADDED_RGB.1, |
| 564 | WHALE_DIFF_ADDED_RGB.2, |
| 565 | ); |
| 566 | pub const ACCENT_REASONING_LIVE: Color = Color::Rgb( |
| 567 | WHALE_REASONING_TEXT_RGB.0, |
| 568 | WHALE_REASONING_TEXT_RGB.1, |
| 569 | WHALE_REASONING_TEXT_RGB.2, |
| 570 | ); |
| 571 | pub const ACCENT_TOOL_LIVE: Color = Color::Rgb( |
| 572 | WHALE_TOOL_LIVE_RGB.0, |
| 573 | WHALE_TOOL_LIVE_RGB.1, |
| 574 | WHALE_TOOL_LIVE_RGB.2, |
| 575 | ); |
| 576 | pub const ACCENT_TOOL_ISSUE: Color = Color::Rgb( |
| 577 | WHALE_TOOL_ISSUE_RGB.0, |
| 578 | WHALE_TOOL_ISSUE_RGB.1, |
| 579 | WHALE_TOOL_ISSUE_RGB.2, |
| 580 | ); |
| 581 | pub const TEXT_TOOL_OUTPUT: Color = Color::Rgb( |
| 582 | WHALE_TOOL_OUTPUT_RGB.0, |
| 583 | WHALE_TOOL_OUTPUT_RGB.1, |
| 584 | WHALE_TOOL_OUTPUT_RGB.2, |
| 585 | ); |
| 586 | |
| 587 | // Legacy status colors - keep for backward compatibility |
| 588 | pub const STATUS_SUCCESS: Color = Color::Rgb( |
| 589 | WHALE_SUCCESS_RGB.0, |
| 590 | WHALE_SUCCESS_RGB.1, |
| 591 | WHALE_SUCCESS_RGB.2, |
| 592 | ); |
| 593 | pub const STATUS_WARNING: Color = Color::Rgb( |
| 594 | WHALE_WARNING_RGB.0, |
| 595 | WHALE_WARNING_RGB.1, |
| 596 | WHALE_WARNING_RGB.2, |
| 597 | ); |
| 598 | pub const STATUS_ERROR: Color = Color::Rgb(WHALE_ERROR_RGB.0, WHALE_ERROR_RGB.1, WHALE_ERROR_RGB.2); |
| 599 | |
| 600 | // Mode-specific accent colors for mode badges |
| 601 | pub const MODE_AGENT: Color = Color::Rgb( |
| 602 | WHALE_MODE_AGENT_RGB.0, |
| 603 | WHALE_MODE_AGENT_RGB.1, |
| 604 | WHALE_MODE_AGENT_RGB.2, |
| 605 | ); |
| 606 | pub const MODE_YOLO: Color = Color::Rgb( |
| 607 | WHALE_MODE_YOLO_RGB.0, |
| 608 | WHALE_MODE_YOLO_RGB.1, |
| 609 | WHALE_MODE_YOLO_RGB.2, |
| 610 | ); |
| 611 | pub const MODE_PLAN: Color = Color::Rgb( |
| 612 | WHALE_MODE_PLAN_RGB.0, |
| 613 | WHALE_MODE_PLAN_RGB.1, |
| 614 | WHALE_MODE_PLAN_RGB.2, |
| 615 | ); |
| 616 | pub const MODE_OPERATE: Color = Color::Rgb( |
| 617 | WHALE_MODE_OPERATE_RGB.0, |
| 618 | WHALE_MODE_OPERATE_RGB.1, |
| 619 | WHALE_MODE_OPERATE_RGB.2, |
| 620 | ); |
| 621 | |
| 622 | pub const SELECTION_BG: Color = Color::Rgb( |
| 623 | WHALE_SELECTION_RGB.0, |
| 624 | WHALE_SELECTION_RGB.1, |
| 625 | WHALE_SELECTION_RGB.2, |
| 626 | ); |
| 627 | pub const COMPOSER_BG: Color = WHALE_COMPOSER; |
| 628 |