using Spectre.Console; namespace Sdt.Tui; /// /// SDT phosphor-green colour palette. /// Primary text is classic terminal phosphor (#00FF41). /// Modern accent colours are kept for highlights and status. /// internal static class Theme { // ── Hex colour constants (use in Spectre markup strings) ───────────────── public const string Green = "#00ff41"; // primary phosphor — all normal text public const string GreenDim = "#005c1b"; // muted — borders, secondary info public const string GreenBold = "#a8ff90"; // bright — selections, emphasis public const string Amber = "#ffb300"; // warnings / group titles public const string Red = "#ff4040"; // errors public const string Ghost = "#003d12"; // near-invisible — decorative scanlines // ── Spectre Color instances (for FigletText, Rule styles, etc.) ────────── public static readonly Color GreenColor = new(0, 255, 65); public static readonly Color GreenDimColor = new(0, 92, 27); public static readonly Color GreenBoldColor = new(168, 255, 144); public static readonly Color AmberColor = new(255, 179, 0); public static readonly Color RedColor = new(255, 64, 64); // ── Pre-built Style objects ─────────────────────────────────────────────── public static readonly Style PrimaryStyle = new(GreenColor); public static readonly Style DimStyle = new(GreenDimColor); public static readonly Style BrightStyle = new(GreenBoldColor, decoration: Decoration.Bold); public static readonly Style AmberStyle = new(AmberColor); public static readonly Style RedStyle = new(RedColor, decoration: Decoration.Bold); // ── Markup helper methods (auto-escape user content) ───────────────────── public static string G(string t) => $"[{Green}]{Markup.Escape(t)}[/]"; public static string Faint(string t) => $"[{GreenDim}]{Markup.Escape(t)}[/]"; public static string Bold(string t) => $"[bold {GreenBold}]{Markup.Escape(t)}[/]"; public static string Warn(string t) => $"[{Amber}]{Markup.Escape(t)}[/]"; public static string Err(string t) => $"[bold {Red}]{Markup.Escape(t)}[/]"; public static string Ok(string t) => $"[bold {Green}]✓ {Markup.Escape(t)}[/]"; public static string Fail(string t) => $"[bold {Red}]✗ {Markup.Escape(t)}[/]"; // ── Shared UI components ────────────────────────────────────────────────── public static Rule SectionRule(string? title = null) => title is null ? new Rule().RuleStyle(DimStyle) : new Rule($"[bold {GreenBold}]{Markup.Escape(title)}[/]").RuleStyle(DimStyle); public static Rule DimRule() => new Rule().RuleStyle(new Style(new Color(0, 40, 12))); public static Panel StatusPanel(string markup) => new Panel(markup) .BorderStyle(DimStyle) .Padding(1, 0); }