/* global React */
/* ============================================================
   i18n — language context + dictionary for Foiga website kit
   Three languages: zh-Hant / en / ja
   Use:  const { t, lang, setLang } = useLang();   t('nav.home')
   For inline trilingual blocks, use: <T zh="..." en="..." ja="..."/>
   ============================================================ */

const LangContext = React.createContext({ lang: "zh", setLang: () => {} });

const COPY = {
  /* — meta — */
  "html.dir":           { zh: "ltr",          en: "ltr",          ja: "ltr" },
  "lang.zh.label":      { zh: "中",           en: "中",           ja: "中" },
  "lang.en.label":      { zh: "EN",           en: "EN",           ja: "EN" },
  "lang.ja.label":      { zh: "日",           en: "日",           ja: "日" },

  /* — top nav — */
  "nav.brand":          { zh: "FOIGA PHOTOGRAPHY", en: "FOIGA PHOTOGRAPHY", ja: "FOIGA PHOTOGRAPHY" },
  "nav.home":           { zh: "首頁",         en: "Home",         ja: "はじまり" },
  "nav.journal":        { zh: "光影手帖",     en: "Light Journal", ja: "写真手帖" },
  "nav.sessions":       { zh: "拍攝方案",     en: "Sessions",     ja: "撮影の時間" },
  "nav.about":          { zh: "關於我們",     en: "Our Story",    ja: "小さな物語" },
  "nav.contact":        { zh: "來信相談",     en: "Say Hello",    ja: "お便り" },
  "nav.inquire":        { zh: "來信相談 →",   en: "Inquire →",    ja: "お便り →" },

  /* — sessions submenu — */
  "sub.plans":          { zh: "婚紗方案",     en: "Wedding plans", ja: "ウェディング" },
  "sub.short":          { zh: "輕鬆走寫真方案", en: "Easy walks",   ja: "ぶらり撮影" },
  "sub.addons":         { zh: "加值項目",     en: "Add-ons",      ja: "オプション" },
  "sub.details":        { zh: "拍攝細節",     en: "What’s included", ja: "撮影の流れ" },
  "sub.album":          { zh: "相冊與微電影", en: "Album & Film", ja: "アルバム＆映像" },

  /* — hero — */
  "hero.folio.issue":   { zh: "● 第 07 期 · 二〇二六年春",  en: "● Issue 07 · Spring 2026",   ja: "● 第07号 · 2026年春" },
  "hero.folio.city":    { zh: "京都",         en: "Tokyo",        ja: "東京" },
  "hero.folio.date":    { zh: "2026 / 05 / 21", en: "2026 / 03 / 21", ja: "2026 / 03 / 21" },
  "hero.kicker":        { zh: "— 攝影師的日記", en: "— A Photographer’s Diary", ja: "— 写真家の日記" },
  "hero.title.zh":      { zh: "ひとさじの光で、",            en: "A spoonful",   ja: "ひとさじの" },
  "hero.title.line1":   { zh: "日々を、",                    en: "of light,",    ja: "光で、" },
  "hero.title.line2":   { zh: "ひとさじの光で。",            en: "a record of days.", ja: "日々の記録を。" },
  "hero.subtitle":      { zh: "用一勺光，記下每一天。",      en: "日々を、ひとさじの光で。", ja: "A spoonful of light, a record of days." },
  "hero.body":          {
    zh: "Foiga 是一家小小的日本在地攝影公司，記錄人像、婚紗與旅行——每半年集結一本寫真集，每週寫一則手帖。我們會早一點到，留得比約定的久一些，不會請任何人擺姿勢。",
    en: "Foiga is a small studio for portraits, weddings and quiet travel — published twice a year as a photo book, and most weeks as a journal. We arrive early, stay later than agreed, and never ask anyone to pose.",
    ja: "Foigaはポートレート・ウエディング・静かな旅を撮る小さな写真スタジオです。半年に一度の写真集と、ほぼ毎週の手帖。少し早めに着き、約束より長くいて、誰にもポーズをお願いしません。",
  },
  "hero.cta.primary":   { zh: "閱讀本期",     en: "Read the issue", ja: "今号を読む" },
  "hero.cta.ghost":     { zh: "查看作品 →",   en: "See the portfolio →", ja: "作品を見る →" },
  "hero.current":       { zh: "● 最近的拍攝",   en: "● Recent sitting", ja: "● 最近の撮影" },
  "hero.current.title": { zh: "奈良 · 五月",     en: "Kyoto · May",   ja: "京都 · 五月" },
  "hero.current.meta":  { zh: "Mr. & Mrs. T · 奈良公園", en: "Mr. & Mrs. T · Ninna-ji", ja: "Tさんご夫妻 · 仁和寺" },

  /* — journal strip — */
  "journal.kicker":     { zh: "光影手帖",     en: "The Journal",  ja: "写真手帖" },
  "journal.title":      { zh: "在地的故事，", en: "Local narratives,", ja: "土地の物語、" },
  "journal.subtitle":   { zh: "寫給慢慢走的人。", en: "for the slow traveller.", ja: "ゆっくり歩く人へ。" },
  "journal.read":       { zh: "閱讀",         en: "Read",         ja: "読む" },

  /* — feature — */
  "feature.kicker":     { zh: "● 春の章 · 2025 / 四月",  en: "● Spring Chapter · 2025 / April", ja: "● 春の章 · 2025 / 四月" },
  "feature.title":      { zh: "在花の下，",              en: "A pause beneath",                ja: "花の下で、" },
  "feature.subtitle":   { zh: "停下半步。",              en: "the blossoms.",                  ja: "半歩、止まる。" },
  "feature.body":       {
    zh: "京都的櫻花一年只開七日。我們在原谷苑的早晨等到第三天——花氣比風還慢，落瓣鋪在草地上像一層薄雪。她把臉貼在他的肩上，沒有人說話，只有花在落。我們按了三次快門，這是中間的那一張。",
    en: "Kyoto’s blossoms open for seven days, no more. We waited until the third morning at Harayaen — the air slower than the breeze, fallen petals laid over the grass like a thin snow. She rested against his shoulder; no one spoke. We pressed the shutter three times. This is the middle frame.",
    ja: "京都の桜は、一年に七日しか咲きません。原谷苑、三日目の朝まで待ちました——風よりも花の気配がゆっくりで、落花は薄雪のように草の上に。彼女が肩にもたれ、誰も話さない。シャッターを三回。これはその真ん中の一枚です。",
  },
  "feature.credit":     { zh: "畫面所示：Y ＆ H，京都・鴨川左岸，四月。Foiga 攝。", en: "Pictured: Y & H, Harayaen, Kyoto, in April. Photographed by Foiga.", ja: "掲載：Y ＆ H、京都・原谷苑、四月。撮影：Foiga。" },
  "feature.cta":        { zh: "查看整輯 →",   en: "View the session →", ja: "セッションを見る →" },
  "feature.tag1":       { zh: "婚紗",         en: "Bridal",       ja: "ブライダル" },
  "feature.tag2":       { zh: "春・櫻",       en: "Spring / 櫻",  ja: "春・桜" },

  /* — portfolio — */
  "portfolio.kicker":   { zh: "作品集",       en: "Portfolio",    ja: "作品集" },
  "portfolio.title":    { zh: "一小段選輯，", en: "A small selection,", ja: "ささやかな抜粋、" },
  "portfolio.subtitle": { zh: "來自今年與去年。", en: "from this year and last.", ja: "今年と昨年から。" },

  /* — inquiry — */
  "inq.kicker":         { zh: "● 來信相談",   en: "● Inquire",    ja: "● お便り" },
  "inq.title":          { zh: "和我們說說那一天。", en: "A few words about the day.", ja: "その日のことを、少しだけ。" },
  "inq.subtitle":       { zh: "我們會在兩天內依序回覆。", en: "We answer within two days, in the order things arrive.", ja: "二日以内に、届いた順にお返事します。" },
  "inq.field.name":     { zh: "您的稱呼",     en: "Your name",    ja: "お名前" },
  "inq.field.email":    { zh: "電子郵件",     en: "Email",        ja: "メール" },
  "inq.field.date":     { zh: "預計日期",     en: "Date · approximate", ja: "予定の日 · 大まか" },
  "inq.field.where":    { zh: "拍攝地點",     en: "Where",        ja: "撮影場所" },
  "inq.field.note":     { zh: "關於那一天的幾句話", en: "A few words about the day", ja: "その日について 一言" },
  "inq.ph.name":        { zh: "佐藤優美",     en: "e.g. Sato Yumi", ja: "例：佐藤優美" },
  "inq.ph.email":       { zh: "yumi@example.jp", en: "yumi@example.jp", ja: "yumi@example.jp" },
  "inq.ph.date":        { zh: "十月底",       en: "Late October", ja: "10月下旬" },
  "inq.ph.where":       { zh: "鎌倉的海邊",   en: "Kamakura, by the sea", ja: "鎌倉の海辺" },
  "inq.ph.note":        { zh: "一場小型的儀式，早上，大部分在戶外…", en: "A small ceremony, mid-morning, mostly outdoors…", ja: "小さな儀式、朝、ほぼ屋外で…" },
  "inq.cta":            { zh: "送出",         en: "Send the note", ja: "送る" },
  "inq.consent":        { zh: "回信即訂閱我們每季的小報。", en: "By replying, you’ll join the once-a-season letter.", ja: "ご返信で季節ごとのお便りに登録されます。" },
  "inq.contact":        { zh: "info@foiga.com",      en: "info@foiga.com", ja: "info@foiga.com" },
  "inq.location":       { zh: "京都 · Tokyo", en: "Kyoto · Tokyo", ja: "京都 · 東京" },
  "inq.sending":        { zh: "送出中⋯",     en: "Sending…",     ja: "送信中⋯" },
  "inq.error":          { zh: "送出失敗，請稍後再試一次，或直接寫信到 info@foiga.com。", en: "Couldn't send. Please try again later, or email info@foiga.com directly.", ja: "送信できませんでした。少し時間をおいてもう一度、または info@foiga.com まで直接お送りください。" },
  "inq.thanks.kicker":  { zh: "● 信已送達 · LETTER RECEIVED", en: "● Letter received", ja: "● お便り、届きました" },
  "inq.thanks.title":   { zh: "謝謝你的來信。", en: "Thank you for writing.", ja: "お便り、ありがとうございます。" },
  "inq.thanks.body":    { zh: "我們會在兩天內依序回覆，請耐心等候。以下是您剛剛送出的內容：", en: "We answer within two days, in the order things arrive. Here is what you just sent:", ja: "届いた順に二日以内にお返事します。以下は今送ってくださった内容です：" },
  "inq.thanks.again":   { zh: "再寄一封 →",   en: "Send another →", ja: "もう一度送る →" },

  /* — footer — */
  "foot.brand":         { zh: "● Foiga / Photography", en: "● Foiga / Photography", ja: "● Foiga / Photography" },
  "foot.issue":         { zh: "第 07 期 · 二〇二六年春", en: "№ 07 · Spring 2026", ja: "第07号 · 2026年春" },

  /* — SESSIONS hero — */
  "sess.folio":         { zh: "● 拍攝方案 / Sessions",  en: "● Sessions / 撮影の時間", ja: "● 撮影の時間 / Sessions" },
  "sess.kicker":        { zh: "— 三段時光，一份手記",   en: "— Three hours, one record",  ja: "— 三つの時間、一冊の手帖" },
  "sess.title":         { zh: "在京都與東京，",         en: "In Kyoto and Tokyo,",          ja: "京都と東京で、" },
  "sess.title.l2":      { zh: "拍下你們的那一天。",     en: "we photograph your day.",      ja: "あなたの一日を撮ります。" },
  "sess.intro":         {
    zh: "三套方案：基本、精緻、奢華。內容稍有不同，你們可以依照預算與想要的時間，挑一個合適的。每一套都包含造型師全程跟拍、基本調色與精修，以及一份專屬的行程表。",
    en: "Three sittings — Basic, Plus, and Pro. The pace differs, the spirit doesn’t. Every plan includes a full-day stylist, colour-graded files, hand-retouched selects, and an itinerary tailored to the two of you.",
    ja: "三つのプラン — Basic、Plus、Pro。時間は違っても、心持ちは同じです。すべてのプランにスタイリスト同行・基本補正・セレクト仕上げ・お二人のための行程表が含まれます。",
  },

  /* — Plan A Basic — */
  "p.a.kicker":         { zh: "方案 A",       en: "Plan A",       ja: "プラン A" },
  "p.a.name":           { zh: "Basic ／ 基本",  en: "Basic",        ja: "Basic ／ ベーシック" },
  "p.a.price":          { zh: "JPY 18.8 萬日幣", en: "JPY 188,000",  ja: "JPY 188,000" },
  "p.a.duration":       { zh: "5–6 小時 · 含造型換裝及移動", en: "5–6 hours · includes styling & travel", ja: "5–6時間 · 着替え・移動を含む" },
  "p.a.transport":      { zh: "出行：計程車", en: "Transport: taxi", ja: "移動：タクシー" },
  "p.a.photos":         { zh: "約 300 張 · 全數基本調色", en: "≈ 300 frames · all colour-graded", ja: "約300カット · 基本補正込み" },
  "p.a.retouch":        { zh: "精修 30 張",   en: "30 retouched",  ja: "セレクト30点" },
  "p.a.outfits":        { zh: "服裝 2 套",    en: "2 outfit changes", ja: "衣装2着" },
  "p.a.locations":      { zh: "2 個拍攝景點", en: "2 locations",  ja: "ロケ地2か所" },

  /* — Plan B Plus — */
  "p.b.kicker":         { zh: "方案 B",       en: "Plan B",       ja: "プラン B" },
  "p.b.name":           { zh: "Plus ／ 精緻", en: "Plus",         ja: "Plus ／ プラス" },
  "p.b.price":          { zh: "JPY 22.8 萬日幣", en: "JPY 228,000", ja: "JPY 228,000" },
  "p.b.duration":       { zh: "8 小時 · 含造型換裝及移動", en: "8 hours · includes styling & travel", ja: "8時間 · 着替え・移動を含む" },
  "p.b.transport":      { zh: "出行：包車（限定範圍）", en: "Transport: private car (within zone)", ja: "移動：チャーター車（指定範囲内）" },
  "p.b.photos":         { zh: "約 420 張 · 全數基本調色", en: "≈ 420 frames · all colour-graded", ja: "約420カット · 基本補正込み" },
  "p.b.retouch":        { zh: "精修 40 張",   en: "40 retouched", ja: "セレクト40点" },
  "p.b.outfits":        { zh: "服裝 3 套",    en: "3 outfit changes", ja: "衣装3着" },
  "p.b.locations":      { zh: "3 個拍攝景點", en: "3 locations",  ja: "ロケ地3か所" },

  /* — Plan C Pro — */
  "p.c.kicker":         { zh: "方案 C",       en: "Plan C",       ja: "プラン C" },
  "p.c.name":           { zh: "Pro ／ 奢華",  en: "Pro",          ja: "Pro ／ ラグジュアリー" },
  "p.c.price":          { zh: "JPY 32 萬日幣", en: "JPY 320,000",  ja: "JPY 320,000" },
  "p.c.duration":       { zh: "10 小時 · 附夜景拍攝", en: "10 hours · including night shoot", ja: "10時間 · 夜景撮影付き" },
  "p.c.transport":      { zh: "出行：包車（限定範圍）", en: "Transport: private car (within zone)", ja: "移動：チャーター車（指定範囲内）" },
  "p.c.photos":         { zh: "約 500 張 · 全數基本調色", en: "≈ 500 frames · all colour-graded", ja: "約500カット · 基本補正込み" },
  "p.c.retouch":        { zh: "精修 50 張",   en: "50 retouched", ja: "セレクト50点" },
  "p.c.outfits":        { zh: "服裝 3–4 套",  en: "3–4 outfit changes", ja: "衣装3–4着" },
  "p.c.locations":      { zh: "3–4 個拍攝景點", en: "3–4 locations", ja: "ロケ地3–4か所" },
  "p.c.album":          { zh: "高級相冊 1 本 · 日本印刷", en: "Premium album · printed in Japan", ja: "高級アルバム1冊 · 日本印刷" },

  /* — Common (plan footer) — */
  "p.common.area":      { zh: "拍攝區域以東京 23 區內或京都市區為主，另有區域歡迎來信。", en: "Within Tokyo 23 wards or central Kyoto. Other regions — please ask.", ja: "東京23区内または京都市内が中心。それ以外の地域はお問い合わせください。" },
  "p.cta":              { zh: "預約這個方案 →", en: "Reserve this plan →", ja: "このプランを予約 →" },
  "p.popular":          { zh: "● 最受歡迎",   en: "● Most chosen", ja: "● 一番人気" },

  /* — Short Sessions (個人 / 情侶 / 親子 短時寫真) — */
  "short.kicker":       { zh: "● 輕鬆走寫真方案", en: "● Easy walks / 輕鬆走寫真方案", ja: "● ぶらり撮影 / 輕鬆走寫真方案" },
  "short.title":        { zh: "一兩個小時，",      en: "An hour or two,",          ja: "一、二時間の、" },
  "short.title.l2":     { zh: "輕輕地走一段。",    en: "a quiet walk together.",   ja: "ゆっくりと歩く時間。" },
  "short.intro":        {
    zh: "給個人寫真、情侶與親子的短時方案。便服或和服皆可，於京都祇園、東京淺草的街巷之間，徒步散步、邊走邊拍——比婚紗方案輕鬆許多，所有電子 JPEG 全給。",
    en: "Short sittings for individuals, couples and families. Casual wear or kimono, on foot through the lanes of Gion in Kyoto or Asakusa in Tokyo — lighter than a wedding day, all digital frames included.",
    ja: "個人・カップル・親子のための短時間撮影。私服または着物で、京都・祇園や東京・浅草の路地を一緒に歩きながら撮ります。ウエディングよりも気軽に、すべてのJPEG納品込みです。",
  },
  "short.summer":       { zh: "● 夏季特惠　5–9月", en: "● Summer rate · May–Sep", ja: "● サマー特別価格 · 5–9月" },

  "short.a.kicker":     { zh: "A 方案",   en: "Plan A",   ja: "プラン A" },
  "short.a.name":       { zh: "輕量方案", en: "Light",    ja: "ライト" },
  "short.a.price":      { zh: "JPY 30,000", en: "JPY 30,000", ja: "JPY 30,000" },
  "short.a.price.was":  { zh: "原價 JPY 32,000", en: "reg. JPY 32,000", ja: "通常 JPY 32,000" },
  "short.a.duration":   { zh: "1 小時 · 含交通移動及作業時間", en: "1 hour · travel & setup included", ja: "1時間 · 移動・準備時間込み" },
  "short.a.outfit":     { zh: "便服或和服（二選一）", en: "Casual or kimono (one)", ja: "私服または着物（どちらか）" },
  "short.a.location":   { zh: "京都祇園 · 東京淺草，自選一處", en: "Gion (Kyoto) or Asakusa (Tokyo)", ja: "京都・祇園、または東京・浅草" },
  "short.a.transport":  { zh: "徒步散步", en: "On foot", ja: "徒歩" },
  "short.a.party":      { zh: "2 人以內", en: "Up to 2 people", ja: "2名様まで" },
  "short.a.target":     { zh: "個人寫真 · 情侶（雙人）", en: "Solo · couple", ja: "個人 · カップル" },
  "short.a.photos":     { zh: "60–150 張 · 電子 JPEG 全給", en: "60–150 frames · all JPEGs delivered", ja: "60–150カット · JPEG全納品" },

  "short.b.kicker":     { zh: "B 方案",   en: "Plan B",   ja: "プラン B" },
  "short.b.name":       { zh: "標準方案", en: "Standard", ja: "スタンダード" },
  "short.b.price":      { zh: "JPY 45,000", en: "JPY 45,000", ja: "JPY 45,000" },
  "short.b.price.was":  { zh: "原價 JPY 48,000", en: "reg. JPY 48,000", ja: "通常 JPY 48,000" },
  "short.b.duration":   { zh: "1.5 小時 · 含交通移動及作業時間", en: "1.5 hours · travel & setup included", ja: "1.5時間 · 移動・準備時間込み" },
  "short.b.outfit":     { zh: "便服或和服（二選一）", en: "Casual or kimono (one)", ja: "私服または着物（どちらか）" },
  "short.b.location":   { zh: "京都祇園 · 東京淺草", en: "Gion (Kyoto) or Asakusa (Tokyo)", ja: "京都・祇園、または東京・浅草" },
  "short.b.transport":  { zh: "徒步散步", en: "On foot", ja: "徒歩" },
  "short.b.party":      { zh: "2 人以內（可加購至 3 人）", en: "Up to 2 (extendable to 3)", ja: "2名様まで（最大3名様まで追加可）" },
  "short.b.target":     { zh: "個人 · 情侶 · 親子寫真", en: "Solo · couple · family", ja: "個人 · カップル · 家族" },
  "short.b.photos":     { zh: "150–180 張 · 電子 JPEG 全給", en: "150–180 frames · all JPEGs delivered", ja: "150–180カット · JPEG全納品" },
  "short.b.extendable": { zh: "可加時", en: "Time can be extended", ja: "延長可" },

  "short.ad.title":     { zh: "短時方案加值", en: "Short-session add-ons", ja: "ショートセッションのオプション" },
  "short.ad.subtitle":  { zh: "加時服務限定於 B 方案，A 方案不可加時。", en: "Extra-time is available on Plan B only; Plan A cannot be extended.", ja: "延長はプランBのみ。プランAは延長できません。" },
  "short.ad.time1":     { zh: "加時拍攝 · +1hr", en: "Extra hour · +1hr", ja: "延長 · +1時間" },
  "short.ad.time1.p":   { zh: "+ JPY 30,000", en: "+ JPY 30,000", ja: "+ JPY 30,000" },
  "short.ad.time2":     { zh: "加時拍攝 · +2hr", en: "Extra hours · +2hr", ja: "延長 · +2時間" },
  "short.ad.time2.p":   { zh: "+ JPY 60,000 · 可拍和服＋便服或兩套便服", en: "+ JPY 60,000 · kimono + casual, or two casual looks", ja: "+ JPY 60,000 · 着物＋私服または私服2着" },
  "short.ad.party":     { zh: "人數追加 / 每人", en: "Additional person / each", ja: "人数追加 / 1名" },
  "short.ad.party.p":   { zh: "+ JPY 5,000 · 3 歲以下不收費", en: "+ JPY 5,000 · free under 3", ja: "+ JPY 5,000 · 3歳未満無料" },
  "short.ad.retouch":   { zh: "精修 / 每 10 張", en: "Hand retouch / per 10 frames", ja: "レタッチ / 10カット" },
  "short.ad.retouch.p": { zh: "+ JPY 10,000", en: "+ JPY 10,000", ja: "+ JPY 10,000" },

  "short.notes.title":  { zh: "其他備註", en: "A few notes", ja: "その他のお知らせ" },
  "short.notes.1":      { zh: "此方案不含和服、髮妝造型費用。", en: "Kimono rental and hair/makeup are not included in the plan fee.", ja: "着物レンタル・ヘアメイク料金はプラン費用に含まれません。" },
  "short.notes.2":      { zh: "加時服務限定只在選擇 B 方案時方能加時，不能以 A＋B 方式加時。", en: "Extra time is available only when Plan B is chosen — you cannot combine A + B to extend.", ja: "延長はプランBのみ。プランA＋Bでの延長はお受けできません。" },
  "short.notes.3":      { zh: "拍攝完成後，所有電子 JPEG 會先經初篩、再做基本調色與光暗調整，約 1 週工作天，最後以雲端連結提供下載。", en: "After the shoot we select, colour-grade and balance the JPEGs — about one working week, delivered via a cloud link.", ja: "撮影後、セレクト・基本補正・露出調整を行います。約1週間で、クラウドリンクにてお渡しします。" },
  "short.notes.4":      { zh: "預約需收訂金以確保檔期。台灣朋友以 ATM 轉帳或匯款；海外朋友可以使用 Zelle 或者線上刷卡。尾款於拍攝當天以日幣現金支付給攝影師。其他付款方式（WeChat／支付寶）需另加 8% 手續費。", en: "A deposit secures the date — bank transfer for Taiwan; Zelle or online card for international clients. The balance is paid on the day in JPY cash to the photographer. WeChat/Alipay incur an 8% surcharge.", ja: "日程確保のためデポジットを頂戴します（台湾は銀行振込、海外は Zelle またはオンラインカード決済）。残金は撮影当日、日本円現金で撮影者へお支払いください。WeChat／Alipay は手数料 8% が加算されます。" },
  "short.notes.5":      { zh: "若選擇拍攝和服，可自行預約喜歡的和服店家，或請我們協助預約合作店家。和服租借費用須於當天挑選後在店家現場單獨支付；自行預約者，請於拍攝前告知預約資料。", en: "For kimono, book your own shop or ask us to book a partner store. Rental is paid at the shop on the day; if booking yourself, please share the reservation details before the shoot.", ja: "着物は自身でのご予約、または提携店のご手配も可能です。レンタル費用は当日店舗にて直接お支払い。自身でご予約される場合は事前にご連絡ください。" },
  "short.notes.6":      { zh: "不得穿著婚紗（含輕婚紗）——我們另有完整的婚紗攝影方案。", en: "No bridal gowns (including light bridal). For weddings, please see our full bridal plans above.", ja: "ウエディングドレス（軽ウエディング含む）でのご撮影はお受けしておりません。ブライダルは上記の本格プランをご覧ください。" },
  "short.notes.7":      { zh: "東京或京都其他地區亦可客製，歡迎來信。", en: "Other areas of Tokyo or Kyoto can be arranged on request.", ja: "東京・京都内のその他のエリアも応相談、ご相談ください。" },

  /* — Add-ons — */
  "addons.kicker":      { zh: "● 加值項目",   en: "● Add-ons",    ja: "● オプション" },
  "addons.title":       { zh: "另外加上的時光", en: "A little more time, a little further.", ja: "もう少しの時間、もう少しの場所。" },
  "addons.subtitle":    { zh: "可加在任一方案上。", en: "Stackable on any plan.", ja: "どのプランにも追加できます。" },
  "addons.night":       { zh: "夜景拍攝 · +2 小時", en: "Night shoot · +2 hours", ja: "夜景撮影 · +2時間" },
  "addons.night.price": { zh: "+ 4.5 萬日幣",  en: "+ JPY 45,000", ja: "+ JPY 45,000" },
  "addons.album":       { zh: "高級相冊 · 日本印刷 · 292×292 mm", en: "Premium album · printed in Japan · 292×292 mm", ja: "高級アルバム · 日本印刷 · 292×292mm" },
  "addons.album.price": { zh: "+ 4.7 萬日幣 · 含國際運費", en: "+ JPY 47,000 · int’l shipping incl.", ja: "+ JPY 47,000 · 海外送料込" },
  "addons.film":        { zh: "側拍微電影 · 2–4 分鐘", en: "Side-shot short film · 2–4 min", ja: "サイドショート映像 · 2–4分" },
  "addons.film.price":  { zh: "+ 9.8 萬日幣 · 今年限定", en: "+ JPY 98,000 · this year only", ja: "+ JPY 98,000 · 今年限定" },
  "addons.loc.title":   { zh: "加值景點",     en: "Extended locations", ja: "追加ロケ地" },
  "addons.kamakura":    { zh: "鎌倉",         en: "Kamakura",     ja: "鎌倉" },
  "addons.kamakura.p":  { zh: "+ 2.5 萬",     en: "+ JPY 25,000", ja: "+ ¥25,000" },
  "addons.nara":        { zh: "奈良",         en: "Nara",         ja: "奈良" },
  "addons.nara.p":      { zh: "+ 1.5 萬",     en: "+ JPY 15,000", ja: "+ ¥15,000" },
  "addons.echigo":      { zh: "越後湯澤",     en: "Echigo-Yuzawa", ja: "越後湯沢" },
  "addons.echigo.p":    { zh: "+ 3.0 萬",     en: "+ JPY 30,000", ja: "+ ¥30,000" },
  "addons.karuizawa":   { zh: "輕井澤",       en: "Karuizawa",    ja: "軽井沢" },
  "addons.karuizawa.p": { zh: "+ 5.0 萬",     en: "+ JPY 50,000", ja: "+ ¥50,000" },
  "addons.fuji":        { zh: "富士山",       en: "Mt. Fuji",     ja: "富士山" },
  "addons.fuji.p":      { zh: "+ 6.0 萬",     en: "+ JPY 60,000", ja: "+ ¥60,000" },
  "addons.okinawa":     { zh: "沖繩",         en: "Okinawa",      ja: "沖縄" },
  "addons.okinawa.p":   { zh: "另議",         en: "On request",   ja: "応相談" },
  "addons.hokkaido":    { zh: "北海道",       en: "Hokkaido",     ja: "北海道" },
  "addons.hokkaido.p":  { zh: "另議",         en: "On request",   ja: "応相談" },
  "addons.other":       { zh: "其他地點",     en: "Other places", ja: "その他" },
  "addons.other.p":     { zh: "歡迎來信",     en: "Please ask",   ja: "ご相談ください" },

  /* — Details (the long FAQ-ish section) — */
  "det.kicker":         { zh: "● 拍攝細節",   en: "● What’s included", ja: "● 撮影の流れ" },
  "det.title":          { zh: "從第一封信，", en: "From first note,", ja: "最初のお便りから、" },
  "det.title.l2":       { zh: "到收到照片那一日。", en: "to the day the files arrive.", ja: "写真が届く日まで。" },

  "det.1.title":        { zh: "1 · 婚紗服裝", en: "1 · Wedding wardrobe", ja: "1 · ウエディング衣装" },
  "det.1.body":         {
    zh: "一日方案可安排 2–3 套（依方案而定）。日本當地租借較昂貴，建議自國內帶來或網購。",
    en: "Two to three outfit changes per day, depending on plan. Renting in Japan is costly, so most couples bring their own or order online. Each plan includes one free dress from our Kyoto or Tokyo studio (paid upgrades available in Kyoto). Men’s suits can be rented in Kyoto for a fee. We also work with a partner studio in Hong Kong.",
    ja: "一日2–3着まで（プランによります）。日本国内でのレンタルは高額なので、多くの方は国内からお持ち込みかオンライン購入をされます。各プランにつき京都または東京スタジオで1着無料、京都では追加でアップグレード可。京都では男性スーツのレンタル（有料）あり、香港の提携先もご紹介可能です。",
  },

  "det.2.title":        { zh: "2 · 和服與浴衣", en: "2 · Kimono & yukata", ja: "2 · 着物と浴衣" },
  "det.2.body":         {
    zh: "若需和服，我們會先預約店家，當日陪同挑選與翻譯，著裝約 45–60 分鐘。和服費用以現場挑選款式為準，現場支付給店家。6–9 月為浴衣季節；振袖、色打掛等高階款式請預先告知。",
    en: "If kimono is in plan, we book the shop in advance and accompany you on the day for selection and translation — fitting takes 45–60 minutes. The Kyoto studio also carries Foiga’s house-only silk kimono. Rental is paid in-store on the day (around JPY 12,000 / two people for standard kimono or yukata). June–September is yukata season. For furisode or iro-uchikake, please let us know in advance.",
    ja: "着物撮影をされる場合、事前に店舗を予約し、当日選定・通訳に同行します。着付けは45–60分。京都スタジオではFoigaオリジナルの正絹着物もご用意。レンタル費用は当日店舗で直接お支払い（標準着物・浴衣で約12,000円／2名）。6–9月は浴衣の季節。振袖・色打掛など高級な装いをご希望の際は事前にお知らせください。",
  },

  "det.3.title":        { zh: "3 · 妝髮造型", en: "3 · Hair & makeup", ja: "3 · ヘアメイク" },
  "det.3.body":         {
    zh: "方案費用已含兩人全程的妝髮造型費用。",
    en: "Full-day hair & makeup for the bride is included in every plan. Our stylist stays with you the entire shoot, touching up between locations and changes.",
    ja: "新婦様の一日通しのヘアメイクは全プランに含まれます。スタイリストが撮影中常時同行し、移動や衣装替えのたびにお直しいたします。",
  },

  "det.4.title":        { zh: "4 · 交通移動", en: "4 · Travel & transport", ja: "4 · 移動について" },
  "det.4.body":         {
    zh: "B 與 C 方案附包車，範圍限東京都心或京都市內；離開限定範圍（如奈良、鎌倉）需另補車資，請先洽詢。",
    en: "Plans B and C include a private car within central Tokyo or central Kyoto. Travel beyond those zones (Nara, Kamakura, etc.) requires a supplementary fare — please ask in advance.",
    ja: "PlanとPlan Cにはチャーター車が含まれます（都心または京都市内のみ）。指定範囲外（奈良・鎌倉など）への移動は追加料金が必要です。事前にご相談ください。",
  },

  "det.5.title":        { zh: "5 · 行程安排", en: "5 · The itinerary", ja: "5 · 行程の組み立て" },
  "det.5.body":         {
    zh: "一日可安排 2–3 個大景點（依方案）。地點可依你們的回憶、喜歡的日劇電影場景挑選，我們再加上在地建議一起討論。預約後約拍攝前一個月，攝影師會直接與你們聯絡，給出專業的安排。特殊景點可能需要付費許可、入園或入館費，由客人自行負擔。",
    en: "Two to three primary locations per day (depending on plan). Choose places that matter to you — a film location, a memory, a favourite street — and we add local suggestions on top. About a month before the date, the photographer reaches out directly to refine the itinerary. Permit fees, entrance fees and similar costs at restricted locations are paid by the couple.",
    ja: "1日2–3か所の主要ロケ（プランによる）。お二人の思い出の場所・映画の舞台・好きな通りなどに、こちらの提案を重ねて行程を組みます。撮影の約1か月前から、撮影者本人がご連絡し最終調整を行います。撮影許可料・入場料などはお客様ご自身でご負担いただきます。",
  },

  "det.6.title":        { zh: "6 · 照片交件", en: "6 · Delivery", ja: "6 · 納品について" },
  "det.6.body":         {
    zh: "一日約 350–380 張原檔，我們會先過濾（閉眼、晃動、路人）後再做基本調色，最少交付 200 張以上。完整檔案約 21–30 個工作天，精修檔 14–21 個工作天。旺季再加兩週。若需於兩個月內使用為急件，需另收緊急處理費。",
    en: "Roughly 350–380 frames per day. We first remove out-takes (blinks, blur, photo-bomb passers-by), then colour-grade — minimum 200+ frames delivered. Full files in 21–30 working days; retouched selects in 14–21 days. Add two weeks during peak season. For rush turnaround within two months (save-the-dates, wedding prints, etc.), an expedite fee applies — please tell us up front.",
    ja: "1日およそ350–380カット。瞬きやブレ、通行人が映ったコマなどを除いた上で基本補正を行い、最低200カット以上をお届けします。全データのお渡しは21–30営業日、レタッチデータは14–21営業日。繁忙期は+2週間。撮影後2か月以内のご使用（招待状・パネル等）の場合は特急料金が発生します。必ず事前にお知らせください。",
  },

  "det.7.title":        { zh: "7 · 付款方式", en: "7 · Payment", ja: "7 · お支払い" },
  "det.7.body":         {
    zh: "赴日拍攝前需簽合約並支付訂金以正式保留檔期（台灣 ATM 轉帳或匯款；海外朋友可以使用 Zelle 或者線上刷卡）。尾款於拍攝結束後當日以日幣現金直接支付給攝影師。訂金完成後若無法赴日，最慢拍攝前一個月告知，FOIGA 將無限期保留拍攝權益，但訂金恕不退回。",
    en: "Before travel, we sign a short contract and you place a deposit to lock the date (bank transfer for Taiwan; Zelle or online card for international clients). The balance is paid in JPY cash on the wrap day, directly to the photographer. If you can no longer travel, please tell us at least one month before the date — Foiga will hold your sitting indefinitely, though the deposit is non-refundable.",
    ja: "渡日撮影の前に簡単な契約書を交わし、デポジットをお預けいただいて正式に日程を確保します（台湾内は銀行振込、海外のお客様は Zelle またはオンラインカード決済）。残金は撮影終了日に日本円の現金で撮影者へ直接お支払いください。やむを得ず渡日できなくなった場合は遅くとも1か月前までにお知らせください。Foigaは撮影権を無期限に保留いたしますが、デポジットの返金はいたしかねます。",
  },

  "det.8.title":        { zh: "8 · 雨天拍攝", en: "8 · Rain", ja: "8 · 雨天について" },
  "det.8.body":         {
    zh: "依長年經驗，只要雨勢不影響拍攝，仍會照常進行——撐傘、走廊下、復古屋簷或室內咖啡廳餐廳，畫面通常都讓人滿意。若颱風或大雨完全無法拍攝，只要你們在日本期間我方仍有檔期、造型師可調整，會盡力幫你們挪日；但無法保證一定有空檔。介意雨天備日的朋友，請審慎評估後再預約。",
    en: "From years on the ground: as long as rain doesn’t make the shoot impossible, we still go. Two-under-an-umbrella, retro eaves, café and restaurant interiors — couples almost always love the result. If it’s a real typhoon-level day, we’ll try to reschedule within your trip, contingent on our and the stylist’s availability. We can’t guarantee a backup slot, so if a rain reschedule is a must-have for you, please consider carefully before booking.",
    ja: "長年の経験から、撮影が成立しないほどでない限り雨天決行です。相合傘、軒下、カフェやレストランの店内など——むしろ気に入っていただける仕上がりになることがほとんどです。台風レベルで完全に撮影不可能な場合は、ご滞在期間中の空き状況と当方・スタイリストの調整可能性次第で日程変更を試みます。代替日を必ず確保することはお約束できかねますので、雨天順延を強くご希望の場合は十分ご検討のうえご予約ください。",
  },

  /* — Album & Film — */
  "af.kicker":          { zh: "● 相冊與微電影", en: "● Album & Film", ja: "● アルバム＆映像" },
  "af.section.title":   { zh: "印成一本，留作一段。", en: "Printed, kept, returned to.", ja: "一冊に綴じて、一段を残す。" },
  "af.section.subtitle":{ zh: "兩件可以與方案一同訂購的小事。", en: "Two small things you can add to any plan.", ja: "どのプランにも添えられる、二つの小さなもの。" },
  "af.album.title":     { zh: "高級相冊",     en: "Premium album", ja: "高級アルバム" },
  "af.album.body":      { zh: "292 × 292 mm，日本印刷。樣本可於來信時索取。", en: "292 × 292 mm, printed in Japan. Sample spreads available on request.", ja: "292 × 292mm、日本印刷。サンプル誌面はご請求ください。" },
  "af.album.price":     { zh: "4.7 萬日幣 · 含國際運費", en: "JPY 47,000 · int’l shipping included", ja: "47,000円 · 海外送料込み" },
  "af.film.title":      { zh: "側拍微電影",   en: "Side-shot short film", ja: "サイドショート映像" },
  "af.film.body":       { zh: "2–4 分鐘的拍攝側記，把那一日的氣味也帶回家。", en: "2–4 minutes — the day as it happened, atmosphere and all.", ja: "2–4分。その日の空気ごと持ち帰る一本。" },
  "af.film.price":      { zh: "9.8 萬日幣 · 今年限定優惠", en: "JPY 98,000 · this year’s rate", ja: "98,000円 · 今年限定特別価格" },
  "af.cta":             { zh: "兩個都加 →",   en: "Add both →",   ja: "両方追加 →" },
};

const LangProvider = ({ children }) => {
  const [lang, setLang] = React.useState("zh");
  const t = React.useCallback(
    (key) => (COPY[key] && COPY[key][lang]) || (COPY[key] && COPY[key].en) || key,
    [lang]
  );
  return React.createElement(LangContext.Provider, { value: { lang, setLang, t } }, children);
};

const useLang = () => React.useContext(LangContext);

const LanguageSwitcher = () => {
  const { lang, setLang } = useLang();
  const opts = [
    { id: "zh", label: "中" },
    { id: "en", label: "EN" },
    { id: "ja", label: "日" },
  ];
  return (
    <div
      style={{
        display: "inline-flex",
        alignItems: "center",
        gap: 0,
        border: "1px solid var(--rule)",
        padding: "2px",
        background: "var(--paper-warm)",
      }}
    >
      {opts.map((o) => (
        <button
          key={o.id}
          onClick={() => setLang(o.id)}
          style={{
            fontFamily: "var(--font-latin-sans)",
            fontSize: 10,
            letterSpacing: "0.18em",
            textTransform: "uppercase",
            padding: "6px 10px",
            border: 0,
            background: lang === o.id ? "var(--ink-1)" : "transparent",
            color: lang === o.id ? "var(--paper-warm)" : "var(--ink-2)",
            cursor: "pointer",
            lineHeight: 1,
            minWidth: 30,
            transition: "background 140ms ease, color 140ms ease",
          }}
        >
          {o.label}
        </button>
      ))}
    </div>
  );
};

Object.assign(window, { LangContext, LangProvider, useLang, LanguageSwitcher, COPY });
