fix(ui): talk button keeps authored 46x17; white authored captions + font for talk/Send

Owner report (2026-08-24, post gate-pass): the chat channel button was
bigger than retail and both its caption and the Send caption were warm
gold instead of retail's near-white.

Size: retail never resizes the talk button — HandleSelection
@0x004cd540 only swaps the caption string; the authored 46x17 element
stands, and the authored SHORT captions ('Gen', 'Fell', ...) fit it —
that is why retail abbreviates. Our content-widening reflow (grow the
button to its label, shift the input) was a compensation for the
now-retired invented long captions, measured with the wrong font on
top. Deleted; the authored row layout stands.

Color + font: the button caption child (0x10000015) and the Send
button (0x10000019) both author pure white text with their OWN FontDid
0x40000002 (live-DAT probed) — different from the transcript font,
which is the other half of why 'Chat' fits 46px. UiMenu gains a
ButtonDatFont for the caption (popup rows keep the menu font);
the controller reads both elements' authored FontColor/FontDid instead
of the invented (1,.92,.72) constants.

The old widening pin is rewritten to the retail contract; a new
conformance test pins authored width, white captions, and the authored
font DID being requested for both buttons.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-08-24 20:43:46 +02:00
parent c12a95b6e8
commit 67e963524b
4 changed files with 106 additions and 33 deletions

View file

@ -1599,7 +1599,8 @@ public sealed class RetailUiRuntime : IDisposable
// Authored talk-focus labels (StringTable 0x23000001, ID_Chat_*
// keys via compute_str_hash — the retail "Gen"/"Tell to X" set).
chatStrings: key => new DatStringResolver(_bindings.Assets.Dats)
.Resolve(0x23000001u, DatStringResolver.ComputeHash(key)));
.Resolve(0x23000001u, DatStringResolver.ComputeHash(key)),
resolveFont: _bindings.Assets.ResolveFont);
if (controller is null)
{
Console.WriteLine("[D.2b] chat: required role elements missing in 0x2100006F.");