Skip to content

eqosys menus: a game injects its skin once and every shared surface wears it, hill climb to 8/10, rounds 5+ (from #3570) #3600

Closed

Description

@QuinnsCode

Score: 6.5/10 (target 8), after round 4 (PR #3597; the hook merged in #3540; earlier rounds 7, 7.5 and 7, each from a fresh judge). Moved up from #3570: its round 4 comment has the shots and the Next list. Per-game skins are #3598.

The owner's brief (2026-11-04): every game should be able to inject its own style into the eqosys menus. Today the shared sign-in client (packages/util/src/eqosys.ts) renders nothing, but the pieces games mount from it do, each in its own way: the report button (packages/util/src/report.ts) carries hard-coded inline cssText (grey border, white background, system font) that looks the same in a space-marine war room and a druid's tome; the spaces panel (spaces.ts) and lobby (lobby.ts) leave skinning to the page, so each game has its own account box (apps/*/src/account.ts, Two Fronts's account box in main.ts). The house kit (packages/ui) already re-themes by CSS custom properties (applyTheme, TOKENS), and packages/game-controls/src/skins.ts has classic / house skins with installStyles.

Goalpost

One way for a game to say "here is my skin" once, and every eqosys-rendered surface in that game wears it: sign-in / account chip, achievement toast, report button and form, party and spaces panels, lobby. Scored out of 10 by an agent judge against:

  1. One injection point. eqosys({ app, url, from, prefix, skin }) (or a sibling skinEqosys(...)) takes a Theme of --ui-* tokens plus optional extra CSS, and every shared surface reads tokens from packages/ui instead of hard-coded colours. No per-surface styling API.
  2. No hard-coded colours or fonts left in report.ts, spaces.ts, lobby.ts, and the achievement toast: every colour, radius, border and font is a --ui-* token with a house default.
  3. Three games wear it. Two Fronts (distressed metal: --imperial fonts, brass on dark steel, square corners), Mythic Masters (tome: parchment, ink, Covered By Your Grace for the Book's hand; look at apps/mythic-masters/src/tome.css), Skate Tech Park (stay minimal: the house skin). Each injects its skin in its eqosys.ts and deletes any duplicate styling of those surfaces from its own CSS.
  4. Cut before you add. The per-game account boxes that do the same thing (apps/*/src/account.ts) share one accountChip(...) in packages/util that the skin styles; copies die in the same PR.
  5. One journey test per touched game still passes (eqosys.test.ts), plus one test that a skin's tokens land on the mounted surfaces (eval the computed style, don't assert on source text).

The loop

Each round is one PR against main that says "Part of #N". Score it with bun run probe <app> --shot on each game's sign-in chip, report form and achievement toast, side by side. End the round with a comment here starting Score: x/10 (target 8) and ending Next: ..., then open the "rounds N+" issue and close this one with "Moved up to #new".

Why first: the per-game artwork climbs (Two Fronts distressed metal, Mythic Masters tome) hang their menu skins on this hook.

Round 5 starts here

Activity

  1. self-assigned this
    on Nov 5, 2026
  2. QuinnsCode commented on Nov 5, 2026

    @QuinnsCode
    OwnerAuthor

    Score: 3.25/10 (target 8)

    Reset by the owner (2026-11-05): every hill climb's agent-judged "where am I at" score is halved to match what they expect; this one was 6.5. Judges keep scoring before against now the same way, and each round reports half the judge's number from here on.

  3. QuinnsCode commented on Nov 9, 2026

    @QuinnsCode
    OwnerAuthor

    Score: 3.5/10 (target 8)

    Round 5 is PR #4146. A fresh judge scored BEFORE 7 and NOW 7.5. Half of that 0.5 gain gives 3.25 + 0.25.

    What it changes: on a phone the Report form is a bottom sheet with Close, and the flag steps aside while it is open. Toasts drop in under a game's top bar (the new --ui-top token; Mythic uses 52px). Mythic's Settings > Account tab is the shared accountChip. A test checks that the eqosys badge computes the same under Two Fronts', Mythic's and Skate's real skins.

    Two Fronts Mythic Masters Skate Tech Park Mythic Account tab

    Next: give each real game a test that its own tokens (background, font) land on every mounted surface, the lobby and spaces panels included, not just that the badge is unchanged.

    • On Mythic, the toast at --ui-top: 52px still sits close to the colour-wheel button. Add a test that the toast's box doesn't touch the top-bar buttons.
    • Take shots of the party lobby and spaces panel in each game's skin.
  4. QuinnsCode commented on Nov 9, 2026

    @QuinnsCode
    OwnerAuthor

    Moved up to #4148

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions