{
  "_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 reserved | 31–32 owner instruction-only | 33–34 reserved | 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. 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). 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."
  },
  "layout": {
    "en": {
      "hero": "ahoQqZWrLM4",
      "homepage": {
        "student": ["", "", ""],
        "parent": ["", "", ""],
        "teacher": ["", "", ""],
        "owner": ["", "", "", ""],
        "administrator": ["", "", "", ""]
      },
      "instruction_pages": {
        "student": ["", "", ""],
        "parent": ["", "", ""],
        "teacher": ["", "", ""],
        "reserved_rows_28_to_30": ["", "", ""],
        "owner": ["", ""],
        "reserved_rows_33_to_34": ["", ""],
        "administrator": ["", "", "", "", ""]
      },
      "showcase": {
        "admins": ["XkTQFtRr4TE", "2qn5UI1vMj0", "0UKfZhwBKp8", ""],
        "students": ["", "", "", ""],
        "parents": ["", "sf7guJ4gGgc", "", ""],
        "teachers": ["", "", "", ""]
      }
    },
    "zh": {
      "hero": "yOIIx1xSD10",
      "homepage": {
        "student": ["gSe1v6nfZ48", "MEFibiiEW2Y", "DqR6KsOtnbY"],
        "parent": ["APY7iwXxoMc", "", ""],
        "teacher": ["", "", ""],
        "owner": ["", "", "", ""],
        "administrator": ["", "", "", ""]
      },
      "instruction_pages": {
        "student": ["Ta9Sy6uCh7U", "", ""],
        "parent": ["", "", ""],
        "teacher": ["", "", ""],
        "reserved_rows_28_to_30": ["", "", ""],
        "owner": ["", ""],
        "reserved_rows_33_to_34": ["", ""],
        "administrator": ["", "", "", "", ""]
      },
      "showcase": {
        "admins": ["XkTQFtRr4TE", "B9Sn8Uih_zM", "dqP9aJT1IAE", ""],
        "students": ["", "", "", ""],
        "parents": ["", "sf7guJ4gGgc", "", ""],
        "teachers": ["", "", "", ""]
      }
    }
  }
}
