{
  "id": "sudoku_game",
  "type": "module",
  "version": "1.1",
  "context": {
    "layout": "phone",
    "title": "Sudoku Puzzles",
    "icon": "🔢"
  },
  "state": {
    "completedIds": [],
    "currentId": "",
    "currentSize": 0,
    "currentNumber": 0,
    "givens": [],
    "solution": [],
    "entries": [],
    "nums": [],
    "selected": -1,
    "hint": "Choose a puzzle to begin.",
    "showSolved": false,
    "base4": [
      1,
      2,
      3,
      4,
      3,
      4,
      1,
      2,
      2,
      1,
      4,
      3,
      4,
      3,
      2,
      1
    ],
    "base6": [
      1,
      2,
      3,
      4,
      5,
      6,
      4,
      5,
      6,
      1,
      2,
      3,
      2,
      3,
      4,
      5,
      6,
      1,
      5,
      6,
      1,
      2,
      3,
      4,
      3,
      4,
      5,
      6,
      1,
      2,
      6,
      1,
      2,
      3,
      4,
      5
    ],
    "base9": [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      4,
      5,
      6,
      7,
      8,
      9,
      1,
      2,
      3,
      7,
      8,
      9,
      1,
      2,
      3,
      4,
      5,
      6,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      1,
      5,
      6,
      7,
      8,
      9,
      1,
      2,
      3,
      4,
      8,
      9,
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      1,
      2,
      6,
      7,
      8,
      9,
      1,
      2,
      3,
      4,
      5,
      9,
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8
    ],
    "masks4": [
      [
        0,
        1,
        3,
        5,
        6,
        9,
        10,
        12,
        15
      ],
      [
        0,
        2,
        5,
        7,
        8,
        11,
        13,
        14
      ],
      [
        1,
        3,
        4,
        6,
        9,
        10,
        12,
        15
      ],
      [
        0,
        2,
        5,
        7,
        8,
        11,
        13,
        14
      ],
      [
        0,
        1,
        3,
        5,
        6,
        9,
        10,
        12,
        15
      ],
      [
        1,
        2,
        4,
        7,
        8,
        10,
        13,
        15
      ]
    ],
    "masks6": [
      [
        0,
        3,
        5,
        7,
        8,
        10,
        12,
        14,
        17,
        19,
        21,
        22,
        24,
        26,
        28,
        31,
        33,
        35
      ],
      [
        0,
        2,
        4,
        6,
        9,
        11,
        13,
        14,
        16,
        18,
        20,
        23,
        25,
        27,
        29,
        30,
        32,
        35
      ],
      [
        1,
        3,
        5,
        6,
        8,
        10,
        12,
        15,
        17,
        19,
        20,
        22,
        24,
        27,
        28,
        31,
        32,
        34
      ],
      [
        0,
        1,
        5,
        7,
        9,
        11,
        12,
        14,
        16,
        18,
        21,
        23,
        25,
        26,
        28,
        30,
        33,
        35
      ],
      [
        0,
        3,
        4,
        6,
        8,
        11,
        13,
        15,
        17,
        18,
        20,
        22,
        24,
        26,
        29,
        31,
        33,
        34
      ],
      [
        1,
        2,
        5,
        6,
        9,
        10,
        12,
        14,
        17,
        19,
        21,
        23,
        24,
        27,
        29,
        30,
        32,
        35
      ]
    ],
    "masks9": [
      [
        0,
        1,
        3,
        5,
        8,
        9,
        11,
        13,
        15,
        16,
        19,
        20,
        22,
        23,
        26,
        27,
        30,
        31,
        33,
        35,
        37,
        39,
        41,
        43,
        44,
        45,
        47,
        49,
        50,
        52,
        54,
        55,
        57,
        60,
        62,
        64,
        65,
        67,
        69,
        70,
        72,
        75,
        77,
        79,
        80
      ],
      [
        0,
        2,
        4,
        6,
        8,
        10,
        12,
        14,
        16,
        17,
        18,
        20,
        21,
        23,
        25,
        28,
        29,
        31,
        34,
        35,
        36,
        38,
        40,
        42,
        44,
        46,
        47,
        49,
        51,
        53,
        54,
        56,
        58,
        60,
        61,
        63,
        65,
        67,
        68,
        71,
        72,
        74,
        76,
        78,
        80
      ],
      [
        1,
        3,
        4,
        7,
        8,
        9,
        10,
        13,
        14,
        17,
        18,
        21,
        22,
        24,
        26,
        27,
        29,
        32,
        33,
        35,
        36,
        39,
        40,
        43,
        44,
        45,
        48,
        49,
        51,
        52,
        55,
        56,
        58,
        61,
        62,
        63,
        64,
        66,
        69,
        71,
        73,
        74,
        77,
        78,
        80
      ],
      [
        0,
        1,
        4,
        6,
        7,
        11,
        12,
        13,
        15,
        17,
        18,
        19,
        22,
        24,
        25,
        27,
        28,
        31,
        32,
        35,
        37,
        38,
        40,
        41,
        44,
        45,
        46,
        49,
        51,
        53,
        54,
        57,
        58,
        59,
        62,
        64,
        65,
        68,
        70,
        71,
        72,
        73,
        76,
        78,
        79
      ],
      [
        0,
        2,
        3,
        5,
        7,
        9,
        12,
        13,
        16,
        17,
        18,
        20,
        22,
        24,
        26,
        28,
        30,
        32,
        34,
        35,
        36,
        37,
        40,
        43,
        44,
        45,
        47,
        48,
        50,
        53,
        54,
        56,
        59,
        60,
        62,
        63,
        65,
        66,
        68,
        71,
        73,
        75,
        76,
        78,
        80
      ],
      [
        1,
        2,
        4,
        5,
        8,
        9,
        10,
        12,
        15,
        17,
        19,
        21,
        22,
        23,
        25,
        27,
        29,
        30,
        33,
        35,
        36,
        38,
        41,
        42,
        44,
        46,
        48,
        49,
        52,
        53,
        54,
        55,
        58,
        60,
        61,
        64,
        66,
        67,
        70,
        71,
        72,
        74,
        77,
        79,
        80
      ]
    ]
  },
  "dependencies": [
    {
      "repository": {
        "local": {
          "id": "sudoku_progress_store",
          "config": {}
        }
      }
    },
    {
      "service": {
        "audio": {
          "id": "sudoku_audio"
        }
      }
    }
  ],
  "events": {
    "onAppear": [
      {
        "repo": {
          "id": "load_progress",
          "input": {
            "repositoryId": "sudoku_progress_store",
            "operation": "read",
            "params": {
              "collection": "progress",
              "documentId": "status"
            }
          },
          "output": {
            "success": [
              {
                "state": {
                  "id": "hydrate_progress",
                  "input": {
                    "completedIds": "{{ notEmpty(@{load_progress.completedIds}) ? @{load_progress.completedIds} : [] }}"
                  }
                }
              }
            ]
          }
        }
      }
    ]
  },
  "children": [
    {
      "id": "sudoku_tabs",
      "type": "tab",
      "children": [
        {
          "id": "tab4_mod",
          "type": "module",
          "context": {
            "_tabTitle": "4×4",
            "_tabImage": "square.grid.2x2"
          },
          "state": {
            "p": 0,
            "entries": [
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0
            ],
            "selected": -1,
            "completedIds": [],
            "base": [
              1,
              2,
              3,
              4,
              3,
              4,
              1,
              2,
              2,
              1,
              4,
              3,
              4,
              3,
              2,
              1
            ],
            "masks": [
              [
                0,
                1,
                3,
                5,
                6,
                9,
                10,
                12,
                15
              ],
              [
                0,
                2,
                5,
                7,
                8,
                11,
                13,
                14
              ],
              [
                1,
                3,
                4,
                6,
                9,
                10,
                12,
                15
              ],
              [
                0,
                2,
                4,
                5,
                7,
                8,
                11,
                13,
                14
              ],
              [
                0,
                1,
                2,
                3,
                5,
                6,
                9,
                10,
                12,
                15
              ],
              [
                1,
                2,
                4,
                7,
                8,
                10,
                13,
                15
              ]
            ],
            "nums": [
              1,
              2,
              3,
              4
            ]
          },
          "events": {
            "onAppear": [
              {
                "repo": {
                  "id": "load_legacy4",
                  "input": {
                    "repositoryId": "sudoku_progress_store",
                    "operation": "read",
                    "params": {
                      "collection": "progress",
                      "documentId": "status"
                    }
                  },
                  "output": {
                    "success": [
                      {
                        "repo": {
                          "id": "load_progress4",
                          "input": {
                            "repositoryId": "sudoku_progress_store",
                            "operation": "read",
                            "params": {
                              "collection": "progress",
                              "documentId": "sudoku"
                            }
                          },
                          "output": {
                            "success": [
                              {
                                "state": {
                                  "id": "hydrate_progress4",
                                  "input": {
                                    "completedIds": "{{ keys({} + (contains((empty(@{load_legacy4.completedIds}) ? [] : @{load_legacy4.completedIds}) + (empty(@{load_progress4.completedIds}) ? [] : @{load_progress4.completedIds}), '4-0') ? {'4-0': true} : {}) + (contains((empty(@{load_legacy4.completedIds}) ? [] : @{load_legacy4.completedIds}) + (empty(@{load_progress4.completedIds}) ? [] : @{load_progress4.completedIds}), '4-1') ? {'4-1': true} : {}) + (contains((empty(@{load_legacy4.completedIds}) ? [] : @{load_legacy4.completedIds}) + (empty(@{load_progress4.completedIds}) ? [] : @{load_progress4.completedIds}), '4-2') ? {'4-2': true} : {}) + (contains((empty(@{load_legacy4.completedIds}) ? [] : @{load_legacy4.completedIds}) + (empty(@{load_progress4.completedIds}) ? [] : @{load_progress4.completedIds}), '4-3') ? {'4-3': true} : {}) + (contains((empty(@{load_legacy4.completedIds}) ? [] : @{load_legacy4.completedIds}) + (empty(@{load_progress4.completedIds}) ? [] : @{load_progress4.completedIds}), '4-4') ? {'4-4': true} : {}) + (contains((empty(@{load_legacy4.completedIds}) ? [] : @{load_legacy4.completedIds}) + (empty(@{load_progress4.completedIds}) ? [] : @{load_progress4.completedIds}), '4-5') ? {'4-5': true} : {}) + (contains((empty(@{load_legacy4.completedIds}) ? [] : @{load_legacy4.completedIds}) + (empty(@{load_progress4.completedIds}) ? [] : @{load_progress4.completedIds}), '6-0') ? {'6-0': true} : {}) + (contains((empty(@{load_legacy4.completedIds}) ? [] : @{load_legacy4.completedIds}) + (empty(@{load_progress4.completedIds}) ? [] : @{load_progress4.completedIds}), '6-1') ? {'6-1': true} : {}) + (contains((empty(@{load_legacy4.completedIds}) ? [] : @{load_legacy4.completedIds}) + (empty(@{load_progress4.completedIds}) ? [] : @{load_progress4.completedIds}), '6-2') ? {'6-2': true} : {}) + (contains((empty(@{load_legacy4.completedIds}) ? [] : @{load_legacy4.completedIds}) + (empty(@{load_progress4.completedIds}) ? [] : @{load_progress4.completedIds}), '6-3') ? {'6-3': true} : {}) + (contains((empty(@{load_legacy4.completedIds}) ? [] : @{load_legacy4.completedIds}) + (empty(@{load_progress4.completedIds}) ? [] : @{load_progress4.completedIds}), '6-4') ? {'6-4': true} : {}) + (contains((empty(@{load_legacy4.completedIds}) ? [] : @{load_legacy4.completedIds}) + (empty(@{load_progress4.completedIds}) ? [] : @{load_progress4.completedIds}), '6-5') ? {'6-5': true} : {}) + (contains((empty(@{load_legacy4.completedIds}) ? [] : @{load_legacy4.completedIds}) + (empty(@{load_progress4.completedIds}) ? [] : @{load_progress4.completedIds}), '9-0') ? {'9-0': true} : {}) + (contains((empty(@{load_legacy4.completedIds}) ? [] : @{load_legacy4.completedIds}) + (empty(@{load_progress4.completedIds}) ? [] : @{load_progress4.completedIds}), '9-1') ? {'9-1': true} : {}) + (contains((empty(@{load_legacy4.completedIds}) ? [] : @{load_legacy4.completedIds}) + (empty(@{load_progress4.completedIds}) ? [] : @{load_progress4.completedIds}), '9-2') ? {'9-2': true} : {}) + (contains((empty(@{load_legacy4.completedIds}) ? [] : @{load_legacy4.completedIds}) + (empty(@{load_progress4.completedIds}) ? [] : @{load_progress4.completedIds}), '9-3') ? {'9-3': true} : {}) + (contains((empty(@{load_legacy4.completedIds}) ? [] : @{load_legacy4.completedIds}) + (empty(@{load_progress4.completedIds}) ? [] : @{load_progress4.completedIds}), '9-4') ? {'9-4': true} : {}) + (contains((empty(@{load_legacy4.completedIds}) ? [] : @{load_legacy4.completedIds}) + (empty(@{load_progress4.completedIds}) ? [] : @{load_progress4.completedIds}), '9-5') ? {'9-5': true} : {})) }}"
                                  }
                                }
                              }
                            ],
                            "failure": [
                              {
                                "state": {
                                  "id": "hydrate_legacy4",
                                  "input": {
                                    "completedIds": "{{ empty(@{load_legacy4.completedIds}) ? [] : @{load_legacy4.completedIds} }}"
                                  }
                                }
                              }
                            ]
                          }
                        }
                      }
                    ],
                    "failure": [
                      {
                        "repo": {
                          "id": "load_current4",
                          "input": {
                            "repositoryId": "sudoku_progress_store",
                            "operation": "read",
                            "params": {
                              "collection": "progress",
                              "documentId": "sudoku"
                            }
                          },
                          "output": {
                            "success": [
                              {
                                "state": {
                                  "id": "hydrate_current4",
                                  "input": {
                                    "completedIds": "{{ empty(@{load_current4.completedIds}) ? [] : @{load_current4.completedIds} }}"
                                  }
                                }
                              }
                            ]
                          }
                        }
                      }
                    ]
                  }
                }
              }
            ]
          },
          "children": [
            {
              "id": "tab4_scroll",
              "type": "scroll",
              "style": {
                "scroll": {
                  "dismissesKeyboard": "interactively"
                },
                "layout": {
                  "maxWidth": "infinity",
                  "maxHeight": "infinity"
                }
              },
              "children": [
                {
                  "id": "tab4_root",
                  "type": "vstack",
                  "context": {
                    "_spacing": 18,
                    "_alignment": "center",
                    "done": "{{ sum(map(range(16), (contains(${masks}[${p}], @{item}) || ${entries}[@{item}] == ${base}[@{item}]) ? 1 : 0)) == 16 }}",
                    "pid": "{{ '4-' + cast(${p}, 'str') }}"
                  },
                  "style": {
                    "layout": {
                      "padding": {
                        "top": 12,
                        "bottom": 24,
                        "leading": 14,
                        "trailing": 14
                      },
                      "maxWidth": "infinity"
                    }
                  },
                  "children": [
                    {
                      "id": "rules4",
                      "type": "hstack",
                      "context": {
                        "_spacing": 10,
                        "_alignment": "top"
                      },
                      "style": {
                        "layout": {
                          "padding": 16,
                          "maxWidth": "infinity"
                        },
                        "common": {
                          "background": {
                            "color": "surface"
                          },
                          "foreground": {
                            "color": "onSurface"
                          },
                          "cornerRadius": 18
                        },
                        "shadow": {
                          "color": {
                            "color": "black",
                            "opacity": 0.1
                          },
                          "radius": 8,
                          "y": 3
                        }
                      },
                      "children": [
                        {
                          "id": "rules4_icon",
                          "type": "image",
                          "context": {
                            "_source": "sf://lightbulb.fill"
                          },
                          "style": {
                            "layout": {
                              "width": 24,
                              "height": 24
                            },
                            "common": {
                              "foreground": {
                                "color": "accentColor"
                              }
                            }
                          }
                        },
                        {
                          "id": "rules4_text",
                          "type": "text",
                          "context": {
                            "_text": "Rules: fill every row, column and 2×2 box with 1–4 once. Blue cells are clues; red means the entry does not match this puzzle’s solution."
                          },
                          "style": {
                            "common": {
                              "font": "subheadline",
                              "foreground": {
                                "color": "onSurface"
                              }
                            },
                            "text": {
                              "multilineTextAlignment": "leading"
                            }
                          }
                        }
                      ]
                    },
                    {
                      "id": "new4",
                      "type": "button",
                      "context": {
                        "_label": "New random 4×4"
                      },
                      "style": {
                        "button": {
                          "standard": {
                            "type": "borderedProminent",
                            "shape": "capsule"
                          }
                        }
                      },
                      "events": {
                        "onTap": [
                          {
                            "state": {
                              "id": "regen4",
                              "input": {
                                "p": "{{ random(0,5) }}",
                                "entries": "{{ map(range(16), 0) }}",
                                "selected": -1
                              },
                              "output": {
                                "success": [
                                  {
                                    "service": {
                                      "id": "regen4_h",
                                      "input": {
                                        "serviceId": "sudoku_audio",
                                        "params": {
                                          "haptic": "medium"
                                        }
                                      }
                                    }
                                  }
                                ]
                              }
                            }
                          }
                        ]
                      }
                    },
                    {
                      "id": "board4",
                      "type": "vstack",
                      "context": {
                        "_spacing": 10
                      },
                      "style": {
                        "layout": {
                          "padding": 14,
                          "maxWidth": "infinity"
                        },
                        "common": {
                          "background": {
                            "light": "#F2F2F7",
                            "dark": "#1C1C1E"
                          },
                          "cornerRadius": 20
                        },
                        "shadow": {
                          "color": {
                            "color": "black",
                            "opacity": 0.14
                          },
                          "radius": 10,
                          "y": 5
                        }
                      },
                      "children": [
                        {
                          "id": "grid4tab",
                          "type": "grid",
                          "context": {
                            "_gridType": "lazyVGrid",
                            "_spacing": 6
                          },
                          "style": {
                            "grid": {
                              "columns": [
                                {
                                  "kind": "flexible",
                                  "minimum": 52,
                                  "maximum": 70,
                                  "spacing": 6
                                },
                                {
                                  "kind": "flexible",
                                  "minimum": 52,
                                  "maximum": 70,
                                  "spacing": 6
                                },
                                {
                                  "kind": "flexible",
                                  "minimum": 52,
                                  "maximum": 70,
                                  "spacing": 6
                                },
                                {
                                  "kind": "flexible",
                                  "minimum": 52,
                                  "maximum": 70,
                                  "spacing": 6
                                }
                              ]
                            }
                          },
                          "children": [
                            {
                              "id": "cells4tab",
                              "type": "dynamic",
                              "context": {
                                "_data": "{{ range(16) }}"
                              },
                              "prototype": {
                                "id": "cell4tab",
                                "type": "button",
                                "context": {
                                  "_label": "",
                                  "i": "@{item}",
                                  "clue": "{{ contains(${masks}[${p}], @{item}) }}",
                                  "val": "{{ @{clue} ? ${base}[@{i}] : ${entries}[@{i}] }}",
                                  "wrong": "{{ !@{clue} && @{val} != 0 && @{val} != ${base}[@{i}] }}",
                                  "sel": "{{ ${selected} == @{i} }}"
                                },
                                "style": {
                                  "button": {
                                    "custom": {
                                      "layout": {
                                        "height": 58,
                                        "maxWidth": "infinity"
                                      },
                                      "common": {
                                        "background": "{{ @{wrong} ? {'light':'#FFE3E0','dark':'#4A1714'} : (@{sel} ? {'light':'#FFF3B0','dark':'#5A4700'} : (@{clue} ? {'light':'#DDEBFF','dark':'#17365F'} : {'light':'#FFFFFF','dark':'#343438'})) }}",
                                        "cornerRadius": 12
                                      }
                                    }
                                  },
                                  "animation": {
                                    "kind": "spring",
                                    "value": "@{sel}",
                                    "duration": 0.25,
                                    "bounce": 0.3
                                  }
                                },
                                "children": [
                                  {
                                    "id": "cell4tab_text",
                                    "type": "text",
                                    "context": {
                                      "_text": "{{ @{val} == 0 ? '' : cast(@{val}, 'str') }}"
                                    },
                                    "style": {
                                      "common": {
                                        "font": {
                                          "kind": "title2",
                                          "weight": "bold"
                                        },
                                        "foreground": "{{ @{wrong} ? {'color':'red'} : (@{clue} ? {'light':'#123B68','dark':'#DDEBFF'} : {'light':'#1C1C1E','dark':'#F2F2F7'}) }}"
                                      }
                                    }
                                  }
                                ],
                                "events": {
                                  "onTap": [
                                    {
                                      "condition": {
                                        "id": "cell4_editable",
                                        "input": "{{ !contains(${masks}[${p}], @{i}) }}",
                                        "output": {
                                          "success": [
                                            {
                                              "state": {
                                                "id": "cell4_select",
                                                "input": {
                                                  "selected": "@{i}"
                                                },
                                                "output": {
                                                  "success": [
                                                    {
                                                      "service": {
                                                        "id": "cell4_h",
                                                        "input": {
                                                          "serviceId": "sudoku_audio",
                                                          "params": {
                                                            "haptic": "light"
                                                          }
                                                        }
                                                      }
                                                    }
                                                  ]
                                                }
                                              }
                                            }
                                          ],
                                          "failure": [
                                            {
                                              "service": {
                                                "id": "cell4_warn",
                                                "input": {
                                                  "serviceId": "sudoku_audio",
                                                  "params": {
                                                    "haptic": "warning"
                                                  }
                                                }
                                              }
                                            }
                                          ]
                                        }
                                      }
                                    }
                                  ]
                                }
                              }
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "id": "pad4",
                      "type": "grid",
                      "context": {
                        "_gridType": "lazyVGrid",
                        "_spacing": 8
                      },
                      "style": {
                        "grid": {
                          "columns": [
                            {
                              "kind": "flexible",
                              "minimum": 50,
                              "maximum": 70,
                              "spacing": 8
                            },
                            {
                              "kind": "flexible",
                              "minimum": 50,
                              "maximum": 70,
                              "spacing": 8
                            },
                            {
                              "kind": "flexible",
                              "minimum": 50,
                              "maximum": 70,
                              "spacing": 8
                            },
                            {
                              "kind": "flexible",
                              "minimum": 50,
                              "maximum": 70,
                              "spacing": 8
                            }
                          ]
                        },
                        "common": {
                          "background": {
                            "color": "surface"
                          },
                          "cornerRadius": 16
                        }
                      },
                      "children": [
                        {
                          "id": "nums4tab",
                          "type": "dynamic",
                          "context": {
                            "_data": "${nums}"
                          },
                          "prototype": {
                            "id": "num4tab",
                            "type": "button",
                            "context": {
                              "_label": "{{ cast(@{item}, 'str') }}"
                            },
                            "style": {
                              "button": {
                                "standard": {
                                  "type": "bordered",
                                  "shape": "capsule"
                                }
                              },
                              "layout": {
                                "height": 46
                              }
                            },
                            "events": {
                              "onTap": [
                                {
                                  "condition": {
                                    "id": "num4_has",
                                    "input": "{{ ${selected} >= 0 }}",
                                    "output": {
                                      "success": [
                                        {
                                          "state": {
                                            "id": "num4_fill",
                                            "input": {
                                              "entries": "{{ setAt(${entries}, ${selected}, @{item}) }}"
                                            },
                                            "output": {
                                              "success": [
                                                {
                                                  "service": {
                                                    "id": "num4_h",
                                                    "input": {
                                                      "serviceId": "sudoku_audio",
                                                      "params": {
                                                        "haptic": "light"
                                                      }
                                                    }
                                                  }
                                                },
                                                {
                                                  "condition": {
                                                    "id": "num4_solved",
                                                    "input": "{{ sum(map(range(16), (contains(${masks}[${p}], @{item}) || ${entries}[@{item}] == ${base}[@{item}]) ? 1 : 0)) == 16 && !contains(${completedIds}, '4-' + cast(${p}, 'str')) }}",
                                                    "output": {
                                                      "success": [
                                                        {
                                                          "state": {
                                                            "id": "save4_state",
                                                            "input": {
                                                              "completedIds": "{{ ${completedIds} + ('4-' + cast(${p}, 'str')) }}"
                                                            },
                                                            "output": {
                                                              "success": [
                                                                {
                                                                  "repo": {
                                                                    "id": "save4_repo",
                                                                    "input": {
                                                                      "repositoryId": "sudoku_progress_store",
                                                                      "operation": "create",
                                                                      "params": {
                                                                        "collection": "progress",
                                                                        "documentId": "sudoku",
                                                                        "rewrite": true,
                                                                        "body": {
                                                                          "completedIds": "${completedIds}"
                                                                        }
                                                                      }
                                                                    }
                                                                  }
                                                                },
                                                                {
                                                                  "service": {
                                                                    "id": "solved4_h",
                                                                    "input": {
                                                                      "serviceId": "sudoku_audio",
                                                                      "params": {
                                                                        "haptic": "success"
                                                                      }
                                                                    }
                                                                  }
                                                                }
                                                              ]
                                                            }
                                                          }
                                                        }
                                                      ]
                                                    }
                                                  }
                                                }
                                              ]
                                            }
                                          }
                                        }
                                      ],
                                      "failure": [
                                        {
                                          "service": {
                                            "id": "num4_warn",
                                            "input": {
                                              "serviceId": "sudoku_audio",
                                              "params": {
                                                "haptic": "warning"
                                              }
                                            }
                                          }
                                        }
                                      ]
                                    }
                                  }
                                }
                              ]
                            }
                          }
                        }
                      ]
                    },
                    {
                      "id": "clear4",
                      "type": "button",
                      "context": {
                        "_label": "Clear selected cell"
                      },
                      "style": {
                        "button": {
                          "standard": {
                            "type": "bordered",
                            "shape": "capsule"
                          }
                        },
                        "layout": {
                          "height": 46
                        }
                      },
                      "events": {
                        "onTap": [
                          {
                            "condition": {
                              "id": "clear4_has",
                              "input": "{{ ${selected} >= 0 }}",
                              "output": {
                                "success": [
                                  {
                                    "state": {
                                      "id": "clear4_state",
                                      "input": {
                                        "entries": "{{ setAt(${entries}, ${selected}, 0) }}"
                                      },
                                      "output": {
                                        "success": [
                                          {
                                            "service": {
                                              "id": "clear4_h",
                                              "input": {
                                                "serviceId": "sudoku_audio",
                                                "params": {
                                                  "haptic": "light"
                                                }
                                              }
                                            }
                                          }
                                        ]
                                      }
                                    }
                                  }
                                ],
                                "failure": [
                                  {
                                    "service": {
                                      "id": "clear4_warn",
                                      "input": {
                                        "serviceId": "sudoku_audio",
                                        "params": {
                                          "haptic": "warning"
                                        }
                                      }
                                    }
                                  }
                                ]
                              }
                            }
                          }
                        ]
                      }
                    },
                    {
                      "id": "status4",
                      "type": "text",
                      "context": {
                        "_text": "{{ @{done} ? 'Solved. Completion is saved.' : (contains(${completedIds}, @{pid}) ? 'Solved before. Try it again or make a new puzzle.' : 'Select an empty cell, then tap a number.') }}"
                      },
                      "style": {
                        "common": {
                          "font": "subheadline",
                          "foreground": {
                            "color": "secondary"
                          }
                        },
                        "text": {
                          "multilineTextAlignment": "center"
                        }
                      }
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "id": "tab6_mod",
          "type": "module",
          "context": {
            "_tabTitle": "6×6",
            "_tabImage": "rectangle.grid.3x2"
          },
          "state": {
            "p": 0,
            "entries": [
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0
            ],
            "selected": -1,
            "completedIds": [],
            "base": [
              1,
              2,
              3,
              4,
              5,
              6,
              4,
              5,
              6,
              1,
              2,
              3,
              2,
              3,
              4,
              5,
              6,
              1,
              5,
              6,
              1,
              2,
              3,
              4,
              3,
              4,
              5,
              6,
              1,
              2,
              6,
              1,
              2,
              3,
              4,
              5
            ],
            "masks": [
              [
                0,
                3,
                5,
                7,
                8,
                10,
                12,
                14,
                17,
                19,
                21,
                22,
                24,
                26,
                28,
                31,
                33,
                35
              ],
              [
                0,
                2,
                4,
                6,
                9,
                11,
                13,
                14,
                16,
                18,
                20,
                23,
                25,
                27,
                29,
                30,
                32,
                35
              ],
              [
                1,
                3,
                5,
                6,
                8,
                10,
                12,
                15,
                17,
                19,
                20,
                22,
                24,
                27,
                28,
                31,
                32,
                34
              ],
              [
                0,
                1,
                5,
                7,
                9,
                11,
                12,
                14,
                16,
                18,
                21,
                23,
                25,
                26,
                28,
                30,
                33,
                35
              ],
              [
                0,
                3,
                4,
                6,
                8,
                11,
                13,
                15,
                17,
                18,
                20,
                22,
                24,
                26,
                29,
                31,
                33,
                34
              ],
              [
                1,
                2,
                5,
                6,
                9,
                10,
                12,
                14,
                17,
                19,
                21,
                23,
                24,
                27,
                29,
                30,
                32,
                35
              ]
            ],
            "nums": [
              1,
              2,
              3,
              4,
              5,
              6
            ]
          },
          "events": {
            "onAppear": [
              {
                "repo": {
                  "id": "load_legacy6",
                  "input": {
                    "repositoryId": "sudoku_progress_store",
                    "operation": "read",
                    "params": {
                      "collection": "progress",
                      "documentId": "status"
                    }
                  },
                  "output": {
                    "success": [
                      {
                        "repo": {
                          "id": "load_progress6",
                          "input": {
                            "repositoryId": "sudoku_progress_store",
                            "operation": "read",
                            "params": {
                              "collection": "progress",
                              "documentId": "sudoku"
                            }
                          },
                          "output": {
                            "success": [
                              {
                                "state": {
                                  "id": "hydrate_progress6",
                                  "input": {
                                    "completedIds": "{{ keys({} + (contains((empty(@{load_legacy6.completedIds}) ? [] : @{load_legacy6.completedIds}) + (empty(@{load_progress6.completedIds}) ? [] : @{load_progress6.completedIds}), '4-0') ? {'4-0': true} : {}) + (contains((empty(@{load_legacy6.completedIds}) ? [] : @{load_legacy6.completedIds}) + (empty(@{load_progress6.completedIds}) ? [] : @{load_progress6.completedIds}), '4-1') ? {'4-1': true} : {}) + (contains((empty(@{load_legacy6.completedIds}) ? [] : @{load_legacy6.completedIds}) + (empty(@{load_progress6.completedIds}) ? [] : @{load_progress6.completedIds}), '4-2') ? {'4-2': true} : {}) + (contains((empty(@{load_legacy6.completedIds}) ? [] : @{load_legacy6.completedIds}) + (empty(@{load_progress6.completedIds}) ? [] : @{load_progress6.completedIds}), '4-3') ? {'4-3': true} : {}) + (contains((empty(@{load_legacy6.completedIds}) ? [] : @{load_legacy6.completedIds}) + (empty(@{load_progress6.completedIds}) ? [] : @{load_progress6.completedIds}), '4-4') ? {'4-4': true} : {}) + (contains((empty(@{load_legacy6.completedIds}) ? [] : @{load_legacy6.completedIds}) + (empty(@{load_progress6.completedIds}) ? [] : @{load_progress6.completedIds}), '4-5') ? {'4-5': true} : {}) + (contains((empty(@{load_legacy6.completedIds}) ? [] : @{load_legacy6.completedIds}) + (empty(@{load_progress6.completedIds}) ? [] : @{load_progress6.completedIds}), '6-0') ? {'6-0': true} : {}) + (contains((empty(@{load_legacy6.completedIds}) ? [] : @{load_legacy6.completedIds}) + (empty(@{load_progress6.completedIds}) ? [] : @{load_progress6.completedIds}), '6-1') ? {'6-1': true} : {}) + (contains((empty(@{load_legacy6.completedIds}) ? [] : @{load_legacy6.completedIds}) + (empty(@{load_progress6.completedIds}) ? [] : @{load_progress6.completedIds}), '6-2') ? {'6-2': true} : {}) + (contains((empty(@{load_legacy6.completedIds}) ? [] : @{load_legacy6.completedIds}) + (empty(@{load_progress6.completedIds}) ? [] : @{load_progress6.completedIds}), '6-3') ? {'6-3': true} : {}) + (contains((empty(@{load_legacy6.completedIds}) ? [] : @{load_legacy6.completedIds}) + (empty(@{load_progress6.completedIds}) ? [] : @{load_progress6.completedIds}), '6-4') ? {'6-4': true} : {}) + (contains((empty(@{load_legacy6.completedIds}) ? [] : @{load_legacy6.completedIds}) + (empty(@{load_progress6.completedIds}) ? [] : @{load_progress6.completedIds}), '6-5') ? {'6-5': true} : {}) + (contains((empty(@{load_legacy6.completedIds}) ? [] : @{load_legacy6.completedIds}) + (empty(@{load_progress6.completedIds}) ? [] : @{load_progress6.completedIds}), '9-0') ? {'9-0': true} : {}) + (contains((empty(@{load_legacy6.completedIds}) ? [] : @{load_legacy6.completedIds}) + (empty(@{load_progress6.completedIds}) ? [] : @{load_progress6.completedIds}), '9-1') ? {'9-1': true} : {}) + (contains((empty(@{load_legacy6.completedIds}) ? [] : @{load_legacy6.completedIds}) + (empty(@{load_progress6.completedIds}) ? [] : @{load_progress6.completedIds}), '9-2') ? {'9-2': true} : {}) + (contains((empty(@{load_legacy6.completedIds}) ? [] : @{load_legacy6.completedIds}) + (empty(@{load_progress6.completedIds}) ? [] : @{load_progress6.completedIds}), '9-3') ? {'9-3': true} : {}) + (contains((empty(@{load_legacy6.completedIds}) ? [] : @{load_legacy6.completedIds}) + (empty(@{load_progress6.completedIds}) ? [] : @{load_progress6.completedIds}), '9-4') ? {'9-4': true} : {}) + (contains((empty(@{load_legacy6.completedIds}) ? [] : @{load_legacy6.completedIds}) + (empty(@{load_progress6.completedIds}) ? [] : @{load_progress6.completedIds}), '9-5') ? {'9-5': true} : {})) }}"
                                  }
                                }
                              }
                            ],
                            "failure": [
                              {
                                "state": {
                                  "id": "hydrate_legacy6",
                                  "input": {
                                    "completedIds": "{{ empty(@{load_legacy6.completedIds}) ? [] : @{load_legacy6.completedIds} }}"
                                  }
                                }
                              }
                            ]
                          }
                        }
                      }
                    ],
                    "failure": [
                      {
                        "repo": {
                          "id": "load_current6",
                          "input": {
                            "repositoryId": "sudoku_progress_store",
                            "operation": "read",
                            "params": {
                              "collection": "progress",
                              "documentId": "sudoku"
                            }
                          },
                          "output": {
                            "success": [
                              {
                                "state": {
                                  "id": "hydrate_current6",
                                  "input": {
                                    "completedIds": "{{ empty(@{load_current6.completedIds}) ? [] : @{load_current6.completedIds} }}"
                                  }
                                }
                              }
                            ]
                          }
                        }
                      }
                    ]
                  }
                }
              }
            ]
          },
          "children": [
            {
              "id": "tab6_scroll",
              "type": "scroll",
              "style": {
                "layout": {
                  "maxWidth": "infinity",
                  "maxHeight": "infinity"
                }
              },
              "children": [
                {
                  "id": "tab6_root",
                  "type": "vstack",
                  "context": {
                    "_spacing": 16,
                    "_alignment": "center",
                    "done": "{{ sum(map(range(36), (contains(${masks}[${p}], @{item}) || ${entries}[@{item}] == ${base}[@{item}]) ? 1 : 0)) == 36 }}",
                    "pid": "{{ '6-' + cast(${p}, 'str') }}"
                  },
                  "style": {
                    "layout": {
                      "padding": {
                        "top": 12,
                        "bottom": 24,
                        "leading": 14,
                        "trailing": 14
                      },
                      "maxWidth": "infinity"
                    }
                  },
                  "children": [
                    {
                      "id": "rules6",
                      "type": "hstack",
                      "context": {
                        "_spacing": 10,
                        "_alignment": "top"
                      },
                      "style": {
                        "layout": {
                          "padding": 16,
                          "maxWidth": "infinity"
                        },
                        "common": {
                          "background": {
                            "color": "surface"
                          },
                          "foreground": {
                            "color": "onSurface"
                          },
                          "cornerRadius": 18
                        },
                        "shadow": {
                          "color": {
                            "color": "black",
                            "opacity": 0.1
                          },
                          "radius": 8,
                          "y": 3
                        }
                      },
                      "children": [
                        {
                          "id": "rules6_icon",
                          "type": "image",
                          "context": {
                            "_source": "sf://lightbulb.fill"
                          },
                          "style": {
                            "layout": {
                              "width": 24,
                              "height": 24
                            },
                            "common": {
                              "foreground": {
                                "color": "accentColor"
                              }
                            }
                          }
                        },
                        {
                          "id": "rules6_text",
                          "type": "text",
                          "context": {
                            "_text": "Rules: fill every row, column and 2×3 box with 1–6 once. Clues are locked. Editable mistakes are marked red."
                          },
                          "style": {
                            "common": {
                              "font": "subheadline",
                              "foreground": {
                                "color": "onSurface"
                              }
                            }
                          }
                        }
                      ]
                    },
                    {
                      "id": "new6",
                      "type": "button",
                      "context": {
                        "_label": "New random 6×6"
                      },
                      "style": {
                        "button": {
                          "standard": {
                            "type": "borderedProminent",
                            "shape": "capsule"
                          }
                        }
                      },
                      "events": {
                        "onTap": [
                          {
                            "state": {
                              "id": "regen6",
                              "input": {
                                "p": "{{ random(0,5) }}",
                                "entries": "{{ map(range(36), 0) }}",
                                "selected": -1
                              },
                              "output": {
                                "success": [
                                  {
                                    "service": {
                                      "id": "regen6_h",
                                      "input": {
                                        "serviceId": "sudoku_audio",
                                        "params": {
                                          "haptic": "medium"
                                        }
                                      }
                                    }
                                  }
                                ]
                              }
                            }
                          }
                        ]
                      }
                    },
                    {
                      "id": "board6",
                      "type": "vstack",
                      "context": {
                        "_spacing": 10
                      },
                      "style": {
                        "layout": {
                          "padding": 12,
                          "maxWidth": "infinity"
                        },
                        "common": {
                          "background": {
                            "light": "#F2F2F7",
                            "dark": "#1C1C1E"
                          },
                          "cornerRadius": 20
                        },
                        "shadow": {
                          "color": {
                            "color": "black",
                            "opacity": 0.14
                          },
                          "radius": 10,
                          "y": 5
                        }
                      },
                      "children": [
                        {
                          "id": "grid6tab",
                          "type": "grid",
                          "context": {
                            "_gridType": "lazyVGrid",
                            "_spacing": 5
                          },
                          "style": {
                            "grid": {
                              "columns": [
                                {
                                  "kind": "flexible",
                                  "minimum": 42,
                                  "maximum": 56,
                                  "spacing": 5
                                },
                                {
                                  "kind": "flexible",
                                  "minimum": 42,
                                  "maximum": 56,
                                  "spacing": 5
                                },
                                {
                                  "kind": "flexible",
                                  "minimum": 42,
                                  "maximum": 56,
                                  "spacing": 5
                                },
                                {
                                  "kind": "flexible",
                                  "minimum": 42,
                                  "maximum": 56,
                                  "spacing": 5
                                },
                                {
                                  "kind": "flexible",
                                  "minimum": 42,
                                  "maximum": 56,
                                  "spacing": 5
                                },
                                {
                                  "kind": "flexible",
                                  "minimum": 42,
                                  "maximum": 56,
                                  "spacing": 5
                                }
                              ]
                            }
                          },
                          "children": [
                            {
                              "id": "cells6tab",
                              "type": "dynamic",
                              "context": {
                                "_data": "{{ range(36) }}"
                              },
                              "prototype": {
                                "id": "cell6tab",
                                "type": "button",
                                "context": {
                                  "_label": "",
                                  "i": "@{item}",
                                  "clue": "{{ contains(${masks}[${p}], @{item}) }}",
                                  "val": "{{ @{clue} ? ${base}[@{i}] : ${entries}[@{i}] }}",
                                  "wrong": "{{ !@{clue} && @{val} != 0 && @{val} != ${base}[@{i}] }}",
                                  "sel": "{{ ${selected} == @{i} }}"
                                },
                                "style": {
                                  "button": {
                                    "custom": {
                                      "layout": {
                                        "height": 46,
                                        "maxWidth": "infinity"
                                      },
                                      "common": {
                                        "background": "{{ @{wrong} ? {'light':'#FFE3E0','dark':'#4A1714'} : (@{sel} ? {'light':'#FFF3B0','dark':'#5A4700'} : (@{clue} ? {'light':'#DDEBFF','dark':'#17365F'} : {'light':'#FFFFFF','dark':'#343438'})) }}",
                                        "cornerRadius": 10
                                      }
                                    }
                                  },
                                  "animation": {
                                    "kind": "spring",
                                    "value": "@{sel}",
                                    "duration": 0.25,
                                    "bounce": 0.3
                                  }
                                },
                                "children": [
                                  {
                                    "id": "cell6tab_text",
                                    "type": "text",
                                    "context": {
                                      "_text": "{{ @{val} == 0 ? '' : cast(@{val}, 'str') }}"
                                    },
                                    "style": {
                                      "common": {
                                        "font": {
                                          "kind": "headline",
                                          "weight": "bold"
                                        },
                                        "foreground": "{{ @{wrong} ? {'color':'red'} : (@{clue} ? {'light':'#123B68','dark':'#DDEBFF'} : {'light':'#1C1C1E','dark':'#F2F2F7'}) }}"
                                      }
                                    }
                                  }
                                ],
                                "events": {
                                  "onTap": [
                                    {
                                      "condition": {
                                        "id": "cell6_editable",
                                        "input": "{{ !contains(${masks}[${p}], @{i}) }}",
                                        "output": {
                                          "success": [
                                            {
                                              "state": {
                                                "id": "cell6_select",
                                                "input": {
                                                  "selected": "@{i}"
                                                },
                                                "output": {
                                                  "success": [
                                                    {
                                                      "service": {
                                                        "id": "cell6_h",
                                                        "input": {
                                                          "serviceId": "sudoku_audio",
                                                          "params": {
                                                            "haptic": "light"
                                                          }
                                                        }
                                                      }
                                                    }
                                                  ]
                                                }
                                              }
                                            }
                                          ],
                                          "failure": [
                                            {
                                              "service": {
                                                "id": "cell6_warn",
                                                "input": {
                                                  "serviceId": "sudoku_audio",
                                                  "params": {
                                                    "haptic": "warning"
                                                  }
                                                }
                                              }
                                            }
                                          ]
                                        }
                                      }
                                    }
                                  ]
                                }
                              }
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "id": "pad6",
                      "type": "vstack",
                      "context": {
                        "_spacing": 8
                      },
                      "style": {
                        "layout": {
                          "padding": 10
                        },
                        "common": {
                          "background": {
                            "color": "surface"
                          },
                          "cornerRadius": 16
                        }
                      },
                      "children": [
                        {
                          "id": "numgrid6",
                          "type": "grid",
                          "context": {
                            "_gridType": "lazyVGrid",
                            "_spacing": 8
                          },
                          "style": {
                            "grid": {
                              "columns": [
                                {
                                  "kind": "flexible",
                                  "minimum": 44,
                                  "maximum": 70,
                                  "spacing": 8
                                },
                                {
                                  "kind": "flexible",
                                  "minimum": 44,
                                  "maximum": 70,
                                  "spacing": 8
                                },
                                {
                                  "kind": "flexible",
                                  "minimum": 44,
                                  "maximum": 70,
                                  "spacing": 8
                                }
                              ]
                            }
                          },
                          "children": [
                            {
                              "id": "nums6tab",
                              "type": "dynamic",
                              "context": {
                                "_data": "${nums}"
                              },
                              "prototype": {
                                "id": "num6tab",
                                "type": "button",
                                "context": {
                                  "_label": "{{ cast(@{item}, 'str') }}"
                                },
                                "style": {
                                  "button": {
                                    "standard": {
                                      "type": "bordered",
                                      "shape": "capsule"
                                    }
                                  },
                                  "layout": {
                                    "height": 44
                                  }
                                },
                                "events": {
                                  "onTap": [
                                    {
                                      "condition": {
                                        "id": "num6_has",
                                        "input": "{{ ${selected} >= 0 }}",
                                        "output": {
                                          "success": [
                                            {
                                              "state": {
                                                "id": "num6_fill",
                                                "input": {
                                                  "entries": "{{ setAt(${entries}, ${selected}, @{item}) }}"
                                                },
                                                "output": {
                                                  "success": [
                                                    {
                                                      "service": {
                                                        "id": "num6_h",
                                                        "input": {
                                                          "serviceId": "sudoku_audio",
                                                          "params": {
                                                            "haptic": "light"
                                                          }
                                                        }
                                                      }
                                                    },
                                                    {
                                                      "condition": {
                                                        "id": "num6_solved",
                                                        "input": "{{ sum(map(range(36), (contains(${masks}[${p}], @{item}) || ${entries}[@{item}] == ${base}[@{item}]) ? 1 : 0)) == 36 && !contains(${completedIds}, '6-' + cast(${p}, 'str')) }}",
                                                        "output": {
                                                          "success": [
                                                            {
                                                              "state": {
                                                                "id": "save6_state",
                                                                "input": {
                                                                  "completedIds": "{{ ${completedIds} + ('6-' + cast(${p}, 'str')) }}"
                                                                },
                                                                "output": {
                                                                  "success": [
                                                                    {
                                                                      "repo": {
                                                                        "id": "save6_repo",
                                                                        "input": {
                                                                          "repositoryId": "sudoku_progress_store",
                                                                          "operation": "create",
                                                                          "params": {
                                                                            "collection": "progress",
                                                                            "documentId": "sudoku",
                                                                            "rewrite": true,
                                                                            "body": {
                                                                              "completedIds": "${completedIds}"
                                                                            }
                                                                          }
                                                                        }
                                                                      }
                                                                    },
                                                                    {
                                                                      "service": {
                                                                        "id": "solved6_h",
                                                                        "input": {
                                                                          "serviceId": "sudoku_audio",
                                                                          "params": {
                                                                            "haptic": "success"
                                                                          }
                                                                        }
                                                                      }
                                                                    }
                                                                  ]
                                                                }
                                                              }
                                                            }
                                                          ]
                                                        }
                                                      }
                                                    }
                                                  ]
                                                }
                                              }
                                            }
                                          ],
                                          "failure": [
                                            {
                                              "service": {
                                                "id": "num6_warn",
                                                "input": {
                                                  "serviceId": "sudoku_audio",
                                                  "params": {
                                                    "haptic": "warning"
                                                  }
                                                }
                                              }
                                            }
                                          ]
                                        }
                                      }
                                    }
                                  ]
                                }
                              }
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "id": "clear6",
                      "type": "button",
                      "context": {
                        "_label": "Clear selected cell"
                      },
                      "style": {
                        "button": {
                          "standard": {
                            "type": "bordered",
                            "shape": "capsule"
                          }
                        },
                        "layout": {
                          "height": 44
                        }
                      },
                      "events": {
                        "onTap": [
                          {
                            "condition": {
                              "id": "clear6_has",
                              "input": "{{ ${selected} >= 0 }}",
                              "output": {
                                "success": [
                                  {
                                    "state": {
                                      "id": "clear6_state",
                                      "input": {
                                        "entries": "{{ setAt(${entries}, ${selected}, 0) }}"
                                      },
                                      "output": {
                                        "success": [
                                          {
                                            "service": {
                                              "id": "clear6_h",
                                              "input": {
                                                "serviceId": "sudoku_audio",
                                                "params": {
                                                  "haptic": "light"
                                                }
                                              }
                                            }
                                          }
                                        ]
                                      }
                                    }
                                  }
                                ],
                                "failure": [
                                  {
                                    "service": {
                                      "id": "clear6_warn",
                                      "input": {
                                        "serviceId": "sudoku_audio",
                                        "params": {
                                          "haptic": "warning"
                                        }
                                      }
                                    }
                                  }
                                ]
                              }
                            }
                          }
                        ]
                      }
                    },
                    {
                      "id": "status6",
                      "type": "text",
                      "context": {
                        "_text": "{{ @{done} ? 'Solved. Completion is saved.' : (contains(${completedIds}, @{pid}) ? 'Solved before. Regenerate for another puzzle.' : 'Select an empty cell, then tap a number.') }}"
                      },
                      "style": {
                        "common": {
                          "font": "subheadline",
                          "foreground": {
                            "color": "secondary"
                          }
                        },
                        "text": {
                          "multilineTextAlignment": "center"
                        }
                      }
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "id": "tab9_mod",
          "type": "module",
          "context": {
            "_tabTitle": "9×9",
            "_tabImage": "square.grid.3x3"
          },
          "state": {
            "p": 0,
            "entries": [
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0
            ],
            "selected": -1,
            "completedIds": [],
            "base": [
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              4,
              5,
              6,
              7,
              8,
              9,
              1,
              2,
              3,
              7,
              8,
              9,
              1,
              2,
              3,
              4,
              5,
              6,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              1,
              5,
              6,
              7,
              8,
              9,
              1,
              2,
              3,
              4,
              8,
              9,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              1,
              2,
              6,
              7,
              8,
              9,
              1,
              2,
              3,
              4,
              5,
              9,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8
            ],
            "masks": [
              [
                0,
                1,
                3,
                5,
                8,
                9,
                11,
                13,
                15,
                16,
                19,
                20,
                22,
                23,
                26,
                27,
                30,
                31,
                33,
                35,
                37,
                39,
                41,
                43,
                44,
                45,
                47,
                49,
                50,
                52,
                54,
                55,
                57,
                60,
                62,
                64,
                65,
                67,
                69,
                70,
                72,
                75,
                77,
                79,
                80
              ],
              [
                0,
                2,
                4,
                6,
                8,
                10,
                12,
                14,
                16,
                17,
                18,
                20,
                21,
                23,
                25,
                28,
                29,
                31,
                34,
                35,
                36,
                38,
                40,
                42,
                44,
                46,
                47,
                49,
                51,
                53,
                54,
                56,
                58,
                60,
                61,
                63,
                65,
                67,
                68,
                71,
                72,
                74,
                76,
                78,
                80
              ],
              [
                1,
                3,
                4,
                7,
                8,
                9,
                10,
                13,
                14,
                17,
                18,
                21,
                22,
                24,
                26,
                27,
                29,
                32,
                33,
                35,
                36,
                39,
                40,
                43,
                44,
                45,
                48,
                49,
                51,
                52,
                55,
                56,
                58,
                61,
                62,
                63,
                64,
                66,
                69,
                71,
                73,
                74,
                77,
                78,
                80
              ],
              [
                0,
                1,
                4,
                6,
                7,
                11,
                12,
                13,
                15,
                17,
                18,
                19,
                22,
                24,
                25,
                27,
                28,
                31,
                32,
                35,
                37,
                38,
                40,
                41,
                44,
                45,
                46,
                49,
                51,
                53,
                54,
                57,
                58,
                59,
                62,
                64,
                65,
                68,
                70,
                71,
                72,
                73,
                76,
                78,
                79
              ],
              [
                0,
                2,
                3,
                5,
                7,
                9,
                12,
                13,
                16,
                17,
                18,
                20,
                22,
                24,
                26,
                28,
                30,
                32,
                34,
                35,
                36,
                37,
                40,
                43,
                44,
                45,
                47,
                48,
                50,
                53,
                54,
                56,
                59,
                60,
                62,
                63,
                65,
                66,
                68,
                71,
                73,
                75,
                76,
                78,
                80
              ],
              [
                1,
                2,
                4,
                5,
                8,
                9,
                10,
                12,
                15,
                17,
                19,
                21,
                22,
                23,
                25,
                27,
                29,
                30,
                33,
                35,
                36,
                38,
                41,
                42,
                44,
                46,
                48,
                49,
                52,
                53,
                54,
                55,
                58,
                60,
                61,
                64,
                66,
                67,
                70,
                71,
                72,
                74,
                77,
                79,
                80
              ]
            ],
            "nums": [
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9
            ]
          },
          "events": {
            "onAppear": [
              {
                "repo": {
                  "id": "load_legacy9",
                  "input": {
                    "repositoryId": "sudoku_progress_store",
                    "operation": "read",
                    "params": {
                      "collection": "progress",
                      "documentId": "status"
                    }
                  },
                  "output": {
                    "success": [
                      {
                        "repo": {
                          "id": "load_progress9",
                          "input": {
                            "repositoryId": "sudoku_progress_store",
                            "operation": "read",
                            "params": {
                              "collection": "progress",
                              "documentId": "sudoku"
                            }
                          },
                          "output": {
                            "success": [
                              {
                                "state": {
                                  "id": "hydrate_progress9",
                                  "input": {
                                    "completedIds": "{{ keys({} + (contains((empty(@{load_legacy9.completedIds}) ? [] : @{load_legacy9.completedIds}) + (empty(@{load_progress9.completedIds}) ? [] : @{load_progress9.completedIds}), '4-0') ? {'4-0': true} : {}) + (contains((empty(@{load_legacy9.completedIds}) ? [] : @{load_legacy9.completedIds}) + (empty(@{load_progress9.completedIds}) ? [] : @{load_progress9.completedIds}), '4-1') ? {'4-1': true} : {}) + (contains((empty(@{load_legacy9.completedIds}) ? [] : @{load_legacy9.completedIds}) + (empty(@{load_progress9.completedIds}) ? [] : @{load_progress9.completedIds}), '4-2') ? {'4-2': true} : {}) + (contains((empty(@{load_legacy9.completedIds}) ? [] : @{load_legacy9.completedIds}) + (empty(@{load_progress9.completedIds}) ? [] : @{load_progress9.completedIds}), '4-3') ? {'4-3': true} : {}) + (contains((empty(@{load_legacy9.completedIds}) ? [] : @{load_legacy9.completedIds}) + (empty(@{load_progress9.completedIds}) ? [] : @{load_progress9.completedIds}), '4-4') ? {'4-4': true} : {}) + (contains((empty(@{load_legacy9.completedIds}) ? [] : @{load_legacy9.completedIds}) + (empty(@{load_progress9.completedIds}) ? [] : @{load_progress9.completedIds}), '4-5') ? {'4-5': true} : {}) + (contains((empty(@{load_legacy9.completedIds}) ? [] : @{load_legacy9.completedIds}) + (empty(@{load_progress9.completedIds}) ? [] : @{load_progress9.completedIds}), '6-0') ? {'6-0': true} : {}) + (contains((empty(@{load_legacy9.completedIds}) ? [] : @{load_legacy9.completedIds}) + (empty(@{load_progress9.completedIds}) ? [] : @{load_progress9.completedIds}), '6-1') ? {'6-1': true} : {}) + (contains((empty(@{load_legacy9.completedIds}) ? [] : @{load_legacy9.completedIds}) + (empty(@{load_progress9.completedIds}) ? [] : @{load_progress9.completedIds}), '6-2') ? {'6-2': true} : {}) + (contains((empty(@{load_legacy9.completedIds}) ? [] : @{load_legacy9.completedIds}) + (empty(@{load_progress9.completedIds}) ? [] : @{load_progress9.completedIds}), '6-3') ? {'6-3': true} : {}) + (contains((empty(@{load_legacy9.completedIds}) ? [] : @{load_legacy9.completedIds}) + (empty(@{load_progress9.completedIds}) ? [] : @{load_progress9.completedIds}), '6-4') ? {'6-4': true} : {}) + (contains((empty(@{load_legacy9.completedIds}) ? [] : @{load_legacy9.completedIds}) + (empty(@{load_progress9.completedIds}) ? [] : @{load_progress9.completedIds}), '6-5') ? {'6-5': true} : {}) + (contains((empty(@{load_legacy9.completedIds}) ? [] : @{load_legacy9.completedIds}) + (empty(@{load_progress9.completedIds}) ? [] : @{load_progress9.completedIds}), '9-0') ? {'9-0': true} : {}) + (contains((empty(@{load_legacy9.completedIds}) ? [] : @{load_legacy9.completedIds}) + (empty(@{load_progress9.completedIds}) ? [] : @{load_progress9.completedIds}), '9-1') ? {'9-1': true} : {}) + (contains((empty(@{load_legacy9.completedIds}) ? [] : @{load_legacy9.completedIds}) + (empty(@{load_progress9.completedIds}) ? [] : @{load_progress9.completedIds}), '9-2') ? {'9-2': true} : {}) + (contains((empty(@{load_legacy9.completedIds}) ? [] : @{load_legacy9.completedIds}) + (empty(@{load_progress9.completedIds}) ? [] : @{load_progress9.completedIds}), '9-3') ? {'9-3': true} : {}) + (contains((empty(@{load_legacy9.completedIds}) ? [] : @{load_legacy9.completedIds}) + (empty(@{load_progress9.completedIds}) ? [] : @{load_progress9.completedIds}), '9-4') ? {'9-4': true} : {}) + (contains((empty(@{load_legacy9.completedIds}) ? [] : @{load_legacy9.completedIds}) + (empty(@{load_progress9.completedIds}) ? [] : @{load_progress9.completedIds}), '9-5') ? {'9-5': true} : {})) }}"
                                  }
                                }
                              }
                            ],
                            "failure": [
                              {
                                "state": {
                                  "id": "hydrate_legacy9",
                                  "input": {
                                    "completedIds": "{{ empty(@{load_legacy9.completedIds}) ? [] : @{load_legacy9.completedIds} }}"
                                  }
                                }
                              }
                            ]
                          }
                        }
                      }
                    ],
                    "failure": [
                      {
                        "repo": {
                          "id": "load_current9",
                          "input": {
                            "repositoryId": "sudoku_progress_store",
                            "operation": "read",
                            "params": {
                              "collection": "progress",
                              "documentId": "sudoku"
                            }
                          },
                          "output": {
                            "success": [
                              {
                                "state": {
                                  "id": "hydrate_current9",
                                  "input": {
                                    "completedIds": "{{ empty(@{load_current9.completedIds}) ? [] : @{load_current9.completedIds} }}"
                                  }
                                }
                              }
                            ]
                          }
                        }
                      }
                    ]
                  }
                }
              }
            ]
          },
          "children": [
            {
              "id": "tab9_scroll",
              "type": "scroll",
              "style": {
                "layout": {
                  "maxWidth": "infinity",
                  "maxHeight": "infinity"
                }
              },
              "children": [
                {
                  "id": "tab9_root",
                  "type": "vstack",
                  "context": {
                    "_spacing": 14,
                    "_alignment": "center",
                    "done": "{{ sum(map(range(81), (contains(${masks}[${p}], @{item}) || ${entries}[@{item}] == ${base}[@{item}]) ? 1 : 0)) == 81 }}",
                    "pid": "{{ '9-' + cast(${p}, 'str') }}"
                  },
                  "style": {
                    "layout": {
                      "padding": {
                        "top": 10,
                        "bottom": 24,
                        "leading": 10,
                        "trailing": 10
                      },
                      "maxWidth": "infinity"
                    }
                  },
                  "children": [
                    {
                      "id": "rules9",
                      "type": "hstack",
                      "context": {
                        "_spacing": 10,
                        "_alignment": "top"
                      },
                      "style": {
                        "layout": {
                          "padding": 14,
                          "maxWidth": "infinity"
                        },
                        "common": {
                          "background": {
                            "color": "surface"
                          },
                          "foreground": {
                            "color": "onSurface"
                          },
                          "cornerRadius": 18
                        },
                        "shadow": {
                          "color": {
                            "color": "black",
                            "opacity": 0.1
                          },
                          "radius": 8,
                          "y": 3
                        }
                      },
                      "children": [
                        {
                          "id": "rules9_icon",
                          "type": "image",
                          "context": {
                            "_source": "sf://lightbulb.fill"
                          },
                          "style": {
                            "layout": {
                              "width": 24,
                              "height": 24
                            },
                            "common": {
                              "foreground": {
                                "color": "accentColor"
                              }
                            }
                          }
                        },
                        {
                          "id": "rules9_text",
                          "type": "text",
                          "context": {
                            "_text": "Rules: fill every row, column and 3×3 box with 1–9 once. Clues are locked; wrong editable numbers turn red."
                          },
                          "style": {
                            "common": {
                              "font": "caption",
                              "foreground": {
                                "color": "onSurface"
                              }
                            }
                          }
                        }
                      ]
                    },
                    {
                      "id": "new9",
                      "type": "button",
                      "context": {
                        "_label": "New random 9×9"
                      },
                      "style": {
                        "button": {
                          "standard": {
                            "type": "borderedProminent",
                            "shape": "capsule"
                          }
                        }
                      },
                      "events": {
                        "onTap": [
                          {
                            "state": {
                              "id": "regen9",
                              "input": {
                                "p": "{{ random(0,5) }}",
                                "entries": "{{ map(range(81), 0) }}",
                                "selected": -1
                              },
                              "output": {
                                "success": [
                                  {
                                    "service": {
                                      "id": "regen9_h",
                                      "input": {
                                        "serviceId": "sudoku_audio",
                                        "params": {
                                          "haptic": "medium"
                                        }
                                      }
                                    }
                                  }
                                ]
                              }
                            }
                          }
                        ]
                      }
                    },
                    {
                      "id": "board9",
                      "type": "vstack",
                      "context": {
                        "_spacing": 8
                      },
                      "style": {
                        "layout": {
                          "padding": 8,
                          "maxWidth": "infinity"
                        },
                        "common": {
                          "background": {
                            "light": "#F2F2F7",
                            "dark": "#1C1C1E"
                          },
                          "cornerRadius": 18
                        },
                        "shadow": {
                          "color": {
                            "color": "black",
                            "opacity": 0.14
                          },
                          "radius": 10,
                          "y": 5
                        }
                      },
                      "children": [
                        {
                          "id": "grid9tab",
                          "type": "grid",
                          "context": {
                            "_gridType": "lazyVGrid",
                            "_spacing": 3
                          },
                          "style": {
                            "grid": {
                              "columns": [
                                {
                                  "kind": "flexible",
                                  "minimum": 30,
                                  "maximum": 40,
                                  "spacing": 3
                                },
                                {
                                  "kind": "flexible",
                                  "minimum": 30,
                                  "maximum": 40,
                                  "spacing": 3
                                },
                                {
                                  "kind": "flexible",
                                  "minimum": 30,
                                  "maximum": 40,
                                  "spacing": 3
                                },
                                {
                                  "kind": "flexible",
                                  "minimum": 30,
                                  "maximum": 40,
                                  "spacing": 3
                                },
                                {
                                  "kind": "flexible",
                                  "minimum": 30,
                                  "maximum": 40,
                                  "spacing": 3
                                },
                                {
                                  "kind": "flexible",
                                  "minimum": 30,
                                  "maximum": 40,
                                  "spacing": 3
                                },
                                {
                                  "kind": "flexible",
                                  "minimum": 30,
                                  "maximum": 40,
                                  "spacing": 3
                                },
                                {
                                  "kind": "flexible",
                                  "minimum": 30,
                                  "maximum": 40,
                                  "spacing": 3
                                },
                                {
                                  "kind": "flexible",
                                  "minimum": 30,
                                  "maximum": 40,
                                  "spacing": 3
                                }
                              ]
                            }
                          },
                          "children": [
                            {
                              "id": "cells9tab",
                              "type": "dynamic",
                              "context": {
                                "_data": "{{ range(81) }}"
                              },
                              "prototype": {
                                "id": "cell9tab",
                                "type": "button",
                                "context": {
                                  "_label": "",
                                  "i": "@{item}",
                                  "clue": "{{ contains(${masks}[${p}], @{item}) }}",
                                  "val": "{{ @{clue} ? ${base}[@{i}] : ${entries}[@{i}] }}",
                                  "wrong": "{{ !@{clue} && @{val} != 0 && @{val} != ${base}[@{i}] }}",
                                  "sel": "{{ ${selected} == @{i} }}"
                                },
                                "style": {
                                  "button": {
                                    "custom": {
                                      "layout": {
                                        "height": 34,
                                        "maxWidth": "infinity"
                                      },
                                      "common": {
                                        "background": "{{ @{wrong} ? {'light':'#FFE3E0','dark':'#4A1714'} : (@{sel} ? {'light':'#FFF3B0','dark':'#5A4700'} : (@{clue} ? {'light':'#DDEBFF','dark':'#17365F'} : {'light':'#FFFFFF','dark':'#343438'})) }}",
                                        "cornerRadius": 7
                                      }
                                    }
                                  },
                                  "animation": {
                                    "kind": "spring",
                                    "value": "@{sel}",
                                    "duration": 0.25,
                                    "bounce": 0.3
                                  }
                                },
                                "children": [
                                  {
                                    "id": "cell9tab_text",
                                    "type": "text",
                                    "context": {
                                      "_text": "{{ @{val} == 0 ? '' : cast(@{val}, 'str') }}"
                                    },
                                    "style": {
                                      "common": {
                                        "font": {
                                          "kind": "caption",
                                          "weight": "bold"
                                        },
                                        "foreground": "{{ @{wrong} ? {'color':'red'} : (@{clue} ? {'light':'#123B68','dark':'#DDEBFF'} : {'light':'#1C1C1E','dark':'#F2F2F7'}) }}"
                                      }
                                    }
                                  }
                                ],
                                "events": {
                                  "onTap": [
                                    {
                                      "condition": {
                                        "id": "cell9_editable",
                                        "input": "{{ !contains(${masks}[${p}], @{i}) }}",
                                        "output": {
                                          "success": [
                                            {
                                              "state": {
                                                "id": "cell9_select",
                                                "input": {
                                                  "selected": "@{i}"
                                                },
                                                "output": {
                                                  "success": [
                                                    {
                                                      "service": {
                                                        "id": "cell9_h",
                                                        "input": {
                                                          "serviceId": "sudoku_audio",
                                                          "params": {
                                                            "haptic": "light"
                                                          }
                                                        }
                                                      }
                                                    }
                                                  ]
                                                }
                                              }
                                            }
                                          ],
                                          "failure": [
                                            {
                                              "service": {
                                                "id": "cell9_warn",
                                                "input": {
                                                  "serviceId": "sudoku_audio",
                                                  "params": {
                                                    "haptic": "warning"
                                                  }
                                                }
                                              }
                                            }
                                          ]
                                        }
                                      }
                                    }
                                  ]
                                }
                              }
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "id": "pad9",
                      "type": "vstack",
                      "context": {
                        "_spacing": 8
                      },
                      "style": {
                        "layout": {
                          "padding": 10
                        },
                        "common": {
                          "background": {
                            "color": "surface"
                          },
                          "cornerRadius": 16
                        }
                      },
                      "children": [
                        {
                          "id": "numgrid9",
                          "type": "grid",
                          "context": {
                            "_gridType": "lazyVGrid",
                            "_spacing": 6
                          },
                          "style": {
                            "grid": {
                              "columns": [
                                {
                                  "kind": "flexible",
                                  "minimum": 38,
                                  "maximum": 58,
                                  "spacing": 6
                                },
                                {
                                  "kind": "flexible",
                                  "minimum": 38,
                                  "maximum": 58,
                                  "spacing": 6
                                },
                                {
                                  "kind": "flexible",
                                  "minimum": 38,
                                  "maximum": 58,
                                  "spacing": 6
                                }
                              ]
                            }
                          },
                          "children": [
                            {
                              "id": "nums9tab",
                              "type": "dynamic",
                              "context": {
                                "_data": "${nums}"
                              },
                              "prototype": {
                                "id": "num9tab",
                                "type": "button",
                                "context": {
                                  "_label": "{{ cast(@{item}, 'str') }}"
                                },
                                "style": {
                                  "button": {
                                    "standard": {
                                      "type": "bordered",
                                      "shape": "capsule"
                                    }
                                  },
                                  "layout": {
                                    "height": 44
                                  }
                                },
                                "events": {
                                  "onTap": [
                                    {
                                      "condition": {
                                        "id": "num9_has",
                                        "input": "{{ ${selected} >= 0 }}",
                                        "output": {
                                          "success": [
                                            {
                                              "state": {
                                                "id": "num9_fill",
                                                "input": {
                                                  "entries": "{{ setAt(${entries}, ${selected}, @{item}) }}"
                                                },
                                                "output": {
                                                  "success": [
                                                    {
                                                      "service": {
                                                        "id": "num9_h",
                                                        "input": {
                                                          "serviceId": "sudoku_audio",
                                                          "params": {
                                                            "haptic": "light"
                                                          }
                                                        }
                                                      }
                                                    },
                                                    {
                                                      "condition": {
                                                        "id": "num9_solved",
                                                        "input": "{{ sum(map(range(81), (contains(${masks}[${p}], @{item}) || ${entries}[@{item}] == ${base}[@{item}]) ? 1 : 0)) == 81 && !contains(${completedIds}, '9-' + cast(${p}, 'str')) }}",
                                                        "output": {
                                                          "success": [
                                                            {
                                                              "state": {
                                                                "id": "save9_state",
                                                                "input": {
                                                                  "completedIds": "{{ ${completedIds} + ('9-' + cast(${p}, 'str')) }}"
                                                                },
                                                                "output": {
                                                                  "success": [
                                                                    {
                                                                      "repo": {
                                                                        "id": "save9_repo",
                                                                        "input": {
                                                                          "repositoryId": "sudoku_progress_store",
                                                                          "operation": "create",
                                                                          "params": {
                                                                            "collection": "progress",
                                                                            "documentId": "sudoku",
                                                                            "rewrite": true,
                                                                            "body": {
                                                                              "completedIds": "${completedIds}"
                                                                            }
                                                                          }
                                                                        }
                                                                      }
                                                                    },
                                                                    {
                                                                      "service": {
                                                                        "id": "solved9_h",
                                                                        "input": {
                                                                          "serviceId": "sudoku_audio",
                                                                          "params": {
                                                                            "haptic": "success"
                                                                          }
                                                                        }
                                                                      }
                                                                    }
                                                                  ]
                                                                }
                                                              }
                                                            }
                                                          ]
                                                        }
                                                      }
                                                    }
                                                  ]
                                                }
                                              }
                                            }
                                          ],
                                          "failure": [
                                            {
                                              "service": {
                                                "id": "num9_warn",
                                                "input": {
                                                  "serviceId": "sudoku_audio",
                                                  "params": {
                                                    "haptic": "warning"
                                                  }
                                                }
                                              }
                                            }
                                          ]
                                        }
                                      }
                                    }
                                  ]
                                }
                              }
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "id": "clear9",
                      "type": "button",
                      "context": {
                        "_label": "Clear selected cell"
                      },
                      "style": {
                        "button": {
                          "standard": {
                            "type": "bordered",
                            "shape": "capsule"
                          }
                        },
                        "layout": {
                          "height": 44
                        }
                      },
                      "events": {
                        "onTap": [
                          {
                            "condition": {
                              "id": "clear9_has",
                              "input": "{{ ${selected} >= 0 }}",
                              "output": {
                                "success": [
                                  {
                                    "state": {
                                      "id": "clear9_state",
                                      "input": {
                                        "entries": "{{ setAt(${entries}, ${selected}, 0) }}"
                                      },
                                      "output": {
                                        "success": [
                                          {
                                            "service": {
                                              "id": "clear9_h",
                                              "input": {
                                                "serviceId": "sudoku_audio",
                                                "params": {
                                                  "haptic": "light"
                                                }
                                              }
                                            }
                                          }
                                        ]
                                      }
                                    }
                                  }
                                ],
                                "failure": [
                                  {
                                    "service": {
                                      "id": "clear9_warn",
                                      "input": {
                                        "serviceId": "sudoku_audio",
                                        "params": {
                                          "haptic": "warning"
                                        }
                                      }
                                    }
                                  }
                                ]
                              }
                            }
                          }
                        ]
                      }
                    },
                    {
                      "id": "status9",
                      "type": "text",
                      "context": {
                        "_text": "{{ @{done} ? 'Solved. Completion is saved.' : (contains(${completedIds}, @{pid}) ? 'Solved before. Regenerate for another puzzle.' : 'Select an empty cell, then tap a number.') }}"
                      },
                      "style": {
                        "common": {
                          "font": "caption",
                          "foreground": {
                            "color": "secondary"
                          }
                        },
                        "text": {
                          "multilineTextAlignment": "center"
                        }
                      }
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "id": "legacy_id_holder",
      "type": "conditional",
      "context": {
        "_condition": false,
        "_trueComponent": {
          "id": "legacy_id_stack",
          "type": "vstack",
          "children": [
            {
              "id": "sudoku_scroll",
              "type": "empty"
            },
            {
              "id": "sudoku_root",
              "type": "empty"
            },
            {
              "id": "show_selection",
              "type": "empty"
            },
            {
              "id": "selection_screen",
              "type": "empty"
            },
            {
              "id": "sel_intro",
              "type": "empty"
            },
            {
              "id": "sel_intro_icon",
              "type": "empty"
            },
            {
              "id": "sel_intro_texts",
              "type": "empty"
            },
            {
              "id": "sel_intro_head",
              "type": "empty"
            },
            {
              "id": "sel_intro_body",
              "type": "empty"
            },
            {
              "id": "sec4",
              "type": "empty"
            },
            {
              "id": "sec4_head",
              "type": "empty"
            },
            {
              "id": "sec4_icon",
              "type": "empty"
            },
            {
              "id": "sec4_title",
              "type": "empty"
            },
            {
              "id": "sec4_rows",
              "type": "empty"
            },
            {
              "id": "dyn4",
              "type": "empty"
            },
            {
              "id": "puz4_btn",
              "type": "empty"
            },
            {
              "id": "puz4_row",
              "type": "empty"
            },
            {
              "id": "puz4_badge",
              "type": "empty"
            },
            {
              "id": "puz4_txt",
              "type": "empty"
            },
            {
              "id": "puz4_name",
              "type": "empty"
            },
            {
              "id": "puz4_status",
              "type": "empty"
            },
            {
              "id": "select4",
              "type": "empty"
            },
            {
              "id": "select4_haptic",
              "type": "empty"
            },
            {
              "id": "sec6",
              "type": "empty"
            },
            {
              "id": "sec6_head",
              "type": "empty"
            },
            {
              "id": "sec6_icon",
              "type": "empty"
            },
            {
              "id": "sec6_title",
              "type": "empty"
            },
            {
              "id": "sec6_rows",
              "type": "empty"
            },
            {
              "id": "dyn6",
              "type": "empty"
            },
            {
              "id": "puz6_btn",
              "type": "empty"
            },
            {
              "id": "puz6_row",
              "type": "empty"
            },
            {
              "id": "puz6_badge",
              "type": "empty"
            },
            {
              "id": "puz6_txt",
              "type": "empty"
            },
            {
              "id": "puz6_name",
              "type": "empty"
            },
            {
              "id": "puz6_status",
              "type": "empty"
            },
            {
              "id": "select6",
              "type": "empty"
            },
            {
              "id": "select6_haptic",
              "type": "empty"
            },
            {
              "id": "sec9",
              "type": "empty"
            },
            {
              "id": "sec9_head",
              "type": "empty"
            },
            {
              "id": "sec9_icon",
              "type": "empty"
            },
            {
              "id": "sec9_title",
              "type": "empty"
            },
            {
              "id": "sec9_rows",
              "type": "empty"
            },
            {
              "id": "dyn9",
              "type": "empty"
            },
            {
              "id": "puz9_btn",
              "type": "empty"
            },
            {
              "id": "puz9_row",
              "type": "empty"
            },
            {
              "id": "puz9_badge",
              "type": "empty"
            },
            {
              "id": "puz9_txt",
              "type": "empty"
            },
            {
              "id": "puz9_name",
              "type": "empty"
            },
            {
              "id": "puz9_status",
              "type": "empty"
            },
            {
              "id": "select9",
              "type": "empty"
            },
            {
              "id": "select9_haptic",
              "type": "empty"
            },
            {
              "id": "show_game",
              "type": "empty"
            },
            {
              "id": "game_screen",
              "type": "empty"
            },
            {
              "id": "game_top",
              "type": "empty"
            },
            {
              "id": "list_btn",
              "type": "empty"
            },
            {
              "id": "back_to_list",
              "type": "empty"
            },
            {
              "id": "back_haptic",
              "type": "empty"
            },
            {
              "id": "game_spacer",
              "type": "empty"
            },
            {
              "id": "game_chip",
              "type": "empty"
            },
            {
              "id": "game_chip_icon",
              "type": "empty"
            },
            {
              "id": "game_chip_text",
              "type": "empty"
            },
            {
              "id": "hint_card",
              "type": "empty"
            },
            {
              "id": "hint_icon",
              "type": "empty"
            },
            {
              "id": "hint_text",
              "type": "empty"
            },
            {
              "id": "board_card",
              "type": "empty"
            },
            {
              "id": "board4_cond",
              "type": "empty"
            },
            {
              "id": "board4_wrap",
              "type": "empty"
            },
            {
              "id": "grid4",
              "type": "empty"
            },
            {
              "id": "cells4",
              "type": "empty"
            },
            {
              "id": "cell4",
              "type": "empty"
            },
            {
              "id": "cell4_text",
              "type": "empty"
            },
            {
              "id": "cell4_editable",
              "type": "empty"
            },
            {
              "id": "cell4_select",
              "type": "empty"
            },
            {
              "id": "cell4_haptic",
              "type": "empty"
            },
            {
              "id": "cell4_fixed_hint",
              "type": "empty"
            },
            {
              "id": "cell4_warn",
              "type": "empty"
            },
            {
              "id": "board6_cond",
              "type": "empty"
            },
            {
              "id": "board6_wrap",
              "type": "empty"
            },
            {
              "id": "grid6",
              "type": "empty"
            },
            {
              "id": "cells6",
              "type": "empty"
            },
            {
              "id": "cell6",
              "type": "empty"
            },
            {
              "id": "cell6_text",
              "type": "empty"
            },
            {
              "id": "cell6_editable",
              "type": "empty"
            },
            {
              "id": "cell6_select",
              "type": "empty"
            },
            {
              "id": "cell6_haptic",
              "type": "empty"
            },
            {
              "id": "cell6_fixed_hint",
              "type": "empty"
            },
            {
              "id": "cell6_warn",
              "type": "empty"
            },
            {
              "id": "board9_cond",
              "type": "empty"
            },
            {
              "id": "board9_wrap",
              "type": "empty"
            },
            {
              "id": "grid9",
              "type": "empty"
            },
            {
              "id": "cells9",
              "type": "empty"
            },
            {
              "id": "cell9",
              "type": "empty"
            },
            {
              "id": "cell9_text",
              "type": "empty"
            },
            {
              "id": "cell9_editable",
              "type": "empty"
            },
            {
              "id": "cell9_select",
              "type": "empty"
            },
            {
              "id": "cell9_haptic",
              "type": "empty"
            },
            {
              "id": "cell9_fixed_hint",
              "type": "empty"
            },
            {
              "id": "cell9_warn",
              "type": "empty"
            },
            {
              "id": "pad_card",
              "type": "empty"
            },
            {
              "id": "pad_head",
              "type": "empty"
            },
            {
              "id": "pad_icon",
              "type": "empty"
            },
            {
              "id": "pad_title",
              "type": "empty"
            },
            {
              "id": "pad_spacer",
              "type": "empty"
            },
            {
              "id": "pad_hint",
              "type": "empty"
            },
            {
              "id": "num_grid",
              "type": "empty"
            },
            {
              "id": "num_dyn",
              "type": "empty"
            },
            {
              "id": "num_btn",
              "type": "empty"
            },
            {
              "id": "num_txt",
              "type": "empty"
            },
            {
              "id": "num_has_cell",
              "type": "empty"
            },
            {
              "id": "num_fill",
              "type": "empty"
            },
            {
              "id": "num_tap_haptic",
              "type": "empty"
            },
            {
              "id": "num_solved_check",
              "type": "empty"
            },
            {
              "id": "num_new_complete",
              "type": "empty"
            },
            {
              "id": "solve_haptic",
              "type": "empty"
            },
            {
              "id": "save_progress",
              "type": "empty"
            },
            {
              "id": "num_mark_complete",
              "type": "empty"
            },
            {
              "id": "save_progress_note",
              "type": "empty"
            },
            {
              "id": "num_already_complete",
              "type": "empty"
            },
            {
              "id": "num_no_cell",
              "type": "empty"
            },
            {
              "id": "num_warn_haptic",
              "type": "empty"
            },
            {
              "id": "clear_btn",
              "type": "empty"
            },
            {
              "id": "clear_has_cell",
              "type": "empty"
            },
            {
              "id": "clear_cell",
              "type": "empty"
            },
            {
              "id": "clear_haptic",
              "type": "empty"
            },
            {
              "id": "clear_no_cell",
              "type": "empty"
            },
            {
              "id": "clear_warn",
              "type": "empty"
            },
            {
              "id": "solved_cond",
              "type": "empty"
            },
            {
              "id": "solved_card",
              "type": "empty"
            },
            {
              "id": "solved_icon",
              "type": "empty"
            },
            {
              "id": "solved_text",
              "type": "empty"
            }
          ]
        }
      }
    }
  ]
}