DocumentWDP-10
TitleVisual Presentation Guidelines
Version0.1.0-draft
Last Updated2025-12-25
StatusDraft
CategoryInformative (Non-Normative)
Created2025-11-30

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:

  1. Consistency: The same severity SHOULD appear similar across platforms
  2. Accessibility: Colors SHOULD be distinguishable by colorblind users
  3. Clarity: Visual distinction between severity levels MUST be maintained
  4. Cultural Sensitivity: Emoji SHOULD be culturally neutral
  5. Backwards Compatibility: Implementations SHOULD degrade gracefully without color support

2. Emoji Mapping#

2.1 Recommended Emoji#

SeverityEmojiUnicodeNameMeaning
E
❌
U+274CCross mark - operation failed
B
🚫
U+1F6ABProhibited - execution blocked
C
πŸ”₯
U+1F525Fire - severe issue requiring attention
W
⚠️
U+26A0 U+FE0FWarning sign - potential issue
H
πŸ’‘
U+1F4A1Light bulb - helpful suggestion
S
βœ…
U+2705Check mark button - operation succeeded
K
βœ”οΈ
U+2714 U+FE0FHeavy check mark - task completed
I
ℹ️
U+2139 U+FE0FInformation source - informational
T
πŸ”
U+1F50DMagnifying 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:

SeverityEmojiAlternatives
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-emoji or --plain flag

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#

SeverityANSI CodeColorStyle
Error (E)\x1b[1;31mRedBold
Blocked (B)\x1b[31mRedNormal
Critical (C)\x1b[1;33mYellowBold
Warning (W)\x1b[33mYellowNormal
Help (H)\x1b[32mGreenNormal
Success (S)\x1b[1;32mGreenBold
Completed (K)\x1b[32mGreenNormal
Info (I)\x1b[36mCyanNormal
Trace (T)\x1b[2;34mBlueDim

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-color flag for terminals without color support

3.4 Example ANSI Usage#

Bash
# 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):

SeverityForeground HexRGBSwatchUsage
E#ce2c31rgb(206, 44, 49)
Dark red - strong, serious (red-11)
B#dc3e42rgb(220, 62, 66)
Red - blocked state (red-10)
C#cc4e00rgb(204, 78, 0)
Orange - urgent attention (orange-11)
W#ab6400rgb(171, 100, 0)
Amber - caution (amber-11)
H#218358rgb(33, 131, 88)
Green - helpful (green-11)
S#30a46crgb(48, 164, 108)
Bright green - positive (green-9)
K#008573rgb(0, 133, 115)
Teal - completed (teal-11)
I#0d74cergb(13, 116, 206)
Blue - informational (blue-11)
T#60646crgb(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)#

Css
/* 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:

SeverityForeground HexRGBSwatchUsage
E#ff9592rgb(255, 149, 146)
Bright red (red-11 dark)
B#ec5d5ergb(236, 93, 94)
Light red (red-10 dark)
C#ffa057rgb(255, 160, 87)
Bright orange (orange-11 dark)
W#ffca16rgb(255, 202, 22)
Bright amber (amber-11 dark)
H#3dd68crgb(61, 214, 140)
Bright green (green-11 dark)
S#33b074rgb(51, 176, 116)
Light green (green-10 dark)
K#0bd8b6rgb(11, 216, 182)
Bright teal (teal-11 dark)
I#70b8ffrgb(112, 184, 255)
Light blue (blue-11 dark)
T#b0b4bargb(176, 180, 186)
Light gray (slate-11 dark)

4.5 CSS Examples (Dark Mode)#

Css
/* 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:

Css
: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:

SeverityBackground HexRGBSwatchUsage
E#feebecrgb(254, 235, 236)
Very light red/pink (red-3)
B#ffdbdcrgb(255, 219, 220)
Light red/pink (red-4)
C#ffefd6rgb(255, 239, 214)
Light orange (orange-3)
W#fff7c2rgb(255, 247, 194)
Light amber (amber-3)
H#e6f6ebrgb(230, 246, 235)
Light green (green-3)
S#d6f1dfrgb(214, 241, 223)
Very light green (green-4)
K#e0f8f3rgb(224, 248, 243)
Light teal (teal-3)
I#e6f4fergb(230, 244, 254)
Light blue (blue-3)
T#f0f0f3rgb(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:

SeverityBackground HexRGBSwatchUsage
E#3b1219rgb(59, 18, 25)
Dark red (red-3 dark)
B#500f1crgb(80, 15, 28)
Dark red/maroon (red-4 dark)
C#331e0brgb(51, 30, 11)
Dark orange/brown (orange-3 dark)
W#302008rgb(48, 32, 8)
Dark amber/olive (amber-3 dark)
H#132d21rgb(19, 45, 33)
Dark green (green-3 dark)
S#113b29rgb(17, 59, 41)
Dark green (green-4 dark)
K#0d2d2argb(13, 45, 42)
Dark teal (teal-3 dark)
I#0d2847rgb(13, 40, 71)
Dark blue (blue-3 dark)
T#212225rgb(33, 34, 37)
Dark gray (slate-3 dark)

5.3 Background Usage (Light Mode)#

Badges/Chips:

Css
.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:

Css
.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)#

Css
@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#

Css
: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:

SeverityForegroundBackgroundRadix StepsWCAG AA
Error (E)#ce2c31#feebec11 on 3βœ“ Pass
Blocked (B)#dc3e42#ffdbdc11 on 3βœ“ Pass
Critical (C)#cc4e00#ffefd611 on 3βœ“ Pass
Warning (W)#ab6400#fff7c211 on 3βœ“ Pass
Help (H)#218358#e6f6eb11 on 3βœ“ Pass
Success (S)#30a46c#d6f1df11 on 3βœ“ Pass
Completed (K)#008573#e0f8f311 on 3βœ“ Pass
Info (I)#0d74ce#e6f4fe11 on 3βœ“ Pass
Trace (T)#60646c#f0f0f311 on 3βœ“ Pass

Dark Mode: All foreground/background combinations using Radix Colors dark scale meet WCAG AA standards:

SeverityForegroundBackgroundRadix StepsWCAG AA
Error (E)#ff9592#3b121911 on 3βœ“ Pass
Blocked (B)#ec5d5e#500f1c11 on 3βœ“ Pass
Critical (C)#ffa057#331e0b11 on 3βœ“ Pass
Warning (W)#ffca16#30200811 on 3βœ“ Pass
Help (H)#3dd68c#132d2111 on 3βœ“ Pass
Success (S)#33b074#113b2911 on 3βœ“ Pass
Completed (K)#0bd8b6#0d2d2a11 on 3βœ“ Pass
Info (I)#70b8ff#0d284711 on 3βœ“ Pass
Trace (T)#b0b4ba#21222511 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)#

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)#

Typescript
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)#

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:

  1. Never rely solely on color; always include emoji, text labels, or icons
  2. Test with colorblind simulators such as Coblis or Chrome DevTools
  3. Use multiple visual cues by combining color, emoji, text, and position
  4. Provide alternatives via --no-color and --no-emoji flags

Color Combinations to Avoid:

  • Red/green only (protanopia/deuteranopia)
  • Blue/yellow only (tritanopia)

7.2 Screen Readers#

Best Practices:

Html
<!-- 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:

Css
@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 + Message

Example:

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 failed

8.3 Terminal Detection#

Rust
// 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:

Toml
# .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-9

8.5 Testing#

Implementations SHOULD be tested under the following conditions:

  1. Light theme versus dark theme
  2. Different terminal emulators
  3. Colorblind simulators
  4. Screen readers
  5. High contrast mode
  6. 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:

SeverityCodeEmojiANSIHex (FG)Hex (BG)RadixPriority
ErrorE❌\\x1b[1;31m#ce2c31#feebecred 11/38
BlockedB🚫\\x1b[31m#dc3e42#ffdbdcred 10/47
CriticalCπŸ”₯\\x1b[1;33m#cc4e00#ffefd6orange 11/36
WarningW⚠️\\x1b[33m#ab6400#fff7c2amber 11/35
HelpHπŸ’‘\\x1b[32m#218358#e6f6ebgreen 11/34
SuccessSβœ…\\x1b[1;32m#30a46c#d6f1dfgreen 9/43
CompletedKβœ”οΈ\\x1b[32m#008573#e0f8f3teal 11/32
InfoIℹ️\\x1b[36m#0d74ce#e6f4feblue 11/31
TraceTπŸ”\\x1b[2;34m#60646c#f0f0f3slate 11/30

A.2 Dark Mode

Radix Colors dark scale:

SeverityCodeEmojiANSIHex (FG)Hex (BG)RadixPriority
ErrorE❌\\x1b[1;31m#e74c3c#3d1f1fred 11 (dark)8
BlockedB🚫\\x1b[31m#ff6b6b#4a2020red 10 (dark)7
CriticalCπŸ”₯\\x1b[1;33m#f39c12#3d2e1aorange 11 (dark)6
WarningW⚠️\\x1b[33m#f1c40f#3d3520amber 11 (dark)5
HelpHπŸ’‘\\x1b[32m#2ecc71#1e3d2agreen 11 (dark)4
SuccessSβœ…\\x1b[1;32m#58d68d#1a3d26green 10 (dark)3
CompletedKβœ”οΈ\\x1b[32m#1abc9c#1a3d36teal 11 (dark)2
InfoIℹ️\\x1b[36m#5dade2#1a2d3dblue 11 (dark)1
TraceTπŸ”\\x1b[2;34m#bdc3c7#2d2d2dslate 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

End of Specification