class_name UiTheme extends RefCounted ## Shared "engraved bronze plaque" look for every box in the game — aged gold on ## dark leather, a chiselled heavier bottom edge and a warm drop shadow, so the HUD ## and the menus read as the same arena furniture instead of a stack of generic ## rounded panels. Pair with UiFonts (Cinzel) for the full Colosseum feel. # ── Arena palette ─────────────────────────────────────────────────────────────── const GOLD := Color(1.00, 0.78, 0.22) # aged gold — trim, key text const CREAM := Color(0.93, 0.88, 0.72) # warm highlight — hover / active const MUTED := Color(0.66, 0.60, 0.46) # faded bronze — secondary text const LEATHER := Color(0.12, 0.08, 0.03, 0.90) # panel fill const LEATHER_DARK := Color(0.06, 0.04, 0.02, 0.88) # deeper fill — inset badges const BORDER := Color(0.72, 0.54, 0.18, 0.90) # default gold-bronze trim const SHADOW := Color(0.00, 0.00, 0.00, 0.55) ## The signature plaque: leather fill, gold-bronze trim with a heavier chiselled ## bottom edge (weight sinks to the base like an engraved tablet), crisp corners and ## a soft drop shadow. `accent` recolours the trim — pass a per-ability colour for ## HUD tiles or CREAM for a hot/hover state; a transparent accent draws a frameless ## plate (still shadowed). static func plaque(bg: Color, accent: Color = BORDER, corner: int = 1, h_margin: float = 16.0, v_margin: float = 8.0, shadow: bool = true) -> StyleBoxFlat: var s := StyleBoxFlat.new() s.bg_color = bg s.set_corner_radius_all(corner) s.corner_detail = 1 if accent.a > 0.0: s.set_border_width_all(1) s.border_width_bottom = 2 s.border_color = accent s.content_margin_left = h_margin s.content_margin_right = h_margin s.content_margin_top = v_margin s.content_margin_bottom = v_margin if shadow: s.shadow_color = SHADOW s.shadow_size = 5 s.shadow_offset = Vector2(0.0, 3.0) return s ## Small inset key-cap / badge: deep fill with a thin gold underline instead of a ## full frame and no shadow, so it reads as pressed-in rather than raised. static func badge(h_margin: float = 8.0, v_margin: float = 2.0) -> StyleBoxFlat: var s := StyleBoxFlat.new() s.bg_color = LEATHER_DARK s.set_corner_radius_all(3) s.border_width_bottom = 2 s.border_color = Color(GOLD.r, GOLD.g, GOLD.b, 0.55) s.content_margin_left = h_margin s.content_margin_right = h_margin s.content_margin_top = v_margin s.content_margin_bottom = v_margin return s ## Thin gold rule for separating rows inside a plaque — brighter at the centre than ## the surrounding trim so it reads as an inlaid line. static func rule() -> StyleBoxFlat: var s := StyleBoxFlat.new() s.bg_color = Color(GOLD.r, GOLD.g, GOLD.b, 0.35) s.content_margin_top = 5.0 s.content_margin_bottom = 5.0 return s