@hegemonart/get-design-done 1.27.6 → 1.28.0

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 (71) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +6 -3
  3. package/CHANGELOG.md +113 -0
  4. package/agents/design-verifier.md +17 -0
  5. package/package.json +5 -4
  6. package/reference/accessibility.md +4 -0
  7. package/reference/audit-scoring.md +14 -0
  8. package/reference/color-theory.md +279 -0
  9. package/reference/composition.md +349 -0
  10. package/reference/contrast-advanced.md +205 -0
  11. package/reference/design-system-guidance.md +2 -0
  12. package/reference/form-patterns.md +2 -0
  13. package/reference/i18n.md +554 -0
  14. package/reference/iconography.md +2 -0
  15. package/reference/motion-interpolate.md +1 -0
  16. package/reference/palette-catalog.md +2 -0
  17. package/reference/proportion-systems.md +267 -0
  18. package/reference/registry.json +42 -0
  19. package/reference/rtl-cjk-cultural.md +2 -0
  20. package/reference/schemas/mcp-gdd-tools.schema.json +381 -0
  21. package/reference/style-vocabulary.md +2 -0
  22. package/reference/typography.md +4 -0
  23. package/reference/visual-hierarchy-layout.md +4 -0
  24. package/scripts/install.cjs +42 -0
  25. package/scripts/lib/gsd-health-mirror/index.cjs +105 -0
  26. package/scripts/lib/gsd-health-mirror/index.d.cts +14 -0
  27. package/scripts/lib/install/mcp-register.cjs +235 -0
  28. package/scripts/lib/install/mcp-register.d.cts +64 -0
  29. package/scripts/lib/intel-store/index.cjs +55 -0
  30. package/scripts/lib/intel-store/index.d.cts +11 -0
  31. package/scripts/lib/mcp-tools-lint/index.cjs +216 -0
  32. package/scripts/lib/mcp-tools-lint/index.d.cts +74 -0
  33. package/scripts/lib/reflections-reader/index.cjs +107 -0
  34. package/scripts/lib/reflections-reader/index.d.cts +18 -0
  35. package/scripts/lib/roadmap-reader/index.cjs +81 -0
  36. package/scripts/lib/roadmap-reader/index.d.cts +13 -0
  37. package/scripts/lib/snapshot-reader/index.cjs +70 -0
  38. package/scripts/lib/snapshot-reader/index.d.cts +28 -0
  39. package/scripts/mcp-servers/gdd-mcp/README.md +66 -0
  40. package/scripts/mcp-servers/gdd-mcp/schemas/gdd_cycle_recap.schema.json +30 -0
  41. package/scripts/mcp-servers/gdd-mcp/schemas/gdd_decisions_list.schema.json +32 -0
  42. package/scripts/mcp-servers/gdd-mcp/schemas/gdd_events_tail.schema.json +22 -0
  43. package/scripts/mcp-servers/gdd-mcp/schemas/gdd_health.schema.json +30 -0
  44. package/scripts/mcp-servers/gdd-mcp/schemas/gdd_intel_get.schema.json +24 -0
  45. package/scripts/mcp-servers/gdd-mcp/schemas/gdd_learnings_digest.schema.json +22 -0
  46. package/scripts/mcp-servers/gdd-mcp/schemas/gdd_phase_current.schema.json +22 -0
  47. package/scripts/mcp-servers/gdd-mcp/schemas/gdd_phases_list.schema.json +31 -0
  48. package/scripts/mcp-servers/gdd-mcp/schemas/gdd_plans_list.schema.json +33 -0
  49. package/scripts/mcp-servers/gdd-mcp/schemas/gdd_reflections_latest.schema.json +21 -0
  50. package/scripts/mcp-servers/gdd-mcp/schemas/gdd_status.schema.json +23 -0
  51. package/scripts/mcp-servers/gdd-mcp/schemas/gdd_telemetry_query.schema.json +23 -0
  52. package/scripts/mcp-servers/gdd-mcp/server.ts +317 -0
  53. package/scripts/mcp-servers/gdd-mcp/tools/gdd_cycle_recap.ts +37 -0
  54. package/scripts/mcp-servers/gdd-mcp/tools/gdd_decisions_list.ts +33 -0
  55. package/scripts/mcp-servers/gdd-mcp/tools/gdd_events_tail.ts +26 -0
  56. package/scripts/mcp-servers/gdd-mcp/tools/gdd_health.ts +19 -0
  57. package/scripts/mcp-servers/gdd-mcp/tools/gdd_intel_get.ts +32 -0
  58. package/scripts/mcp-servers/gdd-mcp/tools/gdd_learnings_digest.ts +23 -0
  59. package/scripts/mcp-servers/gdd-mcp/tools/gdd_phase_current.ts +29 -0
  60. package/scripts/mcp-servers/gdd-mcp/tools/gdd_phases_list.ts +26 -0
  61. package/scripts/mcp-servers/gdd-mcp/tools/gdd_plans_list.ts +39 -0
  62. package/scripts/mcp-servers/gdd-mcp/tools/gdd_reflections_latest.ts +25 -0
  63. package/scripts/mcp-servers/gdd-mcp/tools/gdd_status.ts +31 -0
  64. package/scripts/mcp-servers/gdd-mcp/tools/gdd_telemetry_query.ts +27 -0
  65. package/scripts/mcp-servers/gdd-mcp/tools/index.ts +75 -0
  66. package/scripts/mcp-servers/gdd-mcp/tools/shared.ts +134 -0
  67. package/skills/explore/SKILL.md +31 -0
  68. package/skills/health/SKILL.md +36 -0
  69. package/skills/next/SKILL.md +28 -3
  70. package/skills/progress/SKILL.md +21 -6
  71. package/skills/resume/SKILL.md +26 -1
@@ -0,0 +1,267 @@
1
+ ---
2
+ name: proportion-systems
3
+ type: layout
4
+ version: 1.0.0
5
+ phase: 28
6
+ tags: [proportion, spacing, baseline-grid, vertical-rhythm, modular-scale]
7
+ last_updated: 2026-05-18
8
+ ---
9
+
10
+ # Proportion Systems — Whole-UI Modular Relationships
11
+
12
+ The existing [typography reference](./typography.md) covers the modular type scale — base 16px, a ratio (1.250 Major Third, 1.333 Perfect Fourth, 1.414 √2, 1.618 φ), and the geometric ladder of font sizes that scale produces. That ladder is one slice of a larger system. A proportion system is the rule that *every* dimension in the UI — type, spacing between elements, sizing of icons and avatars, and corner radius on components — derives from a single underlying unit and a small set of multipliers, so that values across the four systems land on the same grid and visibly belong to the same composition.
13
+
14
+ This file exists because that whole-UI view is undocumented today: [design-system-guidance.md](./design-system-guidance.md) mentions 8pt spacing in passing, [style-vocabulary.md](./style-vocabulary.md) cites "8pt spacing grid" as a Flat Design 2.0 marker, and `typography.md` owns the type-scale slice — but nothing ties them together. An agent that picks `padding: 12px` next to body text at `16/24` on an 8pt grid is breaking proportion silently, because the cross-system relationship was never stated. This is the file an agent should consult any time it is *constructing* the underlying grid of a UI — choosing a baseline unit, deriving a spacing ladder, deciding whether icon-md should be 20px or 24px, or auditing why a layout "feels off" despite each token being internally consistent.
15
+
16
+ The jump this file closes is from *"we use a modular type scale"* to *"we use a coherent proportion system across type + spacing + sizing + radius — the whole UI snaps to one grid."*
17
+
18
+ ## Baseline Grid Systems
19
+
20
+ A baseline grid is the invisible underlying structure every dimension snaps to. It is one number — `4`, `8`, or `1.414` — and the rule that no value in the UI may be authored that is not a multiple of that number. The grid is not a layout grid (columns and gutters); it is the smallest atomic unit out of which both the column grid and every spacing / sizing / radius token are composed. Three baselines dominate: 4pt, 8pt, and √2. Pick one for the whole product; do not mix.
21
+
22
+ ### 4pt Grid
23
+
24
+ When it fits: dense data UIs where rows must be visually compact (trading terminals, observability dashboards, IDE-style tooling, spreadsheet-derived layouts). The 4pt unit lets you author 12px / 20px / 28px row heights that an 8pt grid forbids, which matters when 10–20 horizontal rows need to fit above the fold. The cost is that fine increments invite drift — without strict review, a team will quickly have `13px`, `15px`, and `17px` in production.
25
+
26
+ ```css
27
+ /* 4pt grid — dense data UI */
28
+ :root {
29
+ --grid-unit: 4px;
30
+
31
+ --space-1: calc(var(--grid-unit) * 1); /* 4px */
32
+ --space-2: calc(var(--grid-unit) * 2); /* 8px */
33
+ --space-3: calc(var(--grid-unit) * 3); /* 12px */
34
+ --space-4: calc(var(--grid-unit) * 4); /* 16px */
35
+ --space-5: calc(var(--grid-unit) * 5); /* 20px */
36
+ --space-6: calc(var(--grid-unit) * 6); /* 24px */
37
+ --space-7: calc(var(--grid-unit) * 7); /* 28px */
38
+ --space-8: calc(var(--grid-unit) * 8); /* 32px */
39
+ }
40
+
41
+ .data-row {
42
+ height: var(--space-7); /* 28px — on-grid */
43
+ padding-inline: var(--space-3); /* 12px — on-grid */
44
+ }
45
+ ```
46
+
47
+ ### 8pt Grid
48
+
49
+ When it fits: product UI, marketing surfaces, default for most consumer apps. Material Design, iOS Human Interface Guidelines, and the majority of modern design systems converge on 8pt because the unit is large enough to prevent drift (no one accidentally authors 9px) yet small enough to express every meaningful step. Half-units (4px) are permitted only at the smallest scale (icon padding, single-character chip insets) and are explicitly named — never freehand.
50
+
51
+ ```css
52
+ /* 8pt grid — product UI default */
53
+ :root {
54
+ --grid-unit: 8px;
55
+
56
+ --space-0\.5: 4px; /* explicit half-unit — only for chip insets */
57
+ --space-1: calc(var(--grid-unit) * 1); /* 8px */
58
+ --space-2: calc(var(--grid-unit) * 2); /* 16px */
59
+ --space-3: calc(var(--grid-unit) * 3); /* 24px */
60
+ --space-4: calc(var(--grid-unit) * 4); /* 32px */
61
+ --space-5: calc(var(--grid-unit) * 5); /* 40px */
62
+ --space-6: calc(var(--grid-unit) * 6); /* 48px */
63
+ --space-8: calc(var(--grid-unit) * 8); /* 64px */
64
+ }
65
+
66
+ .card {
67
+ padding: var(--space-3); /* 24px — on-grid */
68
+ gap: var(--space-2); /* 16px — on-grid */
69
+ }
70
+ ```
71
+
72
+ ### √2 Grid (root-2)
73
+
74
+ When it fits: editorial layouts, print-adjacent surfaces, long-form article pages, document viewers. The √2 ratio (≈1.414) is the proportion that survives bisection — fold an A4 page in half and you get an A5 page with the same proportion. UIs that mirror physical paper (PDF readers, marketing landing pages with magazine layouts, layouts that breathe like print) feel right on √2 because subdivisions cascade self-similarly. The underlying spacing unit is still an integer (typically 8px or 16px) but the column and section *ratios* are √2, and key dimensions are generated by repeated multiplication or division by 1.414. See `./composition.md` §Root Rectangles — √2, √3, √5 for the geometry behind the ratio.
75
+
76
+ ```css
77
+ /* √2 grid — editorial / print-adjacent */
78
+ :root {
79
+ --base: 16px;
80
+
81
+ --space-2: calc(var(--base) * 1); /* 16px */
82
+ --space-3: calc(var(--base) * 1.414); /* ≈22.6px → 24px on the 8pt grid */
83
+ --space-4: calc(var(--base) * 2); /* 32px */
84
+ --space-5: calc(var(--base) * 2.828); /* ≈45.2px → 48px */
85
+ --space-6: calc(var(--base) * 4); /* 64px */
86
+ }
87
+
88
+ .article-section {
89
+ aspect-ratio: 1 / 1.414; /* A-paper ratio */
90
+ padding-inline: var(--space-4);
91
+ padding-block: var(--space-5);
92
+ }
93
+ ```
94
+
95
+ **Decision rule:** if the product is a dense data UI where row density is the dominant constraint, pick 4pt. If the product is editorial or print-adjacent and pages should feel like documents, pick √2 (over an integer pixel unit). For everything else — and that is most product work — pick 8pt. Document the decision once at the design-system level; do not let individual surfaces pick their own grid.
96
+
97
+ ## Baseline-Grid Lock
98
+
99
+ Baseline-grid lock is the discipline that every text baseline in the UI lands on a grid line — typically the same 4pt or 8pt unit used for spacing. The mechanism is the `line-height` of every text style: set line-height so the resulting line box is a whole multiple of the grid unit. Body text at 16px font with line-height `24px` consumes exactly three 8pt units per line. Heading text at 32px with line-height `40px` consumes five. Caption at 14px with line-height `24px` consumes three. Every block of text — regardless of size — stacks on the same invisible horizontal rulings.
100
+
101
+ Lock matters because mixed-size text without it produces drift. A page that interleaves body, headings, and captions whose line-heights are *not* grid multiples will accumulate fractional-pixel errors block-by-block; by mid-page, the right column has slid out of alignment with the left. Visually the page looks "slightly wrong" without an obvious cause. Lock eliminates the symptom by construction.
102
+
103
+ ```css
104
+ /* Baseline-grid lock on an 8pt grid */
105
+ :root {
106
+ --grid-unit: 8px;
107
+
108
+ /* Every line-height is a multiple of --grid-unit */
109
+ --line-body: calc(var(--grid-unit) * 3); /* 24px — 3 units */
110
+ --line-heading: calc(var(--grid-unit) * 5); /* 40px — 5 units */
111
+ --line-caption: calc(var(--grid-unit) * 3); /* 24px — 3 units */
112
+ }
113
+
114
+ p { font-size: 16px; line-height: var(--line-body); }
115
+ h2 { font-size: 32px; line-height: var(--line-heading); }
116
+ .caption { font-size: 14px; line-height: var(--line-caption); }
117
+ ```
118
+
119
+ ## Vertical Rhythm
120
+
121
+ Vertical rhythm is the lived consequence of baseline-grid lock: because every text block consumes a whole number of grid units, block-level elements stack on the grid without ever needing manual margin tweaks. The page reads with a quiet, mechanical regularity that the eye registers as polish even when no one can articulate why. Vertical rhythm is what readers mean when they say a layout feels "professional" or "calm".
122
+
123
+ The rule that produces it is: pick the baseline unit once, set every line-height in the type ramp as a multiple of that unit, and set every block-level margin (margin-top, margin-bottom, padding-block on cards and sections) as a multiple of the same unit. Once both type and spacing are on-grid, rhythm emerges automatically — no per-element adjustment.
124
+
125
+ ```css
126
+ /* Vertical rhythm — body, heading, caption, all on the 8pt grid */
127
+ :root {
128
+ --grid-unit: 8px;
129
+ }
130
+
131
+ body {
132
+ font-size: 16px;
133
+ line-height: calc(var(--grid-unit) * 3); /* 24px — 3 units */
134
+ }
135
+
136
+ h2 {
137
+ font-size: 32px;
138
+ line-height: calc(var(--grid-unit) * 5); /* 40px — 5 units */
139
+ margin-block-start: calc(var(--grid-unit) * 6); /* 48px */
140
+ margin-block-end: calc(var(--grid-unit) * 3); /* 24px */
141
+ }
142
+
143
+ .caption {
144
+ font-size: 14px;
145
+ line-height: calc(var(--grid-unit) * 3); /* 24px — 3 units, same as body */
146
+ }
147
+
148
+ article > * + * {
149
+ margin-block-start: calc(var(--grid-unit) * 2); /* 16px between siblings */
150
+ }
151
+ ```
152
+
153
+ **Exceptions are explicit, not freehand.** Display-scale type (font-size ≥ 56px) is often set with optical line-height — a unitless ratio of 1.05–1.15 — because mechanical 8pt multiples look too sparse at hero scale. Single-line callouts (status badges, single-character chips) may use `line-height: 1` with vertical padding rounded to the grid. Treat both as named utilities (`.display-line-height`, `.chip-vertical`) rather than ad-hoc overrides — once the exception is a token, it remains visible to audit.
154
+
155
+ ## Modular Relationships
156
+
157
+ The point of the proportion system is that the four sub-systems — type, spacing, sizing, radius — are not authored independently. Each derives from the same baseline unit, and certain pairs of values across systems are intentionally identical. Body line-height equals the spacing token that separates two body paragraphs equals the height of a medium icon. The numerical equality is the visible signature of an authored composition.
158
+
159
+ | System | Token | Value | Grid relationship | Cross-system pairing |
160
+ | ------- | ----------- | ----- | ------------------------------ | ------------------------------------- |
161
+ | type | text-xs | 12px | 1.5 × baseline | matches `space-1.5` (4pt half-step) |
162
+ | type | text-sm | 14px | non-grid (optical exception) | line-height 20px (2.5 units) is grid |
163
+ | type | text-base | 16px | 2 × baseline (8pt) | matches `space-2` |
164
+ | type | text-lg | 20px | 2.5 × baseline | line-height 28px (3.5 units) |
165
+ | type | text-xl | 24px | 3 × baseline | matches `space-3`, matches `icon-md` |
166
+ | type | text-2xl | 32px | 4 × baseline | matches `space-4`, matches `icon-lg` |
167
+ | space | space-1 | 8px | 1 × baseline | matches `radius-md` |
168
+ | space | space-2 | 16px | 2 × baseline | matches `text-base` |
169
+ | space | space-3 | 24px | 3 × baseline | matches body line-height, `icon-md` |
170
+ | space | space-4 | 32px | 4 × baseline | matches `text-2xl`, `icon-lg` |
171
+ | space | space-6 | 48px | 6 × baseline | matches `avatar-md` height |
172
+ | radius | radius-sm | 4px | 0.5 × baseline | half-step, only on chips and tags |
173
+ | radius | radius-md | 8px | 1 × baseline | matches `space-1` |
174
+ | radius | radius-lg | 16px | 2 × baseline | matches `space-2`, `text-base` |
175
+ | size | icon-sm | 16px | 2 × baseline | matches `text-base` cap-height |
176
+ | size | icon-md | 24px | 3 × baseline | matches body line-height, `space-3` |
177
+ | size | icon-lg | 32px | 4 × baseline | matches `text-2xl`, `space-4` |
178
+ | size | avatar-sm | 32px | 4 × baseline | matches `icon-lg`, `space-4` |
179
+ | size | avatar-md | 48px | 6 × baseline | matches `space-6` |
180
+ | size | avatar-lg | 64px | 8 × baseline | 8 grid units, matches hero spacing |
181
+
182
+ The pairing column is the asset. An agent picking a value reads across the table: "I need padding around 16px text on an 8pt grid" → `space-2` (16px) or `space-3` (24px), never `padding: 12px` (1.5 units — half-step, reserved for chips). "I need an icon next to body text" → `icon-md` (24px), because body line-height is 24px and the icon should occupy the same vertical band. The relationships make these decisions one-step.
183
+
184
+ **A concrete pairing example.** Body text is 16px on 24px line-height (8pt grid). A button next to body text should have vertical padding such that the total button height is a clean multiple of the grid. Padding 8px + line-height 24px + padding 8px = 40px (5 units — on-grid). Padding 12px + line-height 24px + padding 12px = 48px (6 units — on-grid). Padding 10px gives 44px (5.5 units — off-grid, breaks rhythm); the only way to know that is to consult the matrix. Once a team internalizes the pairings, the choice between 8px and 12px stops being aesthetic — both are correct, both produce on-grid heights, and the team picks based on density.
185
+
186
+ ## Radius Scale as Proportion
187
+
188
+ Corner radius is the easiest token to author ad-hoc — `border-radius: 6px` looks fine in isolation — and the easiest to break the system with. The radius scale belongs to proportion because it must derive from component height, not be chosen freehand. The common rule is `radius-md ≈ 0.25 × component height`: a 40px-tall button gets 8px radius, a 32px-tall chip gets 8px radius, a 24px-tall tag gets 4px or 8px. The 0.25× ratio is visually balanced — large enough to register as "rounded", small enough to keep the geometry of the rectangle dominant.
189
+
190
+ Two exceptions matter and are named, not freehand. **Pill** sets `border-radius: 9999px` (or `border-radius: 50%` on a square) — explicit "fully rounded", used for tags, status badges, and avatar wrappers. **Square** sets `border-radius: 0` — explicit "no rounding", used inside data tables where rectangular cells must butt against each other, and on heavily geometric brand systems.
191
+
192
+ ```css
193
+ /* Radius scale as proportion to component height */
194
+ :root {
195
+ --radius-none: 0;
196
+ --radius-sm: 4px; /* 0.25 × 16px (tag height) */
197
+ --radius-md: 8px; /* 0.25 × 32px (chip / small button) */
198
+ --radius-lg: 10px; /* 0.25 × 40px (default button) */
199
+ --radius-xl: 16px; /* 0.25 × 64px (large input / card) */
200
+ --radius-full: 9999px; /* pill */
201
+ }
202
+
203
+ .button-default {
204
+ block-size: 40px;
205
+ border-radius: var(--radius-lg); /* 10px — 0.25 × 40px */
206
+ }
207
+
208
+ .chip {
209
+ block-size: 32px;
210
+ border-radius: var(--radius-md); /* 8px — 0.25 × 32px */
211
+ }
212
+
213
+ .avatar {
214
+ inline-size: 48px;
215
+ block-size: 48px;
216
+ border-radius: var(--radius-full); /* pill (circle) — explicit named exception */
217
+ }
218
+ ```
219
+
220
+ ## Sizing Scale Derivation
221
+
222
+ Sizing tokens — icon dimensions, avatar dimensions, button heights, input heights — are not a separate ladder. They are derived from the spacing scale by consistent multipliers, so that every size token equals some `space-N` token. This is the rule that prevents sizing drift: a new size token must reuse an existing spacing value; it may not introduce a new pixel value.
223
+
224
+ The derivation table for an 8pt grid:
225
+
226
+ ```css
227
+ /* Sizing tokens derived from spacing tokens */
228
+ :root {
229
+ --grid-unit: 8px;
230
+
231
+ /* Spacing ladder (canonical) */
232
+ --space-1: calc(var(--grid-unit) * 1); /* 8px */
233
+ --space-2: calc(var(--grid-unit) * 2); /* 16px */
234
+ --space-3: calc(var(--grid-unit) * 3); /* 24px */
235
+ --space-4: calc(var(--grid-unit) * 4); /* 32px */
236
+ --space-5: calc(var(--grid-unit) * 5); /* 40px */
237
+ --space-6: calc(var(--grid-unit) * 6); /* 48px */
238
+ --space-8: calc(var(--grid-unit) * 8); /* 64px */
239
+
240
+ /* Sizing tokens — every value is a spacing token, not a new pixel literal */
241
+ --icon-sm: var(--space-2); /* 16px */
242
+ --icon-md: var(--space-3); /* 24px */
243
+ --icon-lg: var(--space-4); /* 32px */
244
+
245
+ --avatar-sm: var(--space-4); /* 32px */
246
+ --avatar-md: var(--space-6); /* 48px */
247
+ --avatar-lg: var(--space-8); /* 64px */
248
+
249
+ --button-sm: var(--space-4); /* 32px height */
250
+ --button-md: var(--space-5); /* 40px height — default button */
251
+ --button-lg: var(--space-6); /* 48px height */
252
+
253
+ --input-md: var(--space-5); /* 40px height — matches button-md */
254
+ }
255
+ ```
256
+
257
+ The rule that makes this work: **a new sizing token must derive from spacing — never freehand.** If a designer needs a 36px button, the answer is not `--button-custom: 36px`; the answer is either 32px (`--space-4`) or 40px (`--space-5`), and the designer picks one. The token system declines to express off-grid sizes, which is the point.
258
+
259
+ ## Cross-References
260
+
261
+ - [design-system-guidance.md](./design-system-guidance.md) — general design-system authoring context that this file deepens for proportion. That file mentions 8pt grids in passing; this file is the formal treatment.
262
+ - [typography.md](./typography.md) §Type Scale Systems — the canonical modular-scale slice this file extends to the whole UI. Read that section first for the upstream type ladder.
263
+ - [style-vocabulary.md](./style-vocabulary.md) — style rows that cite "8pt spacing grid" (Flat Design 2.0) and other proportional vocabulary surfaces. This file is the underlying mechanism behind those style-row markers.
264
+
265
+ Forward reading: [composition.md](./composition.md) §Root Rectangles — √2, √3, √5 for the geometry behind the √2 grid baseline option above.
266
+
267
+ Note: reciprocal inbound cross-links from these files into `proportion-systems.md` land in Phase 28-06 (additive-only, decision D-06). This file declares its three outbound links now; the inverse direction is a separate, batched edit.
@@ -115,6 +115,13 @@
115
115
  "tier": "L2",
116
116
  "description": "Per-category gate checklists"
117
117
  },
118
+ {
119
+ "name": "color-theory",
120
+ "path": "reference/color-theory.md",
121
+ "type": "palette",
122
+ "phase": 28,
123
+ "description": "Color-theory foundation — color spaces (sRGB / HSL / OKLCH / LCH), six harmonies in OKLCH, simultaneous contrast, color-blindness palettes (deutan/protan/tritan), color interpolation in animation (OKLCH path vs sRGB muddy-mid)"
124
+ },
118
125
  {
119
126
  "name": "component-accordion",
120
127
  "path": "reference/components/accordion.md",
@@ -337,12 +344,26 @@
337
344
  "type": "schema",
338
345
  "description": "Locked 12-section spec shape for component benchmarks (Purpose → Failing example)"
339
346
  },
347
+ {
348
+ "name": "composition",
349
+ "path": "reference/composition.md",
350
+ "type": "layout",
351
+ "phase": 28,
352
+ "description": "Compositional fundamentals — rule of thirds, φ/√2/√3/√5 root rectangles, Fibonacci, focal-point construction, visual-weight calculus (size × contrast × isolation × complexity), optical-vs-mathematical centering, Z/F/Gutenberg eye-flow"
353
+ },
340
354
  {
341
355
  "name": "config-schema",
342
356
  "path": "reference/config-schema.md",
343
357
  "type": "schema",
344
358
  "description": "Schema documentation for .design/config.json"
345
359
  },
360
+ {
361
+ "name": "contrast-advanced",
362
+ "path": "reference/contrast-advanced.md",
363
+ "type": "heuristic",
364
+ "phase": 28,
365
+ "description": "APCA (WCAG 3 draft) contrast — Lc 75/60/45/30 thresholds, why WCAG 2.1 4.5:1 misranks thin/large/colored text, dual-target pattern with WCAG 2.1 AA, Lc↔WCAG-2.1 conversion table"
366
+ },
346
367
  {
347
368
  "name": "css-grid-layout",
348
369
  "path": "reference/css-grid-layout.md",
@@ -417,6 +438,13 @@
417
438
  "tier": "L2",
418
439
  "description": "NNG heuristics + GDD-specific rubrics used by auditor / verifier"
419
440
  },
441
+ {
442
+ "name": "i18n",
443
+ "path": "reference/i18n.md",
444
+ "type": "heuristic",
445
+ "phase": 28,
446
+ "description": "i18n engineering primitives — text expansion per locale, CSS logical properties, RTL mirroring + directional-icon flip, bidi isolation, Intl.* family (DateTimeFormat / NumberFormat / PluralRules / RelativeTimeFormat / ListFormat / Collator / Segmenter), ICU MessageFormat, Unicode hygiene, multi-script font stacks, WCAG i18n; spec source for design-verifier i18n probes + explore i18n-readiness probe"
447
+ },
420
448
  {
421
449
  "name": "iconography",
422
450
  "path": "reference/iconography.md",
@@ -455,6 +483,13 @@
455
483
  "type": "defaults",
456
484
  "description": "Default MCP per-task budget (calls + consecutive-timeout thresholds)"
457
485
  },
486
+ {
487
+ "name": "mcp-gdd-tools-schema",
488
+ "path": "reference/schemas/mcp-gdd-tools.schema.json",
489
+ "type": "schema",
490
+ "phase": 27.7,
491
+ "description": "Phase 27.7 — Draft-07 input/output schemas for the 12 read-only tools in scripts/mcp-servers/gdd-mcp/ (gdd-mcp MCP server)"
492
+ },
458
493
  {
459
494
  "name": "meta-rules",
460
495
  "path": "reference/meta-rules.md",
@@ -690,6 +725,13 @@
690
725
  "type": "heuristic",
691
726
  "description": "Guide for authoring project-skill artifacts (sketch/spike wrap-ups)"
692
727
  },
728
+ {
729
+ "name": "proportion-systems",
730
+ "path": "reference/proportion-systems.md",
731
+ "type": "layout",
732
+ "phase": 28,
733
+ "description": "Whole-UI proportion systems — 4pt / 8pt / √2 baseline grids, baseline-grid lock, vertical rhythm, modular relationships across type + spacing + sizing + radius scales"
734
+ },
693
735
  {
694
736
  "name": "protected-paths.default",
695
737
  "path": "reference/protected-paths.default.json",
@@ -1,5 +1,7 @@
1
1
  # RTL, CJK, and Cultural Localization — Reference Guide
2
2
 
3
+ > For engineering primitives (CSS logical properties, Intl.\* family, bidi isolation, ICU MessageFormat, text-expansion budgets, multi-script font stacks, Unicode hygiene), see [`./i18n.md`](./i18n.md). This file owns cultural context (greeting forms, color symbolism, CJK family-name conventions, imagery norms).
4
+
3
5
  Designing for a global audience is not a matter of translating strings and calling the work done. Layout direction, typographic rendering, number formatting, color semantics, and imagery all carry culturally specific expectations that, when violated, signal to users that the product was not made for them. This reference consolidates the key technical and cultural considerations that the get-design-done framework requires designers and engineers to understand before shipping to any non-English or non-Western market.
4
6
 
5
7
  ---