/* HLiD — i18n (EN / DE) — single source of truth for UI copy.
   German register: Austrian business / legal formal (Sie-Form, DSGVO terms). */

const DICT = {
  EN: {
    // nav
    'nav.product':       'Product',
    'nav.workflow':      'Workflow',
    'nav.observability': 'Observability',
    'nav.integrations':  'Integrations',
    'nav.customers':     'Customers',
    'nav.live':          'Live · AT · CH',
    'nav.cta':           'Book a demo',

    // hero
    'hero.caption':      'A brand film · 00:52',
    'hero.tagline':      'Full-control invoicing platform',
    'hero.stamps':       'Enterprise-ready · AI-first · Audit-grade',
    'hero.cta':          'Book a 30-min demo',
    'hero.scroll':       'Scroll',
    'hero.soundOn':      'Sound on',
    'hero.soundOff':     'Sound off',

    // pillars
    'pillars.01.title':  'Enterprise-ready',
    'pillars.01.body':   'Multi-entity. Multi-ERP. Multi-jurisdiction. Built for groups, not single GmbHs.',
    'pillars.02.title':  'AI-first',
    'pillars.02.body':   'Extraction, routing and anomaly detection are the pipeline — not a plugin.',
    'pillars.03.title':  'Audit-grade',
    'pillars.03.body':   'Every decision pixel-traceable from email to journal line. DACH-audit verified.',

    // § 01 Problem
    'problem.eyebrow':   'The problem',
    'problem.h1.a':      'Multi-entity AP',
    'problem.h1.b':      'is a mess.',
    'problem.lede':      "Corporate groups run a dozen legal entities, two or three ERPs, and four approval policies. Invoices multiply. Accountants don't. What should be a six-second posting becomes a six-day hunt.",
    'problem.1.t':       'Fragmented intake',
    'problem.1.b':       'Email, PDF, portal, EDI, paper. Every vendor, every entity, a different door.',
    'problem.2.t':       'Manual classification',
    'problem.2.b':       'VAT split. Cost centre. Legal entity. An accountant deciphering a PDF at 22:00.',
    'problem.3.t':       'Approval bottlenecks',
    'problem.3.b':       'The approver is on leave. The ceiling is wrong. The invoice sits seven days.',
    'problem.4.t':       'Manual ERP entry',
    'problem.4.b':       'Retyping 30 lines into BMD. Retyping the same 30 lines into Abacus next month.',

    // § 02 Solution
    'solution.eyebrow':  'The pipeline',
    'solution.h1':       'One path. Email to journal line.',
    'solution.foot':     'No per-vendor templates. No rules engine to maintain. HLiD reads the invoice, matches it to your policies, and moves it forward. You see every step. You can override any one.',
    'solution.n1': 'Intake',     'solution.n1.s': 'Email · Portal · EDI',
    'solution.n2': 'AI extraction', 'solution.n2.s': 'Vendor · VAT · Lines',
    'solution.n3': 'Routing',    'solution.n3.s': 'Entity · Ceiling · Rule',
    'solution.n4': 'Approval',   'solution.n4.s': '4-eye · Stand-in',
    'solution.n5': 'Posting',    'solution.n5.s': 'BMD · Abacus · SAP',
    'solution.n6': 'Payment',    'solution.n6.s': 'SEPA · SWIFT',
    'solution.n7': 'Reconcile',  'solution.n7.s': 'Audit trail',

    // § 03 AI
    'ai.eyebrow':        'AI layer',
    'ai.h1.a':           'AI is the primary pipeline,',
    'ai.h1.b':           'not a plugin.',
    'ai.s1.label':       'Throughput per FTE',
    'ai.s1.foot':        'measured in production vs. prior manual baseline',
    'ai.s2.label':       'New routing rules required',
    'ai.s2.foot':        'the model learns your group once',
    'ai.s3.label':       'Anomaly & duplicate detection',
    'ai.s3.foot':        'across entities, currencies, cycles',
    'ai.foot':           'Extraction runs on Claude Sonnet 4.6, with every field traced to the pixel coordinates it was read from. Low-confidence fields escalate to a human before posting — nothing silent, nothing guessed. The model is re-evaluated monthly against a sealed holdout of 2,400 invoices per locale.',

    // § 04 Workflow
    'wf.eyebrow':        'Workflow',
    'wf.h1.a':           'Approve.',
    'wf.h1.b':           'Then pay.',
    'wf.approvalHead':   'Approval',
    'wf.paymentHead':    'Payment prep',
    'wf.a1.t':           'Four-eye principle',
    'wf.a1.b':           'Two human sign-offs above entity-specific ceilings. Enforced before post.',
    'wf.a2.t':           'Stand-in delegation',
    'wf.a2.b':           'CFO on leave? Super-admin stand-in, cryptographically scoped, time-boxed.',
    'wf.a3.t':           'Return to sender',
    'wf.a3.b':           'One click sends the invoice back with a reason. The vendor gets a structured email, not a PDF tennis match.',
    'wf.a4.t':           'Mobile parity',
    'wf.a4.b':           '30 seconds per invoice on the phone. Pixel-traced view, same evidence.',
    'wf.p1.t':           'Treasury batching',
    'wf.p1.b':           'Invoices grouped by entity, bank, currency and due window. Exports sign-ready.',
    'wf.p2.t':           'SEPA & SWIFT',
    'wf.p2.b':           'pain.001 and MT101 generated. Manual-bank workflow for partners that need it.',
    'wf.p3.t':           'Idempotent booking runs',
    'wf.p3.b':           'Re-run a posting batch safely. No double-posting. No ghost lines.',
    'wf.p4.t':           'Audit export',
    'wf.p4.b':           'Per entity, per period, per approver. DACH-audit packaging by default.',
    'wf.fig':            'Fig 01 · Approval view · production',
    'wf.figNote':        'Placeholder · awaiting production screenshot from HLiD team',

    // § 05 Observability
    'obs.eyebrow':       'Observability',
    'obs.h1.a':          "CFOs shouldn't have to",
    'obs.h1.b':          'call five people.',
    'obs.lede':          'Every pane is live. Drill from the total back to the specific invoice, specific approver, specific journal row in one click.',
    'obs.t1':            'Production funnel',
    'obs.t2':            'Approver deep-dive',
    'obs.t3':            'Vendor scorecard',
    'obs.t4':            'AI quality',

    // § 06 Integrations
    'int.eyebrow':       'Integrations',
    'int.h1.a':          'Connects to the ledger',
    'int.h1.b':          'you already run.',
    'int.erp':           'ERP · accounting',
    'int.crm':           'CRM · procurement',
    'int.foot':          'Adapters shipped as modules. Missing yours? Two-week integration.',

    // § 07 Case
    'case.eyebrow':      'In production',
    'case.h1.a':         'A dozen entities.',
    'case.h1.b':         'Two jurisdictions.',
    'case.h1.c':         'One pipeline.',
    'case.big':          'min',
    'case.bigLabel':     'Average approval time',
    'case.bigSub':       'down from days of manual back-and-forth',
    'case.body':         'No more chasing invoices. No more waiting on approvals.\nNo more asking where things stand — the answer is already on the screen.',

    // § 08 Next
    'next.eyebrow':      'Next',
    'next.h1':           '30 days to full production.',
    'next.s1.w':         'Day 01 – 05',
    'next.s1.t':         'Workshop & audit',
    'next.s1.b':         'We walk your current AP with you. Map entities, ERPs, ceilings, policies. Output: a scoped pilot contract.',
    'next.s2.w':         'Day 06 – 15',
    'next.s2.t':         'Pilot on live invoices',
    'next.s2.b':         'One entity. Real invoices. Dual-run alongside your existing process. You see every decision, override any one.',
    'next.s3.w':         'Day 16 – 30',
    'next.s3.t':         'Group rollout',
    'next.s3.b':         'Sequenced entity-by-entity. ERP adapters hardened. Approvers onboarded. Full production.',
    'next.formH.a':      'Book a 30-min demo on',
    'next.formH.b':      'your own invoices.',
    'next.formOr':       'Or write',

    // form
    'f.name':            'Your name',
    'f.email':           'Work email',
    'f.company':         'Company / group',
    'f.entities':        'How many entities in scope? (optional)',
    'f.note':            'ERPs in use, biggest AP pain, timeline (optional)',
    'f.submit':          'Request the session',
    'f.sending':         'Sending…',
    'f.sla':             'We reply within\none business day',
    'f.err':             'Please fill name, email, and company.',
    'f.ok':              "Thanks — we'll reply within one business day.",
    'f.okTag':           '✓ Request received',
    'f.fallback':        'Opening your mail client…',

    // footer
    'foot.tag':          'Full-control invoicing for multi-entity corporate groups. Built in Vienna. Live across Austria and Switzerland.',
    'foot.company':      'Nibelung · Vienna',
    'foot.Product':      'Product',
    'foot.Company':      'Company',
    'foot.Legal':        'Legal',
    'foot.about':        'About',
    'foot.security':     'Security',
    'foot.contact':      'Contact',
    'foot.impressum':    'Impressum',
    'foot.datenschutz':  'Privacy',
    'foot.caseStudy':    'Case study',
    'foot.productOf':    'A Nibelung product',
    'foot.copy':         '© 2026 · All rights reserved',
  },

  DE: {
    // nav
    'nav.product':       'Produkt',
    'nav.workflow':      'Workflow',
    'nav.observability': 'Observability',
    'nav.integrations':  'Integrationen',
    'nav.customers':     'Kunden',
    'nav.live':          'Live · AT · CH',
    'nav.cta':           'Demo anfragen',

    // hero
    'hero.caption':      'Markenfilm · 00:52',
    'hero.tagline':      'Rechnungsverarbeitung mit voller Kontrolle',
    'hero.stamps':       'Enterprise-tauglich · AI-first · Prüfsicher',
    'hero.cta':          '30-Min-Demo buchen',
    'hero.scroll':       'Scrollen',
    'hero.soundOn':      'Ton an',
    'hero.soundOff':     'Ton aus',

    // pillars
    'pillars.01.title':  'Enterprise-tauglich',
    'pillars.01.body':   'Mehrere Gesellschaften. Mehrere ERPs. Mehrere Jurisdiktionen. Gebaut für Konzerngruppen, nicht für einzelne GmbHs.',
    'pillars.02.title':  'AI-first',
    'pillars.02.body':   'Extraktion, Routing und Anomalieerkennung sind die Pipeline — kein nachgelagertes Plug-in.',
    'pillars.03.title':  'Prüfsicher',
    'pillars.03.body':   'Jede Entscheidung pixelgenau nachvollziehbar — von der E-Mail bis zur Buchungszeile. DACH-Prüfung verifiziert.',

    // § 01 Problem
    'problem.eyebrow':   'Das Problem',
    'problem.h1.a':      'Kreditorenbuchhaltung',
    'problem.h1.b':      'in Konzernen ist ein Chaos.',
    'problem.lede':      'Konzerne betreiben ein Dutzend Gesellschaften, zwei bis drei ERPs und vier Freigaberichtlinien. Die Rechnungen werden mehr. Die Buchhalter:innen nicht. Was eine Sache von sechs Sekunden sein sollte, wird zur sechs-Tage-Suche.',
    'problem.1.t':       'Zersplitterter Eingang',
    'problem.1.b':       'E-Mail, PDF, Portal, EDI, Papier. Jeder Lieferant, jede Gesellschaft, eine andere Tür.',
    'problem.2.t':       'Manuelle Kontierung',
    'problem.2.b':       'USt-Satz. Kostenstelle. Rechtsform. Eine Buchhalterin, die um 22:00 ein PDF entziffert.',
    'problem.3.t':       'Freigabe-Engpässe',
    'problem.3.b':       'Der/die Freizeichner:in ist im Urlaub. Das Limit stimmt nicht. Die Rechnung liegt sieben Tage.',
    'problem.4.t':       'Manuelle ERP-Erfassung',
    'problem.4.b':       '30 Zeilen in BMD abtippen. Dieselben 30 Zeilen nächsten Monat in Abacus abtippen.',

    // § 02 Solution
    'solution.eyebrow':  'Die Pipeline',
    'solution.h1':       'Ein Weg. Vom Posteingang zur Buchungszeile.',
    'solution.foot':     'Keine lieferantenspezifischen Vorlagen. Keine Regel-Engine zu pflegen. HLiD liest die Rechnung, ordnet sie Ihren Richtlinien zu und bringt sie voran. Sie sehen jeden Schritt. Sie können jeden übersteuern.',
    'solution.n1': 'Eingang',       'solution.n1.s': 'E-Mail · Portal · EDI',
    'solution.n2': 'KI-Extraktion', 'solution.n2.s': 'Lieferant · USt · Zeilen',
    'solution.n3': 'Routing',       'solution.n3.s': 'Gesellschaft · Limit · Regel',
    'solution.n4': 'Freigabe',      'solution.n4.s': '4-Augen · Vertretung',
    'solution.n5': 'Buchung',       'solution.n5.s': 'BMD · Abacus · SAP',
    'solution.n6': 'Zahlung',       'solution.n6.s': 'SEPA · SWIFT',
    'solution.n7': 'Abgleich',      'solution.n7.s': 'Prüfspur',

    // § 03 AI
    'ai.eyebrow':        'KI-Ebene',
    'ai.h1.a':           'KI ist die Pipeline,',
    'ai.h1.b':           'kein Plug-in.',
    'ai.s1.label':       'Durchsatz pro Vollzeit­kraft',
    'ai.s1.foot':        'gemessen im Produktivbetrieb vs. bisheriger manueller Baseline',
    'ai.s2.label':       'Neue Routing-Regeln nötig',
    'ai.s2.foot':        'das Modell lernt Ihre Gruppe einmalig',
    'ai.s3.label':       'Anomalie- & Duplikat­erkennung',
    'ai.s3.foot':        'über Gesellschaften, Währungen, Zyklen hinweg',
    'ai.foot':           'Die Extraktion läuft auf Claude Sonnet 4.6, jedes Feld rückführbar auf die Pixelkoordinaten, aus denen es gelesen wurde. Felder mit niedriger Konfidenz werden vor der Buchung an eine:n Mitarbeiter:in eskaliert — nichts wird still geschluckt, nichts geraten. Das Modell wird monatlich gegen einen versiegelten Hold-out von 2.400 Rechnungen je Sprachraum re-evaluiert.',

    // § 04 Workflow
    'wf.eyebrow':        'Workflow',
    'wf.h1.a':           'Freigeben.',
    'wf.h1.b':           'Dann zahlen.',
    'wf.approvalHead':   'Freigabe',
    'wf.paymentHead':    'Zahlungsvorbereitung',
    'wf.a1.t':           'Vier-Augen-Prinzip',
    'wf.a1.b':           'Zwei menschliche Freigaben oberhalb der Gesellschaftslimits. Erzwungen vor der Buchung.',
    'wf.a2.t':           'Vertretungsdelegation',
    'wf.a2.b':           'CFO im Urlaub? Super-Admin-Vertretung, kryptographisch begrenzt, zeitlich befristet.',
    'wf.a3.t':           'Zurück an Absender',
    'wf.a3.b':           'Ein Klick schickt die Rechnung mit Begründung zurück. Der Lieferant erhält eine strukturierte E-Mail — kein PDF-Pingpong.',
    'wf.a4.t':           'Mobil gleichwertig',
    'wf.a4.b':           '30 Sekunden pro Rechnung am Handy. Pixelgenaue Ansicht, identische Nachweise.',
    'wf.p1.t':           'Treasury-Bündelung',
    'wf.p1.b':           'Rechnungen gruppiert nach Gesellschaft, Bank, Währung und Fälligkeitsfenster. Exporte unterschriftsreif.',
    'wf.p2.t':           'SEPA & SWIFT',
    'wf.p2.b':           'pain.001 und MT101 werden generiert. Manuelle Bank-Workflows für Partner, die das brauchen.',
    'wf.p3.t':           'Idempotente Buchungsläufe',
    'wf.p3.b':           'Ein Buchungslauf kann gefahrlos erneut ausgeführt werden. Keine Doppelbuchungen. Keine Geisterzeilen.',
    'wf.p4.t':           'Prüfungsexport',
    'wf.p4.b':           'Pro Gesellschaft, pro Periode, pro Freizeichner:in. DACH-Prüfungspaket standardmäßig.',
    'wf.fig':            'Abb. 01 · Freigabe-Ansicht · Produktivbetrieb',
    'wf.figNote':        'Platzhalter · finaler Produktiv-Screenshot folgt',

    // § 05 Observability
    'obs.eyebrow':       'Observability',
    'obs.h1.a':          'CFOs sollten nicht',
    'obs.h1.b':          'fünf Leute anrufen müssen.',
    'obs.lede':          'Jede Kachel ist live. Ein Klick vom Gesamtwert zur konkreten Rechnung, zum:zur konkreten Freizeichner:in, zur konkreten Buchungszeile.',
    'obs.t1':            'Produktions-Funnel',
    'obs.t2':            'Freizeichner-Deep-Dive',
    'obs.t3':            'Lieferanten-Scorecard',
    'obs.t4':            'KI-Qualität',

    // § 06 Integrations
    'int.eyebrow':       'Integrationen',
    'int.h1.a':          'Verbindet sich mit dem Ledger,',
    'int.h1.b':          'den Sie bereits betreiben.',
    'int.erp':           'ERP · Buchhaltung',
    'int.crm':           'CRM · Beschaffung',
    'int.foot':          'Adapter als Module ausgeliefert. Ihres fehlt? Zwei-Wochen-Integration.',

    // § 07 Case
    'case.eyebrow':      'Im Produktivbetrieb',
    'case.h1.a':         'Ein Dutzend Gesellschaften.',
    'case.h1.b':         'Zwei Jurisdiktionen.',
    'case.h1.c':         'Eine Pipeline.',
    'case.big':          'Min',
    'case.bigLabel':     'Durchschnittliche Freigabezeit',
    'case.bigSub':       'statt Tagen manueller Hin-und-her-Kommunikation',
    'case.body':         'Kein Hinterhertelefonieren mehr. Kein Warten auf Freigaben.\nKein Nachfragen, wo etwas steht — die Antwort ist bereits am Bildschirm.',

    // § 08 Next
    'next.eyebrow':      'Nächste Schritte',
    'next.h1':           '30 Tage bis zum Produktivbetrieb.',
    'next.s1.w':         'Tag 01 – 05',
    'next.s1.t':         'Workshop & Audit',
    'next.s1.b':         'Wir begehen Ihre bestehende AP-Strecke gemeinsam. Gesellschaften, ERPs, Limits und Richtlinien werden erfasst. Ergebnis: ein abgegrenzter Pilotvertrag.',
    'next.s2.w':         'Tag 06 – 15',
    'next.s2.t':         'Pilot mit Echtrechnungen',
    'next.s2.b':         'Eine Gesellschaft. Echte Rechnungen. Parallel­betrieb zum bestehenden Prozess. Sie sehen jede Entscheidung und können jede übersteuern.',
    'next.s3.w':         'Tag 16 – 30',
    'next.s3.t':         'Rollout auf die Gruppe',
    'next.s3.b':         'Gesellschaft für Gesellschaft sequenziert. ERP-Adapter gehärtet. Freizeichner:innen eingeführt. Voller Produktivbetrieb.',
    'next.formH.a':      '30-Min-Demo auf Basis',
    'next.formH.b':      'Ihrer eigenen Rechnungen.',
    'next.formOr':       'Oder schreiben Sie an',

    // form
    'f.name':            'Ihr Name',
    'f.email':           'Geschäftliche E-Mail',
    'f.company':         'Unternehmen / Gruppe',
    'f.entities':        'Wie viele Gesellschaften im Scope? (optional)',
    'f.note':            'Eingesetzte ERPs, größter AP-Schmerz, Zeitrahmen (optional)',
    'f.submit':          'Termin anfragen',
    'f.sending':         'Wird gesendet…',
    'f.sla':             'Antwort innerhalb\neines Werktags',
    'f.err':             'Bitte Name, E-Mail und Unternehmen ausfüllen.',
    'f.ok':              'Danke — wir melden uns innerhalb eines Werktags.',
    'f.okTag':           '✓ Anfrage eingegangen',
    'f.fallback':        'Ihr E-Mail-Programm wird geöffnet…',

    // footer
    'foot.tag':          'Rechnungsverarbeitung mit voller Kontrolle für Konzerngruppen. Gebaut in Wien. Im Produktivbetrieb in Österreich und der Schweiz.',
    'foot.company':      'Nibelung · Wien',
    'foot.Product':      'Produkt',
    'foot.Company':      'Unternehmen',
    'foot.Legal':        'Rechtliches',
    'foot.about':        'Über uns',
    'foot.security':     'Sicherheit',
    'foot.contact':      'Kontakt',
    'foot.impressum':    'Impressum',
    'foot.datenschutz':  'Datenschutz',
    'foot.caseStudy':    'Fallstudie',
    'foot.productOf':    'Ein Produkt von Nibelung',
    'foot.copy':         '© 2026 · Alle Rechte vorbehalten',
  },
};

const I18nContext = React.createContext({ locale: 'EN', t: (k) => DICT.EN[k] || k, setLocale: () => {} });

function I18nProvider({ children }) {
  const [locale, setLocaleState] = React.useState(() => {
    try {
      const saved = localStorage.getItem('hlid.locale');
      if (saved === 'EN' || saved === 'DE') return saved;
      // Default: DE (primary market AT/CH). EN only if user's browser is clearly English.
      const nav = (navigator.language || 'de').slice(0, 2).toLowerCase();
      return nav === 'en' ? 'EN' : 'DE';
    } catch { return 'DE'; }
  });
  const setLocale = React.useCallback((l) => {
    setLocaleState(l);
    try { localStorage.setItem('hlid.locale', l); } catch {}
    // Reflect on <html lang>
    try { document.documentElement.setAttribute('lang', l === 'DE' ? 'de' : 'en'); } catch {}
  }, []);
  React.useEffect(() => {
    try { document.documentElement.setAttribute('lang', locale === 'DE' ? 'de' : 'en'); } catch {}
  }, [locale]);
  const t = React.useCallback((k) => {
    const table = DICT[locale] || DICT.EN;
    return table[k] ?? DICT.EN[k] ?? k;
  }, [locale]);
  return (
    <I18nContext.Provider value={{ locale, setLocale, t }}>
      {children}
    </I18nContext.Provider>
  );
}

function useT() { return React.useContext(I18nContext); }

Object.assign(window, { I18nProvider, I18nContext, useT, DICT });
