using SkiaSharp; namespace HC_APTBS.Services.Impl { /// /// Centralised visual constants for the PDF test report. /// All colours, font sizes, spacing, and chart dimensions live here /// so the report look-and-feel can be adjusted in one place. /// internal static class ReportTheme { // ── Colour palette (hex strings for QuestPDF, SKColor for charts) ───── /// Dark navy for section header bars. public const string HeaderNavy = "#1B2A4A"; /// Secondary grey for sub-headers and muted text. public const string HeaderGrey = "#4A4A4A"; /// Accent blue for highlights. public const string AccentBlue = "#2E5090"; /// Pass result — dark green text. public const string PassGreen = "#2E7D32"; /// Pass result — light green background. public const string PassGreenLight = "#E8F5E9"; /// Fail result — dark red text. public const string FailRed = "#C62828"; /// Fail result — light red background. public const string FailRedLight = "#FFEBEE"; /// Alternating table row stripe. public const string TableAltRow = "#F5F7FA"; /// Thin divider lines. public const string DividerLine = "#BDBDBD"; /// Error/warning row background. public const string WarningBg = "#FFF3E0"; /// Error/warning text. public const string WarningText = "#E65100"; // ── Chart-specific SKColors ─────────────────────────────────────────── /// Semi-transparent blue tolerance band. public static readonly SKColor ToleranceBand = new(46, 80, 144, 50); /// Amber dashed target line. public static readonly SKColor TargetLine = new(255, 111, 0); /// Blue data polyline. public static readonly SKColor SampleLine = new(21, 101, 192); /// Light grey chart gridlines and border. public static readonly SKColor ChartGrid = new(224, 224, 224); /// Chart background. public static readonly SKColor ChartBackground = SKColors.White; /// Green average line (pass). public static readonly SKColor AvgPassLine = new(46, 125, 50); /// Red average line (fail). public static readonly SKColor AvgFailLine = new(198, 40, 40); /// Chart axis label colour. public static readonly SKColor AxisLabel = new(97, 97, 97); // ── Font sizes (points) ─────────────────────────────────────────────── /// Report title. public const float TitleSize = 16f; /// Section header text (e.g. "PUMP IDENTIFICATION"). public const float SectionHeaderSize = 11f; /// Body / table cell text. public const float BodySize = 9f; /// Small captions and chart labels. public const float CaptionSize = 7f; /// Footer text. public const float FooterSize = 7f; // ── Spacing (points) ───────────────────────────────────────────────── /// Gap between major sections. public const float SectionGap = 10f; /// Gap between sub-sections (e.g. chart caption). public const float SubsectionGap = 6f; /// Table cell padding. public const float CellPad = 3f; // ── Chart dimensions (points) ───────────────────────────────────────── /// Chart render height inside the PDF. public const float ChartHeight = 160f; } }