{
  "$comment": "Wedding thank-you cards (23 Sep 2026; Wedding bundles). A folded card in packs of ten with envelopes that matches the couple's Vows print: the engraved wreath or laurel with the two of them engraved inside from a photo (/v1/couple-portraits, the same drawing as the print) or their initials, their names, a thank-you line and the date, in the print's colours and lettering. Inside blank. A printed inside message is built in the composer but HELD (round 20): the order path cannot send a per-order inside file yet; see output/generator-overhaul/r20-vows-wedding/INSIDE-PRINT-PLAN.md. The composer is tools/design-harness/src/compose-weddingcards.mjs; the page shows the A5 front. The Vows page's Matching thank-you cards link hands its names, date, look and portrait over through the ar-more-from session handoff. The couple's own wedding photo can go on the back (owner, 28 Sep 2026): the Finishing touches file box uploads it to /v1/wedding-card-photos (kept by its hash, as the newspaper keeps the buyer's photo) and the page's Back view shows it. Critic r18 (29 Sep 2026): the same photo can lead the FRONT (the Your photo ornament, which takes the None chip's place; none stays a valid id), it prints in black and white by default (photoMono), and the upload moved up into Your cards.",
  "configVersion": 1,
  "designId": "wedding-thank-you-cards",
  "rendererVersion": "wedding-thank-you-cards/0.13.0",
  "service": {
    "origin": "",
    "savePath": "/v1/designs",
    "analyticsPath": "/v1/analytics/events",
    "previewDebounceMs": 160
  },
  "sheet": {
    "width": 1000,
    "height": 1418.76
  },
  "assetVersion": "2026-09-30.2",
  "preview": {
    "exampleAsset": "design-wedding-thank-you-cards-example.jpg",
    "exampleAlt": "A wedding thank-you card front on ivory: a painted wreath of lily of the valley, the flower of May, with red roses and pink sweet peas, tied with a sage ribbon, Thank you in a teal script inside it, the names Hayley & Tom beneath and 14 May 2026 in small capitals.",
    "seed": {
      "couple": "Hayley & Tom",
      "when": "14 May 2026",
      "greeting": "thank-you",
      "words": "",
      "ornament": "garland",
      "colourway": "ivory",
      "typeface": "script",
      "texture": "grain",
      "backdrop": "none",
      "flowers": "rose-sweet-pea"
    },
    "wall": false
  },
  "fields": {
    "$comment": "The names, the date and the couple from a photo; the thank-you line; the wedding photo (front with Your photo, and the back) with its black-and-white and back switches; five style sets shared with the Vows print, always visible.",
    "requiredLabel": "Your cards",
    "optionsLabel": "The look",
    "moreLabel": "Finishing touches",
    "required": [
      {
        "key": "couple",
        "type": "text",
        "label": "Your names, together",
        "maxLength": 50,
        "affects": "render",
        "hint": "Your names as you sign them: Hayley & Tom, or Mr & Mrs Bennett. Your initials go on the back.",
        "placeholder": "Hayley & Tom"
      },
      {
        "key": "whenGroup",
        "type": "columns",
        "$comment": "The date, then the two of you from a photo, as on the Vows print (the shell caps the top-level required fields at four).",
        "columns": [
          [
            {
              "key": "when",
              "type": "text",
              "label": "The wedding date",
              "maxLength": 60,
              "affects": "render",
              "hint": "In small capitals at the foot, and on the back. Optional; add the place after a comma and it sets on its own line. With the flowers, the month's own flower leads.",
              "placeholder": "14 May 2026, Babington House",
              "optional": true
            },
            {
              "key": "portrait",
              "type": "file",
              "label": "The two of you, from a photo",
              "hint": "Free. A clear photo of you both, and we engrave you together in about 20 seconds: inside the wreath, or in an oval above the posy. We only draw grown-ups. We never keep your photo.",
              "accept": "image/*",
              "maxBytes": 26214400,
              "reading": "Engraving the two of you — about 20 seconds…",
              "tooLarge": "That photo is too large. Try one under 25 MB.",
              "progressSeconds": 22,
              "waitPulse": "[data-layer=\"portrait\"]",
              "optional": true,
              "affects": "render",
              "showWhen": {
                "key": "ornament",
                "equals": [
                  "wreath",
                  "stems",
                  "posy",
                  "garland"
                ]
              }
            },
            {
              "key": "showPortrait",
              "type": "toggle",
              "label": "Show the two of you",
              "default": true,
              "optional": true,
              "affects": "render",
              "hint": "Turn it off for Thank you inside the wreath, your initials in the engraved wreath, or the posy on its own.",
              "showWhen": {
                "key": "portrait",
                "notEmpty": true
              }
            }
          ]
        ]
      },
      {
        "key": "lineGroup",
        "type": "columns",
        "columns": [
          [
            {
              "key": "greeting",
              "type": "thumbnails",
              "label": "The thank-you line",
              "hint": "In the script, beneath your names.",
              "default": "thank-you",
              "affects": "render",
              "options": [
                {
                  "value": "thank-you",
                  "label": "Thank you"
                },
                {
                  "value": "with-thanks",
                  "label": "With love & thanks"
                },
                {
                  "value": "our-day",
                  "label": "Thank you for sharing our day"
                },
                {
                  "value": "own",
                  "label": "Your own words"
                }
              ]
            },
            {
              "key": "words",
              "type": "text",
              "label": "Your own words",
              "maxLength": 64,
              "affects": "render",
              "hint": "Up to 64 letters; a long line takes two. Until you type, the card shows an example.",
              "placeholder": "Thank you for coming",
              "showWhen": {
                "key": "greeting",
                "equals": "own"
              }
            }
          ]
        ]
      },
      {
        "key": "photoGroup",
        "type": "columns",
        "$comment": "Critic r18: the wedding photo leads the front with Your photo, so its upload sits with the details, not in the finishing touches (the fourth and last top-level required field).",
        "columns": [
          [
            {
              "key": "backPhoto",
              "type": "file",
              "label": "Your wedding photo",
              "hint": "Optional. Framed on the back of every card, above your initials, or large on the front when you pick the photo look. A photo straight from your phone is perfect. We keep it only to print your cards.",
              "accept": "image/*",
              "maxBytes": 26214400,
              "button": "Upload a photo",
              "reading": "Adding your photo…",
              "tooLarge": "That photo is too large. Try one under 25 MB.",
              "optional": true,
              "affects": "render",
              "showSide": "back",
              "showSideWhen": {
                "key": "ornament",
                "equals": "photo",
                "side": "front"
              }
            },
            {
              "key": "photoMono",
              "type": "toggle",
              "label": "Black and white",
              "default": true,
              "optional": true,
              "affects": "render",
              "hint": "Softly toned to your card's colours. Turn it off to print your photo in colour.",
              "showWhen": {
                "key": "backPhoto",
                "notEmpty": true
              }
            },
            {
              "key": "showBackPhoto",
              "type": "toggle",
              "label": "Photo on the back",
              "default": true,
              "optional": true,
              "affects": "render",
              "hint": "Turn it off for your initials and the date alone on the back.",
              "showSide": "back",
              "showWhen": {
                "key": "backPhoto",
                "notEmpty": true,
                "all": [
                  {
                    "key": "backPhoto",
                    "notEmpty": true
                  },
                  {
                    "key": "ornament",
                    "equals": [
                      "wreath",
                      "posy",
                      "stems",
                      "rules",
                      "garland"
                    ]
                  }
                ]
              },
              "$comment": "Round 19: with Your photo the back's copy is `photoTwice` (below), so this switch is for the other ornaments. `all` needs the shell's ruleHolds to learn it (named in the r19 report); an older shell reads key/notEmpty as before."
            },
            {
              "key": "photoTwice",
              "type": "toggle",
              "label": "Also on the back",
              "default": false,
              "affects": "render",
              "optional": true,
              "hint": "Your photo leads the front. Turn this on to frame it on the back as well, above your initials.",
              "showWhen": {
                "key": "ornament",
                "equals": "photo",
                "all": [
                  {
                    "key": "ornament",
                    "equals": "photo"
                  },
                  {
                    "key": "backPhoto",
                    "notEmpty": true
                  }
                ]
              },
              "$comment": "Round 19 (critic r19 [1]): the same photo printed twice on every card read as filler, so a Your photo card's back is the plain back (initials, date, the month's flower) unless this is on. Saved only when true (worker: keep `photoTwice: true`, drop anything else)."
            }
          ]
        ]
      }
    ],
    "options": [
      {
        "key": "ornament",
        "type": "thumbnails",
        "label": "The ornament",
        "hint": "",
        "default": "wreath",
        "affects": "render",
        "options": [
          {
            "value": "garland",
            "label": "Flower wreath",
            "thumbnail": "design-wedding-thank-you-cards-ornament-garland.jpg",
            "description": "a painted wreath of your wedding month's flower and the two you pick, Thank you inside it"
          },
          {
            "value": "wreath",
            "label": "Wreath",
            "thumbnail": "design-wedding-thank-you-cards-ornament-wreath.jpg",
            "description": "your initials or the two of you inside the engraved wreath"
          },
          {
            "value": "posy",
            "label": "Posy",
            "thumbnail": "design-wedding-thank-you-cards-ornament-posy.jpg",
            "description": "a hand-tied bouquet of your wedding month's flower and the two you pick, tied with a ribbon, with the two of you above it when you add a photo"
          },
          {
            "value": "photo",
            "label": "Your photo",
            "thumbnail": "design-wedding-thank-you-cards-ornament-photo.jpg",
            "description": "your wedding photo large on the front, with Thank you, your names and the date beneath"
          },
          {
            "value": "stems",
            "label": "Laurel",
            "thumbnail": "design-wedding-thank-you-cards-ornament-stems.jpg",
            "description": "your initials or the two of you inside the engraved laurel",
            "retired": true
          },
          {
            "value": "rules",
            "label": "Fine lines",
            "thumbnail": "design-wedding-thank-you-cards-ornament-rules.jpg",
            "description": "your initials between two fine lines"
          }
        ],
        "$comment": "Five chips (owner's rule). Critic r18: Your photo replaces None (your initials alone). Round 28 (critic r27 [1]): the Flower wreath (painted, the thank-you inside it) leads and replaces the Laurel chip, the nearest twin of the engraved Wreath; `stems` and `none` stay valid everywhere (composer, worker, recipes, the Vows hand-off) and show for a saved design that holds them."
      },
      {
        "key": "flowers",
        "type": "thumbnails",
        "label": "Your wedding flowers",
        "hint": "Your wedding month's flower leads; pick the two that join it.",
        "default": "rose-sweet-pea",
        "affects": "render",
        "options": [
          {
            "value": "rose-sweet-pea",
            "label": "Rose & sweet pea",
            "thumbnail": "design-wedding-thank-you-cards-flowers-rose-sweet-pea.jpg"
          },
          {
            "value": "daisy-cosmos",
            "label": "Daisy & cosmos",
            "thumbnail": "design-wedding-thank-you-cards-flowers-daisy-cosmos.jpg"
          },
          {
            "value": "larkspur-honeysuckle",
            "label": "Larkspur & honeysuckle",
            "thumbnail": "design-wedding-thank-you-cards-flowers-larkspur-honeysuckle.jpg"
          },
          {
            "value": "aster-chrysanthemum",
            "label": "Aster & chrysanthemum",
            "thumbnail": "design-wedding-thank-you-cards-flowers-aster-chrysanthemum.jpg"
          },
          {
            "value": "narcissus-holly",
            "label": "Narcissus & holly",
            "thumbnail": "design-wedding-thank-you-cards-flowers-narcissus-holly.jpg"
          }
        ],
        "showWhen": {
          "key": "ornament",
          "equals": [
            "garland",
            "posy",
            "photo"
          ]
        },
        "$comment": "Round 28 (critic r27 [1]): the two flowers that join the month's own in the Flower wreath, the Posy's bouquet and the sprig on the back (Your photo's too). One tap for a colour-matched pair; when the month's flower is one of the pair, the pair's spare takes its place (weddingcards-presets.mjs FLOWER_MIXES). Worker: keep `flowers` when it is one of these five ids."
      },
      {
        "key": "colourway",
        "type": "thumbnails",
        "label": "Colours",
        "hint": "",
        "default": "ivory",
        "affects": "render",
        "options": [
          {
            "value": "ivory",
            "label": "Ivory",
            "thumbnail": "design-wedding-thank-you-cards-colourway-ivory.jpg",
            "sheet": "light"
          },
          {
            "value": "meadow",
            "label": "Meadow",
            "thumbnail": "design-wedding-thank-you-cards-colourway-meadow.jpg",
            "sheet": "light"
          },
          {
            "value": "blush",
            "label": "Blush",
            "thumbnail": "design-wedding-thank-you-cards-colourway-blush.jpg",
            "sheet": "light"
          },
          {
            "value": "ink",
            "label": "Ink",
            "thumbnail": "design-wedding-thank-you-cards-colourway-ink.jpg",
            "sheet": "dark",
            "retired": true
          },
          {
            "value": "midnight",
            "label": "Midnight",
            "thumbnail": "design-wedding-thank-you-cards-colourway-midnight.jpg",
            "sheet": "dark"
          },
          {
            "value": "clay",
            "label": "Clay",
            "thumbnail": "design-wedding-thank-you-cards-colourway-clay.jpg",
            "sheet": "light"
          }
        ]
      },
      {
        "key": "typeface",
        "type": "thumbnails",
        "label": "Lettering",
        "hint": "",
        "default": "classic",
        "affects": "render",
        "options": [
          {
            "value": "classic",
            "label": "Classic",
            "thumbnail": "design-wedding-thank-you-cards-typeface-classic.jpg"
          },
          {
            "value": "modern",
            "label": "Modern",
            "thumbnail": "design-wedding-thank-you-cards-typeface-modern.jpg"
          },
          {
            "value": "soft-serif",
            "label": "Soft serif",
            "thumbnail": "design-wedding-thank-you-cards-typeface-soft-serif.jpg"
          },
          {
            "value": "editorial",
            "label": "Editorial",
            "thumbnail": "design-wedding-thank-you-cards-typeface-editorial.jpg"
          },
          {
            "value": "script",
            "label": "Script",
            "thumbnail": "design-wedding-thank-you-cards-typeface-script.jpg"
          }
        ]
      },
      {
        "key": "texture",
        "type": "thumbnails",
        "label": "Printed texture",
        "hint": "A printed paper look on smooth 300 gsm card.",
        "default": "grain",
        "affects": "render",
        "options": [
          {
            "value": "none",
            "label": "Smooth",
            "thumbnail": "design-wedding-thank-you-cards-texture-none.jpg"
          },
          {
            "value": "grain",
            "label": "Fine grain",
            "thumbnail": "design-wedding-thank-you-cards-texture-grain.jpg"
          },
          {
            "value": "fibre",
            "label": "Handmade",
            "thumbnail": "design-wedding-thank-you-cards-texture-fibre.jpg"
          },
          {
            "value": "cardstock",
            "label": "Cardstock",
            "thumbnail": "design-wedding-thank-you-cards-texture-cardstock.jpg"
          },
          {
            "value": "linen",
            "label": "Linen",
            "thumbnail": "design-wedding-thank-you-cards-texture-linen.jpg"
          }
        ]
      },
      {
        "key": "backdrop",
        "type": "thumbnails",
        "label": "Background",
        "hint": "",
        "default": "none",
        "affects": "render",
        "options": [
          {
            "value": "none",
            "label": "Plain",
            "thumbnail": "design-wedding-thank-you-cards-backdrop-none.jpg"
          },
          {
            "value": "watercolour",
            "label": "Watercolour",
            "thumbnail": "design-wedding-thank-you-cards-backdrop-watercolour.jpg",
            "description": "soft wet blooms of blush and sage",
            "sheet": "light",
            "swapTo": "ink-bloom"
          },
          {
            "value": "dust",
            "label": "Colour dust",
            "thumbnail": "design-wedding-thank-you-cards-backdrop-dust.jpg",
            "description": "a fine scatter of gold and rose",
            "sheet": "light",
            "swapTo": "candlelight"
          },
          {
            "value": "ink-bloom",
            "label": "Ink bloom",
            "thumbnail": "design-wedding-thank-you-cards-backdrop-ink-bloom.jpg",
            "description": "ink and a thread of gold blooming in dark water",
            "sheet": "dark",
            "swapTo": "watercolour"
          },
          {
            "value": "candlelight",
            "label": "Candlelight",
            "thumbnail": "design-wedding-thank-you-cards-backdrop-candlelight.jpg",
            "description": "warm amber glows at the edges of a dark room",
            "sheet": "dark",
            "swapTo": "dust"
          }
        ],
        "$comment": "Five wedding papers on show (critic r8, 23 Sep 2026): the seasonal and night-sky ones read wrong on a wedding card. The other ids (aurora, nebula, snowfall, powder, frost, holly, parchment) stay valid everywhere: a saved design or a Vows hand-off that carries one still renders it and the worker still accepts it; they are only not offered here."
      }
    ],
    "more": [],
    "printed": "As printed: {couple}, {when}."
  },
  "presets": {
    "$comment": "Four ways in and a blank start. A tap fills the line and the look; the names stay the customer's.",
    "label": "Start from an idea",
    "options": [
      {
        "id": "the-wreath",
        "label": "The flower wreath",
        "values": {
          "couple": "Hayley & Tom",
          "when": "14 May 2026",
          "greeting": "thank-you",
          "words": "",
          "ornament": "garland",
          "colourway": "meadow",
          "typeface": "soft-serif",
          "texture": "grain",
          "backdrop": "none",
          "flowers": "daisy-cosmos"
        },
        "$comment": "Round 29 (critic r29 [3]: \"The wreath\" swapped the painted flowers for the grey engraved wreath): id kept for saved links; now the painted Flower wreath, daisies and cosmos on meadow green."
      },
      {
        "id": "the-laurel",
        "label": "The posy",
        "values": {
          "couple": "Hayley & Tom",
          "when": "14 May 2026",
          "greeting": "with-thanks",
          "words": "",
          "ornament": "posy",
          "colourway": "ivory",
          "typeface": "soft-serif",
          "texture": "fibre",
          "backdrop": "none",
          "flowers": "aster-chrysanthemum"
        },
        "$comment": "Round 29 (critic r29 [3]: \"The laurel\" promised flowers and gave pink engraved leaves): id kept for saved links; now the hand-tied posy, asters and chrysanthemums on ivory. The engraved look stays in An evening wedding."
      },
      {
        "id": "evening",
        "label": "An evening wedding",
        "values": {
          "couple": "Hayley & Tom",
          "when": "14 May 2026",
          "greeting": "thank-you",
          "words": "",
          "ornament": "wreath",
          "colourway": "midnight",
          "typeface": "editorial",
          "texture": "none",
          "backdrop": "none"
        }
      },
      {
        "id": "our-day",
        "label": "Your wedding photo",
        "values": {
          "couple": "Hayley & Tom",
          "when": "14 May 2026",
          "greeting": "our-day",
          "words": "",
          "ornament": "photo",
          "colourway": "clay",
          "typeface": "script",
          "texture": "cardstock",
          "backdrop": "none"
        },
        "$comment": "Round 19 (critic r19 [3]): the format couples search for most had no way in. Id kept for saved links; its greeting, Thank you for sharing our day, kept. Tapped with no photo yet, the card shows the frame waiting for it."
      },
      {
        "id": "blank",
        "label": "Custom",
        "values": {
          "words": ""
        }
      }
    ]
  },
  "recipes": {
    "$comment": "Three named looks, look keys only: the page composes the customer's own names in each. The Vows print's own pairings. Critic r16: ivory-classic (id kept for saved links) is now Evening gold; as the Ivory wreath it made the same card as The wreath idea. Critic r19 [4]: meadow-stems (id kept) was The laurel idea in green; round 20: it is now Your photo on meadow (the seed is already a posy on blush); with no photo yet the page draws a sample couple, ghosted, in the frame. Round 28 (critic r27 [4]): Evening gold drops the candlelight bokeh the birth chart retired; plain midnight card. Round 29 (critic r29 [2]: none of the three showed the painted flowers): ivory-classic (id kept) is the Winter wreath, midnight-plain (id kept) the Posy on blush, and Your photo on meadow now carries daisies and cosmos over the frame’s corner.",
    "items": [
      {
        "id": "ivory-classic",
        "label": "Winter wreath",
        "note": "A painted wreath of holly, narcissus and your month’s flower on midnight card, tied with a cream bow.",
        "look": {
          "colourway": "midnight",
          "typeface": "script",
          "texture": "none",
          "backdrop": "none",
          "ornament": "garland",
          "flowers": "narcissus-holly"
        }
      },
      {
        "id": "midnight-plain",
        "label": "Posy on blush",
        "note": "A hand-tied posy of larkspur, honeysuckle and your month’s flower on blush card, a pink bow at the tie.",
        "look": {
          "colourway": "blush",
          "typeface": "script",
          "texture": "fibre",
          "backdrop": "none",
          "ornament": "posy",
          "flowers": "larkspur-honeysuckle"
        }
      },
      {
        "id": "meadow-stems",
        "label": "Your photo on meadow",
        "needs": "backPhoto",
        "note": "Needs your wedding photo: large on soft green card, daisies and cosmos tucked over its corner.",
        "look": {
          "colourway": "meadow",
          "typeface": "soft-serif",
          "texture": "grain",
          "backdrop": "none",
          "ornament": "photo",
          "flowers": "daisy-cosmos"
        }
      }
    ]
  },
  "surprise": {
    "$comment": "The Vows print's curated looks, each with its own ornament (round 28, critic r27 [3]: with the ornament left to the roll, six surprises in a row were one lily posy in six bows). No `layouts`: the shell re-rolls a look's own ornament half the time when it has them.",
    "layoutKey": "ornament",
    "looks": [
      {
        "colourway": "ivory",
        "typeface": "script",
        "texture": "grain",
        "backdrop": "none",
        "ornament": "garland",
        "flowers": "rose-sweet-pea"
      },
      {
        "colourway": "midnight",
        "typeface": "soft-serif",
        "texture": "none",
        "backdrop": "none",
        "ornament": "wreath"
      },
      {
        "colourway": "meadow",
        "typeface": "soft-serif",
        "texture": "grain",
        "backdrop": "none",
        "ornament": "garland",
        "flowers": "daisy-cosmos"
      },
      {
        "colourway": "blush",
        "typeface": "script",
        "texture": "fibre",
        "backdrop": "none",
        "ornament": "posy",
        "flowers": "larkspur-honeysuckle"
      },
      {
        "colourway": "clay",
        "typeface": "editorial",
        "texture": "cardstock",
        "backdrop": "none",
        "ornament": "rules"
      },
      {
        "colourway": "midnight",
        "typeface": "script",
        "texture": "none",
        "backdrop": "none",
        "ornament": "posy",
        "flowers": "daisy-cosmos"
      },
      {
        "colourway": "ivory",
        "typeface": "classic",
        "texture": "linen",
        "backdrop": "none",
        "ornament": "stems"
      }
    ]
  },
  "cart": {
    "summary": "{couple} · {greeting.label} · {colourway.label}",
    "finishLabel": "Pack of 10 cards",
    "reviewLabel": "Review your cards"
  }
}
