using Godot; namespace Theriapolis.GodotHost.UI; /// /// Color, font, and spacing tokens lifted from /// CharacterCreator.zip/index.html's :root block. Variable /// names mirror the React prototype's CSS custom properties so the audit /// trail is readable: --bg, --ink, --gild, --seal, etc. /// /// Two palettes ship today: (default — aged paper /// + sealing-wax red) and (leather + candlelight, /// retained from the M5 design audit). The React prototype's "blood" /// variant is dropped from scope. /// public struct CodexPalette { public Color Bg, Bg2, BgDeep, Ink, InkSoft, InkMute, Rule, Gild, Seal, Seal2, Accent; /// /// Aged-paper palette. Cream backgrounds with deep brown-black ink, /// sealing-wax red for primary action / selection emphasis, and a /// muted gold gild for accents. This is the default codex feel. /// public static readonly CodexPalette Parchment = new() { Bg = Hex("#e8dcc0"), Bg2 = Hex("#d9c9a6"), BgDeep = Hex("#c7b48b"), Ink = Hex("#2b1d10"), InkSoft = Hex("#5a4527"), InkMute = Hex("#8a6f48"), Rule = Hex("#8a6f48"), Gild = Hex("#b48a3c"), Seal = Hex("#7a1f12"), Seal2 = Hex("#5a160c"), Accent = Hex("#6b4a1e"), }; public static readonly CodexPalette Dark = new() { Bg = Hex("#1c1410"), Bg2 = Hex("#261b14"), BgDeep = Hex("#100a07"), Ink = Hex("#f0e2c4"), InkSoft = Hex("#d4be90"), InkMute = Hex("#8c7651"), Rule = Hex("#6b5635"), Gild = Hex("#d8a84a"), Seal = Hex("#b03021"), Seal2 = Hex("#7a1f12"), Accent = Hex("#d8a84a"), }; private static Color Hex(string s) => new(s); } /// /// Spacing + radius tokens. Density is locked at "normal" per port plan /// §10 (compact mode dropped from scope). /// public static class CodexSpacing { public const int Gap = 24; // --gap public const int Pad = 28; // --pad public const int Radius = 2; // --radius } /// /// Font-size + letter-spacing tokens. Sizes are in px, matching the CSS. /// Letter-spacing values are in em multiplied by 1000 (em isn't a Godot /// concept; we use it for documentation only — see CodexTheme for actual /// Theme constant assignment). /// public static class CodexType { // Headings (h1..h4) public const int H1Size = 38; public const int H2Size = 28; public const int H3Size = 20; public const int H4Size = 14; // Body / display public const int BodySize = 14; public const int BodyLargeSize = 15; // Mono micro-text (eyebrows, meta lines, codex-sub) public const int MonoEyebrowSize = 11; public const int MonoSmallSize = 10; public const int MonoXSmallSize = 9; // Codex title (.codex-title) public const int CodexTitleSize = 28; // Card components public const int CardNameSize = 22; public const int CardBodySize = 14; // Buttons public const int BtnSize = 16; public const int BtnSmallSize = 13; // Stepper public const int StepperNumSize = 22; public const int StepperNameSize = 10; }