UI
Lets you re-theme the Contracts UI. Every named palette color can be replaced, and every icon the
plugin ships can get its own image and color, from objective types down to the countdown clock. All
of it is optional: a
value of null means “use the built-in look”, and a fresh config ships with everything set to
null. The section also holds behavior settings for the contracts menu under Menu.
{ "UI": { "Colors": { "Accent Primary": "#4dc1ff", "Accent Muted": "#285278", "Accent Background": "#001221", "Accent Border": "#284b5a", "Text": null, "Danger": null }, "Icons": { "Objectives": { "Kill": { "Icon": "https://example.com/skull.png", "Color": "#ff4d4d", "Raw": false } }, "Conditions": { "Weapon": { "Icon": null, "Color": "rgb(255, 200, 120)", "Raw": false } }, "Rewards": { "Command": { "Icon": "https://example.com/vip.png", "Color": null, "Raw": true } }, "Chips": { "Preset": { "Icon": "https://example.com/crate.png", "Color": null, "Raw": true }, "Npc": { "Icon": null, "Color": "#ff4d4d", "Raw": false } }, "Ui": { "Clock": { "Icon": null, "Color": "#4dc1ff", "Raw": false }, "ItemFallback": { "Icon": "https://example.com/crate.png", "Color": null, "Raw": true } }, "Monuments": { "launch_site_1": { "Icon": "https://example.com/rocket.png", "Color": null, "Raw": true } } }, "Menu": { "Contracts Per Page": 10 } }}The example above is trimmed for readability. The real file lists every color token and every type
key, so you never have to guess a name: set the ones you want and leave the rest null.
Colors
Section titled “Colors”Every entry accepts the same color formats used elsewhere in the UI: #rrggbb, #rrggbbaa,
rgb(r, g, b), rgba(r, g, b, a), hsl(h, s%, l%) and hsla(h, s%, l%, a). A color that fails to
parse prints a warning at load and falls back to white, the plugin never refuses to start over a
color.
Overriding a color carries through everywhere it appears, including the translucent variants the UI derives from it (hover states, progress fills, dimmed text and so on).
Surfaces and text
Section titled “Surfaces and text”The dark base coat of the UI: window backgrounds, panels and text.
| Setting | Default |
|---|---|
Surface Backdrop |
rgba(0, 0, 0, 0.95) |
Surface Base |
rgb(10, 10, 10) |
Surface Raised |
rgb(18, 18, 18) |
Surface Elevated |
rgb(28, 28, 28) |
Surface Active |
rgba(40, 40, 40, 1) |
Border |
rgba(255, 255, 255, 0.1) |
Text |
rgb(220, 220, 220) |
Text Contrast |
rgb(10, 10, 10) |
Text Muted |
rgba(229, 229, 229, 0.2) |
Text Disabled |
rgba(150, 150, 150, 0.35) |
Transparent |
rgba(0, 0, 0, 0) |
Accent
Section titled “Accent”The gold highlight family: primary buttons, the selected category, progress accents. Swapping these four is the quickest way to make the UI match your server’s branding.
| Setting | Default |
|---|---|
Accent Primary |
#ffc14d |
Accent Muted |
#785f28 |
Accent Background |
#211200 |
Accent Border |
#5a4b28 |
Semantic colors
Section titled “Semantic colors”Status colors for confirmations, warnings and errors.
| Setting | Default |
|---|---|
Danger |
#cc272e |
Success |
#4aa651 |
Info |
#238ea9 |
Warning |
#d09945 |
Color families
Section titled “Color families”General-purpose colors used across icons, chips and highlights, in a bright, base and dark shade each.
| Setting | Default | Setting | Default | Setting | Default |
|---|---|---|---|---|---|
Bright Red |
#ea7467 |
Red |
#db3830 |
Dark Red |
#540502 |
Bright Green |
#60d768 |
Green |
#22bc1f |
Dark Green |
#024501 |
Bright Blue |
#67c5ea |
Blue |
#3082db |
Dark Blue |
#011f41 |
Bright Yellow |
#eaea67 |
Yellow |
#c9c928 |
Dark Yellow |
#393901 |
Bright Orange |
#e5a854 |
Orange |
#d2961d |
Dark Orange |
#3c2302 |
Bright Purple |
#ab60d7 |
Purple |
#a825c6 |
Dark Purple |
#48044a |
Foreground aliases
Section titled “Foreground aliases”Text colors used on top of the matching semantic or accent background. By default each one follows
another token (Danger Foreground and Info Foreground follow Text, the other three follow
Text Contrast), and they keep following it: override Text and Danger Foreground moves with
it, unless you override Danger Foreground itself.
| Setting | Default |
|---|---|
Danger Foreground |
Text |
Success Foreground |
Text Contrast |
Info Foreground |
Text |
Warning Foreground |
Text Contrast |
Accent Foreground |
Text Contrast |
Six categories of icons: Objectives, Conditions, Rewards, Chips, Ui and Monuments. In
the first three, keys are the type names you already use in data files (Kill, CardSwipe,
TimeOfDay, Economics, …). Chips is keyed by chip kind, Ui covers the other uncategorized
icons and Monuments is keyed by monument short name, each has its own section below.
Each entry has the same three fields:
| Field | Type | Default | Description |
|---|---|---|---|
Icon |
string | null |
Direct URL to an image. null keeps the built-in icon. |
Color |
string | null |
Color, same formats as above. null keeps the built-in color. |
Raw |
boolean | false |
Render the image in its own true colors instead of the solid color. |
A chip is the small pill in the requirement display: an icon plus a short label, one per value.
| Key | Where | Built-in icon |
|---|---|---|
Preset |
Any @preset reference that doesn’t have an icon |
Boxes |
Npc |
Scientists, tunnel dwellers and other human NPCs | Person |
Animal |
Bears, wolves, boars and the rest of the wildlife | Paw print |
Mount |
Vehicles and anything else a player rides | Car |
World |
Map objects that are neither built nor deployed | Box |
Structure |
Building blocks, walls, doors | Brick wall |
Deployable |
Player-placed deployables | Armchair |
Monument |
Monument chips | The monument’s own |
Unknown |
An entity name that has no built-in display name | Diamond |
Other uncategorized icons, the ones that don’t belong to any objective, condition or reward type.
| Key | Where | Built-in icon |
|---|---|---|
Clock |
Category timers on contract and category cards and in the menu header | Clock |
Cooldown |
Objective cooldown rows and the HUD cooldown budget counter | Clock |
Burst |
The burst window indicator on the HUD and the objective row | Lightning bolt |
Lock |
The overlay on a locked objective’s icon | Lock |
Secret |
Hidden objectives in Progressive contracts | Question mark |
ItemFallback |
Item chips, item rewards and turn-in rows when an item name fails to resolve | Box |
Mixed |
The contract card icon when the contract mixes objective types | Asterisk |
Monuments
Section titled “Monuments”Per-monument overrides for monument chips. Keys are the monument short names you already type
in Monument conditions, like launch_site_1 or oilrig_1
(case-insensitive). The config ships with every curated monument listed, all set to null.
Keys that aren’t in the shipped list work too, so you can give an icon to a custom map monument or a monument newer than the plugin’s curated list. Those render with a prettified name and the landmark icon by default.
Behavior settings for the contracts menu.
| Setting | Type | Default | Description |
|---|---|---|---|
Contracts Per Page |
int | 10 |
How many contract cards a single list page can hold. |
The contract list (a category’s contracts, and the Active Contracts view) is split into pages of this size. When everything fits on one page, the pager bar at the bottom of the list is hidden entirely, so small categories look the same as if there were no pagination at all.
Keep page sizes reasonable
Section titled “Keep page sizes reasonable”Every card on a page is sent and rendered at once, so a large value on a large category brings back the problem pagination solves. Rendering hundreds of cards in one go can freeze the player’s game for a moment when the menu opens, and can make the list render incorrectly. I don’t recommend going above 20 for this setting.
That being said, you should ideally avoid having a category that may trigger pagination at all (i.e. a category that allows more than 10 active contracts at a time). Having too many contracts active in one category defeats the purpose of Contracts’ fundamental design to have time-rotating quests and may cause a poor player experience, not a better one. See why
