diff --git a/ui/docs/battle-viewer-ux.md b/ui/docs/battle-viewer-ux.md index c82212a..956933a 100644 --- a/ui/docs/battle-viewer-ux.md +++ b/ui/docs/battle-viewer-ux.md @@ -47,6 +47,15 @@ hull. The per-bucket label `:` sums NumberLeft across the underlying groups; per-tech detail is available in the Reports view (Foreign Ship Classes / My Ship Types). +Bucket order inside a cluster is **locked at battle start** by the +initial ship count (`num` summed across tech variants, descending). +As ships die during playback only the label number changes — every +bucket keeps its slot in the Vogel spiral, so the user does not see +the cluster reshuffle when a class empties. Vogel positions are +then reassigned per rank by their inward distance toward the +planet, so the rank-0 bucket (the largest at battle start) always +sits at the most-inward spiral slot. + Circle radius scales with per-ship FullMass (Empty + Carrying via the per-ship `LoadQuantity`). The viewer resolves a `(race, className) → ShipClassRef` lookup from the surrounding @@ -95,6 +104,32 @@ the log instead of watching the SVG. The list is always present and never hidden, satisfying the original Phase 27 acceptance "the same data is accessible as a static text log". +Each log row is also a ` + {/each} @@ -180,11 +216,26 @@ is logically isolated: feed it any `BattleReport` matching min-height: 0; } .log li { - padding: 0.15rem 0; border-bottom: 1px solid #1c2240; } - .log li[data-current="true"] { + .log-row-btn { + display: block; + width: 100%; + text-align: left; + padding: 0.15rem 0.4rem; + background: transparent; + border: 0; + color: inherit; + font: inherit; + cursor: pointer; + } + .log-row-btn:hover, + .log-row-btn:focus-visible { + background: #131a36; + } + .log li[data-current="true"] .log-row-btn { color: #ffe27a; font-weight: 600; + background: #1a2240; } diff --git a/ui/frontend/src/lib/battle-player/playback-controls.svelte b/ui/frontend/src/lib/battle-player/playback-controls.svelte index f5ef0ea..87f40c6 100644 --- a/ui/frontend/src/lib/battle-player/playback-controls.svelte +++ b/ui/frontend/src/lib/battle-player/playback-controls.svelte @@ -57,7 +57,7 @@ already at its end. disabled={frameIndex === 0} aria-label={i18n.t("game.battle.controls.step_backward")} data-testid="battle-control-step-back" - >◀︎ + >◀︎◀︎