diff --git a/src/lib/ui/components/BrandMark.svelte b/src/lib/ui/components/BrandMark.svelte
index 7acf67c..6ed18f3 100644
--- a/src/lib/ui/components/BrandMark.svelte
+++ b/src/lib/ui/components/BrandMark.svelte
@@ -21,18 +21,17 @@
display: inline-flex;
align-items: center;
gap: 10px;
- font-family: var(--font-display);
- color: var(--cream);
- letter-spacing: var(--tracking-display);
+ font-family: 'Alfa Slab One', Georgia, serif;
+ color: var(--text-primary);
+ letter-spacing: 0.12em;
line-height: 1;
- animation: cherry-fizz 6s ease-in-out infinite;
}
- .mark-sm .word { font-size: 14px; letter-spacing: 1.5px; }
- .mark-md .word { font-size: 18px; }
- .mark-lg .word { font-size: 32px; letter-spacing: 3px; }
+ .mark-sm .word { font-size: var(--text-sm); letter-spacing: 1.5px; }
+ .mark-md .word { font-size: var(--text-md); }
+ .mark-lg .word { font-size: var(--text-2xl); letter-spacing: 3px; }
.bolt {
- fill: var(--spark-500);
+ fill: var(--accent-primary-hover);
filter: drop-shadow(0 0 5px rgba(124, 212, 255, 0.75));
}
.mark-sm .bolt { width: 12px; height: 20px; }
diff --git a/src/lib/ui/components/RoundTelemetry.svelte b/src/lib/ui/components/RoundTelemetry.svelte
index b4b05ac..8114c9b 100644
--- a/src/lib/ui/components/RoundTelemetry.svelte
+++ b/src/lib/ui/components/RoundTelemetry.svelte
@@ -11,7 +11,7 @@
{#if report && (report.event === 'round_change' || report.event === 'heartbeat') && fresh}
-
+
Round {report.round}
Last reported {elapsedSince(report.receivedAt, $uiNow)} ago
diff --git a/src/lib/ui/components/ServerCard.svelte b/src/lib/ui/components/ServerCard.svelte
index 9dcdd7c..db3f251 100644
--- a/src/lib/ui/components/ServerCard.svelte
+++ b/src/lib/ui/components/ServerCard.svelte
@@ -7,11 +7,12 @@
import { uiNow } from '$ui/stores/servers.js';
import { gametypeLabel } from '$ui/gametype.js';
import { elapsedSince } from '$ui/duration.js';
- import { mapTitle, serverTitle, serverIdentity } from '$ui/server-labels.js';
+ import { mapTitle, serverIdentity } from '$ui/server-labels.js';
+ import { decodeRconError, rconFixHint } from '$ui/rconError.js';
import Card from './primitives/Card.svelte';
import Badge from './primitives/Badge.svelte';
import Stat from './primitives/Stat.svelte';
- import StatusPip from './primitives/StatusPip.svelte';
+ import StatusBadge from './primitives/StatusBadge.svelte';
interface Held {
target: string;
@@ -57,6 +58,7 @@
compactEmpty = false,
mapLabelOverride
}: Props = $props();
+ const id = $props.id();
function ago(iso: string | null, now: number): string {
if (!iso) return 'never';
@@ -74,7 +76,8 @@
.slice(0, 4)
);
let showRoster = $derived(health === 'online' || health === 'stale');
- let title = $derived(serverTitle(name));
+ const state = $derived(restarting ? 'restarting' : health);
+ const error = $derived(decodeRconError(lastError));
let mapLabel = $derived(mapLabelOverride ?? mapTitle(map));
const showMap = $derived(mapLabel !== '—' && mapLabel !== serverIdentity(name).map);
let gtLabel = $derived(gametypeLabel(gametype));
@@ -99,7 +102,7 @@
elevation="interactive"
padding="md"
class={restarting ? 'restarting' : health === 'offline' ? 'offline' : ''}
- ariaLabel="Server {title}, {health}"
+ ariaLabelledby={`${id}-title`}
style={cardStyle}
>
{#if restarting}
@@ -108,19 +111,12 @@
-
-
+
- {#if health === 'provisioning'}
-
Provisioning
- {:else if health === 'starting'}
-
Starting
- {:else if health === 'offline'}
-
offline
- {:else if health === 'stale'}
-
Stale
- {:else}
-
+
+
+ {#if health === 'online'}
+
- {/if}
+ {/if}
+
{#if gtLabel || showMap}
{#if showMap}{health === 'online' ? 'Current map' : 'Last map'}: {mapLabel}{/if}{#if gtLabel}{gtLabel}{/if}
{/if}
@@ -193,7 +190,7 @@