# client/scripts/theme/theme_keys.gd class_name ThemeKeys extends RefCounted ## Type-variation names for game_theme.tres. Scripts set `theme_type_variation` ## to one of these so a typo is a compile-time symbol error, not a silent miss. ## §2: presentation. const PRIMARY_CTA := &"PrimaryCTA" const TAB := &"Tab" const TAB_ACTIVE := &"TabActive" const CHIP := &"Chip" const DOCK_BUTTON := &"DockButton" const PARCHMENT_BUTTON := &"ParchmentButton" const ITEM_TILE := &"ItemTile" const ITEM_TILE_EMPTY := &"ItemTileEmpty" const PARCHMENT_CARD := &"ParchmentCard" const PARCHMENT_INSET := &"ParchmentInset" const DARK_PANEL := &"DarkPanel" const SELECT_CARD := &"SelectCard" # race/calling card: a Button whose `pressed` is CHOSEN const SKILL_CHIP := &"SkillChip" # toggle: unpicked / picked / can't-pick-now (dim) const SKILL_CHIP_GRANTED := &"SkillChipGranted" # a race-GRANTED skill: owned (gold + ✓), inert const CHOSEN_TAG := &"ChosenTag" # the little crimson "CHOSEN" flag const PRIMARY_TAG := &"PrimaryTag" # the little gold "PRIMARY" flag const PRIMARY_CARD := &"PrimaryCard" # the ability card ringed as the calling's primary const ABILITY_CARD := &"AbilityCard" # ...and its UNringed state. Not ParchmentCard: the # ability card carries a badge on its top edge and # needs the headroom for it (mock padding-top 16 vs # the generic card's 6), and ParchmentCard is shared # with the shell. ## Font roles (Label type-variations carrying a font, not a stylebox). Kept ## separate from ALL below, which is stylebox variations + their base type only. const HEADING := &"Heading" const ACCENT := &"Accent" const MONO := &"Mono" const TITLE_LOGO := &"TitleLogo" const TITLE_KICKER := &"TitleKicker" const SECTION_LABEL := &"SectionLabel" const CARD_TITLE := &"CardTitle" # a select-card's name, dark ink ON PARCHMENT const CARD_BODY := &"CardBody" # a select-card's blurb, muted ink ON PARCHMENT ## Every FONT role + the base Control type it decorates. Deliberately NOT folded ## into ALL — ALL's "stylebox variations only" contract is relied on elsewhere ## (test_every_variation_resolves, and the styleboxes the screens set). Kept as a ## second enumerable set so a guard that means "every variation the builder ## touches" can iterate BOTH and never silently cover only half of them: the ## drift guard used to iterate ALL alone, so a font, a font size or a font colour ## could change in the builder and the committed .tres stay stale, suite green. const FONT_ROLES := { HEADING: "Label", ACCENT: "Label", MONO: "Label", TITLE_LOGO: "Label", TITLE_KICKER: "Label", SECTION_LABEL: "Label", CARD_TITLE: "Label", CARD_BODY: "Label", } ## Base Control types the builder styles DIRECTLY — no set_type_variation is ## ever called for these, so a fresh Theme reports get_type_variation_base("") ## for them. Kept as its own set (not folded into ALL or FONT_ROLES) because a ## base type is not a variation: nothing sets `theme_type_variation` to ## "RichTextLabel" anywhere, the node's own class name is the lookup key. ## Today: RichTextLabel, the builder's prose voice (mock README Typography: ## serif body/italic emphasis) — the creation screen's origin panel and ## calling detail panel are RichTextLabels rendering this styling directly, ## i.e. every line of DM prose the screen shows. const BASE_TYPES := { &"RichTextLabel": true, } ## Every variation name + the base Control type it decorates. The builder and the ## test both iterate this so they can never drift apart. const ALL := { PRIMARY_CTA: "Button", TAB: "Button", TAB_ACTIVE: "Button", CHIP: "Button", DOCK_BUTTON: "Button", PARCHMENT_BUTTON: "Button", ITEM_TILE: "PanelContainer", ITEM_TILE_EMPTY: "PanelContainer", PARCHMENT_CARD: "PanelContainer", PARCHMENT_INSET: "PanelContainer", DARK_PANEL: "PanelContainer", SELECT_CARD: "Button", SKILL_CHIP: "Button", SKILL_CHIP_GRANTED: "Button", CHOSEN_TAG: "Label", PRIMARY_TAG: "Label", PRIMARY_CARD: "PanelContainer", ABILITY_CARD: "PanelContainer", }