{
  "_meta": {
    "about": "YouTube IDs for .intro-video-facade[data-video-map-row]. Row N uses merged slot index N-1. The loader flattens layout to exactly 39 cells; every array below has a fixed length—do not add or remove elements.",
    "row_order": "1 hero | 2–4 student (index nav) | 5–7 parent | 8–10 teacher | 11–14 owner | 15–18 administrator | 19–21 student instruction-only | 22–24 parent | 25–27 teacher | 28–30 register_instructions (blocks 1–3) | 31–32 owner instruction-only | 33–34 register_instructions (blocks 4–5) | 35–39 administrator instruction-only.",
    "administrator_example": "administrator_instructions.html has 9 facades: rows 15–18 reuse homepage.administrator (4 slots—the same videos as the Administrator strip on index.html). Rows 35–39 use instruction_pages.administrator (5 slots—extra blocks only on the detail page). You cannot put all 9 IDs in one array; that breaks the 39-cell layout and the map will not load.",
    "instruction_pages_required": "Keep the instruction_pages object and each sub-array at its fixed size. Use \"\" for no video. Removing the block or changing array lengths requires a code change in video-facade.js. register_28_to_30 (rows 28–30) and register_33_to_34 (rows 33–34) feed register_instructions.html only (not the homepage). A single slot does not auto-fill both index and detail: rows 15–18 are shared (one ID serves index strip + first four instruction blocks); rows 35–39 are detail-only and must be set separately.",
    "locales": "layout.en is the English canonical list. layout.zh is the effective list on Chinese paths (index-zh, *_tw.html, html lang zh); video-facade.js derives slots_zh overrides (non-empty only where zh differs from en). Empty zh cells inherit the English value—so for register_instructions, put Chinese IDs in layout.zh and English IDs in layout.en (do not leave zh empty if it should differ). Legacy top-level slots + slots_zh arrays are still supported if layout is omitted.",
    "showcase": "#featureShowcase cards use data-video-map-showcase (panel: admins|students|parents|teachers) + data-video-map-showcase-card (1–4). layout.*.showcase[panel][cardIndex-1] is the YouTube ID. Empty string = no play button. MP4 preview stays when data-src exists; YouTube thumbnail is fallback only when there is no short video.",
    "register_example": "register_instructions.html (EN) and register_instructions_tw.html (ZH) share rows 28–30 and 33–34 but use separate locale arrays: layout.en.instruction_pages.register_* for English, layout.zh.instruction_pages.register_* for Chinese. Owner instruction-only rows 31–32 sit between those two register bands—do not merge them into one array."
  },
  "layout": {
    "en": {
      "hero": "ahoQqZWrLM4",
      "homepage": {
        "student": [
          "",
          "",
          ""
        ],
        "parent": [
          "",
          "",
          ""
        ],
        "teacher": [
          "",
          "",
          ""
        ],
        "owner": [
          "",
          "",
          "",
          ""
        ],
        "administrator": [
          "",
          "",
          "",
          ""
        ]
      },
      "instruction_pages": {
        "student": [
          "",
          "",
          ""
        ],
        "parent": [
          "",
          "",
          ""
        ],
        "teacher": [
          "",
          "",
          ""
        ],
        "owner": [
          "",
          ""
        ],
        "administrator": [
          "",
          "",
          "",
          "",
          ""
        ],
        "register_28_to_30": [
          "",
          "",
          ""
        ],
        "register_33_to_34": [
          "",
          ""
        ]
      },
      "showcase": {
        "admins": [
          "XkTQFtRr4TE",
          "2qn5UI1vMj0",
          "0UKfZhwBKp8",
          ""
        ],
        "students": [
          "",
          "",
          "",
          ""
        ],
        "parents": [
          "",
          "sf7guJ4gGgc",
          "",
          ""
        ],
        "teachers": [
          "",
          "",
          "",
          ""
        ]
      }
    },
    "zh": {
      "hero": "yOIIx1xSD10",
      "homepage": {
        "student": [
          "gSe1v6nfZ48",
          "MEFibiiEW2Y",
          "DqR6KsOtnbY"
        ],
        "parent": [
          "rah0tbNEmqA",
          "",
          ""
        ],
        "teacher": [
          "",
          "",
          ""
        ],
        "owner": [
          "",
          "",
          "",
          ""
        ],
        "administrator": [
          "",
          "",
          "",
          ""
        ]
      },
      "instruction_pages": {
        "student": [
          "2vLzF4NUqVo",
          "Ta9Sy6uCh7U",
          ""
        ],
        "parent": [
          "",
          "",
          ""
        ],
        "teacher": [
          "",
          "",
          ""
        ],
        "owner": [
          "",
          ""
        ],
        "administrator": [
          "",
          "",
          "",
          "",
          ""
        ],
        "register_28_to_30": [
          "rah0tbNEmqA",
          "gSe1v6nfZ48",
          ""
        ],
        "register_33_to_34": [
          "",
          ""
        ]
      },
      "showcase": {
        "admins": [
          "XkTQFtRr4TE",
          "B9Sn8Uih_zM",
          "dqP9aJT1IAE",
          ""
        ],
        "students": [
          "",
          "",
          "",
          ""
        ],
        "parents": [
          "",
          "sf7guJ4gGgc",
          "",
          ""
        ],
        "teachers": [
          "",
          "",
          "",
          ""
        ]
      }
    }
  }
}
