// i18n — DE (source) / EN — minimal live-switch system
// The whole app reads `t('key')` and re-renders when language changes.
// Not every generated content string is duplicated into EN; we translate
// the navigation, headers, labels, buttons and meta — everything needed
// for the text team to judge look & feel.
const I18N = {
  de: {
    // nav
    'nav.dashboard': 'Dashboard',
    'nav.leads': 'Leads',
    'nav.cortex': 'Mein Profil',
    'nav.credits': 'Verfügbare Credits',
    'nav.buyLeads': 'Leads jetzt kaufen',
    // Account / Profil screen
    'acct.title': 'Profil',
    'acct.sub': 'Verwalte Profileinstellungen, ändere Zahlungsmethoden und lade Rechnungen für vergangene Transaktionen herunter.',
    'acct.tab.profile': 'Profil',
    'acct.tab.billing': 'Abrechnung',
    'acct.prof.title': 'Profil Information',
    'acct.prof.save': 'Speichern',
    'acct.prof.upload': 'Bild hochladen',
    'acct.prof.uploadHint': 'JPG, PNG oder WebP. Max. 1 MB.',
    'acct.prof.first': 'Vorname',
    'acct.prof.last': 'Nachname',
    'acct.prof.email': 'E-Mail-Adresse',
    'acct.prof.lang': 'Sprache',
    'acct.sec.title': 'Sicherheitseinstellungen',
    'acct.sec.pw': 'Passwort ändern',
    'acct.sec.pwSub': 'Ändere hier dein Account-Passwort',
    'acct.sec.change': 'Ändern',
    'acct.sec.twofa': 'Zwei-Faktor-Authentifizierung',
    'acct.sec.twofaSub': 'Authentifizierung ist deaktiviert. Aktiviere sie, um deinem Konto eine zusätzliche Sicherheitsebene hinzuzufügen.',
    'acct.sec.active': 'Aktiv',
    'acct.sec.inactive': 'Inaktiv',
    'acct.sec.twofaActivate': '2FA aktivieren',
    'acct.sec.twofaDeactivate': '2FA deaktivieren',
    'acct.bill.methods': 'Zahlungsmethoden',
    'acct.bill.manageCards': 'Karten verwalten',
    'acct.bill.noMethods': 'Keine Zahlungsmethoden gefunden',
    'acct.bill.addMethod': 'Zahlungsmethode hinzufügen',
    'acct.bill.history': 'Transaktionsverlauf',
    'acct.bill.filter.all': 'Jemals',
    'acct.bill.filter.30': 'Letzte 30 Tage',
    'acct.bill.filter.90': 'Letzte 90 Tage',
    'acct.bill.col.date': 'Datum',
    'acct.bill.col.desc': 'Beschreibung',
    'acct.bill.col.amount': 'Betrag',
    'acct.bill.col.credits': 'Credits',
    'acct.bill.col.status': 'Status',
    'acct.bill.col.invoice': 'Rechnung',
    'acct.bill.paid': 'Bezahlt',
    'acct.bill.empty': 'Keine Transaktionen gefunden',
    'acct.bill.emptySub': 'Ihr Zahlungsverlauf wird hier nach Ihrem ersten Kauf angezeigt.',
    'acct.plan.your': 'Dein Plan',
    'acct.plan.trial': 'Testphase',
    'acct.plan.active': 'Aktiv',
    'acct.plan.perMonth': '/ Monat',
    'acct.plan.afterTrial': 'Nach Testphase',
    'acct.plan.nextBill': 'Nächste Abrechnung am {date} · {leads} Leads/Monat',
    'acct.plan.daysLeft': 'Noch {n} Tage kostenlos testen — danach läuft dein Abo automatisch weiter.',
    'acct.plan.dayLeft': 'Noch 1 Tag kostenlos testen — danach läuft dein Abo automatisch weiter.',
    'acct.plan.endsToday': 'Testphase endet heute — dein Abo startet automatisch.',
    'acct.plan.switch': 'Plan wechseln',
    'acct.plan.secureSub': 'Abo sichern',
    'acct.plan.trialUsage': 'Test-Leads diese Phase',
    'acct.plan.monthUsage': 'Leads diesen Monat',
    'acct.plan.leftOf': 'von {total} übrig',
    'acct.plan.addOneOff': 'Einmalpaket dazuladen',
    'acct.plan.usedThisMonth': '{used} / {total} diesen Monat genutzt · Reset am {date}',
    'acct.bill.methodAutoAdded': 'Wird automatisch nach Testphasen-Start hinzugefügt.',
    'acct.bill.cardEnds': 'Visa endet auf •• 4242',
    'acct.bill.cardExpHolder': 'Ablauf 08/2028 · Janik Deimann',
    'acct.bill.primary': 'Primär',
    'acct.bill.descSub': '{plan}-Abo · {month} 2025',
    'acct.menu.settings': 'Account-Einstellungen',
    'acct.menu.logout': 'Abmelden',
    // Integrations
    'acct.tab.integrations': 'Integrationen',
    'acct.int.title': 'CRM-Integrationen',
    'acct.int.sub': 'Verbinde dein CRM und pushe passende Leads automatisch – oder manuell pro Lead.',
    'acct.int.connected': 'Verbunden',
    'acct.int.notConnected': 'Nicht verbunden',
    'acct.int.connect': 'Verbinden',
    'acct.int.manage': 'Verwalten',
    'acct.int.disconnect': 'Trennen',
    'acct.int.autoPush': 'Auto-Push bei „Passt"',
    'acct.int.autoPushSub': 'Leads werden automatisch ins CRM geschoben, sobald du sie bestätigst.',
    'acct.int.apiKey': 'API-Schlüssel',
    'acct.int.apiKeyP': 'Aus den Entwicklereinstellungen deines CRM',
    'acct.int.pipeline': 'Pipeline',
    'acct.int.stage': 'Stage für neue Leads',
    'acct.int.owner': 'Zuständig (Owner)',
    'acct.int.object': 'Objekt-Typ',
    'acct.int.mapping': 'Feld-Mapping',
    'acct.int.mappingSub': 'Leadscraper-Felder → CRM-Felder',
    'acct.int.save': 'Verbindung speichern',
    'acct.int.cancel': 'Abbrechen',
    'acct.int.testing': 'Teste Verbindung …',
    'acct.int.connectSuccess': 'Verbunden mit {name}',
    'acct.int.disconnectSuccess': 'Verbindung zu {name} getrennt',
    'acct.int.pushSuccess': '{n} Lead(s) an {name} gesendet',
    'acct.int.pushToCRM': 'An CRM senden',
    'acct.int.pushedTo': 'In {name}',
    'acct.int.openInCRM': 'In {name} öffnen',
    'acct.int.none': 'Kein CRM verbunden',
    'acct.int.connectFirst': 'Verbinde dein CRM in den Account-Einstellungen, um Leads automatisch zu pushen.',
    'acct.int.sectionLead': 'CRM-Status',
    'acct.int.notPushedYet': 'Noch nicht gepusht',
    'acct.int.pushedAt': 'Gepusht {when}',
    'acct.int.bulkPush': '{n} an CRM senden',
    'nav.activeProfile': 'Aktives Profil',
    'nav.feedbacks': 'Feedbacks',
    'nav.matchRate': 'Trefferquote',
    'nav.switchProfiles': 'Zwischen Profilen wechseln',
    'nav.newProfile': 'Neues Profil anlegen',

    // new profile wizard
    'np.title': 'Neues Profil anlegen',
    'np.stepOf': 'Schritt {n} von 2',
    'np.step1Title': 'Für wen oder was suchst du?',
    'np.step1Sub': 'Gib deinem Profil einen klaren Namen. Leadscraper nutzt diese Beschreibung als Startpunkt, bevor dein Feedback das Muster schärft.',
    'np.name': 'Name des Profils',
    'np.nameP': 'z.B. Faltschachtelhersteller NRW',
    'np.audience': 'Zielgruppe beschreiben',
    'np.audienceP': 'In deinen eigenen Worten — wer passt, wer nicht, was ist entscheidend?',
    'np.audienceHint': 'Je konkreter, desto besser der erste Sortierlauf. Du kannst das später jederzeit anpassen.',
    'np.step2Title': 'Erste Parameter',
    'np.step2Sub': 'Optional — Leadscraper nutzt diese Angaben als Seed. Das Profil lernt dazu, sobald du Leads bewertest.',
    'np.optional': 'Optional',
    'np.industry': 'Branche',
    'np.industryP': 'z.B. Verpackung, Faltschachtel',
    'np.region': 'Region / Bundesland',
    'np.regionP': 'z.B. NRW, DACH, ganz Deutschland',
    'np.companySize': 'Unternehmensgröße',
    'np.companySizeP': 'z.B. 50–250 Mitarbeiter',
    'np.notes': 'Weitere Hinweise',
    'np.notesP': 'Ausschlüsse, Kundentypen, Signalwörter …',
    'np.coldStart': 'Kaltstart — keine Seed-Parameter',
    'np.coldStartDesc': 'Das Profil startet komplett leer. Nach ~20 Feedbacks stehen die ersten Klartext-Aussagen im Cortex.',
    'np.back': 'Zurück',
    'np.skip': 'Überspringen',
    'np.continue': 'Weiter',
    'np.create': 'Profil anlegen',
    'np.abort': 'Abbrechen',
    'np.created': 'Profil angelegt. Cortex ist bereit.',
    'np.summaryTitle': 'Leadscraper startet mit',
    'np.nothingYet': '— nichts Vorgegebenes. Der Cortex wird durch dein Feedback geformt.',

    // dashboard
    // leads table
    'leads.title': 'Deine Leads',
    'leads.sub': '{n} Leads · nach deinen Profilen gruppiert. Ein Klick öffnet den 360°-Blick auf die Firma.',
    'leads.allProfiles': 'Alle Profile',
    'leads.filterBy': 'Nach Profil filtern',
    'leads.tableView': 'Tabelle',
    'leads.cardView': 'Karten',
    'leads.col.company': 'Firma',
    'leads.col.profile': 'Profil',
    'leads.col.sector': 'Branche',
    'leads.col.city': 'Standort',
    'leads.col.size': 'MA',
    'leads.col.founded': 'Gründung',
    'leads.col.match': 'Match',
    'leads.col.status': 'Status',
    'leads.col.decider': 'Entscheider',
    'leads.col.website': 'Website',
    'leads.status.unseen': 'Ungesehen',
    'leads.status.accepted': 'Passt',
    'leads.status.rejected': 'Passt nicht',
    'leads.empty': 'Keine Leads für dieses Profil — starte einen neuen Suchlauf über „Neue Leads finden".',
    'leads.chip.edge': 'Grenzfall · Urteil?',
    'leads.chip.pattern': 'Prägt ein Muster',
    'leads.col.phone': 'Telefon',
    'leads.col.revenue': 'Umsatz',
    'leads.col.lastActivity': 'Letzte Aktivität',
    'leads.col.crm': 'CRM',
    'leads.crm.push': 'Senden',
    'leads.col.actions': 'Aktionen',
    'leads.searchP': 'Firma, Branche, Standort, Entscheider …',
    'leads.count': '{shown} von {total} Leads',
    'leads.export': 'Export',
    'leads.cols.btn': 'Spalten',
    'leads.cols.title': 'Spalten anzeigen',
    'leads.cols.sub': 'Zeige nur, was du brauchst.',
    'leads.cols.fixed': 'Fix',
    'leads.cols.reset': 'Zurücksetzen',
    'leads.daysAgo': 'vor {n} Tagen',
    'leads.footerHint': 'Klick auf eine Zeile zeigt den Kurz-Gedanken. Der Button „Details" öffnet den 360°-Blick.',
    'leads.exp.whyShown': 'Warum Leadscraper dir diesen Lead zeigt',
    'leads.exp.uncertain': 'Leadscraper ist hier {score} — {note}.',
    'leads.exp.memoryRefs': 'Aus deinem Gedächtnis',
    'leads.act.fits': 'Passt',
    'leads.act.fitsNot': 'Passt nicht',
    'leads.act.fitsDone': 'Als Passt gespeichert',
    'leads.act.fitsNotDone': 'Als Passt nicht gespeichert',
    'leads.act.reason': 'Grund wählen',
    'leads.act.cancel': 'Abbrechen',
    'leads.act.details': 'Details',
    'leads.toast.accepted': '„{c}" als Passt gespeichert.',
    'leads.toast.rejected': 'Grund „{r}" gespeichert.',
    'leads.toast.export': 'Export-Funktion kommt bald.',

    // notifications
    'notif.title': 'Hinweise',
    'notif.sub': 'Nudges, damit der Cortex präziser wird.',
    'notif.empty.title': 'Alles im Fluss.',
    'notif.empty.sub': 'Der Cortex lernt.',
    'notif.dismiss': 'Ausblenden',
    'notif.kind.review': 'Review',
    'notif.kind.pattern': 'Muster',
    'notif.kind.edge': 'Grenzfall',
    'notif.review.title': 'Neue Leads warten',
    'notif.review.body': '{n} neue Leads warten auf dein Urteil für {profile}.',
    'notif.review.cta': 'Jetzt reviewen',
    'notif.edge.title': 'Grenzfälle brauchen dein Urteil',
    'notif.edge.body': '{n} unsichere Leads bei {profile} — dein Urteil schärft den Cortex am stärksten.',
    'notif.act.review': 'Zu den Leads',
    'notif.act.pattern': 'Im Cortex bestätigen',
    'notif.act.edge': 'Grenzfälle ansehen',
    'notif.pattern.title': 'Muster erkannt',
    'notif.pattern.badge': 'Cortex-Muster',
    'notif.pattern.needsConfirm': 'Stimmt das?',
    'notif.pattern.yes': 'Ja, stimmt',
    'notif.pattern.no': 'Nein, ablehnen',
    'notif.pattern.stage2': 'Gespeichert',
    'notif.pattern.confirmedLabel': 'Du hast dieses Muster bestätigt.',
    'notif.pattern.rejectedLabel': 'Du hast dieses Muster abgelehnt.',
    'notif.pattern.whyLabel': 'Warum? (optional)',
    'notif.pattern.whyPlaceholder': 'Hilft dem Cortex, die Nuance zu lernen — aber kein Muss.',
    'notif.pattern.back': 'Zurück',
    'notif.pattern.saveAndClose': 'Speichern',

    'dash.roi': 'ROI-Rechner',
    'dash.simulation': 'Simulation',
    'dash.leads': 'Leads',
    'dash.winRate': 'Gewinnquote',
    'dash.avgOrder': 'Ø Bestellvolumen',
    'dash.projectedRevenue': 'Progn. Umsatz',
    'dash.roiShort': 'ROI',
    'dash.newCustomers': 'Neue Kunden',
    'dash.timeline': 'Kennzahlenentwicklung im Zeitverlauf',
    'dash.lastYear': 'Letztes Jahr',
    'dash.totalLeads': 'Gesamtzahl der Leads',
    'dash.leadsGenerated': 'Lead generiert',
    'dash.newCust': 'Neukunden',
    'dash.projRevenue': 'Prognostizierter Umsatz',
    'dash.yourLeads': 'Deine Leads',
    'dash.yourProfiles': 'Deine Profile',
    'dash.yourProfilesSub': 'Alle Profile, die du trainierst. Klick öffnet die Leads dieses Profils.',
    'dash.profiles': 'aktiv',
    'hero.eyebrow': 'Leadscraper lernt dich kennen',
    'hero.title': 'Über alle Profile hinweg wird Leadscraper präziser — mit jedem Feedback.',
    'hero.sub': 'Jedes „Passt / Passt nicht" schärft, welche Leads morgen oben stehen. Das hier sind deine aktuellen Kennzahlen.',
    'hero.stat.feedbacks': 'Feedbacks insgesamt',
    'hero.stat.matchrate': '⌀ Trefferquote',
    'hero.stat.profiles': 'aktive Profile',
    'dash.col.profile': 'Profil',
    'dash.col.query': 'Zielgruppe',
    'dash.col.leads': 'Leads',
    'dash.col.trained': 'Trainiert',
    'dash.col.matchrate': 'Trefferquote',
    'dash.col.lastRun': 'Letzter Lauf',
    'dash.newBadge': 'neu',
    'dash.openProfile': 'Leads öffnen',
    'dash.startRun': 'Suchlauf starten',
    'dash.nextUp': 'Als nächstes',
    'dash.actNow': 'Öffnen',
    'dash.onlyFavorites': 'Nur Favoriten',
    'dash.date': 'Datum',
    'dash.queryId': 'Query ID',
    'dash.status': 'Status',
    'dash.progress': 'Fortschritt',
    'dash.leadsGen': 'Leads generiert',
    'dash.action': 'Aktion',
    'dash.openLeads': 'Leads öffnen →',
    'dash.done': 'Fertig',
    'dash.inProgress': 'In Bearbeitung',

    // find-leads form
    'find.title': 'Neue Leads finden',
    'find.forProfile': 'Für welches Profil?',
    'find.forProfileHint': 'Deine Bewertungen trainieren den Cortex dieses Profils.',
    'find.businessType': 'Unternehmensart',
    'find.businessTypeP': 'z.B. Restaurant, Anwalt, Steuerberater',
    'find.location': 'Standort',
    'find.locationP': 'z.B. Berlin, Hamburg, München',
    'find.contact': 'Ansprechpartner',
    'find.contactP': 'z.B. Inhaber, Vertriebsmitarbeiter, Geschäftsführer',
    'find.amount': 'Anzahl der Leads',
    'find.creditNote': '(1 Lead = 1 Credit)',
    'find.amountHint': 'Der Wert muss zwischen 1 und 1000 liegen',
    'find.extras': 'Zusätzliche Einschränkungen',
    'find.extrasP': 'Definiere deine Zielgruppe noch genauer',
    'find.start': 'Leadscraper starten',
    'find.trainsProfile': 'Trainiert',

    // cortex
    'cortex.title': 'Cortex',
    'cortex.heroEmpty': 'Noch leer. Leadscraper beginnt zu lernen, sobald du die ersten Leads bewertest.',
    'cortex.heroEmptySub': 'Der Cortex ist das Gedächtnis deines Profils — was du bevorzugst, was du ablehnst und wo das System noch unsicher ist.',
    'cortex.step': 'Schritt',
    'cortex.step1': 'Leads öffnen',
    'cortex.step1d': 'Schau dir die ersten Karten in deiner Liste an.',
    'cortex.step2': 'Passt / Passt nicht',
    'cortex.step2d': 'Bewerte jeden Lead. Gib beim Ablehnen kurz einen Grund.',
    'cortex.step3': 'Hier nachlesen',
    'cortex.step3d': 'Nach ~20 Feedbacks stehen hier die ersten Klartext-Aussagen.',
    'cortex.ctaRate': 'Jetzt erste Leads bewerten',
    'cortex.activeSince': 'Profil aktiv seit',
    'cortex.hero': 'Das hat Leadscraper aus deinen {n} Bewertungen gelernt.',
    'cortex.heroSub': 'Jede Aussage kannst du bestätigen, korrigieren oder vergessen lassen. Änderungen greifen ab dem nächsten Sortierlauf.',
    'cortex.matchRate': 'Trefferquote',
    'cortex.sinceStart': 'seit Start',
    'cortex.feedbacks': 'Feedbacks',
    'cortex.fits': 'Passt',
    'cortex.fitsNot': 'Passt nicht',
    'cortex.perWeek': 'pro Woche',
    'cortex.runs.title': 'Suchläufe',
    'cortex.runs.sub': 'Alle Abfragen, die du für dieses Profil gestartet hast.',
    'cortex.runs.count': 'Läufe',
    'cortex.runs.col.date': 'Datum',
    'cortex.runs.col.params': 'Suchparameter',
    'cortex.runs.col.leads': 'Leads',
    'cortex.runs.col.matchrate': 'Trefferquote',
    'cortex.runs.col.action': 'Aktion',
    'cortex.runs.repeat': 'Wiederholen',
    'repeat.title': 'Suchlauf wiederholen',
    'repeat.sub': 'Parameter sind vorbelegt — pass sie an oder starte direkt neu.',
    'repeat.paramsLabel': 'Parameter dieses Laufs',
    'repeat.amountLabel': 'Wie viele Leads möchtest du?',
    'repeat.amountHint': 'Mehr Leads = breitere Abdeckung, weniger Leads = höhere Qualität pro Lead.',
    'repeat.preset': 'Vorschläge',
    'repeat.prediction.title': 'Erwartetes Ergebnis',
    'repeat.prediction.matches': 'erwartete Treffer',
    'repeat.prediction.basedOn': 'basierend auf deiner aktuellen Match-Rate',
    'repeat.prediction.time': 'geschätzte Laufzeit',
    'repeat.prediction.credits': 'Credits',
    'repeat.cancel': 'Abbrechen',
    'repeat.start': 'Suchlauf starten',
    'repeat.toast': 'Suchlauf gestartet — Ergebnisse in wenigen Minuten.',

    // Scheduling
    'sched.section': 'Wiederholung',
    'sched.sectionSub': 'Lass Leadscraper diesen Suchlauf regelmäßig automatisch durchführen.',
    'sched.once': 'Einmalig',
    'sched.onceSub': 'Jetzt einmal ausführen',
    'sched.daily': 'Täglich',
    'sched.dailySub': 'Jeden Tag um dieselbe Uhrzeit',
    'sched.weekly': 'Wöchentlich',
    'sched.weeklySub': 'Jede Woche am gewählten Tag',
    'sched.monthly': 'Monatlich',
    'sched.monthlySub': 'Jeden Monat am gewählten Datum',
    'sched.time': 'Startzeit',
    'sched.weekday': 'Wochentag',
    'sched.dayOfMonth': 'Tag im Monat',
    'sched.autoPush': 'Neue Leads automatisch ins CRM pushen',
    'sched.autoPushSub': 'Sobald Leadscraper einen geplanten Lauf abschließt, werden alle gefundenen Leads automatisch an dein verbundenes CRM gesendet.',
    'sched.autoPushNoCRM': 'Du musst zuerst ein CRM in den Account-Einstellungen verbinden, um Auto-Push zu nutzen.',
    'sched.nextRun': 'Nächster Lauf',
    'sched.toast.created': 'Geplanter Suchlauf angelegt — läuft automatisch weiter.',
    'sched.toast.paused': 'Geplanter Lauf pausiert.',
    'sched.toast.resumed': 'Geplanter Lauf reaktiviert.',
    'sched.toast.deleted': 'Geplanter Lauf gelöscht.',
    // Days
    'sched.day.mon': 'Montag',
    'sched.day.tue': 'Dienstag',
    'sched.day.wed': 'Mittwoch',
    'sched.day.thu': 'Donnerstag',
    'sched.day.fri': 'Freitag',
    'sched.day.sat': 'Samstag',
    'sched.day.sun': 'Sonntag',
    'sched.day.mon.short': 'Mo',
    'sched.day.tue.short': 'Di',
    'sched.day.wed.short': 'Mi',
    'sched.day.thu.short': 'Do',
    'sched.day.fri.short': 'Fr',
    'sched.day.sat.short': 'Sa',
    'sched.day.sun.short': 'So',
    // Scheduled runs section
    'schedRuns.title': 'Geplante Suchläufe',
    'schedRuns.sub': 'Regelmäßige Läufe, die automatisch neue Leads in dieses Profil holen.',
    'schedRuns.count': 'aktiv',
    'schedRuns.col.frequency': 'Frequenz',
    'schedRuns.col.params': 'Parameter',
    'schedRuns.col.leads': 'Leads/Lauf',
    'schedRuns.col.crm': 'CRM-Push',
    'schedRuns.col.nextRun': 'Nächster Lauf',
    'schedRuns.col.action': '',
    'schedRuns.crm.yes': 'Aktiv',
    'schedRuns.crm.no': 'Aus',
    'schedRuns.status.paused': 'Pausiert',
    'schedRuns.pause': 'Pausieren',
    'schedRuns.resume': 'Fortsetzen',
    'schedRuns.delete': 'Löschen',
    'schedRuns.empty.title': 'Noch keine geplanten Läufe',
    'schedRuns.empty.sub': 'Aktiviere „Wiederholung" beim nächsten Suchlauf, um regelmäßig neue Leads zu erhalten.',
    'schedRuns.freq.daily': 'Täglich · {time}',
    'schedRuns.freq.weekly': '{day} · {time}',
    'schedRuns.freq.monthly': '{day}. des Monats · {time}',
    // Dashboard inbox hint
    'inbox.sched.title': '{n} geplante Läufe aktiv',
    'inbox.sched.body': 'Nächster Lauf {rel} — neue Leads landen automatisch {where}.',
    'inbox.sched.cta': 'Ansehen',
    'inbox.sched.inCRM': 'im CRM',
    'inbox.sched.inList': 'in deiner Liste',

    'cortex.roi.title': 'ROI-Schätzung',
    'cortex.roi.sub': 'Was dein aktueller Stand wert sein könnte.',
    'cortex.roi.leads': 'Leads',
    'cortex.roi.winRate': 'Gewinnquote',
    'cortex.roi.avgOrder': 'Ø Bestellvolumen',
    'cortex.roi.expectedFits': 'Erwartete Passt-Leads',
    'cortex.roi.viaRate': 'Ø Trefferquote',
    'cortex.roi.newCustomers': 'Neue Kunden',
    'cortex.roi.winLabel': 'Gewinnquote',
    'cortex.roi.revenue': 'Progn. Umsatz',
    'cortex.roi.revenueSub': 'bei aktuellem Stand',
    'cortex.roi.disclaimer': 'Rechenwert — basiert auf deiner aktuellen Trefferquote. Ist der Cortex reifer, werden die Zahlen realistischer.',
    'cortex.patterns': 'Gelernte Muster',
    'cortex.strong': 'stark',
    'cortex.medium': 'mittel',
    'cortex.weak': 'schwach',
    'cortex.learned': 'Was Leadscraper gelernt hat',
    'cortex.plain': 'In Klartext — so wie du es lesen würdest.',
    'cortex.tierStrong': 'Stark',
    'cortex.tierMedium': 'Mittel',
    'cortex.tierWeak': 'Schwach',
    'cortex.strongNote': 'belastbare Muster',
    'cortex.mediumNote': 'weiter beobachtet',
    'cortex.weakNote': 'Leadscraper ist hier unsicher',
    'cortex.confirmed': 'von dir bestätigt',
    'cortex.uncertain': 'Leadscraper ist hier unsicher',
    'cortex.patternsPending': 'Noch zu bestätigen',
    'cortex.confirm': 'Bestätigen',
    'cortex.correct': 'Korrigieren',
    'cortex.forget': 'Vergessen',
    'cortex.footer': 'Wenn du eine Aussage korrigierst oder vergisst, wird sie ab sofort nicht mehr zum Sortieren deiner Leads verwendet.',

    // detail — transparency
    'det.back': 'Zurück zu den Suchergebnissen',
    'det.fits': 'Passt',
    'det.fitsNot': 'Passt nicht',
    'det.markedFit': '✓ Als Passt markiert',
    'det.markedNotFit': '× Als Passt nicht markiert',
    'det.whyFits': 'Warum passt das zu dir',
    'det.whyFitsSub': 'aus dem, was Leadscraper über dich gelernt hat',
    'det.patterns': 'Gelernte Muster, die hier greifen',
    'det.similar': 'Ähnlich zu Leads, die du vorher akzeptiert hast',
    'det.accepted': 'Angenommen',
    'det.companyProfile': 'Firmenprofil',
    'det.sector': 'Branche',
    'det.city': 'Standort',
    'det.size': 'Mitarbeiter',
    'det.founded': 'Gründung',
    'det.website': 'Website',
    'det.shortProfile': 'Kurzprofil',
    'det.webExcerpts': 'Website-Auszüge',
    'det.sourcesTitle': 'Woher diese Informationen stammen',
    'det.sourcesSub': 'Jedes Feld in diesem Lead kannst du auf eine konkrete öffentliche Quelle zurückführen.',
    'det.sourcesCount': 'Quellen',
    'det.fetched': 'abgerufen',
    'det.delivers': 'Liefert:',
    'det.open': 'Öffnen',
    'det.publicOnly': 'Alle Quellen sind öffentlich zugänglich. Leadscraper speichert niemals Daten, die aus nicht-öffentlichen oder bezahlpflichtigen Verzeichnissen stammen.',
    'det.decider': 'Entscheider',
    'det.contact': 'Kontakt',
    'det.draftMail': 'E-Mail-Entwurf vorbereiten',
    'det.toCRM': 'In CRM übernehmen',
    'det.memoryHint': 'Hinweis für dein Gedächtnis',
    'det.memoryHintText': 'Wenn du diesen Lead akzeptierst oder ablehnst, beeinflusst das ähnliche Leads in „{profile}" — aber nicht deine anderen Profile.',

    // source kinds
    'src.official': 'Amtlich',
    'src.web': 'Firmen-Website',
    'src.directory': 'Verzeichnis',
    'src.news': 'Fachpresse',
    'src.derived': 'Von Leadscraper',

    // --- Profile-Detail (360°) ---
    'pd.screenLabel': 'Profil-Details',
    'pd.activeSince': 'Aktiv seit {date}',
    'pd.ratings': '{n} Bewertungen',
    'pd.runs': '{n} Suchläufe',
    'pd.openLeads': 'Leads öffnen',
    'pd.curve.title': 'Lernkurve',
    'pd.curve.sub': 'Wie sich die Trefferquote mit jeder Bewertung entwickelt hat.',
    'pd.curve.noData': 'Noch zu wenig Daten.',
    'pd.curve.liftLabel': 'Verbesserung seit Start',
    'pd.curve.liftSub': 'absolute Trefferquote',
    'pd.curve.inWeeks': 'in {n} Wochen',
    'pd.curve.start': 'Start',
    'pd.curve.coldSub': 'Cold',
    'pd.curve.milestone50': '50 Bewertungen',
    'pd.curve.milestone50Sub': 'erste Patterns',
    'pd.curve.milestone200': '200 Bewertungen',
    'pd.curve.milestone200Sub': 'Modell stabilisiert',
    'pd.curve.today': 'Heute',
    'pd.curve.todaySub': '{n} Bewertungen',
    'pd.patterns.title': 'Was Leadscraper gelernt hat',
    'pd.patterns.sub': 'Deine Präferenzen — extrahiert aus jeder Passt / Passt-nicht-Bewertung.',
    'pd.patterns.strong': 'Stark — verlässliche Regeln',
    'pd.patterns.medium': 'Mittel — plausibel, wird beobachtet',
    'pd.patterns.weak': 'Schwach — frühe Signale',
    'pd.leads.title': 'Letzte Leads',
    'pd.leads.sub': 'Vorschau — die vollständige Liste findest du im Tab Leads.',
    'pd.leads.viewAll': 'Alle ansehen',
    'pd.side.focus': 'Suchfokus',
    'pd.side.reasons': 'Häufige Ablehnungsgründe',
    'pd.side.recommended': 'Empfohlen',
    'pd.side.next1.t': 'Suchlauf starten',
    'pd.side.next1.d': 'Bei {pct} % Trefferquote lohnen sich 50–100 neue Leads.',
    'pd.side.next2.t': 'Unbestätigte Patterns prüfen',
    'pd.side.next2.d': 'So lernt Leadscraper schneller.',
    'pd.side.next3.t': 'Feedback weiter geben',
    'pd.side.next3.d': 'Je mehr Bewertungen, desto präziser.',
    'pd.side.snapshot': 'Auf einen Blick',
    'pd.side.matchRate': 'Trefferquote',
    'pd.side.leadsTotal': 'Leads total',
    'pd.side.accepted': '({n} passend)',
    'pd.side.patterns': 'Patterns',
    'pd.side.patternsSub': '{strong} stark · {medium} mittel',
    'pd.side.lastRun': 'Letzter Lauf',
    'pd.side.lastRunLeads': '{n} Leads',
    'pd.side.firstRun': 'Erster Lauf',
    'pd.side.feedbacks': 'Bewertungen',
    'pd.side.matchMiss': 'Passend / Nicht',
    'pd.pat.confirm': 'Bestätigen',
    'pd.pat.confirmT': 'Bestätigen — als Regel übernehmen',
    'pd.pat.reject': 'Verwerfen',
    'pd.pat.rejectT': 'Verwerfen — Pattern löschen',
    'pd.pat.weaken': 'Abschwächen',
    'pd.pat.remove': 'Entfernen',
    'pd.pat.actions': 'Aktionen',
    'pd.toast.confirmed': 'Pattern bestätigt — wird ab sofort als verlässliche Regel angewendet',
    'pd.toast.rejected': 'Pattern verworfen',
    'pd.toast.weakened': 'Pattern abgeschwächt — wird neu beobachtet',
    'pd.toast.removed': 'Pattern entfernt',

    // --- Search results screen ---
    'res.new': 'Neu',
    'res.uncertainty': 'Leadscraper ist hier {score} — {text}.',
    'res.fromMem': 'aus deinem Gedächtnis: „{text}"',
    'res.fit': 'Passt',
    'res.notFit': 'Passt nicht',
    'res.openDetails': 'Details öffnen →',
    'res.pickReason': 'Grund wählen →',
    'res.acceptedNote': 'Leadscraper lernt aus dieser Annahme.',
    'res.rejectedNote': 'Grund gespeichert. Das schärft dein Gedächtnis.',
    'res.whyNotTitle': 'Warum passt dieser Lead nicht?',
    'res.cancel': 'Abbrechen',
    'res.reasonHint': 'Ein Click reicht — dein Grund schärft, was du morgen siehst.',
    'res.toast.accepted': '„{company}" als Passt gespeichert. Leadscraper schärft dein Profil.',
    'res.toast.rejected': 'Grund „{reason}" gespeichert. Ähnliche Leads werden seltener.',
    'res.breadcrumb': 'Suchergebnisse · {profile}',
    'res.title': 'Leads — {profile}',
    'res.summary': '{count} Leads aus 412 gesichtet. Jeder kommt mit einem Satz, warum er zu dir passt — dein „Passt / Passt nicht" schärft, was du morgen siehst.',
    'res.density.comfortable': 'Komfortabel',
    'res.density.compact': 'Kompakt',
    'res.filter': 'Filter',
    'res.fb.status': 'Feedback-Status',
    'res.fb.all': 'Alle',
    'res.fb.new': 'Neu für dich',
    'res.sector': 'Branche',
    'res.employees': 'Mitarbeiter',
    'res.location': 'Standort',
    'res.learning.title': 'Was Leadscraper gerade lernt',
    'res.learning.body': 'Neues Signal über die letzten zwei Wochen: du akzeptierst Betriebe mit eigener Druck- oder Stanztechnik öfter als reine Konfektionierer.',
    'res.footer': 'Leadscraper hat weitere 406 Einträge gesichtet. Die hier gezeigten {count} sind diejenigen, die am besten zu deinem bisherigen Feedback passen.',

    'dash.close': 'Schließen',
    'dash.months': 'Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez,Jan,Feb,Mär,Apr',

    // --- Onboarding gate ---
    'og.later': 'Später entscheiden →',
    'og.ready': 'Dein Konto ist bereit',
    'og.welcome': 'Willkommen, Janik.',
    'og.sub1': 'Wähle dein Abo, um Leadscraper',
    'og.sub1b': '3 Tage kostenlos zu testen',
    'og.sub2': 'Keine Zahlung jetzt — du kannst während der Testphase jederzeit kündigen.',
    'og.moneyBack': '14-Tage-Geld-zurück',
    'og.dsgvo': 'DSGVO-konform · Server DE',
    'og.cancelAny': 'Jederzeit kündbar',
    'og.cta': '3 Tage kostenlos testen — {plan}',
    'og.ctaSub': 'Keine Zahlung in den ersten 3 Tagen · Danach {price},00 € / Monat · {leads} Test-Leads inklusive',
    'og.recommended': 'Empfohlen',
    'og.plan': 'Abo',
    'og.perMonth': '€ / Monat',
    'og.leadsIncl': '{n} Leads pro Monat inklusive',
    'og.trial': '3 Tage kostenlos testen',
    'og.trialIncl': 'inkl.',
    'og.trialLeadsN': '{n} Test-Leads',

    // --- Memory editor modal + extras ---
    'mem.editKicker': 'Gelernte Annahme korrigieren',
    'mem.editTitle': 'Wie soll Leadscraper das lernen?',
    'mem.editHint': 'Leadscraper nutzt diese Aussage ab dem nächsten Sortierlauf.',
    'mem.cancel': 'Abbrechen',
    'mem.save': 'Annahme speichern',
    'mem.toast.confirmed': 'Annahme bestätigt.',
    'mem.toast.forgotten': 'Annahme vergessen.',
    'mem.toast.corrected': 'Korrektur gespeichert.',
    'mem.screenLabelEmpty': 'Cortex · leer',
    'mem.screenLabel': 'Cortex',
    'mem.today': 'Heute',
    'mem.param.sector': 'Branche',
    'mem.param.location': 'Standort',
    'mem.param.contact': 'Ansprechpartner',
    'mem.param.extras': 'Extras',
    'mem.param.leads': 'Leads',
    'mem.profile': 'Profil',

    // --- Notifications / patterns ---
    'notif.pattern.confirmedLabel': 'Pattern bestätigt.',
    'notif.pattern.rejectedLabel': 'Pattern abgelehnt.',


    // --- Pricing ---
    'price.heroTrial': 'Dein unfairer Wettbewerbsvorteil startet hier.',
    'price.heroSub': 'Mehr Leads — genau dann, wenn du sie brauchst.',
    'price.subTrialDesc': '3 Tage kostenlos testen — mit echten Leads, deinen eigenen Profilen, deinem eigenen Cortex. Unbrauchbare Leads? Bekommst du zurück, ohne Rückfragen.',
    'price.subOneoffDesc': 'Zusätzliche Leads als Einmalpaket — keine Laufzeit, keine Bindung. Credits laufen nicht ab.',
    'price.tab.sub': 'Abonnements',
    'price.tab.oneoff': 'Einmalpakete',
    'price.tab.afterSub': '(nach Abo)',
    'price.tab.lockNote': 'Verfügbar nach Abo-Start',
    'price.trust.refund.t': 'Unbrauchbare Leads? Zurück.',
    'price.trust.refund.s': 'Wenn ein Lead nicht passt, bekommst du den Credit sofort zurück.',
    'price.trust.gdpr.t': 'DSGVO-konform',
    'price.trust.gdpr.s': 'Alle Daten EU-gehostet, verschlüsselt, keine Drittweitergabe.',
    'price.trust.cancel.t': 'Jederzeit kündbar',
    'price.trust.cancel.s': 'Monatlich kündbar, keine versteckten Gebühren, keine Mindestlaufzeit.',
    'price.selected': 'Gewählt:',
    'price.trial3days': '3 Tage kostenlos',
    'price.testLeads': 'Test-Leads',
    'price.then': 'danach',
    'price.perMonth': '/Monat',
    'price.perMonthLong': '/ Monat',
    'price.leads': 'Leads',
    'price.oneTime': 'einmalig',
    'price.perLead': '€ / Lead',
    'price.ctaStartTrial': '3 Tage kostenlos starten',
    'price.ctaSwitchPlan': 'Abo wechseln',
    'price.ctaTopUp': 'Jetzt aufladen',
    'price.badge.recommended': 'Empfohlen',
    'price.badge.popular': 'Beliebt',
    'price.badge.yourPlan': 'Dein Plan',
    'price.monthlyCancelable': 'monatlich kündbar',
    'price.afterThen': 'Danach {price} / Monat · jederzeit kündbar',
    'price.trialIncl': 'inkl.',
    // Plan taglines
    'price.plan.basic.tag': 'Für den Einstieg mit einem Profil',
    'price.plan.starter.tag': 'Perfekt für den Start',
    'price.plan.growth.tag': 'Für skalierende Vertriebsteams',
    'price.plan.basic.f1': '100 qualifizierte Leads pro Monat',
    'price.plan.basic.f2': '1 aktives Profil',
    'price.plan.basic.f3': 'Cortex-KI mit kontinuierlichem Lernen',
    'price.plan.basic.f4': 'CRM-Integrationen (HubSpot, Pipedrive, Salesforce …)',
    'price.plan.basic.f5': 'E-Mail-Support',
    'price.plan.starter.f1': '250 qualifizierte Leads pro Monat',
    'price.plan.starter.f2': '3 aktive Profile',
    'price.plan.starter.f3': 'Cortex-KI mit priorisiertem Lernen',
    'price.plan.starter.f4': 'Alle CRM-Integrationen',
    'price.plan.starter.f5': 'Priorisierter Support',
    'price.plan.starter.f6': 'Export in CSV, XLSX, JSON',
    'price.plan.growth.f1': '500 qualifizierte Leads pro Monat',
    'price.plan.growth.f2': 'Unbegrenzte Profile',
    'price.plan.growth.f3': 'Cortex-KI mit Team-Memory',
    'price.plan.growth.f4': 'Alle CRM-Integrationen + Webhooks',
    'price.plan.growth.f5': 'Dedizierter Account Manager',
    'price.plan.growth.f6': 'API-Zugang',
    'price.pack.1000.tag': 'Perfekt für den Einstieg',
    'price.pack.5000.tag': 'Für erste skalierte Kampagnen',
    'price.pack.10000.tag': 'Für kontinuierliche Leadgenerierung',
    'price.pack.50000.tag': 'Für hohe Volumen und Teams',
    // Trial banner
    'trial.phase': 'Testphase',
    'trial.day1': 'Noch 1 Tag',
    'trial.daysN': 'Noch {n} Tage',
    'trial.freeTest': 'kostenlos testen.',
    'trial.afterNote': 'Danach läuft dein {plan}-Abo automatisch weiter — jederzeit kündbar.',
    'trial.leadsLeft': '{left} / {total} Test-Leads übrig',
    'trial.secureSub': 'Abo sichern',

    // --- Cortex AI chat ---
    'ai.onlinePrefix': 'Online · kennt deine {n} Profile',
    'ai.collapse': 'Einklappen',
    'ai.intro': 'Ich überwache deine Profile rund um die Uhr und helfe dir, schärfere Suchläufe und sichere Lernsignale zu formulieren.',
    'ai.cortex': 'Cortex',
    'ai.now': 'jetzt',
    'ai.greeting': 'Hey 👋 Ich bin Cortex. Ich sehe dein aktives Profil "{profile}" und alle Muster, die das System gelernt hat. Worum geht’s?',
    'ai.thinkingAbout': 'Woran ich gerade denke',
    'ai.quickStart': 'Schnellstart',
    'ai.openChat': 'Chat öffnen',
    'ai.moreN': '+{n} weitere',
    'ai.dismiss': 'Verbergen',
    'ai.inputP': 'Frag Cortex etwas …',
    'ai.send': 'Senden',
    'ai.footer': 'Cortex kennt nur deine Profile und Feedbacks — keine externen Daten.',
    'ai.errorReply': 'Ich komme gerade nicht an meine Daten ran. Versuch es gleich noch einmal — oder formulier die Frage kürzer.',
    // Insights
    'ai.ins.pattern.title': 'Neues Muster in "{profile}"',
    'ai.ins.pattern.cta': 'Muster prüfen',
    'ai.ins.tune.title': '"{profile}" ist noch im Training',
    'ai.ins.tune.body': 'Match-Rate bei {rate} %. Ich kann dir helfen, den nächsten Suchlauf gezielter zu formulieren.',
    'ai.ins.tune.cta': 'Suchlauf schärfen',
    'ai.ins.edge.title': 'Grenzfall: {company}',
    'ai.ins.edge.fallback': 'Leadscraper ist hier unsicher — dein Urteil hilft, das Muster zu schärfen.',
    'ai.ins.edge.cta': 'Lead anschauen',
    // Starter prompts (labels + prompts)
    'ai.sp1.label': 'Wo steht mein aktives Profil?',
    'ai.sp1.prompt': 'Fass mir in 3 Sätzen zusammen, wie gut Leadscraper mein aktives Profil bereits verstanden hat — was ist gelernt, was nicht?',
    'ai.sp2.label': 'Welche Muster sollte ich bestätigen?',
    'ai.sp2.prompt': 'Welche gelernten Muster sollte ich als nächstes bestätigen oder ablehnen, damit das System schneller lernt?',
    'ai.sp3.label': 'Suchlauf vorschlagen',
    'ai.sp3.prompt': 'Schlag mir basierend auf meinem aktiven Profil einen präzisen nächsten Suchlauf vor — mit Branche, Standort, Größe und Extras.',
    'ai.sp4.label': 'Wo verliere ich Qualität?',
    'ai.sp4.prompt': 'Wo in meinen Profilen siehst du Potenzial für höhere Match-Raten? Was sollte ich anpassen?',
    'ai.seedRefine': 'Schlag mir für mein Profil "{profile}" einen verfeinerten Suchlauf vor.',
    // System prompt language hint (used inside context)
    'ai.langHint': 'Antworte auf Deutsch. Maximal 3-4 kurze Sätze pro Antwort, außer bei konkreten Anleitungen.',
  },

  en: {
    'nav.dashboard': 'Dashboard',
    'nav.leads': 'Leads',
    'nav.cortex': 'My profile',
    'nav.credits': 'Available credits',
    'nav.buyLeads': 'Buy leads',
    // Account
    'acct.title': 'Profile',
    'acct.sub': 'Manage profile settings, change payment methods and download invoices for past transactions.',
    'acct.tab.profile': 'Profile',
    'acct.tab.billing': 'Billing',
    'acct.prof.title': 'Profile Information',
    'acct.prof.save': 'Save',
    'acct.prof.upload': 'Upload image',
    'acct.prof.uploadHint': 'JPG, PNG or WebP. Max. 1 MB.',
    'acct.prof.first': 'First name',
    'acct.prof.last': 'Last name',
    'acct.prof.email': 'Email address',
    'acct.prof.lang': 'Language',
    'acct.sec.title': 'Security settings',
    'acct.sec.pw': 'Change password',
    'acct.sec.pwSub': 'Change your account password here',
    'acct.sec.change': 'Change',
    'acct.sec.twofa': 'Two-factor authentication',
    'acct.sec.twofaSub': 'Authentication is disabled. Enable it to add an extra layer of security to your account.',
    'acct.sec.active': 'Active',
    'acct.sec.inactive': 'Inactive',
    'acct.sec.twofaActivate': 'Enable 2FA',
    'acct.sec.twofaDeactivate': 'Disable 2FA',
    'acct.bill.methods': 'Payment methods',
    'acct.bill.manageCards': 'Manage cards',
    'acct.bill.noMethods': 'No payment methods found',
    'acct.bill.addMethod': 'Add payment method',
    'acct.bill.history': 'Transaction history',
    'acct.bill.filter.all': 'Ever',
    'acct.bill.filter.30': 'Last 30 days',
    'acct.bill.filter.90': 'Last 90 days',
    'acct.bill.col.date': 'Date',
    'acct.bill.col.desc': 'Description',
    'acct.bill.col.amount': 'Amount',
    'acct.bill.col.credits': 'Credits',
    'acct.bill.col.status': 'Status',
    'acct.bill.col.invoice': 'Invoice',
    'acct.bill.paid': 'Paid',
    'acct.bill.empty': 'No transactions found',
    'acct.bill.emptySub': 'Your payment history will appear here after your first purchase.',
    'acct.plan.your': 'Your plan',
    'acct.plan.trial': 'Trial',
    'acct.plan.active': 'Active',
    'acct.plan.perMonth': '/ month',
    'acct.plan.afterTrial': 'After trial',
    'acct.plan.nextBill': 'Next billing on {date} · {leads} leads/month',
    'acct.plan.daysLeft': '{n} days left to try for free — then your subscription starts automatically.',
    'acct.plan.dayLeft': '1 day left to try for free — then your subscription starts automatically.',
    'acct.plan.endsToday': 'Trial ends today — your subscription starts automatically.',
    'acct.plan.switch': 'Switch plan',
    'acct.plan.secureSub': 'Subscribe',
    'acct.plan.trialUsage': 'Trial leads this phase',
    'acct.plan.monthUsage': 'Leads this month',
    'acct.plan.leftOf': 'of {total} left',
    'acct.plan.addOneOff': 'Add one-off pack',
    'acct.plan.usedThisMonth': '{used} / {total} used this month · resets {date}',
    'acct.bill.methodAutoAdded': 'Added automatically when your trial starts.',
    'acct.bill.cardEnds': 'Visa ending •• 4242',
    'acct.bill.cardExpHolder': 'Exp. 08/2028 · Janik Deimann',
    'acct.bill.primary': 'Primary',
    'acct.bill.descSub': '{plan} subscription · {month} 2025',
    'acct.menu.settings': 'Account settings',
    'acct.menu.logout': 'Sign out',
    // Integrations
    'acct.tab.integrations': 'Integrations',
    'acct.int.title': 'CRM integrations',
    'acct.int.sub': 'Connect your CRM and push qualified leads automatically — or one at a time.',
    'acct.int.connected': 'Connected',
    'acct.int.notConnected': 'Not connected',
    'acct.int.connect': 'Connect',
    'acct.int.manage': 'Manage',
    'acct.int.disconnect': 'Disconnect',
    'acct.int.autoPush': 'Auto-push on "Fits"',
    'acct.int.autoPushSub': 'Leads are pushed to your CRM as soon as you confirm them.',
    'acct.int.apiKey': 'API key',
    'acct.int.apiKeyP': 'From your CRM developer settings',
    'acct.int.pipeline': 'Pipeline',
    'acct.int.stage': 'Stage for new leads',
    'acct.int.owner': 'Owner',
    'acct.int.object': 'Object type',
    'acct.int.mapping': 'Field mapping',
    'acct.int.mappingSub': 'Leadscraper fields → CRM fields',
    'acct.int.save': 'Save connection',
    'acct.int.cancel': 'Cancel',
    'acct.int.testing': 'Testing connection …',
    'acct.int.connectSuccess': 'Connected to {name}',
    'acct.int.disconnectSuccess': 'Disconnected from {name}',
    'acct.int.pushSuccess': 'Sent {n} lead(s) to {name}',
    'acct.int.pushToCRM': 'Send to CRM',
    'acct.int.pushedTo': 'In {name}',
    'acct.int.openInCRM': 'Open in {name}',
    'acct.int.none': 'No CRM connected',
    'acct.int.connectFirst': 'Connect your CRM in Account settings to push leads automatically.',
    'acct.int.sectionLead': 'CRM status',
    'acct.int.notPushedYet': 'Not pushed yet',
    'acct.int.pushedAt': 'Pushed {when}',
    'acct.int.bulkPush': 'Send {n} to CRM',
    'nav.activeProfile': 'Active profile',
    'nav.feedbacks': 'ratings',
    'nav.matchRate': 'match rate',
    'nav.switchProfiles': 'Switch between profiles',
    'nav.newProfile': 'Create new profile',

    // new profile wizard
    'np.title': 'Create new profile',
    'np.stepOf': 'Step {n} of 2',
    'np.step1Title': 'Who or what are you looking for?',
    'np.step1Sub': 'Give the profile a clear name. Leadscraper uses this description as a starting point before your feedback sharpens the pattern.',
    'np.name': 'Profile name',
    'np.nameP': 'e.g. Folding carton makers NRW',
    'np.audience': 'Describe your audience',
    'np.audienceP': 'In your own words — who fits, who doesn’t, what matters?',
    'np.audienceHint': 'The more specific, the better the first ranking pass. You can refine anytime.',
    'np.step2Title': 'Seed parameters',
    'np.step2Sub': 'Optional — Leadscraper uses these as a seed. The profile learns as you rate leads.',
    'np.optional': 'Optional',
    'np.industry': 'Industry',
    'np.industryP': 'e.g. Packaging, folding cartons',
    'np.region': 'Region / state',
    'np.regionP': 'e.g. NRW, DACH, all of Germany',
    'np.companySize': 'Company size',
    'np.companySizeP': 'e.g. 50–250 employees',
    'np.notes': 'Additional notes',
    'np.notesP': 'Exclusions, customer types, signal words …',
    'np.coldStart': 'Cold start — no seed parameters',
    'np.coldStartDesc': 'The profile starts completely empty. After ~20 ratings the first plain-text statements appear in Cortex.',
    'np.back': 'Back',
    'np.skip': 'Skip',
    'np.continue': 'Continue',
    'np.create': 'Create profile',
    'np.abort': 'Cancel',
    'np.created': 'Profile created. Cortex is ready.',
    'np.summaryTitle': 'Leadscraper starts with',
    'np.nothingYet': '— nothing pre-defined. The Cortex will be shaped entirely by your feedback.',

    'leads.title': 'Your leads',
    'leads.sub': '{n} leads · grouped by your profiles. Click opens the 360° view of the company.',
    'leads.allProfiles': 'All profiles',
    'leads.filterBy': 'Filter by profile',
    'leads.tableView': 'Table',
    'leads.cardView': 'Cards',
    'leads.col.company': 'Company',
    'leads.col.profile': 'Profile',
    'leads.col.sector': 'Industry',
    'leads.col.city': 'Location',
    'leads.col.size': 'Size',
    'leads.col.founded': 'Founded',
    'leads.col.match': 'Match',
    'leads.col.status': 'Status',
    'leads.col.decider': 'Decision maker',
    'leads.col.website': 'Website',
    'leads.status.unseen': 'Unseen',
    'leads.status.accepted': 'Fit',
    'leads.status.rejected': 'Not a fit',
    'leads.empty': 'No leads for this profile — start a new run via “Find new leads”.',
    'leads.chip.edge': 'Edge case · verdict?',
    'leads.chip.pattern': 'Shapes a pattern',
    'leads.col.phone': 'Phone',
    'leads.col.revenue': 'Revenue',
    'leads.col.lastActivity': 'Last activity',
    'leads.col.crm': 'CRM',
    'leads.crm.push': 'Push',
    'leads.col.actions': 'Actions',
    'leads.searchP': 'Company, sector, city, decision-maker …',
    'leads.count': '{shown} of {total} leads',
    'leads.export': 'Export',
    'leads.cols.btn': 'Columns',
    'leads.cols.title': 'Show columns',
    'leads.cols.sub': 'Show only what you need.',
    'leads.cols.fixed': 'Fixed',
    'leads.cols.reset': 'Reset to default',
    'leads.daysAgo': '{n} days ago',
    'leads.footerHint': 'Click a row to reveal the short reasoning. The “Details” button opens the 360° view.',
    'leads.exp.whyShown': 'Why Leadscraper shows you this lead',
    'leads.exp.uncertain': 'Leadscraper is {score} here — {note}.',
    'leads.exp.memoryRefs': 'From your memory',
    'leads.act.fits': 'Fits',
    'leads.act.fitsNot': 'Doesn\u2019t fit',
    'leads.act.fitsDone': 'Saved as Fits',
    'leads.act.fitsNotDone': 'Saved as doesn\u2019t fit',
    'leads.act.reason': 'Pick a reason',
    'leads.act.cancel': 'Cancel',
    'leads.act.details': 'Details',
    'leads.toast.accepted': '\u201E{c}\u201D saved as Fits.',
    'leads.toast.rejected': 'Reason \u201E{r}\u201D saved.',
    'leads.toast.export': 'Export is coming soon.',

    // notifications
    'notif.title': 'Heads-up',
    'notif.sub': 'Nudges that make the Cortex sharper.',
    'notif.empty.title': 'All flowing.',
    'notif.empty.sub': 'The Cortex is learning.',
    'notif.dismiss': 'Dismiss',
    'notif.kind.review': 'Review',
    'notif.kind.pattern': 'Pattern',
    'notif.kind.edge': 'Edge case',
    'notif.review.title': 'New leads waiting',
    'notif.review.body': '{n} new leads waiting for your verdict on {profile}.',
    'notif.review.cta': 'Review now',
    'notif.edge.title': 'Edge cases need your verdict',
    'notif.edge.body': '{n} uncertain leads in {profile} — your verdict teaches the Cortex the most.',
    'notif.act.review': 'Open leads',
    'notif.act.pattern': 'Confirm in Cortex',
    'notif.act.edge': 'Look at edge cases',
    'notif.pattern.title': 'Pattern detected',
    'notif.pattern.badge': 'Cortex pattern',
    'notif.pattern.needsConfirm': 'Is this right?',
    'notif.pattern.yes': 'Yes, it is',
    'notif.pattern.no': 'No, reject',
    'notif.pattern.stage2': 'Saved',
    'notif.pattern.confirmedLabel': 'You confirmed this pattern.',
    'notif.pattern.rejectedLabel': 'You rejected this pattern.',
    'notif.pattern.whyLabel': 'Why? (optional)',
    'notif.pattern.whyPlaceholder': 'Helps the Cortex learn the nuance — but not required.',
    'notif.pattern.back': 'Back',
    'notif.pattern.saveAndClose': 'Save',

    'dash.roi': 'ROI calculator',
    'dash.simulation': 'Simulation',
    'dash.leads': 'Leads',
    'dash.winRate': 'Win rate',
    'dash.avgOrder': 'Avg. order size',
    'dash.projectedRevenue': 'Projected revenue',
    'dash.roiShort': 'ROI',
    'dash.newCustomers': 'New customers',
    'dash.timeline': 'Metrics over time',
    'dash.lastYear': 'Last year',
    'dash.totalLeads': 'Total leads',
    'dash.leadsGenerated': 'Leads generated',
    'dash.newCust': 'New customers',
    'dash.projRevenue': 'Projected revenue',
    'dash.yourLeads': 'Your leads',
    'dash.yourProfiles': 'Your profiles',
    'dash.yourProfilesSub': 'All profiles you\u2019re training. Click opens the leads for that profile.',
    'dash.profiles': 'active',
    'hero.eyebrow': 'Leadscraper is getting to know you',
    'hero.title': 'Across all your profiles, Leadscraper is getting sharper — with every piece of feedback.',
    'hero.sub': 'Each “Fits / Doesn\u2019t fit” shapes which leads show up tomorrow. Here are your current numbers.',
    'hero.stat.feedbacks': 'Feedbacks total',
    'hero.stat.matchrate': '⌀ match rate',
    'hero.stat.profiles': 'active profiles',
    'dash.col.profile': 'Profile',
    'dash.col.query': 'Audience',
    'dash.col.leads': 'Leads',
    'dash.col.trained': 'Trained',
    'dash.col.matchrate': 'Match rate',
    'dash.col.lastRun': 'Last run',
    'dash.newBadge': 'new',
    'dash.openProfile': 'Open leads',
    'dash.startRun': 'Start new run',
    'dash.nextUp': 'Up next',
    'dash.actNow': 'Open',
    'dash.onlyFavorites': 'Favorites only',
    'dash.date': 'Date',
    'dash.queryId': 'Query ID',
    'dash.status': 'Status',
    'dash.progress': 'Progress',
    'dash.leadsGen': 'Leads',
    'dash.action': 'Action',
    'dash.openLeads': 'Open leads →',
    'dash.done': 'Done',
    'dash.inProgress': 'In progress',

    'find.title': 'Find new leads',
    'find.forProfile': 'For which profile?',
    'find.forProfileHint': 'Your ratings train this profile’s Cortex.',
    'find.businessType': 'Industry',
    'find.businessTypeP': 'e.g. Restaurant, attorney, tax advisor',
    'find.location': 'Location',
    'find.locationP': 'e.g. Berlin, Hamburg, Munich',
    'find.contact': 'Contact',
    'find.contactP': 'e.g. Owner, sales rep, managing director',
    'find.amount': 'Number of leads',
    'find.creditNote': '(1 lead = 1 credit)',
    'find.amountHint': 'Must be between 1 and 1000',
    'find.extras': 'Additional constraints',
    'find.extrasP': 'Describe your target audience more precisely',
    'find.start': 'Start Leadscraper',
    'find.trainsProfile': 'Trains',

    'cortex.title': 'My profile',
    'cortex.heroEmpty': 'Empty for now. Leadscraper starts learning as soon as you rate the first leads.',
    'cortex.heroEmptySub': 'The Cortex is your profile’s memory — what you prefer, what you reject, and where the system is still unsure.',
    'cortex.step': 'Step',
    'cortex.step1': 'Open leads',
    'cortex.step1d': 'Browse the first cards in your list.',
    'cortex.step2': 'Fit / Doesn’t fit',
    'cortex.step2d': 'Rate each lead. When rejecting, pick a short reason.',
    'cortex.step3': 'Read it here',
    'cortex.step3d': 'After ~20 ratings, the first plain-text insights appear here.',
    'cortex.ctaRate': 'Rate your first leads',
    'cortex.activeSince': 'Profile active since',
    'cortex.hero': 'This is what Leadscraper learned from your {n} ratings.',
    'cortex.heroSub': 'You can confirm, correct, or forget any statement. Changes take effect on the next ranking pass.',
    'cortex.matchRate': 'Match rate',
    'cortex.sinceStart': 'since start',
    'cortex.feedbacks': 'Ratings',
    'cortex.fits': 'Fit',
    'cortex.fitsNot': 'Not a fit',
    'cortex.perWeek': 'per week',
    'cortex.runs.title': 'Search runs',
    'cortex.runs.sub': 'All queries you have started for this profile.',
    'cortex.runs.count': 'runs',
    'cortex.runs.col.date': 'Date',
    'cortex.runs.col.params': 'Search parameters',
    'cortex.runs.col.leads': 'Leads',
    'cortex.runs.col.matchrate': 'Match rate',
    'cortex.runs.col.action': 'Action',
    'cortex.runs.repeat': 'Repeat',
    'repeat.title': 'Repeat search run',
    'repeat.sub': 'Parameters are pre-filled — tweak them or start right away.',
    'repeat.paramsLabel': 'Parameters from this run',
    'repeat.amountLabel': 'How many leads do you want?',
    'repeat.amountHint': 'More leads = broader coverage, fewer leads = higher quality per lead.',
    'repeat.preset': 'Presets',
    'repeat.prediction.title': 'Expected outcome',
    'repeat.prediction.matches': 'expected matches',
    'repeat.prediction.basedOn': 'based on your current match rate',
    'repeat.prediction.time': 'estimated runtime',
    'repeat.prediction.credits': 'credits',
    'repeat.cancel': 'Cancel',
    'repeat.start': 'Start run',
    'repeat.toast': 'Run started — results in a few minutes.',

    // Scheduling
    'sched.section': 'Recurrence',
    'sched.sectionSub': 'Let Leadscraper run this search automatically on a schedule.',
    'sched.once': 'One-time',
    'sched.onceSub': 'Run once now',
    'sched.daily': 'Daily',
    'sched.dailySub': 'Every day at the same time',
    'sched.weekly': 'Weekly',
    'sched.weeklySub': 'Every week on the chosen day',
    'sched.monthly': 'Monthly',
    'sched.monthlySub': 'Every month on the chosen date',
    'sched.time': 'Start time',
    'sched.weekday': 'Weekday',
    'sched.dayOfMonth': 'Day of month',
    'sched.autoPush': 'Automatically push new leads to CRM',
    'sched.autoPushSub': 'Whenever Leadscraper finishes a scheduled run, all found leads will be automatically sent to your connected CRM.',
    'sched.autoPushNoCRM': 'Connect a CRM in your account settings first to enable auto-push.',
    'sched.nextRun': 'Next run',
    'sched.toast.created': 'Scheduled run created — runs automatically from now on.',
    'sched.toast.paused': 'Scheduled run paused.',
    'sched.toast.resumed': 'Scheduled run resumed.',
    'sched.toast.deleted': 'Scheduled run deleted.',
    // Days
    'sched.day.mon': 'Monday',
    'sched.day.tue': 'Tuesday',
    'sched.day.wed': 'Wednesday',
    'sched.day.thu': 'Thursday',
    'sched.day.fri': 'Friday',
    'sched.day.sat': 'Saturday',
    'sched.day.sun': 'Sunday',
    'sched.day.mon.short': 'Mon',
    'sched.day.tue.short': 'Tue',
    'sched.day.wed.short': 'Wed',
    'sched.day.thu.short': 'Thu',
    'sched.day.fri.short': 'Fri',
    'sched.day.sat.short': 'Sat',
    'sched.day.sun.short': 'Sun',
    // Scheduled runs section
    'schedRuns.title': 'Scheduled searches',
    'schedRuns.sub': 'Recurring runs that automatically fetch new leads for this profile.',
    'schedRuns.count': 'active',
    'schedRuns.col.frequency': 'Frequency',
    'schedRuns.col.params': 'Parameters',
    'schedRuns.col.leads': 'Leads/run',
    'schedRuns.col.crm': 'CRM push',
    'schedRuns.col.nextRun': 'Next run',
    'schedRuns.col.action': '',
    'schedRuns.crm.yes': 'On',
    'schedRuns.crm.no': 'Off',
    'schedRuns.status.paused': 'Paused',
    'schedRuns.pause': 'Pause',
    'schedRuns.resume': 'Resume',
    'schedRuns.delete': 'Delete',
    'schedRuns.empty.title': 'No scheduled runs yet',
    'schedRuns.empty.sub': 'Enable "Recurrence" on your next search to fetch leads on a regular schedule.',
    'schedRuns.freq.daily': 'Daily · {time}',
    'schedRuns.freq.weekly': '{day} · {time}',
    'schedRuns.freq.monthly': '{day} of each month · {time}',
    // Dashboard inbox hint
    'inbox.sched.title': '{n} scheduled runs active',
    'inbox.sched.body': 'Next run {rel} — new leads will land automatically {where}.',
    'inbox.sched.cta': 'View',
    'inbox.sched.inCRM': 'in your CRM',
    'inbox.sched.inList': 'in your list',

    'cortex.roi.title': 'ROI estimate',
    'cortex.roi.sub': 'What your current state could be worth.',
    'cortex.roi.leads': 'Leads',
    'cortex.roi.winRate': 'Win rate',
    'cortex.roi.avgOrder': 'Avg. order value',
    'cortex.roi.expectedFits': 'Expected fit leads',
    'cortex.roi.viaRate': 'Ø match rate',
    'cortex.roi.newCustomers': 'New customers',
    'cortex.roi.winLabel': 'win rate',
    'cortex.roi.revenue': 'Projected revenue',
    'cortex.roi.revenueSub': 'at current state',
    'cortex.roi.disclaimer': 'Estimate — based on your current match rate. The more the cortex learns, the more realistic the numbers.',
    'cortex.patterns': 'Learned patterns',
    'cortex.strong': 'strong',
    'cortex.medium': 'medium',
    'cortex.weak': 'weak',
    'cortex.learned': 'What Leadscraper learned',
    'cortex.plain': 'In plain words — the way you’d read it.',
    'cortex.tierStrong': 'Strong',
    'cortex.tierMedium': 'Medium',
    'cortex.tierWeak': 'Weak',
    'cortex.strongNote': 'reliable patterns',
    'cortex.mediumNote': 'still observing',
    'cortex.weakNote': 'Leadscraper is unsure here',
    'cortex.confirmed': 'confirmed by you',
    'cortex.uncertain': 'Leadscraper is unsure here',
    'cortex.patternsPending': 'Awaiting your confirmation',
    'cortex.confirm': 'Confirm',
    'cortex.correct': 'Correct',
    'cortex.forget': 'Forget',
    'cortex.footer': 'If you correct or forget a statement, it will no longer be used to rank your leads.',

    'det.back': 'Back to results',
    'det.fits': 'Fits',
    'det.fitsNot': 'Doesn’t fit',
    'det.markedFit': '✓ Marked as a fit',
    'det.markedNotFit': '× Marked as not a fit',
    'det.whyFits': 'Why this fits you',
    'det.whyFitsSub': 'based on what Leadscraper has learned about you',
    'det.patterns': 'Learned patterns that apply here',
    'det.similar': 'Similar to leads you accepted before',
    'det.accepted': 'Accepted',
    'det.companyProfile': 'Company profile',
    'det.sector': 'Industry',
    'det.city': 'Location',
    'det.size': 'Employees',
    'det.founded': 'Founded',
    'det.website': 'Website',
    'det.shortProfile': 'Short profile',
    'det.webExcerpts': 'Website excerpts',
    'det.sourcesTitle': 'Where this information comes from',
    'det.sourcesSub': 'You can trace every field in this lead back to a concrete public source.',
    'det.sourcesCount': 'sources',
    'det.fetched': 'fetched',
    'det.delivers': 'Provides:',
    'det.open': 'Open',
    'det.publicOnly': 'All sources are publicly accessible. Leadscraper never stores data from private or paid directories.',
    'det.decider': 'Decision maker',
    'det.contact': 'Contact',
    'det.draftMail': 'Prepare email draft',
    'det.toCRM': 'Send to CRM',
    'det.memoryHint': 'Note for your memory',
    'det.memoryHintText': 'If you accept or reject this lead, it affects similar leads in “{profile}” — but not your other profiles.',

    'src.official': 'Official',
    'src.web': 'Company site',
    'src.directory': 'Directory',
    'src.news': 'Trade press',
    'src.derived': 'By Leadscraper',

    // --- Profile-Detail (360°) ---
    'pd.screenLabel': 'Profile details',
    'pd.activeSince': 'Active since {date}',
    'pd.ratings': '{n} ratings',
    'pd.runs': '{n} search runs',
    'pd.openLeads': 'Open leads',
    'pd.curve.title': 'Learning curve',
    'pd.curve.sub': 'How the match rate has evolved with every rating.',
    'pd.curve.noData': 'Not enough data yet.',
    'pd.curve.liftLabel': 'Improvement since start',
    'pd.curve.liftSub': 'absolute match rate',
    'pd.curve.inWeeks': 'in {n} weeks',
    'pd.curve.start': 'Start',
    'pd.curve.coldSub': 'Cold',
    'pd.curve.milestone50': '50 ratings',
    'pd.curve.milestone50Sub': 'first patterns',
    'pd.curve.milestone200': '200 ratings',
    'pd.curve.milestone200Sub': 'model stabilized',
    'pd.curve.today': 'Today',
    'pd.curve.todaySub': '{n} ratings',
    'pd.patterns.title': 'What Leadscraper has learned',
    'pd.patterns.sub': 'Your preferences — extracted from every Fit / Not-fit rating.',
    'pd.patterns.strong': 'Strong — reliable rules',
    'pd.patterns.medium': 'Medium — plausible, being watched',
    'pd.patterns.weak': 'Weak — early signals',
    'pd.leads.title': 'Recent leads',
    'pd.leads.sub': 'Preview — the full list lives on the Leads tab.',
    'pd.leads.viewAll': 'View all',
    'pd.side.focus': 'Search focus',
    'pd.side.reasons': 'Common rejection reasons',
    'pd.side.recommended': 'Recommended',
    'pd.side.next1.t': 'Start a search run',
    'pd.side.next1.d': 'At a {pct} % match rate, 50–100 fresh leads pay off.',
    'pd.side.next2.t': 'Review unconfirmed patterns',
    'pd.side.next2.d': 'That way Leadscraper learns faster.',
    'pd.side.next3.t': 'Keep giving feedback',
    'pd.side.next3.d': 'The more ratings, the more precise.',
    'pd.side.snapshot': 'At a glance',
    'pd.side.matchRate': 'Match rate',
    'pd.side.leadsTotal': 'Total leads',
    'pd.side.accepted': '({n} accepted)',
    'pd.side.patterns': 'Patterns',
    'pd.side.patternsSub': '{strong} strong · {medium} medium',
    'pd.side.lastRun': 'Last run',
    'pd.side.lastRunLeads': '{n} leads',
    'pd.side.firstRun': 'First run',
    'pd.side.feedbacks': 'Ratings',
    'pd.side.matchMiss': 'Fit / Not',
    'pd.pat.confirm': 'Confirm',
    'pd.pat.confirmT': 'Confirm — adopt as rule',
    'pd.pat.reject': 'Reject',
    'pd.pat.rejectT': 'Reject — delete pattern',
    'pd.pat.weaken': 'Weaken',
    'pd.pat.remove': 'Remove',
    'pd.pat.actions': 'Actions',
    'pd.toast.confirmed': 'Pattern confirmed — applied from now on as a reliable rule',
    'pd.toast.rejected': 'Pattern rejected',
    'pd.toast.weakened': 'Pattern weakened — will be observed anew',
    'pd.toast.removed': 'Pattern removed',

    // --- Search results screen ---
    'res.new': 'New',
    'res.uncertainty': 'Leadscraper is {score} here — {text}.',
    'res.fromMem': 'from your memory: „{text}"',
    'res.fit': 'Fit',
    'res.notFit': 'Not a fit',
    'res.openDetails': 'Open details →',
    'res.pickReason': 'Pick a reason →',
    'res.acceptedNote': 'Leadscraper learns from this acceptance.',
    'res.rejectedNote': 'Reason saved. That sharpens your memory.',
    'res.whyNotTitle': 'Why is this lead not a fit?',
    'res.cancel': 'Cancel',
    'res.reasonHint': 'One click is enough — your reason sharpens what you see tomorrow.',
    'res.toast.accepted': '„{company}" saved as Fit. Leadscraper sharpens your profile.',
    'res.toast.rejected': 'Reason „{reason}" saved. Similar leads will become rarer.',
    'res.breadcrumb': 'Search results · {profile}',
    'res.title': 'Leads — {profile}',
    'res.summary': '{count} leads out of 412 reviewed. Each comes with one sentence on why it fits you — your „Fit / Not fit" sharpens what you see tomorrow.',
    'res.density.comfortable': 'Comfortable',
    'res.density.compact': 'Compact',
    'res.filter': 'Filter',
    'res.fb.status': 'Feedback status',
    'res.fb.all': 'All',
    'res.fb.new': 'New to you',
    'res.sector': 'Sector',
    'res.employees': 'Employees',
    'res.location': 'Location',
    'res.learning.title': 'What Leadscraper is learning',
    'res.learning.body': 'New signal over the past two weeks: you accept businesses with their own printing or die-cutting more often than pure converters.',
    'res.footer': 'Leadscraper reviewed another 406 entries. The {count} shown here are the ones that best match your feedback so far.',

    'dash.close': 'Close',
    'dash.months': 'May,Jun,Jul,Aug,Sep,Oct,Nov,Dec,Jan,Feb,Mar,Apr',

    // --- Onboarding gate ---
    'og.later': 'Decide later →',
    'og.ready': 'Your account is ready',
    'og.welcome': 'Welcome, Janik.',
    'og.sub1': 'Pick your plan to try Leadscraper',
    'og.sub1b': 'free for 3 days',
    'og.sub2': 'No payment now — cancel anytime during the trial.',
    'og.moneyBack': '14-day money-back',
    'og.dsgvo': 'GDPR-compliant · servers in DE',
    'og.cancelAny': 'Cancel anytime',
    'og.cta': 'Start 3-day free trial — {plan}',
    'og.ctaSub': 'No charge for the first 3 days · then € {price}.00 / month · {leads} trial leads included',
    'og.recommended': 'Recommended',
    'og.plan': 'Plan',
    'og.perMonth': '€ / month',
    'og.leadsIncl': '{n} leads per month included',
    'og.trial': '3 days free',
    'og.trialIncl': 'incl.',
    'og.trialLeadsN': '{n} trial leads',

    // --- Memory editor modal + extras ---
    'mem.editKicker': 'Correct learned assumption',
    'mem.editTitle': 'How should Leadscraper learn this?',
    'mem.editHint': 'Leadscraper uses this statement from the next sorting run.',
    'mem.cancel': 'Cancel',
    'mem.save': 'Save assumption',
    'mem.toast.confirmed': 'Assumption confirmed.',
    'mem.toast.forgotten': 'Assumption forgotten.',
    'mem.toast.corrected': 'Correction saved.',
    'mem.screenLabelEmpty': 'Cortex · empty',
    'mem.screenLabel': 'Cortex',
    'mem.today': 'Today',
    'mem.param.sector': 'Sector',
    'mem.param.location': 'Location',
    'mem.param.contact': 'Contact',
    'mem.param.extras': 'Extras',
    'mem.param.leads': 'Leads',
    'mem.profile': 'Profile',

    // --- Notifications / patterns ---
    'notif.pattern.confirmedLabel': 'Pattern confirmed.',
    'notif.pattern.rejectedLabel': 'Pattern rejected.',


    // --- Pricing ---
    'price.heroTrial': 'Your unfair competitive advantage starts here.',
    'price.heroSub': 'More leads — exactly when you need them.',
    'price.subTrialDesc': 'Try for 3 days free — with real leads, your own profiles, your own Cortex. Unusable leads? You get the credit back, no questions asked.',
    'price.subOneoffDesc': 'Additional leads as a one-off package — no contract, no lock-in. Credits never expire.',
    'price.tab.sub': 'Subscriptions',
    'price.tab.oneoff': 'One-off packages',
    'price.tab.afterSub': '(after subscription)',
    'price.tab.lockNote': 'Available after subscription',
    'price.trust.refund.t': 'Bad leads? Refunded.',
    'price.trust.refund.s': 'If a lead doesn’t fit, the credit comes back instantly.',
    'price.trust.gdpr.t': 'GDPR-compliant',
    'price.trust.gdpr.s': 'All data EU-hosted, encrypted, never shared with third parties.',
    'price.trust.cancel.t': 'Cancel anytime',
    'price.trust.cancel.s': 'Monthly cancellation, no hidden fees, no minimum term.',
    'price.selected': 'Selected:',
    'price.trial3days': '3 days free',
    'price.testLeads': 'trial leads',
    'price.then': 'then',
    'price.perMonth': '/month',
    'price.perMonthLong': '/ month',
    'price.leads': 'Leads',
    'price.oneTime': 'one-time',
    'price.perLead': '€ / lead',
    'price.ctaStartTrial': 'Start 3 days free',
    'price.ctaSwitchPlan': 'Switch plan',
    'price.ctaTopUp': 'Top up now',
    'price.badge.recommended': 'Recommended',
    'price.badge.popular': 'Popular',
    'price.badge.yourPlan': 'Your plan',
    'price.monthlyCancelable': 'cancel monthly',
    'price.afterThen': 'Then {price} / month · cancel anytime',
    'price.trialIncl': 'incl.',
    'price.plan.basic.tag': 'To get started with one profile',
    'price.plan.starter.tag': 'Perfect to start',
    'price.plan.growth.tag': 'For scaling sales teams',
    'price.plan.basic.f1': '100 qualified leads per month',
    'price.plan.basic.f2': '1 active profile',
    'price.plan.basic.f3': 'Cortex AI with continuous learning',
    'price.plan.basic.f4': 'CRM integrations (HubSpot, Pipedrive, Salesforce …)',
    'price.plan.basic.f5': 'Email support',
    'price.plan.starter.f1': '250 qualified leads per month',
    'price.plan.starter.f2': '3 active profiles',
    'price.plan.starter.f3': 'Cortex AI with prioritized learning',
    'price.plan.starter.f4': 'All CRM integrations',
    'price.plan.starter.f5': 'Priority support',
    'price.plan.starter.f6': 'Export to CSV, XLSX, JSON',
    'price.plan.growth.f1': '500 qualified leads per month',
    'price.plan.growth.f2': 'Unlimited profiles',
    'price.plan.growth.f3': 'Cortex AI with team memory',
    'price.plan.growth.f4': 'All CRM integrations + webhooks',
    'price.plan.growth.f5': 'Dedicated account manager',
    'price.plan.growth.f6': 'API access',
    'price.pack.1000.tag': 'Perfect to get started',
    'price.pack.5000.tag': 'For first scaled campaigns',
    'price.pack.10000.tag': 'For continuous lead generation',
    'price.pack.50000.tag': 'For high volume and teams',
    'trial.phase': 'Trial',
    'trial.day1': '1 day left',
    'trial.daysN': '{n} days left',
    'trial.freeTest': 'of free trial.',
    'trial.afterNote': 'After that, your {plan} plan continues automatically — cancel anytime.',
    'trial.leadsLeft': '{left} / {total} trial leads left',
    'trial.secureSub': 'Lock in plan',

    // --- Cortex AI chat ---
    'ai.onlinePrefix': 'Online · knows your {n} profiles',
    'ai.collapse': 'Collapse',
    'ai.intro': 'I watch your profiles 24/7 and help you write sharper search runs and cleaner learning signals.',
    'ai.cortex': 'Cortex',
    'ai.now': 'now',
    'ai.greeting': 'Hey 👋 I’m Cortex. I see your active profile "{profile}" and every pattern the system has learned. What’s on your mind?',
    'ai.thinkingAbout': 'What I’m thinking about',
    'ai.quickStart': 'Quick start',
    'ai.openChat': 'Open chat',
    'ai.moreN': '+{n} more',
    'ai.dismiss': 'Hide',
    'ai.inputP': 'Ask Cortex something …',
    'ai.send': 'Send',
    'ai.footer': 'Cortex only knows your profiles and feedbacks — no external data.',
    'ai.errorReply': 'I can’t reach my data right now. Try again in a second — or phrase the question more briefly.',
    'ai.ins.pattern.title': 'New pattern in "{profile}"',
    'ai.ins.pattern.cta': 'Review pattern',
    'ai.ins.tune.title': '"{profile}" is still training',
    'ai.ins.tune.body': 'Match rate is {rate} %. I can help you frame the next search run more precisely.',
    'ai.ins.tune.cta': 'Sharpen search',
    'ai.ins.edge.title': 'Edge case: {company}',
    'ai.ins.edge.fallback': 'Leadscraper is unsure here — your verdict helps sharpen the pattern.',
    'ai.ins.edge.cta': 'Open lead',
    'ai.sp1.label': 'Where does my active profile stand?',
    'ai.sp1.prompt': 'Summarize in 3 sentences how well Leadscraper already understands my active profile — what has it learned, what hasn’t it?',
    'ai.sp2.label': 'Which patterns should I confirm?',
    'ai.sp2.prompt': 'Which learned patterns should I confirm or reject next so the system learns faster?',
    'ai.sp3.label': 'Suggest a search run',
    'ai.sp3.prompt': 'Based on my active profile, suggest a precise next search run — with industry, location, size and extras.',
    'ai.sp4.label': 'Where am I losing quality?',
    'ai.sp4.prompt': 'Where across my profiles do you see potential for higher match rates? What should I adjust?',
    'ai.seedRefine': 'Suggest a refined search run for my profile "{profile}".',
    'ai.langHint': 'Respond in English. Max 3-4 short sentences per answer, except for concrete instructions.',
  },
};

// Global lang state wired through a tiny event bus
const LangStore = (() => {
  let current = localStorage.getItem('ls_lang') || 'de';
  const listeners = new Set();
  return {
    get: () => current,
    set: (l) => {
      current = l;
      localStorage.setItem('ls_lang', l);
      listeners.forEach(cb => cb());
    },
    subscribe: (cb) => { listeners.add(cb); return () => listeners.delete(cb); },
  };
})();

function useLang() {
  const [, force] = useState(0);
  useEffect(() => LangStore.subscribe(() => force(n => n + 1)), []);
  return LangStore.get();
}

function t(key, vars) {
  const lang = LangStore.get();
  let s = (I18N[lang] && I18N[lang][key]) || I18N.de[key] || key;
  if (vars) Object.entries(vars).forEach(([k, v]) => { s = s.replace(`{${k}}`, v); });
  return s;
}

Object.assign(window, { I18N, LangStore, useLang, t });
