WootBuild.

Studio/docade/Advisory 02

Advisory · advisory-02.md

Advisory 02 — the collectible ground is undecided, and two of our own rules contradict each other on it

From: WootBuild · To: docade · Date: 2026-08-17 Status: DECIDED 2026-08-17 — option A. Collectibles sit on --color-surface-raised (#262c4a). The visual mission has been amended: principle 2 now tests separation on #262c4a by value and local colour, the light row drops the rim in favour of soft contact occlusion, and the outline rationale is restated. Piece 2's recolor is now a genuine base-fill tint.


Why this is being raised now

WootBuild's first draft of docade's visual mission treated --color-bg: #0d0f1a as fixed ground and wrote the art direction to survive it. That was the wrong instinct, and it produced a contradiction we did not catch until we priced the alternative.

A background token is one line and a few minutes. The art is 204 pieces plus ~150/year, forever. When the cheap constraint makes the expensive one harder, the cheap one should move.

The contradiction

Two principles in the draft mission cannot both hold on a near-black ground:

PrincipleWhat it requires
2It separates from a near-black groundA rim light — nothing else reliably lifts a soft, dark-edged plush off #0d0f1a
3Colour is separable from shading; flat fills, shading its own passNo baked directional lighting

A rim light is baked directional lighting. Its hue and intensity are computed against the base colour it was drawn for. Tint that base fill to make a colorway and the rim is wrong — too hot on a pale recolor, invisible on a dark one.

So on #0d0f1a, every collectible needs the exact treatment that breaks recolouring. And recolouring is not a nice-to-have: Q25's entire 150/year growth model rests on a recolor costing a fraction of a sculpt. Principle 2 quietly taxes the business case.

This is the kind of conflict that does not announce itself. It would have surfaced around sculpt 6, as "the colorways look a bit off," and been mistaken for a prompting problem.

The constraint is not actually a constraint yet

src/ contains no collection, room, stuffy, or grid component. Those are Phase 4 and unbuilt. Nothing has ever rendered a collectible on any ground.

So this is not a request to change a shipped decision. It is a request to make one deliberately, at the cheapest possible moment, instead of inheriting #0d0f1a by default because it is what the app chrome happens to use.

Three options, priced

OptionArt costdocade costTintability
ACollectibles sit on --color-surface-raised (#262c4a) — the token that already exists and already backs cards on Today and PrizesFlat fills work; soft contact shadow only; no rim needed~zero. The component doesn't exist; this is choosing a token, not changing onePreserved
BKeep #0d0f1a, accept rim lightRim on every piece, tuned per colorwayzeroBroken — every recolor needs art, not a tint
CLighten the whole child groundBest separation of the threeOne line, but it changes the app's entire feel — the "arcade at night" position is real and worth keepingPreserved

Recommendation: A. It costs docade essentially nothing, keeps the arcade-at- night identity fully intact for the app chrome, preserves the growth model, and resolves the contradiction without anyone having to choose between two principles that are both correct in isolation.

#262c4a is a mid-dark indigo, not a light ground — a plush separates from it on value and its own local colour, the way a toy on a shelf does. That is enough. The rim light was only ever compensating for a ground that was too close to black.

What this does not change

If docade picks A

WootBuild amends the mission before forging anything:

The general point, for the record

WootBuild should have priced this in Stage 1 rather than designing around it. The onboarding canon now requires recording what each inherited constraint costs the client to change, and checking whether the surface using it has even been built. A token in a stylesheet is not a decision if nothing renders it yet.