Styling
The whole interface is themed from a single file: html/config.css. It contains nothing but CSS variables — the compiled UI does not define a single colour of its own, so every colour, size and font you see comes from this file.
<!-- html/index.html -->
<link rel="stylesheet" href="./config.css"> <!-- your theme -->
<link rel="stylesheet" href="./assets/…css"> <!-- the UI, uses the variables -->
Restart the resource after editing (restart x-creatorpanel), then reopen the panel.
Two value formats
This is the one thing that breaks themes, so read it before you change anything.
1. Normal CSS values — hex, rgba(), gradients. Use them as you would anywhere else:
--accent: #ffffff;
--border: rgba(255, 255, 255, 0.19);
--tp-gradient: linear-gradient(180deg, #2f6fd0 0%, #1d4a94 100%);
2. Bare RGB triplets — three numbers, no rgb() around them. The UI inserts them into rgba(var(--x), 0.6) so it can reuse the same colour at different opacities:
--text: 255, 255, 255; /* correct */
--text: #ffffff; /* breaks it */
--text: rgb(255,255,255);/* breaks it */
These variables are triplets and must stay in that form:
--accent-text · --glow · --text · --stat-total · --stat-online · --stat-alive · --stat-total-active · --stat-online-active · --stat-alive-active · --kf-bg · --hp-high · --hp-mid · --hp-low · --cmenu-danger · --dot-online · --dot-offline
Never delete or rename a line. A variable that no longer exists leaves the element with no value at all, which usually means invisible text or a missing background. Change values only.
Core
| Variable | Default | Controls |
|---|---|---|
--accent | #ffffff | Accent colour: active elements, the close button, highlights |
--accent-text | 0, 0, 0 | Text and icons on top of accent-coloured surfaces (triplet) |
--bg | #000000 | Base background of the panel and the creator menu |
--glow | 255, 255, 255 | Colour of the soft radial glows layered over the background (triplet) |
--glow-opacity | 0.15 | Strength of those glows — 0 removes them for a flat look |
--text | 255, 255, 255 | Base text colour (triplet) |
--border | rgba(255,255,255,0.19) | Outer borders |
--divider | rgba(255,255,255,0.1) | Separator lines between sections |
Header
| Variable | Default | Controls |
|---|---|---|
--title-color | #ffffff | The CreatorPanel.Title text |
--title-glow | rgba(255,255,255,0.22) | Glow behind the title |
--subtitle-color | rgba(255,255,255,0.6) | The CreatorPanel.Subtitle text |
--head-icon-color | rgba(0,0,0,0.75) | Colour of the icon in the header |
--head-icon-filter | none | CSS filter on the header icon, e.g. invert(1) for a light-on-dark version |
Faction list
| Variable | Default | Controls |
|---|---|---|
--group-label | rgba(255,255,255,0.5) | Group headings above the list |
--item-bg | rgba(255,255,255,0.05) | Background of a faction row |
--item-text | rgba(255,255,255,1) | Text of a faction row |
--item-active-text | rgba(0,0,0,0.75) | Text of the selected row (which uses --accent as background) |
--icon-bg | rgba(0,0,0,0.15) | Icon tile next to a faction |
--icon-bg-active | rgba(0,0,0,0.25) | The same tile on the selected row |
--job-fallback | rgba(255,255,255,0.45) | Placeholder icon for factions without their own icon |
Statistics
The three counters (total members, online, alive) each have a normal and an active colour, the active one being used while the faction row is selected.
| Variable | Default | Colour |
|---|---|---|
--stat-total / --stat-total-active | 90,160,255 / 20,80,190 | Blue — total members |
--stat-online / --stat-online-active | 255,255,255 / 0,0,0 | White — online |
--stat-alive / --stat-alive-active | 123,255,0 / 40,120,0 | Green — alive |
Search, chips and settings
| Variable | Default | Controls |
|---|---|---|
--settings-bg | rgba(12,12,12,0.98) | Background of the settings flyout |
--search-bg | rgba(255,255,255,0.05) | Search input background |
--search-border | rgba(255,255,255,0.08) | Search input border |
--chip-bg | rgba(255,255,255,0.05) | Background of the sort and range chips |
--chip-border | rgba(255,255,255,0.08) | Chip border |
--chip-text | rgba(255,255,255,0.85) | Chip label |
--chip-active-text | rgba(0,0,0,0.75) | Label of the selected chip |
--chip-dot-off | rgba(255,255,255,0.25) | The small dot on an inactive toggle chip |
Member cards
| Variable | Default | Controls |
|---|---|---|
--card-bg | rgba(255,255,255,0.04) | Card background |
--card-border | rgba(255,255,255,0.07) | Card border |
--card-id | rgba(255,255,255,0.35) | The server ID on a card |
--badge-bg / --badge-text | rgba(255,190,0,0.18) / rgb(255,200,60) | Status badge (amber) |
--badge-dead-bg / --badge-dead-text | rgba(255,60,60,0.18) / rgb(255,90,90) | Badge for a dead player (red) |
--members-head | rgba(255,255,255,0.6) | Column headings above the member list |
--member-bg | rgba(255,255,255,0.05) | Member row background |
--member-border | rgba(255,255,255,0.05) | Member row border |
--member-name | #ffffff | Member name |
--member-info | rgba(255,255,255,0.6) | Secondary info on a member row (rank, distance …) |
--member-offline-opacity | 0.45 | Opacity of offline members |
--offline-blur | 0.156vw | Blur applied to offline cards on top of the grayscale effect — set to 0 for a sharp look |
--dot-online / --dot-offline | 0,255,0 / 255,0,0 | Online / offline dot colours (triplets). Reserved — not referenced by the current UI build |
HP bar
| Variable | Default | Controls |
|---|---|---|
--hp-track | rgba(255,255,255,0.1) | Empty part of the bar |
--hp-high | 123, 255, 0 | High HP (triplet) |
--hp-mid | 255, 190, 0 | Medium HP (triplet) |
--hp-low | 255, 60, 60 | Low HP (triplet) |
Teleport buttons
There are two: the wide button on a player card and the compact button in a member row.
| Variable | Default | Controls |
|---|---|---|
--tp-gradient | blue gradient | Background of the card button |
--tp-silver | silver gradient | The card button in its secondary ("silver") state |
--tp-silver-border / --tp-silver-text | rgba(255,255,255,0.25) / #16181b | Border and label of that state |
--tp-bg | rgba(90,160,255,0.15) | Background of the compact button |
--tp-border | rgba(90,160,255,0.4) | Border of both buttons |
--tp-text | #ffffff | Label |
--tp-hover-text | #ffffff | Label on hover |
Killfeed
| Variable | Default | Controls |
|---|---|---|
--kf-bg | 28, 30, 33 | Entry background (triplet, combined with --kf-opacity) |
--kf-opacity | 0.92 | Transparency of an entry — lower values are less obtrusive on stream |
--kf-border | rgba(255,255,255,0.18) | Entry border |
--kf-accent | rgba(255,255,255,0.55) | Accent line / separator inside an entry |
--kf-killer | #ffffff | Name of the killer |
--kf-victim | rgb(178,184,191) | Name of the victim |
--kf-id / --kf-victim-id | rgba(255,255,255,0.4) / rgba(178,184,191,0.6) | The IDs behind both names |
--kf-job | rgba(255,255,255,0.5) | Faction shown in an entry |
--kf-dist | rgba(255,255,255,0.65) | Distance |
--kf-weapon | rgba(255,255,255,0.8) | Weapon |
--kf-move-border | rgba(255,255,255,0.5) | Outline shown while repositioning the killfeed |
Creator menu
| Variable | Default | Controls |
|---|---|---|
--cmenu-width | 13.542vw | Width of the menu |
--cmenu-right | 1.563vw | Distance from the right screen edge |
--cmenu-bottom | 1.563vw | Distance from the bottom screen edge |
--cmenu-head | rgba(255,255,255,0.5) | Group headings |
--cmenu-text | rgba(255,255,255,1) | Entry text |
--cmenu-item-bg | rgba(255,255,255,0.05) | Entry background |
--cmenu-active-text | rgba(0,0,0,0.75) | Text of the highlighted entry |
--cmenu-locked | rgba(255,255,255,0.3) | Entries the creator may not use |
--cmenu-danger | 255, 60, 60 | Destructive entries such as Kill Me (triplet) |
--cmenu-switch-bg / --cmenu-switch-dot | rgba(255,255,255,0.12) / rgba(255,255,255,0.5) | Toggle in its off state |
--cmenu-switch-on-bg / --cmenu-switch-on-dot | rgba(123,255,0,0.3) / #7bff00 | Toggle in its on state |
--cmenu-footer | rgba(255,255,255,0.35) | The CreatorPanel.MenuFooter hint line |
Layout and sizing
| Variable | Default | Controls |
|---|---|---|
--menu-width | 67.708vw | Width of the panel |
--menu-height | 52.083vw | Height of the panel |
--sidebar-width | 10.938vw | Width of the faction sidebar |
--radius | 0.26vw | Corner radius of the outer containers |
--radius-inner | 0.208vw | Corner radius of inner elements |
Every size is given in vw — one percent of the screen width — so the interface scales with the player's resolution instead of becoming tiny on 1440p or 4K. Keep that unit when you change a value.
The paddings and font sizes inside the panel are fixed values as well, so they do not scale along with
--menu-widthand--menu-height. Adjust the panel size in small steps and check the result in game.
Fonts
| Variable | Default | Used for |
|---|---|---|
--font-title | "Binaria-Black" | Panel title |
--font-sub | "Binaria-Medium" | Subtitle and secondary headings |
--font-text | "Binaria-Bold" | Buttons, chips, IDs, most of the UI |
--font-name | "Binaria-Regular" | Player names |
The four Binaria weights live in html/fonts/. To use your own font, drop the file next to them and declare it at the top of config.css — the files { 'html/**' } entry in fxmanifest.lua already ships anything you add to that folder:
@font-face {
font-family: "MyFont";
src: url("./fonts/MyFont.ttf");
}
:root {
--font-title: "MyFont";
--font-sub: "MyFont";
--font-text: "MyFont";
--font-name: "MyFont";
}
Recipes
Match the panel to your server colour
Four variables carry most of the look:
--accent: #7c5cff; /* buttons, active rows */
--accent-text: 255, 255, 255; /* text on top of the accent */
--glow: 124, 92, 255; /* background glow */
--title-glow: rgba(124, 92, 255, 0.3);
A flatter, less glossy panel
--glow-opacity: 0;
--radius: 0;
--radius-inner: 0;
A killfeed that stays out of the way on stream
--kf-opacity: 0.55;
--kf-border: rgba(255, 255, 255, 0.08);
Combine it with CreatorPanel.Killfeed.position and maxEntries in config.lua.