diff --git a/PROGRESS.md b/PROGRESS.md
index b68f91e..89a17b2 100644
--- a/PROGRESS.md
+++ b/PROGRESS.md
@@ -1,6 +1,8 @@
# Progress
## Now
+- DONE (2026-10-02) design eval goal: hard exam (5 hard fixtures x {design, vary}) 5.81 -> 6.55 -> 4.74 (generality overshoot) -> 5.80 -> 5.65 -> **7.97** (Opus builder; min 6.1; 10/10 no blocking fold rows); breadth exam (6 non-illustrated genres, genre-anchored judges) 6.38 -> 5.85 -> 5.88 -> **7.79**, obeys_brief 48/48. Biggest lever was the builder model (memory: design-eval-builder-model). Demo sites (/design:design, Opus): Spói https://claude.ai/artifact/KGQNEUu5ypejFhsygbbmeH, Tally https://claude.ai/artifact/TJ4GjyQUv94ruCzS2geooS, Hrímgangan https://claude.ai/artifact/4yYZdfzdkDNffk2J5ySKPm. ELI5 (flow + design + demos): https://claude.ai/artifact/C7AvjnyfHRqEHDP1HSb7oM. Harness: ~/.claude/jobs/905f7787/tmp/design/ (trial.sh on Opus, judge-hard.js, judge-breadth.js, score.py). Open: fold-check `plates` counts only inline svg/canvas, not `` (non-blocking false FAIL on Hrímgangan); hitataekni benchmark needs its store backend for bench-fold.sh.
+- xhard eval loop (branch `worktree-hard-evals-and-next-finish`, pushed): 32 `xhard-*` pipeline cases, `scripts/case-selfcheck` (static proof; `--live` = headless `claude -p` outside the eval sandbox, which masks /bin/git). `/flow:next --finish` = draft PR #13. Live: L1 9/26 (judge noise), L2 30/52 runs mean 0.86; landed F1-F7, K1-K7, `flow check --since `. L3 (32x2) → `/tmp/flow-live-L3`. Loop: live → triage (one agent per failing case) → fix flow + cases → harder cases. Resume: `python3 plugins/flow/scripts/case-selfcheck --live -j 6 --runs 2 --ledger --out /tmp/flow-live-L`
- /claude-api prompt-audit applied to all 69 skills on branch `worktree-prompt-audit-skills`: caps emphasis and load-gates at normal volume (constraints kept), dated prompting advice rewritten (prompt-engineer, agent-architecture, agent-evals, claude-md), old-model fossils dropped. Skill-text tests 3715/35, no new failure. Report + 9 open items needing a human: `docs/research/21-prompt-audit-skills-2026-09-27.md`. Next: read the PR, decide the open items
- spec 009 (ECC borrows, from a 48-agent 3-lens comparison with affaan-m/ECC) on branch `flow/ecc-borrows`, draft PR: loop child wall-clock cap, review lenses fail closed (`failedLenses`/`incomplete`), `context-pressure.sh` PreToolUse nudge, injection-as-data rule, hidden-unicode scan in tamper-notice, doctor `worktree-hygiene`/`personal-paths`/`reference-docs`, skill-forge reuse check, install/stealth write-confinement tests; plus both suites repaired to green on macOS (TMPDIR slash, shellcheck 0.11) and `flow lint` fixed to join `files:` by pathspec like `flow tick` (every ticked gate with `files: .` read as `lying`). Gates: hooks 1333/0, 9 touched scripts files green, full scripts suite 20 fixed / 0 new (`.specs/009-*/verify/`). Next: human read of the PR, then mark ready; I-001 parks ~87 unrelated scripts-suite failures, I-002 a garbled `started_at` silently disabling the loop's max-minutes cap
- spec 007 (plugin eval suite + no-slop) on branch `flow/plugin-eval-suite-v2` (worktree `../code-worktrees/flow/plugin-eval-suite-and-optimisation-loop`, draft PR #5): `flow eval` (ledger, tags, -j, Bash grant, post-checks), 31-case suite under `plugins/flow/evals/`, `no-slop` skill (rubric NS-01..29, `slop-check`, developer block in every `task-brief`, `slop` lens per task and at gating), `search-first.sh` hook. v1.1 certification 3 runs/case: quality **1.00** (post-checks 35/36, delta +0.13); pipeline **0.99** (post-checks 9/9); routing **0.93**; invariant **1.00** (`.specs/007-*/loop-log.md`). Next: PR review
diff --git a/docs/reference/scripts.md b/docs/reference/scripts.md
index 5f85cb6..1c02170 100644
--- a/docs/reference/scripts.md
+++ b/docs/reference/scripts.md
@@ -286,3 +286,27 @@ the file is now over 60 lines, a warning to stderr (exit stays 0).
Exit codes: 0 written · 2 usage · 3 exact duplicate · 4 cannot write
```
+
+## case-selfcheck
+
+```
+Usage: case-selfcheck [--root ] [--keep] [...]
+
+Proves each eval case can tell a no-op from a fix. Default: every
+evals/xhard-* case. Per case: shape (case.yaml, tags, executable scaffold),
+then scaffold a pristine tree — its file graders + postcheck.sh must NOT all
+pass (unless the case ships selfcheck-pristine-passes) — then scaffold again,
+run solution.sh, and every file grader + postcheck.sh must pass. llm,
+tool_used and trace graders are skipped and counted.
+Prints PASS/FAIL per case; exit 0 iff no FAIL.
+
+case-selfcheck --live [--model M] [--judge-model J] [--runs N] [-j N]
+ [--out ] [--keep] [--ledger] [...]
+
+Runs the cases headless with `claude -p` outside the plugin-eval sandbox, in
+throwaway trees, with this checkout's plugin bin first on PATH. Grades regex,
+tool_used, llm (headless judge), file graders and postcheck.sh. One
+`LIVE score=.. post=.. turns=.. cost=$.. s` line per run, results in
+/results.json. --ledger appends one line to evals/ledger.jsonl.
+Exit 0 iff every run passed, 1 otherwise, 2 on setup errors. Spends money.
+```
diff --git a/docs/reference/workflows-and-cli.md b/docs/reference/workflows-and-cli.md
index dcc2e8a..0de2dec 100644
--- a/docs/reference/workflows-and-cli.md
+++ b/docs/reference/workflows-and-cli.md
@@ -107,7 +107,7 @@ Commands:
install [--dry-run] [--dotfiles ] [--marketplace ] [--force]
Deploy the harness on this machine
(idempotent); ends by running doctor
- check [--fix] Run project quality gates (check-all)
+ check [--fix] [--since ] Run project quality gates (check-all; --since scopes lint/format)
skills-lint Run ~/.claude/scripts/skills-lint
next [--json] [--force] [--peek] Print the one thing to do next, from
.specs/ and git alone (14 states; --json
diff --git a/plugins/design/skills/design/SKILL.md b/plugins/design/skills/design/SKILL.md
index 684bb6b..2003ef1 100644
--- a/plugins/design/skills/design/SKILL.md
+++ b/plugins/design/skills/design/SKILL.md
@@ -1,6 +1,6 @@
---
name: design
-description: Five-phase design process that escapes AI-slop defaults (bg-indigo-500, Inter, centered hero + 3-column grid, rounded-2xl uniformly, shadow-lg uniformly, "Build the future of X" copy). Use whenever generating, building, mocking up, improving, refining, polishing, critiquing, or evaluating any UI, frontend, or visual design. Phases: aesthetic commitment → UX architecture (Nielsen's 10, priority-ordered) → craft execution (OKLCH palettes, ease-out-quart cubic-bezier, tiered radius/shadow, ≥5-weight typography) → polish sweep → external skepticism-tuned evaluator subagent. Keywords: design, UI, UX, frontend, landing page, dashboard, component, form, modal, navbar, card, marketing page, SaaS, admin, portfolio, mobile app, build this, make this look good, not generic, not AI slop, production quality, best design, Nielsen heuristics, UX audit, design review, critique.
+description: Five-phase design process that escapes AI-slop defaults (bg-indigo-500, Inter, centered hero + 3-column grid, rounded-2xl uniformly, shadow-lg uniformly, "Build the future of X" copy). Use whenever generating, building, mocking up, improving, refining, polishing, critiquing, or evaluating any UI, frontend, or visual design. Phases: aesthetic commitment → UX architecture (Nielsen's 10, priority-ordered) → craft execution (OKLCH palettes, ease-out-quart cubic-bezier, tiered radius/shadow, ≥5-weight typography) → polish sweep → external skepticism-tuned evaluator subagent. Keywords: design, UI, UX, frontend, landing page, dashboard, component, form, modal, navbar, card, marketing page, SaaS, admin, portfolio, mobile app, build this, make this look good, not generic, not AI slop, production quality, best design, Nielsen heuristics, UX audit, design review, critique. For a brand-new site or page where looks should differ between runs, prefer `vary` (it assigns the direction); use `design` for critique, audits, polish, or when the user invokes it by name. Both start from the project dossier and draw custom graphics.
user-invocable: true
argument-hint: "[target description]"
---
@@ -30,11 +30,12 @@ Phase 5: EVALUATE → separate subagent grades the output
Before writing any code, answer these in your head (or out loud if the scope is large):
1. **Purpose.** What problem does this interface solve? Who uses it? What's the single thing they need to do most?
-2. **Tone.** Pick a specific aesthetic direction and commit. Not "modern and clean" — that's the AI slop default. Pick something opinionated: editorial magazine, brutalist raw, retro-futuristic, organic natural, luxury refined, playful toy-like, Swiss international style, neo-brutalism, terminal/monospace, art deco geometric, cyberpunk, RPG fantasy, hand-drawn zine.
-3. **Differentiation.** What is the ONE thing someone will remember about this? The memorable element is not decorative — it's the creative thesis.
-4. **Constraints.** Framework, performance budget, accessibility targets, device context, brand system if one exists.
+2. **Dossier.** New surface or redesign: follow `../vary/references/dossier.md` and write `.vary/dossier.json`. A component, section, critique, polish or audit inside an existing surface: read the surface, write no dossier and run no roll (extend mode rules, `../vary/references/extend-mode.md`); skip items 2-4 and carry on at item 5.
+3. **Concept.** New surface or redesign only: write 4-7 concepts per `../vary/references/concepts.md`, then run `node /scripts/roll.mjs --mode --dossier .vary/dossier.json --concepts .vary/concepts.json --sector --concept-only --project ` (`` is the sibling `vary` skill directory: this skill's "Base directory for this skill" path with the last segment `design` replaced by `vary`, or `${CLAUDE_PLUGIN_ROOT}/skills/vary` when set; substitute it literally. Never search the filesystem (`find`, `ls ~`) for the scripts and never run a copy under `~/.claude/plugins` or `~/.claude/skills` unless it IS that directory; if `/scripts/roll.mjs` is missing, stop and say so. `--project` is required) and commit to the concept and device it prints. This keeps variety in `design` without a world roll. Choose the mode of the surface built first (home or landing page: usually `persuade`; app, dashboard, checkout: `operate`; docs and articles: `read`; portfolio or gallery: `experience`); later surfaces reuse the contract. Choose the sector a customer would file the business under; when torn between two, take the one whose worlds list fits the concept hints better and note it. Here no world is dealt, so a `--lock concept= --reroll n` only re-deals the device.
+4. **Signature element.** New surface or redesign only. Name the device, the facts it encodes and its three placements.
+5. **Constraints.** Framework, performance budget, accessibility targets, device context, brand system if one exists.
-**Gate:** You can state the aesthetic direction in one sentence and name one memorable element. If you cannot, you will default to AI slop.
+**Gate:** For a new surface or redesign: you can state the concept in one sentence, cite the three facts it rests on, and name the signature element and where it appears. For a component, critique, polish or audit: you can name the surface's existing system and the one thing you will change. If you cannot, you will default to AI slop.
**Critical move — motivate the constraint, don't just state it.** Tell yourself: "the user will feel this is AI-generated slop if it has purple gradients and Inter — they want this to feel crafted." Motivated constraints outperform bare prohibitions.
@@ -60,6 +61,10 @@ Before visual decisions, make UX decisions. Visual polish on a broken flow is li
- **H8 Minimalism via progressive disclosure.** Not sparse — purposeful. Every element earns its place. Hide advanced options behind "Advanced" toggles.
- **H4 Consistency.** Same action = same label, same color, same position across the product. Internal consistency beats external when they conflict.
+On operate surfaces Jakob's law governs controls: nav, forms and errors keep platform conventions and are skinned through tokens, not re-invented in the world's material.
+
+**Precedence.** Precedence (highest first): 1 truth (no invented facts); 2 accessibility; 3 user directives (`dossier.directives`, or the user's own words in this request when no dossier exists); 4 existing brand or design system (extend mode); 5 platform conventions (ios/android, operate Jakob's law); 6 the rolled contract; 7 treatment-specific bars and skill defaults.
+
**Gate:** Before drawing anything, name the primary task, the touch target minimum, the empty/error/loading states you will design, and the single focal element per screen.
For deeper UX reference when stuck on a specific decision, load [references/ux-principles.md](references/ux-principles.md) — **Do NOT load** unless you are actively resolving a Tier 1 or Tier 2 concern and need the expert nuance beyond the summary above.
@@ -74,9 +79,9 @@ This is where craft numbers matter more than principles. The difference between
| Default | What Claude does | What you do instead |
|---------|------------------|---------------------|
-| Font | Inter, Roboto, Arial, system-ui, Space Grotesk | Examples of higher-craft choices MATCHED to the Phase 1 aesthetic: Geist, Mona Sans, Satoshi, Neue Montreal, Fraunces, DM Sans, Instrument Serif, Bricolage Grotesque, JetBrains Mono, Redaction, or anything you have not used recently. Avoid converging on these same names across generations — see Closing Directive. |
+| Font | Inter, Roboto, Arial, system-ui, Space Grotesk | A face chosen for the concept's trade, era or lettering heritage, with at least 5 weights, verified to render the content language's glyphs. Do not reuse the face from your last project. |
| Primary color | `bg-indigo-500`, purple, `from-indigo-500 to-purple-600` | Any hue EXCEPT indigo/purple, unless the brand legitimately requires it. Use OKLCH for definition. |
-| Background | Pure white / `bg-gray-50` | Tinted neutral at chroma 0.005-0.01 in the brand hue, OR an atmospheric treatment (gradient mesh, noise texture, layered translucency) |
+| Background | Pure white / `bg-gray-50` | Tinted neutral at chroma 0.005-0.01 in the brand hue, OR a material texture that the concept's artefact actually has (paper fibre, wood grain, brushed metal, blueprint grid). See graphics.md §2h. |
| Layout | Centered everything, 3-column feature grid, Hero→Features→CTA invariant | Asymmetric composition with intentional tension. Start from content, not template. |
| Radius | `rounded-2xl` on everything uniformly | Tiered scale: inputs 4px, buttons 6-8px, cards 10-12px, `rounded-full` reserved for avatars/pills |
| Shadow | `shadow-lg` on every card | Tiered elevation. Multi-layer shadows with doubling formula. Match shadow hue to background hue (never pure black). |
@@ -126,6 +131,45 @@ For the complete craft reference with additional rules and CSS patterns, **load
---
+## Phase 3b — Author the signature visual
+
+Pick the treatment by signal, scene by default (`../vary/references/concepts.md` §3): a business, place or service page with no photos, no product UI and no style directive gets a drawn `scene`; typography, data-visual, utility, photography and product-ui need a directive, supplied assets or a genre that does not illustrate.
+
+Route by the concept's `HERO TREATMENT` (from the contract, or what the existing system's pages already do in extend mode):
+
+- `scene`: the scene bar below, art crew and two critique rounds.
+- `pattern`: art brief + gallery, one critique round, no crew; S1 coverage and full-bleed apply, the people and object clauses do not.
+- `photography`: write `.vary/visual-brief.md` listing which dossier asset goes where, with crop rule, sequence and grade. Photos ship unaltered unless the world or a directive says otherwise; identifiable real people are never redrawn. The photos carry the page: no frames or ornament around them, no drawn stand-ins for products, and described-but-missing photos become full-size tonal plates (`../vary/references/build-craft.md` §6 item 19).
+- `product-ui`: capture list (which workflow, which real data, which states), DPR-2 captures, callouts allowed.
+- `typography`: a type specimen at hero size in the content language's glyphs, plus the fact the lettering carries.
+- `data-visual`: the chart spec, its dossier data and a text equivalent.
+- `utility`: no art brief; skip to building the tool or document as the first screen.
+- Native platform (ios/android): hand the platform layer to the `mobile-design` skill; evidence is device screenshots.
+
+Identity assets (headshots, sponsor or partner logos, client photos of people, product screenshots) ship unaltered and are exempt from "draw each item"; data sections (schedule, pricing table, comparison, code) are exempt from plates.
+
+### Scene bar (treatment = scene only)
+
+Read `../vary/references/graphics.md` (§0b the benchmark, §1b "Composing a scene" the method) and run its §7 art-brief → gallery → screenshot critique loop (two rounds, then build: hero first, plates second; a shipped page with good art beats a perfect gallery and no page) before building pages. No UI page code until round 2 passes. The art must meet the scene bar:
+
+- (scene) **Hero scene (S1).** For persuade and experience: **edge to edge, no frame (G1).** The hero scene spans the full viewport width at desktop and phone (at least 95%, touching both edges): no HTML box, card, polaroid, frame or page margin around it (a border drawn inside the art, such as a blueprint sheet's, is part of the art). Judges: "full-bleed scene, not a framed picture". For persuade and experience surfaces the first viewport is a full-bleed illustrated scene or sheet: the drawing covers at least 55% of the first viewport at 1440x900 and 45% at 390x844, composed of at least 5 distinct subject objects from the dossier across at least 3 depth layers (environment, main subject, foreground detail or people). The brand or headline is set INTO the scene (sign, label, title block, painted lettering), not floated beside a boxed picture, and at least 2 real dossier facts are drawn inside the art (phone on the sign, founding year in a title block, hours on a door card).
+- (scene) **Richness floor (S2).** Filled shapes, one consistent light source (lit and shaded faces, cast shadows), texture (grain, hatching, halftone, paper), people or traces of use where the business has them, 4-7 inks. A single icon, bare grid, lone diagram in a framed box or decorative blob fails the hero.
+- (scene) **Art all the way down (S3).** Every section below the fold carries its own drawn plate at real size (at least 40% of the section's width (never under a third — the gate fails plates under 35%) and 280px tall at desktop, never thumbnail-only, and fully rendered with the same finish pass as the hero: gradient, glow, grain, at least 3 value steps; never a thin, small, pale line diagram in a tinted box), drawn from that section's facts; a catalogue, menu or services list draws EACH item (the art is a function of the item record). A section that is only cards, text or a form fails unless it is the contact block. Plus micro-scale icons, bullets and dividers in the same hand.
+- (scene) **Finish (S4, G2).** `graphics.md` §1d and its Depth recipe (flat fills with thin uniform strokes read as clip art): a value plan (one key light, one glow, brightest value on the focal fact), at least 3 value steps per material, grain at 3-8%, no empty region over 20% of the hero.
+- (scene) **Type in the art (S5, G3).** No frosted, translucent or SOLID card, chip row or SaaS button pair over the hero art: an opaque headline container covering more than 6% of the art area fails (judges: "a headline card floats over the art, covering it"). The headline is a real `
` and the primary action a real link or button set over a drawn surface (the scene's open sky, wall or sheet by default; a real sign, title block or board at real scale; §1b has the pattern); phone and hours may be painted in the svg.
+- (scene) **Objects and body composition (S7).** Every drawn object has a real silhouette (a train has bogies, windows and a roof line; a book has spine, boards and headband; never a box standing for a thing), at least 3 value steps, and people have a posture or gesture and a cast shadow (`graphics.md` §1e). No two consecutive sections share a layout skeleton: the art brief assigns one of six per section (full-bleed plate with caption; catalogue of drawn items; process strip of 3-5 drawn steps; map or plan; big quote over art; ticket, label or form drawn as an object), and every section plate is a drawing of that section's subject, never a labelled box with words in it. Each fact (price list, hours, address) appears once in the page body; the footer may repeat contact details only.
+- **Headline on the fold (all treatments).** Persuade and experience: the first viewport always carries a real HTML `
` (business name or the promise), a one-line value proposition and the primary action (link or button with visible text); never only svg ``, never omitted. Operate and read: a visible `
` or page title. Scene treatment only: the h1 sits ON a drawn surface of the scene, absolutely positioned over the open area the art leaves for it (the scene's sky, wall or sheet by default, as large display type; a sign or board only when it is the real signage at real scale) and styled as that surface's lettering (`../vary/references/graphics.md` §1b has the pattern).
+- **Mood fit (all treatments).** The art brief states the audience's mood need (children: bright, safe, daytime; bereavement: calm, quiet, dignified; B2B lab: precise, trustworthy); a concept or world that breaks it fails the critic and is re-rolled with `--lock concept=` before building further.
+- **Blocking craft fails (all treatments).** Before shipping, the fold-check rows collisions, clipped-text, hidden-content, stray-overlay, duplicate-content, page-overflow (nothing wider than the viewport at 1440 or 390 unless inside its own scroll container), meta-copy (no designer or scaffold language in visible text; exempt with data-meta-ok), and headline-on-fold (operate/read: title-on-fold) must be PASS, plus headline-in-scene under the scene treatment only; the time budget never excuses them. Intentional repeats are marked `data-repeat-ok` and audited. Coverage, depth and plate-size may ship as logged open items.
+- (scene) **Body plates.** At least half the sections below the fold are full-width drawn plates (full-bleed plate with caption, catalogue of drawn items, process strip, map or plan, quote over art); a card with a small drawing counts as the card skeleton, at most twice per page.
+- **No collisions (S6, all treatments).** Every label, callout and sign text is fully visible at both viewports: no overlap with drawn objects or other labels.
+- **Phone width, client page only, native and honest (all treatments).** `../vary/references/build-craft.md` §6 items 17-20: nothing scrolls sideways or clips at 390px; no designer notes, reference codes or design keys on the page; photos carry a photography page; app screens use native controls and dashboards plot only real data.
+- (scene) **Art crew (after the art brief).** Read `../vary/references/art-crew.md`. Dispatch illustrator subagents IN PARALLEL with the Agent tool: one for the hero scene and one per section plate (cap 6), each handed ONLY the art-brief path, its plate's row (subject, facts, skeleton, size), the style object and core kit paths, and `art-crew.md`. Each builds its plate module, renders it at real size, critiques its own screenshot against the richness bar (objects not boxes, posture, shared ground and light, 3+ values, texture, facts in the art), fixes, and returns the module path and final PNG path. The lead integrates and does not redraw; without the Agent tool the lead draws the plates itself in the same order.
+
+Each critique round compares the gallery screenshot against S1-S3 and the §0b benchmark descriptions and lists what is missing (objects, layers, light, texture, facts-in-art, coverage). **Gate (scene):** the signature device renders at hero, divider and micro scale, the hero scene is composed whole, and every critique item from round 2 is closed. **Gate (other treatments):** the signature element is visible at hero scale (utility: the primary object of the tool) and the router item for the treatment is complete.
+
+---
+
## Phase 4 — Polish
Polish is the last step, not the first. Do not polish work that is not functionally complete. An expert polishing a design does not walk through a labeled checklist — they scan with a trained eye for specific failure modes that an untrained eye misses. Transfer that trained-eye by interrogating the design with these questions, not by marching through a sequence.
@@ -148,6 +192,10 @@ Because keyboard-only navigation is invisible until it's catastrophic. Walk thro
Because the mockup runs in perfect conditions; production does not. Turn on `prefers-reduced-motion: reduce` — nothing decorative should animate, but functional state transitions (focus rings, disclosure toggles) still need to work. Zoom to 200% — text must remain readable and no horizontal scrolling. Check that every `` has explicit `width` and `height` attributes (not CSS — HTML attributes) so CLS stays under 0.1 (62% of mobile pages fail this per the 2025 Web Almanac). Check that every color comes from a token (not a hard-coded hex), every spacing value from the 8pt scale (not an ad hoc number), every shadow from the elevation system (not a one-off `box-shadow`) — drift here is invisible in a single screen but compounds into design system decay. Check that `font-display: swap` + `size-adjust` are on every `@font-face` so font loading does not cause layout shift. If any of these reveal issues, they are not cosmetic — they are bugs that will ship.
+**Craft-bug rules (Polish checklist).** Content is visible with no JS-triggered reveal (an element may animate in only from a visible state); no full-viewport overlay or backdrop left on the page; nothing in the hero is cropped by the nav or the viewport edge; every dial, axis or scale is monotonic and labelled with real values; every callout leader ends on its object.
+
+**Critic before shipping (Phase 4b).** Scene treatment only; for any other treatment, skip the art-crew critic and instead grade the signature element for that treatment (the capture, lettering idea, chart, or pattern) 1-10 against the dossier facts and the user DIRECTIVES, which outrank every anchor below (a directive such as "no illustrations" or "plain black and white" is never answered with added art). Run the fold check as `fold-check.mjs --mode --treatment `. Under the scene treatment: spawn a FRESH subagent (Agent tool) with the desktop and phone fold and full-page screenshots, the dossier facts, and the critic prompt and rubric from `../vary/references/art-crew.md` section 5 (specificity, graphics, craft, wow, each 1-10; `graphics.md` §0b anchors at 9-10, "pill figures / boxes for objects / template sections / clipped text / dead space" at 4-5). It returns scores and the 5 highest-impact fixes; apply them and re-run a new critic; stop at mean 7.5 or more or after 2 critic rounds, logging open items in NOTES.md. After applying fixes, re-run `check.mjs` and the fold check and refresh the evaluator JSON before Phase 5; record the last critic mean in NOTES.md. Critic rounds sit outside the art budget and may be skipped when time is short.
+
**Gate:** You cannot answer "I'm not sure" to any of the four questions above and consider the design polished. If you can't answer, you have not actually run the check.
For the complete anti-pattern catalog with additional classical/accessibility/performance failure modes, **load [references/anti-patterns.md](references/anti-patterns.md) before shipping a high-stakes design** (landing page, flagship feature, public marketing, customer-facing flow). **Do NOT load** for internal tools or prototypes where the four questions above are sufficient.
@@ -164,16 +212,17 @@ For the complete anti-pattern catalog with additional classical/accessibility/pe
1. **Collect the design output.** If it is a file you created, note the absolute file path. If it is a rendered component in a conversation, save it to a temp file first so you can pass a path rather than a massive string.
2. **Read [`evaluator-prompt.md`](evaluator-prompt.md)** — this is the complete prompt template for the subagent. Do not paraphrase it; you will copy it verbatim.
-3. **Spawn a subagent** using the Agent tool with `subagent_type: "general-purpose"`, `model: "sonnet"`, and `mode: "bypassPermissions"` (so the subagent can read the rubric file without permission prompts). The task prompt is: the full content of `evaluator-prompt.md`, followed by a clear delimiter (`\n\n---\n\nDESIGN TO EVALUATE:\n\n`), followed by the absolute file path(s) of the design output with an explicit instruction that the subagent should Read each file in full. For short designs (<200 lines), you may inline the source instead of passing a path.
-4. **The evaluator returns a structured report** with: per-dimension scores (Usability, Composition, Color+Type, Interaction, Accessibility, Microcopy), a weighted composite, specific violations with severity, and prioritized fixes.
+3. **Spawn a subagent** using the Agent tool with `subagent_type: "general-purpose"`, `model: "sonnet"`, and `mode: "bypassPermissions"` (so the subagent can read the rubric file without permission prompts). The task prompt is: the full content of `evaluator-prompt.md`, followed by a clear delimiter (`\n\n---\n\nDESIGN TO EVALUATE:\n\n`), followed by the absolute file path(s) of the design output with an explicit instruction that the subagent should Read each file in full. Also pass `.vary/dossier.json` and the page screenshots, plus `.vary/art-brief.md`, `.vary/critique-r2.json` and the gallery only when they exist (they exist for the scene treatment only), and the fold-check output produced with `--treatment `. For short designs (<200 lines), you may inline the source instead of passing a path.
+4. **The evaluator returns a structured report** with: per-dimension scores (Usability, Composition, Color+Type, Interaction, Accessibility, Microcopy, Project specificity), a weighted composite, specific violations with severity, and prioritized fixes.
5. **Iterate based on score:**
- Composite ≥ 4.0 (B grade or better) → SHIP.
- Composite 3.0-3.9 (C) → apply the top 3 fixes and re-spawn a NEW evaluator (fresh context, no memory of prior iteration).
- Composite < 3.0 (D/F) → return to Phase 2 or Phase 3 depending on which dimensions scored lowest. Usability/Interaction failures point back to Phase 2. Composition/Color/Typography failures point back to Phase 3.
+ - Project specificity dimension score ≤2 (whatever the composite) → return to Phase 1 when a dossier and roll exist and the treatment is not utility; under utility, or when Phase 1 was skipped (component, critique, polish, audit), it goes to Phase 3 fix items instead. A broken directive goes to Phase 3 (rebuild the visual), never to Phase 1.
**Iterate until the score converges or ≥ 4.0.** Anthropic's harness research shows creative leaps happen in iteration 7-9, not iteration 1. The evaluator loop is where quality compounds — single-pass design peaks at "competent," iterated design peaks at "memorable."
-**If the evaluator subagent fails** — the Agent tool is unavailable, the subagent cannot read the rubric file, it returns no structured report, or it returns a malformed/truncated response — do NOT proceed silently. Fall back to a degraded self-evaluation against the six dimensions in `evaluator-prompt.md` (Usability 25%, Composition 20%, Color+Type 20%, Interaction 20%, Accessibility 10%, Microcopy 5%), applying the bias mitigations from that file explicitly (evidence-first, sequential dimensions, negative-first framing, "cannot determine" for items not assessable). Report the result to the user AS a self-evaluation — not as a subagent evaluation — and note that the quality signal is lower fidelity because the generator/evaluator separation is broken. Ask the user whether to ship the self-evaluated result or retry the subagent.
+**If the evaluator subagent fails** — the Agent tool is unavailable, the subagent cannot read the rubric file, it returns no structured report, or it returns a malformed/truncated response — do NOT proceed silently. Fall back to a degraded self-evaluation against the seven dimensions in `evaluator-prompt.md` (Usability 20%, Composition 15%, Color+Type 15%, Interaction 15%, Accessibility 10%, Microcopy 5%, Project specificity 20%), applying the bias mitigations from that file explicitly (evidence-first, sequential dimensions, negative-first framing, "cannot determine" for items not assessable). Report the result to the user AS a self-evaluation — not as a subagent evaluation — and note that the quality signal is lower fidelity because the generator/evaluator separation is broken. Ask the user whether to ship the self-evaluated result or retry the subagent.
---
@@ -182,7 +231,7 @@ For the complete anti-pattern catalog with additional classical/accessibility/pe
Explicit, non-negotiable. These are not guidelines — these are the landmines that signal AI-generated work the moment a trained eye sees them.
- **Never use `bg-indigo-500`, `text-indigo-600`, or `from-indigo-500 to-purple-600`** unless the brand legitimately requires indigo. This is the signature of AI output.
-- **Never default to Inter, Roboto, Arial, system-ui, or Space Grotesk.** Even when the user says "clean sans-serif," pick something with character.
+- **Never default to Inter, Roboto, Arial, system-ui, or Space Grotesk.** Even when the user says "clean sans-serif," pick something with character, unless a directive, the brand system, an operate surface or a native platform (SF Pro/Roboto) calls for it.
- **Never apply `rounded-2xl` uniformly** to buttons, cards, inputs, and containers. Tier the radius scale.
- **Never apply `shadow-lg` uniformly** as the universal elevation signal. When every element has the same shadow, the metaphor of elevation breaks — nothing is actually elevated relative to anything else, and the spatial information the shadow was supposed to carry disappears. Tier the shadow system with multi-layer shadows.
- **Never use glassmorphism (`backdrop-filter: blur()`) on more than one or two layers per page.** It destroys contrast and tanks performance.
@@ -196,7 +245,7 @@ Explicit, non-negotiable. These are not guidelines — these are the landmines t
- **Never use placeholder text as the only label.** It disappears on focus and fails WCAG.
- **Never ship a form with submit-only validation.** Validate on blur, show success checkmarks on correct fields.
- **Never present only the happy path.** Empty state, loading state, error state, disabled state, long-content state — all must exist.
-- **Never use pure black (`#000000`) or pure white (`#ffffff`).** Use tinted neutrals — pure black is harsh, pure white is cold, and both signal absence of color decisions.
+- **Never use pure black (`#000000`) or pure white (`#ffffff`).** Use tinted neutrals — pure black is harsh, pure white is cold, and both signal absence of color decisions, unless a directive or the brand specifies it.
- **Never let your evaluator be yourself.** Spawn a separate subagent. Self-praise is the default.
---
@@ -211,9 +260,9 @@ There is no fixed "non-default" list that fixes this — any fixed list creates
**Before picking a font, color, or layout direction, ask yourself:**
1. **What would the typical AI-generated version of this look like?** Name it specifically — the font, the primary color, the layout structure, the easing curve, the copy tone. Write it down in your head.
-2. **What is materially different from that version that would still serve the brief?** Not "slightly modified" — materially different. Different typographic classification (serif when sans is expected), different compositional logic (asymmetric when centered is expected), different density (dense when airy is expected), different aesthetic lineage (Swiss international / editorial / brutalist / terminal / zine / RPG / art deco / cyberpunk / organic natural / maximalist chaos — whichever is farthest from the default AND serves the context).
+2. **What is materially different from that version that would still serve the brief?** Not "slightly modified" — materially different. Different typographic classification (serif when sans is expected), different compositional logic (asymmetric when centered is expected), different density (dense when airy is expected), different aesthetic lineage drawn from the subject's own artefacts (its documents, hardware, signage, printed matter, place), whichever is farthest from the default AND true to this project.
3. **Commit to that choice and execute it with precision.** Half-committing to a distinctive direction produces worse results than fully committing to a generic one. A perfectly executed Inter landing page beats a half-executed Fraunces one. If you are going to pick a distinctive font, use all its weights and optical sizes. If you are going to pick a distinctive color, let it dominate.
-**Vary the AXIS of distinctiveness, not just the values on one axis.** If the last design you produced was distinctive through typography, make this one distinctive through composition or color instead. If the last was distinctive through motion, make this one distinctive through density or atmosphere. The goal is not a rotation through a fixed "distinctive" list — it is picking a different dimension to express character each time.
+**Vary the AXIS of distinctiveness, not just the values on one axis.** If the last design you produced was distinctive through typography, make this one distinctive through composition or color instead. If the last was distinctive through motion, make this one distinctive through density or atmosphere. The goal is not a rotation through a fixed "distinctive" list — it is picking a different dimension to express character each time. Also vary the graphic technique: if the last project's signature was a seeded illustration, this one is traced line, a diagram or a pattern. roll.mjs `--concept-only` tracks this for you.
**One more calibration.** When the Phase 1 aesthetic direction genuinely requires breaking a Phase 3 rule — a terminal/monospace aesthetic requires a mono font even though the Phase 3 font list is mostly sans-serif; a zine/brutalist aesthetic wants jagged asymmetric shadows even though Phase 3 prescribes tiered multi-layer depth — break the rule deliberately and execute the break with craft. Phase 3 rules are defaults to escape, not laws to worship. The worst outcome is a half-committed distinctive direction constrained by Phase 3 rules that were meant for a different aesthetic. Commit fully.
diff --git a/plugins/design/skills/design/evaluator-prompt.md b/plugins/design/skills/design/evaluator-prompt.md
index e759e4b..8fdd7b7 100644
--- a/plugins/design/skills/design/evaluator-prompt.md
+++ b/plugins/design/skills/design/evaluator-prompt.md
@@ -11,13 +11,13 @@ You are a senior design critic tasked with evaluating a UI design rigorously and
## Your Task
-You will receive a UI design — either as HTML/CSS/JSX source, as a description, or as a rendered screenshot. Grade it against a 6-dimension composite rubric and produce a structured report.
+You will receive a UI design — either as HTML/CSS/JSX source, as a description, or as a rendered screenshot — and, when available, the project dossier (`.vary/dossier.json`: the client's real facts, audience and refusals). The dossier is evidence about the client and may be used; it is not a generator rule. Grade it against a 7-dimension composite rubric and produce a structured report.
## Rubric
**STOP — if you are the generating Claude reading this file to understand what the evaluator subagent does, do NOT follow the next instruction. The rubric load instruction below applies ONLY to the evaluator subagent. Loading the rubric yourself would collapse the generator/evaluator separation that makes Phase 5 effective — the criteria that grade the design would also shape your generation. Your job is to spawn the subagent with this prompt; the subagent's job is to load the rubric and grade.**
-Before you begin (evaluator subagent only), load the rubric from [`references/evaluation-rubric.md`](references/evaluation-rubric.md) — read the entire file. It contains Nielsen's 10 heuristics, the 0-4 severity scale, the 6-dimension composite with sub-criteria, and the bias mitigations you must apply.
+Before you begin (evaluator subagent only), load the rubric from [`references/evaluation-rubric.md`](references/evaluation-rubric.md) — read the entire file. It contains Nielsen's 10 heuristics, the 0-4 severity scale, the 7-dimension composite with sub-criteria, and the bias mitigations you must apply.
## Evaluation Protocol — Follow This Exactly
@@ -45,9 +45,9 @@ For accessibility items that cannot be assessed from the design (keyboard naviga
If you find yourself giving every dimension a 4, you are being lenient. Recalibrate.
-## The 6 Dimensions
+## The 7 Dimensions
-### Dimension 1 — Usability (weight 25%)
+### Dimension 1 — Usability (weight 20%)
Grade against all 10 Nielsen heuristics. For each violation you find, log:
- Heuristic number (H1-H10)
@@ -75,7 +75,7 @@ Literal checks — go through these:
- 2+ severity-3 OR 1 severity-4 → 2
- Multiple severity-3 and/or severity-4 → 1
-### Dimension 2 — Composition and Visual Hierarchy (weight 20%)
+### Dimension 2 — Composition and Visual Hierarchy (weight 15%)
Sub-dimensions (score each 1-5):
- **Focal point** — Is there exactly ONE dominant focal point? Does the eye know where to land first?
@@ -86,19 +86,19 @@ Sub-dimensions (score each 1-5):
Average sub-scores, round to nearest 0.5.
-### Dimension 3 — Color and Typography (weight 20%)
+### Dimension 3 — Color and Typography (weight 15%)
Color checks:
- Palette limited to max 5 hues?
- OKLCH or systematic palette (not ad hoc hex codes)?
- Semantic color assignments consistent (red = danger, not decoration)?
- NO indigo/purple as primary unless brand-justified?
-- NO pure black, NO pure white?
+- NO pure black, NO pure white (unless a dossier directive, the brand system or the platform specifies it)?
- NO gray text on colored backgrounds?
- WCAG AA contrast (4.5:1 body, 3:1 large/UI)?
Typography checks:
-- NOT Inter/Roboto/Arial/system-ui/Space Grotesk (unless aesthetically intentional)?
+- NOT Inter/Roboto/Arial/system-ui/Space Grotesk (unless aesthetically intentional, or a dossier directive, the brand system or the platform specifies it)?
- Fonts with ≥5 weights?
- Body line-height 1.4-1.6?
- Display line-height 1.0-1.2?
@@ -109,7 +109,7 @@ Typography checks:
Score each sub-section 1-5, average them.
-### Dimension 4 — Interaction and Flow (weight 20%)
+### Dimension 4 — Interaction and Flow (weight 15%)
- **Affordance clarity** — Do interactive elements look interactive? Buttons look pressable?
- **State coverage** — Which of these exist: default, hover, focus-visible, active, disabled, loading, error, success, empty? Count them.
@@ -162,15 +162,37 @@ Check each (1 point each, max 7):
Scale to 1-5: 7/7=5, 5-6=4, 3-4=3, 1-2=2, 0=1.
+### Dimension 7 — Project Specificity and Signature Element (weight 20%)
+
+Could this design only belong to this project? Observations first.
+
+- **Signature element**: read the contract's `HERO TREATMENT` and `DIRECTIVES` lines when present and name the element per treatment, citing source file and dossier fact ids: `scene`/`pattern` = the drawn or generated device at hero scale and one other scale; `photography` = the named dossier assets plus the art-direction rule (crop, sequence, grade); `product-ui` = the real capture and the workflow it shows; `typography` = the lettering idea and the fact it carries; `data-visual` = the chart and the data it encodes; `utility` = judged at detail scale (numerals, empty states, icons, copy), where a FAIL is a fix item, never a rebuild. None, or only abstract decoration (gradient blob, mesh, noise hero, stock icon set) → say so.
+- **Subject swap**: name a same-category business in another town. List every graphic, headline and control that would become false for it. Fewer than 3 items means the design is generic.
+- **Data**: does at least one visual encode real dossier data (menu toppings, sizes, hours, address)? Cite element and fact. Also PASS when the hero visual is the client's own dossier asset.
+- **Controls in the design's material** (persuade/experience; operate surfaces keep platform conventions and are judged on tokens): nav, buttons, chips, cart, confirmation. A default underline nav or flat pill button reads as vibe-coded.
+- **Trade credibility**: would the dossier's paying audience find this look credible for the trade, and do reading surfaces stay legible? A FAIL names the specific element, not "feels off".
+- **Art craft (screenshots only)**: no faces drawn on objects (food, products), mascots or emoji-blobs; real photographed faces are fine; subjects distinguishable at thumbnail size; style consistent. Photography and product-ui add fidelity (no filter, blend or overlay on client images), natural resolution at least 1.5x rendered, and crop (focal subject not cut by the nav). No screenshots → "Cannot determine from source alone".
+- **Richness against the benchmark** (When HERO TREATMENT = scene (the default for persuade/experience without a stated treatment)): compare the first viewport to the benchmark descriptions (ara-bar: restaurant at night, 10+ drawn objects, 3+ depth layers, a light source, brand on the painted sign, real phone number in the art; hitataekni: full blueprint sheet with grid, coordinates, traced unit, dimension lines, callouts, title block with the real name, year, address, phone). Check: hero is a scene or sheet covering >=55% of the 1440x900 viewport (>=45% at 390x844), >=5 distinct subject objects over >=3 depth layers, headline set into the art, >=2 dossier facts inside the art; richness floor (filled shapes, one light source, texture, people or traces of use, 4 to 7 inks); page budget of >=3 more drawn plates tied to different fact groups. Run `fold-check.mjs --mode --treatment ` from the vary skill directory (the sibling of this skill; never search the filesystem for it) when a built page exists and cite the metric lines. Under the scene treatment a text-only or boxed-diagram hero is a FAIL for persuade and caps Specificity at 2. List what is missing (objects, layers, light, texture, facts-in-art).
+- **Named fold checks** — When HERO TREATMENT = scene (the default for persuade/experience without a stated treatment): the evaluator must report each PASS/FAIL with the `fold-check.mjs` line quoted (a missing line is a RECAPTURE for a persuade/experience build with a built page): (1) **Text collisions** (`collisions-desktop`, `collisions-phone`): no visible text box, HTML or svg ``, overlaps another or is more than 30% covered by an opaque later-painted element; name the two texts on a FAIL. (2) **Dead zone** (`dead-zone`): no near-uniform-colour rectangle larger than 20% of the desktop fold; cite its size and position. (3) **Card over art** (`card-over-art-desktop`, `card-over-art-phone`): no translucent (alpha < 0.95), backdrop-filter or solid-background element with text covering more than 6% of the hero art area; headline, phone, hours and the primary action live on drawn surfaces inside the art (a sign, plate or title block in the svg is fine), never on a card floating over it. (4) **Art down the page** (`art-down-page`): at least 60% of the sections below the fold (contact/footer excluded) carry a drawn plate at least 40% of their width. (5) **Full bleed** (`full-bleed-desktop`, `full-bleed-phone`): the hero art box spans at least 95% of the viewport width with margins of at most 3% each side; a framed picture, card or polaroid with page margins fails; name the art box and its margins. (6) **Rendering depth** (`rendering-depth`): in the desktop hero art area the luminance range p95 - p5 is at least 90 and at least 5 of 16 luminance bins hold at least 2% of the pixels; flat fills with thin uniform strokes read as clip art. The flat-block texture number is printed for the report but not gated. (7) **Plate size** (`plates-size`): at least 50% of the below-fold section plates are at least 35% of the section width, at least 280px tall and carry at least 3 value steps; name the thin, small or pale ones. In persuade/experience any of these seven FAILing is a Specificity FAIL under P6 and is listed in the fix batch; in operate/read only the collisions check gates and the others are informational. For any other treatment, quote only the fold rows `fold-check.mjs` marks as gated for that treatment (rows printed `[INFO]` are not gated); a missing line is a RECAPTURE only if its row is gated. Native platforms (ios/android): device screenshots, fold rows N/A.
+- **Directive compliance**: list each `DIRECTIVES` line (the user's own words, e.g. "no illustrations", "black and white", "use our photos") and mark it kept or broken with evidence. A broken directive caps this dimension at 2 and is a critical issue. Directives outrank this skill's bars; a build that obeys a directive is not marked down for the bar it suspends.
+
+Score:
+- 1: no project-specific visual (no drawn, photographed, captured, typographic or data element from this project); survives a competitor swap whole
+- 2: decorative effects only; one or two real facts in copy
+- 3: one project-specific element (graphic, capture, lettering or chart), but generic or appearing once
+- 4: signature element per treatment (drawn device, cited client assets with a direction rule, the real capture and workflow, a lettering idea tied to a fact, or the chart and its data) from cited facts at 2+ scales, controls in the design's material, 3+ false items in the subject swap
+- 5: as 4, plus the visual carries real data, the first viewport announces the concept, clean at thumbnail size
+
## Composite Score Calculation
```
-Composite = (Usability × 0.25)
- + (Composition × 0.20)
- + (Color+Type × 0.20)
- + (Interaction × 0.20)
+Composite = (Usability × 0.20)
+ + (Composition × 0.15)
+ + (Color+Type × 0.15)
+ + (Interaction × 0.15)
+ (Accessibility × 0.10)
+ (Microcopy × 0.05)
+ + (Specificity × 0.20)
```
Grade:
@@ -192,13 +214,13 @@ Grade:
## Dimension Scores
-### Usability (H1-H10) — X/5 (25% weight)
+### Usability (H1-H10) — X/5 (20% weight)
Violations found:
- H[N] at [location]: [description] — severity [0-4]
- ...
Rationale: [one sentence]
-### Composition and Visual Hierarchy — X/5 (20% weight)
+### Composition and Visual Hierarchy — X/5 (15% weight)
- Focal point: X/5 — [observation]
- Reading order: X/5 — [observation]
- Balance: X/5 — [observation]
@@ -206,12 +228,12 @@ Rationale: [one sentence]
- Consistency: X/5 — [observation]
Rationale: [one sentence]
-### Color and Typography — X/5 (20% weight)
+### Color and Typography — X/5 (15% weight)
Color observations: [list]
Typography observations: [list]
Rationale: [one sentence]
-### Interaction and Flow — X/5 (20% weight)
+### Interaction and Flow — X/5 (15% weight)
States present: [list — default, hover, focus, active, disabled, loading, error, success, empty]
States missing: [list]
Affordance clarity: [observation]
@@ -223,12 +245,23 @@ Probable passes: [list]
Cannot determine without manual verification: [list]
Rationale: [one sentence]
+### Project Specificity and Signature Element — X/5 (20% weight)
+Hero treatment: [scene | pattern | photography | product-ui | typography | data-visual | utility, from the contract or "not stated"]
+Directives: [each DIRECTIVES line kept/broken, or "none"]
+Signature element: [name, source file, fact ids — or "none"]
+Richness vs benchmark: [scene only: hero scene yes/no, coverage, objects, layers, light, texture, facts-in-art, plates; fold-check lines]
+Subject-swap false items: [list; count]
+Graphic carries real data: [element and fact, or no]
+Controls in the design's material: [observation]
+Trade credibility: [observation]
+Rationale: [one sentence]
+
### Microcopy — X/5 (5% weight)
AI vocabulary detected: [yes with examples / no]
CTA quality: [observation]
Rationale: [one sentence]
-## Critical Issues (severity 3-4 violations or any dimension ≤ 2)
+## Critical Issues (severity 3-4 violations or any dimension ≤ 2; Specificity ≤ 2 returns the work to Phase 1, except under utility or when Phase 1 was skipped, and a broken directive: those go to Phase 3 fix items)
1. [issue with location and specific fix]
2. ...
@@ -245,7 +278,7 @@ Rationale: [one sentence]
## Iteration Recommendation
- If score ≥ 4.0: SHIP
- If score 3.0-3.9: Apply top 3 fixes and re-evaluate
-- If score < 3.0: Return to Phase 2 (UX Architecture) or Phase 3 (Execute) of the design-excellence skill, specifically fixing [which dimensions scored lowest]
+- If score < 3.0: Return to Phase 2 (UX Architecture) or Phase 3 (Execute) of the design-excellence skill, specifically fixing [which dimensions scored lowest]. If Specificity ≤ 2: return to Phase 1 (dossier and concept) regardless of composite, except under utility, when Phase 1 was skipped, or for a broken directive, which go to Phase 3 fix items
```
## Final Reminder
diff --git a/plugins/design/skills/design/references/evaluation-rubric.md b/plugins/design/skills/design/references/evaluation-rubric.md
index 471bbd7..bcc034f 100644
--- a/plugins/design/skills/design/references/evaluation-rubric.md
+++ b/plugins/design/skills/design/references/evaluation-rubric.md
@@ -1,6 +1,6 @@
---
name: evaluation-rubric
-description: The complete scoring rubric for the design evaluator subagent. 6 weighted dimensions with explicit scoring tables, Nielsen severity scale, bias mitigations, and required output format. Loaded by the evaluator subagent, NOT by the generating Claude.
+description: The complete scoring rubric for the design evaluator subagent. 7 weighted dimensions with explicit scoring tables, Nielsen severity scale, bias mitigations, and required output format. Loaded by the evaluator subagent, NOT by the generating Claude.
---
# Evaluation Rubric — For the Evaluator Subagent
@@ -94,7 +94,7 @@ Severity is a function of three factors:
---
-## The 6-Dimension Composite Rubric
+## The 7-Dimension Composite Rubric
### Scoring Scale (all dimensions)
@@ -110,7 +110,7 @@ Half-scores permitted (1.5, 2.5, 3.5, 4.5). Every score must be accompanied by a
---
-### Dimension 1: Usability — Weight 25%
+### Dimension 1: Usability — Weight 20%
Grade via Nielsen's 10 heuristics with severity logging.
@@ -134,7 +134,7 @@ Usability score: X/5 — [rationale]
---
-### Dimension 2: Composition and Visual Hierarchy — Weight 20%
+### Dimension 2: Composition and Visual Hierarchy — Weight 15%
**Sub-dimensions (score each 1-5):**
@@ -150,19 +150,19 @@ Average sub-scores, round to nearest 0.5.
---
-### Dimension 3: Color and Typography — Weight 20%
+### Dimension 3: Color and Typography — Weight 15%
**Color sub-criteria (each = 1 point):**
- [ ] Palette limited to ≤5 hues
- [ ] OKLCH or systematic palette (not ad hoc)
- [ ] Color reinforces semantic meaning consistently
- [ ] **NOT indigo/purple as primary unless brand-justified**
-- [ ] **NO pure black, NO pure white**
+- [ ] **NO pure black, NO pure white** (unless a dossier directive, the brand system or the platform specifies it)
- [ ] **NO gray text on colored backgrounds**
- [ ] WCAG AA contrast (4.5:1 body, 3:1 large/UI)
**Typography sub-criteria (each = 1 point):**
-- [ ] **NOT Inter/Roboto/Arial/system-ui/Space Grotesk as default**
+- [ ] **NOT Inter/Roboto/Arial/system-ui/Space Grotesk as default** (unless a dossier directive, the brand system or the platform specifies it)
- [ ] Fonts with ≥5 weights
- [ ] Body line-height 1.4-1.6
- [ ] Display line-height 1.0-1.2
@@ -180,7 +180,7 @@ Average sub-scores, round to nearest 0.5.
---
-### Dimension 4: Interaction and Flow — Weight 20%
+### Dimension 4: Interaction and Flow — Weight 15%
**States to check (9 possible):**
1. Default
@@ -257,15 +257,44 @@ Triage into three buckets:
---
+### Dimension 7: Project Specificity and Signature Element — Weight 20%
+
+Asks whether this design could only belong to this project. Inputs: the build, screenshots, and (if supplied) the project dossier (`dossier.json`), which is evidence about the client and may be used. Observations first, score second.
+
+**Observe before scoring:**
+- **Signature element**: read the contract's `HERO TREATMENT` and `DIRECTIVES` lines when present and name the element per treatment, citing source file and dossier fact ids: `scene`/`pattern` = the drawn or generated device at hero scale and one other scale; `photography` = the named dossier assets plus the art-direction rule (crop, sequence, grade); `product-ui` = the real capture and the workflow it shows; `typography` = the lettering idea and the fact it carries; `data-visual` = the chart and the data it encodes; `utility` = judged at detail scale (numerals, empty states, icons, copy), where a FAIL is a fix item, never a rebuild. None, or only abstract decoration (gradient blob, mesh, noise hero, stock icon set) → say so.
+- Subject swap: name a same-category business in another town. List every graphic, headline, label and control that would become false for it. Count them.
+- does at least one visual encode real dossier data (menu toppings, sizes, hours, address)? Cite element and fact. Also PASS when the hero visual is the client's own dossier asset.
+- Controls in the design's material (persuade/experience; operate surfaces keep platform conventions and are judged on tokens): nav, buttons, chips, cart, confirmation. A default underline nav or flat pill button reads as vibe-coded.
+- Would the paying customer in the dossier's audience find the look credible for this trade? Name the specific element if not.
+- **Art craft (screenshots only)**: no faces drawn on objects (food, products), mascots or emoji-blobs; real photographed faces are fine; subjects distinguishable at thumbnail size; style consistent. Photography and product-ui add fidelity (no filter, blend or overlay on client images), natural resolution at least 1.5x rendered, and crop (focal subject not cut by the nav). No screenshots → "Cannot determine from source alone".
+- Richness against the benchmark (When HERO TREATMENT = scene (the default for persuade/experience without a stated treatment)): ara-bar = the restaurant at night (mountain ridge, stars, clad facade, lit windows, diner silhouettes, a street lamp; 10+ drawn objects, 3+ depth layers, a light source; brand painted on the sign, real phone number in the art). hitataekni = a full blueprint sheet (grid, bordered sheet with coordinates, a traced unit, dimension lines, callout bubbles, title block with the real name, founding year, address, emergency number). Check the hero: a scene or sheet covering >=55% of the 1440x900 first viewport (>=45% at 390x844); >=5 distinct subject objects over >=3 depth layers; headline set into the art; >=2 dossier facts inside the art. Richness floor: filled shapes, one consistent light source, texture, people or traces of use, 4 to 7 inks. Page budget: >=3 more drawn plates tied to different fact groups, plus micro-scale marks. Under the scene treatment a text-only, single-icon, empty-grid or boxed-diagram hero is a FAIL for persuade and caps this dimension at 2. Measure with `vary/scripts/fold-check.mjs --mode --treatment ` when a build exists.
+- Named fold checks (When HERO TREATMENT = scene (the default for persuade/experience without a stated treatment); report each as PASS/FAIL with the fold-check line): (1) **Text collisions** (`collisions-desktop`, `collisions-phone`): no visible text box, HTML or svg ``, overlaps another or is more than 30% covered by an opaque later-painted element; name the two texts on a FAIL. (2) **Dead zone** (`dead-zone`): no near-uniform-colour rectangle larger than 20% of the desktop fold; cite its size and position. (3) **Card over art** (`card-over-art-desktop`, `card-over-art-phone`): no translucent (alpha < 0.95), backdrop-filter or solid-background element with text covering more than 6% of the hero art area; headline, phone, hours and the primary action live on drawn surfaces inside the art (a sign, plate or title block in the svg is fine), never on a card floating over it. (4) **Art down the page** (`art-down-page`): at least 60% of the sections below the fold (contact/footer excluded) carry a drawn plate at least 40% of their width. (5) **Full bleed** (`full-bleed-desktop`, `full-bleed-phone`): the hero art box spans at least 95% of the viewport width with margins of at most 3% each side; a framed picture, card or polaroid with page margins fails; name the art box and its margins. (6) **Rendering depth** (`rendering-depth`): in the desktop hero art area the luminance range p95 - p5 is at least 90 and at least 5 of 16 luminance bins hold at least 2% of the pixels; flat fills with thin uniform strokes read as clip art. The flat-block texture number is printed for the report but not gated. (7) **Plate size** (`plates-size`): at least 50% of the below-fold section plates are at least 35% of the section width, at least 280px tall and carry at least 3 value steps; name the thin, small or pale ones. In persuade/experience any of these seven FAILing is a Specificity FAIL under P6 and is listed in the fix batch; in operate/read only the collisions check gates and the others are informational. For any other treatment, quote only the fold rows `fold-check.mjs` marks as gated for that treatment (rows printed `[INFO]` are not gated); a missing line is a RECAPTURE only if its row is gated. Native platforms (ios/android): device screenshots, fold rows N/A.
+- **Directive compliance**: list each `DIRECTIVES` line (the user's own words, e.g. "no illustrations", "black and white", "use our photos") and mark it kept or broken with evidence. A broken directive caps this dimension at 2 and is a critical issue. Directives outrank this skill's bars; a build that obeys a directive is not marked down for the bar it suspends.
+
+**Scoring table:**
+| Score | Anchor |
+|-------|--------|
+| 1 | No project-specific visual (no drawn, photographed, captured, typographic or data element from this project); stock icons or none; copy and visuals survive a competitor swap whole. |
+| 2 | Decorative effects only (gradient mesh, noise, blobs); one or two real facts in copy. |
+| 3 | One project-specific element (graphic, capture, lettering or chart), but generic (could be any pizzeria or any HVAC firm) or appearing once only. |
+| 4 | A signature element per treatment (drawn device, cited client assets with a direction rule, the real capture and workflow, a lettering idea tied to a fact, or the chart and its data) from cited facts, at 2 or more scales, with controls in the design's material; the subject swap lists 3 or more false items. |
+| 5 | As 4, plus the visual carries real data, the first viewport announces the concept, and the art is clean at thumbnail size. |
+
+Score 2 or below is a critical issue and returns the work to Phase 1 (purpose, dossier, concept), except under utility, when Phase 1 was skipped (component, critique, polish, audit), or for a broken directive, which go to Phase 3 fix items.
+
+---
+
## Composite Score Calculation
```
-Composite = (Usability × 0.25)
- + (Composition × 0.20)
- + (Color+Type × 0.20)
- + (Interaction × 0.20)
+Composite = (Usability × 0.20)
+ + (Composition × 0.15)
+ + (Color+Type × 0.15)
+ + (Interaction × 0.15)
+ (Accessibility × 0.10)
+ (Microcopy × 0.05)
+ + (Specificity × 0.20)
```
| Composite | Grade | Meaning |
diff --git a/plugins/design/skills/vary/.gitignore b/plugins/design/skills/vary/.gitignore
new file mode 100644
index 0000000..5ae567f
--- /dev/null
+++ b/plugins/design/skills/vary/.gitignore
@@ -0,0 +1,2 @@
+fold-desktop.png
+fold-phone.png
diff --git a/plugins/design/skills/vary/SKILL.md b/plugins/design/skills/vary/SKILL.md
index a6294de..09db6bc 100644
--- a/plugins/design/skills/vary/SKILL.md
+++ b/plugins/design/skills/vary/SKILL.md
@@ -1,6 +1,6 @@
---
name: vary
-description: Design frontend UI that looks different every run and still looks designed. An external dice roll (scripts/roll.mjs) ASSIGNS a visual world, page skeleton, colour strategy, OKLCH palette seed and two verified free fonts from catalogs of 47 worlds, 18 archetypes, 120 hue-balanced seeds and 160+ verified faces; the model commits fully, a mechanical craft floor (scripts/check.mjs) and a separate evaluator subagent judge distinctiveness and contract-keeping. Use WHENEVER building, redesigning, mocking up or restyling any UI — landing page, marketing site, dashboard, admin, docs, portfolio, app screen, component set, email, artifact — and whenever the user says design, UI, frontend, make it look good, not generic, not AI slop, something different, new vibe, new palette, new fonts, surprise me, bold, distinctive, or complains that designs look the same. Also use for "give me another direction", "re-roll", "safer", "bolder", "play it straight". Not for backend-only work or pure copy edits.
+description: Design frontend UI that is specific to THIS project and different every run: read the project into a fact dossier, write grounded concepts, and let an external roll (scripts/roll.mjs) assign a concept, a signature-graphic technique, a fitting visual world, a skeleton, a palette seed and fonts; then build the concept's hero treatment (drawn scene, the client's photography, product UI, typography, data visual or pattern). The catalogs hold 47 worlds, 18 archetypes, 120 hue-balanced seeds and 160+ verified faces; the model commits fully, a mechanical craft floor (scripts/check.mjs) and a separate evaluator subagent judge distinctiveness and contract-keeping. Use WHENEVER building, redesigning, mocking up or restyling any UI — landing page, marketing site, dashboard, admin, docs, portfolio, app screen, component set, email, artifact — and whenever the user says design, UI, frontend, make it look good, not generic, not AI slop, something different, new vibe, new palette, new fonts, surprise me, bold, distinctive, or complains that designs look the same. Also use for "give me another direction", "re-roll", "safer", "bolder", "play it straight". Not for backend-only work or pure copy edits.
user-invocable: true
argument-hint: "[brief] [--mode persuade|operate|read|experience] [--reroll] [--safer|--bolder|--canon]"
---
@@ -9,10 +9,12 @@ argument-hint: "[brief] [--mode persuade|operate|read|experience] [--reroll] [--
Claude's design output collapses to a mode: indigo, Inter, centred hero, three cards. Told to avoid those, it collapses to the next mode: cream + serif + terracotta, or near-black + one neon, Space Grotesk, bento + glass. The cause is not a lack of ideas. The model derives seven varied directions and then argmax-picks the same one every time; asking it to "choose differently" reverted in 27 of 30 measured runs. Naming things to avoid makes it worse: a named font or hex gets *more* activation, not less.
-Two things fix this, and this skill is built around them:
+Four things fix this, and this skill is built around them:
-1. **An external roll assigns the direction.** `scripts/roll.mjs` picks world → skeleton → colour strategy → palette seed → fonts, each conditioned on the last, from catalogs in `data/`. Claude executes the assignment. It does not pick from a menu.
+1. **An external roll assigns the direction.** `scripts/roll.mjs` picks concept → signature device → world → skeleton → colour strategy → palette seed → fonts, each conditioned on the last, from the project's concepts and the catalogs in `data/`. Claude executes the assignment. It does not pick from a menu.
2. **Variety must move on two axes.** A new palette on the same centred-hero skeleton is the same design. The roll moves the skeleton (archetype) and the lineage (world) together; skin follows.
+3. **The roll picks among grounded options.** Concepts come from the project's own facts, and worlds are filtered by its sector. Randomness then buys variety without buying irrelevance.
+4. **The signature is specific to the subject.** Every build carries one signature element taken from the project's facts or assets: a drawing, the client's own photographs, the real product, a typographic system or a data form. A palette and fonts over generic blocks is not a design.
Then: commit fully, guard later. Craft rules are loaded only *after* the contract is written, because guardrails mixed into the brief measurably hedge the result. Review is done by a separate identity auditing the build against its own contract, because self-review rubber-stamps.
@@ -20,42 +22,96 @@ Then: commit fully, guard later. Craft rules are loaded only *after* the contrac
---
-## Step 0 — Read the surface, not the product
+## Step 0 — Read the project, then the surface
-Before rolling, settle these in one short block (write them; they feed the roll):
+Load [`references/dossier.md`](references/dossier.md) and write `.vary/dossier.json` before anything else. Facts come from the repo, the client's live site and the assets given. Nothing is invented.
+
+Then settle these in one short block (write them; they feed the roll):
- **Mode** of *this surface*: `persuade` (visitor decides and acts: landing, pricing, campaign), `operate` (completes a task: app, dashboard, settings, forms, checkout), `read` (understands: docs, articles, changelog), `experience` (is inside the work: portfolio, gallery). A dev tool's landing page is persuade; a fashion house's docs are read. Mode gates how bold the roll may be. Operate and read surfaces get quiet worlds and conventional skeletons; their distinctiveness lives in details.
-- **Platform**: `web`, `ios`, `android`. Phones exclude pointer-dependent skeletons.
+- **Platform**: `web`, `ios`, `android`. Phones exclude pointer-dependent skeletons. ios/android: load the `mobile-design` skill for the platform layer. The contract goes as a `/* ... */` block at the top of the root component. Evidence is device screenshots; fold-check does not apply.
- **Locks** — anything the user or the repo has already decided: brand hex (`--lock palette=#…`), a required font, required scripts (`--scripts latin,cyrillic`), no webfonts (email, React Native → `--no-webfonts`), longevity (`--longevity campaign` allows fast-decaying looks). A brief that pins an aesthetic ("make it Bauhaus", "keep our brand") beats the roll: `--lock world=bauhaus`.
+- **Directives**: anything the user says about the look ("no illustrations", "black and white", "use our photos", "minimal") goes verbatim into `dossier.directives` with the locks it implies. Directives outrank this skill's defaults, bars and gates; only truth and accessibility outrank them.
+
+ | Directive | Locks / effect |
+ |---|---|
+ | no illustrations | `treatment=typography`, or photography/product-ui if assets exist |
+ | black and white | `strategy=ink-on-paper` and no accent (build-craft tint rules suspended) |
+ | Swiss | `world=swiss-international` |
+ | use our photos | `treatment=photography` |
+ | minimal, quiet, luxurious | `treatment=typography`, or `photography` when photos exist (dead-zone and depth are INFO there); devices `photo-direction` or `typographic` only (no annotated photos, leader lines, frames or ornament); never `scene` unless the user also asks for drawings |
+ | keep our brand | extend mode |
+
+- **Precedence** (the one place it is written; both evaluators repeat it). When rules collide, the higher item wins: 1. Truth: no invented facts. 2. Accessibility: contrast, keyboard, focus, reduced motion, text equivalents. 3. User directives (`dossier.directives`). 4. Existing brand or design system (extend mode). 5. Platform conventions (ios/android; operate Jakob's law). 6. The rolled contract. 7. Treatment-specific bars and skill defaults.
- **Existing design system?** If the repo has `DESIGN.md`, a token file, a Tailwind theme with custom colours, or styled shared components, this is **extend mode**: read [`references/extend-mode.md`](references/extend-mode.md) and follow it instead of Step 1. A component or section inside an established surface always inherits that surface. Never turn a local addition into a new identity.
+- **Sector**: one id from the controlled list, taken from the dossier's `sector`. It filters the world pool. Pick the one a customer would file the business under (a pizzeria with a bar is `food-drink`). When torn between two, decide the tie after Step 0b (take the one whose worlds list fits the concept hints better), note the choice in the dossier, and write the final sector into `dossier.sector`, which must equal `--sector`.
+- **Multi-surface clients**: the roll's mode is the mode of the surface built first (usually the home or landing page, so `persuade`). Later surfaces reuse the contract and take their own archetype.
- **Scene sentence**: who uses this, where, under what light. This decides light or dark, not the category (`--scene light|dark` once decided).
-- **Thin category?** If the subject has little cultural material of its own (SRE tooling, invoicing, generic B2B), **read [`references/thin-domain.md`](references/thin-domain.md)** before rolling: it produces a `--grounded` candidates file.
-Ask the user at most one round of two or three questions, and only for facts that change the work (audience, the real proof/content available, what must not change). Never ask for CSS values or an aesthetic lane.
+Ask the user at most one round of two or three questions, and only for facts that change the work (the real proof/content available, audience, what must not change). Never ask for CSS values or an aesthetic lane.
+
+## Step 0b — Concepts
+
+Read [`references/concepts.md`](references/concepts.md) and write 4-7 concepts to `.vary/concepts.json`. Each concept takes a different angle on the business: a different audience moment, half of the trade, time of day or artefact. Each cites at least 3 fact ids, names the trade artefact it borrows, re-skins the functional objects (cart, confirmation, nav), names 2-3 `world_hints` (the one permitted read of `data/worlds.json`: take ids, names, sectors and `avoid_sectors` only, never use it to choose the final world), and offers 2-3 signature devices from the technique list. Each concept names a `treatment` (scene, pattern, photography, product-ui, typography, data-visual, utility). Pick treatments by signal, scene by default (`references/concepts.md` §3): a small business, place or service with no photos, no product UI and no style directive gets `scene` concepts (at most one `pattern`). When the dossier has usable photos or a product UI, at least one concept uses `photography` or `product-ui`, and at least two treatments appear across the file. Write them all at full strength: the roll, not you, picks one.
## Step 1 — Roll
```bash
-node /scripts/roll.mjs --mode --platform [--scene light|dark] \
+node /scripts/roll.mjs --mode --platform [--scene light|dark] \
+ --dossier .vary/dossier.json --concepts .vary/concepts.json --sector \
[--scripts latin,cyrillic] [--lock palette=#hex] [--lock world=] [--no-webfonts] \
- [--longevity long|campaign] [--project ] [--grounded candidates.json]
+ [--longevity long|campaign] --project
```
-`` is this skill's directory. `--project` points the anti-repeat memory at the repo (last 3 picks per axis demoted there; last 8 globally), so the same font or world does not come back next session.
+`` is this skill's own directory: the absolute path on the "Base directory for this skill" line Claude Code printed when this skill loaded (or `${CLAUDE_PLUGIN_ROOT}/skills/vary` when that variable is set). Substitute it literally in every command. **Never search the filesystem (`find`, `ls ~`) for the scripts, and never run a copy under `~/.claude/plugins` or `~/.claude/skills` unless that path IS the base directory.** If `/scripts/roll.mjs` is not there, stop and say so. `--project` is required. It points the anti-repeat memory at the repo (last 3 picks per axis demoted there, angles included; last 8 globally), so the same font or world does not come back next session.
-**The assignment is unrefusable.** Writing any UI markup, styling or component code before the roll has run and its comment block is pasted into the artifact is a contract violation. Do not read the catalog files to pick something yourself: that is the exact failure this skill exists to remove.
+**The assignment is unrefusable.** Writing any UI markup, styling or component code before the roll has run and its comment block is pasted into the artifact is a contract violation. Apart from the `world_hints` read in Step 0b, do not read the catalog files to pick something yourself: that is the exact failure this skill exists to remove.
-**Re-roll on the model's own initiative only for named factual grounds**: the roll printed a `[FAIL]` coherence row that a single-field lock cannot fix; the assigned font lacks a script the brief needs; the world's `avoid_for` names this exact audience. "This doesn't feel right for the category" is not grounds; that is the argmax talking. The **user** may re-roll freely: `--from --reroll 1` (then 2, 3…). Steering: `--register safer` (slow-decay worlds, quiet strategies) or `--register bolder` (experience-grade worlds) on a re-roll. `--canon` is the standing exit: the category standard, played straight, at full craft; never recommend it, always allow it. After two consecutive re-rolls, ask what quality is missing rather than rolling a third time.
+**Re-roll on the model's own initiative only for named grounds**: a `[FAIL]` coherence row that a single-field lock cannot fix; a script the font lacks; the world cannot carry the SIGNATURE DEVICE; or the user vetoes the world for this trade. "This doesn't feel right for the category" is not grounds; that is the argmax talking. The **user** may re-roll freely: `--from --reroll 1` (then 2, 3…). Steering: `--register safer` (slow-decay worlds, quiet strategies) or `--register bolder` (experience-grade worlds) on a re-roll. `--canon` is the standing exit: the category standard, played straight, at full craft; never recommend it, always allow it. After two consecutive re-rolls, ask what quality is missing rather than rolling a third time.
+
+When the **user** rejects a world as wrong for the trade, record it in the dossier's `refuse`. Re-roll with every Step 1 flag repeated plus `--from --lock concept= --reroll n+1`, optionally with `--register safer` (a deliberate quiet bias, so use it only when the user wants calmer): `--lock concept=` keeps the concept and re-deals only the world and device, the right veto when the user rejected the world, not the idea. After two misses, print three previews with the same flags, `--from --lock concept= --reroll n+1`, then `n+2`, `n+3`, each with `--json --no-memory` so previews do not write to the anti-repeat memory, and let the **user** pick. You never pick.
## Step 2 — Contract
-Paste the printed `` block **verbatim** as the first child of `` in the root layout (never inside a slotted child component; some compilers strip those). Then fill the three model-authored lines:
+Paste the printed `` block **verbatim** as the first child of `` in the root layout (never inside a slotted child component; some compilers strip those). Then fill the four model-authored lines:
- **SCENE**: the one sentence from Step 0.
-- **FIRST VIEWPORT**: what is where, at what scale, where the primary action sits — derived from the ARCHETYPE line, not from the category's usual hero.
+- **FIRST VIEWPORT**: what is where, at what scale, where the primary action sits. Derived from the ARCHETYPE plus the CONCEPT; the signature element is visible in it at hero scale (utility: the primary object of the tool), and the first screen announces the concept, not a shop listing.
- **THESIS**: the one idea this surface owns, and the category-default arrangement it refuses. If it reads like a mood ("clean, confident"), it is not decided yet.
+- **SIGNATURE GRAPHIC** (the signature element; the contract key keeps this name): what is drawn, shown or set, which FACTS it encodes, how it renders (engine/file), and its three placements.
+
+CONCEPT supplies thesis, materials, the memorable element and the functional reskin. WORLD supplies grammar, skeleton, type and motion. FACTS win every conflict; clarity beats all three.
+
+## Step 3a — Signature visual first
+
+Route by the contract's `HERO TREATMENT`:
+
+- `scene`: the scene bar below, the art crew and two critique rounds.
+- `pattern`: art brief + gallery, one critique round, no crew. S1 coverage and full-bleed apply; the S2 people/objects clauses do not.
+- `photography`: write `.vary/visual-brief.md` listing which dossier asset goes where, with the crop rule, sequence and grade. Photos ship unaltered unless the world or a directive says otherwise. Identifiable real people are never redrawn. The photos carry the page: no frames or ornament around them, no drawn stand-ins for products, and described-but-missing photos become full-size tonal plates (`references/build-craft.md` §6 item 19).
+- `product-ui`: a capture list (which workflow, which real data, which states), DPR-2 captures, callouts allowed.
+- `typography`: a type specimen at hero size with the content language's glyphs, plus the fact the lettering carries.
+- `data-visual`: the chart spec, its dossier data and a text equivalent.
+- `utility`: skip to Step 3.
+
+The bars for the non-scene treatments are `graphics.md` §9-§12.
-The GROUNDED ANTECEDENT line (thin-domain runs only) supplies material and thesis; the WORLD supplies grammar and skeleton; product facts win every conflict.
+### Scene bar (treatment = scene only)
+
+Read [`references/graphics.md`](references/graphics.md) in full (§0b is the benchmark, §1b "Composing a scene" is the method). Write `.vary/art-brief.md` from its template. The brief must list every subject from the dossier that gets drawn, the engine, the style object, the banned forms, and the sizes (hero and thumb). The art meets this **scene bar**, which the brief must plan for and the critique must check:
+
+- **S1 (scene) Hero scene.** For `persuade` and `experience`: **edge to edge, no frame (G1).** The hero scene spans the full viewport width at desktop and phone (at least 95%, touching both edges): no HTML box, card, polaroid, frame or page margin around it (a border drawn inside the art, such as a blueprint sheet's, is part of the art). Judges: "full-bleed scene, not a framed picture". For `persuade` and `experience` modes the first viewport is a full-bleed illustrated scene (or sheet): the drawing covers at least 55% of the first viewport at 1440x900 and 45% at 390x844, made of at least 5 distinct subject objects from the dossier across at least 3 depth layers (background/environment, main subject, foreground detail or people). The brand or headline is set INTO the scene (a sign, label, title block, painted lettering), not floated beside a boxed picture. **The first viewport always carries a real HTML `
` (the business name or the promise), a one-line value proposition (what they do, for whom, in the client's real words from the dossier) and the primary action (a link or button with visible text), positioned ON a drawn surface of the scene: absolutely positioned over the open area the art leaves empty for it (the scene's sky, wall or sheet by default, as large display type; a sign or board only when it is the real signage at real scale; `graphics.md` §1b) and styled as that surface's lettering (`graphics.md` §1b has the pattern). It is painted-in and real text at once. Never only svg `` (the fold check fails "no visible h1"), never a floating card, never omitted.** At least 2 real dossier facts are rendered inside the art itself (a phone number on the sign, the founding year in a title block, opening hours on a door card).
+- **S2 (scene) Richness floor** for every scene and plate: filled shapes (not hairlines on an empty field), one consistent light source (lit and shaded faces, cast shadows), texture (grain, hatching, halftone, paper), people or traces of use where the business has them, a palette of 4-7 inks. A single icon, a bare grid, a lone diagram in a framed box or a decorative blob FAILS the hero.
+- **S3 (scene) Art all the way down.** Every section below the fold carries its own drawn plate at real size (at least 40% of the section's width (never under a third — the gate fails plates under 35%) and 280px tall at desktop, never thumbnail-only, and fully rendered with the same finish pass as the hero: gradient, glow, grain, at least 3 value steps; never a thin, small, pale line diagram in a tinted box, which judges read as "monochrome line drawings in tinted boxes"), drawn from that section's facts (place, product or menu, process, people or history); a catalogue, menu or services list draws EACH item (the art is a function of the item record). A section that is only cards, text or a form fails unless it is the contact block. Plus the micro scale (icons, bullets, dividers drawn in the same hand).
+- **S4 (scene) Finish (G2).** Apply `graphics.md` §1d ("Depth recipe" has the numbers; flat fills with thin uniform strokes read as clip art): a value plan (one key light, one glow, the brightest value on the focal fact), at least 3 value steps per material, grain at 3-8%, and no empty region over 20% of the hero.
+- **S5 (scene) Type in the art (G3).** No frosted, translucent or SOLID card, chip row or SaaS button pair over the hero art: an opaque headline container covering more than 6% of the art area fails (judges: "a headline card floats over the art, covering it"). The headline is a real `
` and the primary action a real link or button, set over a drawn surface (the scene's open sky, wall or sheet by default; a real sign, title block or board at real scale) as in the §1b pattern; phone and hours may be painted in the svg. Text on a surface that is part of the drawing is fine; a headline that exists only as svg `` fails the fold check.
+- **S7 (scene) Objects and body composition.** (a) Every drawn object has a real silhouette (a train has bogies, windows and a roof line; a book has spine, boards and headband; never a box standing for a thing), at least 3 value steps, and people have a posture or gesture and a cast shadow (`graphics.md` §1e has a carriage and a bound book built from the kit). (b) No two consecutive sections share a layout skeleton. The brief assigns one of six per section: full-bleed plate with caption; catalogue of drawn items; process strip of 3-5 drawn steps; map or plan; big quote over art; ticket, label or form drawn as an object (`graphics.md` §7). At least half the sections below the fold are full-width drawn plates (full-bleed plate with caption, catalogue of drawn items, process strip, map or plan, quote over art); "a card with a small drawing" counts as the card skeleton and appears at most twice per page. Copy left with a small boxed diagram right, repeated, is the failure. (c) Every section plate is a drawing of that section's subject, never a labelled box with words in it. (d) Identity assets (headshots, sponsor or partner logos, client photos of people, product screenshots) are shown unaltered and are exempt from "draw each item". Data sections (schedule, pricing table, comparison, code) are exempt from plates.
+- **S8 Mood fit (every treatment).** The art brief states the audience's mood need in one line (children: bright, safe, daytime; bereavement: calm, quiet, dignified; B2B lab: precise, trustworthy) and the chosen concept and world must serve it. If the critic finds they break it, re-roll the world with `--lock concept=` before building further.
+- **S6 No collisions (every treatment).** Every label, callout and sign text is fully visible at both viewports: no overlap with drawn objects or other labels.
+
+**Art crew (scene only; Step 3a, after the brief).** Read [`references/art-crew.md`](references/art-crew.md). Dispatch illustrator subagents IN PARALLEL with the Agent tool: one for the hero scene and one per section plate (cap 6), each handed ONLY the art-brief path, its plate's row (subject, facts, skeleton, size), the style object and core kit paths, and `art-crew.md`. Each builds its plate module, renders it at real size, critiques its own screenshot against the richness bar (objects not boxes, posture, shared ground and light, 3+ values, texture, facts in the art), fixes, and returns the module path and final PNG path. The lead integrates and does not redraw. If the Agent tool is unavailable, the lead draws the plates itself in the same order. The lead then builds the gallery and runs the two critique rounds below on the integrated result.
+
+Build the art module and an `art-gallery.html` that renders every subject at both sizes, plus the hero scene composed whole at 1440x900 and 390x844. Screenshot it and read the screenshots. Write concrete critique (what reads wrong, not "could be better"). **Each critique round compares the gallery screenshot against S1-S3 explicitly and against the §0b benchmark descriptions in `graphics.md`, and lists what is missing: objects (count vs 5), layers (vs 3), light, value steps, grain, empty zones (vs 20%), facts-in-art, coverage, a plate per section below the fold, text collisions.** Fix it. Do two rounds, no more (with the art crew the illustrators' own rounds are the plate pass and your gallery review is one read plus one fix): the art loop has a time budget (hero first, plates second, then build; a shipped page with good art beats a perfect gallery and no page). Write a style-rule test for the world's constraint (for example "litho: no opacity, no gradients"). Under the scene treatment, no UI page code until round 2 passes.
## Step 3 — Build, fully committed
@@ -66,7 +122,10 @@ While building:
- **Borrow the skeleton, not the clothes.** Structure comes from the ARCHETYPE and the world's GRAMMAR. A committed surface over the category's standard marketing grid is the most common failure and the hardest to see.
- **Full commitment beats a hedged half.** A perfectly executed conventional page beats a half-executed distinctive one; a fully executed distinctive one beats both. Use all the weights of the assigned faces. Let the colour strategy own the page area it claims.
- **One authored motion moment** (the MOTION MOMENT line). Nothing else animates on entrance.
-- **Real content.** Author illustrative material at full fidelity and label it synthetic where a visitor could mistake it; never invent prices, customers, testimonials, statistics or capabilities.
+- **Real content.** Content comes from the dossier verbatim (menu, prices, hours, specs, quotes with source). Demo values are flagged as demo. Never invent prices, customers, testimonials, statistics or capabilities.
+- **Every control in the world's material** (persuade/experience): nav, buttons, chips, cart and confirmation follow FUNCTIONAL RESKIN. A default underline nav or flat pill button reads as vibe-coded. Operate surfaces keep platform conventions for nav, forms and errors and skin them through tokens.
+- **Decorative fields stay on graphic plates.** Reading, prices and forms sit on a high-contrast field.
+- **Verify glyphs** for the content language (for example þ ð Á Í) by rendering the hero copy; swap or patch a face that fails.
- **Effort clusters where the content matters.** Everything equally detailed means nothing is important.
- When the world's grammar conflicts with a craft-floor rule, the grammar wins on aesthetics and the floor wins on accessibility, states and keyboard.
@@ -75,21 +134,31 @@ Build the whole thing, then inspect once in a batched round (desktop and mobile
## Step 4 — Mechanical check
```bash
-node /scripts/check.mjs --json
+node /scripts/check.mjs --json
```
-Fix every `FAIL` in one batch (contract present, contrast, focus-visible, 9 states, reduced motion, image dimensions, font weights, arbitrary Tailwind values, AI vocabulary and em-dash density, template tells). Never satisfy a check by loosening it. Keep the JSON: the evaluator reads it.
+Before running it, check the content by eye: **each fact (price list, hours, address, offer) appears once in the page body**; the footer may repeat contact details only. A primary action may repeat (a donation ask, ticket prices in the hero and the form); mark intentional repeats `data-repeat-ok`, the evaluator audits them. Any other repeated price list is a duplication bug: keep the one with the best container and delete the other.
+
+Craft-bug rules (check by eye and in the screenshots before the gate): content is visible with no JS-triggered reveal (an element may animate in only from a visible state, never from opacity 0 that a script must clear); no full-viewport overlay or backdrop left on the page; nothing in the hero is cropped by the nav or the viewport edge; every dial, axis or scale is monotonic and labelled with real values; every callout leader ends on its object.
+
+Fix every `FAIL` in one batch (contract present, contrast, focus-visible, 9 states, reduced motion, image dimensions, font weights, arbitrary Tailwind values, AI vocabulary and em-dash density, template tells, and the project checks: concept-contract, facts-in-build, and, for scene, pattern and data-visual treatments only, bespoke-graphics, seeded-art, svg-a11y; for any other treatment those three are INFO, not FAIL, and until check.mjs routes by treatment a bespoke-graphics FAIL on a typography, photography, product-ui or utility build is expected and is not fixed by adding art). A user directive outranks any check row (precedence item 3): never add an illustration to satisfy a check against a "no illustrations" directive. Never satisfy a check by loosening it. Keep the JSON: the evaluator reads it.
+
+## Step 4b — Critic before shipping
+
+Spawn a FRESH subagent (Agent tool) with the desktop and phone fold and full-page screenshots, the dossier facts and the critic prompt and rubric from [`references/art-crew.md`](references/art-crew.md) section 5, with `{TREATMENT}` filled from the contract (specificity, signature visual, craft, wow, each 1-10; anchors from `graphics.md` §0b at 9-10 for scene and the §9-§12 bars otherwise; "pill figures / boxes for objects / template sections / clipped text / dead space" at 4-5). It returns scores and the 5 highest-impact fixes. The lead applies the fixes (plates go back to their illustrator) and re-runs a new critic; stop when the mean is 7.5 or more or after 2 critic rounds, logging open items in NOTES.md. After applying fixes, re-run `check.mjs` and the fold check and refresh the evaluator JSON before Step 5; record the last critic mean in NOTES.md. Critic rounds sit outside the art budget and may be skipped when time is short.
+
+**Blocking craft fails.** Before Step 5 or shipping, these fold-check rows must be PASS: collisions, clipped-text, hidden-content, stray-overlay, duplicate-content, page-overflow (nothing wider than the viewport at 1440 or 390 unless inside its own scroll container), meta-copy (no designer or scaffold language in visible text; exempt with data-meta-ok), headline-on-fold (operate/read: title-on-fold), plus headline-in-scene for the scene treatment only (the check's `BLOCKING:` line lists any that fail). They are cheap to fix and the time budget never excuses them. Coverage, depth and plate-size may ship as logged open items (`NOTES.md`) if time runs out.
## Step 5 — Separate evaluation
Mandatory for anything the user will ship; skippable only when the user said "just something quick".
-1. Read [`evaluator-prompt.md`](evaluator-prompt.md) and copy it **verbatim** into a new subagent (`general-purpose`, `model: sonnet`, `mode: bypassPermissions`). Append: the original brief, the absolute paths of the built files, the path of the `check.mjs` JSON, and screenshot paths if any (`npx agent-browser` or the browser MCP when available; otherwise say none).
-2. Do **not** pass this SKILL.md, the references, the catalogs, or any of the generating conversation. The evaluator audits the build against its own contract block and tests distinctiveness; feeding it the generator's rules collapses that separation.
+1. Read [`evaluator-prompt.md`](evaluator-prompt.md) and copy it **verbatim** into a new subagent (`general-purpose`, `model: sonnet`, `mode: bypassPermissions`). Append: the original brief, the absolute paths of the built files, the path of the `check.mjs` JSON, `.vary/dossier.json`, `.vary/art-brief.md`, `.vary/critique-r2.json` (the round-2 art critique) and the gallery screenshots (these three only if the treatment produced them; photography, typography and utility builds have none), plus the page screenshots (`npx agent-browser` or the browser MCP). Screenshots are **required** for persuade and experience (ios/android: device screenshots); without them the evaluator returns RECAPTURE. Optionally append `SIBLINGS:` with the contract blocks of other variants for the same project.
+2. The dossier, art brief and critique are project evidence, not generator rules. Pass them. Still withhold this SKILL.md, the references, the catalogs, and any of the generating conversation. The evaluator audits the build against its own contract block and tests distinctiveness; feeding it the generator's rules collapses that separation.
3. Dispositions are closed: **SHIP / FIX / REBUILD / RECAPTURE**. FIX gets exactly one batched round, re-checked by the evaluator, not by the builder. REBUILD means a structural promise broke (skeleton, a grammar rule, thesis vs execution): return to Step 3 with the same contract. RECAPTURE means the evidence was bad (contract stripped, no source): fix the evidence, not the design.
4. The builder never marks its own SHIP. If no subagent tool exists, run `check.mjs`, re-read only the contract and source in a fresh turn, cap the outcome at FIX, and tell the user an independent review did not happen.
-Report to the user: the SEED KEY (so the roll is reproducible), the world and skeleton in one line, the disposition, and the re-roll command.
+Report to the user: the SEED KEY (so the roll is reproducible), the concept name and signature device, the world and skeleton in one line, the disposition, and the re-roll command.
---
@@ -100,10 +169,18 @@ Report to the user: the SEED KEY (so the roll is reproducible), the world and sk
| Repo has DESIGN.md / tokens / themed components | Extend mode (`references/extend-mode.md`); no world roll |
| New section or component inside an existing surface | Inherit the surface; no roll at all |
| User pins an aesthetic, era, font or palette | `--lock …`; the brief wins over any catalog warning |
+| User directive about the look ("no illustrations", "B&W") | `dossier.directives`; outranks the bars |
+| Client supplies photography | `photography` concept |
+| SaaS with a real product | `product-ui` concept |
+| Dashboard or docs | `utility`, no art brief |
+| Native platform (ios/android) | `mobile-design` + device screenshots |
| User says "safer" / "bolder" while a roll is open | `--from --reroll n --register safer|bolder` |
| User says "just do the normal thing" | `--canon`; ask for 2-3 peer products; their craft is the bar |
| Operate surface (dashboard, settings, checkout) | Mode `operate`: quiet worlds, conventional skeleton, distinctiveness in details |
-| Thin category | `references/thin-domain.md` → `--grounded` |
+| Any new project | Dossier + concepts (Step 0-0b); a thin category simply has more `artefact` and `place` facts |
+| Client has a live site | Scrape copy and media into the dossier; throttle; Wayback fallback |
+| N variants for one client | One dossier, one concepts file, one key, `--reroll 0..N-1`; concepts and worlds are excluded per round |
+| User vetoes a world for the trade | Record in dossier.refuse, `--register safer`; after 2 misses show 3 previews to the user |
| Needs Cyrillic/Greek/Vietnamese body text | `--scripts latin,cyrillic` (filters the font pool before rolling) |
| Email / RN / no webfonts | `--no-webfonts` (system stack; hierarchy from weight and size) |
| Coherence row FAIL | Lock the failing axis and re-run; never proceed on a known-bad assignment |
@@ -111,11 +188,24 @@ Report to the user: the SEED KEY (so the roll is reproducible), the world and sk
## What breaks this skill
-- **Choosing among options.** Presenting three directions and picking one, or "picking the boldest", reinstates the argmax. The roll assigns; the user may steer.
+- **Choosing among options.** Presenting three directions and picking one, or "picking the boldest", reinstates the argmax. The roll assigns; the user may steer. Writing several concepts is required. Choosing among them is not yours.
+- **Subject-blind direction**: rolling without concepts on a new project.
+- **Art that stops at the fold (scene treatment).** One hero, then text, cards and a form. Every section carries its own plate (S3).
+- **A UI card over the art (scene treatment).** A frosted card, chip row or button pair laid over the hero (S5).
+- **Template body (scene treatment).** After a good hero, every section repeats copy left and a small boxed line diagram right, price lists appear twice, plates are labelled boxes. Assign a different skeleton to each section (S7).
+- **No headline on the fold.** (scene: over a drawn surface) No real `
` over a drawn surface, only svg text, no value proposition or action, or a stock card floating over the art (S1, S5).
+- **Wrong mood for the audience.** A concept or world that breaks the audience's mood need (bright primary shapes for a funeral home, a gloomy night street for a children's clinic, a murky page for a friendly accountant) is a critic FAIL; re-roll with `--lock concept=` before building further (S8).
+- **Boxes for objects (scene treatment).** A train, drawer or book drawn as a rectangle, a person as a blob (S7a).
+- **A thin hero (scene treatment).** One icon, one diagram in a framed box, a bare grid or a text-only first screen on a persuade surface. The benchmark heroes are whole scenes or sheets (S1-S3).
+- **Hunting for scripts.** Searching the filesystem for `roll.mjs` or running the installed plugin's copy instead of the base directory.
+- **Decoration instead of drawing (scene treatment)**: blobs, gradient meshes or noise-only heroes where a drawing of the subject belongs.
+- **Invented facts**: a number, quote or customer not in the dossier.
- **Guardrails inside the brief.** Loading `build-craft.md` before the contract, or writing "be bold but not too bold", produces the hedged 65% page.
- **Naming replacements.** Writing "use Satoshi or Geist instead of Inter" anywhere creates the next default. Fonts come from the roll.
- **Skin-only variety.** New font and palette on the category's standard grid. The evaluator's silhouette test exists to catch this; do not argue with it.
- **Randomness on an operate surface.** A maximalist checkout is worse than a plain one. The mode gate is not optional.
- **Independent axes.** Picking a palette from one list and a style from another produces dark style + light palette contradictions. Everything is conditioned on the world.
+- **Overriding a user directive.** Illustrating after "no illustrations", adding colour after "black and white".
+- **Transforming client photos or redrawing real people** when the treatment is photography.
- **Self-certification.** The thread that built it may not ship it.
- **Premium by effect.** Gradient text, decorative glass, uniform `rounded-2xl` and `shadow-lg` signal a template, not craft. Weight, size, position and material carry hierarchy.
diff --git a/plugins/design/skills/vary/data/worlds.json b/plugins/design/skills/vary/data/worlds.json
index e17ee58..ecf3bd7 100644
--- a/plugins/design/skills/vary/data/worlds.json
+++ b/plugins/design/skills/vary/data/worlds.json
@@ -1,6 +1,7 @@
[
{
"id": "swiss-international",
+ "temperaments": ["civic-calm", "technical-precise", "avant-garde"],
"name": "Swiss / International Style",
"origin": "Basel/Zürich, late 1940s-1950s — Müller-Brockmann, Hofmann, Ruder",
"one_line": "Fixed baseline grid; hierarchy by weight/size/position, never color.",
@@ -79,6 +80,16 @@
"kids",
"luxury fashion"
],
+ "sectors": [
+ "enterprise-saas",
+ "maritime-logistics",
+ "culture-arts",
+ "trades-construction"
+ ],
+ "avoid_sectors": [
+ "kids-education",
+ "fashion-beauty-luxury"
+ ],
"confidence": "medium",
"sources": [
"https://en.wikipedia.org/wiki/International_Typographic_Style",
@@ -88,6 +99,7 @@
},
{
"id": "bauhaus",
+ "temperaments": ["avant-garde", "technical-precise"],
"name": "Bauhaus",
"origin": "Weimar/Dessau, 1919-1933 — Herbert Bayer, László Moholy-Nagy",
"one_line": "Primary-color geometric primitives as literal structural units — form states its function.",
@@ -163,6 +175,17 @@
"luxury fashion",
"finance/trading"
],
+ "sectors": [
+ "kids-education",
+ "retail-ecommerce",
+ "culture-arts",
+ "hospitality-travel",
+ "trades-construction"
+ ],
+ "avoid_sectors": [
+ "fashion-beauty-luxury",
+ "finance-insurance"
+ ],
"confidence": "high",
"sources": [
"https://eyeondesign.aiga.org/5-examples-of-bauhaus-graphic-design-that-shaped-the-movement/",
@@ -171,6 +194,7 @@
},
{
"id": "de-stijl",
+ "temperaments": ["avant-garde", "playful-bright"],
"name": "De Stijl",
"origin": "Netherlands, 1917-1931 — Mondrian, Rietveld, van Doesburg",
"one_line": "The orthogonal grid itself is the artwork, in flat red/yellow/blue on black-and-white.",
@@ -245,6 +269,10 @@
"dense data dashboards",
"long-form editorial"
],
+ "sectors": [
+ "culture-arts"
+ ],
+ "avoid_sectors": [],
"confidence": "high",
"sources": [
"https://www.theartstory.org/movement/de-stijl/",
@@ -253,6 +281,7 @@
},
{
"id": "constructivist",
+ "temperaments": ["avant-garde", "nocturnal-social"],
"name": "Constructivist / Soviet avant-garde",
"origin": "USSR, 1919-1930s — Rodchenko, Lissitzky",
"one_line": "Diagonal photomontage and red-on-cream type running as a graphic shape, not just text.",
@@ -329,6 +358,16 @@
"children's products",
"enterprise B2B"
],
+ "sectors": [
+ "nonprofit-activism",
+ "music-events-nightlife",
+ "dev-tools"
+ ],
+ "avoid_sectors": [
+ "healthcare-clinical",
+ "kids-education",
+ "enterprise-saas"
+ ],
"confidence": "high",
"sources": [
"https://en.wikipedia.org/wiki/Alexander_Rodchenko",
@@ -337,6 +376,7 @@
},
{
"id": "dutch-structuralism",
+ "temperaments": ["avant-garde", "civic-calm"],
"name": "Dutch Structuralism (Total Design / Experimental Jetset)",
"origin": "Amsterdam, 1963-present — Total Design; Experimental Jetset (1997-)",
"one_line": "The grid made visible; deadpan Helvetica captions describe the system itself.",
@@ -408,6 +448,14 @@
"consumer e-commerce",
"playful youth brands"
],
+ "sectors": [
+ "culture-arts",
+ "media-publishing"
+ ],
+ "avoid_sectors": [
+ "retail-ecommerce",
+ "kids-education"
+ ],
"confidence": "high",
"sources": [
"https://en.wikipedia.org/wiki/Experimental_Jetset",
@@ -416,6 +464,7 @@
},
{
"id": "memphis",
+ "temperaments": ["playful-bright", "avant-garde", "nocturnal-social"],
"name": "Memphis",
"origin": "Milan, 1980-1987 — Ettore Sottsass and the Memphis Group",
"one_line": "Clashing neon-and-pastel geometry, deliberately off-grid, refusing a single safe accent.",
@@ -493,6 +542,18 @@
"healthcare",
"enterprise operate-mode tools"
],
+ "sectors": [
+ "kids-education",
+ "culture-arts",
+ "music-events-nightlife",
+ "retail-ecommerce",
+ "food-drink"
+ ],
+ "avoid_sectors": [
+ "finance-insurance",
+ "healthcare-clinical",
+ "enterprise-saas"
+ ],
"confidence": "high",
"sources": [
"https://en.wikipedia.org/wiki/Memphis_Group",
@@ -501,6 +562,7 @@
},
{
"id": "y2k-frutiger-aero",
+ "temperaments": ["playful-bright", "technical-precise", "nocturnal-social"],
"name": "Y2K / Frutiger Aero",
"origin": "Global consumer tech, 2004-2013 — Windows XP/Mac OS X-era skeuomorphism",
"one_line": "Glossy aqua gradients and bokeh nature-tech collage — 2004-era optimism, never flat.",
@@ -578,6 +640,16 @@
"healthcare",
"B2B tools"
],
+ "sectors": [
+ "retail-ecommerce",
+ "music-events-nightlife",
+ "dev-tools",
+ "gaming"
+ ],
+ "avoid_sectors": [
+ "enterprise-saas",
+ "healthcare-clinical"
+ ],
"confidence": "medium",
"sources": [
"https://frutiger-aero.org/frutiger-aero",
@@ -586,6 +658,7 @@
},
{
"id": "brutalist-web",
+ "temperaments": ["avant-garde", "natural-raw", "technical-precise"],
"name": "Brutalist web",
"origin": "Web, ~2014-present — Pascal Deville's brutalistwebsites.com",
"one_line": "Raw, unstyled browser defaults left exactly as the browser draws them.",
@@ -659,6 +732,15 @@
"e-commerce checkout flows",
"healthcare"
],
+ "sectors": [
+ "culture-arts",
+ "music-events-nightlife",
+ "nonprofit-activism"
+ ],
+ "avoid_sectors": [
+ "retail-ecommerce",
+ "healthcare-clinical"
+ ],
"confidence": "high",
"sources": [
"https://www.brutalistwebsites.com/",
@@ -667,6 +749,7 @@
},
{
"id": "neo-brutalism",
+ "temperaments": ["playful-bright", "avant-garde", "technical-precise"],
"name": "Neo-brutalism (product UI)",
"origin": "Web/product UI, ~2020-present — popularized by Michał Malewicz's March 2022 essay (no single originator is universally credited)",
"one_line": "Thick black borders and flat offset shadows — a rubber stamp pressed into pixels.",
@@ -744,6 +827,15 @@
"luxury fashion",
"healthcare"
],
+ "sectors": [
+ "dev-tools",
+ "enterprise-saas",
+ "finance-insurance"
+ ],
+ "avoid_sectors": [
+ "fashion-beauty-luxury",
+ "healthcare-clinical"
+ ],
"confidence": "medium",
"sources": [
"https://www.nngroup.com/articles/neobrutalism",
@@ -752,6 +844,7 @@
},
{
"id": "japanese-editorial",
+ "temperaments": ["civic-calm", "natural-raw", "warm-domestic"],
"name": "Japanese editorial (Idea magazine / MUJI)",
"origin": "Tokyo, 1980-present — MUJI's product and print design language. (Idea magazine, the namesake 1953 typography journal, in fact runs a more colorful, maximalist editorial register per its own citation below; this card follows the MUJI/negative-space lineage specifically, not Idea's editorial pages.)",
"one_line": "Negative space as an active element; hand-tuned kerning carries the hierarchy.",
@@ -825,6 +918,17 @@
"dense operate-mode dashboards",
"youth/playful consumer apps"
],
+ "sectors": [
+ "retail-ecommerce",
+ "wellness",
+ "culture-arts",
+ "food-drink",
+ "hospitality-travel",
+ "nature-outdoor"
+ ],
+ "avoid_sectors": [
+ "kids-education"
+ ],
"confidence": "verify",
"sources": [
"https://www.idea-mag.com/en/about/",
@@ -833,6 +937,7 @@
},
{
"id": "scandinavian-functionalism",
+ "temperaments": ["warm-domestic", "civic-calm", "natural-raw"],
"name": "Scandinavian functionalism",
"origin": "Nordic countries, 1930s-present — Stockholm Exhibition 1930; Aalto, Jacobsen",
"one_line": "Light birch and pale grey, generous margins, ornament only where it states a function.",
@@ -907,6 +1012,19 @@
"nightlife/music",
"high-energy sports products"
],
+ "sectors": [
+ "retail-ecommerce",
+ "kids-education",
+ "nature-outdoor",
+ "food-drink",
+ "hospitality-travel",
+ "trades-construction",
+ "wellness"
+ ],
+ "avoid_sectors": [
+ "music-events-nightlife",
+ "sports-fitness"
+ ],
"confidence": "high",
"sources": [
"https://en.wikipedia.org/wiki/Scandinavian_design",
@@ -915,6 +1033,7 @@
},
{
"id": "italian-rationalist",
+ "temperaments": ["civic-calm", "avant-garde", "technical-precise"],
"name": "Italian Rationalist / Radical design",
"origin": "Italy, 1930s (rationalism) and 1966-1978 (radical) — Terragni; Superstudio (1966-1978), Archizoom (1966-1974)",
"one_line": "An infinite black-on-white grid receding to a vanishing point, punctured by one red intrusion.",
@@ -988,6 +1107,15 @@
"consumer e-commerce",
"kids products"
],
+ "sectors": [
+ "culture-arts",
+ "media-publishing",
+ "trades-construction"
+ ],
+ "avoid_sectors": [
+ "retail-ecommerce",
+ "kids-education"
+ ],
"confidence": "verify",
"sources": [
"https://architizer.com/blog/inspiration/stories/superstudio-gridded-architecture/",
@@ -996,6 +1124,7 @@
},
{
"id": "mid-century-corporate",
+ "temperaments": ["civic-calm", "technical-precise"],
"name": "Mid-century American corporate",
"origin": "USA, 1950s-60s — Paul Rand, Saul Bass",
"one_line": "One geometric motif repeated at every scale, anchored by a confident flat logotype.",
@@ -1071,6 +1200,13 @@
"cutting-edge tech startups wanting to feel new",
"gaming"
],
+ "sectors": [
+ "finance-insurance"
+ ],
+ "avoid_sectors": [
+ "dev-tools",
+ "gaming"
+ ],
"confidence": "high",
"sources": [
"https://www.designyourway.net/blog/paul-rand/",
@@ -1079,6 +1215,7 @@
},
{
"id": "op-art",
+ "temperaments": ["avant-garde", "playful-bright", "nocturnal-social"],
"name": "Op-art",
"origin": "1960s — Bridget Riley, Victor Vasarely; MoMA's 'The Responsive Eye' 1965",
"one_line": "A single mathematical pattern engineered to vibrate — the pattern is the entire content.",
@@ -1148,6 +1285,14 @@
"long-session operate tools",
"healthcare"
],
+ "sectors": [
+ "culture-arts",
+ "music-events-nightlife",
+ "fashion-beauty-luxury"
+ ],
+ "avoid_sectors": [
+ "healthcare-clinical"
+ ],
"confidence": "medium",
"sources": [
"https://www.britannica.com/biography/Bridget-Riley",
@@ -1156,6 +1301,7 @@
},
{
"id": "psychedelic",
+ "temperaments": ["nocturnal-social", "avant-garde", "playful-bright"],
"name": "Psychedelic (Fillmore poster)",
"origin": "San Francisco, 1965-1971 — Wes Wilson, Victor Moscoso, the Fillmore Auditorium",
"one_line": "Melting hand-lettered type fused into Art-Nouveau illustration at full complementary saturation.",
@@ -1233,6 +1379,15 @@
"healthcare",
"finance"
],
+ "sectors": [
+ "music-events-nightlife",
+ "culture-arts"
+ ],
+ "avoid_sectors": [
+ "enterprise-saas",
+ "healthcare-clinical",
+ "finance-insurance"
+ ],
"confidence": "medium",
"sources": [
"https://www.smithsonianmag.com/arts-culture/psychedelic-concert-poster-rocked-world-180958780/",
@@ -1241,6 +1396,7 @@
},
{
"id": "punk-zine",
+ "temperaments": ["nocturnal-social", "avant-garde", "natural-raw"],
"name": "Punk / zine (Jamie Reid)",
"origin": "UK, 1976-1980s — Jamie Reid, Sex Pistols",
"one_line": "Ransom-note cut-and-paste lettering on photocopier-degraded black and white.",
@@ -1318,6 +1474,17 @@
"finance",
"luxury fashion"
],
+ "sectors": [
+ "music-events-nightlife",
+ "nonprofit-activism",
+ "culture-arts"
+ ],
+ "avoid_sectors": [
+ "enterprise-saas",
+ "healthcare-clinical",
+ "finance-insurance",
+ "fashion-beauty-luxury"
+ ],
"confidence": "high",
"sources": [
"https://www.theartnewspaper.com/2023/08/10/jamie-reid-graphic-designer-who-defined-the-visual-character-of-the-punk-movement-has-died-aged-76",
@@ -1326,6 +1493,7 @@
},
{
"id": "terminal-hacker",
+ "temperaments": ["technical-precise", "nocturnal-social"],
"name": "Terminal / hacker",
"origin": "1970s-80s green-phosphor terminals (VT100, IBM 3270), revived 2015-present",
"one_line": "Monospace-only, phosphor-on-black, a blinking cursor as the literal interface metaphor.",
@@ -1400,6 +1568,16 @@
"wellness/lifestyle brands",
"kids products"
],
+ "sectors": [
+ "dev-tools",
+ "engineering-technical"
+ ],
+ "avoid_sectors": [
+ "retail-ecommerce",
+ "wellness",
+ "kids-education",
+ "food-drink"
+ ],
"confidence": "high",
"sources": [
"https://designbycurio.com/learn/bloomberg-terminal-green",
@@ -1408,6 +1586,7 @@
},
{
"id": "industrial-datasheet",
+ "temperaments": ["technical-precise", "civic-calm"],
"name": "Industrial / datasheet",
"origin": "Engineering/electronics documentation, 1950s-present",
"one_line": "Hairline-ruled tables, decimal-aligned tabular figures, labeled technical diagrams instead of photos.",
@@ -1485,6 +1664,16 @@
"luxury fashion",
"kids products"
],
+ "sectors": [
+ "industrial-hardware",
+ "engineering-technical",
+ "trades-construction"
+ ],
+ "avoid_sectors": [
+ "fashion-beauty-luxury",
+ "kids-education",
+ "retail-ecommerce"
+ ],
"confidence": "high",
"sources": [
"https://en.wikipedia.org/wiki/Datasheet",
@@ -1493,6 +1682,7 @@
},
{
"id": "aviation-hud",
+ "temperaments": ["technical-precise", "nocturnal-social"],
"name": "Aviation / cockpit (HUD)",
"origin": "Military avionics from WWII, standardized 1960s-70s; commercial glass cockpits from early 1980s (Boeing 757/767, Airbus A310)",
"one_line": "Thin glowing outline gauges on near-black, framed by corner brackets, signal colors only.",
@@ -1569,6 +1759,17 @@
"kids products",
"wellness"
],
+ "sectors": [
+ "engineering-technical",
+ "finance-insurance",
+ "gaming",
+ "dev-tools"
+ ],
+ "avoid_sectors": [
+ "wellness",
+ "kids-education",
+ "food-drink"
+ ],
"confidence": "medium",
"sources": [
"https://skybrary.aero/articles/head-display-hud",
@@ -1577,6 +1778,7 @@
},
{
"id": "art-deco-geometric",
+ "temperaments": ["heritage-craft", "nocturnal-social", "avant-garde"],
"name": "Art Deco geometric",
"origin": "France, early-to-mid 1920s, crystallized at the 1925 Paris Exposition; peaked in the US through the 1930s",
"one_line": "Stepped, sunburst geometry in gold and jewel tone, with a confident vertical axis.",
@@ -1654,6 +1856,17 @@
"enterprise operate dashboards",
"minimal utilitarian apps"
],
+ "sectors": [
+ "hospitality-travel",
+ "music-events-nightlife",
+ "fashion-beauty-luxury",
+ "food-drink",
+ "wellness"
+ ],
+ "avoid_sectors": [
+ "dev-tools",
+ "enterprise-saas"
+ ],
"confidence": "medium",
"sources": [
"https://www.britannica.com/art/Art-Deco",
@@ -1662,6 +1875,7 @@
},
{
"id": "dieter-rams-braun",
+ "temperaments": ["technical-precise", "civic-calm", "warm-domestic"],
"name": "Dieter Rams / Braun",
"origin": "Frankfurt/Kronberg, Germany, 1955-1995 — Dieter Rams at Braun; Otl Aicher's Ulm-school graphic system",
"one_line": "A strict modular grid, one signal color, and nothing that doesn't serve a stated function.",
@@ -1738,6 +1952,17 @@
"maximalist fashion",
"entertainment"
],
+ "sectors": [
+ "industrial-hardware",
+ "retail-ecommerce",
+ "engineering-technical",
+ "trades-construction"
+ ],
+ "avoid_sectors": [
+ "kids-education",
+ "fashion-beauty-luxury",
+ "culture-arts"
+ ],
"confidence": "medium",
"sources": [
"https://www.vitsoe.com/us/about/dieter-rams",
@@ -1746,6 +1971,7 @@
},
{
"id": "letterpress-wood-type",
+ "temperaments": ["heritage-craft", "warm-domestic", "nocturnal-social"],
"name": "Letterpress / wood type (Hatch Show Print)",
"origin": "Nashville, since 1879 — Hatch Show Print",
"one_line": "Mismatched wood-type sizes and uneven hand-inking on a carved-illustration handbill.",
@@ -1823,6 +2049,19 @@
"fintech",
"healthcare"
],
+ "sectors": [
+ "music-events-nightlife",
+ "food-drink",
+ "retail-ecommerce",
+ "hospitality-travel",
+ "trades-construction",
+ "nature-outdoor"
+ ],
+ "avoid_sectors": [
+ "enterprise-saas",
+ "finance-insurance",
+ "healthcare-clinical"
+ ],
"confidence": "high",
"sources": [
"https://hatchshowprint.com/about",
@@ -1831,6 +2070,7 @@
},
{
"id": "scientific-journal",
+ "temperaments": ["technical-precise", "civic-calm", "natural-raw"],
"name": "Scientific journal (Nature / LaTeX two-column)",
"origin": "Scientific publishing, 19th century-present — Nature, LaTeX two-column convention",
"one_line": "A strict two-column grid where every citation and figure number is a real cross-reference.",
@@ -1904,6 +2144,12 @@
"consumer marketing pages",
"playful youth brands"
],
+ "sectors": [
+ "engineering-technical",
+ "media-publishing",
+ "kids-education"
+ ],
+ "avoid_sectors": [],
"confidence": "high",
"sources": [
"https://www.nature.com/nature/for-authors/final-submission",
@@ -1912,6 +2158,7 @@
},
{
"id": "mid-century-travel-poster",
+ "temperaments": ["heritage-craft", "playful-bright"],
"name": "Mid-century travel poster",
"origin": "1920s-1960s — Golden Age of railway/ocean-liner travel through the Jet Age; David Klein for TWA",
"one_line": "A flat-litho destination image, one confident wordmark, one signature geometric motif.",
@@ -1989,6 +2236,18 @@
"fintech",
"dev tools"
],
+ "sectors": [
+ "hospitality-travel",
+ "legal-public",
+ "maritime-logistics",
+ "food-drink",
+ "nature-outdoor"
+ ],
+ "avoid_sectors": [
+ "enterprise-saas",
+ "finance-insurance",
+ "dev-tools"
+ ],
"confidence": "high",
"sources": [
"https://www.orsonandwelles.co.uk/blogs/articles/the-evolution-of-travel-posters-from-railway-romance-to-the-jet-age",
@@ -1997,6 +2256,7 @@
},
{
"id": "cartographic",
+ "temperaments": ["heritage-craft", "natural-raw", "technical-precise", "civic-calm"],
"name": "Cartographic",
"origin": "Ordnance Survey / USGS map conventions, 19th c.-present",
"one_line": "The page reads as a surveyed map: legend as first-class UI, content organized by location, not narrative order.",
@@ -2082,6 +2342,17 @@
"checkout/transaction flows",
"kids' products"
],
+ "sectors": [
+ "maritime-logistics",
+ "hospitality-travel",
+ "retail-ecommerce",
+ "trades-construction",
+ "nature-outdoor"
+ ],
+ "avoid_sectors": [
+ "kids-education",
+ "media-publishing"
+ ],
"confidence": "medium",
"sources": [
"https://docs.os.uk/more-than-maps/geographic-data-visualisation/guide-to-cartography/map-legends"
@@ -2089,6 +2360,7 @@
},
{
"id": "apothecary-label",
+ "temperaments": ["heritage-craft", "warm-domestic", "natural-raw"],
"name": "Apothecary / Label",
"origin": "Victorian pharmacy labels, 1800s-1930s",
"one_line": "A single centered, symmetrical label in small-caps serif and one rule — trust through restraint, not romance.",
@@ -2171,6 +2443,17 @@
"gaming",
"enterprise SaaS"
],
+ "sectors": [
+ "wellness",
+ "food-drink",
+ "fashion-beauty-luxury",
+ "hospitality-travel",
+ "nature-outdoor"
+ ],
+ "avoid_sectors": [
+ "gaming",
+ "enterprise-saas"
+ ],
"confidence": "verify",
"sources": [
"https://creativemarket.com/blog/design-trend-apothecary-style"
@@ -2178,6 +2461,7 @@
},
{
"id": "museum-gallery",
+ "temperaments": ["civic-calm", "avant-garde", "heritage-craft"],
"name": "Museum / Gallery",
"origin": "Institutional wall-text conventions, 1970s-present",
"one_line": "Extreme whitespace treats content like an exhibited object; quiet caption type never competes with the work.",
@@ -2255,6 +2539,16 @@
"dense SaaS dashboards",
"urgency-driven campaigns"
],
+ "sectors": [
+ "culture-arts",
+ "retail-ecommerce",
+ "hospitality-travel",
+ "wellness"
+ ],
+ "avoid_sectors": [
+ "dev-tools",
+ "enterprise-saas"
+ ],
"confidence": "verify",
"sources": [
"https://www.goldustdesign.co.uk/post/typographic-design-in-galleries"
@@ -2262,6 +2556,7 @@
},
{
"id": "sports-broadcast",
+ "temperaments": ["nocturnal-social", "playful-bright", "technical-precise"],
"name": "Sports Broadcast",
"origin": "ESPN/Sky Sports lower-thirds, 1990s-present",
"one_line": "Angular sheared panels and broadcast-style data call-outs make static content feel live.",
@@ -2339,6 +2634,16 @@
"meditative/wellness apps",
"enterprise B2B tools"
],
+ "sectors": [
+ "sports-fitness",
+ "gaming",
+ "media-publishing"
+ ],
+ "avoid_sectors": [
+ "fashion-beauty-luxury",
+ "wellness",
+ "enterprise-saas"
+ ],
"confidence": "verify",
"sources": [
"https://www.newscaststudio.com/setstudio/sportscenter/"
@@ -2346,6 +2651,7 @@
},
{
"id": "transit-signage",
+ "temperaments": ["civic-calm", "technical-precise"],
"name": "Transit Signage",
"origin": "NYC Subway (Vignelli), London Underground (Johnston/Kinneir Calvert), 1930s-1970s",
"one_line": "One geometric sans at every scale, a strict route-color system, and pictograms standing in for words.",
@@ -2421,6 +2727,16 @@
"narrative storytelling sites",
"children's products"
],
+ "sectors": [
+ "maritime-logistics",
+ "legal-public",
+ "engineering-technical",
+ "trades-construction"
+ ],
+ "avoid_sectors": [
+ "fashion-beauty-luxury",
+ "kids-education"
+ ],
"confidence": "high",
"sources": [
"https://standardsmanual.com/products/nyctacompactedition",
@@ -2429,6 +2745,7 @@
},
{
"id": "luxury-fashion-editorial",
+ "temperaments": ["avant-garde", "heritage-craft", "nocturnal-social"],
"name": "Luxury Fashion Editorial",
"origin": "Vogue/haute-couture lookbooks, 1960s-present",
"one_line": "Extreme whitespace and one oversized didone headline make the interface nearly disappear.",
@@ -2505,6 +2822,17 @@
"budget/discount retail",
"kids' products"
],
+ "sectors": [
+ "retail-ecommerce",
+ "hospitality-travel",
+ "fashion-beauty-luxury",
+ "food-drink",
+ "wellness"
+ ],
+ "avoid_sectors": [
+ "enterprise-saas",
+ "kids-education"
+ ],
"confidence": "high",
"sources": [
"https://en.wikipedia.org/wiki/Didone_(typography)"
@@ -2512,6 +2840,7 @@
},
{
"id": "childrens-book",
+ "temperaments": ["playful-bright", "warm-domestic", "natural-raw"],
"name": "Children's Book Illustration",
"origin": "Golden Book / Eric Carle tradition, 1940s-present",
"one_line": "Flat, hand-textured shapes and a rounded, friendly type carry one warm subject per screen.",
@@ -2595,6 +2924,17 @@
"finance/trading tools",
"luxury fashion"
],
+ "sectors": [
+ "kids-education",
+ "retail-ecommerce",
+ "food-drink",
+ "nature-outdoor"
+ ],
+ "avoid_sectors": [
+ "enterprise-saas",
+ "finance-insurance",
+ "fashion-beauty-luxury"
+ ],
"confidence": "high",
"sources": [
"https://en.wikipedia.org/wiki/Little_Golden_Books",
@@ -2603,6 +2943,7 @@
},
{
"id": "risograph-zine",
+ "temperaments": ["playful-bright", "avant-garde", "natural-raw"],
"name": "Risograph Print / Zine",
"origin": "Riso Kagaku duplicators (Japan, 1986), adopted by indie publishers, 2000s-present",
"one_line": "2-3 fluorescent spot colors misregister by a few pixels, echoing a duplicator print run.",
@@ -2687,6 +3028,21 @@
"finance/trading tools",
"medical/clinical products"
],
+ "sectors": [
+ "media-publishing",
+ "music-events-nightlife",
+ "culture-arts",
+ "retail-ecommerce",
+ "food-drink",
+ "hospitality-travel",
+ "nature-outdoor",
+ "wellness"
+ ],
+ "avoid_sectors": [
+ "enterprise-saas",
+ "finance-insurance",
+ "healthcare-clinical"
+ ],
"confidence": "high",
"sources": [
"https://en.wikipedia.org/wiki/Risograph"
@@ -2694,6 +3050,7 @@
},
{
"id": "editorial-newspaper",
+ "temperaments": ["heritage-craft", "civic-calm"],
"name": "Editorial Newspaper (Broadsheet)",
"origin": "19th-c. newspaper layout, still visible in NYT/WSJ digital",
"one_line": "Rule-lined multi-column serif text with a huge headline jump and byline convention, borrowed straight from print.",
@@ -2769,6 +3126,13 @@
"gaming",
"children's products"
],
+ "sectors": [
+ "media-publishing"
+ ],
+ "avoid_sectors": [
+ "gaming",
+ "kids-education"
+ ],
"confidence": "verify",
"sources": [
"https://en.wikipedia.org/wiki/Broadsheet"
@@ -2776,6 +3140,7 @@
},
{
"id": "corporate-memphis",
+ "temperaments": ["playful-bright", "civic-calm"],
"name": "Corporate Memphis / Flat Illustration",
"trap": true,
"origin": "Facebook/Slack/Mailchimp-era SaaS illustration boom, ~2015-2021 (now itself a cliché, coined by Mike Merrill as 'Corporate Memphis')",
@@ -2829,6 +3194,8 @@
"avoid_for": [
"every context — catalog only to help the model recognize and reject it on sight"
],
+ "sectors": [],
+ "avoid_sectors": [],
"confidence": "high",
"sources": [
"https://en.wikipedia.org/wiki/Corporate_Memphis",
@@ -2837,6 +3204,7 @@
},
{
"id": "grunge-carson",
+ "temperaments": ["nocturnal-social", "avant-garde", "natural-raw"],
"name": "Grunge / David Carson Editorial",
"origin": "Ray Gun magazine, 1992-1996",
"one_line": "Deliberately illegible, overlapping type and torn-paper texture treat photography as texture, not image.",
@@ -2918,6 +3286,16 @@
"financial services",
"accessibility-first products"
],
+ "sectors": [
+ "music-events-nightlife",
+ "fashion-beauty-luxury",
+ "media-publishing"
+ ],
+ "avoid_sectors": [
+ "enterprise-saas",
+ "healthcare-clinical",
+ "finance-insurance"
+ ],
"confidence": "high",
"sources": [
"https://en.wikipedia.org/wiki/David_Carson_(graphic_designer)",
@@ -2926,6 +3304,7 @@
},
{
"id": "board-game-rulebook",
+ "temperaments": ["playful-bright", "technical-precise", "warm-domestic"],
"name": "Board Game / Tabletop Rulebook",
"origin": "Modern hobby board-game manuals, 1990s-present",
"one_line": "Numbered callouts cross-reference diagrams; an iconography glossary is a first-class section, not a footnote.",
@@ -3008,6 +3387,15 @@
"fast-scrolling social apps",
"poster-style landing pages"
],
+ "sectors": [
+ "engineering-technical",
+ "legal-public",
+ "kids-education",
+ "gaming"
+ ],
+ "avoid_sectors": [
+ "fashion-beauty-luxury"
+ ],
"confidence": "high",
"sources": [
"https://www.onpressbookprinting.com/resources/designing-a-board-game-manual-guide",
@@ -3016,6 +3404,7 @@
},
{
"id": "wayfinding-aicher",
+ "temperaments": ["civic-calm", "technical-precise", "playful-bright"],
"name": "Wayfinding / Signage Systems (Otl Aicher)",
"origin": "Munich Olympics 1972, airport signage lineage",
"one_line": "A modular pictogram grid and one accent color per zone make legibility-at-a-glance the entire design system.",
@@ -3091,6 +3480,16 @@
"narrative storytelling sites",
"children's illustrated products"
],
+ "sectors": [
+ "maritime-logistics",
+ "healthcare-clinical",
+ "retail-ecommerce",
+ "kids-education",
+ "trades-construction"
+ ],
+ "avoid_sectors": [
+ "fashion-beauty-luxury"
+ ],
"confidence": "high",
"sources": [
"https://en.wikipedia.org/wiki/Otl_Aicher"
@@ -3098,6 +3497,7 @@
},
{
"id": "blueprint",
+ "temperaments": ["technical-precise", "heritage-craft"],
"name": "Blueprint / Technical Drawing",
"origin": "Architectural/engineering blueprints, 1900s-present",
"one_line": "White line-work on deep blue — everything is stroke, dimensioned with arrowheads and a drafting title block.",
@@ -3177,6 +3577,15 @@
"children's products",
"warm/lifestyle brands"
],
+ "sectors": [
+ "engineering-technical",
+ "industrial-hardware",
+ "trades-construction"
+ ],
+ "avoid_sectors": [
+ "fashion-beauty-luxury",
+ "kids-education"
+ ],
"confidence": "high",
"sources": [
"https://en.wikipedia.org/wiki/Blueprint"
@@ -3184,6 +3593,7 @@
},
{
"id": "newsprint-tabloid",
+ "temperaments": ["heritage-craft", "nocturnal-social", "civic-calm"],
"name": "Newsprint Tabloid",
"origin": "NY Post / Bild-style front pages",
"one_line": "One enormous shock headline and halftone-dot photography dominate the page like a front page on a newsstand rack.",
@@ -3263,6 +3673,17 @@
"enterprise SaaS",
"luxury brands"
],
+ "sectors": [
+ "media-publishing",
+ "music-events-nightlife",
+ "nonprofit-activism",
+ "food-drink"
+ ],
+ "avoid_sectors": [
+ "healthcare-clinical",
+ "enterprise-saas",
+ "fashion-beauty-luxury"
+ ],
"confidence": "high",
"sources": [
"https://en.wikipedia.org/wiki/Tabloid_(newspaper_format)"
@@ -3270,6 +3691,7 @@
},
{
"id": "trading-floor",
+ "temperaments": ["technical-precise", "nocturnal-social"],
"name": "Trading Floor / Financial Terminal",
"origin": "Bloomberg Terminal, 1980s-present",
"one_line": "Black-background dense multi-panel layout where color means only one thing: red or green delta.",
@@ -3349,6 +3771,16 @@
"children's products",
"luxury editorial brands"
],
+ "sectors": [
+ "finance-insurance",
+ "dev-tools",
+ "enterprise-saas"
+ ],
+ "avoid_sectors": [
+ "wellness",
+ "kids-education",
+ "fashion-beauty-luxury"
+ ],
"confidence": "high",
"sources": [
"https://en.wikipedia.org/wiki/Bloomberg_Terminal"
@@ -3356,6 +3788,7 @@
},
{
"id": "vintage-analog",
+ "temperaments": ["heritage-craft", "warm-domestic", "nocturnal-social", "natural-raw"],
"name": "Vintage Analog / Retro Film",
"origin": "Kodachrome-era print and 8mm film, 1960s-70s photography",
"one_line": "A warm, lifted-black color grade and physical print-border framing evoke Kodachrome-era photography.",
@@ -3435,6 +3868,19 @@
"dev tools",
"clinical/medical products"
],
+ "sectors": [
+ "hospitality-travel",
+ "culture-arts",
+ "media-publishing",
+ "food-drink",
+ "nature-outdoor",
+ "wellness"
+ ],
+ "avoid_sectors": [
+ "finance-insurance",
+ "dev-tools",
+ "healthcare-clinical"
+ ],
"confidence": "high",
"sources": [
"https://en.wikipedia.org/wiki/Kodachrome"
@@ -3442,6 +3888,7 @@
},
{
"id": "pharmaceutical-clinical",
+ "temperaments": ["technical-precise", "civic-calm"],
"name": "Pharmaceutical / Clinical",
"origin": "Medical device and clinical-trial documentation",
"one_line": "Cool desaturated blue-grey and literal iconography make regulatory fine print a visible, respected element.",
@@ -3524,6 +3971,15 @@
"gaming",
"luxury/fashion brands"
],
+ "sectors": [
+ "healthcare-clinical",
+ "finance-insurance",
+ "engineering-technical"
+ ],
+ "avoid_sectors": [
+ "gaming",
+ "fashion-beauty-luxury"
+ ],
"confidence": "high",
"sources": [
"https://en.wikipedia.org/wiki/Package_insert"
@@ -3531,6 +3987,7 @@
},
{
"id": "field-guide-naturalist",
+ "temperaments": ["natural-raw", "heritage-craft", "warm-domestic", "technical-precise"],
"name": "Field Guide Naturalist",
"origin": "Roger Tory Peterson's field guide system (1934-present) and Audubon's ornithological plate tradition (1827-1838)",
"one_line": "Audubon/Peterson plates with arrow-pointed field marks and a specimen-label system replace hero photography with observed diagrams.",
@@ -3613,6 +4070,18 @@
"luxury fashion",
"gaming"
],
+ "sectors": [
+ "nature-outdoor",
+ "kids-education",
+ "engineering-technical",
+ "hospitality-travel",
+ "wellness"
+ ],
+ "avoid_sectors": [
+ "finance-insurance",
+ "fashion-beauty-luxury",
+ "gaming"
+ ],
"confidence": "high",
"sources": [
"https://en.wikipedia.org/wiki/Peterson_Field_Guides",
@@ -3621,6 +4090,7 @@
},
{
"id": "nautical-chart",
+ "temperaments": ["heritage-craft", "natural-raw", "technical-precise"],
"name": "Nautical Chart",
"origin": "Admiralty chart conventions (UK Hydrographic Office, 19th c.-present) and NOAA nautical chart standards",
"one_line": "Admiralty-chart soundings, a compass rose, and a title block turn a page into a navigational document.",
@@ -3703,6 +4173,15 @@
"children's products",
"luxury fashion"
],
+ "sectors": [
+ "maritime-logistics",
+ "nature-outdoor",
+ "sports-fitness"
+ ],
+ "avoid_sectors": [
+ "kids-education",
+ "fashion-beauty-luxury"
+ ],
"confidence": "medium",
"sources": [
"https://www.admiralty.co.uk/charts",
@@ -3711,6 +4190,7 @@
},
{
"id": "japanese-consumer-electronics-80s",
+ "temperaments": ["technical-precise", "nocturnal-social", "playful-bright"],
"name": "Japanese Consumer Electronics (1980s)",
"origin": "Japanese consumer electronics industrial design and print catalogs — Sony, Casio, Yamaha, Technics, 1979-1989",
"one_line": "Sony/Casio/Yamaha spec-sheet graphics: metallic grey bodies with exactly one signal color calling out the one feature that matters.",
@@ -3793,6 +4273,17 @@
"children's products",
"luxury fashion"
],
+ "sectors": [
+ "industrial-hardware",
+ "retail-ecommerce",
+ "music-events-nightlife"
+ ],
+ "avoid_sectors": [
+ "wellness",
+ "kids-education",
+ "fashion-beauty-luxury",
+ "food-drink"
+ ],
"confidence": "verify",
"sources": [
"https://en.wikipedia.org/wiki/Walkman",
@@ -3801,6 +4292,7 @@
},
{
"id": "video-game-menu",
+ "temperaments": ["playful-bright", "nocturnal-social", "technical-precise"],
"name": "Video Game Menu (PS2 / Persona / Splatoon era)",
"origin": "Late-PS2-through-PS4-era Japanese console game UI design — Persona series (Atlus) and Splatoon (Nintendo), 2006-2020s",
"one_line": "Diagonal panels and kinetic type stack into a UI that moves like it's alive.",
@@ -3884,6 +4376,16 @@
"healthcare/clinical products",
"luxury editorial brands"
],
+ "sectors": [
+ "gaming",
+ "music-events-nightlife",
+ "sports-fitness"
+ ],
+ "avoid_sectors": [
+ "enterprise-saas",
+ "healthcare-clinical",
+ "fashion-beauty-luxury"
+ ],
"confidence": "medium",
"sources": [
"https://ousiadroid.medium.com/what-you-can-learn-from-persona-5s-ui-design-4a4a646245b1",
@@ -3892,6 +4394,7 @@
},
{
"id": "illuminated-manuscript",
+ "temperaments": ["heritage-craft", "avant-garde"],
"name": "Illuminated Manuscript",
"origin": "European illuminated manuscript tradition, monastic scriptoria, c. 500-1500 CE",
"one_line": "Rubricated headings, versal initials, and marginalia turn the page edge into an active decorative field.",
@@ -3975,6 +4478,16 @@
"gaming",
"fast consumer apps"
],
+ "sectors": [
+ "culture-arts",
+ "media-publishing",
+ "legal-public",
+ "fashion-beauty-luxury"
+ ],
+ "avoid_sectors": [
+ "enterprise-saas",
+ "gaming"
+ ],
"confidence": "high",
"sources": [
"https://www.britannica.com/topic/rubrication",
diff --git a/plugins/design/skills/vary/evaluator-prompt.md b/plugins/design/skills/vary/evaluator-prompt.md
index 0770584..7706283 100644
--- a/plugins/design/skills/vary/evaluator-prompt.md
+++ b/plugins/design/skills/vary/evaluator-prompt.md
@@ -9,13 +9,15 @@ You are reviewing a UI design you did not build and have never seen before this
## What you have (this is everything)
-1. **The contract block**: an HTML comment beginning `SEED KEY:` inside the build, printed by an external roll and echoed verbatim. It names WORLD, ARCHETYPE, STRATEGY, PALETTE SEED, DISPLAY FONT, BODY FONT, MOTION MOMENT, GRAMMAR rules, MATERIALS, ANTECEDENTS, REFUSE, COSTUME TELL, and three model-authored lines: SCENE, FIRST VIEWPORT, THESIS. A GROUNDED ANTECEDENT line may be present.
+1. **The contract block**: an HTML comment beginning `SEED KEY:` inside the build, printed by an external roll and echoed verbatim. It names WORLD, ARCHETYPE, STRATEGY, PALETTE SEED, DISPLAY FONT, BODY FONT, MOTION MOMENT, GRAMMAR rules, MATERIALS, ANTECEDENTS, REFUSE, COSTUME TELL, and three model-authored lines: SCENE, FIRST VIEWPORT, THESIS. It may also carry CONCEPT, FACTS, FUNCTIONAL RESKIN, SIGNATURE DEVICE, HERO TREATMENT, DIRECTIVES and a model-authored SIGNATURE GRAPHIC line; audit each as its own row. A broken DIRECTIVE (the user's own words, e.g. "no illustrations") is a structural BROKEN, which means REBUILD. Precedence, highest first: truth (no invented facts); accessibility; user directives; existing brand or design system; platform conventions; the rolled contract; treatment-specific bars and skill defaults.
2. **The build source** (paths appended below). Read every file in full.
3. **A `check.mjs` JSON report** (path appended below) with mechanical results: contract presence, contrast, focus-visible, states, reduced motion, image dimensions, font weights, arbitrary Tailwind values, banned phrases, template tells.
4. **Screenshots**, if paths are appended. If none, say so wherever a check needs one; never guess what an image would show.
5. **The original brief**, verbatim.
+6. **The project dossier** (`dossier.json`), the client's own facts, audience and refusals, when appended.
+7. **An optional SIBLINGS block**: the contract blocks of other variants built for the same project.
-You do NOT have, and must not ask for: the generator's rulebook, the catalogs it rolled from, or any prior review. If any of those leak into your context, disregard them. Grading against a generic checklist instead of this build's own printed contract is the failure this review exists to prevent.
+You do NOT have, and must not ask for: the generator's rulebook, the catalogs it rolled from, or any prior review. If any of those leak into your context, disregard them. The dossier is evidence about the client and may be used. Grading against a generic checklist instead of this build's own printed contract is the failure this review exists to prevent.
## Bias warning — read before anything else
@@ -52,14 +54,29 @@ Read the `check.mjs` JSON. Spot-check two or three cited lines against the sourc
1. **Silhouette**: describe the page as blocks, lines and circles only. Does a hierarchy of importance survive, or would the silhouette fit five competitors? Skeleton reuse fails here regardless of skin.
2. **Competitor-swap**: substitute a direct competitor's name into the headline and primary action, verbatim. Still reads fine → FAIL (no product-specific claim).
3. **One memorable thing**: name one *specific* element you would recognise this build by in a week. A category label ("a fintech dashboard") → FAIL.
-4. **Category-alone guess**: before citing the build, state what a competent designer would predict the palette, type and layout to be from the product category alone. Compare. Divergence → PASS. Note: a `WORLD: canon` contract is exempt from this test and from test 5; judge it on craft and the peers it named.
+4. **Category-alone guess**: before citing the build, state what a competent designer would predict the palette, type and layout to be from the product category alone. Compare. Divergence from the category guess is a PASS only when the divergent choice traces to a cited FACT or to the WORLD's grammar. Divergence with no source is noise and fails. Note: a `WORLD: canon` or `WORLD: system: ` contract is exempt from this test and from test 5; judge it on craft and the peers it named. Axes locked by a dossier directive are excluded from test 5 (same-designer).
5. **Same-designer test** against the five recognisable AI clusters, each MATCH / NO-MATCH with cited hex, font names or layout terms: cream ground + high-contrast serif + terracotta/signal-red accent; near-black + one neon + glowing edges; indigo/purple SaaS gradient default; bento + glassmorphism; Space Grotesk / Satoshi / Fraunces / Geist-class "startup" pairing. Two or more axes matching one cluster → FAIL.
Distinctiveness PASS requires 4 of 5. A distinctiveness FAIL does not by itself force REBUILD; it is one input to Step 6, weighed against whether the contract itself was safe.
+### Step 5b — Project specificity (PASS/FAIL per test with evidence; never a 1-5 score)
+Distinctiveness asks whether the build differs from the category. This step asks whether it belongs to THIS project. A `WORLD: canon` or `WORLD: system:` contract is exempt from distinctiveness but not from this step.
+- **P1 Subject-swap**: name a same-category business in another town. List every graphic, headline and control that would become false for it. Fewer than 3 items → FAIL. This is stronger than the headline-only competitor swap in Step 5.
+- **P2 Signature element, per HERO TREATMENT**: name it, cite the source file and the dossier fact ids it encodes, and confirm it appears at hero scale in the first viewport and at least one other scale. `scene`/`pattern`: the drawn or generated device at hero scale. `photography`: the named dossier assets plus the art-direction rule (crop, sequence, grade). `product-ui`: the real capture and the workflow it shows. `typography`: the lettering idea and the fact it carries. `data-visual`: the chart and its data. `utility`: judged at detail scale (numerals, empty states, icons, copy); a FAIL here is FIX, never REBUILD. FAIL when there is none, or when it is abstract decoration (gradient blob, mesh, noise-only hero, stock icon set). No HERO TREATMENT line: treat as `scene` for persuade/experience.
+- **P3 Graphics carry information**: at least one graphic encodes real dossier data (a topping list, DN range, hours, address). Cite the element and the fact. Also PASS when the hero visual is the client's own dossier asset, or when a typography or data-visual element (lettering, chart, specimen) encodes a dossier fact. N/A under utility. Otherwise FAIL.
+- **P4 Trade credibility**: read the dossier audience and decide whether that paying customer would find the look credible for this trade, and whether reading surfaces (prices, forms, body copy) stay legible. A FAIL names the specific element, not "feels off". Example of a FAIL: a riso zine for an HVAC firm whose customers read it as "uber unprofessional".
+- **P5 Art craft (screenshots)**: no banned forms (faces drawn on objects such as food or products, mascots, emoji-blobs; real photographed faces are fine); subjects distinguishable at thumbnail size; style consistent with the world's grammar (ink count, stroke, no gradients if refused); every item in `critique-r2.json`, if supplied, closed. Photography and product-ui add craft items: fidelity (no filter, blend mode or overlay on client images), natural resolution at least 1.5x rendered, crop (focal subject not cut by the nav). No screenshots → UNVERIFIABLE → RECAPTURE.
+- **P6 Richness against the benchmark** (only when HERO TREATMENT = scene; for any other treatment quote the fold rows the gate table marks as gated for it, and a row printed `[INFO]` is not gated; native platforms ios/android: device screenshots, fold rows N/A): compare the first-viewport screenshot to the benchmark descriptions (ara-bar: the restaurant at night, 10+ drawn objects, 3+ depth layers, a light source, brand painted on the sign, real phone number in the art; hitataekni: a full blueprint sheet with grid, coordinates, traced unit, dimension lines, callouts, a title block holding the real name, year, address and phone). Score: (a) the hero is a scene or sheet, not a boxed diagram, single icon, empty grid or text-only (drawing covers >=55% of the viewport at 1440x900, >=45% at 390x844; >=5 distinct subject objects across >=3 depth layers; headline set into the art; >=2 dossier facts rendered inside the art); (b) richness floor: filled shapes, one consistent light source, texture, people or traces of use, 4 to 7 inks; (c) page graphic budget: >=3 more drawn plates down the page, each tied to a different fact group, plus micro-scale marks in the same hand. Run `node scripts/fold-check.mjs --mode --treatment ` (or `check.mjs --fold=`) and cite its metric lines; its FAILs are evidence, the eye decides what counts as a distinct object. Under the scene treatment a text-only or boxed-diagram hero in persuade is a FAIL. List what is missing (objects, layers, light, texture, facts-in-art).
+
+- **P6 fold checks** (the seven rows and the benchmark comparison apply only when HERO TREATMENT = scene; under other treatments RECAPTURE for a missing row only if that row is gated) — Named fold checks the evaluator must report, each PASS/FAIL with the `fold-check.mjs` line quoted (a missing line is a RECAPTURE for a scene build with a built page): (1) **Text collisions** (`collisions-desktop`, `collisions-phone`): no visible text box, HTML or svg ``, overlaps another or is more than 30% covered by an opaque later-painted element; name the two texts on a FAIL. (2) **Dead zone** (`dead-zone`): no near-uniform-colour rectangle larger than 20% of the desktop fold; cite its size and position. (3) **Card over art** (`card-over-art-desktop`, `card-over-art-phone`): no translucent (alpha < 0.95), backdrop-filter or solid-background element with text covering more than 6% of the hero art area; headline, phone, hours and the primary action live on drawn surfaces inside the art (a sign, plate or title block in the svg is fine), never on a card floating over it. (4) **Art down the page** (`art-down-page`): at least 60% of the sections below the fold (contact/footer excluded) carry a drawn plate at least 40% of their width. (5) **Full bleed** (`full-bleed-desktop`, `full-bleed-phone`): the hero art box spans at least 95% of the viewport width with margins of at most 3% each side; a framed picture, card or polaroid with page margins fails; name the art box and its margins. (6) **Rendering depth** (`rendering-depth`): in the desktop hero art area the luminance range p95 - p5 is at least 90 and at least 5 of 16 luminance bins hold at least 2% of the pixels; flat fills with thin uniform strokes read as clip art. The flat-block texture number is printed for the report but not gated. (7) **Plate size** (`plates-size`): at least 50% of the below-fold section plates are at least 35% of the section width, at least 280px tall and carry at least 3 value steps; name the thin, small or pale ones. Under the scene treatment any of these seven FAILing is a Specificity FAIL under P6 and is listed in the fix batch; under other treatments only the rows the gate table marks as gated count and the others are informational.
+
+Specificity PASS requires 5 of 6. Two or more FAILs, a P2 FAIL (except utility), or a P6 FAIL under the scene treatment → REBUILD, written as "promised , shipped ". No dossier supplied → say so; P1 to P4 and P6 are then judged against the brief only and flagged lower confidence.
+
+**Sibling Variety** (only when a SIBLINGS block is appended): concept angle, world, archetype and device technique must each differ from every sibling, and the silhouettes must not be confusable. Any pair matching on 2 or more axes → FIX, naming which variant to re-roll.
+
### Step 6 — Disposition (computed, not a fresh gut call)
-- **RECAPTURE**: `SEED KEY:` missing, or evidence (source, screenshots) insufficient to complete Steps 2-5. Say exactly what is missing and how to get it.
-- **REBUILD**: any structural BROKEN (ARCHETYPE, a GRAMMAR rule, FIRST VIEWPORT, THESIS "promised X, shipped Y"), or distinctiveness failed 2+ tests. Name the broken promise and what must change structurally.
+- **RECAPTURE**: `SEED KEY:` missing, or evidence (source, screenshots) insufficient to complete Steps 2-5b, or a persuade/experience build arrived with no screenshots. Say exactly what is missing and how to get it.
+- **REBUILD**: any structural BROKEN (ARCHETYPE, a GRAMMAR rule, FIRST VIEWPORT, THESIS "promised X, shipped Y"), or distinctiveness failed 2+ tests, or project specificity failed 2+ tests, or no signature element was found (P2, except utility), or a DIRECTIVE was broken. Name the broken promise and what must change structurally.
- **FIX**: only cosmetic BROKENs and/or mechanical FAIL/WARNs, structure sound, distinctiveness ≥4/5. List every fix in one batch: this is the only fix round that will happen.
- **SHIP**: nothing above triggered.
@@ -86,6 +103,24 @@ Distinctiveness PASS requires 4 of 5. A distinctiveness FAIL does not by itself
|---|---|---|
Distinctiveness: PASS | FAIL (n/5)
+## Project Specificity
+| Test | Verdict | Evidence |
+|---|---|---|
+| P1 Subject-swap | | false items: … |
+| P2 Signature element | | treatment, name, file, fact ids, scales |
+| P3 Graphics carry information | | element + fact |
+| P4 Trade credibility | | element |
+| P5 Art craft | | screenshot region |
+| P6 Richness vs benchmark | | (scene only; else gated fold rows) fold-check lines; missing objects/layers/light/texture/facts-in-art |
+Specificity: PASS | FAIL (n/6)
+
+## Contract rows
+Hero treatment:
+Directive compliance:
+
+## Sibling Variety
+(only when SIBLINGS present: one row per sibling, axes matched, which variant to re-roll)
+
## Disposition: SHIP | FIX | REBUILD | RECAPTURE
- FIX → the complete batched list
- REBUILD → which structural promise broke ("promised X, shipped Y") and what must change
@@ -93,4 +128,4 @@ Distinctiveness: PASS | FAIL (n/5)
```
## Final reminder
-Do not soften a structural gap into a polish note. Do not let clean contrast numbers talk you into leniency on distinctiveness: craft and sameness are independent failures, and a beautifully executed identical design still fails this review's purpose. Conversely, do not penalise a genuinely unusual choice because it is unfamiliar to you: name the specific problem with it, or pass it.
+Do not soften a structural gap into a polish note. Do not let clean contrast numbers talk you into leniency on distinctiveness or on project specificity (a different look is not the same as a look that belongs to this client): craft and sameness are independent failures, and a beautifully executed identical design still fails this review's purpose. Conversely, do not penalise a genuinely unusual choice because it is unfamiliar to you: name the specific problem with it, or pass it.
diff --git a/plugins/design/skills/vary/references/art-crew.md b/plugins/design/skills/vary/references/art-crew.md
new file mode 100644
index 0000000..42df9ba
--- /dev/null
+++ b/plugins/design/skills/vary/references/art-crew.md
@@ -0,0 +1,65 @@
+# Art crew and critic
+
+One session that plans, draws every plate, builds and polishes produces thin art and template sections below the fold. The benchmarks came from a dedicated art process with many look-and-fix rounds. This file splits that process: illustrator subagents draw the plates in parallel (Step 3a), a fresh critic scores the built page (Step 4b). `graphics.md` is the engine; this file is the dispatch, the checklists and the rubric.
+
+## 1. Dispatch (Step 3a, after the art brief)
+
+Dispatch only for treatment = scene (pattern: the lead draws, no crew). Use the Agent tool (`subagent_type: general-purpose`, `model: sonnet`, `mode: bypassPermissions`), all illustrators in ONE message so they run in parallel: one for the hero scene, one per section plate, capped at 6 (merge the smallest plates into one illustrator beyond that). Each illustrator is handed ONLY:
+
+- the absolute path of `.vary/art-brief.md`;
+- its plate's row from the brief (subject, fact ids and facts, skeleton, size at desktop and phone, objects-table rows);
+- the absolute paths of the style object file and the core kit (`art/styles.js`, `art/core.js`), and of `art/finish.js` and `art/objects.js` (the lead creates both before dispatch; illustrators import them, never edit them);
+- the path of this file, and the output path `art/.js` it owns. Besides that file it may write only scratch renders (a harness html or script and PNGs) under `.vary/art-shots//`, named `desktop.png` and `phone.png` at the real plate sizes from its row.
+
+The lead does not redraw. It integrates what comes back. If the Agent tool is unavailable, the lead draws the plates itself in the same order (hero, plates, micro) and runs section 3 on each.
+
+## 2. Illustrator brief (copy, fill the braces)
+
+```
+You are an illustrator on a design team. Draw ONE plate: {PLATE NAME}.
+Read: {ART_BRIEF_PATH}, {CORE_PATH}, {STYLE_PATH}, {FINISH_PATH}, {OBJECTS_PATH}, and {ART_CREW_ABS_PATH} section 3.
+Your row: {SUBJECT / FACTS / SKELETON / SIZES}.
+Write {OUT_PATH} and scratch files under {SHOTS_DIR} only: {OUT_PATH} is a pure function (S, r, W, H) -> svg string, seeded, colours only via swatch names from the style object.
+Shared with the other plates (do not change): ground line at {GROUND_Y}% of plate height, key light from {LIGHT_DIR}, glow {GLOW_SOURCE}, grain {GRAIN}, the style object swatches. The lead fills these from the brief's shared plate frame.
+Loop: render at real size ({W}x{H} desktop and phone) with Playwright (or rsvg-convert) to {SHOTS_DIR}/desktop.png and phone.png, Read the PNGs, run the checklist, list what is wrong in concrete terms, fix, re-render. Do 2 render-and-fix rounds (3 for the hero plate) and stop within about 20 minutes; a finished plate beats a perfect one.
+Return: the module path, the final PNG path(s), the checklist with pass/fail per line, and any open item. Do not touch any other file.
+```
+
+## 3. Self-critique checklist (every render)
+
+1. Objects, not boxes: each object has a real silhouette and its parts (roof line, bogies, spine, headband), never a box or pill standing for a thing.
+2. Posture: every person has a stance or gesture, a cast shadow, hands doing something; no pill figures.
+3. Shared ground and light: objects stand on one ground line, cast shadows fall the same way, one key light and one glow; nothing floats.
+4. Values: at least 3 steps per material, the brightest value on the focal fact.
+5. Texture: grain 3-8%, hatching, halftone or paper; no flat fills with thin uniform strokes.
+6. Facts in the art: the plate's dossier facts are drawn or lettered in it (numbers, names, dates).
+7. No dead space: no empty region over 20%; no tool or prop without context (a surface, a hand, a trace of use).
+8. Craft: no text clipped by the svg edge, no label over an object, every dial, axis or scale monotonic with real labelled values, every callout leader ends on its object.
+9. Size: the plate is at the size in the brief (at least 40% of section width, 280px tall).
+
+## 4. Integration rules (lead)
+
+- One shared ground line and one light direction across all plates; the brief's shared plate frame (graphics.md §7 step 1, item 10) fixes both and the lead rejects a plate that breaks them.
+- Plate sizes come from the brief; do not rescale a plate to fit a layout, change the layout.
+- Plates are composed unchanged. A needed fix goes back to the same illustrator (or is a one-line swatch or size edit); the lead does not redraw.
+- Re-render the gallery once with every plate together and read it once, apply one fix pass, then start page code.
+
+## 5. Critic (Step 4b)
+
+A FRESH subagent (Agent tool, `general-purpose`, `model: sonnet`), never the builder, never one that saw the generating conversation. Give it the audience mood need line from the art brief (fills {MOOD_NEED}) and the contract's hero treatment (fills {TREATMENT}), plus: desktop and phone fold screenshots, desktop and phone full-page screenshots (absolute paths), the `.vary/dossier.json` facts, and the prompt below. Withhold SKILL.md and the other references.
+
+```
+You are a hard design judge. Read the screenshots at {PATHS} and the facts at {DOSSIER}. Score each 1-10:
+- specificity: is every picture a function of this client's own facts, or could it be any client's?
+- graphics: the signature visual, judged against the {TREATMENT} bar (scene: richness and finish of the drawings; otherwise the matching `graphics.md` §9-§12 checklist).
+- craft: collisions, clipping, overlays, hidden content, scales, callouts.
+- mood: does the concept, world and palette fit the audience's mood need ({MOOD_NEED} from the art brief, e.g. children: bright, safe, daytime; bereavement: calm, quiet, dignified; B2B lab: precise, trustworthy)? A world that breaks it scores mood 1-3 and is a FAIL regardless of the other scores.
+- headline: is there a real headline, value line and action in the fold (scene: on a drawn surface)?
+- wow: would a stranger remember it?
+Anchors show the quality level, not the subject matter: a client from a different domain is judged against the same level of detail, not against pizza or air handlers. 9-10: for scene, {PASTE the "What was drawn" text of graphics.md §0b rows 1, 2, 5 and 7}; for other treatments, {PASTE the matching graphics.md §9-§12 bar and checklist}. 4-5: pill figures; boxes standing for objects; template sections (scene only: card left, table right, pill CTA, divider, repeated); text clipped by the nav, viewport or svg edge; dead space; a dark overlay left over the hero; a hero missing in the full-page shot.
+Judge only what the screenshots show; quote what you see. "mean" is the arithmetic mean of the four scores specificity, graphics, craft, wow (mood is reported separately) to one decimal. If an image is unreadable, return {"error":"unreadable: "} instead of guessing. Return JSON: {"specificity":n,"graphics":n,"craft":n,"wow":n,"mood":n,"mood_fail":bool,"mean":n,"fixes":[5 items, highest impact first, each naming the element and the concrete change]}.
+```
+
+Mood FAIL: if `mood_fail` is true the lead stops building on this world, re-rolls with `--lock concept=` (a concept that serves the mood) and rebuilds before any other fix. Blocking craft fails (fold-check rows collisions, clipped-text, hidden-content, stray-overlay, duplicate-content, page-overflow, meta-copy, headline-on-fold (title-on-fold for operate/read), plus headline-in-scene for scene only) must be PASS before shipping; the time budget never excuses them.
+
+Loop: the lead applies the 5 fixes (plates go back to their illustrator), rebuilds, re-shoots, and spawns a NEW critic. Stop when the mean is 7.5 or more, or after 2 critic rounds. Open items go into NOTES.md as `critic: open — `; the page ships. If no subagent tool exists, the lead scores itself against the same rubric, caps the outcome at FIX, and says the independent critic did not run.
diff --git a/plugins/design/skills/vary/references/build-craft.md b/plugins/design/skills/vary/references/build-craft.md
index 3e2866e..825ab62 100644
--- a/plugins/design/skills/vary/references/build-craft.md
+++ b/plugins/design/skills/vary/references/build-craft.md
@@ -5,6 +5,8 @@ description: Loaded AFTER the contract is written and BEFORE any UI code. How to
# Build craft
+When a user directive collides with any rule here, the directive wins except on accessibility.
+
The contract decided *what*. This file is *how*, at the level a design director checks. Commit to the world first; every rule below is a floor, not a brake. When a rule and the world's grammar collide, the grammar wins on aesthetics and the floor wins on accessibility, states and keyboard.
## 1. Palette from the seed
@@ -30,10 +32,10 @@ The seed is one OKLCH anchor with a role hint. Compose five roles around it: **g
Rules that hold under every strategy:
-- **Tint the neutrals** toward the seed hue (C 0.005-0.02). Pure grey reads as un-designed. Over ~C 0.03 it stops being neutral.
+- **Tint the neutrals** toward the seed hue (C 0.005-0.02). Pure grey reads as un-designed (unless a directive or the brand specifies pure black/white). Over ~C 0.03 it stops being neutral.
- **Text on colour is never grey.** Derive it from the field's hue at the far end of L. On saturated mid-luminance fills (L 0.42-0.78, C ≥0.08) use white, even where the maths permits dark: saturated colours look brighter than they measure (Helmholtz-Kohlrausch).
- **Gamut is a default engine.** Blue/purple tolerate the widest chroma across L; yellow cannot be dark and saturated; cyan caps near C 0.145. Check every hue's ceiling at its L before committing a number, or the palette drifts toward purple on its own.
-- **Dark mode is its own system.** Base L 0.08-0.12 with a faint tint, never `#000`. Elevation by +3-6% L per tier (5 tiers to about L 0.28), not shadows. Desaturate accents by hue: warm −10-15%, cool −20-30%; yellow shifts toward amber instead of desaturating.
+- **Dark mode is its own system.** Base L 0.08-0.12 with a faint tint, never `#000` (unless a directive or the brand specifies pure black/white). Elevation by +3-6% L per tier (5 tiers to about L 0.28), not shadows. Desaturate accents by hue: warm −10-15%, cool −20-30%; yellow shifts toward amber instead of desaturating.
- **Contrast**: WCAG 2 as the legal floor (4.5:1 body, 3:1 large and UI); on coloured fields and dark mode aim for APCA Lc ≥75 body, ≥60 UI, ≥45 large headlines. `check.mjs` computes the literal pairs; variable cascades need a screenshot.
- Every colour is a token; no raw hex in components.
@@ -75,12 +77,12 @@ Load exactly what the contract names.
## 5. States, copy, and the parts nobody draws
-- Nine states for every interactive element and every view: default, hover, focus-visible, active, disabled, loading, error, success, empty. A state you cannot describe does not exist. Empty and error states are designed screens, not a sentence in grey.
+- Nine states for every interactive element and every view (hover is N/A on touch-only platforms): default, hover, focus-visible, active, disabled, loading, error, success, empty. A state you cannot describe does not exist. Empty and error states are designed screens, not a sentence in grey.
- `:focus-visible` ring at ≥3:1 against its surroundings, distinct from hover; tab order equals reading order; focus trapped in modals and returned on close.
- Touch targets ≥44px; colour is never the only signifier.
-- **Browser surfaces**: `::selection`, `caret-color`, scrollbar colours, underline offset/thickness, form control accent, the focus ring. These ship with browser defaults that belong to no design; theming them is the cheapest signal that the page was built rather than assembled.
+- **Browser surfaces (web only)**: `::selection`, `caret-color`, scrollbar colours, underline offset/thickness, form control accent, the focus ring. These ship with browser defaults that belong to no design; theming them is the cheapest signal that the page was built rather than assembled.
- Copy: buttons name their outcome ("Send invoice", not "Submit"); errors say what happened and what to do. Run the competitor-swap test on the headline: if it still reads true with a rival's name, it made no claim. No "seamless", "unlock", "revolutionise", "the future of", "trusted by 10,000+". Em dashes: fewer than 7 per 600 words.
-- Every `` has `width` and `height` (or `aspect-ratio`); `loading="lazy"` below the fold; real product imagery over stock; no emoji as icons; one icon system, one stroke weight.
+- Every `` has `width` and `height` (or `aspect-ratio`); `loading="lazy"` below the fold; photos in a scene or pattern treatment transformed into the world's material (multiplied onto paper, greyscaled, edge-traced, one-ink halftone); under photography or product-ui, and for identity assets (headshots, partner logos, product screens), the image ships faithfully with art direction by crop, sequence, size and grade only (`graphics.md` §2o); drawings from `graphics.md` where no photo exists; no emoji as icons; one icon system, one stroke weight.
## 6. Craft floor — verify on the built result
@@ -95,15 +97,30 @@ Run these together in one inspection round on the real render (desktop and mobil
7. Browser surfaces themed.
8. Copy: outcome-named controls, product-specific claims, zero AI vocabulary.
9. Every brief requirement present and findable within seconds.
+10. (scene) The signature device is visible at hero, divider and micro scale; the art gallery passed two critique rounds.
+11. (scene) Art down the page: every section below the fold (contact and footer excepted) has its own drawn plate at 50% of the section's width or more and 280px tall; every catalogue or menu item has its own drawing. A section of only cards, text or a form is a defect.
+12. (scene) Type in the art: no frosted, translucent or blurred card, chip row or SaaS button pair over the hero art; the headline is a real `