|
| 1 | +# Visual Language & Design System |
| 2 | + |
| 3 | +Design principles and visual elements for MEW Protocol CLI. |
| 4 | + |
| 5 | +## Aesthetic Direction |
| 6 | + |
| 7 | +**Pixel Art / Retro Terminal** |
| 8 | +- Avoid emojis in favor of ASCII art and Unicode box-drawing characters |
| 9 | +- Geometric shapes over organic forms |
| 10 | +- Clean, monospace-friendly layouts |
| 11 | +- Terminal-native feel |
| 12 | + |
| 13 | +## Character Palette |
| 14 | + |
| 15 | +### Envelope & Message Markers |
| 16 | + |
| 17 | +**Current Implementation:** |
| 18 | +- `◆` - Chat messages (filled diamond) |
| 19 | +- `◇` - Regular envelopes (hollow diamond) |
| 20 | +- `✦` - Thinking/reasoning spinner (twinkling effect) |
| 21 | + |
| 22 | +### Proposal Markers |
| 23 | + |
| 24 | +**Current Implementation:** |
| 25 | +- `╔╗ Proposal:` - top corners (pixel art box frame aesthetic) |
| 26 | + |
| 27 | +**Alternative options for consideration:** |
| 28 | + |
| 29 | +**Geometric shapes:** |
| 30 | +- `■ Proposal:` - solid square |
| 31 | +- `▪ Proposal:` - small solid square |
| 32 | +- `▸ Proposal:` - right-pointing triangle |
| 33 | +- `► Proposal:` - filled arrow |
| 34 | +- `⬢ Proposal:` - hexagon |
| 35 | + |
| 36 | +**ASCII/text-based:** |
| 37 | +- `[P] Proposal:` - bracketed P |
| 38 | +- `>> Proposal:` - double arrows |
| 39 | +- `:: Proposal:` - double colon |
| 40 | +- `* Proposal:` - asterisk |
| 41 | +- `! Proposal:` - exclamation mark |
| 42 | + |
| 43 | +**Border/frame style:** |
| 44 | +- `[◆] Proposal:` - diamond in brackets (consistent with envelope markers) |
| 45 | + |
| 46 | +### Diff Markers |
| 47 | + |
| 48 | +**Current Implementation:** |
| 49 | +- `+` - Additions (green) |
| 50 | +- `-` - Removals (red) |
| 51 | +- `...` - Truncation/omission indicator |
| 52 | + |
| 53 | +### Border Characters |
| 54 | + |
| 55 | +**Current Implementation:** |
| 56 | +- `▔` - Top/bottom borders (horizontal bar, full width) |
| 57 | +- `╭` `╮` `╰` `╯` - Rounded corners for boxes |
| 58 | +- `│` - Vertical borders |
| 59 | + |
| 60 | +### UI Navigation |
| 61 | + |
| 62 | +**Current Implementation:** |
| 63 | +- `>` - Selection caret (in proposal confirmation dialog) |
| 64 | +- `→` - Direction indicator (participant arrows, action indicators) |
| 65 | + |
| 66 | +### Status Indicators |
| 67 | + |
| 68 | +**Potential additions:** |
| 69 | +- `⚠` or `!` - Warning |
| 70 | +- `✓` or `√` or `[✓]` - Success/complete |
| 71 | +- `✗` or `[✗]` - Error/failed |
| 72 | +- `◐` `◓` `◑` `◒` - Loading/progress (quarter circles) |
| 73 | +- `⟳` or `↻` - Refresh/retry |
| 74 | + |
| 75 | +### Separators |
| 76 | + |
| 77 | +**Current Implementation:** |
| 78 | +- `▔▔▔...` - Full-width separator between messages |
| 79 | + |
| 80 | +**Potential additions:** |
| 81 | +- `─────` - Thin separator |
| 82 | +- `═════` - Thick separator |
| 83 | +- `┄┄┄┄┄` - Dashed separator |
| 84 | +- `· · ·` - Dotted separator |
| 85 | + |
| 86 | +## Color Usage |
| 87 | + |
| 88 | +### Message Types |
| 89 | +- **Chat content**: White (default) |
| 90 | +- **System messages**: Gray |
| 91 | +- **Reasoning thoughts**: Cyan |
| 92 | +- **Reasoning actions**: Magenta |
| 93 | +- **Proposals**: Cyan (bold) |
| 94 | +- **Details/metadata**: Gray (dimmed) |
| 95 | + |
| 96 | +### Diff Colors |
| 97 | +- **Additions**: Green (bright) |
| 98 | +- **Removals**: Red (bright) |
| 99 | +- **Context/omissions**: Gray |
| 100 | + |
| 101 | +### UI Elements |
| 102 | +- **Borders**: Theme-dependent |
| 103 | + - Chat messages: Magenta (or theme chatBorder) |
| 104 | + - Input box: Cyan (or theme inputBorder) |
| 105 | + - Proposal dialog: Yellow |
| 106 | + - Content boxes: Gray |
| 107 | + |
| 108 | +### Interactive Elements |
| 109 | +- **Selected option**: No inverse/highlight, just `>` caret |
| 110 | +- **Disabled elements**: Gray, dimmed |
| 111 | +- **Active/focused**: No special treatment (caret indicates selection) |
| 112 | + |
| 113 | +## Box Drawing Characters |
| 114 | + |
| 115 | +### Single Line |
| 116 | +``` |
| 117 | +┌─┬─┐ ╭─┬─╮ |
| 118 | +│ │ │ │ │ │ |
| 119 | +├─┼─┤ ├─┼─┤ |
| 120 | +│ │ │ │ │ │ |
| 121 | +└─┴─┘ ╰─┴─╯ |
| 122 | +``` |
| 123 | + |
| 124 | +### Double Line |
| 125 | +``` |
| 126 | +╔═╦═╗ |
| 127 | +║ ║ ║ |
| 128 | +╠═╬═╣ |
| 129 | +║ ║ ║ |
| 130 | +╚═╩═╝ |
| 131 | +``` |
| 132 | + |
| 133 | +### Mixed/Heavy |
| 134 | +``` |
| 135 | +┏━┳━┓ |
| 136 | +┃ ┃ ┃ |
| 137 | +┣━╋━┫ |
| 138 | +┃ ┃ ┃ |
| 139 | +┗━┻━┛ |
| 140 | +``` |
| 141 | + |
| 142 | +## Animation Patterns |
| 143 | + |
| 144 | +### Spinner Sequences |
| 145 | + |
| 146 | +**Thinking/Reasoning (current):** |
| 147 | +``` |
| 148 | +· → ◇ → ◈ → ◆ → ✦ → ◆ → ◈ → ◇ |
| 149 | +``` |
| 150 | +200ms interval, diamond twinkling effect |
| 151 | + |
| 152 | +**Alternative spinner ideas:** |
| 153 | +``` |
| 154 | +⠋ → ⠙ → ⠹ → ⠸ → ⠼ → ⠴ → ⠦ → ⠧ → ⠇ → ⠏ (braille dots) |
| 155 | +◐ → ◓ → ◑ → ◒ (quarter circles) |
| 156 | +▖ → ▘ → ▝ → ▗ (quadrants) |
| 157 | +⣾ → ⣽ → ⣻ → ⢿ → ⡿ → ⣟ → ⣯ → ⣷ (braille spinner) |
| 158 | +``` |
| 159 | + |
| 160 | +## Typography |
| 161 | + |
| 162 | +### Headers |
| 163 | +- **Bold** for emphasis (proposal titles, headers) |
| 164 | +- Regular weight for body text |
| 165 | +- No italic (not always monospace-safe) |
| 166 | + |
| 167 | +### Hierarchy |
| 168 | +1. **Bold + Color** - Primary headers (e.g., `📋 Proposal: Edit file`) |
| 169 | +2. **Color only** - Section labels (e.g., `File: /path/to/file`) |
| 170 | +3. **Gray** - Metadata, hints (e.g., "scroll up to see details") |
| 171 | +4. **Default** - Body content |
| 172 | + |
| 173 | +## Layout Patterns |
| 174 | + |
| 175 | +### Message Structure |
| 176 | +``` |
| 177 | +◇ participant → envelope-kind |
| 178 | + Content indented 6 spaces |
| 179 | + Multiple lines maintain indent |
| 180 | +``` |
| 181 | + |
| 182 | +### Proposal Structure |
| 183 | +``` |
| 184 | +◇ mew → mcp/proposal |
| 185 | +
|
| 186 | + ╔╗ Proposal: Tool name |
| 187 | + File: /path/to/file |
| 188 | + Metadata... |
| 189 | +
|
| 190 | + ╭───────────────────╮ |
| 191 | + │ Diff or content │ |
| 192 | + │ ... │ |
| 193 | + ╰───────────────────╯ |
| 194 | +``` |
| 195 | + |
| 196 | +### Dialog Structure |
| 197 | +``` |
| 198 | +╭────────────────────────────────────────╮ |
| 199 | +│ participant → method (tool) │ |
| 200 | +│ (scroll up to see proposal envelope) │ |
| 201 | +│ 1=Yes │ |
| 202 | +│ 2=Grant │ |
| 203 | +│ 3=No │ |
| 204 | +╰────────────────────────────────────────╯ |
| 205 | +``` |
| 206 | + |
| 207 | +### Full-Width Elements |
| 208 | +``` |
| 209 | +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ |
| 210 | +◆ you → |
| 211 | +message content |
| 212 | +
|
| 213 | +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ |
| 214 | +``` |
| 215 | + |
| 216 | +## Implementation Notes |
| 217 | + |
| 218 | +- All visual elements should work in monospace terminals |
| 219 | +- Test with various terminal color schemes (light/dark) |
| 220 | +- Maintain consistent spacing (6-space indent for content) |
| 221 | +- Use theme system for customizable colors |
| 222 | +- Avoid Unicode characters that might not render in all terminals (stick to widely-supported sets) |
| 223 | + |
| 224 | +## Future Considerations |
| 225 | + |
| 226 | +- **Badges/Tags**: For message metadata (e.g., `[APPROVED]`, `[DENIED]`) |
| 227 | +- **Progress bars**: For long-running operations |
| 228 | +- **Trees/Hierarchies**: For file structures or nested data |
| 229 | +- **Tables**: For structured data display |
| 230 | +- **Graphs**: ASCII art graphs for metrics/stats |
0 commit comments