dreative 0.5.1 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +49 -27
  2. package/dist/cli/audit.js +206 -0
  3. package/dist/cli/audit.test.js +79 -0
  4. package/dist/cli/docsCheck.js +163 -0
  5. package/dist/cli/docsCheck.test.js +8 -0
  6. package/dist/cli/index.js +45 -9
  7. package/dist/server/preview.js +73 -73
  8. package/dist/server/store.js +11 -0
  9. package/dist/shared/artifacts.js +162 -0
  10. package/dist/shared/design.js +42 -22
  11. package/dist/shared/ruleSystem.js +130 -0
  12. package/dist/shared/ruleSystem.test.js +187 -0
  13. package/dist/shared/skillSystem.js +173 -0
  14. package/dist/shared/skillSystem.test.js +110 -0
  15. package/dist/ui/assets/{index--vztc_MR.js → index-CKwmbx2j.js} +13 -13
  16. package/dist/ui/index.html +12 -12
  17. package/package.json +5 -3
  18. package/skill/dreative/DESIGN.md +121 -93
  19. package/skill/dreative/PLAN.md +229 -92
  20. package/skill/dreative/SKILL.md +218 -137
  21. package/skill/dreative/frameworks/nextjs.md +13 -0
  22. package/skill/dreative/frameworks/react-vite.md +12 -0
  23. package/skill/dreative/frameworks/styling.md +14 -0
  24. package/skill/dreative/frameworks/sveltekit.md +10 -0
  25. package/skill/dreative/frameworks/vue-nuxt.md +12 -0
  26. package/skill/dreative/recipes/3d-recipes.md +44 -0
  27. package/skill/dreative/recipes/cinematic-recipes.md +19 -0
  28. package/skill/dreative/recipes/immersive-recipes.md +18 -0
  29. package/skill/dreative/recipes/media-recipes.md +60 -0
  30. package/skill/dreative/recipes/motion-recipes.md +44 -0
  31. package/skill/dreative/references/ARTIFACTS.md +180 -0
  32. package/skill/dreative/references/REFLEX_FONTS.json +44 -0
  33. package/skill/dreative/references/RULES.json +186 -0
  34. package/skill/dreative/references/SKILL_CONTRACT.md +30 -0
  35. package/skill/dreative/references/TIERS.md +42 -0
  36. package/skill/dreative/schemas/plan.schema.json +241 -0
  37. package/skill/dreative/schemas/verify.schema.json +61 -0
  38. package/skill/dreative/skills/3d.md +94 -267
  39. package/skill/dreative/skills/cinematic.md +56 -232
  40. package/skill/dreative/skills/experimental.md +108 -95
  41. package/skill/dreative/skills/immersive.md +61 -223
  42. package/skill/dreative/skills/interaction.md +9 -1
  43. package/skill/dreative/skills/media.md +135 -564
  44. package/skill/dreative/skills/mobile.md +128 -117
  45. package/skill/dreative/skills/motion.md +89 -256
  46. package/skill/dreative/skills/refined.md +116 -102
  47. package/skill/dreative/skills/ux.md +155 -144
  48. package/dist/server/ai.js +0 -177
@@ -0,0 +1,44 @@
1
+ # Motion implementation recipes
2
+
3
+ Load only after three original choreography concepts are recorded. Record access
4
+ in `recipeAccess`.
5
+
6
+ ## Component motion
7
+
8
+ - Presence: animate enter/exit around semantic state; exits are shorter and
9
+ simpler; return focus deliberately.
10
+ - Layout: use transform-based layout animation and stable keys; avoid animating
11
+ expensive dimensions in dense UI.
12
+ - Gestures: pointer capture, velocity, bounds, and spring settle; provide
13
+ keyboard/touch equivalents.
14
+
15
+ ## Scroll choreography
16
+
17
+ - IntersectionObserver for one-shot reveals; visible content is the default.
18
+ - Motion `useScroll`/transforms for bounded component-linked progress.
19
+ - GSAP context + ScrollTrigger for multi-element chapters; one Lenis instance
20
+ and one ticker when smooth scrolling is justified.
21
+ - Sticky CSS for simple pinning; cap pin length and remove/shorten on mobile.
22
+ - Velocity treatments use damped/clamped derivatives, never raw scroll deltas.
23
+
24
+ ## Type
25
+
26
+ - Split lines/words/characters only for selected display moments; keep accessible
27
+ source text and restore wrappers on cleanup.
28
+ - Variable-font axes can become a coherent development mechanism when states
29
+ change meaningfully rather than merely pulsing.
30
+
31
+ ## Setup and cleanup
32
+
33
+ - Scope GSAP with context and call `revert()`.
34
+ - Cancel rAF, observers, media queries, and event listeners on unmount.
35
+ - Pause continuous work on `document.hidden` and outside the viewport.
36
+ - Test SSR/hydration so content never flashes then hides.
37
+
38
+ ## Performance/fallback
39
+
40
+ - Animate transform/opacity or shader state; avoid layout reads after writes.
41
+ - Precompute measurements on resize, reuse objects, and cap continuous work.
42
+ - Reduced motion uses final readable states and retains necessary feedback.
43
+ - Fallback preserves timing hierarchy: setup, peak, rest, and resolution remain
44
+ legible even when the mechanism becomes static.
@@ -0,0 +1,180 @@
1
+ # Direct Design artifacts
2
+
3
+ Use JSON as the machine source of truth and Markdown only as its readable view.
4
+ All paths are relative to the target project.
5
+
6
+ ## `.dreative/plan.json`
7
+
8
+ Required top-level fields:
9
+
10
+ - `version: 2`
11
+ - `doctrineVersion: 2` for the bounded-creative-controls format. Legacy v2
12
+ plans without this field remain readable and receive a migration warning.
13
+ - `request`, `createdAt`
14
+ - `tier`: `solid | premium | expressive | award`
15
+ - `depth`: `restyle | relayout | restructure | reimagine`
16
+ - `skills`: user-approved, dependency-resolved pool including `ux` and `mobile`
17
+ - `skillPolicy`: hybrid routing policy, global foundations, explicit user page
18
+ assignments, and `routingApproved: true`
19
+ - `designRead`: `{ register, concept, signature }`
20
+ - `preservationManifest`: normally `.dreative/preservation.json`
21
+ - `decisionLedger`: normally `.dreative/ledger.json`
22
+ - `pages`: ordered pages, each with its assigned skills and delivery sections
23
+ - `implementationStartedAt`: timestamp used to prove rule substitutions were
24
+ declared during planning
25
+ - `ruleExceptions`: bounded substitutions of evidence-backed defaults
26
+ - `creativeStrategy`: `diversity` or `development` at expressive/award tiers
27
+ - `fontDecision`: candidates, reflex markers, ledger history, and justification
28
+ - `experimentalPlan`: per-section candidates and the selected two or three peaks
29
+ - `conceptExploration` and `recipeAccess`: proof recipes were loaded only after
30
+ original concepts were recorded
31
+
32
+ Every selected skill must appear on at least one page. Every page includes `ux`
33
+ and `mobile`, but optional treatments are assigned only where they serve that
34
+ page. A section may use only skills assigned to its parent page.
35
+
36
+ Each section requires `id`, `name`, `layoutFamily`, `skills`, `interactions`,
37
+ `mobile`, `fallback`, `verification`, `assets`, and `status`. Status is
38
+ `planned | shipped | fallback | cut`; fallback/cut requires `reason`.
39
+
40
+ Each asset requires `id`, `path`, `purpose`, and `status`. A shipped asset must
41
+ exist when `dreative audit` runs.
42
+
43
+ ### Routing authority
44
+
45
+ The user's selection is authoritative. Routing may place selected-but-unassigned
46
+ skills and suggest additional treatments, but it never activates an unselected
47
+ optional skill. Explicit page assignments always win. If the user selects all,
48
+ all ten skills appear in the overall plan; this does not mean all ten belong on
49
+ every page. Show the proposed page matrix and obtain approval before setting
50
+ `routingApproved: true`.
51
+
52
+ ## Rule substitutions
53
+
54
+ Rules live in `references/RULES.json`. Hard gates cannot appear in
55
+ `ruleExceptions`. A valid substitution includes the registered `ruleId`,
56
+ `decision: "substituted"`, planning timestamp, specific reason, concrete
57
+ alternative, at least two observable success criteria, and passing verification
58
+ evidence IDs. The exception must predate `implementationStartedAt`.
59
+
60
+ ```json
61
+ {
62
+ "ruleId": "award.spatialSignature",
63
+ "decision": "substituted",
64
+ "declaredAt": "2026-01-01T00:30:00.000Z",
65
+ "reason": "The archival concept has no physical subject, so a product prop would misrepresent the material.",
66
+ "alternative": "A persistent variable-type specimen becomes index, spatial architecture, and interactive control.",
67
+ "successCriteria": [
68
+ "The specimen appears in at least three materially different roles",
69
+ "Pointer and scroll input visibly reshape its depth"
70
+ ],
71
+ "evidenceIds": ["spatial-type-desktop", "spatial-type-mobile"]
72
+ }
73
+ ```
74
+
75
+ ## Creative strategy and experimental hierarchy
76
+
77
+ At `expressive` and `award`, `creativeStrategy.path` is either:
78
+
79
+ - `diversity`: at least four distinct mechanisms and three drivers; or
80
+ - `development`: one named mechanism with three materially different states,
81
+ two quieter secondary mechanisms, and two drivers.
82
+
83
+ When `experimental` is selected, `experimentalPlan` records one candidate for
84
+ every major section and marks only two or three as selected. Other sections
85
+ support, rest, contrast, prepare, or transform those peaks.
86
+
87
+ ## Font decision
88
+
89
+ `fontDecision` records at least three candidates, identifies reflex fonts using
90
+ `references/REFLEX_FONTS.json`, and includes the last three display fonts from
91
+ the ledger. A reflex winner needs a specific brand/metrics/product/reference/
92
+ language/variable-font/performance reason, recorded in `reasonKinds` using a
93
+ category from the registry. Repeating a recent display font needs an additional
94
+ `repeatJustification`.
95
+
96
+ ## `.dreative/preservation.json`
97
+
98
+ ```json
99
+ {
100
+ "version": 1,
101
+ "createdAt": "2026-01-01T00:00:00.000Z",
102
+ "items": [
103
+ {
104
+ "id": "nav-pricing",
105
+ "kind": "link",
106
+ "file": "src/components/Nav.tsx",
107
+ "needle": "href=\"/pricing\"",
108
+ "purpose": "Primary pricing navigation"
109
+ }
110
+ ]
111
+ }
112
+ ```
113
+
114
+ Allowed kinds: `link`, `handler`, `form-field`, `visible-copy`, `state`,
115
+ `analytics-hook`, `accessibility`, `route`. Intentional changes add
116
+ `intentionallyChanged: true` and a non-empty `changeReason`.
117
+
118
+ ## `.dreative/verify.json`
119
+
120
+ Schema: `schemas/verify.schema.json`.
121
+
122
+ ```json
123
+ {
124
+ "version": 1,
125
+ "generatedAt": "2026-01-01T00:00:00.000Z",
126
+ "evidence": [
127
+ {
128
+ "id": "mobile-nav",
129
+ "criterion": "Mobile navigation opens and closes",
130
+ "status": "pass",
131
+ "evidence": "Escape closes and focus returns to trigger",
132
+ "proof": {
133
+ "timestamp": "2026-01-01T00:00:00.000Z",
134
+ "artifactPath": ".dreative/screenshots/mobile-nav.png",
135
+ "viewport": { "width": 390, "height": 844, "dpr": 2 },
136
+ "testedUrl": "http://localhost:3000",
137
+ "consoleErrorCount": 0,
138
+ "playwrightTestId": "navigation closes with Escape"
139
+ }
140
+ }
141
+ ]
142
+ }
143
+ ```
144
+
145
+ Every evidence row requires a timestamp and concrete proof: an existing artifact
146
+ path, command + exit code, tested URL/console count, FPS/frame-time measurement,
147
+ or Playwright test identifier. `dreative audit` checks referenced artifact paths
148
+ and rejects passing commands with nonzero exits or passing runs with console
149
+ errors. `fail` blocks completion. Use `not-applicable` only with a concrete
150
+ explanation and proof of why the criterion does not apply.
151
+
152
+ ## `.dreative/ledger.json`
153
+
154
+ The ledger is append-only design memory:
155
+
156
+ ```json
157
+ {
158
+ "version": 1,
159
+ "entries": [
160
+ {
161
+ "at": "2026-01-01T00:00:00.000Z",
162
+ "request": "Redesign landing page",
163
+ "tier": "premium",
164
+ "chosen": ["Editorial split with product photography"],
165
+ "rejected": ["Bento dashboard", "Dark cinematic world"],
166
+ "failures": [],
167
+ "userPreferences": ["Calm motion", "No custom cursor"]
168
+ }
169
+ ]
170
+ }
171
+ ```
172
+
173
+ Record only project-relevant design preferences and technical failures. Never
174
+ store secrets, personal notes, or unrelated conversation.
175
+
176
+ ## Audit
177
+
178
+ Run `dreative audit`. It validates schemas, skill dependency closure, section
179
+ completion, shipped assets, preservation needles, verification evidence, and the
180
+ decision ledger. `--json` emits a machine-readable report.
@@ -0,0 +1,44 @@
1
+ {
2
+ "version": 1,
3
+ "purpose": "Flag frequently reflexive choices for explicit reasoning; these fonts are not inherently bad or prohibited.",
4
+ "fonts": [
5
+ "Inter",
6
+ "Arial",
7
+ "Helvetica",
8
+ "Roboto",
9
+ "Open Sans",
10
+ "DM Sans",
11
+ "DM Serif",
12
+ "Space Grotesk",
13
+ "Space Mono",
14
+ "Outfit",
15
+ "Plus Jakarta Sans",
16
+ "Instrument Sans",
17
+ "Instrument Serif",
18
+ "Fraunces",
19
+ "Playfair Display",
20
+ "Poppins",
21
+ "Montserrat",
22
+ "Lato",
23
+ "Oswald",
24
+ "Raleway",
25
+ "Merriweather"
26
+ ],
27
+ "validReasonKinds": [
28
+ "existing-brand",
29
+ "design-system-metrics",
30
+ "product-register",
31
+ "supplied-reference",
32
+ "language-coverage",
33
+ "variable-font-capability",
34
+ "performance",
35
+ "physical-editorial-historical-reference"
36
+ ],
37
+ "invalidGenericReasons": [
38
+ "looks clean and modern",
39
+ "clean and modern",
40
+ "looks professional",
41
+ "felt better",
42
+ "fits the design"
43
+ ]
44
+ }
@@ -0,0 +1,186 @@
1
+ {
2
+ "version": 1,
3
+ "wordingPrinciple": "Follow the proven default, or outperform it with a named alternative, measurable success criteria, and runtime evidence.",
4
+ "rules": [
5
+ {
6
+ "id": "preservation.noLoss",
7
+ "category": "hard-gate",
8
+ "observedFailure": "Redesigns silently removed links, handlers, copy, routes, states, or analytics hooks.",
9
+ "defaultRemedy": "Complete and pass the preservation manifest before delivery.",
10
+ "exceptionAllowed": false,
11
+ "exceptionTest": "none",
12
+ "reviewAfterRuns": 0
13
+ },
14
+ {
15
+ "id": "ux.functional",
16
+ "category": "hard-gate",
17
+ "observedFailure": "Visually ambitious pages shipped broken navigation, forms, states, focus, or pointer behavior.",
18
+ "defaultRemedy": "Pass the functional UX audit with keyboard and pointer evidence.",
19
+ "exceptionAllowed": false,
20
+ "exceptionTest": "none",
21
+ "reviewAfterRuns": 0
22
+ },
23
+ {
24
+ "id": "mobile.required",
25
+ "category": "hard-gate",
26
+ "observedFailure": "Desktop effects were cropped, unusable, or absent on touch devices.",
27
+ "defaultRemedy": "Ship a deliberate mobile treatment for every page and effect.",
28
+ "exceptionAllowed": false,
29
+ "exceptionTest": "none",
30
+ "reviewAfterRuns": 0
31
+ },
32
+ {
33
+ "id": "motion.reducedMotion",
34
+ "category": "hard-gate",
35
+ "observedFailure": "Motion-heavy pages ignored user preferences or hid content when animation failed.",
36
+ "defaultRemedy": "Ship visible defaults and a tested reduced-motion path.",
37
+ "exceptionAllowed": false,
38
+ "exceptionTest": "none",
39
+ "reviewAfterRuns": 0
40
+ },
41
+ {
42
+ "id": "spatial.noOcclusion",
43
+ "category": "hard-gate",
44
+ "observedFailure": "Traveling decoration and canvases covered text, controls, or pointer targets.",
45
+ "defaultRemedy": "Pass the occlusion and pointer-events sweep at desktop and mobile sizes.",
46
+ "exceptionAllowed": false,
47
+ "exceptionTest": "none",
48
+ "reviewAfterRuns": 0
49
+ },
50
+ {
51
+ "id": "3d.noCodedOrganic",
52
+ "category": "hard-gate",
53
+ "observedFailure": "Organic real-world subjects built from primitives looked like crude blobs and damaged credibility.",
54
+ "defaultRemedy": "Use a real GLB, a photoreal cutout, sourced photography, or remove the claimed object.",
55
+ "exceptionAllowed": false,
56
+ "exceptionTest": "none",
57
+ "reviewAfterRuns": 0
58
+ },
59
+ {
60
+ "id": "effects.runtimeFallback",
61
+ "category": "hard-gate",
62
+ "observedFailure": "WebGL, video, and scroll effects left blank or broken content when runtime assumptions failed.",
63
+ "defaultRemedy": "Ship and exercise loading, context-loss, low-power, and static fallbacks.",
64
+ "exceptionAllowed": false,
65
+ "exceptionTest": "none",
66
+ "reviewAfterRuns": 0
67
+ },
68
+ {
69
+ "id": "verification.realEvidence",
70
+ "category": "hard-gate",
71
+ "observedFailure": "Agents claimed checks passed without commands, screenshots, traces, or measurements.",
72
+ "defaultRemedy": "Attach structured, auditable proof to every passing verification claim.",
73
+ "exceptionAllowed": false,
74
+ "exceptionTest": "none",
75
+ "reviewAfterRuns": 0
76
+ },
77
+ {
78
+ "id": "assets.plannedExist",
79
+ "category": "hard-gate",
80
+ "observedFailure": "Plans promised distinct assets that were missing, duplicated, or never rendered.",
81
+ "defaultRemedy": "Reconcile every shipped asset path against the plan and rendered page.",
82
+ "exceptionAllowed": false,
83
+ "exceptionTest": "none",
84
+ "reviewAfterRuns": 0
85
+ },
86
+ {
87
+ "id": "content.visible",
88
+ "category": "hard-gate",
89
+ "observedFailure": "JS animation and effect layers made content invisible or inaccessible.",
90
+ "defaultRemedy": "Content remains visible and usable before enhancement and when effects fail.",
91
+ "exceptionAllowed": false,
92
+ "exceptionTest": "none",
93
+ "reviewAfterRuns": 0
94
+ },
95
+ {
96
+ "id": "typography.reflexChoice",
97
+ "category": "evidence-backed-default",
98
+ "observedFailure": "Agents repeatedly chose the same training-data fonts using generic clean-and-modern reasoning.",
99
+ "defaultRemedy": "Explore at least three candidates, mark reflex fonts, read the recent ledger, and choose a brand-specific voice.",
100
+ "exceptionAllowed": true,
101
+ "exceptionTest": "A reflex font has a specific brand, metric, product, language, variable-font, performance, or supplied-reference reason.",
102
+ "reviewAfterRuns": 5
103
+ },
104
+ {
105
+ "id": "award.spatialSignature",
106
+ "category": "evidence-backed-default",
107
+ "observedFailure": "Award builds used a generic orb or had no recurring dimensional system beyond the hero.",
108
+ "defaultRemedy": "Use a recognizable real GLB or photoreal cutout prop staged in a designed berth.",
109
+ "exceptionAllowed": true,
110
+ "exceptionTest": "A named alternative creates equivalent depth, recurrence, interaction, and visual dominance on desktop and mobile.",
111
+ "reviewAfterRuns": 5
112
+ },
113
+ {
114
+ "id": "3d.signatureRecognizable",
115
+ "category": "evidence-backed-default",
116
+ "observedFailure": "Abstract coded spheres, blobs, and toruses were promoted as signature objects and read as generic demos.",
117
+ "defaultRemedy": "Promote a recognizable subject; keep abstract geometry supporting-only.",
118
+ "exceptionAllowed": true,
119
+ "exceptionTest": "A brand-native abstract instrument has a nameable function, material identity, recurrence, and input response rather than being ambient decoration.",
120
+ "reviewAfterRuns": 5
121
+ },
122
+ {
123
+ "id": "media.award.participatoryMoment",
124
+ "category": "evidence-backed-default",
125
+ "observedFailure": "Award media remained something visitors only watched while the page claimed immersion.",
126
+ "defaultRemedy": "Use an image or video depth dive when the concept and assets support depth.",
127
+ "exceptionAllowed": true,
128
+ "exceptionTest": "The visitor affects, enters, transforms, scrubs, drags, refracts, or controls the media's visual logic with equal perceptual impact.",
129
+ "reviewAfterRuns": 5
130
+ },
131
+ {
132
+ "id": "media.award.pixelCoverage",
133
+ "category": "evidence-backed-default",
134
+ "observedFailure": "Award builds shipped one set-piece while all other key images remained static or used basic fade-and-zoom.",
135
+ "defaultRemedy": "At least half of key images, minimum three, use distinct pixel-class treatments.",
136
+ "exceptionAllowed": true,
137
+ "exceptionTest": "One coherent alternative media system visibly develops through at least three materially different roles or states.",
138
+ "reviewAfterRuns": 5
139
+ },
140
+ {
141
+ "id": "motion.expressive.diversityOrDevelopment",
142
+ "category": "evidence-backed-default",
143
+ "observedFailure": "Multiple sections repeated the same simple reveal or used unrelated effects only to satisfy a catalog.",
144
+ "defaultRemedy": "Use four distinct mechanisms across three input drivers.",
145
+ "exceptionAllowed": true,
146
+ "exceptionTest": "One coherent signature mechanism develops through at least three materially different states with two quieter secondary mechanisms and two drivers.",
147
+ "reviewAfterRuns": 5
148
+ },
149
+ {
150
+ "id": "exploration.provocationRoll",
151
+ "category": "creative-provocation",
152
+ "observedFailure": "Agents converged on the first familiar concept and repeated prior signatures.",
153
+ "defaultRemedy": "Use a random provocation to force at least one divergent exploration concept.",
154
+ "exceptionAllowed": true,
155
+ "exceptionTest": "The exploration still records three genuinely divergent, brand-native concepts.",
156
+ "reviewAfterRuns": 5
157
+ },
158
+ {
159
+ "id": "experimental.sectionCandidates",
160
+ "category": "creative-provocation",
161
+ "observedFailure": "Experimental mode added effects to a conventional page or made every section compete as a technical demo.",
162
+ "defaultRemedy": "Explore one non-obvious candidate per major section, then ship only the strongest two or three.",
163
+ "exceptionAllowed": true,
164
+ "exceptionTest": "The plan records hierarchy: selected peaks plus supporting, resting, contrasting, or transforming sections.",
165
+ "reviewAfterRuns": 5
166
+ },
167
+ {
168
+ "id": "recipes.afterExploration",
169
+ "category": "creative-provocation",
170
+ "observedFailure": "Large effect catalogs anchored concepts before the agent understood the brand or assets.",
171
+ "defaultRemedy": "Record three original concepts before loading recipe references.",
172
+ "exceptionAllowed": true,
173
+ "exceptionTest": "Early recipe access is limited to feasibility for a user-mandated technique and is recorded explicitly.",
174
+ "reviewAfterRuns": 5
175
+ },
176
+ {
177
+ "id": "layout.familiesArePrompts",
178
+ "category": "creative-provocation",
179
+ "observedFailure": "Suggested layout families became repeated templates instead of content-shaped compositions.",
180
+ "defaultRemedy": "Use layout-family labels to provoke exploration, not as mandatory templates.",
181
+ "exceptionAllowed": true,
182
+ "exceptionTest": "The shipped composition is brand-native, structurally honest, and passes hierarchy and repetition checks.",
183
+ "reviewAfterRuns": 5
184
+ }
185
+ ]
186
+ }
@@ -0,0 +1,30 @@
1
+ # Specialist skill contract
2
+
3
+ Every specialist skill follows this contract, in addition to its own doctrine:
4
+
5
+ Universal foundation: ux and baseline mobile apply to every web page.
6
+
7
+ 1. **Load when:** selected in `plan.skills` or clearly triggered by the brief.
8
+ 2. **Do not load when:** the treatment adds cost without serving the request.
9
+ 3. **Dependencies:** resolve the skill graph in `SKILL.md`; `ux` and `mobile`
10
+ are universal.
11
+ 4. **Deliverables:** name concrete components, effects, assets, and states in the
12
+ plan—never select a skill as a mood label.
13
+ 5. **Budget:** define asset/runtime limits appropriate to the ambition tier.
14
+ 6. **Accessibility:** provide keyboard, reduced-motion, semantic, and readable
15
+ fallbacks for every treatment.
16
+ 7. **Fallback:** name the cheaper robust version before implementation.
17
+ 8. **Definition of done:** record observable evidence in `verify.json` and pass
18
+ `dreative audit`.
19
+
20
+ A specialist file may strengthen these floors but may not weaken them.
21
+
22
+ Rules use three categories from `RULES.json`:
23
+
24
+ - hard gates are objective delivery failures and cannot be waived;
25
+ - evidence-backed defaults are proven remedies with bounded substitutions;
26
+ - creative provocations generate exploration candidates, not mandatory clutter.
27
+
28
+ Follow the proven default, or outperform it with a named alternative,
29
+ measurable success criteria, and runtime evidence. Generate and record three
30
+ brand-native concepts before loading any `recipes/` reference.
@@ -0,0 +1,42 @@
1
+ # Ambition tiers
2
+
3
+ Choose the lowest tier that honestly satisfies the request. Higher tiers inherit
4
+ all lower-tier requirements.
5
+
6
+ ## Solid (`solid`)
7
+
8
+ - Complete, accessible, responsive interface.
9
+ - Existing behavior and preservation manifest pass.
10
+ - Clear hierarchy, coherent type/color/spacing, designed states.
11
+ - Desktop, keyboard, reduced-motion, and approximately 390px mobile verified.
12
+ - Heavy media or bespoke motion is not required.
13
+
14
+ ## Premium (`premium`)
15
+
16
+ - Everything in Solid.
17
+ - A named register, design concept, and visible signature detail.
18
+ - Intentional photography/media treatment and a dedicated craft pass.
19
+ - Layout composition varies by content; no repeated default-card solution.
20
+ - Motion is restrained and purposeful unless the brief asks for more.
21
+
22
+ ## Expressive (`expressive`)
23
+
24
+ - Everything in Premium.
25
+ - A recorded diversity-or-development path: several distinct mechanisms/drivers,
26
+ or one signature mechanism developing through three states with quiet support.
27
+ - At least one input-driven treatment; entrances alone do not satisfy the tier.
28
+ - Mobile translations and reduced-motion fallbacks are implemented, not noted.
29
+ - Frame behavior and heavy asset cost are measured.
30
+
31
+ ## Award (`award`)
32
+
33
+ - Everything in Expressive.
34
+ - A distinctive persistent spatial, media, or material system shapes the journey.
35
+ - One unmistakable dimensional or spatial signature is subject-honest, staged,
36
+ and resilient. A real GLB/cutout is the proven default, not the only medium.
37
+ - Runtime evidence covers effects, transferred weight, frame time, occlusion,
38
+ context loss/loading, and fallbacks.
39
+ - The page has three memorable moments without sacrificing function.
40
+
41
+ Do not force Award requirements on product dashboards, checkout, forms, or users
42
+ who asked for calm professional work. Ambition is a product decision, not a score.