@ryuxdsgn/design-intelligence 2.13.6 → 2.13.7

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.
@@ -884,6 +884,58 @@ export const RULES = [
884
884
  tradeoff: "the reflective layer needs knowledge of what users value, which may need research",
885
885
  check: "review; Critique Design Read",
886
886
  },
887
+ {
888
+ num: 17,
889
+ title: "Illustration follows a written style",
890
+ level: "contextual",
891
+ when: "the design adds or makes illustration (spot, empty state, onboarding, hero) and the brand has no illustration system",
892
+ do: "Before the first drawing, write the style in five lines (six with characters) in DESIGN.md or the Assumptions:\n - line: stroke weight and cap, or no stroke\n - shape: geometric or hand-drawn, and the corner radius\n - colour: 2 to 4 tokens from the palette, one accent\n - depth and detail: flat, one shadow tone, or 3D; how much detail\n - subject: objects from the product, people, or abstract\n - characters, when the style has people or a mascot: proportions, face detail, the range of people shown, and a short set of poses and expressions; one character system across the product\n - Derive each line from the visual language (RX-UI-10): the stroke from the icon set, the radius from the components, the colour from the tokens. Functional icons stay in the icon set (RX-UI-13), not in the illustration style.\n - Record the style as a Decision Receipt: evidence from a brand guide, references, or the brief; Evidence None when it is derived from the visual language alone.",
893
+ dont: "Draw in the generator's default style (flat people with oversized limbs, gradient blobs, isometric 3D), or mix line and filled illustration in one product.",
894
+ why: "Without a written style, illustration drifts toward the generator's default and away from the UI around it.",
895
+ basis: "Art direction practice (a written illustration style); RX-UI-10 chosen visual language; anti-slop tell (generic illustration); owner review 2026-10-22: request for illustration guidance",
896
+ notWhen: "the brand already has an illustration system; follow it (RX-UI-13)",
897
+ tradeoff: "one more step before the first drawing, and less variety",
898
+ check: "review",
899
+ },
900
+ {
901
+ num: 18,
902
+ title: "A set reads as one family",
903
+ level: "contextual",
904
+ when: "the product uses more than one illustration (empty states, onboarding steps, errors)",
905
+ do: "Make the set together: same canvas and framing, same stroke and palette, same subject scale, viewpoint, and level of detail.\n - Tie each subject to the screen's job: an empty state shows what will appear there, not a mascot shrugging.\n - Put the set side by side before handoff and fix the one that stands out.",
906
+ dont: "Make each illustration in a separate prompt and hand them off without comparing them, or give one more detail or colour than the rest.",
907
+ why: "Users read a mismatched set as a mistake or a different product, and a generator drifts in style from prompt to prompt.",
908
+ basis: "Design-system practice (one illustration family); RX-DS-02 consistency; owner review 2026-10-22: request for illustration guidance",
909
+ notWhen: "a single illustration",
910
+ tradeoff: "the whole set is redone when the style changes",
911
+ check: "render, side by side",
912
+ },
913
+ {
914
+ num: 19,
915
+ title: "Illustration ships as a themed, accessible asset",
916
+ level: "contextual",
917
+ when: "illustration goes into a build, or into a design file that will be built",
918
+ do: "Flat and line art as SVG: colours from tokens (currentColor or CSS variables) so dark mode follows (RX-DS-05), a viewBox with no fixed size, no embedded raster, no text inside the art; text stays in the HTML so it can be translated and scaled.\n - Raster art (generated or 3D) at 2x the displayed size, compressed, with width and height set so the layout does not jump.\n - Decorative art gets aria-hidden or an empty alt; art that carries meaning gets alt text that says the meaning, not the drawing (RX-A11Y-04).",
919
+ dont: "Hard-code colours that vanish on dark, bake words into the image, ship an export with editor metadata, or write alt text that describes the picture (\"a woman holding a box\") instead of what it means.",
920
+ why: "Art that ignores tokens breaks in other themes, text inside an image cannot be read, translated, or zoomed, and alt text that only describes the drawing says nothing.",
921
+ basis: "WCAG 2.2 SC 1.1.1 (non-text content); RX-DS-03; RX-DS-05; RX-A11Y-04; owner review 2026-10-22: request for illustration guidance",
922
+ notWhen: "a concept frame that will not be built",
923
+ tradeoff: "SVG built from tokens takes longer than one export",
924
+ check: "render in every theme; read the SVG source",
925
+ },
926
+ {
927
+ num: 20,
928
+ title: "An icon means one thing, and says it",
929
+ level: "preferred",
930
+ when: "the design uses icons for actions, navigation, or status",
931
+ do: "Pick each icon for the action or concept it stands for, not for its look.\n - One icon, one meaning across the product: no icon for two actions, no two icons for one action.\n - Pair the icon with a text label unless it is one of the few users know without one in this context (search, close, back, menu, home). Keep the label in a tab bar, on uncommon actions, and on destructive ones.\n - Tell look-alikes apart by what they do: back leaves the screen, close dismisses a sheet or modal; delete removes, cancel stops.\n - Use the platform's icon for platform actions (share differs on iOS and Android).",
932
+ dont: "Choose an icon because it looks good, reuse one icon for two meanings, or ship an icon-only control whose meaning users have to guess.",
933
+ why: "Few icons are recognised without a label; an ambiguous icon costs more than a word, and an icon whose meaning changes breaks what users learned.",
934
+ basis: "NNGroup icon usability; Nielsen heuristic 4 (consistency and standards); Apple HIG and Material iconography",
935
+ notWhen: "a dense expert tool whose users learn the set; then a tooltip plus an accessible name",
936
+ tradeoff: "labels take space, especially in toolbars and tab bars",
937
+ check: "review: list each icon with its meaning and flag duplicates; heuristic_eval H-04",
938
+ },
887
939
  ]),
888
940
  ...skill("design-system", [
889
941
  {
@@ -963,7 +1015,7 @@ export const RULES = [
963
1015
  title: "Readable text, reachable targets",
964
1016
  level: "required",
965
1017
  gate: "hard",
966
- do: "Keep body text around 14 to 16px on mobile, and touch targets at least 24×24px, preferably 44×44px.",
1018
+ do: "Keep body text around 14 to 16px on mobile, and touch targets at least 24×24px, preferably 44×44px. The target is the hit area, not the glyph: a 20 to 24px icon sits inside a 44×44 button.",
967
1019
  dont: "Shrink body text or crowd small targets together.",
968
1020
  why: "Small text and targets cause misreads and mis-taps.",
969
1021
  basis: "WCAG 2.2 SC 2.5.8 (24px minimum); Apple HIG 44pt; Material 48dp; Fitts's law (Fitts 1954): bigger and nearer targets are faster to hit",
@@ -987,7 +1039,7 @@ export const RULES = [
987
1039
  title: "Semantic structure, native controls, and names",
988
1040
  level: "required",
989
1041
  gate: "hard",
990
- do: "Use real headings, landmarks, lists, buttons, links, and the right input types before custom elements, and give icon-only buttons and meaningful images an accessible name or alt text.",
1042
+ do: "Use real headings, landmarks, lists, buttons, links, and the right input types before custom elements, and give icon-only buttons and meaningful images an accessible name or alt text. Hide decorative icons and images from assistive technology (aria-hidden, or an empty alt).",
991
1043
  dont: "Build structure or controls from styled divs, or ship unlabeled icon buttons.",
992
1044
  why: "Assistive technology navigates by semantics and announces unlabeled buttons as just \"button\"; native controls bring keyboard and platform behavior for free.",
993
1045
  basis: "WCAG 2.2 SC 1.1.1, 1.3.1, and 4.1.2",
@@ -85,7 +85,8 @@ The six stages of the core workflow (SKILL.md), as Design runs them.
85
85
  **What exists.** When there is a screen, product, or design system already, read its
86
86
  analysis or run Analyze first (capabilities/analyze.md). Existing screens, components, and any
87
87
  screenshot or reference provided are your examples: read them before choosing patterns, take
88
- their principles, and never copy their facts. Understand before you design. When the task
88
+ their principles, and never copy their facts. A request to copy a screenshot as it is goes to
89
+ Build as a recreate (capabilities/build.md, step 2). Understand before you design. When the task
89
90
  redesigns or improves what exists, list what works and keep it; change only what has a named
90
91
  problem (RX-UX-10).
91
92
  **Modules.** Read the modules the task needs from the task table before deciding anything, for example ux,
@@ -130,7 +131,8 @@ The six stages of the core workflow (SKILL.md), as Design runs them.
130
131
  roles, spacing, radius, and type sizes and families before the first frame, and components for
131
132
  repeated elements (RX-DS-03). Building the system does not replace the states: design every
132
133
  state that matters (empty, loading, error, including content that fails to load) and every width
133
- you claim, and source assets on purpose (RX-UI-13).
134
+ you claim, and source assets on purpose (RX-UI-13); illustration follows a written style and is
135
+ made as one set (RX-UI-17, RX-UI-18).
134
136
  **Render and inspect.** Screenshot what you made, check it against the direction and the rules,
135
137
  fix, and render again (capabilities/qa.md). Then, on the render:
136
138
  - Literal values: turn each into a variable or name the exception (RX-DS-03).
@@ -244,7 +246,7 @@ Dissent evidence only one source holds, or the case for an option not chose
244
246
  Evidence names its count and never generalizes past it. "Evidence None, Confidence Low, Why:
245
247
  business priority was not provided" is a valid receipt; keep it visible instead of upgrading it.
246
248
 
247
- Visual, motion, and asset rules and tables live in knowledge/ui.md (RX-UI-07 to RX-UI-13); this
249
+ Visual, motion, and asset rules and tables live in knowledge/ui.md (RX-UI-07 to RX-UI-19); this
248
250
  direction only records the choices made with them.`;
249
251
  export const BUILD_BODY = `# RYUX Build
250
252
 
@@ -259,10 +261,15 @@ workflow (SKILL.md); Frame, Explore, and Evaluate happen in Design.
259
261
  2. **Find the design source**: the Design Direction, a Figma or pen.dev design, a DESIGN.md, or an
260
262
  approved mockup; it is the spec. If there is none, run Design's Frame, Explore, and Evaluate
261
263
  first (capabilities/design.md, stages 2-4) instead of inventing one in code.
264
+ A screenshot or another product's page is a reference, not the spec, unless the user asks to
265
+ recreate it ("recreate", "match this", "samakan"). Then match it, let QA compare at the same
266
+ viewport, and still leave out another product's brand, logo, and content (RX-AS-11). With no word
267
+ either way, design from its principles and write "reference, not recreate" in Assumptions.
262
268
  3. **Read the modules the task needs** from the task table: for example accessibility, responsive,
263
269
  and edge-cases for any UI, and forms and content for a form. When the build adds motion or
264
270
  transitions, read knowledge/ui.md (RX-UI-11) before writing any: how often the surface is seen
265
- decides how much it moves.
271
+ decides how much it moves. When it adds illustration, read RX-UI-19: SVG coloured from tokens,
272
+ no text inside, alt text that says the meaning.
266
273
  4. **Implement faithfully.** Use semantic elements, existing components, and real data paths.
267
274
  Build must not invent business rules, prices, or limits; API behavior or response shapes; or
268
275
  data presented as real (RX-FE-02, RX-PR-02). It must not silently change a design decision: a
@@ -493,7 +500,7 @@ gates in ryux-anti-slop). It works in four layers.
493
500
  4. **Density**: compact for repeat work, roomier for first-time or high-stakes decisions.
494
501
  5. **Color**: roles first (surface, text, accent for the primary action, status); contrast checked.
495
502
  6. **Containers**: use a container only when it groups or separates something.
496
- 7. **Icons**: next to labels, from one set, at consistent sizes.
503
+ 7. **Icons**: next to labels, from one set, at consistent sizes, one meaning each (RX-UI-20).
497
504
 
498
505
  **Justify values.** Every value comes from the scale and has a reason you can say in one line:
499
506
  "12px between these two fields because they belong together; 24px before the next group because it
@@ -617,6 +624,11 @@ Sources: reference screen_ids or the analysis it came from
617
624
  A generated image is illustrative art; never present it as a real customer or a real product
618
625
  screen (RX-UI-07).
619
626
 
627
+ **Illustration.** With no brand system to follow, write the style in five lines before the first
628
+ drawing, plus a character system when it has people or a mascot, and record it as a Decision
629
+ Receipt (RX-UI-17); make a set together and compare it side by side (RX-UI-18), and ship it as SVG
630
+ coloured from tokens, with no text inside and alt text that says the meaning (RX-UI-19).
631
+
620
632
  Does not cover: component reuse and tokens (see ryux-design-system).`,
621
633
  "design-system": `Prioritize the existing system. Before creating anything:
622
634
 
@@ -708,6 +720,11 @@ Card radius | 16px | 8px | half the radius | minor
708
720
 
709
721
  **Without a reference**, check the build against its own intent and the rules below.
710
722
 
723
+ **Illustration** (when the build has any): it matches the written style (RX-UI-17), a set reads as one
724
+ family side by side (RX-UI-18), it reads at its real displayed size including the smallest width, it
725
+ works in every theme, and nothing the user needs exists only in the image (RX-UI-19). Without a
726
+ render, report these as NOT VERIFIED.
727
+
711
728
  **Loop**: implement → render → compare → fix → render again.
712
729
 
713
730
  **Render with what is available**, in this order: the project's own preview or test setup;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ryuxdsgn/design-intelligence",
3
- "version": "2.13.6",
3
+ "version": "2.13.7",
4
4
  "description": "RYUX: design intelligence for AI agents and designers. One skill, five entry points: Analyze, Design, Build, Critique, and QA, for Claude Code, Codex, Cursor, Gemini CLI, OpenCode, Cline, Copilot, and more.",
5
5
  "type": "module",
6
6
  "bin": {