The living spec for the six objects. The bar (study §4): recognized and trusted at first sight — like a die, a post-it, a whiteboard — no teaching. Phase 1: settle the system material; run the die through the full pipeline as pathfinder, then the envelope. Everything below is hand-authored SVG on theme variables — the craft pass is in(silhouette, extrusion, drilled pips, contact shadow); §4 records the escalation options if no candidate still clears the bar. Status: craft pass rejected · form handed out · 2026-07-20 — the drawing did not reach the bar (§4), so the die's form is now a design brief; the material, the states and the motion below survive the redraw. The die is also a family, not one object (§2).
What furniture is made of, visually — settled once, inherited six times. The first four rules were the phase-1 proposal; the last five are what the die's craft pass actually taught, and they are now part of the material.
--surface is the lit face, --surface-2 every shaded plane — that pair is the darker one in both themes, so a single drawing lights correctly in light and dark with no per-theme artwork. Recessed things (pips, holes) are --ink; they invert to light-on-dark exactly the way a black die with white pips is still a die.#fff at theme-dialed opacity, because light falling on a body is white whatever the body's colour is: a top-down lift gradient (.55 light / .22 dark / 0 e-ink) that makes the object read as lit, and a small corner specular (.5 / .13 / 0) that makes it read as semi-gloss. A deliberate exception to the no-hex-in-SVG rule in lib/PRESENTATION.md — the only one in the material, and it is load-bearing: the card and the object are both --surface, so without the lift a dark-theme die is the exact value of the card it sits on and reads as a hole rather than a thing. Found at paint level, not in the markup; the phase-1 candidates had this bug and it was invisible in light mode.the die · the envelope · the board · the roster · the bell · the aside — one shadow, one seal, one pair of surface tokens
Every candidate sits in the same material card and shows the same two states — 待掷 (pending: lifted, dashed coral, one tap) and 已掷 (the result as pips: the faces are the answer, the mono line only confirms). Composition is fixed at 2d6 so the pair reads. What varies is the object itself, flat → physical:
1d7, "pick 1–100")— which breaks the recognition argument rather than extending it, because only the d6 has pips and "the result is the face" was the whole move. Three positions, none settled: ① the d6 anchors and the rest inherit — d6 keeps pips (the lifetime prior, language-independent), the others carry a numeral, exactly as a real dice set looks; making the d6 numeric for family consistency would trade the best asset to fix the smallest problem. ② the result face is drawn frontal and dominant even where a fixed camera wouldn't show it — a correctly-projected d20's top face is a small triangle among triangles and is unreadable at 48px; legibility beats camera realism, because the result is the object's entire message. Risk: it stops being a solid and becomes a badge with a number on it. ③ arbitrary N gets an honest non-die form (a drawn lot, a chip) — no seven-sided solid exists, and a fairness instrument must not imply a physical object that doesn't. Minimum bar for the family: each member reads as "a die, and the number is N"; telling d12 from d20 at 48px is a stretch goal, and the card's mono 1d20 line may have to carry it.The house style, unmodified — ink stroke, flat fill, closest kin to the app's icons; the control the other four are measured against. The craft pass sharpened its proportions and nothing else, and in doing so exposed its real cost: flat has no way to say "lifted." With no shadow there is no pose, so A's pending state leans entirely on the card's dashed halo — the one thing the bar says an object shouldn't need. Risk: reads as an icon of a die rather than a die.
Volume without shading tricks — three flat faces make it unmistakably a cube. The craft pass gave it a proper contact shadow and put the pips through the true isometric projection, so the 4 is a diamond and the 3 a stacked line, the way they actually foreshorten. Both fixes helped, and both confirm the objection: the reading face is the smallest face on screen, and countability is what recognition rests on. Risk: reads "board-game app icon" rather than "a die on this table."
The restrained-skeuo middle, rebuilt. The phase-1 version was a gradient and an ellipse; this is an actual solid — one exact union path gives the body its extruded top-and-right, the front face keeps the full 44px of pip room, a corner specular says "semi-gloss plastic," and the contact shadow puts it on a surface. Four shapes, no filters beyond one blur. This is the strongest first-sight/effort ratio: it borrows the die prior at full strength and spends nothing to do it.
C's body, photographed instead of diagrammed. Loose objects are never square to the world, and the angle is the "just landed" tell — it is also the natural end-pose of the tumble in §5, so D and the motion spec are the same decision. The craft pass made the two states differ in degree: waiting is barely askew (−6°/+5°), landed is committed (−12°/+9°). Risk: at 48px the tilt can read as a rendering mistake rather than as life — the one thing only strangers can settle.
Thickness as the only 3D cue — a purely vertical extrusion, which is the one offset direction that needs no union path at all (two rounded rects, no notch). Warm, tactile, and the same edge trick suits the envelope and the board pin, which argues for it as a family style. Risk unchanged, and the craft pass sharpened it: with depth only below, the object reads as lying face-up like a tile — and tiles are for drawing, dice are for rolling. The prior is adjacent, not exact.
One phone per candidate, frozen at the moment that matters: the pending die, in context, waiting for 乙 — as 乙 sees it, so the composer dock is in frame too (both surfaces are the same tap). Each still draws the same #penX group as §2 above, so the tested artwork and the specified artwork are one object. Screenshot any frame and show it cold.
kit A · the glyph
kit B · the cube
kit C · the soft die
kit D · the tumble
kit E · the tile
| candidate | owner read | stranger test (n, pass?) | notes |
|---|---|---|---|
| A · the glyph | — | — | |
| B · the cube | — | — | |
| C · the soft die | — | — | |
| D · the tumble | — | — | |
| E · the tile | — | — |
feOffset+feComposite, a woven paper texture) and would cost bytes at 48px for detail nobody resolves. So the next real rung is image-gen as reference only — generate the ideal die as raster, then trace it back into SVG, because shipped furniture must stay SVG regardless (theme variables, free scaling, tiny payload, animatable states); and after that, a human designer pass on the frozen material spec. The material and the states survive any escalation — only the object's rendering is on the table.Furniture moves the way objects move: it arrives and it answers. Both are short. The whole point is that motion is affordance — it tells you a thing landed on the table and that the thing is physical — and the moment it becomes suspense, the object stops being furniture and starts being a slot machine. Tap the buttons; every timing below is live CSS, not a description of one.
| gesture | duration | curve | what it says |
|---|---|---|---|
| drop-in — any object arriving | 200ms | cubic-bezier(.22,.68,.3,1) | a thing was placed on the table. The 2px overshoot is the settle; without it the object slides rather than lands. |
| the tumble — the die answering | 190ms | cubic-bezier(.2,.86,.34,1) | the die turned once and stopped. Each die turns a different way and a different amount, because two thrown dice never agree. |
| the shadow — under the tumble | 190ms, same curve | scale 1.4 → 1.0 | the die fell onto something. This is the cue that sells contact; the rotation alone reads as a spinning sticker. |
| the sum — the confirming line | 140ms @ 170ms | fade + 3px rise | the number arrives after the pips, so the pips are the answer and the line is the receipt. Never the reverse. |
| the flap — the envelope opening | 220ms | cubic-bezier(.3,.7,.3,1) | a hinge, not a fade. scaleY(−1 → 1) about the body's top edge is a flap rotating, exactly, for free — and it passes through zero height mid-way, which is what a real flap does edge-on. |
@media (prefers-reduced-motion: reduce) and collapses to the final frame. Nothing in the design depends on having seen the motion: the pose, the shadow and the pips carry the whole state in a single still — which is the same property the screenshot test measures. A furniture set that passes §3 is, by construction, usable with motion off.The second object, and the one carrying the study's product moment: the host commits a private prediction, the room holds it visibly sealed, and the debrief opens it. Before drawing anything, the anatomy of the object that already solved this problem for a billion people.
WeChat's red packet is the strongest argument in the furniture principle's favour: a new digital object class that needed no instructions, in a product whose users included hundreds of millions of first-time smartphone owners. It is worth being precise about why, because the reasons are transferable and the styling is not.
| # | what the 红包 does | what the envelope takes |
|---|---|---|
| 1 | One saturated red identifies it across a scrolled list at a glance. | The material's silhouette does this job instead: nothing else in the stream is centred, shadowed, and sealed. Our envelope's own red is the wax seal, not the body. |
| 2 | A default blessing means the object is never socially empty. | The envelope always carries its timestamp(20:14 封存). Even sealed and silent it is saying the one thing that matters: this was written before you answered. |
| 3 | One gold seal, dead centre — exactly one thing to do. | Adopted literally: the room's provenance ring, enlarged, sitting on the flap's tip. The provenance mark and the wax seal are the same glyph at two sizes — which is why that glyph has to work at 11px and at 22px. |
| 4 | Opened and unopened are different objects on screen. | Four states below, all readable in a still: sealed · yours-to-fill · yours-committed · opened. |
| 5 | Bounded ceremony; the payoff is unambiguous. | 220ms flap, then the note. The payoff is the host's own earlier words, quoted in serif — the room's one moment of "it knew." |
| 6 | Everyone in the group sees the packet; who grabbed it is public. | Same, and load-bearing: the sealed envelope is visible to the whole room from the moment it is committed. A secret nobody saw you commit proves nothing. |
| 7 | Tapping claims — each person acts for themselves. | Deliberately not taken. The host's note is opened once, globally, by the rule — not by whoever taps first. Which forces the split below. |
Left to right: the host commits (inert — nothing to do), you are handed one (dashed, open, empty, one tap), you commit (shut, and the count moves), the room opens them all (the flap carries its own broken seal up, the note rises, both timestamps stay). The whole trust argument is those two timestamps sitting under a quote — sealed at 20:14, opened at 20:31, and the room never held the pen.
The same object in the collect shape — the go-around's sealed variant(抽签 flip-together). One card, one row, each player's own envelope, and the only tappable one is yours:
Three shut, one open and dashed — and no legend anywhere explains which is which. That is the whole test: the row is readable because the die taught the rule first. If a stranger can point at the one they're supposed to touch, the envelope has inherited the die's work, and the furniture principle is doing exactly what §4 of the study claims it does.
#penX/#rolX groups by construction. Owner verdict 2026-07-20: the language still isn't right — the form is out to a design brief (§4), the stranger round is deferred until there is something worth testing, and the die's expansion to d4–d20 is an open requirement (§2). The study: host-moves.html.