{
  "_": "剧本：demo.js 照住播，冇后端、冇 LLM。每步 actor = parent（家长喺手机撳发送）/ you（你喺前台撳卡上个掣）。pre = 呢步一开始就出现嘅嘢（例如等你批嘅卡），effects = 撳完之后发生嘅嘢。所有字串都要有 zh 同 en（test/unit/script.test.mjs 会验）。人名、补习社名、价钱、地址全部虚构。",
  "centre": { "zh": "松果补习社", "en": "Pinecone Tutoring" },
  "opening": {
    "title": { "zh": "家长夜晚问，AI 即刻覆，你点一下就得", "en": "Parents ask at night. The AI replies. You just tap." },
    "lead": { "zh": "你系补习社老板。三幕，约 1 分钟，自己撳「下一步」。", "en": "You run a tutoring centre. Three scenes, about a minute. Tap Next at your own pace." },
    "cast": [
      { "role": "parent", "icon": "📱", "name": { "zh": "家长 · 陈太", "en": "Parent · Mrs Chen" }, "line": { "zh": "喺 WhatsApp 问嘢、覆嘢", "en": "Messages on WhatsApp" } },
      { "role": "ai", "icon": "🤖", "name": { "zh": "AI 前台", "en": "AI front desk" }, "line": { "zh": "即刻覆、起草、跟进", "en": "Replies, drafts, follows up" } },
      { "role": "you", "icon": "💼", "name": { "zh": "你 · 老板", "en": "You · owner" }, "line": { "zh": "点一下「确认」", "en": "Tap \"Confirm\"" } }
    ],
    "start": { "zh": "开始", "en": "Start" }
  },
  "scenes": [
    { "n": 1, "title": { "zh": "夜晚查询 → 试堂", "en": "Night enquiry → trial" }, "clock": { "zh": "星期二 晚上 10:42", "en": "Tue 10:42 pm" } },
    { "n": 2, "title": { "zh": "取消堂 → 补课", "en": "Cancelled class → make-up" }, "clock": { "zh": "星期四 下午 2:05", "en": "Thu 2:05 pm" } },
    { "n": 3, "title": { "zh": "家长 feedback", "en": "Parent feedback" }, "clock": { "zh": "两星期后 · 星期日", "en": "Two weeks later · Sun" } }
  ],
  "steps": [
    {
      "id": "ask", "scene": 1, "actor": "parent",
      "caption": { "zh": "夜晚 10 点，家长喺 WhatsApp 问价", "en": "10:42 pm: a parent asks about fees on WhatsApp" },
      "say": { "zh": "你好，我个仔读 Year 4，想准备明年考 OC，你哋有冇班？几钱？", "en": "Hi, my son is in Year 4 and we're preparing for the OC test next year. Do you have a class? How much is it?" },
      "effects": [
        { "type": "msg", "from": "ai", "text": { "zh": "陈太你好！Year 4 OC 班逢星期六 9:30–11:30，每堂 $45。可以先嚟免费试堂，想约边个时间？\n① 本星期六 9:30\n② 星期日 2:00", "en": "Hi Mrs Chen! Our Year 4 OC class runs Saturdays 9:30–11:30, $45 a lesson. Would you like a free trial first?\n① This Saturday 9:30\n② Sunday 2:00" } },
        { "type": "log", "time": "22:42", "text": { "zh": "答咗陈太：价钱、时间表（你批准过嘅答案）", "en": "Answered Mrs Chen: fees and timetable (your approved answers)" } }
      ]
    },
    {
      "id": "pick", "scene": 1, "actor": "parent",
      "caption": { "zh": "家长拣时间，AI 留位，等你确认", "en": "The parent picks a time. The AI holds the spot for you to confirm." },
      "say": { "zh": "① 星期六 9:30 得，佢叫 Ethan", "en": "① Saturday 9:30 works. His name is Ethan." },
      "effects": [
        { "type": "msg", "from": "ai", "text": { "zh": "好！帮 Ethan 留咗星期六 9:30 试堂位，前台确认后会再通知你 🙂", "en": "Great! Ethan's trial spot on Saturday 9:30 is on hold. The front desk will confirm shortly 🙂" } },
        { "type": "card", "id": "trial",
          "title": { "zh": "试堂预约", "en": "Trial booking" },
          "facts": [
            { "zh": "学生：Ethan · Year 4 · 目标 OC", "en": "Student: Ethan · Year 4 · goal OC" },
            { "zh": "时间：星期六 9:30", "en": "Time: Saturday 9:30" }
          ],
          "draft": { "zh": "陈太，Ethan 嘅试堂已确认：星期六 9:30，地址 12 Example St（示范）。星期五会再提醒你。", "en": "Mrs Chen, Ethan's trial is confirmed: Saturday 9:30 at 12 Example St (demo). We'll remind you on Friday." },
          "approve": { "zh": "确认并发出", "en": "Confirm and send" } }
      ]
    },
    {
      "id": "confirm", "scene": 1, "actor": "you", "card": "trial", "clock": { "zh": "星期三 朝早 8:15", "en": "Wed 8:15 am" },
      "caption": { "zh": "第二朝你撳一下，确认同提醒就安排好", "en": "Next morning you tap once. Confirmation and reminder are set." },
      "effects": [
        { "type": "msg", "from": "you", "text": { "zh": "陈太，Ethan 嘅试堂已确认：星期六 9:30，地址 12 Example St（示范）。星期五会再提醒你。", "en": "Mrs Chen, Ethan's trial is confirmed: Saturday 9:30 at 12 Example St (demo). We'll remind you on Friday." } },
        { "type": "log", "time": "08:15", "text": { "zh": "星期五 6pm 自动提醒已排好", "en": "Friday 6 pm reminder scheduled" } }
      ]
    },
    {
      "id": "cancel", "scene": 2, "actor": "you", "card": "cancel",
      "caption": { "zh": "黄老师病咗。AI 起草好通知同补课选择，你撳一下", "en": "Ms Wong is sick. The AI has drafted the notice and make-up options. One tap." },
      "pre": [
        { "type": "card", "id": "cancel",
          "title": { "zh": "取消堂：今日 4:30 Year 6 数学", "en": "Cancel: today 4:30 Year 6 Maths" },
          "facts": [
            { "zh": "原因：黄老师请病假", "en": "Reason: Ms Wong is on sick leave" },
            { "zh": "受影响：8 个家庭", "en": "Affected: 8 families" },
            { "zh": "补课：星期六 1:00 / 星期日 10:00（按你嘅规则）", "en": "Make-ups: Sat 1:00 / Sun 10:00 (your rules)" }
          ],
          "draft": { "zh": "家长群通知 + 8 条私信，每条有 2 个补课时间", "en": "Parent group notice + 8 private messages, each with 2 make-up times" },
          "approve": { "zh": "批准发出", "en": "Approve and send" } }
      ],
      "effects": [
        { "type": "msg", "from": "you", "text": { "zh": "陈太你好，黄老师今日病咗，4:30 Year 6 数学要取消，唔好意思。Chloe 可以拣补课：\n① 星期六 1:00\n② 星期日 10:00\n覆 1 或 2 就得。", "en": "Hi Mrs Chen, Ms Wong is sick today, so the 4:30 Year 6 Maths class is cancelled. Sorry! Chloe can pick a make-up:\n① Saturday 1:00\n② Sunday 10:00\nJust reply 1 or 2." } },
        { "type": "tracker", "id": "makeup", "label": { "zh": "补课回复", "en": "Make-up replies" }, "done": 0, "total": 8 }
      ]
    },
    {
      "id": "reply2", "scene": 2, "actor": "parent",
      "caption": { "zh": "家长覆「2」就搞掂，AI 帮你跟边个未覆", "en": "The parent replies \"2\". The AI tracks who hasn't replied." },
      "say": { "zh": "2 啊，唔该", "en": "2 please, thanks" },
      "effects": [
        { "type": "msg", "from": "ai", "text": { "zh": "收到！Chloe 星期日 10:00 补课 ✅", "en": "Got it! Chloe's make-up is Sunday 10:00 ✅" } },
        { "type": "tracker", "id": "makeup", "label": { "zh": "补课回复", "en": "Make-up replies" }, "done": 5, "total": 8, "note": { "zh": "3 个未覆，6 点自动再问", "en": "3 not replied; asking again at 6 pm" } }
      ]
    },
    {
      "id": "feedback", "scene": 3, "actor": "you", "card": "fb",
      "caption": { "zh": "两星期后：AI 将黄老师嘅语音笔记写成 3 句", "en": "Two weeks on: the AI turns Ms Wong's voice notes into 3 sentences" },
      "pre": [
        { "type": "card", "id": "fb",
          "title": { "zh": "家长 feedback · Ethan", "en": "Parent feedback · Ethan" },
          "facts": [
            { "zh": "来源：黄老师 2 堂嘅 30 秒语音笔记", "en": "Source: Ms Wong's 30-second voice notes from 2 lessons" }
          ],
          "draft": { "zh": "陈太你好，Ethan 呢两星期分数加减进步咗，两堂功课都有交。应用题佢读题有啲快，返屋企每日做 2 题、先圈低关键字会有帮助。—— 黄老师", "en": "Hi Mrs Chen, Ethan's fraction skills have improved over the past two weeks, and he handed in homework for both lessons. He reads word problems a little fast; 2 a day at home, circling key words first, will help. — Ms Wong" },
          "checks": [
            { "zh": "只用黄老师讲过嘅嘢", "en": "Only what Ms Wong said" },
            { "zh": "学生名、堂数核对过", "en": "Student name and lessons checked" }
          ],
          "approve": { "zh": "发出", "en": "Send" } }
      ],
      "effects": [
        { "type": "msg", "from": "you", "text": { "zh": "陈太你好，Ethan 呢两星期分数加减进步咗，两堂功课都有交。应用题佢读题有啲快，返屋企每日做 2 题、先圈低关键字会有帮助。—— 黄老师", "en": "Hi Mrs Chen, Ethan's fraction skills have improved over the past two weeks, and he handed in homework for both lessons. He reads word problems a little fast; 2 a day at home, circling key words first, will help. — Ms Wong" } }
      ]
    },
    {
      "id": "thanks", "scene": 3, "actor": "parent",
      "caption": { "zh": "家长知道有人跟住个仔", "en": "The parent can see someone is following her son" },
      "say": { "zh": "多谢黄老师！我会叫佢慢慢读题 🙏", "en": "Thank you Ms Wong! I'll tell him to slow down 🙏" },
      "effects": []
    }
  ],
  "ending": {
    "title": { "zh": "家长开口，AI 跑腿，你点头就够", "en": "Parents ask, the AI does the legwork, you nod" },
    "points": [
      { "zh": "夜晚问，即刻覆", "en": "Asked at night, answered at once" },
      { "zh": "取消堂，即刻有补课", "en": "Class cancelled, make-ups offered the same day" },
      { "zh": "feedback 唔使等成个 term", "en": "Feedback without waiting a whole term" }
    ],
    "contact": { "zh": "想喺你间补习社试下？电邮我哋", "en": "Try it at your centre: email us" },
    "replay": { "zh": "再玩一次", "en": "Play again" },
    "home": { "zh": "返首页", "en": "Back to home" },
    "tool": { "zh": "免费工具：取消堂通知生成器", "en": "Free tool: cancellation notice" }
  },
  "ui": {
    "title": { "zh": "试玩 demo · 补习社 AI 前台", "en": "Demo · AI front desk for tutoring" },
    "next": { "zh": "下一步", "en": "Next" },
    "prev": { "zh": "上一步", "en": "Back" },
    "restart": { "zh": "重来", "en": "Restart" },
    "finish": { "zh": "完成", "en": "Finish" },
    "showDesk": { "zh": "睇前台", "en": "Show desk" },
    "showPhone": { "zh": "睇家长手机", "en": "Show parent's phone" },
    "step": { "zh": "第 {n} / {total} 步", "en": "Step {n} of {total}" },
    "tabParent": { "zh": "家长手机", "en": "Parent's phone" },
    "tabDesk": { "zh": "你嘅前台", "en": "Your desk" },
    "parentName": { "zh": "陈太", "en": "Mrs Chen" },
    "phoneSub": { "zh": "AI 前台 · 通常即刻回复", "en": "AI front desk · usually replies at once" },
    "deskTitle": { "zh": "前台", "en": "Front desk" },
    "pending": { "zh": "等你批准", "en": "Waiting for you" },
    "empty": { "zh": "冇嘢等你批准 ✓", "en": "Nothing waiting ✓" },
    "done": { "zh": "AI 做咗", "en": "Done by the AI" },
    "sent": { "zh": "已发出", "en": "Sent" },
    "typing": { "zh": "输入中…", "en": "typing…" },
    "send": { "zh": "发送", "en": "Send" },
    "tapHere": { "zh": "点这里", "en": "Tap here" },
    "fromAI": { "zh": "AI 前台", "en": "AI front desk" },
    "fromYou": { "zh": "你批准", "en": "Approved by you" },
    "draft": { "zh": "AI 草稿", "en": "AI draft" },
    "fictional": { "zh": "示范：人名、补习社、价钱、地址全部虚构", "en": "Demo: names, centre, prices and address are fictional" },
    "newMsg": { "zh": "新讯息", "en": "new" }
  }
}
