/* 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 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 ( {children} ); } function useT() { return React.useContext(I18nContext); } Object.assign(window, { I18nProvider, I18nContext, useT, DICT });