/* ============================================================
   RESTO SUITE — i18n
   Global Thai/English switcher. Thai is the default language.
   Usage: const { t, lang, setLang } = useLang();  t('path.to.key', {var: 1})
   Chip/segment option VALUES stay in English (they're the data
   model), only their displayed LABEL is translated via OPT/optLabel.
   ============================================================ */

const LANG_KEY = "resto.lang";

const T = {
  common: {
    tweaks: { en: "Tweaks", th: "ปรับแต่ง" },
    look: { en: "Look", th: "รูปลักษณ์" },
    coachingSection: { en: "Coaching", th: "คำแนะนำ" },
    accent: { en: "Accent", th: "สีหลัก" },
    financialSummaryToggle: { en: "Financial summary", th: "สรุปการเงิน" },
    coachingTips: { en: "Coaching tips", th: "เคล็ดลับแนะนำ" },
    yourInput: { en: "your input", th: "ข้อมูลของคุณ" },
    benchmark: { en: "benchmark", th: "ค่าอ้างอิง" },
    estimate: { en: "estimate", th: "ค่าประมาณ" },
    low: { en: "low", th: "ต่ำ" },
    back: { en: "Back", th: "ย้อนกลับ" },
  },
  ie: {
    title: { en: "Import / Export plan", th: "นำเข้า/ส่งออกแผน" },
    desc: { en: "One file carries your whole plan — idea, market, location, validation and financials — between devices and future modules.", th: "ไฟล์เดียวเก็บแผนทั้งหมดของคุณ — ไอเดีย ตลาด ทำเล การตรวจสอบ และการเงิน — ย้ายไปมาระหว่างอุปกรณ์และโมดูลในอนาคตได้" },
    download: { en: "Download plan (.json)", th: "ดาวน์โหลดแผน (.json)" },
    copy: { en: "Copy JSON", th: "คัดลอก JSON" },
    copied: { en: "Copied to clipboard.", th: "คัดลอกไปยังคลิปบอร์ดแล้ว" },
    importHeading: { en: "Import", th: "นำเข้า" },
    importDesc: { en: "Upload a plan file or paste its JSON below.", th: "อัปโหลดไฟล์แผนหรือวาง JSON ด้านล่าง" },
    applyPasted: { en: "Apply pasted JSON", th: "ใช้ JSON ที่วาง" },
    invalidJson: { en: "That doesn't look like valid plan JSON.", th: "ดูเหมือนจะไม่ใช่ JSON ของแผนที่ถูกต้อง" },
    imported: { en: "Plan imported — every module now reads the new data.", th: "นำเข้าแผนแล้ว — ทุกโมดูลอ่านข้อมูลใหม่แล้ว" },
  },
  shell: {
    tagline: { en: "Design · Plan · Perform", th: "ออกแบบ · วางแผน · ลงมือทำ" },
    navIdea: { en: "Business Model", th: "โมเดลธุรกิจ" },
    navFinancials: { en: "Financial Feasibility", th: "ความเป็นไปได้ทางการเงิน" },
    navPitch: { en: "Pitch Summary Dashboard", th: "แดชบอร์ดสรุปนำเสนอ" },
    ready: { en: "ready", th: "พร้อม" },
    startHere: { en: "start here", th: "เริ่มที่นี่" },
    afterTaxMo: { en: "/mo after tax", th: "/เดือน หลังภาษี" },
    monthlyProfitAfterTax: { en: "Monthly profit · after tax", th: "กำไรต่อเดือน · หลังหักภาษี" },
    profitMoAfterTax: { en: "Profit / mo · after tax", th: "กำไร/เดือน · หลังหักภาษี" },
    preTaxMargin: { en: "pre-tax {pre} · %%MARGIN%% margin", th: "ก่อนภาษี {pre} · มาร์จิ้น %%MARGIN%%" },
    fromFinancialsStep: { en: "From the Financials step", th: "มาจากขั้นตอนการเงิน" },
    importExport: { en: "⇅ Import / Export plan", th: "⇅ นำเข้า/ส่งออกแผน" },
  },
  idea: {
    stepKicker: { en: "Step 01 — Business Model", th: "ขั้นตอนที่ 01 — โมเดลธุรกิจ" },
    stepTitle: { en: "Start with the dream.", th: "เริ่มจากความฝัน" },
    stepLead: { en: "One page that turns a loose ambition into a structured business model — with a light market and location gut-check built in.", th: "หน้าเดียวที่เปลี่ยนความตั้งใจคร่าวๆ ให้เป็นโมเดลธุรกิจที่มีโครงสร้าง พร้อมตรวจสอบตลาดและทำเลเบื้องต้นในตัว" },
    switchToInterview: { en: "Prefer to be interviewed? ", th: "อยากให้สัมภาษณ์แทนไหม " },
    switchToInterviewLink: { en: "Answer a few questions instead →", th: "ตอบคำถามสั้นๆ แทน →" },
    backToFormPrefix: { en: "← ", th: "← " },
    backToFormLink: { en: "Back to the form", th: "กลับไปที่แบบฟอร์ม" },
    viewBrief: { en: "View Concept Brief →", th: "ดูสรุปแนวคิด →" },
    seeConceptBrief: { en: "See my Concept Brief →", th: "ดูสรุปแนวคิดของฉัน →" },
    briefKicker: { en: "Step 01 — Business Model · Brief", th: "ขั้นตอนที่ 01 — โมเดลธุรกิจ · สรุป" },
    briefTitle: { en: "Your Concept Brief.", th: "สรุปแนวคิดของคุณ" },
    briefLead: { en: "The structured version of your idea — what the financials and the pitch summary read.", th: "เวอร์ชันมีโครงสร้างของไอเดียคุณ — สิ่งที่การเงินและสรุปนำเสนอจะอ่าน" },

    secConcept: { en: "The concept", th: "แนวคิด" },
    secCustomersPrice: { en: "Customers & price", th: "ลูกค้าและราคา" },
    secChannels: { en: "Channels", th: "ช่องทางขาย" },
    secFormatLocation: { en: "Format & location", th: "รูปแบบและทำเล" },
    secWhyWin: { en: "Why you win", th: "จุดแข็งของคุณ" },
    secAboutYou: { en: "About you", th: "เกี่ยวกับคุณ" },

    conceptName: { en: "Concept name", th: "ชื่อร้าน/แนวคิด" },
    conceptNamePh: { en: "e.g. Nami Ramen", th: "เช่น นามิ ราเมง" },
    tagline: { en: "Tagline", th: "แท็กไลน์" },
    taglineHint: { en: "One line that sells it", th: "หนึ่งประโยคที่ขายไอเดียคุณได้" },
    taglinePh: { en: "Slow-broth ramen for late nights", th: "ราเมงต้มช้าเพื่อค่ำคืนดึกๆ" },
    category: { en: "Category", th: "ประเภทร้าน" },
    cuisine: { en: "Cuisine", th: "ประเภทอาหาร" },
    cuisinePh: { en: "Type or pick below", th: "พิมพ์หรือเลือกด้านล่าง" },
    serviceStyle: { en: "Service style", th: "รูปแบบการบริการ" },
    targetCustomer: { en: "Target customer", th: "กลุ่มลูกค้าเป้าหมาย" },
    targetCustomerHint: { en: "Pick every group you're built for", th: "เลือกทุกกลุ่มที่ร้านคุณเหมาะกับ" },
    priceBand: { en: "Price band", th: "ระดับราคา" },
    priceBandHint: { en: "Indicative spend per head", th: "ค่าใช้จ่ายโดยประมาณต่อคน" },
    dineIn: { en: "Dine-in", th: "นั่งทาน" },
    delivery: { en: "Delivery", th: "เดลิเวอรี่" },
    takeaway: { en: "Takeaway", th: "ซื้อกลับ" },
    deliveryHint: { en: "Grab / LineMan / foodpanda orders", th: "ออเดอร์จาก Grab / LineMan / foodpanda" },
    mustTotal100: { en: "Must total 100%", th: "ต้องรวมเป็น 100%" },
    seats: { en: "Seats", th: "จำนวนที่นั่ง" },
    seatsHint: { en: "0 if delivery-only", th: "ใส่ 0 ถ้าเดลิเวอรี่อย่างเดียว" },
    size: { en: "Approx. size", th: "ขนาดโดยประมาณ" },
    locationType: { en: "Location type", th: "ประเภททำเล" },
    competition: { en: "Similar places already nearby", th: "ร้านคล้ายกันที่มีอยู่แล้วใกล้เคียง" },
    competitionHint: { en: "Honest gut call — powers the market check", th: "ตอบตามความรู้สึกจริง — ใช้ตรวจสอบตลาด" },
    rentExpectation: { en: "Expected monthly rent", th: "ค่าเช่าต่อเดือนที่คาดไว้" },
    rentExpectationHint: { en: "Rough asking rent for the kind of spot you want", th: "ค่าเช่าโดยประมาณของทำเลที่คุณต้องการ" },
    uspTitle: { en: "Your edge in one sentence", th: "จุดเด่นของคุณในหนึ่งประโยค" },
    uspHint: { en: "What a customer would tell a friend about you.", th: "สิ่งที่ลูกค้าจะบอกเพื่อนเกี่ยวกับร้านคุณ" },
    uspPh: { en: "The only 3am tonkotsu in Thonglor, broth simmered 18 hours.", th: "ทงคตสึเที่ยงคืนแห่งเดียวในทองหล่อ ต้มน้ำซุป 18 ชั่วโมง" },
    experience: { en: "F&B experience", th: "ประสบการณ์ร้านอาหาร" },
    capital: { en: "Capital available", th: "เงินทุนที่มี" },
    capitalHint: { en: "Everything you can commit", th: "เงินทั้งหมดที่คุณพร้อมลงทุน" },
    role: { en: "Your role", th: "บทบาทของคุณ" },

    progressFields: { en: "fields", th: "ช่อง" },
    typeAnswer: { en: "Type your answer…", th: "พิมพ์คำตอบของคุณ…" },
    previous: { en: "← Previous", th: "← ก่อนหน้า" },
    skip: { en: "Skip this one", th: "ข้ามข้อนี้" },
    next: { en: "Next →", th: "ถัดไป →" },
    saveAnswer: { en: "Save answer →", th: "บันทึกคำตอบ →" },
    interviewTip: { en: "Answer loosely — I pull out the structure. Anything I mishear you can correct in “Fill the form”.", th: "ตอบแบบสบายๆ ได้เลย ระบบจะดึงโครงสร้างให้เอง หากฟังผิดคุณแก้ไขได้ใน “กรอกแบบฟอร์ม”" },
    doneTitle: { en: "That's the interview.", th: "จบการสัมภาษณ์แล้ว" },
    doneDesc: { en: "I filled {filled} of {total} fields from your answers. Review and fix anything I misheard, then see your Concept Brief.", th: "กรอกให้แล้ว {filled} จาก {total} ช่องจากคำตอบของคุณ ตรวจสอบและแก้ไขจุดที่ฟังผิด แล้วดูสรุปแนวคิดของคุณ" },
    reviewForm: { en: "Review the form", th: "ตรวจสอบแบบฟอร์ม" },
    yourAnswers: { en: "Your answers — tap one to edit", th: "คำตอบของคุณ — แตะเพื่อแก้ไข" },
    skipped: { en: "skipped", th: "ข้าม" },
    edit: { en: "edit →", th: "แก้ไข →" },
    restart: { en: "Restart interview", th: "เริ่มสัมภาษณ์ใหม่" },
    noted: { en: "couldn't pull specifics — you can fix it in the form later", th: "ดึงรายละเอียดไม่ได้ — แก้ไขในแบบฟอร์มได้ภายหลัง" },
    notedLabel: { en: "Noted", th: "รับทราบ" },

    editMyAnswers: { en: "Edit my answers", th: "แก้ไขคำตอบของฉัน" },
    checkNumbers: { en: "Check the numbers →", th: "ตรวจสอบตัวเลข →" },
    prefillNote: { en: "Step 02 pre-fills from this brief — seats, size, average spend and rent carry over.", th: "ขั้นตอนที่ 02 จะดึงข้อมูลจากสรุปนี้มาให้อัตโนมัติ — ที่นั่ง ขนาด ค่าใช้จ่ายเฉลี่ย และค่าเช่า" },

    conceptVerdict: { en: "Concept verdict", th: "ผลประเมินแนวคิด" },
    conceptReadiness: { en: "Concept readiness", th: "ความพร้อมของแนวคิด" },
    fieldsCoherence: { en: "{filled}/{total} fields · coherence checked", th: "{filled}/{total} ช่อง · ตรวจสอบความสอดคล้องแล้ว" },
    conceptBriefFallback: { en: "Concept Brief", th: "สรุปแนวคิด" },
    whyYouWin: { en: "Why you win", th: "จุดแข็งของคุณ" },
    roughFitout: { en: "Rough fit-out for this concept: ", th: "ค่าตกแต่งร้านโดยประมาณสำหรับแนวคิดนี้: " },
    realityCheck: { en: "Reality check", th: "ตรวจสอบความเป็นจริง" },
    realityCheckDesc: { en: "Your concept plus a light market and location gut-check — the handful of things that most often decide it before the numbers do.", th: "แนวคิดของคุณบวกกับการตรวจตลาดและทำเลเบื้องต้น — ปัจจัยไม่กี่อย่างที่มักตัดสินก่อนตัวเลขจะบอก" },
    nothingJumpsOut: { en: "Nothing jumps out — no crowd-without-an-edge, no price–place mismatch, rent within reach of the sales benchmark.", th: "ไม่มีจุดที่น่ากังวล — ไม่มีปัญหากลุ่มลูกค้าขาดจุดเด่น ราคากับทำเลสอดคล้องกัน ค่าเช่าอยู่ในเกณฑ์เทียบกับยอดขายอ้างอิง" },
    roughSalesFormat: { en: "Rough sales for this format: ", th: "ยอดขายโดยประมาณสำหรับรูปแบบนี้: " },
    healthyRentUpTo: { en: " — healthy rent up to ≈ ", th: " — ค่าเช่าที่เหมาะสมไม่เกิน ≈ " },
    testFirst: { en: "Test first", th: "ทดสอบก่อน" },
    briefVerdictGreen: { en: "The pieces fit — and the light market and location checks below hold up. Take it into the numbers.", th: "องค์ประกอบเข้ากันดี — และผลตรวจตลาดกับทำเลด้านล่างก็ผ่าน ไปดูตัวเลขกันต่อได้เลย" },
    briefVerdictRed: { en: "Something below contradicts itself — resolve the red flags before moving on.", th: "มีบางจุดด้านล่างที่ขัดแย้งกันเอง — แก้ไขจุดสีแดงก่อนไปต่อ" },
    briefVerdictAmber: { en: "A solid start — fill the gaps and settle the flagged points, then move on to the numbers.", th: "เริ่มต้นได้ดี — เติมส่วนที่ขาดและแก้จุดที่ถูกตั้งข้อสังเกต แล้วไปดูตัวเลขต่อ" },

    verdictContradictions: { en: "Contradictions to resolve", th: "มีข้อขัดแย้งต้องแก้ไข" },
    verdictReady: { en: "Concept Brief ready", th: "สรุปแนวคิดพร้อมแล้ว" },
    verdictSharpen: { en: "Needs sharpening", th: "ต้องปรับให้คมชัดขึ้น" },

    flagMix: { en: "Your channel mix adds to {mixSum}%, not 100%. Fix the split before anything downstream can trust it.", th: "สัดส่วนช่องทางขายของคุณรวมได้ {mixSum}% ไม่ใช่ 100% แก้ตัวเลขนี้ก่อน ไม่งั้นขั้นตอนถัดไปจะเชื่อถือไม่ได้" },
    flagFineDelivery: { en: "Fine dining rarely travels well — a delivery-heavy mix fights the concept. Consider a separate delivery brand instead.", th: "ไฟน์ไดนิ่งมักไม่เหมาะกับการจัดส่ง — สัดส่วนเดลิเวอรี่สูงจะขัดกับแนวคิดร้าน ลองแยกแบรนด์สำหรับเดลิเวอรี่ต่างหาก" },
    flagPricePlace: { en: "{band} pricing in a {loc} catchment is a price–place mismatch. One of the two usually has to move.", th: "ราคาระดับ{band}ในทำเล{loc}ไม่ค่อยเข้ากัน มักต้องปรับอย่างใดอย่างหนึ่ง" },
    flagPriceStudents: { en: "Your price sits above what this crowd usually spends. Either the target customer or the price band needs to move.", th: "ราคาของคุณสูงกว่าที่กลุ่มนี้มักจะจ่ายไหว ต้องปรับกลุ่มลูกค้าเป้าหมายหรือระดับราคาอย่างใดอย่างหนึ่ง" },
    flagCompetitionUsp: { en: "A crowded field and no clear edge is the hardest way in. Sharpen what makes you different before spending a baht.", th: "ตลาดที่มีคู่แข่งเยอะแต่ไม่มีจุดเด่นชัดเจนคือทางที่ยากที่สุด ทำจุดต่างให้ชัดก่อนใช้เงินสักบาท" },
    flagDeliveryPct: { en: "{pct}% delivery means GrabFood / LineMan commissions (~25–35%) eat a big slice of every order. Price the delivery menu accordingly.", th: "เดลิเวอรี่ {pct}% หมายความว่าค่าคอมมิชชั่น GrabFood / LineMan (~25-35%) จะกินกำไรไปมาก ตั้งราคาเมนูเดลิเวอรี่ให้เหมาะสม" },
    flagRent: { en: "Expected rent of {rent} is {gap} above the ~10% of sales a restaurant can usually carry — against a benchmark estimate of {est}/mo in sales ({basis}). Negotiate, or be sure the site sells more.", th: "ค่าเช่าที่คาดไว้ {rent} สูงกว่าเกณฑ์ ~10% ของยอดขายที่ร้านอาหารทั่วไปรับไหวอยู่ {gap} — เทียบกับยอดขายอ้างอิงที่ประมาณ {est}/เดือน ({basis}) ลองต่อรอง หรือมั่นใจว่าทำเลนี้ขายได้มากกว่านั้น" },
    flagCapital: { en: "Capital of {cap} looks well below a rough fit-out estimate of {est} ({basis}) — before deposits, stock and reserve. Shrink the concept or raise more.", th: "เงินทุน {cap} ดูน้อยกว่าค่าตกแต่งร้านโดยประมาณที่ {est} ({basis}) มาก — ยังไม่รวมมัดจำ สต๊อก และเงินสำรอง ลองลดขนาดแนวคิดหรือระดมทุนเพิ่ม" },
    flagUsp: { en: "Your edge reads generic — nothing here separates you from the shop next door yet. Sharpen it into something a customer would repeat to a friend.", th: "จุดเด่นที่เขียนไว้ยังทั่วไปเกินไป — ยังไม่มีอะไรที่ต่างจากร้านข้างๆ ลองปรับให้เป็นสิ่งที่ลูกค้าอยากเล่าต่อให้เพื่อนฟัง" },
    flagBarOffice: { en: "A bar living off office crowds is busy 2 nights a week. Check whether the quiet dayparts still cover the rent.", th: "บาร์ที่พึ่งพากลุ่มออฟฟิศจะคึกคักแค่ 2 คืนต่อสัปดาห์ ลองตรวจดูว่าช่วงที่เงียบยังจ่ายค่าเช่าไหวหรือไม่" },
    flagFirstTimerScale: { en: "A first venture at this scale is a hard first climb. Many owners start smaller, learn the ropes, then expand.", th: "การเริ่มธุรกิจแรกในขนาดนี้เป็นก้าวที่ยากมาก เจ้าของร้านหลายคนเริ่มจากเล็กๆ เรียนรู้ก่อนแล้วค่อยขยาย" },
    flagFoodHigh: { en: "Food cost is {pct} of sales. Most restaurants keep this 28–35% — tighten recipes or pricing.", th: "ต้นทุนวัตถุดิบอยู่ที่ {pct} ของยอดขาย ร้านอาหารส่วนใหญ่รักษาไว้ที่ 28-35% ลองปรับสูตรหรือราคา" },
    flagFoodLow: { en: "Food cost of {pct} looks low — double-check it's realistic for your menu.", th: "ต้นทุนวัตถุดิบ {pct} ดูต่ำไป — ลองตรวจสอบว่าสมเหตุสมผลกับเมนูของคุณหรือไม่" },
    flagFoodHealthy: { en: "Food cost {pct} sits in the healthy 28–35% range.", th: "ต้นทุนวัตถุดิบ {pct} อยู่ในช่วงที่เหมาะสม 28-35%" },
    flagStaffHigh: { en: "Staff is {pct} of sales (healthy is ~25–35%). Keep an eye on the roster.", th: "ค่าแรงพนักงานอยู่ที่ {pct} ของยอดขาย (ที่เหมาะสมคือ ~25-35%) ควรจับตาตารางกะพนักงาน" },
    flagPrimeHigh: { en: "Prime cost (food + staff) is {pct}. Above 65% leaves little for rent and profit.", th: "ต้นทุนหลัก (วัตถุดิบ+ค่าแรง) อยู่ที่ {pct} หากเกิน 65% จะเหลือเงินสำหรับค่าเช่าและกำไรน้อยมาก" },
    flagRentHigh: { en: "Rent is {pct} of sales. Above 15% is heavy for a restaurant.", th: "ค่าเช่าอยู่ที่ {pct} ของยอดขาย เกิน 15% ถือว่าหนักสำหรับร้านอาหาร" },
    flagMarginGood: { en: "A net margin of {pct} gives you a comfortable cushion.", th: "มาร์จิ้นสุทธิ {pct} ให้กันชนที่สบายพอสมควร" },
    flagLoss: { en: "At these numbers you spend more than you earn each month. Raise sales or trim costs.", th: "ด้วยตัวเลขนี้คุณใช้จ่ายมากกว่าที่หาได้ในแต่ละเดือน ต้องเพิ่มยอดขายหรือลดต้นทุน" },
    flagPaybackSlow: { en: "Payback of {months} is slow — most owners aim to recover within 2–3 years.", th: "ระยะเวลาคืนทุน {months} ค่อนข้างช้า — เจ้าของร้านส่วนใหญ่ตั้งเป้าคืนทุนภายใน 2-3 ปี" },
    flagNoTax: { en: "You haven't set aside anything for taxes yet. Add a Taxes & statutory line so your take-home number is realistic.", th: "คุณยังไม่ได้กันเงินสำหรับภาษีเลย เพิ่มรายการภาษีและเงินสมทบเพื่อให้ตัวเลขกำไรสุทธิสมจริง" },

    riskRent: { en: "Riskiest assumption: the rent. It only works if the site really sells near the benchmark — count foot traffic and check neighbours' busy hours before signing.", th: "สมมติฐานที่เสี่ยงที่สุด: ค่าเช่า จะได้ผลก็ต่อเมื่อทำเลนี้ขายได้ใกล้เคียงค่าอ้างอิงจริง — นับจำนวนคนเดินผ่านและดูช่วงเวลาคึกคักของร้านข้างเคียงก่อนเซ็นสัญญา" },
    riskCapital: { en: "Riskiest assumption: the budget. Your capital sits below a rough fit-out benchmark — get a real contractor quote before anything else.", th: "สมมติฐานที่เสี่ยงที่สุด: งบประมาณ เงินทุนของคุณต่ำกว่าค่าตกแต่งร้านอ้างอิง — ขอใบเสนอราคาจากผู้รับเหมาจริงก่อนอื่นใด" },
    riskPrice: { en: "Riskiest assumption: the price. Test whether your target crowd will actually pay this — a weekend pop-up or pre-order test settles it fast.", th: "สมมติฐานที่เสี่ยงที่สุด: ราคา ทดสอบว่ากลุ่มเป้าหมายจะจ่ายจริงไหม — ลองเปิดป็อปอัพวันหยุดหรือเปิดพรีออเดอร์ก็รู้ผลเร็ว" },
    riskUsp: { en: "Riskiest assumption: the edge. If you can't name why people cross the street for you, test the concept on strangers before spending on a site.", th: "สมมติฐานที่เสี่ยงที่สุด: จุดเด่น ถ้าบอกไม่ได้ว่าทำไมคนถึงจะข้ามถนนมาหาคุณ ลองทดสอบแนวคิดกับคนแปลกหน้าก่อนลงทุนกับทำเล" },
    benchSeatsTurns: { en: "{seats} seats × 1.8 turns × {mid} × 26 days", th: "{seats} ที่นั่ง × 1.8 รอบ × {mid} × 26 วัน" },
    benchCloudKitchen: { en: "typical Bangkok cloud-kitchen setup", th: "ค่าเฉลี่ยของคลาวด์คิทเช่นในกรุงเทพฯ" },
    benchPerSeat: { en: "{per}/seat × {seats} seats (Thai {cat} benchmark)", th: "{per}/ที่นั่ง × {seats} ที่นั่ง (ค่าอ้างอิงร้าน{cat}ในไทย)" },
  },
  q: {
    concept: { q: { en: "Tell me about the restaurant you dream of opening.", th: "เล่าให้ฟังหน่อยว่าร้านอาหารในฝันของคุณเป็นแบบไหน" }, hint: { en: "A sentence or two — what food, what vibe. Thai or English, both fine.", th: "หนึ่งหรือสองประโยคก็พอ — อาหารแบบไหน บรรยากาศแบบไหน ตอบไทยหรืออังกฤษก็ได้" } },
    name: { q: { en: "Does it have a name yet? And a one-line tagline?", th: "มีชื่อร้านหรือยัง แล้วมีแท็กไลน์สั้นๆ ไหม" }, hint: { en: "e.g. “Nami Ramen — slow-broth ramen for Thonglor nights.” Skip if undecided.", th: "เช่น “นามิ ราเมง — ราเมงต้มช้าเพื่อค่ำคืนทองหล่อ” ข้ามได้ถ้ายังไม่ตัดสินใจ" } },
    customer: { q: { en: "Who do you picture sitting at your tables?", th: "คุณนึกภาพใครนั่งอยู่ที่โต๊ะร้านคุณ" }, hint: { en: "Students, office workers, families, tourists, expats, hi-so — one or several.", th: "นักเรียน พนักงานออฟฟิศ ครอบครัว นักท่องเที่ยว ชาวต่างชาติ ไฮโซ — เลือกได้หลายกลุ่ม" } },
    price: { q: { en: "Roughly how much should one customer spend per visit?", th: "โดยประมาณลูกค้าหนึ่งคนควรใช้จ่ายเท่าไรต่อครั้ง" }, hint: { en: "A number in baht is perfect — e.g. “around ฿250 a head”.", th: "บอกเป็นตัวเลขบาทได้เลย เช่น “ประมาณ 250 บาทต่อคน”" } },
    channels: { q: { en: "Dine-in, delivery, takeaway — how do you imagine the split?", th: "นั่งทาน เดลิเวอรี่ ซื้อกลับ — คุณคิดว่าสัดส่วนจะเป็นยังไง" }, hint: { en: "e.g. “mostly dine-in, maybe 70/20/10” — three numbers that sum to 100.", th: "เช่น “ส่วนใหญ่นั่งทาน สัก 70/20/10” — ตัวเลขสามตัวรวมกันเป็น 100" } },
    format: { q: { en: "How big is the place in your head?", th: "ในหัวคุณ ร้านมีขนาดใหญ่แค่ไหน" }, hint: { en: "Seats and rough size — e.g. “about 30 seats, maybe 80 sqm, table service”.", th: "จำนวนที่นั่งและขนาดคร่าวๆ เช่น “ประมาณ 30 ที่นั่ง 80 ตร.ม. เสิร์ฟที่โต๊ะ”" } },
    location: { q: { en: "Where do you picture it — what kind of spot?", th: "คุณนึกภาพทำเลแบบไหน" }, hint: { en: "A mall unit, street shophouse, community mall, CBD, tourist area, near a campus…", th: "ในห้าง ตึกแถวริมถนน คอมมูนิตี้มอลล์ ย่านธุรกิจ แหล่งท่องเที่ยว ใกล้มหาวิทยาลัย…" } },
    usp: { q: { en: "Why will people choose you over the shop next door?", th: "ทำไมคนถึงจะเลือกร้านคุณแทนร้านข้างๆ" }, hint: { en: "One honest sentence. “Good food” doesn't count — everyone says that.", th: "หนึ่งประโยคที่จริงใจ “อาหารอร่อย” ใช้ไม่ได้ เพราะทุกร้านก็พูดแบบนี้" } },
    experience: { q: { en: "Have you worked in restaurants before?", th: "คุณเคยทำงานร้านอาหารมาก่อนไหม" }, hint: { en: "First time, worked in F&B, or opened your own before.", th: "ครั้งแรก เคยทำงานในธุรกิจอาหาร หรือเคยเปิดร้านของตัวเองมาก่อน" } },
    capital: { q: { en: "Last one — how much capital can you put in, and will you run it yourself?", th: "ข้อสุดท้าย — คุณมีทุนเท่าไร และจะบริหารเองไหม" }, hint: { en: "e.g. “about 2 million baht, running it myself” or “5M, I'm just investing”.", th: "เช่น “ประมาณ 2 ล้านบาท บริหารเอง” หรือ “5 ล้าน แค่ลงทุนอย่างเดียว”" } },
  },
  fin: {
    shellKicker: { en: "Step 02 — Financial Feasibility", th: "ขั้นตอนที่ 02 — ความเป็นไปได้ทางการเงิน" },
    shellTitle: { en: "Do the numbers work?", th: "ตัวเลขไปรอดไหม" },
    shellLead: { en: "Investment, sales, running costs and Thai taxes — ending in a professional verdict on your plan.", th: "เงินลงทุน ยอดขาย ต้นทุนดำเนินงาน และภาษีไทย — จบด้วยผลประเมินแผนของคุณอย่างมืออาชีพ" },

    stepInvestment: { en: "Investment", th: "การลงทุน" },
    stepSales: { en: "Sales", th: "ยอดขาย" },
    stepCosts: { en: "Costs", th: "ต้นทุน" },
    stepResults: { en: "Results", th: "ผลลัพธ์" },

    invKicker: { en: "Financials · 1 of 4 — Investment", th: "การเงิน · 1 ใน 4 — การลงทุน" },
    invTitle: { en: "What will it cost to open?", th: "เปิดร้านต้องใช้เงินเท่าไร" },
    invLead: { en: "The one-time money you need before the doors open. Know a lump sum? Type it. Not sure? Open a category and build it up item by item.", th: "เงินก้อนแรกที่ต้องใช้ก่อนเปิดร้าน รู้ยอดรวมแล้วก็พิมพ์ได้เลย ไม่แน่ใจก็เปิดหมวดแล้วใส่ทีละรายการ" },
    totalToOpen: { en: "Total to open", th: "รวมค่าใช้จ่ายเปิดร้าน" },
    reserveTip: { en: "A cash reserve is the most-skipped line. Plan for 3–6 months of rent and wages so a slow start doesn't sink you.", th: "เงินสำรองเป็นรายการที่มักถูกมองข้ามที่สุด วางแผนไว้ 3-6 เดือนของค่าเช่าและค่าแรง เผื่อช่วงเริ่มต้นที่ยังไม่คล่องตัว" },
    yourSpace: { en: "Your space ", th: "พื้นที่ร้านของคุณ " },
    optional: { en: "(optional)", th: "(ไม่บังคับ)" },
    spaceDesc: { en: "Unlocks cost-per-m² figures in your financial summary.", th: "ปลดล็อกตัวเลขต้นทุนต่อตร.ม. ในสรุปการเงินของคุณ" },
    shopArea: { en: "Shop area", th: "พื้นที่ร้าน" },
    kitchenArea: { en: "Kitchen area", th: "พื้นที่ครัว" },
    stepSummaryNote: { en: "how a professional reads this step", th: "มืออาชีพอ่านขั้นตอนนี้อย่างไร" },
    totalCapex: { en: "Total CapEx", th: "เงินลงทุนรวม" },
    buildSystems: { en: "build + systems", th: "ก่อสร้าง + ระบบ" },
    capexPerSqm: { en: "CapEx / m²", th: "เงินลงทุน/ตร.ม." },
    shopAreaSub: { en: "shop area", th: "พื้นที่ร้าน" },
    addShopSqm: { en: "add shop m² above", th: "เพิ่มพื้นที่ร้าน (ตร.ม.) ด้านบน" },
    kitchenPerSqm: { en: "Kitchen ฿ / m²", th: "ครัว ฿/ตร.ม." },
    equipKitchen: { en: "equipment ÷ kitchen", th: "อุปกรณ์ ÷ พื้นที่ครัว" },
    addKitchenSqm: { en: "add kitchen m² above", th: "เพิ่มพื้นที่ครัว (ตร.ม.) ด้านบน" },
    reserveCovers: { en: "Reserve covers", th: "เงินสำรองครอบคลุม" },
    ofFixedCosts: { en: "of fixed costs", th: "ของต้นทุนคงที่" },
    capitalRequired: { en: "Capital required", th: "เงินทุนที่ต้องใช้" },
    everythingUpfront: { en: "everything upfront", th: "ทั้งหมดล่วงหน้า" },

    salesKicker: { en: "Financials · 2 of 4 — Sales", th: "การเงิน · 2 ใน 4 — ยอดขาย" },
    salesTitle: { en: "How much will you sell?", th: "คุณจะขายได้เท่าไร" },
    salesLead: { en: "Your expected sales each month. Not sure of a number? Build it up from your seats and prices.", th: "ยอดขายที่คาดไว้ในแต่ละเดือน ไม่แน่ใจตัวเลข? ลองคำนวณจากจำนวนที่นั่งและราคา" },
    haveTarget: { en: "I have a target", th: "ฉันมีเป้าหมายอยู่แล้ว" },
    helpEstimate: { en: "Help me estimate", th: "ช่วยประมาณให้หน่อย" },
    expectedMonthlySales: { en: "Expected monthly sales", th: "ยอดขายที่คาดต่อเดือน" },
    monthlySalesDesc: { en: "Total revenue across the whole month, before any costs.", th: "รายได้รวมทั้งเดือน ก่อนหักต้นทุนใดๆ" },
    aboutADay: { en: "That's about {x} a day.", th: "เฉลี่ยแล้วประมาณ {x} ต่อวัน" },
    briefSaysSeats: { en: "Your Concept Brief says {n} seats.", th: "สรุปแนวคิดของคุณระบุว่ามี {n} ที่นั่ง" },
    useIt: { en: "Use it", th: "ใช้ค่านี้" },
    seatsHint2: { en: "How many guests can sit at once", th: "รองรับลูกค้าได้พร้อมกันกี่คน" },
    tableTurns: { en: "Table turns per day", th: "จำนวนรอบต่อวัน" },
    tableTurnsHint: { en: "How many times each seat is filled", th: "แต่ละที่นั่งถูกใช้ซ้ำกี่ครั้งต่อวัน" },
    avgSpend: { en: "Average spend per guest", th: "ค่าใช้จ่ายเฉลี่ยต่อคน" },
    avgSpendHint: { en: "Food + drink on one bill, per head", th: "อาหาร+เครื่องดื่มต่อบิล ต่อคน" },
    openDays: { en: "Open days per month", th: "จำนวนวันเปิดต่อเดือน" },
    estMonthlySales: { en: "Estimated monthly sales", th: "ยอดขายโดยประมาณต่อเดือน" },
    perDayApprox: { en: "≈ {x} per day", th: "≈ {x} ต่อวัน" },
    salesPerMonth: { en: "Sales / month", th: "ยอดขาย/เดือน" },
    salesPerDay: { en: "Sales / day", th: "ยอดขาย/วัน" },
    avgCustValue: { en: "Avg customer value", th: "มูลค่าเฉลี่ยต่อลูกค้า" },
    spendPerHead: { en: "spend per head", th: "ค่าใช้จ่ายต่อคน" },
    useHelpEstimate: { en: "use “Help me estimate”", th: "ใช้ “ช่วยประมาณให้หน่อย”" },
    custPerDay: { en: "Customers / day", th: "ลูกค้า/วัน" },
    seatsTimesTurns: { en: "seats × turns", th: "ที่นั่ง × รอบ" },

    costsKicker: { en: "Financials · 3 of 4 — Costs", th: "การเงิน · 3 ใน 4 — ต้นทุน" },
    costsTitle: { en: "What does each month cost to run?", th: "แต่ละเดือนมีต้นทุนดำเนินงานเท่าไร" },
    costsLead: { en: "Your recurring monthly costs. Food cost moves with sales, so we set it as a percentage — the rest you can type or itemise.", th: "ต้นทุนรายเดือนที่เกิดซ้ำ ต้นทุนวัตถุดิบแปรผันตามยอดขาย จึงตั้งเป็นเปอร์เซ็นต์ — ส่วนที่เหลือพิมพ์หรือแจกแจงได้" },
    operatingCost: { en: "Operating Cost", th: "ต้นทุนดำเนินงาน" },
    operatingCostDesc: { en: "What it costs to run each month. Food moves with sales — set it as a share below — the rest you can type or itemise.", th: "ค่าใช้จ่ายในการดำเนินงานแต่ละเดือน ต้นทุนวัตถุดิบแปรผันตามยอดขาย — ตั้งเป็นสัดส่วนด้านล่าง — ส่วนที่เหลือพิมพ์หรือแจกแจงได้" },
    foodDrink: { en: "Food & drink ", th: "อาหารและเครื่องดื่ม " },
    foodDrinkSub: { en: "— at {sales} that's {food}/mo", th: "— ที่ยอดขาย {sales} คิดเป็น {food}/เดือน" },
    healthyRange: { en: "✓ healthy range", th: "✓ อยู่ในเกณฑ์ที่เหมาะสม" },
    healthy28to35: { en: "healthy 28–35%", th: "เกณฑ์ที่เหมาะสม 28-35%" },
    totalMonthlyCost: { en: "Total monthly cost", th: "ต้นทุนรวมต่อเดือน" },
    takeHomeAfterTax: { en: "Take-home after tax, each month", th: "กำไรสุทธิที่ได้ต่อเดือน หลังหักภาษี" },
    shortfallAfterTax: { en: "Shortfall each month (after tax)", th: "ยอดขาดทุนต่อเดือน (หลังหักภาษี)" },
    beforeTax: { en: "before tax: {x}", th: "ก่อนหักภาษี: {x}" },
    variableCosts: { en: "Variable costs", th: "ต้นทุนแปรผัน" },
    moveWithSales: { en: "move with sales", th: "แปรผันตามยอดขาย" },
    fixedCosts: { en: "Fixed costs", th: "ต้นทุนคงที่" },
    sameEveryMonth: { en: "same every month", th: "เท่าเดิมทุกเดือน" },
    breakEvenMo: { en: "Break-even / mo", th: "จุดคุ้มทุน/เดือน" },
    breakEvenDay: { en: "Break-even / day", th: "จุดคุ้มทุน/วัน" },
    ebitdaMo: { en: "EBITDA / mo", th: "EBITDA/เดือน" },
    marginPreTax: { en: "{pct} margin · pre-tax", th: "มาร์จิ้น {pct} · ก่อนภาษี" },
    netProfitAfterTax: { en: "Net profit after tax", th: "กำไรสุทธิหลังภาษี" },
    afterTaxMargin: { en: "{pct} after-tax margin", th: "มาร์จิ้นหลังภาษี {pct}" },

    theVerdict: { en: "The verdict", th: "ผลประเมิน" },
    netProfitMo: { en: "Net profit after tax / mo", th: "กำไรสุทธิหลังภาษี/เดือน" },
    preTaxTaxesEst: { en: "pre-tax {x} · taxes est. {y}", th: "ก่อนภาษี {x} · ภาษีประมาณ {y}" },
    netMargin: { en: "Net margin", th: "มาร์จิ้นสุทธิ" },
    afterTaxMarginSub: { en: "after tax · profit ÷ net sales", th: "หลังภาษี · กำไร ÷ ยอดขายสุทธิ" },
    breakEvenSales: { en: "Break-even sales", th: "ยอดขายจุดคุ้มทุน" },
    perDayShort: { en: "≈ ฿{x}/day", th: "≈ ฿{x}/วัน" },
    payback: { en: "Payback", th: "ระยะคืนทุน" },
    paybackSub: { en: "after tax, to earn back investment", th: "หลังภาษี กว่าจะคืนทุน" },
    toOpen: { en: "To open", th: "เพื่อเปิดร้าน" },
    totalUpfront: { en: "total upfront", th: "รวมล่วงหน้าทั้งหมด" },
    whereEvery100: { en: "Where every ฿100 of sales goes", th: "ทุกๆ ฿100 ของยอดขายไปที่ไหนบ้าง" },
    every100Desc: { en: "Every cost plus your profit adds up to 100% of sales.", th: "ทุกต้นทุนรวมกับกำไรของคุณจะรวมกันเป็น 100% ของยอดขาย" },
    bar: { en: "Bar", th: "แท่ง" },
    donut: { en: "Donut", th: "วงกลม" },
    netMarginDonut: { en: "Net margin", th: "มาร์จิ้นสุทธิ" },
    profitKeep: { en: "Profit after tax — what you keep", th: "กำไรหลังภาษี — ส่วนที่คุณได้" },
    monthlyLoss: { en: "Monthly loss (after tax)", th: "ขาดทุนต่อเดือน (หลังภาษี)" },
    whatToWatch: { en: "What to watch", th: "สิ่งที่ควรจับตา" },

    segFood: { en: "Food & drink", th: "อาหารและเครื่องดื่ม" },
    segStaff: { en: "Staff wages", th: "ค่าแรงพนักงาน" },
    segRent: { en: "Rent", th: "ค่าเช่า" },
    segUtil: { en: "Utilities", th: "สาธารณูปโภค" },
    segMkt: { en: "Marketing", th: "การตลาด" },
    segMgmt: { en: "Management & systems", th: "ระบบบริหารจัดการ" },
    segOther: { en: "Other", th: "อื่นๆ" },
    segTax: { en: "Taxes & statutory", th: "ภาษีและเงินสมทบ" },

    verdictNone: { en: "Awaiting numbers", th: "รอตัวเลข" },
    verdictLoss: { en: "Losing money", th: "ขาดทุน" },
    verdictRisky: { en: "Risky", th: "เสี่ยง" },
    verdictOk: { en: "Workable", th: "พอไปได้" },
    verdictHealthy: { en: "Healthy", th: "แข็งแรง" },
    verdictStrong: { en: "Strong", th: "แข็งแกร่ง" },

    blurbEmpty: { en: "Enter your sales and costs to see how the plan holds up.", th: "กรอกยอดขายและต้นทุนเพื่อดูว่าแผนนี้ไปรอดไหม" },
    blurbLoss: { en: "After costs and taxes you'd be short {x} every month. Raise sales, lift prices, or trim fixed costs to clear break-even.", th: "หลังหักต้นทุนและภาษีคุณจะขาดทุน {x} ทุกเดือน เพิ่มยอดขาย ขึ้นราคา หรือลดต้นทุนคงที่เพื่อให้ถึงจุดคุ้มทุน" },
    blurbThin: { en: "It works, but the cushion is thin after tax. A small dip in sales could wipe out the profit — keep food and staff costs tight.", th: "พอไปได้ แต่กันชนหลังภาษีค่อนข้างบาง ยอดขายลดนิดหน่อยก็อาจทำให้กำไรหายไป ควบคุมต้นทุนวัตถุดิบและค่าแรงให้แน่น" },
    blurbGood: { en: "This plan stands on its own — after tax. You clear break-even at {be} of sales and earn the investment back in {pb}.", th: "แผนนี้ไปรอดได้ด้วยตัวเอง — หลังหักภาษีแล้ว คุณจะถึงจุดคุ้มทุนที่ยอดขาย {be} และคืนทุนได้ภายใน {pb}" },

    invRenoLabel: { en: "Renovation & fit-out", th: "การรีโนเวทและตกแต่ง" },
    invRenoHint: { en: "Building work, interior, signage", th: "งานก่อสร้าง ตกแต่งภายใน ป้าย" },
    invEquipLabel: { en: "Kitchen equipment", th: "อุปกรณ์ครัว" },
    invEquipHint: { en: "Stoves, fridges, prep, small wares", th: "เตา ตู้เย็น อุปกรณ์เตรียมอาหาร เครื่องครัวเล็ก" },
    invFurnLabel: { en: "Furniture & décor", th: "เฟอร์นิเจอร์และของตกแต่ง" },
    invFurnHint: { en: "Tables, chairs, lighting", th: "โต๊ะ เก้าอี้ ไฟ" },
    invDepositLabel: { en: "Rent deposit", th: "เงินมัดจำค่าเช่า" },
    invDepositHint: { en: "Usually 2–3 months upfront", th: "โดยทั่วไป 2-3 เดือนล่วงหน้า" },
    invLicLabel: { en: "Licenses & permits", th: "ใบอนุญาตและการขึ้นทะเบียน" },
    invLicHint: { en: "Registration, food & alcohol permits", th: "จดทะเบียน ใบอนุญาตอาหารและเครื่องดื่มแอลกอฮอล์" },
    invMgmtLabel: { en: "Management & systems", th: "ระบบบริหารจัดการ" },
    invMgmtHint: { en: "POS, accounting, website, insurance", th: "POS บัญชี เว็บไซต์ ประกัน" },
    invInvLabel: { en: "Opening inventory", th: "สต๊อกเปิดร้าน" },
    invInvHint: { en: "First stock of food & drink", th: "วัตถุดิบชุดแรก" },
    invReserveLabel: { en: "Cash reserve", th: "เงินสำรอง" },
    invReserveHint: { en: "Buffer for the slow first months", th: "กันชนสำหรับช่วงเริ่มต้นที่ยังไม่คล่องตัว" },

    costStaffLabel: { en: "Staff wages", th: "ค่าแรงพนักงาน" },
    costStaffHint: { en: "All salaries, including yourself", th: "เงินเดือนทั้งหมด รวมของคุณเอง" },
    costRentLabel: { en: "Rent", th: "ค่าเช่า" },
    costRentHint: { en: "Monthly lease for the space", th: "ค่าเช่าพื้นที่รายเดือน" },
    costUtilLabel: { en: "Utilities", th: "ค่าสาธารณูปโภค" },
    costUtilHint: { en: "Electric, water, gas, internet", th: "ไฟ น้ำ แก๊ส อินเทอร์เน็ต" },
    costMktLabel: { en: "Marketing", th: "การตลาด" },
    costMktHint: { en: "Ads, promos, social media", th: "โฆษณา โปรโมชั่น โซเชียลมีเดีย" },
    costMgmtLabel: { en: "Management & systems", th: "ระบบบริหารจัดการ" },
    costMgmtHint: { en: "Insurance, accounting, POS, subscriptions", th: "ประกัน บัญชี POS ค่าสมัครสมาชิก" },
    costOtherLabel: { en: "Other", th: "อื่นๆ" },
    costOtherHint: { en: "Delivery platform fees, supplies, misc", th: "ค่าธรรมเนียมแพลตฟอร์มเดลิเวอรี่ ของใช้ เบ็ดเตล็ด" },
    costTaxLabel: { en: "Taxes & statutory", th: "ภาษีและเงินสมทบ" },
    costTaxHint: { en: "VAT, corporate tax, social security — add each as a line", th: "VAT ภาษีนิติบุคคล ประกันสังคม — เพิ่มทีละรายการ" },
    ofSalesShare: { en: "{pct} of sales", th: "{pct} ของยอดขาย" },
    continue: { en: "Continue →", th: "ถัดไป →" },
    seeResults: { en: "See my results →", th: "ดูผลลัพธ์ของฉัน →" },
  },
  fs: {
    heading: { en: "Financial summary", th: "สรุปการเงิน" },
    desc: { en: "The figures an investor or accountant would check — every one comes from what you entered.", th: "ตัวเลขที่นักลงทุนหรือนักบัญชีจะตรวจสอบ — ทุกตัวมาจากสิ่งที่คุณกรอกไว้" },
    capital: { en: "Capital", th: "เงินลงทุน" },
    monthlyEconomics: { en: "Monthly economics", th: "เศรษฐศาสตร์รายเดือน" },
    taxesTakeHome: { en: "Taxes & take-home", th: "ภาษีและกำไรสุทธิ" },
    customers: { en: "Customers", th: "ลูกค้า" },
    totalCapex: { en: "Total CapEx", th: "เงินลงทุนรวม" },
    totalCapexSub: { en: "build-out, equipment, furniture, licences, systems", th: "ก่อสร้าง อุปกรณ์ เฟอร์นิเจอร์ ใบอนุญาต ระบบ" },
    capexPerSqm: { en: "CapEx per m²", th: "เงินลงทุนต่อตร.ม." },
    ofShopArea: { en: "of shop area", th: "ของพื้นที่ร้าน" },
    addShopM2: { en: "add shop m² in step 1", th: "เพิ่มพื้นที่ร้าน (ตร.ม.) ในขั้นตอนที่ 1" },
    kitchenCostPerSqm: { en: "Kitchen cost per m²", th: "ต้นทุนครัวต่อตร.ม." },
    equipDivKitchen: { en: "equipment ÷ kitchen area", th: "อุปกรณ์ ÷ พื้นที่ครัว" },
    addKitchenM2: { en: "add kitchen m² in step 1", th: "เพิ่มพื้นที่ครัว (ตร.ม.) ในขั้นตอนที่ 1" },
    operatingReserve: { en: "Operating reserve", th: "เงินสำรองดำเนินงาน" },
    monthsFixedCovered: { en: "months of fixed costs covered", th: "จำนวนเดือนที่ต้นทุนคงที่ครอบคลุม" },
    totalCapitalRequired: { en: "Total capital required", th: "เงินทุนรวมที่ต้องใช้" },
    totalVariableCosts: { en: "Total variable costs", th: "ต้นทุนแปรผันรวม" },
    foodDrinkPct: { en: "food & drink · {pct}", th: "อาหารและเครื่องดื่ม · {pct}" },
    totalFixedCosts: { en: "Total fixed costs", th: "ต้นทุนคงที่รวม" },
    fixedCostsSub: { en: "staff, rent, utilities, marketing, systems, other", th: "ค่าแรง ค่าเช่า สาธารณูปโภค การตลาด ระบบ อื่นๆ" },
    breakEvenMonthly: { en: "Break-even (monthly)", th: "จุดคุ้มทุน (รายเดือน)" },
    breakEvenSalesSub: { en: "sales needed to cover all costs", th: "ยอดขายที่ต้องใช้ครอบคลุมต้นทุนทั้งหมด" },
    breakEvenDaily: { en: "Break-even (daily)", th: "จุดคุ้มทุน (รายวัน)" },
    ebitdaMonth: { en: "EBITDA / month", th: "EBITDA / เดือน" },
    ebitdaSub: { en: "profit before tax & depreciation", th: "กำไรก่อนหักภาษีและค่าเสื่อม" },
    taxesStatutoryMonth: { en: "Taxes & statutory / month", th: "ภาษีและเงินสมทบ / เดือน" },
    taxesSub: { en: "VAT, corporate tax & social security — your monthly set-aside", th: "VAT ภาษีนิติบุคคล และประกันสังคม — เงินที่ต้องกันไว้ต่อเดือน" },
    netProfitAfterTax: { en: "Net profit after tax", th: "กำไรสุทธิหลังภาษี" },
    takeHomeNumber: { en: "the take-home number", th: "ตัวเลขที่ได้จริง" },
    avgCustValue: { en: "Avg customer value", th: "มูลค่าเฉลี่ยต่อลูกค้า" },
    spendPerHead: { en: "spend per head", th: "ค่าใช้จ่ายต่อคน" },
    useHelpEstimate: { en: "use “Help me estimate” in Sales", th: "ใช้ “ช่วยประมาณให้หน่อย” ในขั้นตอนยอดขาย" },
    effCustDay: { en: "Effective customers / day", th: "ลูกค้าเฉลี่ย/วัน" },
    seatsTurns: { en: "seats × table turns", th: "ที่นั่ง × รอบโต๊ะ" },
  },
  inv: {
    itemized: { en: " item{s} itemised", th: " รายการที่แจกแจงแล้ว" },
    autoSummed: { en: "auto-summed", th: "รวมอัตโนมัติ" },
    itemHeader: { en: "Item", th: "รายการ" },
    qtyHeader: { en: "Qty", th: "จำนวน" },
    priceHeader: { en: "Price each", th: "ราคาต่อชิ้น" },
    totalHeader: { en: "Total", th: "รวม" },
    addItem: { en: "＋ Add an item…", th: "＋ เพิ่มรายการ…" },
    typeOwn: { en: "Type my own…", th: "พิมพ์เอง…" },
    notSureTotal: { en: "Not sure of the total? Add items one by one — it adds up for you and doubles as a checklist of what you've covered.", th: "ไม่แน่ใจยอดรวม? ใส่ทีละรายการ ระบบจะรวมให้อัตโนมัติ และเป็นเช็คลิสต์ให้ดูว่าคุณครอบคลุมอะไรไปแล้วบ้าง" },
    backToSingle: { en: "Back to a single amount", th: "กลับไปใส่เป็นยอดเดียว" },
    subtotal: { en: "Subtotal ", th: "ยอดรวมย่อย " },
    itemNamePh: { en: "Item name", th: "ชื่อรายการ" },
  },
  pitch: {
    kicker: { en: "Step 03 — Pitch Summary Dashboard", th: "ขั้นตอนที่ 03 — แดชบอร์ดสรุปนำเสนอ" },
    title: { en: "Your plan, on one page.", th: "แผนของคุณในหน้าเดียว" },
    lead: { en: "A read-only summary an investor or bank can read in two minutes — built from steps 01 and 02.", th: "สรุปแบบอ่านอย่างเดียวที่นักลงทุนหรือธนาคารอ่านจบใน 2 นาที — สร้างจากขั้นตอนที่ 01 และ 02" },
    lead2: { en: "A read-only summary an investor or bank can read in two minutes — every figure comes from steps 01 and 02.", th: "สรุปแบบอ่านอย่างเดียวที่นักลงทุนหรือธนาคารอ่านจบใน 2 นาที — ทุกตัวเลขมาจากขั้นตอนที่ 01 และ 02" },
    almostThere: { en: "Almost there.", th: "ใกล้เสร็จแล้ว" },
    emptyBase: { en: "The pitch summary assembles itself from your first two steps — nothing to fill in here.", th: "หน้าสรุปนำเสนอจะรวบรวมข้อมูลจากสองขั้นตอนแรกให้อัตโนมัติ — ไม่ต้องกรอกอะไรที่นี่" },
    emptyBoth: { en: " Start with your business model, then run the numbers.", th: " เริ่มจากโมเดลธุรกิจ แล้วค่อยคำนวณตัวเลข" },
    emptyIdea: { en: " Your numbers are in — describe the business model and this page writes itself.", th: " ตัวเลขของคุณพร้อมแล้ว — อธิบายโมเดลธุรกิจแล้วหน้านี้จะเขียนให้เอง" },
    emptyFin: { en: " Your concept is in — run the numbers and this page writes itself.", th: " แนวคิดของคุณพร้อมแล้ว — คำนวณตัวเลขแล้วหน้านี้จะเขียนให้เอง" },
    goToIdea: { en: "Go to Business Model →", th: "ไปที่โมเดลธุรกิจ →" },
    goToFin: { en: "Go to Financial Feasibility →", th: "ไปที่ความเป็นไปได้ทางการเงิน →" },
    untitledConcept: { en: "Untitled concept", th: "แนวคิดยังไม่มีชื่อ" },
    investmentVerdict: { en: "Investment verdict", th: "ผลประเมินการลงทุน" },
    fromAfterTaxMargin: { en: "from the after-tax margin", th: "จากมาร์จิ้นหลังภาษี" },
    theAsk: { en: "The ask", th: "สิ่งที่ขอ" },
    totalToOpen: { en: "Total to open", th: "รวมค่าใช้จ่ายเปิดร้าน" },
    oneTimeInvestment: { en: "one-time investment", th: "เงินลงทุนครั้งเดียว" },
    profitMoAfterTax: { en: "Profit / mo (after tax)", th: "กำไร/เดือน (หลังภาษี)" },
    preTax: { en: "pre-tax {x}", th: "ก่อนภาษี {x}" },
    netMargin: { en: "Net margin", th: "มาร์จิ้นสุทธิ" },
    afterTax: { en: "after tax", th: "หลังภาษี" },
    breakEvenSales: { en: "Break-even sales", th: "ยอดขายจุดคุ้มทุน" },
    perDayShort: { en: "≈ ฿{x}/day", th: "≈ ฿{x}/วัน" },
    payback: { en: "Payback", th: "ระยะคืนทุน" },
    theConcept: { en: "The concept", th: "แนวคิด" },
    builtFor: { en: "Built for {who}", th: "สร้างขึ้นสำหรับ{who}" },
    inSetting: { en: " in a {loc} setting", th: " ในทำเลแบบ{loc}" },
    atPrices: { en: ", at {band} prices ({range})", th: " ในระดับราคา{band} ({range})" },
    theFormat: { en: "The format: {seatsPart}{sqmPart}{svc} — {dine}% dine-in, {del}% delivery, {take}% takeaway.", th: "รูปแบบร้าน: {seatsPart}{sqmPart}{svc} — นั่งทาน {dine}%, เดลิเวอรี่ {del}%, ซื้อกลับ {take}%" },
    seatsCount: { en: "{n} seats", th: "{n} ที่นั่ง" },
    noSeating: { en: "no seating", th: "ไม่มีที่นั่ง" },
    onSqm: { en: " on {n} m²", th: " พื้นที่ {n} ตร.ม." },
    theDifferentiator: { en: "The differentiator", th: "จุดต่าง" },
    theNumbersMonthly: { en: "The numbers, monthly", th: "ตัวเลขรายเดือน" },
    seeFullFinancials: { en: "See full financials →", th: "ดูรายละเอียดการเงินทั้งหมด →" },
    sales: { en: "Sales", th: "ยอดขาย" },
    grossShownNet: { en: "฿{x} gross · shown net of 7% VAT", th: "฿{x} ก่อนหัก · แสดงหลังหัก VAT 7%" },
    totalRevenue: { en: "total revenue", th: "รายได้รวม" },
    foodDrinkCost: { en: "Food & drink cost", th: "ต้นทุนอาหารและเครื่องดื่ม" },
    ofSales: { en: "{pct} of sales", th: "{pct} ของยอดขาย" },
    fixedOperatingCosts: { en: "Fixed operating costs", th: "ต้นทุนดำเนินงานคงที่" },
    fixedOperatingSub: { en: "staff, rent, utilities, marketing, systems, other", th: "ค่าแรง ค่าเช่า สาธารณูปโภค การตลาด ระบบ อื่นๆ" },
    taxesStatutoryEst: { en: "Taxes & statutory (est.)", th: "ภาษีและเงินสมทบ (ประมาณ)" },
    taxesSetAside: { en: "your monthly tax set-aside", th: "เงินภาษีที่กันไว้ต่อเดือน" },
    netProfitAfterTax: { en: "Net profit after tax", th: "กำไรสุทธิหลังภาษี" },
    marginLabel: { en: "{pct} margin", th: "มาร์จิ้น {pct}" },
    ebitdaPreTax: { en: "EBITDA (pre-tax)", th: "EBITDA (ก่อนภาษี)" },
    capexBuildSystems: { en: "CapEx — build & systems", th: "เงินลงทุน — ก่อสร้างและระบบ" },
    capexSub: { en: "renovation, equipment, furniture, licences", th: "รีโนเวท อุปกรณ์ เฟอร์นิเจอร์ ใบอนุญาต" },
    depositsStockReserve: { en: "Deposits, stock & reserve", th: "มัดจำ สต๊อก และเงินสำรอง" },
    totalCapitalRequired: { en: "Total capital required", th: "เงินทุนรวมที่ต้องใช้" },
    whatToWatch: { en: "What to watch", th: "สิ่งที่ควรจับตา" },
    whatToWatchDesc: { en: "An honest plan names its own risks — these come from the reality check in step 01.", th: "แผนที่ซื่อตรงต้องระบุความเสี่ยงของตัวเอง — รายการนี้มาจากการตรวจสอบความเป็นจริงในขั้นตอนที่ 01" },
    noFlags: { en: "No open flags — the concept, price, rent expectation and capital hold together at these numbers.", th: "ไม่มีข้อสังเกต — แนวคิด ราคา ค่าเช่าที่คาดไว้ และเงินทุนสอดคล้องกันดีที่ตัวเลขนี้" },
    testFirst: { en: "Test first", th: "ทดสอบก่อน" },
    disclaimer: { en: "All figures are the owner's planning estimates, not audited numbers. Tax lines follow Thai VAT and SME corporate-tax rules — confirm with a Thai accountant.", th: "ตัวเลขทั้งหมดเป็นค่าประมาณการของเจ้าของ ไม่ใช่ตัวเลขที่ผ่านการตรวจสอบบัญชี รายการภาษีอ้างอิงกฎ VAT และภาษีนิติบุคคล SME ของไทย — ควรตรวจสอบกับนักบัญชีอีกครั้ง" },
    exportPlan: { en: "Export plan (JSON)", th: "ส่งออกแผน (JSON)" },
    printPdf: { en: "Print / Save as PDF", th: "พิมพ์ / บันทึกเป็น PDF" },
  },
};

const OPT = {
  "QSR": "ร้านอาหารบริการด่วน", "Café": "คาเฟ่", "Casual dining": "แคชชวลไดนิ่ง", "Fine dining": "ไฟน์ไดนิ่ง",
  "Bar": "บาร์", "Cloud kitchen": "คลาวด์คิทเช่น", "Bakery": "เบเกอรี่", "Buffet": "บุฟเฟ่ต์",
  "Thai": "ไทย", "Isaan": "อีสาน", "Japanese": "ญี่ปุ่น", "Ramen": "ราเมง", "Sushi": "ซูชิ",
  "Korean": "เกาหลี", "Chinese": "จีน", "Italian": "อิตาเลียน", "Pizza": "พิซซ่า", "Western": "ตะวันตก",
  "Seafood": "ซีฟู้ด", "Fusion": "ฟิวชั่น", "Vegan": "วีแกน",
  "Students": "นักเรียน/นักศึกษา", "Office workers": "พนักงานออฟฟิศ", "Families": "ครอบครัว",
  "Tourists": "นักท่องเที่ยว", "Expats": "ชาวต่างชาติ", "Hi-so": "ไฮโซ",
  "Shopping mall": "ห้างสรรพสินค้า", "Street / shophouse": "ริมถนน/ตึกแถว", "Community mall": "คอมมูนิตี้มอลล์",
  "CBD office": "ย่านธุรกิจ", "Tourist zone": "แหล่งท่องเที่ยว", "Campus": "ใกล้มหาวิทยาลัย",
  "Counter service": "บริการหน้าเคาน์เตอร์", "Table service": "เสิร์ฟที่โต๊ะ", "Self service": "บริการตัวเอง", "Delivery only": "เดลิเวอรี่อย่างเดียว",
  "First-timer": "มือใหม่", "Worked in F&B": "เคยทำงานร้านอาหาร", "Opened before": "เคยเปิดร้านมาก่อน",
  "Owner-operator": "เจ้าของที่บริหารเอง", "Investor": "นักลงทุน",
  "Few": "น้อย", "Some": "ปานกลาง", "Many": "เยอะ",
  "Budget": "ประหยัด", "Mid": "ปานกลาง", "Premium": "พรีเมียม", "Luxury": "หรูหรา",
};

const HEARD_TH = {
  "Category": "ประเภทร้าน", "Cuisine": "ประเภทอาหาร", "Name": "ชื่อร้าน", "Tagline": "แท็กไลน์",
  "Target customer": "กลุ่มลูกค้าเป้าหมาย", "Price band": "ระดับราคา", "Channel mix": "สัดส่วนช่องทาง",
  "Seats": "ที่นั่ง", "Size": "ขนาด", "Service": "การบริการ", "Location type": "ประเภททำเล",
  "Your edge": "จุดเด่น", "Experience": "ประสบการณ์", "Capital": "เงินทุน", "Involvement": "บทบาท",
};

function optLabel(lang, v) {
  if (lang !== "th") return v;
  return OPT[v] || v;
}
function heardLabel(lang, k) {
  if (lang !== "th") return k;
  return HEARD_TH[k] || k;
}

const LangContext = React.createContext(null);

function useLang() {
  return React.useContext(LangContext);
}

function LanguageProvider({ children }) {
  const [lang, setLangState] = React.useState(() => {
    try { return localStorage.getItem(LANG_KEY) || "th"; } catch (e) { return "th"; }
  });
  const setLang = React.useCallback((l) => {
    setLangState(l);
    try { localStorage.setItem(LANG_KEY, l); } catch (e) {}
  }, []);
  const t = React.useCallback((path, vars) => {
    const parts = path.split(".");
    let node = T;
    for (const p of parts) node = node && node[p];
    let str = node ? (node[lang] || node.en || path) : path;
    if (vars) {
      for (const k in vars) str = str.split("{" + k + "}").join(vars[k]);
    }
    return str;
  }, [lang]);
  const value = React.useMemo(() => ({ lang, setLang, t }), [lang, setLang, t]);
  return <LangContext.Provider value={value}>{children}</LangContext.Provider>;
}

function LanguageToggle() {
  const { lang, setLang } = useLang();
  return (
    <div style={{
      position: "fixed", top: 16, right: 16, zIndex: 2147483647,
      display: "inline-flex", background: "rgba(250,250,252,.85)", backdropFilter: "blur(10px) saturate(160%)",
      WebkitBackdropFilter: "blur(10px) saturate(160%)",
      border: "1px solid var(--border-strong)", borderRadius: 999, padding: 3, gap: 2,
      boxShadow: "var(--shadow)", fontFamily: "'Hanken Grotesk',system-ui,-apple-system,sans-serif",
    }}>
      {["th", "en"].map((l) => (
        <button key={l} type="button" onClick={() => setLang(l)}
          aria-pressed={lang === l}
          style={{
            border: "none", cursor: "pointer", borderRadius: 999, padding: "6px 14px",
            fontSize: 12.5, fontWeight: 700, letterSpacing: ".02em", fontFamily: "inherit",
            background: lang === l ? "var(--accent)" : "transparent",
            color: lang === l ? "#fff" : "var(--muted)",
            transition: "background .15s, color .15s",
          }}>{l === "th" ? "ไทย" : "EN"}</button>
      ))}
    </div>
  );
}

Object.assign(window, { useLang, LanguageProvider, LanguageToggle, optLabel, heardLabel });
