WDP Part 10: Visual Presentation Guidelines
INFORMATIVE guidance on visual presentation for the Waddling Diagnostic Protocol.
Abstract#
This document provides INFORMATIVE (non-normative) guidance on visual presentation for the Waddling Diagnostic Protocol (WDP). It specifies RECOMMENDED emoji mappings, terminal colors, web colors (light and dark mode), and accessibility considerations for displaying WDP diagnostics in user interfaces.
Specification Navigation: See STRUCTURE for an overview of all WDP specification parts.
Conformance#
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.
1. Overview#
1.1 Purpose#
This document provides RECOMMENDED visual presentation guidelines for WDP diagnostic severities. These recommendations facilitate consistent, accessible user experiences across different platforms and interfaces.
Note: These guidelines are INFORMATIVE and NON-NORMATIVE. Implementations MAY use different visual representations while remaining WDP-compliant.
1.2 Scope#
This specification covers visual presentation for:
- Terminal/CLI applications (emoji and ANSI colors)
- Web interfaces (hex colors and backgrounds)
- IDEs and text editors
- Log viewers and monitoring dashboards
- Documentation and reports
1.3 Design Goals#
The visual presentation guidelines adhere to the following principles:
- Consistency: The same severity SHOULD appear similar across platforms
- Accessibility: Colors SHOULD be distinguishable by colorblind users
- Clarity: Visual distinction between severity levels MUST be maintained
- Cultural Sensitivity: Emoji SHOULD be culturally neutral
- Backwards Compatibility: Implementations SHOULD degrade gracefully without color support
2. Emoji Mapping#
2.1 Recommended Emoji#
| Severity | Emoji | Unicode | Name | Meaning |
|---|---|---|---|---|
| E | β | U+274C | Cross mark - operation failed | |
| B | π« | U+1F6AB | Prohibited - execution blocked | |
| C | π₯ | U+1F525 | Fire - severe issue requiring attention | |
| W | β οΈ | U+26A0 U+FE0F | Warning sign - potential issue | |
| H | π‘ | U+1F4A1 | Light bulb - helpful suggestion | |
| S | β
| U+2705 | Check mark button - operation succeeded | |
| K | βοΈ | U+2714 U+FE0F | Heavy check mark - task completed | |
| I | βΉοΈ | U+2139 U+FE0F | Information source - informational | |
| T | π | U+1F50D | Magnifying glass - execution trace |
2.2 Rationale#
Error (β) vs Blocked (π«):
- β indicates something went wrong (failure state)
- π« indicates something is preventing progress (blocked state)
Success (β ) vs Completed (βοΈ):
- β for primary success outcomes (bold, prominent)
- βοΈ for completion markers (subtler)
Critical (π₯):
- Fire emoji conveys urgency and severity
- Stands out visually without implying blocking
Help (π‘):
- Light bulb is universally understood as "helpful suggestion"
- Positive, constructive tone
2.3 Alternative Emoji#
If the recommended emoji are not available or don't render well, implementations MAY use:
| Severity | Emoji | Alternatives |
|---|---|---|
| E | βοΈβ | |
| B | πβΈοΈ | |
| C | β‘π¨ | |
| W | β‘β | |
| H | π¬π | |
| S | βπ | |
| K | βοΈπ | |
| I | ππ | |
| T | π¬ποΈ |
2.4 Terminal Considerations#
Emoji Rendering:
- Modern terminals (Windows Terminal, iTerm2, Kitty) render emoji correctly
- Older terminals may display emoji as boxes or double-width characters
- Implementations SHOULD provide a
--no-emojior--plainflag
Width Handling:
- Most emoji are double-width characters
- Implementations SHOULD use padding/spacing to align text properly
- Consider using ASCII alternatives for strict column alignment
3. Terminal Colors (ANSI)#
3.1 ANSI Color Codes#
| Severity | ANSI Code | Color | Style |
|---|---|---|---|
| Error (E) | \x1b[1;31m | Red | Bold |
| Blocked (B) | \x1b[31m | Red | Normal |
| Critical (C) | \x1b[1;33m | Yellow | Bold |
| Warning (W) | \x1b[33m | Yellow | Normal |
| Help (H) | \x1b[32m | Green | Normal |
| Success (S) | \x1b[1;32m | Green | Bold |
| Completed (K) | \x1b[32m | Green | Normal |
| Info (I) | \x1b[36m | Cyan | Normal |
| Trace (T) | \x1b[2;34m | Blue | Dim |
Reset: \x1b[0m (always reset after colored text)
3.2 Color Scheme Rationale#
- Red Family (Error, Blocked): Error uses bold red for maximum attention; Blocked uses regular red.
- Yellow Family (Critical, Warning): Critical uses bold yellow/orange; Warning uses regular yellow.
- Green Family (Success, Completed, Help): Success uses bold green; others use regular green.
- Blue/Cyan (Info, Trace): Info uses cyan; Trace uses dim blue.
3.3 Colorblind Considerations#
This color scheme has been tested for:
- Protanopia (red-blind): Bold/dim styles help distinguish severities
- Deuteranopia (green-blind): Yellow/cyan/blue remain distinct
- Tritanopia (blue-blind): Red/yellow/green remain distinct
Additional Recommendations:
- Always include emoji or text labels, not color alone
- Use bold/dim styles to add contrast
- Provide a
--no-colorflag for terminals without color support
3.4 Example ANSI Usage#
# Error (bold red)
echo -e "\x1b[1;31mβ Error:\x1b[0m Operation failed"
# Warning (yellow)
echo -e "\x1b[33mβ οΈ Warning:\x1b[0m Quota at 85%"
# Success (bold green)
echo -e "\x1b[1;32mβ
Success:\x1b[0m Build complete"
# Info (cyan)
echo -e "\x1b[36mβΉοΈ Info:\x1b[0m Server started on port 8080"4. Web Colors (Hex)#
4.1 Foreground Colors#
These hex colors are designed for text and icons in web interfaces. Values are from Radix Colors step 11 (text) or step 9 (bold/emphasis):
| Severity | Foreground Hex | RGB | Swatch | Usage |
|---|---|---|---|---|
| E | #ce2c31 | rgb(206, 44, 49) | Dark red - strong, serious (red-11) | |
| B | #dc3e42 | rgb(220, 62, 66) | Red - blocked state (red-10) | |
| C | #cc4e00 | rgb(204, 78, 0) | Orange - urgent attention (orange-11) | |
| W | #ab6400 | rgb(171, 100, 0) | Amber - caution (amber-11) | |
| H | #218358 | rgb(33, 131, 88) | Green - helpful (green-11) | |
| S | #30a46c | rgb(48, 164, 108) | Bright green - positive (green-9) | |
| K | #008573 | rgb(0, 133, 115) | Teal - completed (teal-11) | |
| I | #0d74ce | rgb(13, 116, 206) | Blue - informational (blue-11) | |
| T | #60646c | rgb(96, 100, 108) | Gray - low priority (slate-11) |
4.2 Color Palette Rationale#
This palette is derived from Radix Colors, selected for accessibility (WCAG AA), perceptual consistency, and P3 wide-gamut support.
Step Usage:
- Step 11: Primary text color (low-contrast, accessible)
- Step 9-10: Bold/emphasized text or solid backgrounds
- Step 3: Subtle component backgrounds
4.3 CSS Examples (Light Mode)#
/* Severity text colors - Light Mode (Radix Colors step 11/9) */
.severity-error { color: #ce2c31; } /* red-11 */
.severity-blocked { color: #dc3e42; } /* red-10 */
.severity-critical { color: #cc4e00; } /* orange-11 */
.severity-warning { color: #ab6400; } /* amber-11 */
.severity-help { color: #218358; } /* green-11 */
.severity-success { color: #30a46c; } /* green-9 */
.severity-completed { color: #008573; } /* teal-11 */
.severity-info { color: #0d74ce; } /* blue-11 */
.severity-trace { color: #60646c; } /* slate-11 */4.4 Dark Mode Foreground Colors#
For dark backgrounds, use the Radix Colors dark scale values. These are designed as matched pairs with the light scale to maintain perceptual consistency:
| Severity | Foreground Hex | RGB | Swatch | Usage |
|---|---|---|---|---|
| E | #ff9592 | rgb(255, 149, 146) | Bright red (red-11 dark) | |
| B | #ec5d5e | rgb(236, 93, 94) | Light red (red-10 dark) | |
| C | #ffa057 | rgb(255, 160, 87) | Bright orange (orange-11 dark) | |
| W | #ffca16 | rgb(255, 202, 22) | Bright amber (amber-11 dark) | |
| H | #3dd68c | rgb(61, 214, 140) | Bright green (green-11 dark) | |
| S | #33b074 | rgb(51, 176, 116) | Light green (green-10 dark) | |
| K | #0bd8b6 | rgb(11, 216, 182) | Bright teal (teal-11 dark) | |
| I | #70b8ff | rgb(112, 184, 255) | Light blue (blue-11 dark) | |
| T | #b0b4ba | rgb(176, 180, 186) | Light gray (slate-11 dark) |
4.5 CSS Examples (Dark Mode)#
/* Severity text colors - Dark Mode (Radix Colors dark scale step 11/10) */
@media (prefers-color-scheme: dark) {
.severity-error { color: #ff9592; } /* red-11 (dark) */
.severity-blocked { color: #ec5d5e; } /* red-10 (dark) */
.severity-critical { color: #ffa057; } /* orange-11 (dark) */
.severity-warning { color: #ffca16; } /* amber-11 (dark) */
.severity-help { color: #3dd68c; } /* green-11 (dark) */
.severity-success { color: #33b074; } /* green-10 (dark) */
.severity-completed { color: #0bd8b6; } /* teal-11 (dark) */
.severity-info { color: #70b8ff; } /* blue-11 (dark) */
.severity-trace { color: #b0b4ba; } /* slate-11 (dark) */
}4.6 CSS Custom Properties (Recommended)#
Using CSS custom properties enables easy theme switching. Values from Radix Colors:
:root {
/* Light mode (default) - Radix Colors step 11/9 */
--severity-error: #ce2c31; /* red-11 */
--severity-blocked: #dc3e42; /* red-10 */
--severity-critical: #cc4e00; /* orange-11 */
--severity-warning: #ab6400; /* amber-11 */
--severity-help: #218358; /* green-11 */
--severity-success: #30a46c; /* green-9 */
--severity-completed: #008573; /* teal-11 */
--severity-info: #0d74ce; /* blue-11 */
--severity-trace: #60646c; /* slate-11 */
}
@media (prefers-color-scheme: dark) {
:root {
/* Dark mode - Radix Colors dark scale step 11/10 */
--severity-error: #ff9592; /* red-11 (dark) */
--severity-blocked: #ec5d5e; /* red-10 (dark) */
--severity-critical: #ffa057; /* orange-11 (dark) */
--severity-warning: #ffca16; /* amber-11 (dark) */
--severity-help: #3dd68c; /* green-11 (dark) */
--severity-success: #33b074; /* green-10 (dark) */
--severity-completed: #0bd8b6; /* teal-11 (dark) */
--severity-info: #70b8ff; /* blue-11 (dark) */
--severity-trace: #b0b4ba; /* slate-11 (dark) */
}
}
/* Usage */
.severity-error { color: var(--severity-error); }
.severity-warning { color: var(--severity-warning); }5. Background Colors#
5.1 Light Mode Background Palette#
Light, subtle backgrounds for badges, chips, and callout boxes on light themes. Values are from Radix Colors step 3:
| Severity | Background Hex | RGB | Swatch | Usage |
|---|---|---|---|---|
| E | #feebec | rgb(254, 235, 236) | Very light red/pink (red-3) | |
| B | #ffdbdc | rgb(255, 219, 220) | Light red/pink (red-4) | |
| C | #ffefd6 | rgb(255, 239, 214) | Light orange (orange-3) | |
| W | #fff7c2 | rgb(255, 247, 194) | Light amber (amber-3) | |
| H | #e6f6eb | rgb(230, 246, 235) | Light green (green-3) | |
| S | #d6f1df | rgb(214, 241, 223) | Very light green (green-4) | |
| K | #e0f8f3 | rgb(224, 248, 243) | Light teal (teal-3) | |
| I | #e6f4fe | rgb(230, 244, 254) | Light blue (blue-3) | |
| T | #f0f0f3 | rgb(240, 240, 243) | Light gray (slate-3) |
5.2 Dark Mode Background Palette#
Dark, muted backgrounds for badges, chips, and callout boxes on dark themes. Values are from Radix Colors dark scale step 3:
| Severity | Background Hex | RGB | Swatch | Usage |
|---|---|---|---|---|
| E | #3b1219 | rgb(59, 18, 25) | Dark red (red-3 dark) | |
| B | #500f1c | rgb(80, 15, 28) | Dark red/maroon (red-4 dark) | |
| C | #331e0b | rgb(51, 30, 11) | Dark orange/brown (orange-3 dark) | |
| W | #302008 | rgb(48, 32, 8) | Dark amber/olive (amber-3 dark) | |
| H | #132d21 | rgb(19, 45, 33) | Dark green (green-3 dark) | |
| S | #113b29 | rgb(17, 59, 41) | Dark green (green-4 dark) | |
| K | #0d2d2a | rgb(13, 45, 42) | Dark teal (teal-3 dark) | |
| I | #0d2847 | rgb(13, 40, 71) | Dark blue (blue-3 dark) | |
| T | #212225 | rgb(33, 34, 37) | Dark gray (slate-3 dark) |
5.3 Background Usage (Light Mode)#
Badges/Chips:
.badge-error {
color: #ce2c31; /* red-11 */
background-color: #feebec; /* red-3 */
border: 1px solid #fdbdbe; /* red-6 */
}
.badge-success {
color: #218358; /* green-11 */
background-color: #e6f6eb; /* green-3 */
border: 1px solid #adddc0; /* green-6 */
}Callout Boxes:
.alert-warning {
color: #ab6400; /* amber-11 */
background-color: #fff7c2; /* amber-3 */
border-left: 4px solid #e9c162; /* amber-7 */
padding: 1rem;
}5.4 Background Usage (Dark Mode)#
@media (prefers-color-scheme: dark) {
.badge-error {
color: #ff9592; /* red-11 (dark) */
background-color: #3b1219; /* red-3 (dark) */
border: 1px solid #72232d; /* red-6 (dark) */
}
.badge-success {
color: #3dd68c; /* green-11 (dark) */
background-color: #132d21; /* green-3 (dark) */
border: 1px solid #20573e; /* green-6 (dark) */
}
.alert-warning {
color: #ffca16; /* amber-11 (dark) */
background-color: #302008; /* amber-3 (dark) */
border-left: 4px solid #714f19; /* amber-7 (dark) */
padding: 1rem;
}
}5.5 Background CSS Custom Properties#
:root {
/* Light mode backgrounds (default) - Radix Colors step 3/4 */
--bg-error: #feebec; /* red-3 */
--bg-blocked: #ffdbdc; /* red-4 */
--bg-critical: #ffefd6; /* orange-3 */
--bg-warning: #fff7c2; /* amber-3 */
--bg-help: #e6f6eb; /* green-3 */
--bg-success: #d6f1df; /* green-4 */
--bg-completed: #e0f8f3; /* teal-3 */
--bg-info: #e6f4fe; /* blue-3 */
--bg-trace: #f0f0f3; /* slate-3 */
}
@media (prefers-color-scheme: dark) {
:root {
/* Dark mode backgrounds - Radix Colors dark scale step 3/4 */
--bg-error: #3b1219; /* red-3 (dark) */
--bg-blocked: #500f1c; /* red-4 (dark) */
--bg-critical: #331e0b; /* orange-3 (dark) */
--bg-warning: #302008; /* amber-3 (dark) */
--bg-help: #132d21; /* green-3 (dark) */
--bg-success: #113b29; /* green-4 (dark) */
--bg-completed: #0d2d2a; /* teal-3 (dark) */
--bg-info: #0d2847; /* blue-3 (dark) */
--bg-trace: #212225; /* slate-3 (dark) */
}
}5.6 Contrast Requirements#
Light Mode: All foreground/background combinations using Radix Colors step 11 on step 3 meet WCAG AA standards:
| Severity | Foreground | Background | Radix Steps | WCAG AA |
|---|---|---|---|---|
| Error (E) | #ce2c31 | #feebec | 11 on 3 | β Pass |
| Blocked (B) | #dc3e42 | #ffdbdc | 11 on 3 | β Pass |
| Critical (C) | #cc4e00 | #ffefd6 | 11 on 3 | β Pass |
| Warning (W) | #ab6400 | #fff7c2 | 11 on 3 | β Pass |
| Help (H) | #218358 | #e6f6eb | 11 on 3 | β Pass |
| Success (S) | #30a46c | #d6f1df | 11 on 3 | β Pass |
| Completed (K) | #008573 | #e0f8f3 | 11 on 3 | β Pass |
| Info (I) | #0d74ce | #e6f4fe | 11 on 3 | β Pass |
| Trace (T) | #60646c | #f0f0f3 | 11 on 3 | β Pass |
Dark Mode: All foreground/background combinations using Radix Colors dark scale meet WCAG AA standards:
| Severity | Foreground | Background | Radix Steps | WCAG AA |
|---|---|---|---|---|
| Error (E) | #ff9592 | #3b1219 | 11 on 3 | β Pass |
| Blocked (B) | #ec5d5e | #500f1c | 11 on 3 | β Pass |
| Critical (C) | #ffa057 | #331e0b | 11 on 3 | β Pass |
| Warning (W) | #ffca16 | #302008 | 11 on 3 | β Pass |
| Help (H) | #3dd68c | #132d21 | 11 on 3 | β Pass |
| Success (S) | #33b074 | #113b29 | 11 on 3 | β Pass |
| Completed (K) | #0bd8b6 | #0d2d2a | 11 on 3 | β Pass |
| Info (I) | #70b8ff | #0d2847 | 11 on 3 | β Pass |
| Trace (T) | #b0b4ba | #212225 | 11 on 3 | β Pass |
WCAG Guidelines:
- AA Normal Text: 4.5:1 minimum
- AA Large Text: 3:1 minimum (18pt+ or 14pt+ bold)
- AAA Normal Text: 7:1 minimum
6. Implementation Examples#
6.1 Terminal (Rust)#
pub enum Severity {
Error, Warning, Critical, Blocked,
Success, Completed, Help, Info, Trace,
}
impl Severity {
pub const fn emoji(&self) -> &'static str {
match self {
Self::Error => "β",
Self::Blocked => "π«",
Self::Critical => "π₯",
Self::Warning => "β οΈ",
Self::Help => "π‘",
Self::Success => "β
",
Self::Completed => "βοΈ",
Self::Info => "βΉοΈ",
Self::Trace => "π",
}
}
pub const fn ansi_color(&self) -> &'static str {
match self {
Self::Error => "\x1b[1;31m",
Self::Blocked => "\x1b[31m",
Self::Critical => "\x1b[1;33m",
Self::Warning => "\x1b[33m",
Self::Help => "\x1b[32m",
Self::Success => "\x1b[1;32m",
Self::Completed => "\x1b[32m",
Self::Info => "\x1b[36m",
Self::Trace => "\x1b[2;34m",
}
}
pub const ANSI_RESET: &'static str = "\x1b[0m";
}
// Usage
println!("{} {}{}{} Operation failed",
Severity::Error.emoji(),
Severity::Error.ansi_color(),
"Error:",
Severity::ANSI_RESET
);6.2 Web (TypeScript/React)#
interface SeverityStyle {
emoji: string;
color: string;
bgColor: string;
}
const SEVERITY_STYLES: Record<string, SeverityStyle> = {
// Light mode Radix Colors
E: { emoji: 'β', color: '#ce2c31', bgColor: '#feebec' }, // red-11, red-3
W: { emoji: 'β οΈ', color: '#ab6400', bgColor: '#fff7c2' }, // amber-11, amber-3
C: { emoji: 'π₯', color: '#cc4e00', bgColor: '#ffefd6' }, // orange-11, orange-3
B: { emoji: 'π«', color: '#dc3e42', bgColor: '#ffdbdc' }, // red-10, red-4
S: { emoji: 'β
', color: '#30a46c', bgColor: '#d6f1df' }, // green-9, green-4
K: { emoji: 'βοΈ', color: '#008573', bgColor: '#e0f8f3' }, // teal-11, teal-3
H: { emoji: 'π‘', color: '#218358', bgColor: '#e6f6eb' }, // green-11, green-3
I: { emoji: 'βΉοΈ', color: '#0d74ce', bgColor: '#e6f4fe' }, // blue-11, blue-3
T: { emoji: 'π', color: '#60646c', bgColor: '#f0f0f3' }, // slate-11, slate-3
};
// React component
function DiagnosticBadge({ severity }: { severity: string }) {
const style = SEVERITY_STYLES[severity];
return (
<span style={{
color: style.color,
backgroundColor: style.bgColor,
padding: '0.25rem 0.5rem',
borderRadius: '0.25rem',
fontSize: '0.875rem',
fontWeight: 500,
}}>
{style.emoji} {severity}
</span>
);
}6.3 CLI (Python)#
from enum import Enum
class Severity(Enum):
ERROR = 'E'
WARNING = 'W'
CRITICAL = 'C'
BLOCKED = 'B'
SUCCESS = 'S'
COMPLETED = 'K'
HELP = 'H'
INFO = 'I'
TRACE = 'T'
def emoji(self) -> str:
return {
'E': 'β', 'W': 'β οΈ', 'C': 'π₯', 'B': 'π«',
'S': 'β
', 'K': 'βοΈ', 'H': 'π‘', 'I': 'βΉοΈ', 'T': 'π',
}[self.value]
def ansi_color(self) -> str:
return {
'E': '\x1b[1;31m', 'W': '\x1b[33m', 'C': '\x1b[1;33m',
'B': '\x1b[31m', 'S': '\x1b[1;32m', 'K': '\x1b[32m',
'H': '\x1b[32m', 'I': '\x1b[36m', 'T': '\x1b[2;34m',
}[self.value]
@staticmethod
def reset() -> str:
return '\x1b[0m'
def format_message(self, message: str) -> str:
return f"{self.emoji()} {self.ansi_color()}{self.name}:{self.reset()} {message}"
# Usage
print(Severity.ERROR.format_message("Operation failed"))
print(Severity.SUCCESS.format_message("Build complete"))7. Accessibility Considerations#
7.1 Color Blindness#
Recommendations:
- Never rely solely on color; always include emoji, text labels, or icons
- Test with colorblind simulators such as Coblis or Chrome DevTools
- Use multiple visual cues by combining color, emoji, text, and position
- Provide alternatives via
--no-colorand--no-emojiflags
Color Combinations to Avoid:
- Red/green only (protanopia/deuteranopia)
- Blue/yellow only (tritanopia)
7.2 Screen Readers#
Best Practices:
<!-- Good: Semantic HTML with ARIA -->
<div role="alert" aria-live="polite">
<span class="severity-icon" aria-label="Error">β</span>
<span class="severity-text">Error:</span>
<span class="diagnostic-message">Operation failed</span>
</div>
<!-- Better: Use visually-hidden text -->
<div role="alert">
<span class="sr-only">Error severity:</span>
<span aria-hidden="true">β</span>
<strong>Error:</strong> Operation failed
</div>7.3 High Contrast Mode#
Windows High Contrast:
- Emoji may render as outlines
- ANSI colors are overridden by system theme
- Implementations MUST ensure text labels are always present
CSS for High Contrast:
@media (prefers-contrast: high) {
.severity-error {
border: 2px solid currentColor;
font-weight: bold;
}
}8. Best Practices#
8.1 Consistency#
RECOMMENDED practices:
- Use the same emoji/color for a severity across the entire application
- Document the chosen palette in the project style guide
- Maintain consistent spacing and formatting
Practices to avoid:
- Mixing different emoji sets (e.g., β and βοΈ for errors)
- Changing colors based on context (error SHOULD always be red)
- Using custom emoji without fallbacks
8.2 Progressive Enhancement#
Fallback Strategy:
1. Full experience: Emoji + Color + Formatting
2. No emoji: ASCII + Color + Formatting
3. No color: ASCII + Text labels
4. Plain text: Severity code + MessageExample:
Level 1: β Error: Operation failed
Level 2: [E] Error: Operation failed (in red)
Level 3: [E] Error: Operation failed
Level 4: E.AUTH.TOKEN.001: Operation failed8.3 Terminal Detection#
// Check for color support
fn supports_color() -> bool {
std::env::var("NO_COLOR").is_err()
&& (atty::is(atty::Stream::Stdout)
|| std::env::var("FORCE_COLOR").is_ok())
}
// Check for emoji support
fn supports_emoji() -> bool {
std::env::var("NO_EMOJI").is_err()
&& !cfg!(target_os = "windows") // Or check Windows version
}8.4 Configuration#
Implementations SHOULD allow users to customize presentation:
# .wdpconfig
[display]
emoji = true
color = "auto" # auto, always, never
style = "default" # default, minimal, verbose
[colors]
# Radix Colors (light mode defaults)
error = "#ce2c31" # red-11
warning = "#ab6400" # amber-11
success = "#30a46c" # green-98.5 Testing#
Implementations SHOULD be tested under the following conditions:
- Light theme versus dark theme
- Different terminal emulators
- Colorblind simulators
- Screen readers
- High contrast mode
- CI/CD environments (often no color/emoji support)
Appendix A. Complete Reference Table#
Appendix A. Complete Reference Table
A.1 Light Mode
Radix Colors light scale:
| Severity | Code | Emoji | ANSI | Hex (FG) | Hex (BG) | Radix | Priority |
|---|---|---|---|---|---|---|---|
| Error | E | β | \\x1b[1;31m | #ce2c31 | #feebec | red 11/3 | 8 |
| Blocked | B | π« | \\x1b[31m | #dc3e42 | #ffdbdc | red 10/4 | 7 |
| Critical | C | π₯ | \\x1b[1;33m | #cc4e00 | #ffefd6 | orange 11/3 | 6 |
| Warning | W | β οΈ | \\x1b[33m | #ab6400 | #fff7c2 | amber 11/3 | 5 |
| Help | H | π‘ | \\x1b[32m | #218358 | #e6f6eb | green 11/3 | 4 |
| Success | S | β | \\x1b[1;32m | #30a46c | #d6f1df | green 9/4 | 3 |
| Completed | K | βοΈ | \\x1b[32m | #008573 | #e0f8f3 | teal 11/3 | 2 |
| Info | I | βΉοΈ | \\x1b[36m | #0d74ce | #e6f4fe | blue 11/3 | 1 |
| Trace | T | π | \\x1b[2;34m | #60646c | #f0f0f3 | slate 11/3 | 0 |
A.2 Dark Mode
Radix Colors dark scale:
| Severity | Code | Emoji | ANSI | Hex (FG) | Hex (BG) | Radix | Priority |
|---|---|---|---|---|---|---|---|
| Error | E | β | \\x1b[1;31m | #e74c3c | #3d1f1f | red 11 (dark) | 8 |
| Blocked | B | π« | \\x1b[31m | #ff6b6b | #4a2020 | red 10 (dark) | 7 |
| Critical | C | π₯ | \\x1b[1;33m | #f39c12 | #3d2e1a | orange 11 (dark) | 6 |
| Warning | W | β οΈ | \\x1b[33m | #f1c40f | #3d3520 | amber 11 (dark) | 5 |
| Help | H | π‘ | \\x1b[32m | #2ecc71 | #1e3d2a | green 11 (dark) | 4 |
| Success | S | β | \\x1b[1;32m | #58d68d | #1a3d26 | green 10 (dark) | 3 |
| Completed | K | βοΈ | \\x1b[32m | #1abc9c | #1a3d36 | teal 11 (dark) | 2 |
| Info | I | βΉοΈ | \\x1b[36m | #5dade2 | #1a2d3d | blue 11 (dark) | 1 |
| Trace | T | π | \\x1b[2;34m | #bdc3c7 | #2d2d2d | slate 11 (dark) | 0 |
Appendix B. Color Swatches#
Appendix B. Color Swatches
Please refer to the Radix Colors documentation for full visual swatches of the scales used (Red, Orange, Amber, Green, Teal, Blue, Slate).
Appendix C. References#
Appendix C. References
- Radix Colors: https://www.radix-ui.com/colors
- WCAG Contrast Guidelines: https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html
- ANSI Escape Codes: https://en.wikipedia.org/wiki/ANSI_escape_code
- Emoji Unicode Standard: https://unicode.org/emoji/charts/full-emoji-list.html