@treasuryspatial/render-kit 0.1.14 → 0.1.15

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.
@@ -0,0 +1,1579 @@
1
+ export const courtyardImagine = {
2
+ "id": "courtyard.imagine",
3
+ "version": "v1",
4
+ "label": "Urban Courtyard",
5
+ "description": "Prompt pack for urban courtyard renders.",
6
+ "blockOrder": [
7
+ "task",
8
+ "form",
9
+ "view",
10
+ "style",
11
+ "program",
12
+ "context"
13
+ ],
14
+ "assembly": {
15
+ "strategy": "full",
16
+ "updateBlocks": [
17
+ "form",
18
+ "view",
19
+ "style",
20
+ "program",
21
+ "context"
22
+ ],
23
+ "includeUserPrompt": true
24
+ },
25
+ "task": {
26
+ "variants": {
27
+ "imagine": [
28
+ "Render a photorealistic architectural visualization of an urban courtyard development and the immediate adjacent urban context visible from the chosen viewpoint.",
29
+ "Use the user prompt and feature blocks as the complete design brief; do not introduce unrelated subjects or typologies.",
30
+ "Prioritize architectural realism, material credibility, and clear courtyard enclosure suitable for design review."
31
+ ],
32
+ "design": [
33
+ "Render a photorealistic architectural visualization of an urban courtyard using the provided massing/line model as the primary geometry reference.",
34
+ "Treat the massing as ground-truth for footprint, height, and courtyard enclosure; apply facade, roof, and program detail from the feature blocks and user prompt.",
35
+ "Prioritize architectural realism, material credibility, and clear courtyard enclosure suitable for design review."
36
+ ],
37
+ "map": [
38
+ "Render a photorealistic architectural visualization of an urban courtyard using the provided massing/line model as the primary geometry reference.",
39
+ "Treat the massing as ground-truth for footprint, height, and courtyard enclosure; apply facade, roof, and program detail from the feature blocks and user prompt.",
40
+ "Prioritize architectural realism, material credibility, and clear courtyard enclosure suitable for design review."
41
+ ]
42
+ }
43
+ },
44
+ "fields": {
45
+ "form.perimeter": {
46
+ "id": "form.perimeter",
47
+ "type": "select",
48
+ "label": "perimeter",
49
+ "options": [
50
+ {
51
+ "value": "closed",
52
+ "label": "closed",
53
+ "promptLines": [
54
+ "The block is fully enclosed by continuous building mass, forming a protected, inward-facing residential courtyard.",
55
+ "Fully enclosed by continuous building mass with no gaps in the perimeter block wall.",
56
+ "The courtyard should read as protected interior open space framed by building facades on every side.",
57
+ "Enclosure is created by built form; landscaping remains internal to the courtyard and does not define the perimeter.",
58
+ "Do not introduce perimeter breaks; the street wall remains continuous on all four sides with no missing facade segments or openings to the street.",
59
+ "Do not interpret a closed perimeter block as U-shaped or horseshoe massing."
60
+ ]
61
+ },
62
+ {
63
+ "value": "open",
64
+ "label": "open",
65
+ "promptLines": [
66
+ "Open perimeter block: one or more sides of the urban courtyard remain open to the street and are intentionally unbuilt.",
67
+ "Built edges still form a continuous street wall where they exist; the open side stays fully open to the city.",
68
+ "The block should still read as a coherent perimeter system with one released edge."
69
+ ]
70
+ },
71
+ {
72
+ "value": "horseshoe",
73
+ "label": "horseshoe",
74
+ "promptLines": [
75
+ "Horseshoe urban courtyard: three sides are built mass and one side is open toward the street or view.",
76
+ "Built edges remain continuous along the street wall, and the open face is clearly legible as the courtyard opening.",
77
+ "Overall massing reads as a perimeter system with a single open face."
78
+ ]
79
+ }
80
+ ]
81
+ },
82
+ "form.geometry": {
83
+ "id": "form.geometry",
84
+ "type": "multi",
85
+ "label": "massing form",
86
+ "options": [
87
+ {
88
+ "value": "chamfered_corners",
89
+ "label": "chamfered corners",
90
+ "prompt": "Chamfered corners are clearly legible at intersections and read as part of the building massing. The chamfers should make corners feel intentional and urban.",
91
+ "promptExtra": [
92
+ "Chamfered corners must be clearly legible at intersections and read as part of the main massing."
93
+ ]
94
+ },
95
+ {
96
+ "value": "stepped_terraces",
97
+ "label": "stepped terraces",
98
+ "prompt": "Stepped or terraced forms step down toward the urban courtyard or street to modulate height and preserve light. Terraces should read as inhabited outdoor spaces.",
99
+ "tags": [
100
+ "variation-source"
101
+ ]
102
+ },
103
+ {
104
+ "value": "l_shaped_wings",
105
+ "label": "L-shaped wings",
106
+ "prompt": "L-shaped wings and rear podiums extend into the urban courtyard to create layered interior sequences, framed views, and semi-private alcoves. These wings should add depth without breaking enclosure.",
107
+ "tags": [
108
+ "variation-source"
109
+ ]
110
+ }
111
+ ]
112
+ },
113
+ "form.diversity": {
114
+ "id": "form.diversity",
115
+ "type": "multi",
116
+ "label": "massing diversity",
117
+ "options": [
118
+ {
119
+ "value": "single_stair",
120
+ "label": "single-stair",
121
+ "prompt": "Single-stair buildings with clear parcel rhythm, legible entries, and modest scale variation along the street. Each parcel should feel like an individual building within the block.",
122
+ "tags": [
123
+ "variation-source"
124
+ ]
125
+ },
126
+ {
127
+ "value": "parcel_rhythm",
128
+ "label": "parcel rhythm",
129
+ "prompt": "Distinct parcel rhythm with varied facade parcels, subtle setbacks, and individual building expression from parcel to parcel. Variation should be legible at the street level.",
130
+ "tags": [
131
+ "variation-source"
132
+ ]
133
+ },
134
+ {
135
+ "value": "corner_buildings",
136
+ "label": "corner buildings",
137
+ "prompt": "Larger, expressive corner buildings anchor primary intersections and frame the perimeter without breaking enclosure. Corners should feel like landmarks within the street wall.",
138
+ "tags": [
139
+ "variation-source"
140
+ ]
141
+ }
142
+ ]
143
+ },
144
+ "form.height": {
145
+ "id": "form.height",
146
+ "type": "select",
147
+ "label": "height",
148
+ "options": [
149
+ {
150
+ "value": "two_three",
151
+ "label": "two–three",
152
+ "prompt": "Buildings are two to three stories tall and read as low-rise urban courtyard edges. The scale should feel intimate and domestic."
153
+ },
154
+ {
155
+ "value": "four_six",
156
+ "label": "four–six",
157
+ "prompt": "Buildings are four to six stories tall, forming a classic mid-rise street wall. Massing should feel dense yet human-scaled."
158
+ },
159
+ {
160
+ "value": "seven_ten",
161
+ "label": "seven–ten",
162
+ "prompt": "Buildings are seven to ten stories tall, with stepped upper floors to preserve light and air. Upper levels should be visibly set back from the street wall."
163
+ },
164
+ {
165
+ "value": "mixed",
166
+ "label": "mixed height",
167
+ "prompt": "Heights vary across parcels, creating a mixed skyline with subtle modulation. Variation should remain coherent and maintain courtyard enclosure."
168
+ }
169
+ ]
170
+ },
171
+ "form.dimensions": {
172
+ "id": "form.dimensions",
173
+ "type": "select",
174
+ "label": "dimensions",
175
+ "options": [
176
+ {
177
+ "value": "typical",
178
+ "label": "typical",
179
+ "prompt": "Parcels are typically 40–70 ft wide and 40–50 ft deep, with some wings projecting deeper into the courtyard. Use this as a baseline for parcel rhythm."
180
+ },
181
+ {
182
+ "value": "narrow",
183
+ "label": "narrow",
184
+ "prompt": "Parcels are narrow, 25–40 ft wide and 35–45 ft deep. Narrow widths should emphasize fine-grain parcel rhythm."
185
+ },
186
+ {
187
+ "value": "mid_size",
188
+ "label": "mid-size",
189
+ "prompt": "Parcels are mid-size, 40–60 ft wide and 40–55 ft deep. This should read as a classic mid-rise urban parcel."
190
+ },
191
+ {
192
+ "value": "wide",
193
+ "label": "wide",
194
+ "prompt": "Parcels are wide, 60–90 ft wide and 45–60 ft deep. Use wider parcels sparingly to anchor key corners."
195
+ }
196
+ ]
197
+ },
198
+ "view.viewpoint": {
199
+ "id": "view.viewpoint",
200
+ "type": "select",
201
+ "label": "viewpoint",
202
+ "options": [
203
+ {
204
+ "value": "high_oblique_aerial",
205
+ "label": "01 · High Oblique Aerial — block + roofscape",
206
+ "prompt": "High oblique aerial view capturing the entire block in one frame. Camera pitched steeply enough to show roofscape and full facade height together, with clear elevation depth and legible courtyard enclosure. Adjacent context appears only if naturally in frame.",
207
+ "tags": [
208
+ "oblique",
209
+ "aerial"
210
+ ],
211
+ "meta": {
212
+ "group": "Overview"
213
+ }
214
+ },
215
+ {
216
+ "value": "birds_eye_vertical",
217
+ "label": "02 · Bird’s‑Eye Vertical — top‑down plan",
218
+ "prompt": "Vertical bird’s‑eye view directly above the entire block. Roofscape, parcel rhythm, and courtyard footprint read clearly in plan; the courtyard is fully visible in plan with no perspective tilt.",
219
+ "tags": [
220
+ "aerial"
221
+ ],
222
+ "meta": {
223
+ "group": "Overview"
224
+ }
225
+ },
226
+ {
227
+ "value": "roof_level_hover",
228
+ "label": "03 · Roof‑Level Hover — inward roof view",
229
+ "prompt": "Hovering view just above roof level, angled gently downward into the courtyard. Roof edges and parapets frame the interior; the view reads as an inward look rather than a city panorama.",
230
+ "tags": [
231
+ "drone",
232
+ "aerial",
233
+ "courtyard"
234
+ ],
235
+ "meta": {
236
+ "group": "Overview"
237
+ }
238
+ },
239
+ {
240
+ "value": "courtyard_eye_level",
241
+ "label": "04 · Courtyard Eye‑Level — interior ground",
242
+ "prompt": "Eye-level view from within the courtyard. Camera height is pedestrian; inner facades, planting, and the interior spatial sequence define the frame, emphasizing enclosure and lived-in scale.",
243
+ "tags": [
244
+ "courtyard",
245
+ "ground"
246
+ ],
247
+ "meta": {
248
+ "group": "Interior"
249
+ }
250
+ },
251
+ {
252
+ "value": "diagonal_courtyard_interior",
253
+ "label": "05 · Diagonal Courtyard Interior — cross‑court",
254
+ "prompt": "Diagonal courtyard interior view across the space. Balconies, wings, and layered garden rooms create depth and enclosure; the view stays fully inside the courtyard.",
255
+ "tags": [
256
+ "courtyard"
257
+ ],
258
+ "meta": {
259
+ "group": "Interior"
260
+ }
261
+ },
262
+ {
263
+ "value": "high_balcony_interior",
264
+ "label": "06 · High Balcony Interior — elevated courtyard",
265
+ "prompt": "View from a high balcony or upper-level terrace inside the courtyard, looking down and across the interior landscape and inner facades.",
266
+ "tags": [
267
+ "courtyard",
268
+ "interior"
269
+ ],
270
+ "meta": {
271
+ "group": "Interior"
272
+ }
273
+ },
274
+ {
275
+ "value": "cafe_window_interior",
276
+ "label": "07 · Ground‑Floor Café Window — interior to courtyard",
277
+ "prompt": "From a ground-floor café or retail interior, looking through a window into the courtyard. Interior framing and reflections are subtle; courtyard life remains the subject.",
278
+ "tags": [
279
+ "courtyard",
280
+ "interior"
281
+ ],
282
+ "meta": {
283
+ "group": "Interior"
284
+ }
285
+ },
286
+ {
287
+ "value": "garden_seat_fisheye",
288
+ "label": "08 · Garden Seat Fisheye — immersive interior",
289
+ "prompt": "Seated within a garden nook of the courtyard with a light fisheye effect. The lens exaggerates depth while keeping the inner facades and planting as the focus.",
290
+ "tags": [
291
+ "courtyard",
292
+ "interior"
293
+ ],
294
+ "meta": {
295
+ "group": "Interior"
296
+ }
297
+ },
298
+ {
299
+ "value": "courtyard_to_street_oblique",
300
+ "label": "09 · Courtyard‑to‑Street — controlled aperture",
301
+ "prompt": "View from within the courtyard toward the street wall, with a deliberate visual path to the street via a gate, alley, or glazed opening. The courtyard remains dominant in frame.",
302
+ "tags": [
303
+ "courtyard",
304
+ "oblique"
305
+ ],
306
+ "meta": {
307
+ "group": "Interior"
308
+ }
309
+ },
310
+ {
311
+ "value": "street_wall",
312
+ "label": "10 · Street‑Wall View — exterior street edge",
313
+ "prompt": "Street-level exterior view aligned with the perimeter street wall. Camera is at pedestrian height with a strong vanishing line; the continuous street edge and facade rhythm are the primary read.",
314
+ "tags": [
315
+ "street",
316
+ "ground"
317
+ ],
318
+ "meta": {
319
+ "group": "Exterior"
320
+ }
321
+ },
322
+ {
323
+ "value": "corner_intersection",
324
+ "label": "11 · Corner Intersection View — ground-level corner",
325
+ "prompt": "Street-level view at a primary intersection, looking diagonally across the corner mass. Two street walls meet with a clear chamfered or rounded corner; the corner anchors the composition.",
326
+ "tags": [
327
+ "street",
328
+ "ground"
329
+ ],
330
+ "meta": {
331
+ "group": "Exterior"
332
+ }
333
+ },
334
+ {
335
+ "value": "street_to_courtyard",
336
+ "label": "12 · Street‑to‑Courtyard — through opening",
337
+ "prompt": "View from the public street looking into the courtyard through a controlled opening (gate, alley, or glazed passage). The street wall remains the primary frame.",
338
+ "tags": [
339
+ "street",
340
+ "courtyard"
341
+ ],
342
+ "meta": {
343
+ "group": "Exterior"
344
+ }
345
+ }
346
+ ]
347
+ },
348
+ "view.variation": {
349
+ "id": "view.variation",
350
+ "type": "select",
351
+ "label": "variation",
352
+ "options": [
353
+ {
354
+ "value": "variation",
355
+ "label": "variation",
356
+ "prompt": "Allow subtle randomized shifts in altitude, lateral offset, and lens within a narrow range to avoid rigid repetition while keeping the same view type."
357
+ },
358
+ {
359
+ "value": "deterministic",
360
+ "label": "deterministic",
361
+ "prompt": "Keep the camera position and framing fixed with no variation in altitude, offset, or lens; maintain the exact specified view."
362
+ }
363
+ ]
364
+ },
365
+ "view.composition": {
366
+ "id": "view.composition",
367
+ "type": "select",
368
+ "label": "composition",
369
+ "options": [
370
+ {
371
+ "value": "wide_16_9",
372
+ "label": "16:9 wide",
373
+ "prompt": "Composition: frame for a wide 16:9 layout; keep the courtyard and primary street wall centered, with balanced negative space."
374
+ },
375
+ {
376
+ "value": "landscape_3_2",
377
+ "label": "3:2 landscape",
378
+ "prompt": "Composition: frame for a 3:2 landscape format; maintain strong horizontal balance and clear enclosure in the center third."
379
+ },
380
+ {
381
+ "value": "landscape_4_3",
382
+ "label": "4:3 landscape",
383
+ "prompt": "Composition: frame for a 4:3 landscape format; keep the courtyard and perimeter walls evenly balanced left and right."
384
+ },
385
+ {
386
+ "value": "square_1_1",
387
+ "label": "1:1 square",
388
+ "prompt": "Composition: square framing; center the courtyard volume and keep perimeter edges evenly balanced on all sides."
389
+ },
390
+ {
391
+ "value": "portrait_4_5",
392
+ "label": "4:5 portrait",
393
+ "prompt": "Composition: portrait framing; emphasize vertical enclosure and stack courtyard depth from bottom to top."
394
+ },
395
+ {
396
+ "value": "portrait_9_16",
397
+ "label": "9:16 tall",
398
+ "prompt": "Composition: tall vertical framing; emphasize height, enclosure, and layered facade depth from street to courtyard."
399
+ },
400
+ {
401
+ "value": "twitter_banner",
402
+ "label": "twitter banner (1500×600)",
403
+ "prompt": "Composition: wide banner layout. Keep critical content inside the central horizontal band (middle ~60% height), leaving top and bottom bands as breathing room."
404
+ },
405
+ {
406
+ "value": "horizontal_strip",
407
+ "label": "horizontal strip",
408
+ "prompt": "Composition: cinematic horizontal strip. Keep the courtyard and street wall centered in a narrow band with generous negative space above and below."
409
+ }
410
+ ]
411
+ },
412
+ "style.roofType": {
413
+ "id": "style.roofType",
414
+ "type": "select",
415
+ "label": "roof type",
416
+ "options": [
417
+ {
418
+ "value": "flat_parapet",
419
+ "label": "flat parapet",
420
+ "prompt": "Use a flat roof with a parapet and a clearly defined roofline edge. The parapet should read as a continuous perimeter line on each parcel."
421
+ },
422
+ {
423
+ "value": "shallow_gable",
424
+ "label": "shallow gable",
425
+ "prompt": "Use a shallow-pitched gable roof with a subtle ridge expression. Keep the pitch gentle so the roofline stays low and refined."
426
+ },
427
+ {
428
+ "value": "mansard",
429
+ "label": "mansard",
430
+ "prompt": "Use a mansard roof with recessed upper floors that read as terraces. The mansard should create a strong cornice line and livable roof level."
431
+ },
432
+ {
433
+ "value": "broken_mansard",
434
+ "label": "broken mansard",
435
+ "prompt": "Use a broken mansard roof with articulated dormers and deep eaves. The roof should read as layered and volumetric, not flat."
436
+ },
437
+ {
438
+ "value": "shed",
439
+ "label": "shed",
440
+ "prompt": "Use a shed roof with a single-direction slope to create varied roof heights. The slope should help emphasize parcel rhythm."
441
+ },
442
+ {
443
+ "value": "butterfly",
444
+ "label": "butterfly",
445
+ "prompt": "Use a butterfly roof with a central valley and lifted edges. This should read as a modern, sculpted roof profile."
446
+ },
447
+ {
448
+ "value": "hipped",
449
+ "label": "hipped",
450
+ "prompt": "Use a hipped roof with four-way slopes and a strong cornice line. The roof should feel orderly and continuous across parcels."
451
+ },
452
+ {
453
+ "value": "half_hipped",
454
+ "label": "half-hipped",
455
+ "prompt": "Use a half-hipped roof with truncated gables and softened corners. The roof form should feel traditional yet slightly varied."
456
+ }
457
+ ]
458
+ },
459
+ "style.roofscape": {
460
+ "id": "style.roofscape",
461
+ "type": "multi",
462
+ "label": "roofscape",
463
+ "options": [
464
+ {
465
+ "value": "diverse_roofscape",
466
+ "label": "diverse roofscape",
467
+ "prompt": "Include a diverse roofscape with varied parcels and roofline breaks. The roofscape should reveal parcel-by-parcel identity."
468
+ },
469
+ {
470
+ "value": "recessed_gables",
471
+ "label": "recessed gables",
472
+ "prompt": "Include recessed gables with terrace cutbacks along the roofline. Recesses should open up roof terraces facing the urban courtyard."
473
+ },
474
+ {
475
+ "value": "subtle_pitch",
476
+ "label": "subtle pitch",
477
+ "prompt": "Mix shallow gables with subtle pitch variations across parcels. This should add variety without disrupting the block rhythm."
478
+ },
479
+ {
480
+ "value": "greenhouse",
481
+ "label": "greenhouse",
482
+ "prompt": "Integrate greenhouse or winter-garden volumes into the roof plane. These should read as light, glazed volumes on select parcels."
483
+ },
484
+ {
485
+ "value": "roof_loggias",
486
+ "label": "roof loggias",
487
+ "prompt": "Add roof-level arcades or loggias that face the urban courtyard. These should create sheltered outdoor rooms at the roof level."
488
+ },
489
+ {
490
+ "value": "pergolas",
491
+ "label": "pergolas",
492
+ "prompt": "Use pergolas or trellised structures on roof terraces. These should feel like inhabited outdoor amenities."
493
+ },
494
+ {
495
+ "value": "skylights",
496
+ "label": "skylights",
497
+ "prompt": "Integrate skylight arrays into the roof plane. Skylights should read as coordinated elements, not scattered objects."
498
+ },
499
+ {
500
+ "value": "terraces",
501
+ "label": "terraces",
502
+ "prompt": "Step terraces and patios along the roofline. Terraces should emphasize the urban courtyard-facing roofscape."
503
+ },
504
+ {
505
+ "value": "green_roofs",
506
+ "label": "green roofs",
507
+ "prompt": "Add green roofs and planted roof gardens. Planting should appear intentional and accessible from upper levels."
508
+ }
509
+ ]
510
+ },
511
+ "style.roofMaterials": {
512
+ "id": "style.roofMaterials",
513
+ "type": "multi",
514
+ "label": "roof materials",
515
+ "options": [
516
+ {
517
+ "value": "standing_seam",
518
+ "label": "standing-seam",
519
+ "prompt": "Use standing-seam metal roofing in zinc, copper, or dark steel. The seams should read clearly at architectural scale."
520
+ },
521
+ {
522
+ "value": "terracotta",
523
+ "label": "terracotta",
524
+ "prompt": "Use clay or terracotta tile roofing with warm tonal variation. Tiles should read as traditional and tactile."
525
+ },
526
+ {
527
+ "value": "slate",
528
+ "label": "slate",
529
+ "prompt": "Use slate roofing with fine-grain texture and subtle color shifts. Slate should feel refined and durable."
530
+ },
531
+ {
532
+ "value": "solar",
533
+ "label": "solar",
534
+ "prompt": "Integrate solar tiles or panels flush with the roof surface. Solar elements should feel integrated, not bolted on."
535
+ },
536
+ {
537
+ "value": "reflective",
538
+ "label": "reflective",
539
+ "prompt": "Use light-colored reflective roofing for heat mitigation. The surface should read as a deliberate material choice."
540
+ }
541
+ ]
542
+ },
543
+ "style.facadePrimary": {
544
+ "id": "style.facadePrimary",
545
+ "type": "multi",
546
+ "label": "primary materials",
547
+ "options": [
548
+ {
549
+ "value": "stone",
550
+ "label": "stone",
551
+ "prompt": "Primary facade material is stone or limestone with clear block coursing. The stone should feel substantial and civic."
552
+ },
553
+ {
554
+ "value": "brick",
555
+ "label": "brick",
556
+ "prompt": "Primary facade material is brick with warm tonal variation and articulated joints. Brick should read as tactile and urban."
557
+ },
558
+ {
559
+ "value": "stucco",
560
+ "label": "stucco",
561
+ "prompt": "Primary facade material is stucco or plaster with subtle texture and matte finish. Stucco should feel refined and consistent across parcels."
562
+ }
563
+ ]
564
+ },
565
+ "style.facadeGround": {
566
+ "id": "style.facadeGround",
567
+ "type": "toggle",
568
+ "label": "ground floor base",
569
+ "ui": "chip",
570
+ "promptOn": "Ground floor uses a robust civic base with arcades and active frontages for services, cafes, and daily needs. Ground floors should read as a continuous public base along the street wall."
571
+ },
572
+ "style.facadeUpper": {
573
+ "id": "style.facadeUpper",
574
+ "type": "toggle",
575
+ "label": "upper facade",
576
+ "ui": "chip",
577
+ "promptOn": "Upper facades include recessed patios, clerestories, projecting bays, and varied window types for depth and residential texture. Upper levels should feel layered and inhabitable, with clear parcel expression."
578
+ },
579
+ "style.facadeVariation": {
580
+ "id": "style.facadeVariation",
581
+ "type": "toggle",
582
+ "label": "facade variation",
583
+ "ui": "chip",
584
+ "promptOn": "Facades vary parcel-by-parcel with distinct materials, rhythms, and subtle setbacks."
585
+ },
586
+ "style.facadeBays": {
587
+ "id": "style.facadeBays",
588
+ "type": "toggle",
589
+ "label": "vertical bays",
590
+ "ui": "chip",
591
+ "promptOn": "Expressed vertical bays and structural rhythms are clearly legible across the street wall."
592
+ },
593
+ "program.building": {
594
+ "id": "program.building",
595
+ "type": "select",
596
+ "label": "building program",
597
+ "options": [
598
+ {
599
+ "value": "residential",
600
+ "label": "residential",
601
+ "prompt": "Program is primarily residential, with apartments and balconies oriented toward the urban courtyard.",
602
+ "promptExtra": [
603
+ "Building program should reinforce the residential character of the urban courtyard and support everyday life."
604
+ ]
605
+ },
606
+ {
607
+ "value": "mixed_use_retail",
608
+ "label": "mixed-use retail",
609
+ "prompt": "Mixed-use program: active ground-floor retail and cafes with residential above, reinforcing the street wall.",
610
+ "promptExtra": [
611
+ "Building program should reinforce the residential character of the urban courtyard and support everyday life."
612
+ ]
613
+ },
614
+ {
615
+ "value": "civic_residential",
616
+ "label": "civic + residential",
617
+ "prompt": "Ground floors include civic or community uses (childcare, library, community rooms) with residential above.",
618
+ "promptExtra": [
619
+ "Building program should reinforce the residential character of the urban courtyard and support everyday life."
620
+ ]
621
+ },
622
+ {
623
+ "value": "live_work",
624
+ "label": "live/work",
625
+ "prompt": "Live/work studios and small workshops activate the ground floor, with residential units above.",
626
+ "promptExtra": [
627
+ "Building program should reinforce the residential character of the urban courtyard and support everyday life."
628
+ ]
629
+ },
630
+ {
631
+ "value": "hospitality",
632
+ "label": "hospitality",
633
+ "prompt": "Include a boutique hotel or guesthouse component with public ground-floor amenities and residential-scale rooms.",
634
+ "promptExtra": [
635
+ "Building program should reinforce the residential character of the urban courtyard and support everyday life."
636
+ ]
637
+ }
638
+ ]
639
+ },
640
+ "program.courtyard": {
641
+ "id": "program.courtyard",
642
+ "type": "multi",
643
+ "label": "courtyard program",
644
+ "options": [
645
+ {
646
+ "value": "lush_gardens",
647
+ "label": "lush gardens",
648
+ "prompt": "Provide lush landscaping with layered gardens, mature trees, and seasonal planting. The urban courtyard should feel verdant and lived in."
649
+ },
650
+ {
651
+ "value": "paths_seating",
652
+ "label": "paths + seating",
653
+ "prompt": "Add meandering paths with sheltered seating pockets and garden rooms. Paths should create a slow, walkable sequence through the urban courtyard.",
654
+ "tags": [
655
+ "paths"
656
+ ]
657
+ },
658
+ {
659
+ "value": "play",
660
+ "label": "play",
661
+ "prompt": "Integrate play structures and sandboxes into the urban courtyard landscape. Play areas should be visible and safely framed by planting and facades."
662
+ },
663
+ {
664
+ "value": "balconies",
665
+ "label": "balconies",
666
+ "prompt": "Ensure abundant balconies and terraces face the urban courtyard. Courtyard-facing units should feel active and overlooked."
667
+ },
668
+ {
669
+ "value": "shared_terraces",
670
+ "label": "shared terraces",
671
+ "prompt": "Include green roofs, planted patios, pergolas, and shared terraces. These should add layered outdoor amenities for urban courtyard residents."
672
+ },
673
+ {
674
+ "value": "intimate_corners",
675
+ "label": "intimate corners",
676
+ "prompt": "Use L-shaped wings and rear podiums to create intimate corners and semi-private zones. The urban courtyard should feel layered, not uniform."
677
+ }
678
+ ]
679
+ },
680
+ "program.street": {
681
+ "id": "program.street",
682
+ "type": "multi",
683
+ "label": "urban program",
684
+ "options": [
685
+ {
686
+ "value": "pedestrian_street",
687
+ "label": "pedestrian street",
688
+ "prompt": "Make one street fully pedestrianized with no vehicular traffic. The street should feel safe, slow, and people-first.",
689
+ "tags": [
690
+ "pedestrian"
691
+ ]
692
+ },
693
+ {
694
+ "value": "trees_benches",
695
+ "label": "trees + benches",
696
+ "prompt": "Provide mature street trees, benches, and shaded sitting areas. Street furniture should feel permanent and civic."
697
+ },
698
+ {
699
+ "value": "permeable_paving",
700
+ "label": "permeable paving",
701
+ "prompt": "Use high-quality permeable paving with fine-grain surface texture. Paving should read as durable and carefully detailed."
702
+ },
703
+ {
704
+ "value": "bike_parking",
705
+ "label": "bike parking",
706
+ "prompt": "Integrate bicycle parking into the street edge. Bike infrastructure should be visible and organized."
707
+ },
708
+ {
709
+ "value": "arcades_cafes",
710
+ "label": "arcades + cafes",
711
+ "prompt": "Include arcades and outdoor cafe seating under covered walkways. Arcades should frame the street wall and provide shade."
712
+ },
713
+ {
714
+ "value": "urban_stage",
715
+ "label": "urban stage",
716
+ "prompt": "Add a flexible urban stage for community events. The stage should feel integrated into the street design."
717
+ },
718
+ {
719
+ "value": "water_feature",
720
+ "label": "water feature",
721
+ "prompt": "Include sculptural water features as civic focal points. Water elements should feel intentional and place-defining."
722
+ },
723
+ {
724
+ "value": "farmers_market",
725
+ "label": "farmers market",
726
+ "prompt": "Provide a farmer's market or temporary stalls. Market activity should animate the pedestrian street edge."
727
+ },
728
+ {
729
+ "value": "restaurants",
730
+ "label": "restaurants",
731
+ "prompt": "Include restaurants with active street frontage. Dining should spill into the public realm where appropriate."
732
+ },
733
+ {
734
+ "value": "street_patios",
735
+ "label": "street patios",
736
+ "prompt": "Provide street-level patios and outdoor seating. Patios should reinforce a lively, human-scale street."
737
+ },
738
+ {
739
+ "value": "pharmacy",
740
+ "label": "pharmacy",
741
+ "prompt": "Include a pharmacy or essential daily services at ground level. These uses should anchor everyday life."
742
+ },
743
+ {
744
+ "value": "grocery",
745
+ "label": "grocery",
746
+ "prompt": "Include a grocery store or market on the ground floor. The storefront should be legible and accessible."
747
+ },
748
+ {
749
+ "value": "cafe",
750
+ "label": "cafe",
751
+ "prompt": "Include a cafe with indoor-outdoor seating. The cafe should animate the street and courtyard edge."
752
+ }
753
+ ]
754
+ },
755
+ "toggle.landscaping": {
756
+ "id": "toggle.landscaping",
757
+ "type": "toggle",
758
+ "label": "landscaping",
759
+ "ui": "chip",
760
+ "promptOn": "Emphasize abundant landscaping and planting within the urban courtyard and along shared courtyard terraces."
761
+ },
762
+ "toggle.people": {
763
+ "id": "toggle.people",
764
+ "type": "toggle",
765
+ "label": "people",
766
+ "ui": "chip",
767
+ "promptOn": "Include people at realistic scale in the public realm and courtyard spaces."
768
+ },
769
+ "toggle.bicycles": {
770
+ "id": "toggle.bicycles",
771
+ "type": "toggle",
772
+ "label": "bicycles",
773
+ "ui": "chip",
774
+ "promptOn": "Include bicycles and bike parking integrated into the street edge."
775
+ },
776
+ "toggle.cars": {
777
+ "id": "toggle.cars",
778
+ "type": "toggle",
779
+ "label": "cars",
780
+ "ui": "chip",
781
+ "promptOn": "Include limited cars only where streets are not pedestrianized."
782
+ },
783
+ "toggle.trams": {
784
+ "id": "toggle.trams",
785
+ "type": "toggle",
786
+ "label": "trams",
787
+ "ui": "chip",
788
+ "promptOn": "Include trams or light rail consistent with the urban context."
789
+ },
790
+ "toggle.tech": {
791
+ "id": "toggle.tech",
792
+ "type": "toggle",
793
+ "label": "tech",
794
+ "ui": "chip",
795
+ "promptOn": "Include subtle contemporary tech elements that do not overpower the architecture."
796
+ },
797
+ "context.location": {
798
+ "id": "context.location",
799
+ "type": "select",
800
+ "label": "location",
801
+ "optionSource": "render-kit:location",
802
+ "promptTemplate": "Location is {label}; let local urban cues inform streetscape and material tone.",
803
+ "ensureSentence": true
804
+ },
805
+ "context.timeOfDay": {
806
+ "id": "context.timeOfDay",
807
+ "type": "select",
808
+ "label": "time of day",
809
+ "options": [
810
+ {
811
+ "value": "none",
812
+ "label": "none",
813
+ "meta": {
814
+ "detail": "realistic daylight"
815
+ }
816
+ },
817
+ {
818
+ "value": "morning",
819
+ "label": "morning",
820
+ "meta": {
821
+ "detail": "Soft morning light with long, gentle shadows and cool-warm balance."
822
+ }
823
+ },
824
+ {
825
+ "value": "noon",
826
+ "label": "noon",
827
+ "meta": {
828
+ "detail": "High midday sun with short shadows, neutral color temperature, and clear contrast."
829
+ }
830
+ },
831
+ {
832
+ "value": "afternoon",
833
+ "label": "afternoon",
834
+ "meta": {
835
+ "detail": "Warm afternoon light with longer shadows and softer contrast."
836
+ }
837
+ },
838
+ {
839
+ "value": "golden_hour",
840
+ "label": "golden hour",
841
+ "meta": {
842
+ "detail": "Golden hour light with warm low-angle sun, long soft shadows, amber highlights, and gentle atmospheric glow."
843
+ }
844
+ },
845
+ {
846
+ "value": "dusk",
847
+ "label": "dusk",
848
+ "meta": {
849
+ "detail": "Dusk lighting with cool ambient sky tones and warm interior glow at the street level."
850
+ }
851
+ },
852
+ {
853
+ "value": "night",
854
+ "label": "night",
855
+ "meta": {
856
+ "detail": "Night lighting with artificial street illumination and warm interior windows."
857
+ }
858
+ }
859
+ ],
860
+ "promptTemplate": "Time of day is {label}; lighting and atmosphere should follow: {detail}"
861
+ },
862
+ "context.imageStyle": {
863
+ "id": "context.imageStyle",
864
+ "type": "select",
865
+ "label": "image style",
866
+ "neutralizeWhen": {
867
+ "not": {
868
+ "field": "context.timeOfDay",
869
+ "equals": "none"
870
+ }
871
+ },
872
+ "options": [
873
+ {
874
+ "value": "editorial",
875
+ "label": "editorial architectural",
876
+ "prompt": "Editorial architectural photography with neutral color balance, crisp detail, and restrained contrast. Emphasize clarity, material realism, and clean composition.",
877
+ "promptNeutral": "Editorial architectural photography with neutral color balance, crisp detail, and restrained contrast. Emphasize clarity, material realism, and clean composition."
878
+ },
879
+ {
880
+ "value": "bright_realism",
881
+ "label": "bright daylight realism",
882
+ "prompt": "Bright daylight architectural photography with clean white balance, crisp edges, and minimal stylization. Materials read clearly and feel photorealistic.",
883
+ "promptNeutral": "Bright, clean architectural photography with crisp edges and minimal stylization. Materials read clearly and feel photorealistic."
884
+ },
885
+ {
886
+ "value": "overcast_clarity",
887
+ "label": "overcast clarity",
888
+ "prompt": "Soft overcast architectural photography with low contrast, even illumination, and high material legibility. Avoid harsh shadows.",
889
+ "promptNeutral": "Soft, evenly lit architectural photography with low contrast and high material legibility."
890
+ },
891
+ {
892
+ "value": "cinematic_warm",
893
+ "label": "cinematic warm grade",
894
+ "prompt": "Cinematic architectural photography with warm tonal grading, gentle halation, and subtle atmospheric depth. Maintain photorealism.",
895
+ "promptNeutral": "Cinematic architectural photography with warm tonal grading, gentle halation, and subtle atmospheric depth. Maintain photorealism."
896
+ },
897
+ {
898
+ "value": "high_contrast",
899
+ "label": "high-contrast studio",
900
+ "prompt": "High-contrast architectural imagery with deep blacks, strong highlights, and sharp micro-texture. Studio-like clarity without stylization.",
901
+ "promptNeutral": "High-contrast architectural imagery with deep blacks, strong highlights, and sharp micro-texture. Studio-like clarity."
902
+ },
903
+ {
904
+ "value": "soft_diffusion",
905
+ "label": "soft diffusion",
906
+ "prompt": "Soft diffused architectural photography with gentle haze, reduced contrast, and smooth tonal transitions. Preserve scale cues.",
907
+ "promptNeutral": "Soft diffused architectural photography with gentle haze, reduced contrast, and smooth tonal transitions."
908
+ },
909
+ {
910
+ "value": "moody_dusk",
911
+ "label": "moody dusk",
912
+ "prompt": "Moody dusk architectural photography with cool ambient tones, warm interior glow, and subtle reflections. Maintain realism and legibility.",
913
+ "promptNeutral": "Moody architectural photography with cool ambient tones, warm interior glow, and subtle reflections. Maintain realism and legibility."
914
+ }
915
+ ]
916
+ },
917
+ "context.styleReference": {
918
+ "id": "context.styleReference",
919
+ "type": "text",
920
+ "label": "style reference",
921
+ "promptTemplate": "Licensed style reference is {value}; interpret it as material and facade cues, not direct imitation.",
922
+ "ensureSentence": true
923
+ }
924
+ },
925
+ "blocks": {
926
+ "task": {
927
+ "id": "task"
928
+ },
929
+ "form": {
930
+ "id": "form",
931
+ "fields": [
932
+ "form.perimeter",
933
+ "form.geometry",
934
+ "form.diversity",
935
+ "form.height",
936
+ "form.dimensions"
937
+ ],
938
+ "footerLines": [
939
+ {
940
+ "text": "Parcel-by-parcel variation should add richness while preserving the perimeter form and continuous street wall.",
941
+ "when": {
942
+ "any": [
943
+ {
944
+ "field": "form.geometry",
945
+ "hasTag": "variation-source"
946
+ },
947
+ {
948
+ "field": "form.diversity",
949
+ "hasTag": "variation-source"
950
+ }
951
+ ]
952
+ }
953
+ },
954
+ {
955
+ "text": "These dimensions describe parcel-level modules; allow subtle variation across parcels to keep a legible rhythm.",
956
+ "when": {
957
+ "field": "form.dimensions",
958
+ "isTruthy": true
959
+ }
960
+ },
961
+ {
962
+ "text": "Corner parcels can be slightly larger or deeper to anchor intersections while mid-block parcels stay finer-grained.",
963
+ "when": {
964
+ "field": "form.dimensions",
965
+ "isTruthy": true
966
+ }
967
+ }
968
+ ]
969
+ },
970
+ "view": {
971
+ "id": "view",
972
+ "fields": [
973
+ "view.viewpoint",
974
+ "view.variation",
975
+ "view.composition"
976
+ ],
977
+ "lines": [],
978
+ "footerLines": [
979
+ {
980
+ "text": "Maintain the specified camera angle and lens; do not shift to a different view.",
981
+ "when": {
982
+ "field": "view.viewpoint",
983
+ "isTruthy": true
984
+ }
985
+ },
986
+ {
987
+ "text": "The urban courtyard and its enclosing street wall should remain the primary subject of the frame.",
988
+ "when": {
989
+ "field": "view.viewpoint",
990
+ "isTruthy": true
991
+ }
992
+ },
993
+ {
994
+ "text": "Include surrounding urban context only if it naturally falls within the chosen viewpoint.",
995
+ "when": {
996
+ "field": "view.viewpoint",
997
+ "isTruthy": true
998
+ }
999
+ },
1000
+ {
1001
+ "text": "Keep the frame entirely within the courtyard interior; exclude exterior street or city context.",
1002
+ "when": {
1003
+ "any": [
1004
+ {
1005
+ "field": "view.viewpoint",
1006
+ "equals": "courtyard_eye_level"
1007
+ },
1008
+ {
1009
+ "field": "view.viewpoint",
1010
+ "equals": "diagonal_courtyard_interior"
1011
+ },
1012
+ {
1013
+ "field": "view.viewpoint",
1014
+ "equals": "high_balcony_interior"
1015
+ },
1016
+ {
1017
+ "field": "view.viewpoint",
1018
+ "equals": "cafe_window_interior"
1019
+ },
1020
+ {
1021
+ "field": "view.viewpoint",
1022
+ "equals": "garden_seat_fisheye"
1023
+ },
1024
+ {
1025
+ "field": "view.viewpoint",
1026
+ "equals": "roof_level_hover"
1027
+ }
1028
+ ]
1029
+ }
1030
+ },
1031
+ {
1032
+ "text": "Foreground mass spans the bottom edge of the frame; the near courtyard edge is hidden behind the foreground mass. Do not cut away the perimeter to reveal the courtyard.",
1033
+ "when": {
1034
+ "all": [
1035
+ {
1036
+ "field": "form.perimeter",
1037
+ "equals": "closed"
1038
+ },
1039
+ {
1040
+ "field": "view.viewpoint",
1041
+ "equals": "high_oblique_aerial"
1042
+ }
1043
+ ]
1044
+ }
1045
+ },
1046
+ {
1047
+ "text": "The corner mass blocks direct view into the courtyard; no opening at the corner. Courtyard visibility begins only beyond the roofline.",
1048
+ "when": {
1049
+ "all": [
1050
+ {
1051
+ "field": "form.perimeter",
1052
+ "equals": "closed"
1053
+ },
1054
+ {
1055
+ "field": "view.viewpoint",
1056
+ "equals": "corner_intersection"
1057
+ }
1058
+ ]
1059
+ }
1060
+ },
1061
+ {
1062
+ "text": "The near parapet and roofline obscure the closest courtyard edge; interior is visible only beyond the roofline. The perimeter remains continuous.",
1063
+ "when": {
1064
+ "all": [
1065
+ {
1066
+ "field": "form.perimeter",
1067
+ "equals": "closed"
1068
+ },
1069
+ {
1070
+ "field": "view.viewpoint",
1071
+ "equals": "roof_level_hover"
1072
+ }
1073
+ ]
1074
+ }
1075
+ },
1076
+ {
1077
+ "text": "Courtyard is not visible from the street-wall view; the continuous street wall fully blocks it.",
1078
+ "when": {
1079
+ "all": [
1080
+ {
1081
+ "field": "form.perimeter",
1082
+ "equals": "closed"
1083
+ },
1084
+ {
1085
+ "field": "view.viewpoint",
1086
+ "equals": "street_wall"
1087
+ }
1088
+ ]
1089
+ }
1090
+ },
1091
+ {
1092
+ "text": "Street visibility occurs only through a controlled aperture (gate, alley, or glazed opening); the perimeter wall remains continuous.",
1093
+ "when": {
1094
+ "all": [
1095
+ {
1096
+ "field": "form.perimeter",
1097
+ "equals": "closed"
1098
+ },
1099
+ {
1100
+ "field": "view.viewpoint",
1101
+ "equals": "courtyard_to_street_oblique"
1102
+ }
1103
+ ]
1104
+ }
1105
+ },
1106
+ {
1107
+ "text": "Street visibility comes from the open side; the opening is legible and intentional.",
1108
+ "when": {
1109
+ "all": [
1110
+ {
1111
+ "any": [
1112
+ {
1113
+ "field": "form.perimeter",
1114
+ "equals": "open"
1115
+ },
1116
+ {
1117
+ "field": "form.perimeter",
1118
+ "equals": "horseshoe"
1119
+ }
1120
+ ]
1121
+ },
1122
+ {
1123
+ "field": "view.viewpoint",
1124
+ "equals": "courtyard_to_street_oblique"
1125
+ }
1126
+ ]
1127
+ }
1128
+ },
1129
+ {
1130
+ "text": "Courtyard is visible from the street only through a controlled opening; the street wall remains continuous.",
1131
+ "when": {
1132
+ "all": [
1133
+ {
1134
+ "field": "form.perimeter",
1135
+ "equals": "closed"
1136
+ },
1137
+ {
1138
+ "field": "view.viewpoint",
1139
+ "equals": "street_to_courtyard"
1140
+ }
1141
+ ]
1142
+ }
1143
+ },
1144
+ {
1145
+ "text": "Courtyard visibility comes from the open side; the opening is legible and intentional.",
1146
+ "when": {
1147
+ "all": [
1148
+ {
1149
+ "any": [
1150
+ {
1151
+ "field": "form.perimeter",
1152
+ "equals": "open"
1153
+ },
1154
+ {
1155
+ "field": "form.perimeter",
1156
+ "equals": "horseshoe"
1157
+ }
1158
+ ]
1159
+ },
1160
+ {
1161
+ "field": "view.viewpoint",
1162
+ "equals": "street_to_courtyard"
1163
+ }
1164
+ ]
1165
+ }
1166
+ }
1167
+ ]
1168
+ },
1169
+ "style": {
1170
+ "id": "style",
1171
+ "fields": [
1172
+ "style.roofType",
1173
+ "style.roofscape",
1174
+ "style.roofMaterials",
1175
+ "style.facadePrimary",
1176
+ "style.facadeGround",
1177
+ "style.facadeUpper",
1178
+ "style.facadeVariation",
1179
+ "style.facadeBays"
1180
+ ],
1181
+ "footerLines": [
1182
+ {
1183
+ "text": "Roof elements should read as integral architectural massing, not as decorative add-ons.",
1184
+ "when": {
1185
+ "any": [
1186
+ {
1187
+ "field": "style.roofType",
1188
+ "isTruthy": true
1189
+ },
1190
+ {
1191
+ "field": "style.roofscape",
1192
+ "isTruthy": true
1193
+ },
1194
+ {
1195
+ "field": "style.roofMaterials",
1196
+ "isTruthy": true
1197
+ }
1198
+ ]
1199
+ }
1200
+ },
1201
+ {
1202
+ "text": "Roofscape variation should reinforce parcel rhythm and emphasize terraces facing the urban courtyard.",
1203
+ "when": {
1204
+ "any": [
1205
+ {
1206
+ "field": "style.roofType",
1207
+ "isTruthy": true
1208
+ },
1209
+ {
1210
+ "field": "style.roofscape",
1211
+ "isTruthy": true
1212
+ },
1213
+ {
1214
+ "field": "style.roofMaterials",
1215
+ "isTruthy": true
1216
+ }
1217
+ ]
1218
+ }
1219
+ },
1220
+ {
1221
+ "text": "Primary materials should align with parcel rhythm and reinforce facade diversity.",
1222
+ "when": {
1223
+ "field": "style.facadePrimary",
1224
+ "isTruthy": true
1225
+ }
1226
+ },
1227
+ {
1228
+ "text": "Material palettes should vary by parcel but remain coherent across the overall block.",
1229
+ "when": {
1230
+ "any": [
1231
+ {
1232
+ "field": "style.facadePrimary",
1233
+ "isTruthy": true
1234
+ },
1235
+ {
1236
+ "field": "style.facadeGround",
1237
+ "isTruthy": true
1238
+ },
1239
+ {
1240
+ "field": "style.facadeUpper",
1241
+ "isTruthy": true
1242
+ },
1243
+ {
1244
+ "field": "style.facadeVariation",
1245
+ "isTruthy": true
1246
+ },
1247
+ {
1248
+ "field": "style.facadeBays",
1249
+ "isTruthy": true
1250
+ }
1251
+ ]
1252
+ }
1253
+ }
1254
+ ]
1255
+ },
1256
+ "program": {
1257
+ "id": "program",
1258
+ "fields": [
1259
+ "program.building",
1260
+ "program.courtyard",
1261
+ "program.street",
1262
+ "toggle.landscaping",
1263
+ "toggle.people",
1264
+ "toggle.bicycles",
1265
+ "toggle.cars",
1266
+ "toggle.trams",
1267
+ "toggle.tech"
1268
+ ],
1269
+ "footerLines": [
1270
+ {
1271
+ "text": "The courtyard is internal and private; it remains separated from the public street with no direct openings.",
1272
+ "when": {
1273
+ "all": [
1274
+ {
1275
+ "field": "form.perimeter",
1276
+ "equals": "closed"
1277
+ },
1278
+ {
1279
+ "any": [
1280
+ {
1281
+ "field": "program.courtyard",
1282
+ "isTruthy": true
1283
+ },
1284
+ {
1285
+ "field": "toggle.landscaping",
1286
+ "isTruthy": true
1287
+ }
1288
+ ]
1289
+ }
1290
+ ]
1291
+ }
1292
+ },
1293
+ {
1294
+ "text": "Courtyard elements should read as functional, lived-in residential amenities rather than decorative set pieces.",
1295
+ "when": {
1296
+ "any": [
1297
+ {
1298
+ "field": "program.courtyard",
1299
+ "isTruthy": true
1300
+ },
1301
+ {
1302
+ "field": "toggle.landscaping",
1303
+ "isTruthy": true
1304
+ }
1305
+ ]
1306
+ }
1307
+ },
1308
+ {
1309
+ "text": "The urban courtyard should feel protected, social, and clearly framed by surrounding facades.",
1310
+ "when": {
1311
+ "any": [
1312
+ {
1313
+ "field": "program.courtyard",
1314
+ "isTruthy": true
1315
+ },
1316
+ {
1317
+ "field": "toggle.landscaping",
1318
+ "isTruthy": true
1319
+ }
1320
+ ]
1321
+ }
1322
+ },
1323
+ {
1324
+ "text": "Street-level program should reinforce active ground floors and human-scale civic frontage.",
1325
+ "when": {
1326
+ "any": [
1327
+ {
1328
+ "field": "program.street",
1329
+ "isTruthy": true
1330
+ },
1331
+ {
1332
+ "field": "toggle.people",
1333
+ "isTruthy": true
1334
+ },
1335
+ {
1336
+ "field": "toggle.bicycles",
1337
+ "isTruthy": true
1338
+ },
1339
+ {
1340
+ "field": "toggle.cars",
1341
+ "isTruthy": true
1342
+ },
1343
+ {
1344
+ "field": "toggle.trams",
1345
+ "isTruthy": true
1346
+ },
1347
+ {
1348
+ "field": "toggle.tech",
1349
+ "isTruthy": true
1350
+ }
1351
+ ]
1352
+ }
1353
+ },
1354
+ {
1355
+ "text": "Public realm elements should feel integrated into the street wall rather than placed as isolated objects.",
1356
+ "when": {
1357
+ "any": [
1358
+ {
1359
+ "field": "program.street",
1360
+ "isTruthy": true
1361
+ },
1362
+ {
1363
+ "field": "toggle.people",
1364
+ "isTruthy": true
1365
+ },
1366
+ {
1367
+ "field": "toggle.bicycles",
1368
+ "isTruthy": true
1369
+ },
1370
+ {
1371
+ "field": "toggle.cars",
1372
+ "isTruthy": true
1373
+ },
1374
+ {
1375
+ "field": "toggle.trams",
1376
+ "isTruthy": true
1377
+ },
1378
+ {
1379
+ "field": "toggle.tech",
1380
+ "isTruthy": true
1381
+ }
1382
+ ]
1383
+ }
1384
+ },
1385
+ {
1386
+ "text": "Pedestrianized streets should exclude cars and prioritize people, seating, and micro-mobility.",
1387
+ "when": {
1388
+ "field": "program.street",
1389
+ "hasTag": "pedestrian"
1390
+ }
1391
+ }
1392
+ ]
1393
+ },
1394
+ "context": {
1395
+ "id": "context",
1396
+ "fields": [
1397
+ "context.location",
1398
+ "context.timeOfDay",
1399
+ "context.imageStyle",
1400
+ "context.styleReference"
1401
+ ],
1402
+ "footerLines": [
1403
+ {
1404
+ "text": "Regional character should influence signage, vegetation, and street-level detailing without overpowering the courtyard form.",
1405
+ "when": {
1406
+ "field": "context.location",
1407
+ "isTruthy": true
1408
+ }
1409
+ }
1410
+ ]
1411
+ }
1412
+ },
1413
+ "warnings": [
1414
+ {
1415
+ "id": "closed_oblique_pedestrian_paths",
1416
+ "message": "Closed perimeter + oblique view + pedestrian street + courtyard paths may encourage courtyard openings; consider a top-down view or reducing street/courtyard overlap.",
1417
+ "when": {
1418
+ "all": [
1419
+ {
1420
+ "field": "form.perimeter",
1421
+ "equals": "closed"
1422
+ },
1423
+ {
1424
+ "field": "view.viewpoint",
1425
+ "hasTag": "oblique"
1426
+ },
1427
+ {
1428
+ "field": "program.street",
1429
+ "hasTag": "pedestrian"
1430
+ },
1431
+ {
1432
+ "field": "program.courtyard",
1433
+ "hasTag": "paths"
1434
+ }
1435
+ ]
1436
+ }
1437
+ }
1438
+ ],
1439
+ "ui": {
1440
+ "panels": [
1441
+ {
1442
+ "id": "form",
1443
+ "label": "form",
1444
+ "blocks": [
1445
+ "form"
1446
+ ],
1447
+ "fields": [
1448
+ "form.perimeter",
1449
+ "form.geometry",
1450
+ "form.diversity",
1451
+ "form.height",
1452
+ "form.dimensions"
1453
+ ]
1454
+ },
1455
+ {
1456
+ "id": "view",
1457
+ "label": "view",
1458
+ "blocks": [
1459
+ "view"
1460
+ ],
1461
+ "fields": [
1462
+ "view.viewpoint",
1463
+ "view.variation",
1464
+ "view.composition"
1465
+ ]
1466
+ },
1467
+ {
1468
+ "id": "style",
1469
+ "label": "style",
1470
+ "blocks": [
1471
+ "style"
1472
+ ],
1473
+ "fields": [
1474
+ "style.roofType",
1475
+ "style.roofscape",
1476
+ "style.roofMaterials",
1477
+ "style.facadePrimary",
1478
+ "style.facadeGround",
1479
+ "style.facadeUpper",
1480
+ "style.facadeVariation",
1481
+ "style.facadeBays"
1482
+ ],
1483
+ "groups": [
1484
+ {
1485
+ "label": "roofscape",
1486
+ "fields": [
1487
+ "style.roofType",
1488
+ "style.roofscape",
1489
+ "style.roofMaterials"
1490
+ ]
1491
+ },
1492
+ {
1493
+ "label": "facade / materials",
1494
+ "fields": [
1495
+ "style.facadePrimary",
1496
+ "style.facadeGround",
1497
+ "style.facadeUpper",
1498
+ "style.facadeVariation",
1499
+ "style.facadeBays"
1500
+ ]
1501
+ }
1502
+ ]
1503
+ },
1504
+ {
1505
+ "id": "program",
1506
+ "label": "program",
1507
+ "blocks": [
1508
+ "program"
1509
+ ],
1510
+ "fields": [
1511
+ "program.building",
1512
+ "program.courtyard",
1513
+ "program.street",
1514
+ "toggle.landscaping",
1515
+ "toggle.people",
1516
+ "toggle.bicycles",
1517
+ "toggle.cars",
1518
+ "toggle.trams",
1519
+ "toggle.tech"
1520
+ ],
1521
+ "groups": [
1522
+ {
1523
+ "label": "building program",
1524
+ "fields": [
1525
+ "program.building"
1526
+ ]
1527
+ },
1528
+ {
1529
+ "label": "courtyard program",
1530
+ "fields": [
1531
+ "program.courtyard",
1532
+ "toggle.landscaping",
1533
+ "toggle.people"
1534
+ ]
1535
+ },
1536
+ {
1537
+ "label": "urban program / street",
1538
+ "fields": [
1539
+ "program.street",
1540
+ "toggle.bicycles",
1541
+ "toggle.cars",
1542
+ "toggle.trams",
1543
+ "toggle.tech"
1544
+ ]
1545
+ }
1546
+ ]
1547
+ },
1548
+ {
1549
+ "id": "context",
1550
+ "label": "context",
1551
+ "blocks": [
1552
+ "context"
1553
+ ],
1554
+ "fields": [
1555
+ "context.location",
1556
+ "context.timeOfDay",
1557
+ "context.imageStyle",
1558
+ "context.styleReference"
1559
+ ],
1560
+ "groups": [
1561
+ {
1562
+ "label": "context",
1563
+ "fields": [
1564
+ "context.location",
1565
+ "context.timeOfDay",
1566
+ "context.imageStyle"
1567
+ ]
1568
+ },
1569
+ {
1570
+ "label": "style reference",
1571
+ "fields": [
1572
+ "context.styleReference"
1573
+ ]
1574
+ }
1575
+ ]
1576
+ }
1577
+ ]
1578
+ }
1579
+ };