Theme: buttons
Root menu / screen button chrome in themes/default.json. Choice menus use Choice packs, not this block (unless a pack inherits it).
"buttons": {
"min_width": 400,
"corner_radius": 8,
"border_width": 2,
"padding_left": 16,
"padding_right": 16,
"padding_top": 6,
"padding_bottom": 10,
"normal_bg": "#c5cad5b0",
"hover_bg": "#dfdcd7c0",
"pressed_bg": "#a8afc290",
"font_color": "#1e2133",
"font_hover_color": "#9a4e2a"
}
Usually you need
| Key | Type | Default | Effect |
|---|---|---|---|
normal_bg / hover_bg / pressed_bg | color | code greys | Flat fills |
font_color / font_hover_color | color | — | Label colours |
font_size | int | typography.sizes.button | Pack face size (× typography.size_scale) |
min_width | int | 0 if omit | Minimum width when > 0 |
padding_* | int | — | Content margins |
All keys
| Key | Type | Effect |
|---|---|---|
spacing | int | Menu button separation |
corner_radius | int | Uniform flat corner radius |
corner_radius_top_left / top_right / bottom_right / bottom_left | int | Per-corner radius (any present → per-corner mode; missing sides fall back to corner_radius) |
border_width | int | Uniform flat border width |
border_width_left / top / right / bottom | int | Per-side border (any present → per-side mode; missing sides fall back to border_width) |
min_width / min_height | int | Min size when > 0 |
padding_left / padding_right / padding_top / padding_bottom | int | Content margins |
normal_bg / hover_bg / pressed_bg / focus_bg / disabled_bg | color | Flat fills (focus → hover if omit) |
normal_border / hover_border / pressed_border / focus_border / disabled_border | color | Flat borders |
normal_texture / hover_texture / pressed_texture / focus_texture / disabled_texture | texture spec or null | Per-state faces |
texture_9slice | [L,T,R,B] | Nine-slice margins |
font | string | Family base under fonts/ (same as typography.font); omit → font_menu → font |
font_variant | string | regular | bold | italic | bold_italic (default regular) |
font_size | int | Face size in px × typography.size_scale; omit → typography.sizes.button |
font_color / font_hover_color / font_pressed_color / font_focus_color / font_disabled_color | color | Label colours |
font_outline_size / font_outline_color | int / color | Label outline |
font_shadow_offset_x / font_shadow_offset_y / font_shadow_color | int / color | Label shadow |
align_h or alignment | string | left | center | right (horizontal only) |
icon / hover_icon / pressed_icon / focus_icon | path | Glyphs (avoid dumping defaults on root) |
icon_max_width | int | Icon width cap |
states.<state>.padding | sides object | Per-draw-state padding (normal / hover / pressed / focus / disabled) |
Named packs (locale_button, info_close_button, hud_menu_button, …) use the same key set — Named button packs. Textures: Texture specs. Styling model · Typography.