UI Style Guide · Introduction
UI Style Guide · Panel Examples
Example — Bottom Tab Bar
Centered pill bar anchored to the bottom of the game viewport. Two toggle buttons: Build (crank icon) and Colonists (user icon). Active tab = ARC Cyan --interactive (#4AC1F2), matching the tab component system. Inactive = Gray #999. Clicking an active tab again deselects it and hides the panel. Click the buttons below to interact.
Anatomy
| Property | Value | Notes |
|---|---|---|
| Bar background | #151618 @ 95% | Slightly transparent to sit on game world without fully obscuring it |
| Bar border | #474747 1px | Subtle separation from game world. Radius 4px. |
| Button size | 80–90 px wide × 32 px tall | Build 80px, Colonists 90px. Both min-width, content-driven. |
| Active color | --interactive (#4AC1F2) | Applied to both text and icon simultaneously. Matches tab component system. |
| Inactive color | #999999 (Gray) | Clear enough to read, dim enough to recede |
| Toggle behavior | Click active tab = deselect | Hides panel. Player gets unobstructed view of game world. |
| Theme | panel_button_primary.tres | Consistent with all other in-panel actions |
| Icon size | 14 px max-width | Left-aligned within button. 5px gap to label. |
Example — Pause Menu
Modal context: full-attention, single-column, uniform button height. All pause menu buttons use btn-md (40 px). Primary action (Resume) gets visual priority through the primary colour variant only — never through size. A taller Resume button would look like a layout error, not intentional hierarchy.
PIXEARG_ FIX → Onest 16pxbtn-md · 40 px tall · full width. Uniform height — hierarchy via colour only.btn-md btn-secondary · Slate bg, Cream text.btn-md btn-danger · below divider · never mixed with other actions.Example — Settings Panel
Settings is a sub-panel inside the pause overlay — same panel chrome as the pause menu, narrower content. Controls are grouped into labelled sections (Display, Audio). Toggles use arc-cyan when on; sliders share the same cyan accent. All rows are equal-height with a hairline separator. Buttons live below a divider, secondary weight only — Back is the primary escape action here, never a primary-coloured button.
--cream · centered.--dust-shadow · uppercase · 0.1em tracking. Groups related controls without adding heavy visual weight.rgba(white, 0.05) hairline. Barely-there — structure without contrast noise.--arc-cyan thumb, low-opacity cyan pill bg. OFF: slate pill, dust-shadow thumb. Never use checkboxes in-game.--arc-cyan monospace. Label left, live % right — no separate label rows.btn-md btn-secondary. Back is not a primary button — returning to the pause menu is low-stakes.Example — Building Details Panel
Compact in-game panel showing a damaged building. Demonstrates full-width panel_button_primary.tres (repair action), btn-xs secondary controls, status visualization, and hierarchical information density. Information is primary; buttons are compact affordances.
panel_button_primary.tres, slate + magenta accent. Used for primary building action — repair, assign, build upgrade.btn-xs trio (Pause, Settings, Demolish) on own row. Compact secondary controls — they don't compete with the primary repair action.Button decision tree for this panel
panel_button_primary.tres (full-width, dark slate with magenta hover) — high-value action, deserves visual weight but never primary color (which is for menus). Communicates "this is what you came here to do" while staying practical for dense UI.Pause / Settings / Demolish:
btn-xs trio — information sharing space, buttons must be secondary. Pause and Settings use btn-secondary (neutral), Demolish is btn-danger (red). Never full-width — info is the focal point, not actions.Never use:
button_big.tres (main menu only) or button_primary.tres (pause menu only). Never use btn-lg / btn-md inside a detail panel. Screen real estate is premium.
Example — Hab Module Panel
A building panel that contains a resident list. The primary action (Assign Resident) is a centered full-width flat button. All per-row controls use btn-icon only. Secondary details (slots count, power, O₂ source) live in a collapsed accordion — players scan the resident list first, then drill in only if needed.
Details ▼
#4AC1F2 @ 12% bg, name in #BFE8FF. No border needed.Example — Unit Details Panel
Read-mostly colonist overview. Stat labels are ALL CAPS, bars are 4px thin. The value text uses accent colour only when the stat is warning/critical — OK states stay in Dust Shadow to avoid noise. No primary action button.
Example — Dialogue Box
Appears at the bottom of the screen during NPC conversations. Portrait left (pixel art, 80×80 px, r=4 px). Speaker name in ARC Orange at 14 px bold. Body text Cream at 12 px. Continue indicator: Animated bouncing arrow (▼) centered below the text — no label. The animation alone signals interactivity.
#F28C38.image-rendering: pixelated.#1E2023 (slightly lighter than --basalt). Padding: 16px v / 20px h. Arrow + text are overlay, not part of text flow.Animation
Example — Mission Log
Interactive mission log. Completed missions collapse to a single row — click to reveal objective and what they unlocked. The active mission stays expanded with its semantic colour and live progress. Upcoming missions hint at what's ahead (name + type) but hide objectives until unlocked; click the next-in-line to surface the prerequisite. Distant missions are obscured entirely. Overall campaign progress shows at the top without spoilers.
Quick Reference
| Context | Font | Size | Colour | Radius | Padding |
|---|---|---|---|---|---|
| Main menu title | Orbit-Headers | 48 px | Scanline Cream | — | — |
| Main menu button | PIXEARG_ | 14–16 px | Scanline Cream | 12 px | 20 px |
| Modal panel header | Onest-Bold | 14–16 px | Scanline Cream | 12 px | 20 px |
| Modal button (primary) | Onest-Bold | 16 px | Dark on Cream bg | 12 px | 12×24 px |
| Modal button (secondary) | Onest-Bold | 14 px | Cream on Slate bg | 12 px | 9×20 px |
| In-game panel header | Onest-Bold | 16 px | Scanline Cream | 12 px | 12 px |
| In-game panel body | Onest-Bold | 10–12 px | Dust Shadow | 12 px | 12 px |
| Panel action (main action) | Onest-Bold | 10 px | Cream on Slate bg · btn-xs btn-secondary | 4 px | 3×10 px |
| Panel action (dismissive) | Onest-Bold | 10 px | Dust Shadow · btn-xs btn-ghost | 4 px | 3×10 px |
| Panel action (destructive) | Onest-Bold | 10 px | ARC Red tint · btn-xs btn-danger | 4 px | 3×10 px |
| Inset / tech card | Onest-Bold | 9 px | Dust Shadow | 4 px | 4×6 px |
| Inline action (btn-xs) | Onest-Bold | 10 px | Cream on Slate bg | 4 px | 3×10 px |
| Icon button | — | — | Dust Shadow / Red | 4 px | — |
| Tooltip | Onest-Bold | 10 px | Dust Shadow | 4 px | 12 px |
| Progress bar | — | 4 px h | Cyan → Red | 2 px | — |
| Dialog speaker name | Onest-Bold | 14 px | ARC Orange #F28C38 | — | — |
| Dialog portrait | — | 80×80 px | — | 4 px | — |
| Mission active badge | Onest-Bold | 9 px | ARC Yellow | 3 px | 2×6 px |
| Mission complete badge | Onest-Bold | 9 px | Plasma Purple #A855F7 | 3 px | 2×6 px |
| Alert banner | Onest-Bold | 9 px | ARC Red | 0 (full-width) | 6×12 px |
Remediation Checklist
Confirmed divergences from this guide. Tick off as fixes land.