feat(web): green/red winner-loser team names + per-line colored battle log (skyquake glyphs)

This commit is contained in:
FURRO404
2026-06-18 02:02:46 -07:00
parent 98a0c4fd9e
commit 92eb461e2d
2 changed files with 22 additions and 5 deletions
+15 -5
View File
@@ -161,7 +161,7 @@ function ParticipantNames({ participants }) {
<div className="flex min-w-0 flex-wrap gap-x-3 gap-y-1"> <div className="flex min-w-0 flex-wrap gap-x-3 gap-y-1">
{participants.map((participant) => ( {participants.map((participant) => (
<span <span
className={`truncate text-sm font-semibold ${participant.result === 'win' ? 'text-fury-violet' : 'text-text-soft'}`} className={`truncate text-sm font-semibold ${participant.result === 'win' ? 'text-win' : 'text-loss'}`}
key={`${participant.result}-${participant.name}`} key={`${participant.result}-${participant.name}`}
> >
{participant.name} {participant.name}
@@ -2781,6 +2781,14 @@ function TeamProfilePage({ navigate, profile, requestedTeam, teams }) {
const SCOREBOARD_GRID = 'grid-cols-[minmax(220px,1fr)_repeat(6,minmax(52px,72px))]' const SCOREBOARD_GRID = 'grid-cols-[minmax(220px,1fr)_repeat(6,minmax(52px,72px))]'
// Battle-log lines are prefixed +/-/<space> for winner/loser/neither (matching
// the Discord diff format), so colour each line by its acting team.
function battleLineColor(line) {
if (line.startsWith('+')) return 'text-win'
if (line.startsWith('-')) return 'text-loss'
return 'text-text-soft'
}
function GamePage({ gameId, navigate }) { function GamePage({ gameId, navigate }) {
const [gameState, setGameState] = useState({ status: 'loading', data: null, error: null }) const [gameState, setGameState] = useState({ status: 'loading', data: null, error: null })
const [logs, setLogs] = useState({ chat_log: [], battle_log: [] }) const [logs, setLogs] = useState({ chat_log: [], battle_log: [] })
@@ -2968,16 +2976,18 @@ function GamePage({ gameId, navigate }) {
{logs.battle_log.length ? ( {logs.battle_log.length ? (
<details className="rounded-lg border border-border bg-fury-white shadow-sm"> <details className="rounded-lg border border-border bg-fury-white shadow-sm">
<summary className="cursor-pointer px-5 py-4 font-semibold">Battle Log</summary> <summary className="cursor-pointer px-5 py-4 font-semibold">Battle Log</summary>
<pre className="overflow-x-auto whitespace-pre-wrap px-5 py-3 text-xs leading-relaxed text-text-soft"> <div className="log-mono overflow-x-auto px-5 py-3 text-xs leading-relaxed">
{logs.battle_log.join('\n')} {logs.battle_log.map((line, i) => (
</pre> <div className={`whitespace-pre ${battleLineColor(line)}`} key={i}>{line}</div>
))}
</div>
</details> </details>
) : null} ) : null}
{logs.chat_log.length ? ( {logs.chat_log.length ? (
<details className="rounded-lg border border-border bg-fury-white shadow-sm"> <details className="rounded-lg border border-border bg-fury-white shadow-sm">
<summary className="cursor-pointer px-5 py-4 font-semibold">Chat Log</summary> <summary className="cursor-pointer px-5 py-4 font-semibold">Chat Log</summary>
<pre className="overflow-x-auto whitespace-pre-wrap px-5 py-3 text-xs leading-relaxed text-text-soft"> <pre className="log-mono overflow-x-auto whitespace-pre-wrap px-5 py-3 text-xs leading-relaxed text-text-soft">
{logs.chat_log.join('\n')} {logs.chat_log.join('\n')}
</pre> </pre>
</details> </details>
+7
View File
@@ -133,6 +133,13 @@
"Segoe UI", Inter, ui-sans-serif, system-ui, sans-serif; "Segoe UI", Inter, ui-sans-serif, system-ui, sans-serif;
} }
/* Chat/battle logs: monospace for column alignment, with skyquake before the
generic keyword so country/event glyphs still resolve per-character. */
.log-mono {
font-family:
ui-monospace, SFMono-Regular, Menlo, Consolas, "skyquakesymbols", monospace;
}
body { body {
margin: 0; margin: 0;
min-width: 320px; min-width: 320px;