feat(creation): distinguish granted skills as owned, and enlarge the small text

Two F6-review follow-ups from the human's read of the running screen.

1. GRANTED skill chips now read as 'you already have this', not 'unavailable'.
   The elf's granted `perception` shared SkillChip's dim `disabled` look with the
   'picks are spent' chips, so it read as blocked. Split out a fourth state,
   SkillChipGranted — a solid gold fill, cream text, and a ✓ prefix (owned) — while
   the pool-is-spent chips keep the plain dim disabled. Applied per-chip in _bind_skills.

2. Enlarged the small mono/body/prose roles for readability on sub-1920 laptops
   (the 1920 design canvas scales DOWN on a smaller screen, so 11-13px text got
   tiny): DM prose 20->22, MONO 13->14, section labels 13->14, card title 19->20,
   card body 13->14, chips 11->12, skill chips 12->14, the two flag pills +1. Big
   serif headings unchanged.

   Two layout consequences the guards caught and I fixed, not silenced:
   - Race cards overflowed the taller blurb -> card min-height 140->180 (the overflow
     guard, which measures against the card the engine does NOT derive from the text,
     went red first; traps.md #17).
   - The 9-chip Human bonus row, wider at the bigger font, blew the whole sheet past
     the viewport -> BonusRow HBoxContainer -> HFlowContainer so it wraps instead of
     forcing the sheet wide. Nothing depends on the row's type (tests check child
     count + visibility only).

319 client tests green (theme drift guard + overflow guard included); screenshot-
verified at 1280x720: granted chip owned, no clipping, bonus row wraps cleanly.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-14 20:33:08 -05:00
parent 8f3aa75fa9
commit 1ae62fe0db
5 changed files with 101 additions and 44 deletions

View File

@@ -504,9 +504,27 @@ corner_radius_top_right = 14
corner_radius_bottom_right = 14
corner_radius_bottom_left = 14
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_nufy3"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_nufy3"]
content_margin_left = 12.0
content_margin_top = 6.0
content_margin_right = 12.0
content_margin_bottom = 6.0
bg_color = Color(0.56078434, 0.41568628, 0.16470589, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
border_color = Color(0.56078434, 0.41568628, 0.16470589, 1)
corner_radius_top_left = 14
corner_radius_top_right = 14
corner_radius_bottom_right = 14
corner_radius_bottom_left = 14
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_0d7vs"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_0d7vs"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_3fnfk"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_2txdw"]
content_margin_left = 12.0
content_margin_top = 6.0
content_margin_right = 12.0
@@ -522,7 +540,7 @@ corner_radius_top_right = 14
corner_radius_bottom_right = 14
corner_radius_bottom_left = 14
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_3fnfk"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_w7qkp"]
content_margin_left = 12.0
content_margin_top = 6.0
content_margin_right = 12.0
@@ -538,7 +556,7 @@ corner_radius_top_right = 14
corner_radius_bottom_right = 14
corner_radius_bottom_left = 14
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_2txdw"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_rthnr"]
content_margin_left = 12.0
content_margin_top = 6.0
content_margin_right = 12.0
@@ -554,9 +572,9 @@ corner_radius_top_right = 14
corner_radius_bottom_right = 14
corner_radius_bottom_left = 14
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_w7qkp"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_ta3oh"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_rthnr"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ohwwq"]
content_margin_left = 12.0
content_margin_top = 6.0
content_margin_right = 12.0
@@ -572,7 +590,7 @@ corner_radius_top_right = 14
corner_radius_bottom_right = 14
corner_radius_bottom_left = 14
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ta3oh"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ismtf"]
content_margin_left = 12.0
content_margin_top = 6.0
content_margin_right = 12.0
@@ -588,7 +606,7 @@ corner_radius_top_right = 14
corner_radius_bottom_right = 14
corner_radius_bottom_left = 14
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ohwwq"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_gs634"]
content_margin_left = 12.0
content_margin_top = 6.0
content_margin_right = 12.0
@@ -615,15 +633,15 @@ Accent/font_sizes/font_size = 24
Accent/fonts/font = ExtResource("1_605w4")
CardBody/base_type = &"Label"
CardBody/colors/font_color = Color(0.41568628, 0.3529412, 0.22745098, 1)
CardBody/font_sizes/font_size = 13
CardBody/font_sizes/font_size = 14
CardBody/fonts/font = ExtResource("2_4lwr2")
CardTitle/base_type = &"Label"
CardTitle/colors/font_color = Color(0.22745098, 0.18431373, 0.10980392, 1)
CardTitle/font_sizes/font_size = 19
CardTitle/font_sizes/font_size = 20
CardTitle/fonts/font = ExtResource("2_4lwr2")
Chip/base_type = &"Button"
Chip/colors/font_color = Color(0.6039216, 0.56078434, 0.47058824, 1)
Chip/font_sizes/font_size = 11
Chip/font_sizes/font_size = 12
Chip/fonts/font = ExtResource("3_eckwq")
Chip/styles/focus = SubResource("StyleBoxEmpty_q5gpk")
Chip/styles/hover = SubResource("StyleBoxFlat_bbpmc")
@@ -631,7 +649,7 @@ Chip/styles/normal = SubResource("StyleBoxFlat_73lme")
Chip/styles/pressed = SubResource("StyleBoxFlat_js3tr")
ChosenTag/base_type = &"Label"
ChosenTag/colors/font_color = Color(0.9411765, 0.9019608, 0.8156863, 1)
ChosenTag/font_sizes/font_size = 10
ChosenTag/font_sizes/font_size = 11
ChosenTag/fonts/font = ExtResource("3_eckwq")
ChosenTag/styles/normal = SubResource("StyleBoxFlat_ube3r")
DarkPanel/base_type = &"PanelContainer"
@@ -652,7 +670,7 @@ ItemTileEmpty/base_type = &"PanelContainer"
ItemTileEmpty/styles/panel = SubResource("StyleBoxFlat_lw8lk")
Mono/base_type = &"Label"
Mono/colors/font_color = Color(0.6039216, 0.56078434, 0.47058824, 1)
Mono/font_sizes/font_size = 13
Mono/font_sizes/font_size = 14
Mono/fonts/font = ExtResource("3_eckwq")
ParchmentButton/base_type = &"Button"
ParchmentButton/colors/font_color = Color(0.2901961, 0.24705882, 0.17254902, 1)
@@ -677,16 +695,16 @@ PrimaryCard/base_type = &"PanelContainer"
PrimaryCard/styles/panel = SubResource("StyleBoxFlat_najyk")
PrimaryTag/base_type = &"Label"
PrimaryTag/colors/font_color = Color(0.9411765, 0.9019608, 0.8156863, 1)
PrimaryTag/font_sizes/font_size = 9
PrimaryTag/font_sizes/font_size = 10
PrimaryTag/fonts/font = ExtResource("3_eckwq")
PrimaryTag/styles/normal = SubResource("StyleBoxFlat_jtb1k")
RichTextLabel/colors/default_color = Color(0.2901961, 0.24705882, 0.17254902, 1)
RichTextLabel/font_sizes/normal_font_size = 20
RichTextLabel/font_sizes/normal_font_size = 22
RichTextLabel/fonts/italics_font = ExtResource("4_i0b23")
RichTextLabel/fonts/normal_font = ExtResource("2_4lwr2")
SectionLabel/base_type = &"Label"
SectionLabel/colors/font_color = Color(0.5411765, 0.46666667, 0.28235295, 1)
SectionLabel/font_sizes/font_size = 13
SectionLabel/font_sizes/font_size = 14
SectionLabel/fonts/font = ExtResource("3_eckwq")
SelectCard/base_type = &"Button"
SelectCard/colors/font_color = Color(0.22745098, 0.18431373, 0.10980392, 1)
@@ -701,25 +719,35 @@ SkillChip/colors/font_color = Color(0.3529412, 0.2627451, 0.14901961, 1)
SkillChip/colors/font_disabled_color = Color(0.6627451, 0.5803922, 0.39215687, 1)
SkillChip/colors/font_hover_color = Color(0.3529412, 0.2627451, 0.14901961, 1)
SkillChip/colors/font_pressed_color = Color(0.9411765, 0.9019608, 0.8156863, 1)
SkillChip/font_sizes/font_size = 12
SkillChip/font_sizes/font_size = 14
SkillChip/fonts/font = ExtResource("3_eckwq")
SkillChip/styles/disabled = SubResource("StyleBoxFlat_onsig")
SkillChip/styles/focus = SubResource("StyleBoxEmpty_gw0t7")
SkillChip/styles/hover = SubResource("StyleBoxFlat_88l5g")
SkillChip/styles/normal = SubResource("StyleBoxFlat_f8qac")
SkillChip/styles/pressed = SubResource("StyleBoxFlat_u6gcs")
SkillChipGranted/base_type = &"Button"
SkillChipGranted/colors/font_color = Color(0.9411765, 0.9019608, 0.8156863, 1)
SkillChipGranted/colors/font_disabled_color = Color(0.9411765, 0.9019608, 0.8156863, 1)
SkillChipGranted/font_sizes/font_size = 14
SkillChipGranted/fonts/font = ExtResource("3_eckwq")
SkillChipGranted/styles/disabled = SubResource("StyleBoxFlat_nufy3")
SkillChipGranted/styles/focus = SubResource("StyleBoxEmpty_0d7vs")
SkillChipGranted/styles/hover = SubResource("StyleBoxFlat_nufy3")
SkillChipGranted/styles/normal = SubResource("StyleBoxFlat_nufy3")
SkillChipGranted/styles/pressed = SubResource("StyleBoxFlat_nufy3")
Tab/base_type = &"Button"
Tab/colors/font_color = Color(0.41568628, 0.3529412, 0.22745098, 1)
Tab/styles/focus = SubResource("StyleBoxEmpty_nufy3")
Tab/styles/hover = SubResource("StyleBoxFlat_0d7vs")
Tab/styles/normal = SubResource("StyleBoxFlat_3fnfk")
Tab/styles/pressed = SubResource("StyleBoxFlat_2txdw")
Tab/styles/focus = SubResource("StyleBoxEmpty_3fnfk")
Tab/styles/hover = SubResource("StyleBoxFlat_2txdw")
Tab/styles/normal = SubResource("StyleBoxFlat_w7qkp")
Tab/styles/pressed = SubResource("StyleBoxFlat_rthnr")
TabActive/base_type = &"Button"
TabActive/colors/font_color = Color(0.9411765, 0.9019608, 0.8156863, 1)
TabActive/styles/focus = SubResource("StyleBoxEmpty_w7qkp")
TabActive/styles/hover = SubResource("StyleBoxFlat_rthnr")
TabActive/styles/normal = SubResource("StyleBoxFlat_ta3oh")
TabActive/styles/pressed = SubResource("StyleBoxFlat_ohwwq")
TabActive/styles/focus = SubResource("StyleBoxEmpty_ta3oh")
TabActive/styles/hover = SubResource("StyleBoxFlat_ohwwq")
TabActive/styles/normal = SubResource("StyleBoxFlat_ismtf")
TabActive/styles/pressed = SubResource("StyleBoxFlat_gs634")
TitleKicker/base_type = &"Label"
TitleKicker/colors/font_color = Color(0.6627451, 0.5176471, 0.24705882, 1)
TitleKicker/font_sizes/font_size = 13