diff --git a/.github/workflows/publish-host.yml b/.github/workflows/publish-host.yml
new file mode 100644
index 0000000..cce5438
--- /dev/null
+++ b/.github/workflows/publish-host.yml
@@ -0,0 +1,51 @@
+name: Publish Host (Avalonia)
+
+# Produces self-contained, single-file Server Host binaries for Windows and
+# Linux. No .NET runtime is required on the target machine. Runs on demand and
+# on version tags; each build is uploaded as a workflow artifact.
+
+on:
+ workflow_dispatch:
+ push:
+ tags:
+ - "host-v*"
+
+jobs:
+ publish:
+ name: Publish ${{ matrix.rid }}
+ runs-on: [self-hosted, Linux, X64]
+ strategy:
+ fail-fast: false
+ matrix:
+ rid: [win-x64, linux-x64]
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: actions/setup-dotnet@v4
+ # The runner user cannot write to system /usr/share/dotnet; install the
+ # pinned SDK into a runner-writable, cached path instead.
+ env:
+ DOTNET_INSTALL_DIR: ${{ runner.tool_cache }}/dotnet
+ with:
+ dotnet-version: "8.0.x"
+
+ - name: Publish single-file self-contained
+ # Untrimmed on purpose: the host uses reflection-based Avalonia bindings,
+ # which the trimmer would strip.
+ run: >
+ dotnet publish host/CommonwealthOnline.Host.csproj
+ -c Release
+ -r ${{ matrix.rid }}
+ --self-contained true
+ -p:PublishSingleFile=true
+ -p:IncludeNativeLibrariesForSelfExtract=true
+ -p:DebugType=none
+ -o out/${{ matrix.rid }}
+ --nologo
+
+ - name: Upload artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: CommonwealthOnline.Host-${{ matrix.rid }}
+ path: out/${{ matrix.rid }}/
+ if-no-files-found: error
diff --git a/host/App.axaml b/host/App.axaml
index 3ca1064..0483e48 100644
--- a/host/App.axaml
+++ b/host/App.axaml
@@ -3,23 +3,211 @@
x:Class="CommonwealthOnline.Host.App"
RequestedThemeVariant="Dark">
-
-
-
-
- #0E120B
- #171C10
+
+
+ #0A0E07
+ #12180C
+ #151B0F
+ #1C2314
+ #232C18
+ #2C3720
+ #43532F
#E6D28C
+ #F6ECBE
#D8D2BE
- #C24B4B
+ #8A9068
+ #8BD05C
+ #3E5C28
+ #C85450
+ #5A2A28
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/host/README.md b/host/README.md
index 1968935..0d289c6 100644
--- a/host/README.md
+++ b/host/README.md
@@ -25,7 +25,19 @@ server — a published `CommonwealthOnline.Server` executable, the framework
## Publish
+Self-contained, single-file builds that need no .NET runtime on the target.
+The host uses reflection-based Avalonia bindings, so publish **untrimmed**.
+
```
-dotnet publish host/CommonwealthOnline.Host.csproj -c Release -r win-x64 --self-contained false
-dotnet publish host/CommonwealthOnline.Host.csproj -c Release -r linux-x64 --self-contained false
+dotnet publish host/CommonwealthOnline.Host.csproj -c Release -r win-x64 \
+ --self-contained true -p:PublishSingleFile=true \
+ -p:IncludeNativeLibrariesForSelfExtract=true -o out/win-x64
+
+dotnet publish host/CommonwealthOnline.Host.csproj -c Release -r linux-x64 \
+ --self-contained true -p:PublishSingleFile=true \
+ -p:IncludeNativeLibrariesForSelfExtract=true -o out/linux-x64
```
+
+CI builds both runtimes and uploads them as artifacts — run the
+**Publish Host (Avalonia)** workflow (`.github/workflows/publish-host.yml`)
+manually, or push a `host-v*` tag.
diff --git a/host/Views/MainWindow.axaml b/host/Views/MainWindow.axaml
index 810293b..46d1fe3 100644
--- a/host/Views/MainWindow.axaml
+++ b/host/Views/MainWindow.axaml
@@ -3,102 +3,206 @@
xmlns:vm="clr-namespace:CommonwealthOnline.Host.ViewModels"
x:Class="CommonwealthOnline.Host.Views.MainWindow"
x:DataType="vm:MainWindowViewModel"
- Width="960" Height="700"
- MinWidth="820" MinHeight="600"
+ Width="1040" Height="740"
+ MinWidth="900" MinHeight="640"
Title="Commonwealth Online — Server Host"
- Background="{StaticResource CoBackgroundBrush}">
+ Background="{StaticResource CoWindowBrush}">
-
+
-
+
+
+
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
-
-
-
-
-
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+