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

VariableDefaultControls
--accent#ffffffAccent colour: active elements, the close button, highlights
--accent-text0, 0, 0Text and icons on top of accent-coloured surfaces (triplet)
--bg#000000Base background of the panel and the creator menu
--glow255, 255, 255Colour of the soft radial glows layered over the background (triplet)
--glow-opacity0.15Strength of those glows — 0 removes them for a flat look
--text255, 255, 255Base text colour (triplet)
--borderrgba(255,255,255,0.19)Outer borders
--dividerrgba(255,255,255,0.1)Separator lines between sections
VariableDefaultControls
--title-color#ffffffThe CreatorPanel.Title text
--title-glowrgba(255,255,255,0.22)Glow behind the title
--subtitle-colorrgba(255,255,255,0.6)The CreatorPanel.Subtitle text
--head-icon-colorrgba(0,0,0,0.75)Colour of the icon in the header
--head-icon-filternoneCSS filter on the header icon, e.g. invert(1) for a light-on-dark version

Faction list

VariableDefaultControls
--group-labelrgba(255,255,255,0.5)Group headings above the list
--item-bgrgba(255,255,255,0.05)Background of a faction row
--item-textrgba(255,255,255,1)Text of a faction row
--item-active-textrgba(0,0,0,0.75)Text of the selected row (which uses --accent as background)
--icon-bgrgba(0,0,0,0.15)Icon tile next to a faction
--icon-bg-activergba(0,0,0,0.25)The same tile on the selected row
--job-fallbackrgba(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.

VariableDefaultColour
--stat-total / --stat-total-active90,160,255 / 20,80,190Blue — total members
--stat-online / --stat-online-active255,255,255 / 0,0,0White — online
--stat-alive / --stat-alive-active123,255,0 / 40,120,0Green — alive

Search, chips and settings

VariableDefaultControls
--settings-bgrgba(12,12,12,0.98)Background of the settings flyout
--search-bgrgba(255,255,255,0.05)Search input background
--search-borderrgba(255,255,255,0.08)Search input border
--chip-bgrgba(255,255,255,0.05)Background of the sort and range chips
--chip-borderrgba(255,255,255,0.08)Chip border
--chip-textrgba(255,255,255,0.85)Chip label
--chip-active-textrgba(0,0,0,0.75)Label of the selected chip
--chip-dot-offrgba(255,255,255,0.25)The small dot on an inactive toggle chip

Member cards

VariableDefaultControls
--card-bgrgba(255,255,255,0.04)Card background
--card-borderrgba(255,255,255,0.07)Card border
--card-idrgba(255,255,255,0.35)The server ID on a card
--badge-bg / --badge-textrgba(255,190,0,0.18) / rgb(255,200,60)Status badge (amber)
--badge-dead-bg / --badge-dead-textrgba(255,60,60,0.18) / rgb(255,90,90)Badge for a dead player (red)
--members-headrgba(255,255,255,0.6)Column headings above the member list
--member-bgrgba(255,255,255,0.05)Member row background
--member-borderrgba(255,255,255,0.05)Member row border
--member-name#ffffffMember name
--member-inforgba(255,255,255,0.6)Secondary info on a member row (rank, distance …)
--member-offline-opacity0.45Opacity of offline members
--offline-blur0.156vwBlur applied to offline cards on top of the grayscale effect — set to 0 for a sharp look
--dot-online / --dot-offline0,255,0 / 255,0,0Online / offline dot colours (triplets). Reserved — not referenced by the current UI build

HP bar

VariableDefaultControls
--hp-trackrgba(255,255,255,0.1)Empty part of the bar
--hp-high123, 255, 0High HP (triplet)
--hp-mid255, 190, 0Medium HP (triplet)
--hp-low255, 60, 60Low HP (triplet)

Teleport buttons

There are two: the wide button on a player card and the compact button in a member row.

VariableDefaultControls
--tp-gradientblue gradientBackground of the card button
--tp-silversilver gradientThe card button in its secondary ("silver") state
--tp-silver-border / --tp-silver-textrgba(255,255,255,0.25) / #16181bBorder and label of that state
--tp-bgrgba(90,160,255,0.15)Background of the compact button
--tp-borderrgba(90,160,255,0.4)Border of both buttons
--tp-text#ffffffLabel
--tp-hover-text#ffffffLabel on hover

Killfeed

VariableDefaultControls
--kf-bg28, 30, 33Entry background (triplet, combined with --kf-opacity)
--kf-opacity0.92Transparency of an entry — lower values are less obtrusive on stream
--kf-borderrgba(255,255,255,0.18)Entry border
--kf-accentrgba(255,255,255,0.55)Accent line / separator inside an entry
--kf-killer#ffffffName of the killer
--kf-victimrgb(178,184,191)Name of the victim
--kf-id / --kf-victim-idrgba(255,255,255,0.4) / rgba(178,184,191,0.6)The IDs behind both names
--kf-jobrgba(255,255,255,0.5)Faction shown in an entry
--kf-distrgba(255,255,255,0.65)Distance
--kf-weaponrgba(255,255,255,0.8)Weapon
--kf-move-borderrgba(255,255,255,0.5)Outline shown while repositioning the killfeed

Creator menu

VariableDefaultControls
--cmenu-width13.542vwWidth of the menu
--cmenu-right1.563vwDistance from the right screen edge
--cmenu-bottom1.563vwDistance from the bottom screen edge
--cmenu-headrgba(255,255,255,0.5)Group headings
--cmenu-textrgba(255,255,255,1)Entry text
--cmenu-item-bgrgba(255,255,255,0.05)Entry background
--cmenu-active-textrgba(0,0,0,0.75)Text of the highlighted entry
--cmenu-lockedrgba(255,255,255,0.3)Entries the creator may not use
--cmenu-danger255, 60, 60Destructive entries such as Kill Me (triplet)
--cmenu-switch-bg / --cmenu-switch-dotrgba(255,255,255,0.12) / rgba(255,255,255,0.5)Toggle in its off state
--cmenu-switch-on-bg / --cmenu-switch-on-dotrgba(123,255,0,0.3) / #7bff00Toggle in its on state
--cmenu-footerrgba(255,255,255,0.35)The CreatorPanel.MenuFooter hint line

Layout and sizing

VariableDefaultControls
--menu-width67.708vwWidth of the panel
--menu-height52.083vwHeight of the panel
--sidebar-width10.938vwWidth of the faction sidebar
--radius0.26vwCorner radius of the outer containers
--radius-inner0.208vwCorner 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-width and --menu-height. Adjust the panel size in small steps and check the result in game.

Fonts

VariableDefaultUsed 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.